From 572add81b96f0ea00224f1934411b824031d0b87 Mon Sep 17 00:00:00 2001 From: disenotov Date: Fri, 19 Apr 2024 09:48:25 +0300 Subject: [PATCH 01/25] feat: update wrapper on arbitrum testnet, base testnet, polygon testnet --- .../RaribleExchangeWrapper.json | 692 ++++++++++++++++++ .../5fd82e04a71dd28dcf06afe03af2d381.json | 617 ++++++++++++++++ .../base_sepolia/RaribleExchangeWrapper.json | 64 +- .../5fd82e04a71dd28dcf06afe03af2d381.json | 617 ++++++++++++++++ .../RaribleExchangeWrapper.json | 78 +- .../5fd82e04a71dd28dcf06afe03af2d381.json | 617 ++++++++++++++++ .../networks/arbitrum_sepolia.md | 1 + .../hardhat-deploy/networks/base_sepolia.md | 2 +- .../networks/polygon_amoy_testnet.md | 2 +- .../utils/config/arbitrum_sepolia.json | 4 +- 10 files changed, 2633 insertions(+), 61 deletions(-) create mode 100644 projects/hardhat-deploy/deployments/arbitrum_sepolia/RaribleExchangeWrapper.json create mode 100644 projects/hardhat-deploy/deployments/arbitrum_sepolia/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json create mode 100644 projects/hardhat-deploy/deployments/base_sepolia/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json create mode 100644 projects/hardhat-deploy/deployments/polygon_amoy_testnet/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json diff --git a/projects/hardhat-deploy/deployments/arbitrum_sepolia/RaribleExchangeWrapper.json b/projects/hardhat-deploy/deployments/arbitrum_sepolia/RaribleExchangeWrapper.json new file mode 100644 index 000000000..b706524a4 --- /dev/null +++ b/projects/hardhat-deploy/deployments/arbitrum_sepolia/RaribleExchangeWrapper.json @@ -0,0 +1,692 @@ +{ + "address": "0x6374B7AC4b09a4C211ebf83e8DBB934D03487f82", + "abi": [ + { + "inputs": [ + { + "internalType": "address[11]", + "name": "marketplaces", + "type": "address[11]" + }, + { + "internalType": "address", + "name": "_weth", + "type": "address" + }, + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "result", + "type": "bool" + } + ], + "name": "Execution", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "Paused", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + } + ], + "name": "approveWETH", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "blur", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapper.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapper.PurchaseDetails[]", + "name": "purchaseDetails", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowFail", + "type": "bool" + } + ], + "name": "bulkPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "exchangeV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRare", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRareV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_paused", + "type": "bool" + } + ], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_4", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_5", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_6", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapper.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapper.PurchaseDetails", + "name": "purchaseDetails", + "type": "tuple" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + } + ], + "name": "singlePurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "sudoswap", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "weth", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wyvernExchange", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "x2y2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x7a812865bfcbccee00f5e3c411b54ca99f2aa55ddf56e12551fb7a1488abf42a", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x6374B7AC4b09a4C211ebf83e8DBB934D03487f82", + "transactionIndex": 1, + "gasUsed": "4210107", + "logsBloom": "0x00000000000000000000000000000000000000000000008000800000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020100000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xf8554772438875219125b17c5038915a87e77ddd9f3b9f63d5f6ddd81c463ca5", + "transactionHash": "0x7a812865bfcbccee00f5e3c411b54ca99f2aa55ddf56e12551fb7a1488abf42a", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 35212343, + "transactionHash": "0x7a812865bfcbccee00f5e3c411b54ca99f2aa55ddf56e12551fb7a1488abf42a", + "address": "0x6374B7AC4b09a4C211ebf83e8DBB934D03487f82", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xf8554772438875219125b17c5038915a87e77ddd9f3b9f63d5f6ddd81c463ca5" + } + ], + "blockNumber": 35212343, + "cumulativeGasUsed": "4210107", + "status": 1, + "byzantium": true + }, + "args": [ + [ + "0x0000000000000000000000000000000000000000", + "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "0x00000000006c3852cbEf3e08E8dF289169EdE581", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x00000000000001ad428e4906aE43D8F9852d0dD6", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", + "0x0000000000000068F116a894984e2DB1123eB395" + ], + "0x0000000000000000000000000000000000000000", + [ + "0x2FCE8435F0455eDc702199741411dbcD1B7606cA" + ] + ], + "numDeployments": 1, + "solcInputHash": "5fd82e04a71dd28dcf06afe03af2d381", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[11]\",\"name\":\"marketplaces\",\"type\":\"address[11]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_6\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":\"RaribleExchangeWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165 is IERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n constructor () internal {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Receiver.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\ncontract ERC1155Holder is ERC1155Receiver {\\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155BatchReceived.selector;\\n }\\n}\\n\",\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155Receiver.sol\\\";\\nimport \\\"../../introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\\n constructor() internal {\\n _registerInterface(\\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n}\\n\",\"keccak256\":\"0x57a0e246fb1c8f9cccf91c508eafe474e40260a31de3a39019ba8312cfdf9b2d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155Receiver is IERC165 {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC721Receiver.sol\\\";\\n\\n /**\\n * @dev Implementation of the {IERC721Receiver} interface.\\n *\\n * Accepts all token transfers. \\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\\n */\\ncontract ERC721Holder is IERC721Receiver {\\n\\n /**\\n * @dev See {IERC721Receiver-onERC721Received}.\\n *\\n * Always returns `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n}\\n\",\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3a89b0a6ff66280e8e48f9f2c862d5c0e8ab23ee306ae5b204cd588931661a93\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n}\\n\",\"keccak256\":\"0xa9d02b9e22ffb9d25f412979951822d56b05d857de1f47ce82ad7b4a8d4601f6\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\\\";\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport \\\"./interfaces/IWyvernExchange.sol\\\";\\nimport \\\"./interfaces/IExchangeV2.sol\\\";\\nimport \\\"./interfaces/ISeaPort.sol\\\";\\nimport \\\"./interfaces/Ix2y2.sol\\\";\\nimport \\\"./interfaces/ILooksRare.sol\\\";\\nimport \\\"./interfaces/IBlur.sol\\\";\\n\\nimport \\\"./libraries/IsPausable.sol\\\";\\n\\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\\n using LibTransfer for address;\\n using BpLibrary for uint;\\n using SafeMath for uint;\\n\\n //marketplaces\\n address public immutable wyvernExchange;\\n address public immutable exchangeV2;\\n address public immutable seaPort_1_1;\\n address public immutable x2y2;\\n address public immutable looksRare;\\n address public immutable sudoswap;\\n address public immutable seaPort_1_4;\\n address public immutable looksRareV2;\\n address public immutable blur;\\n address public immutable seaPort_1_5;\\n address public immutable seaPort_1_6;\\n\\n //currencties\\n address public immutable weth;\\n\\n //constants\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n event Execution(bool result);\\n\\n enum Markets {\\n ExchangeV2,//0\\n WyvernExchange,//1\\n SeaPort_1_1,//2\\n X2Y2,//3\\n LooksRareOrders,//4\\n SudoSwap,//5\\n SeaPort_1_4,//6\\n LooksRareV2,//7\\n Blur,//8\\n SeaPort_1_5,//9\\n SeaPort_1_6//10\\n }\\n\\n enum AdditionalDataTypes {\\n NoAdditionalData,\\n RoyaltiesAdditionalData\\n }\\n\\n enum Currencies {\\n ETH,\\n WETH\\n }\\n\\n /**\\n @notice struct for the purchase data\\n @param marketId - market key from Markets enum (what market to use)\\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\\n bytes (27,28) used for dataType\\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\\n @param data - data for market call\\n */\\n struct PurchaseDetails {\\n Markets marketId;\\n uint256 amount;\\n uint fees;\\n bytes data;\\n }\\n\\n /**\\n @notice struct for the data with additional Ddta\\n @param data - data for market call\\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\\n */\\n struct AdditionalData {\\n bytes data;\\n uint[] additionalRoyalties;\\n }\\n\\n constructor(\\n address[11] memory marketplaces,\\n //address _wyvernExchange, 0\\n //address _exchangeV2, 1\\n //address _seaPort_1_1, 2\\n //address _x2y2, 3\\n //address _looksRare, 4\\n //address _sudoswap, 5\\n //address _seaPort_1_4, 6\\n //address _looksRareV2, 7\\n //address _blur, 8\\n //address _seaPort_1_5, 9\\n //address _seaPort_1_6, 10\\n address _weth,\\n address[] memory transferProxies\\n ) {\\n wyvernExchange = marketplaces[0];\\n exchangeV2 = marketplaces[1];\\n seaPort_1_1 = marketplaces[2];\\n x2y2 = marketplaces[3];\\n looksRare = marketplaces[4];\\n sudoswap = marketplaces[5];\\n seaPort_1_4 = marketplaces[6];\\n looksRareV2 = marketplaces[7];\\n blur = marketplaces[8];\\n seaPort_1_5 = marketplaces[9];\\n seaPort_1_6 = marketplaces[10];\\n\\n weth = _weth;\\n\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n if (_weth != address(0)){\\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n }\\n\\n /**\\n @notice executes a single purchase\\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n */\\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\\n requireNotPaused();\\n \\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\\n \\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n Currencies currency = getCurrency(purchaseDetails.fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n emit Execution(success);\\n \\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes an array of purchases\\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\\n */\\n \\n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\\n requireNotPaused();\\n\\n uint sumFirstFeesETH = 0;\\n uint sumSecondFeesETH = 0;\\n uint sumFirstFeesWETH = 0;\\n uint sumSecondFeesWETH = 0;\\n bool result = false;\\n\\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = 0;\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\\n }\\n\\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n Currencies currency = getCurrency(purchaseDetails[i].fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n result = result || success;\\n emit Execution(success);\\n }\\n\\n require(result, \\\"no successful executions\\\");\\n\\n //pay fees in ETH \\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\\n\\n //pay fees in WETH\\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\\n\\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes one purchase in ETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n uint paymentAmount = purchaseDetails.amount;\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase wyvernExchange failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\\n\\n if (allowFail) {\\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n Ix2y2(x2y2).run{value : paymentAmount}(input);\\n }\\n\\n //for every element in input.details[] getting\\n // order = input.details[i].orderIdx\\n // and from that order getting item = input.details[i].itemId\\n for (uint i = 0; i < input.details.length; ++i) {\\n uint orderId = input.details[i].orderIdx;\\n uint itemId = input.details[i].itemIdx;\\n bytes memory data = input.orders[orderId].items[itemId].data;\\n {\\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\\n }\\n }\\n\\n // 1 = erc-721\\n if (input.orders[orderId].delegateType == 1) {\\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair721 memory p = pairs[j];\\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\\n }\\n } else if (input.orders[orderId].delegateType == 2) {\\n // 2 = erc-1155\\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair1155 memory p = pairs[j];\\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \\\"\\\");\\n }\\n } else {\\n revert(\\\"unknown delegateType x2y2\\\");\\n }\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\\n if (allowFail) {\\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase sudoswap failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase LooksRareV2 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.Blur){\\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\\n if (allowFail) {\\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId ETH\\\");\\n }\\n\\n //transferring royalties\\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\\n \\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice executes one purchase in WETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n\\n //buying\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed WETH\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId WETH\\\");\\n }\\n \\n //transfer royalties\\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\\n\\n //get fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice transfers ETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n LibTransfer.transferEth(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers WETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers change back to sender\\n */\\n function transferChange() internal {\\n uint ethAmount = address(this).balance;\\n if (ethAmount > 0) {\\n address(msg.sender).transferEth(ethAmount);\\n }\\n }\\n\\n /**\\n @notice transfers weth change back to sender\\n */\\n function transferChangeWETH() internal {\\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\\n if (wethAmount > 0) {\\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\\n }\\n }\\n\\n /**\\n @notice parses fees in base points from one uint and calculates real amount of fees\\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\\n @param amount price of the order\\n @return firstFeeAmount real amount for the first fee\\n @return secondFeeAmount real amount for the second fee\\n */\\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\\n uint firstFee = uint(uint16(fees >> 16));\\n uint secondFee = uint(uint16(fees));\\n return (amount.bp(firstFee), amount.bp(secondFee));\\n }\\n\\n /**\\n @notice parses \\\"fees\\\" field to find the currency for the purchase\\n @param fees field with encoded data\\n @return 0 if ETH, 1 if WETH ERC-20\\n */\\n function getCurrency(uint fees) internal pure returns(Currencies) {\\n return Currencies(uint16(fees >> 48));\\n }\\n\\n\\n /**\\n @notice parses _data to data for market call and additionalData\\n @param feesAndDataType 27 and 28 bytes for dataType\\n @return marketData data for market call\\n @return additionalRoyalties array uint256, (base point + address)\\n */\\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\\n uint[] memory additionalRoyalties;\\n\\n //return no royalties if wrong data type\\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\\n return (_data, additionalRoyalties);\\n }\\n\\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\\n\\n //return no royalties if market doesn't support royalties\\n if (supportsRoyalties(marketId)) {\\n return (additionalData.data, additionalData.additionalRoyalties);\\n } else {\\n return (additionalData.data, additionalRoyalties);\\n } \\n }\\n \\n revert(\\\"unknown additionalDataType\\\");\\n }\\n\\n /**\\n @notice transfer additional royalties in ETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeETH(value, account);\\n }\\n }\\n }\\n\\n /**\\n @notice transfer additional royalties in WETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeWETH(value, account);\\n }\\n }\\n }\\n\\n // modifies `src`\\n function _arrayReplace(\\n bytes memory src,\\n bytes memory replacement,\\n bytes memory mask\\n ) internal view virtual {\\n require(src.length == replacement.length);\\n require(src.length == mask.length);\\n\\n for (uint256 i = 0; i < src.length; ++i) {\\n if (mask[i] != 0) {\\n src[i] = replacement[i];\\n }\\n }\\n }\\n\\n /**\\n @notice returns true if this contract supports additional royalties for the marketplace;\\n now royalties are supported for:\\n 1. SudoSwap\\n 2. LooksRare old\\n 3. LooksRare V2\\n */\\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\\n if (\\n marketId == Markets.SudoSwap ||\\n marketId == Markets.LooksRareOrders ||\\n marketId == Markets.LooksRareV2\\n ) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\\n uint result = 0;\\n\\n Currencies currency = getCurrency(detail.fees);\\n\\n //for every purchase with WETH we sum amount, fees and royalties needed\\n if (currency == Currencies.WETH) {\\n\\n //add amount\\n result = result + detail.amount;\\n\\n //add fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\\n result = result + firstFeeAmount + secondFeeAmount;\\n\\n //add royalties\\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\\n for (uint j = 0; j < royalties.length; ++j) {\\n uint royaltyBasePoint = uint(royalties[j] >> 160);\\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\\n result = result + royaltyValue;\\n }\\n }\\n\\n return result;\\n }\\n\\n /**\\n @notice approves weth for a list of the addresses\\n @param transferProxies - array of addresses to approve WETH for\\n */\\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n receive() external payable {}\\n}\",\"keccak256\":\"0xe2bc3642e9df1b789a04dadbb81842deef698616ecc68aa2a4d89252dda77783\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\n\\ninterface IBlur {\\n enum Side { Buy, Sell }\\n enum SignatureVersion { Single, Bulk }\\n enum AssetType { ERC721, ERC1155 }\\n\\n struct Fee {\\n uint16 rate;\\n address payable recipient;\\n }\\n \\n struct Order {\\n address trader;\\n Side side;\\n address matchingPolicy;\\n address collection;\\n uint256 tokenId;\\n uint256 amount;\\n address paymentToken;\\n uint256 price;\\n uint256 listingTime;\\n /* Order expiration timestamp - 0 for oracle cancellations. */\\n uint256 expirationTime;\\n Fee[] fees;\\n uint256 salt;\\n bytes extraParams;\\n }\\n\\n struct Input {\\n Order order;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n bytes extraSignature;\\n SignatureVersion signatureVersion;\\n uint256 blockNumber;\\n }\\n\\n function execute(Input calldata sell, Input calldata buy)\\n external\\n payable;\\n}\\n\",\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-v2/contracts/ExchangeV2.sol\\\";\\n\\nimport {RoyaltiesRegistry} from \\\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\\\";\\nimport {TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\\\";\\nimport {ERC20TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\\\";\\n\\ninterface IExchangeV2 {\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable;\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable;\\n}\",\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibLooksRare.sol\\\";\\n\\ninterface ILooksRare {\\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\\n\\n /**\\n * @notice This function allows a user to execute a taker bid (against a maker ask).\\n * @param takerBid Taker bid struct\\n * @param makerAsk Maker ask struct\\n * @param makerSignature Maker signature\\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\\n * @param affiliate Affiliate address\\n */\\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\\n}\\n\",\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibSeaPort.sol\\\";\\n\\ninterface ISeaPort {\\n function fulfillAdvancedOrder(\\n LibSeaPort.AdvancedOrder calldata advancedOrder,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n bytes32 fulfillerConduitKey,\\n address recipient\\n ) external payable returns (bool fulfilled);\\n\\n function fulfillAvailableAdvancedOrders(\\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\\n bytes32 fulfillerConduitKey,\\n address recipient,\\n uint256 maximumFulfilled\\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\\n\\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\\n external\\n payable\\n returns (bool fulfilled);\\n}\",\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface IWyvernExchange {\\n function atomicMatch_(\\n address[14] memory addrs,\\n uint[18] memory uints,\\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\\n bytes memory calldataBuy,\\n bytes memory calldataSell,\\n bytes memory replacementPatternBuy,\\n bytes memory replacementPatternSell,\\n bytes memory staticExtradataBuy,\\n bytes memory staticExtradataSell,\\n uint8[2] memory vs,\\n bytes32[5] memory rssMetadata)\\n external\\n payable;\\n\\n enum Side {\\n Buy,\\n Sell\\n }\\n\\n enum SaleKind {\\n FixedPrice,\\n DutchAuction\\n }\\n\\n function calculateFinalPrice(\\n Side side,\\n SaleKind saleKind,\\n uint256 basePrice,\\n uint256 extra,\\n uint256 listingTime,\\n uint256 expirationTime\\n ) external view returns (uint256);\\n}\",\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface Ix2y2 {\\n\\n struct OrderItem {\\n uint256 price;\\n bytes data;\\n }\\n\\n struct Pair721 {\\n address token;\\n uint256 tokenId;\\n }\\n\\n struct Pair1155 {\\n address token;\\n uint256 tokenId;\\n uint256 amount;\\n }\\n\\n struct Order {\\n uint256 salt;\\n address user;\\n uint256 network;\\n uint256 intent;\\n uint256 delegateType;\\n uint256 deadline;\\n address currency;\\n bytes dataMask;\\n OrderItem[] items;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n uint8 signVersion;\\n }\\n\\n struct Fee {\\n uint256 percentage;\\n address to;\\n }\\n\\n struct SettleDetail {\\n Op op;\\n uint256 orderIdx;\\n uint256 itemIdx;\\n uint256 price;\\n bytes32 itemHash;\\n address executionDelegate;\\n bytes dataReplacement;\\n uint256 bidIncentivePct;\\n uint256 aucMinIncrementPct;\\n uint256 aucIncDurationSecs;\\n Fee[] fees;\\n }\\n\\n struct SettleShared {\\n uint256 salt;\\n uint256 deadline;\\n uint256 amountToEth;\\n uint256 amountToWeth;\\n address user;\\n bool canFail;\\n }\\n\\n struct RunInput {\\n Order[] orders;\\n SettleDetail[] details;\\n SettleShared shared;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n }\\n\\n enum Op {\\n INVALID,\\n // off-chain\\n COMPLETE_SELL_OFFER,\\n COMPLETE_BUY_OFFER,\\n CANCEL_OFFER,\\n // auction\\n BID,\\n COMPLETE_AUCTION,\\n REFUND_AUCTION,\\n REFUND_AUCTION_STUCK_ITEM\\n }\\n\\n function run(RunInput memory input) external payable;\\n}\",\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nabstract contract IsPausable is Ownable {\\n bool public paused;\\n\\n event Paused(bool paused);\\n\\n function pause(bool _paused) external onlyOwner {\\n paused = _paused;\\n emit Paused(_paused);\\n }\\n\\n function requireNotPaused() internal view {\\n require (!paused, \\\"the contract is paused\\\");\\n }\\n\\n}\\n\",\"keccak256\":\"0xd0ea1d6838dd79b8cfe64e777e4f84456928f0e3621fbb6acd00492e738b2b61\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibLooksRare {\\n struct MakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address signer; // signer of the maker order\\n address collection; // collection address\\n uint256 price; // price (used as )\\n uint256 tokenId; // id of the token\\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\\n address currency; // currency (e.g., WETH)\\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\\n uint256 startTime; // startTime in timestamp\\n uint256 endTime; // endTime in timestamp\\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // additional parameters\\n uint8 v; // v: parameter (27 or 28)\\n bytes32 r; // r: parameter\\n bytes32 s; // s: parameter\\n }\\n\\n struct TakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address taker; // msg.sender\\n uint256 price; // final price for the purchase\\n uint256 tokenId;\\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // other params (e.g., tokenId)\\n }\\n\\n /**\\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\\n */\\n enum CollectionType {\\n ERC721,\\n ERC1155\\n }\\n\\n /**\\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\\n */\\n enum QuoteType {\\n Bid,\\n Ask\\n }\\n /**\\n * 1. Maker struct\\n */\\n\\n /**\\n * @notice Maker is the struct for a maker order.\\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\\n * @param globalNonce Global user order nonce for maker orders\\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\\n * @param strategyId Strategy id\\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\\n * @param collection Collection address\\n * @param currency Currency address (@dev address(0) = ETH)\\n * @param signer Signer address\\n * @param startTime Start timestamp\\n * @param endTime End timestamp\\n * @param price Minimum price for maker ask, maximum price for maker bid\\n * @param itemIds Array of itemIds\\n * @param amounts Array of amounts\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Maker {\\n QuoteType quoteType;\\n uint256 globalNonce;\\n uint256 subsetNonce;\\n uint256 orderNonce;\\n uint256 strategyId;\\n CollectionType collectionType;\\n address collection;\\n address currency;\\n address signer;\\n uint256 startTime;\\n uint256 endTime;\\n uint256 price;\\n uint256[] itemIds;\\n uint256[] amounts;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 2. Taker struct\\n */\\n\\n /**\\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Taker {\\n address recipient;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 3. Merkle tree struct\\n */\\n\\n enum MerkleTreeNodePosition {\\n Left,\\n Right\\n }\\n\\n /**\\n * @notice MerkleTreeNode is a MerkleTree's node.\\n * @param value It can be an order hash or a proof\\n * @param position The node's position in its branch.\\n * It can be left or right or none\\n * (before the tree is sorted).\\n */\\n struct MerkleTreeNode {\\n bytes32 value;\\n MerkleTreeNodePosition position;\\n }\\n\\n /**\\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\\n * @dev A Merkle tree can be computed with order hashes.\\n * It can contain order hashes from both maker bid and maker ask structs.\\n * @param root Merkle root\\n * @param proof Array containing the merkle proof\\n */\\n struct MerkleTree {\\n bytes32 root;\\n MerkleTreeNode[] proof;\\n }\\n}\\n\",\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibSeaPort {\\n /**\\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\\n * matching, a group of six functions may be called that only requires a\\n * subset of the usual order arguments. Note the use of a \\\"basicOrderType\\\"\\n * enum; this represents both the usual order type as well as the \\\"route\\\"\\n * of the basic order (a simple derivation function for the basic order\\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\\n */\\n struct BasicOrderParameters {\\n address considerationToken; // 0x24\\n uint256 considerationIdentifier; // 0x44\\n uint256 considerationAmount; // 0x64\\n address payable offerer; // 0x84\\n address zone; // 0xa4\\n address offerToken; // 0xc4\\n uint256 offerIdentifier; // 0xe4\\n uint256 offerAmount; // 0x104\\n BasicOrderType basicOrderType; // 0x124\\n uint256 startTime; // 0x144\\n uint256 endTime; // 0x164\\n bytes32 zoneHash; // 0x184\\n uint256 salt; // 0x1a4\\n bytes32 offererConduitKey; // 0x1c4\\n bytes32 fulfillerConduitKey; // 0x1e4\\n uint256 totalOriginalAdditionalRecipients; // 0x204\\n AdditionalRecipient[] additionalRecipients; // 0x224\\n bytes signature; // 0x244\\n }\\n /**\\n * @dev Basic orders can supply any number of additional recipients, with the\\n * implied assumption that they are supplied from the offered ETH (or other\\n * native token) or ERC20 token for the order.\\n */\\n struct AdditionalRecipient {\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum BasicOrderType {\\n // 0: no partial fills, anyone can execute\\n ETH_TO_ERC721_FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n ETH_TO_ERC721_PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC721_FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 4: no partial fills, anyone can execute\\n ETH_TO_ERC1155_FULL_OPEN,\\n\\n // 5: partial fills supported, anyone can execute\\n ETH_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 6: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 7: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 8: no partial fills, anyone can execute\\n ERC20_TO_ERC721_FULL_OPEN,\\n\\n // 9: partial fills supported, anyone can execute\\n ERC20_TO_ERC721_PARTIAL_OPEN,\\n\\n // 10: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC721_FULL_RESTRICTED,\\n\\n // 11: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 12: no partial fills, anyone can execute\\n ERC20_TO_ERC1155_FULL_OPEN,\\n\\n // 13: partial fills supported, anyone can execute\\n ERC20_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 14: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 15: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 16: no partial fills, anyone can execute\\n ERC721_TO_ERC20_FULL_OPEN,\\n\\n // 17: partial fills supported, anyone can execute\\n ERC721_TO_ERC20_PARTIAL_OPEN,\\n\\n // 18: no partial fills, only offerer or zone can execute\\n ERC721_TO_ERC20_FULL_RESTRICTED,\\n\\n // 19: partial fills supported, only offerer or zone can execute\\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\\n\\n // 20: no partial fills, anyone can execute\\n ERC1155_TO_ERC20_FULL_OPEN,\\n\\n // 21: partial fills supported, anyone can execute\\n ERC1155_TO_ERC20_PARTIAL_OPEN,\\n\\n // 22: no partial fills, only offerer or zone can execute\\n ERC1155_TO_ERC20_FULL_RESTRICTED,\\n\\n // 23: partial fills supported, only offerer or zone can execute\\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\\n }\\n\\n /**\\n * @dev The full set of order components, with the exception of the counter,\\n * must be supplied when fulfilling more sophisticated orders or groups of\\n * orders. The total number of original consideration items must also be\\n * supplied, as the caller may specify additional consideration items.\\n */\\n struct OrderParameters {\\n address offerer; // 0x00\\n address zone; // 0x20\\n OfferItem[] offer; // 0x40\\n ConsiderationItem[] consideration; // 0x60\\n OrderType orderType; // 0x80\\n uint256 startTime; // 0xa0\\n uint256 endTime; // 0xc0\\n bytes32 zoneHash; // 0xe0\\n uint256 salt; // 0x100\\n bytes32 conduitKey; // 0x120\\n uint256 totalOriginalConsiderationItems; // 0x140\\n // offer.length // 0x160\\n }\\n\\n /**\\n * @dev Orders require a signature in addition to the other order parameters.\\n */\\n struct Order {\\n OrderParameters parameters;\\n bytes signature;\\n }\\n\\n struct AdvancedOrder {\\n OrderParameters parameters;\\n uint120 numerator;\\n uint120 denominator;\\n bytes signature;\\n bytes extraData;\\n }\\n\\n struct OfferItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n }\\n\\n /**\\n * @dev A consideration item has the same five components as an offer item and\\n * an additional sixth component designating the required recipient of the\\n * item.\\n */\\n struct ConsiderationItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum OrderType {\\n // 0: no partial fills, anyone can execute\\n FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n PARTIAL_RESTRICTED\\n }\\n\\n // prettier-ignore\\n enum ItemType {\\n // 0: ETH on mainnet, MATIC on polygon, etc.\\n NATIVE,\\n\\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\\n ERC20,\\n\\n // 2: ERC721 items\\n ERC721,\\n\\n // 3: ERC1155 items\\n ERC1155,\\n\\n // 4: ERC721 items where a number of tokenIds are supported\\n ERC721_WITH_CRITERIA,\\n\\n // 5: ERC1155 items where a number of ids are supported\\n ERC1155_WITH_CRITERIA\\n }\\n\\n /**\\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\\n * offer and consideration items, then generates a single execution\\n * element. A given fulfillment can be applied to as many offer and\\n * consideration items as desired, but must contain at least one offer and\\n * at least one consideration that match. The fulfillment must also remain\\n * consistent on all key parameters across all offer items (same offerer,\\n * token, type, tokenId, and conduit preference) as well as across all\\n * consideration items (token, type, tokenId, and recipient).\\n */\\n struct Fulfillment {\\n FulfillmentComponent[] offerComponents;\\n FulfillmentComponent[] considerationComponents;\\n }\\n\\n /**\\n * @dev Each fulfillment component contains one index referencing a specific\\n * order and another referencing a specific offer or consideration item.\\n */\\n struct FulfillmentComponent {\\n uint256 orderIndex;\\n uint256 itemIndex;\\n }\\n\\n /**\\n * @dev An execution is triggered once all consideration items have been zeroed\\n * out. It sends the item in question from the offerer to the item's\\n * recipient, optionally sourcing approvals from either this contract\\n * directly or from the offerer's chosen conduit if one is specified. An\\n * execution is not provided as an argument, but rather is derived via\\n * orders, criteria resolvers, and fulfillments (where the total number of\\n * executions will be less than or equal to the total number of indicated\\n * fulfillments) and returned as part of `matchOrders`.\\n */\\n struct Execution {\\n ReceivedItem item;\\n address offerer;\\n bytes32 conduitKey;\\n }\\n\\n /**\\n * @dev A received item is translated from a utilized consideration item and has\\n * the same four components as a spent item, as well as an additional fifth\\n * component designating the required recipient of the item.\\n */\\n struct ReceivedItem {\\n ItemType itemType;\\n address token;\\n uint256 identifier;\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n struct CriteriaResolver {\\n uint256 orderIndex;\\n Side side;\\n uint256 index;\\n uint256 identifier;\\n bytes32[] criteriaProof;\\n }\\n\\n // prettier-ignore\\n enum Side {\\n // 0: Items that can be spent\\n OFFER,\\n\\n // 1: Items that must be received\\n CONSIDERATION\\n }\\n}\\n\",\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x7f99c2e0828bbba57e1599d92f1368b62ef0e9cd62bda3c4091e108d1fbc35b6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x5e982ad688493d9c729757c2ebd98efecd0bf3b33992f7342edf6c349874b86c\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x363fa1f25a41aa7d7b3fb9e2d182dec04c3774d06d9eed428b3fe48140fa4b7e\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x87cd179c900495ee44c1b9c7fa57f4da0228217d78792bd6d6a6fde6c32be2b2\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6102006040523480156200001257600080fd5b5060405162004f4738038062004f47833981016040819052620000359162000352565b6000620000416200021e565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200009d6301ffc9a760e01b62000222565b620000af630271189760e51b62000222565b82516001600160601b0319606091821b811660809081526020860151831b821660a09081526040870151841b831660c090815284880151851b841660e090815292880151851b841661010090815291880151851b841661012090815290880151851b841661014090815292880151851b84166101605290870151841b831661018052860151831b82166101a052850151821b81166101c0529083901b166101e05260005b815181101562000214576001600160a01b038316156200020b57826001600160a01b031663095ea7b38383815181106200018957fe5b60200260200101516000196040518363ffffffff1660e01b8152600401620001b392919062000437565b602060405180830381600087803b158015620001ce57600080fd5b505af1158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020991906200040e565b505b60010162000153565b5050505062000474565b3390565b6001600160e01b0319808216141562000282576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b80516001600160a01b0381168114620002c257600080fd5b919050565b600082601f830112620002d8578081fd5b815160206001600160401b03821115620002ee57fe5b808202620002fe82820162000450565b83815282810190868401838801850189101562000319578687fd5b8693505b8584101562000346576200033181620002aa565b8352600193909301929184019184016200031d565b50979650505050505050565b60008060006101a0848603121562000368578283fd5b84601f85011262000377578283fd5b610160620003858162000450565b9085019080868884111562000398578687fd5b865b600b811015620003c557620003af82620002aa565b845260209384019391909101906001016200039a565b50508095505050620003d781620002aa565b61018086015190935090506001600160401b03811115620003f6578182fd5b6200040486828701620002c7565b9150509250925092565b60006020828403121562000420578081fd5b8151801515811462000430578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b03811182821017156200046c57fe5b604052919050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6149ac6200059b60003980610517528061062f528061084c52806109bf52806123e3528061249a5280612529525080610d8c5280611dee52806122ab5250806104cf5280611d1c52806121db525080610c555280611b375280611bd15250806104f35280611a2d525080610c0d528061195b528061210b525080610544528061188952508061092b528061165d52806116f7525080610db05280611204528061129a5250806103cf5280610f525280611f6052508061094f5280611101528061203b525080610c31528061102f52506149ac6000f3fe60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204ccd56ab995869fdbc4ed21f23f9fabaa9ca715a97c76cb58a753eac8de130ff64736f6c63430007060033", + "deployedBytecode": "0x60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204ccd56ab995869fdbc4ed21f23f9fabaa9ca715a97c76cb58a753eac8de130ff64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "approveWETH(address[])": { + "params": { + "transferProxies": "- array of addresses to approve WETH for" + } + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "params": { + "allowFail": "- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch", + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- array of deatails about the purchases (more info in PurchaseDetails struct)" + } + }, + "onERC721Received(address,address,uint256,bytes)": { + "details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "params": { + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- deatails about the purchase (more info in PurchaseDetails struct)" + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "approveWETH(address[])": { + "notice": "approves weth for a list of the addresses" + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "notice": "executes an array of purchases" + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "notice": "executes a single purchase" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 5578, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 17316, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "paused", + "offset": 0, + "slot": "2", + "type": "t_bool" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/arbitrum_sepolia/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json b/projects/hardhat-deploy/deployments/arbitrum_sepolia/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json new file mode 100644 index 000000000..ce8ca1d7b --- /dev/null +++ b/projects/hardhat-deploy/deployments/arbitrum_sepolia/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json @@ -0,0 +1,617 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal initializer {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712Upgradeable is Initializable {\n /* solhint-disable var-name-mixedcase */\n bytes32 private _HASHED_NAME;\n bytes32 private _HASHED_VERSION;\n bytes32 private constant _TYPE_HASH = keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n function __EIP712_init(string memory name, string memory version) internal initializer {\n __EIP712_init_unchained(name, version);\n }\n\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\n }\n\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\n return keccak256(\n abi.encode(\n typeHash,\n name,\n version,\n _getChainId(),\n address(this)\n )\n );\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n }\n\n function _getChainId() private view returns (uint256 chainId) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n\n /**\n * @dev The hash of the name parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712NameHash() internal virtual view returns (bytes32) {\n return _HASHED_NAME;\n }\n\n /**\n * @dev The hash of the version parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\n return _HASHED_VERSION;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165Upgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n function __ERC165_init() internal initializer {\n __ERC165_init_unchained();\n }\n\n function __ERC165_init_unchained() internal initializer {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165Upgradeable {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\n// solhint-disable-next-line compiler-version\npragma solidity >=0.4.24 <0.8.0;\n\nimport \"../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n */\nabstract contract Initializable {\n\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(_initializing || _isConstructor() || !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /// @dev Returns true if and only if the function is running in the constructor\n function _isConstructor() private view returns (bool) {\n return !AddressUpgradeable.isContract(address(this));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155HolderUpgradeable is Initializable, ERC1155ReceiverUpgradeable {\n function __ERC1155Holder_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ERC1155Holder_init_unchained();\n }\n\n function __ERC1155Holder_init_unchained() internal initializer {\n }\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\n function __ERC1155Receiver_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n }\n\n function __ERC1155Receiver_init_unchained() internal initializer {\n _registerInterface(\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\n );\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\nimport \"./IERC1155MetadataURIUpgradeable.sol\";\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC20Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable {\n using SafeMathUpgradeable for uint256;\n\n mapping (address => uint256) private _balances;\n\n mapping (address => mapping (address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n * a default value of 18.\n *\n * To select a different value for {decimals}, use {_setupDecimals}.\n *\n * All three of these values are immutable: they can only be set once during\n * construction.\n */\n function __ERC20_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC20_init_unchained(name_, symbol_);\n }\n\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n _decimals = 18;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n * called.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return _decimals;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * Requirements:\n *\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n * - the caller must have allowance for ``sender``'s tokens of at least\n * `amount`.\n */\n function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n /**\n * @dev Moves tokens `amount` from `sender` to `recipient`.\n *\n * This is internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: mint to the zero address\");\n\n _beforeTokenTransfer(address(0), account, amount);\n\n _totalSupply = _totalSupply.add(amount);\n _balances[account] = _balances[account].add(amount);\n emit Transfer(address(0), account, amount);\n }\n\n /**\n * @dev Destroys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: burn from the zero address\");\n\n _beforeTokenTransfer(account, address(0), amount);\n\n _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n _totalSupply = _totalSupply.sub(amount);\n emit Transfer(account, address(0), amount);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(address owner, address spender, uint256 amount) internal virtual {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Sets {decimals} to a value other than the default one of 18.\n *\n * WARNING: This function should only be called from the constructor. Most\n * applications that interact with token contracts will not expect\n * {decimals} to ever change, and may work incorrectly if it does.\n */\n function _setupDecimals(uint8 decimals_) internal virtual {\n _decimals = decimals_;\n }\n\n /**\n * @dev Hook that is called before any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * will be to transferred to `to`.\n * - when `from` is zero, `amount` tokens will be minted for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n uint256[44] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20Upgradeable {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721HolderUpgradeable is Initializable, IERC721ReceiverUpgradeable {\n function __ERC721Holder_init() internal initializer {\n __ERC721Holder_init_unchained();\n }\n\n function __ERC721Holder_init_unchained() internal initializer {\n }\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC721Upgradeable.sol\";\nimport \"./IERC721MetadataUpgradeable.sol\";\nimport \"./IERC721EnumerableUpgradeable.sol\";\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../utils/EnumerableSetUpgradeable.sol\";\nimport \"../../utils/EnumerableMapUpgradeable.sol\";\nimport \"../../utils/StringsUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) private _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap private _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits an {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[41] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721EnumerableUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the total amount of tokens stored by the contract.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);\n\n /**\n * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n * Use along with {totalSupply} to enumerate all tokens.\n */\n function tokenByIndex(uint256 index) external view returns (uint256);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721ReceiverUpgradeable {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the caller.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool _approved) external;\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal initializer {\n __Context_init_unchained();\n }\n\n function __Context_init_unchained() internal initializer {\n }\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing an enumerable variant of Solidity's\n * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]\n * type.\n *\n * Maps have the following properties:\n *\n * - Entries are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Entries are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableMap for EnumerableMap.UintToAddressMap;\n *\n * // Declare a set state variable\n * EnumerableMap.UintToAddressMap private myMap;\n * }\n * ```\n *\n * As of v3.0.0, only maps of type `uint256 -> address` (`UintToAddressMap`) are\n * supported.\n */\nlibrary EnumerableMapUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Map type with\n // bytes32 keys and values.\n // The Map implementation uses private functions, and user-facing\n // implementations (such as Uint256ToAddressMap) are just wrappers around\n // the underlying Map.\n // This means that we can only create new EnumerableMaps for types that fit\n // in bytes32.\n\n struct MapEntry {\n bytes32 _key;\n bytes32 _value;\n }\n\n struct Map {\n // Storage of map keys and values\n MapEntry[] _entries;\n\n // Position of the entry defined by a key in the `entries` array, plus 1\n // because index 0 means a key is not in the map.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex == 0) { // Equivalent to !contains(map, key)\n map._entries.push(MapEntry({ _key: key, _value: value }));\n // The entry is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n map._indexes[key] = map._entries.length;\n return true;\n } else {\n map._entries[keyIndex - 1]._value = value;\n return false;\n }\n }\n\n /**\n * @dev Removes a key-value pair from a map. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function _remove(Map storage map, bytes32 key) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex != 0) { // Equivalent to contains(map, key)\n // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one\n // in the array, and then remove the last entry (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = keyIndex - 1;\n uint256 lastIndex = map._entries.length - 1;\n\n // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n MapEntry storage lastEntry = map._entries[lastIndex];\n\n // Move the last entry to the index where the entry to delete is\n map._entries[toDeleteIndex] = lastEntry;\n // Update the index for the moved entry\n map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved entry was stored\n map._entries.pop();\n\n // Delete the index for the deleted slot\n delete map._indexes[key];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function _contains(Map storage map, bytes32 key) private view returns (bool) {\n return map._indexes[key] != 0;\n }\n\n /**\n * @dev Returns the number of key-value pairs in the map. O(1).\n */\n function _length(Map storage map) private view returns (uint256) {\n return map._entries.length;\n }\n\n /**\n * @dev Returns the key-value pair stored at position `index` in the map. O(1).\n *\n * Note that there are no guarantees on the ordering of entries inside the\n * array, and it may change when more entries are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {\n require(map._entries.length > index, \"EnumerableMap: index out of bounds\");\n\n MapEntry storage entry = map._entries[index];\n return (entry._key, entry._value);\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n */\n function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {\n uint256 keyIndex = map._indexes[key];\n if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)\n return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function _get(Map storage map, bytes32 key) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, \"EnumerableMap: nonexistent key\"); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n /**\n * @dev Same as {_get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {_tryGet}.\n */\n function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n // UintToAddressMap\n\n struct UintToAddressMap {\n Map _inner;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {\n return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {\n return _remove(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {\n return _contains(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns the number of elements in the map. O(1).\n */\n function length(UintToAddressMap storage map) internal view returns (uint256) {\n return _length(map._inner);\n }\n\n /**\n * @dev Returns the element stored at position `index` in the set. O(1).\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {\n (bytes32 key, bytes32 value) = _at(map._inner, index);\n return (uint256(key), address(uint160(uint256(value))));\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n *\n * _Available since v3.4._\n */\n function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {\n (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));\n return (success, address(uint160(uint256(value))));\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key)))));\n }\n\n /**\n * @dev Same as {get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryGet}.\n */\n function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n */\nlibrary EnumerableSetUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) { // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n bytes32 lastvalue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastvalue;\n // Update the index for the moved value\n set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n require(set._values.length > index, \"EnumerableSet: index out of bounds\");\n return set._values[index];\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuardUpgradeable is Initializable {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n function __ReentrancyGuard_init() internal initializer {\n __ReentrancyGuard_init_unchained();\n }\n\n function __ReentrancyGuard_init_unchained() internal initializer {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n // On the first call to nonReentrant, _notEntered will be true\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary StringsUpgradeable {\n /**\n * @dev Converts a `uint256` to its ASCII `string` representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n uint256 index = digits - 1;\n temp = value;\n while (temp != 0) {\n buffer[index--] = bytes1(uint8(48 + temp % 10));\n temp /= 10;\n }\n return string(buffer);\n }\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" + }, + "@openzeppelin/contracts/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165 is IERC165 {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n constructor () internal {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "@openzeppelin/contracts/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts/math/SafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\nimport \"./IBeacon.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy {\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) public payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _setBeacon(beacon, data);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address beacon) {\n bytes32 slot = _BEACON_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n beacon := sload(slot)\n }\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_beacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n require(\n Address.isContract(beacon),\n \"BeaconProxy: beacon is not a contract\"\n );\n require(\n Address.isContract(IBeacon(beacon).implementation()),\n \"BeaconProxy: beacon implementation is not a contract\"\n );\n bytes32 slot = _BEACON_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, beacon)\n }\n\n if (data.length > 0) {\n Address.functionDelegateCall(_implementation(), data, \"BeaconProxy: function call failed\");\n }\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "@openzeppelin/contracts/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../access/Ownable.sol\";\nimport \"./TransparentUpgradeableProxy.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(TransparentUpgradeableProxy proxy, address implementation, bytes memory data) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./UpgradeableProxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\n */\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _setAdmin(admin_);\n }\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _admin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _admin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n require(newAdmin != address(0), \"TransparentUpgradeableProxy: new admin is the zero address\");\n emit AdminChanged(_admin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external virtual ifAdmin {\n _upgradeTo(newImplementation);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\n _upgradeTo(newImplementation);\n Address.functionDelegateCall(newImplementation, data);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address adm) {\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n adm := sload(slot)\n }\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n bytes32 slot = _ADMIN_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newAdmin)\n }\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _admin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../access/Ownable.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n constructor(address implementation_) public {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/UpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n *\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\n * {TransparentUpgradeableProxy}.\n */\ncontract UpgradeableProxy is Proxy {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) public payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _setImplementation(_logic);\n if(_data.length > 0) {\n Address.functionDelegateCall(_logic, _data);\n }\n }\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n impl := sload(slot)\n }\n }\n\n /**\n * @dev Upgrades the proxy to a new implementation.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal virtual {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableProxy: new implementation is not a contract\");\n\n bytes32 slot = _IMPLEMENTATION_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newImplementation)\n }\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155.sol\";\nimport \"./IERC1155MetadataURI.sol\";\nimport \"./IERC1155Receiver.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../introspection/ERC165.sol\";\nimport \"../../math/SafeMath.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {\n using SafeMath for uint256;\n using Address for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n constructor (string memory uri_) public {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Receiver.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155Holder is ERC1155Receiver {\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Receiver.sol\";\nimport \"../../introspection/ERC165.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\n constructor() internal {\n _registerInterface(\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\n );\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155 is IERC165 {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURI is IERC1155 {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155Receiver is IERC165 {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/ERC721Holder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721Receiver.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721Holder is IERC721Receiver {\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Pausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n bool private _paused;\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n constructor () internal {\n _paused = false;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n require(!paused(), \"Pausable: paused\");\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n require(paused(), \"Pausable: not paused\");\n _;\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" + }, + "@rarible/auction/contracts/1155/AuctionHouse1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase1155.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse1155 is ERC1155HolderUpgradeable, AuctionHouseBase1155 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse1155_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse1155_init_unchained();\n }\n\n function __AuctionHouse1155_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint96 _sellTokenValue,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC1155 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(_sellTokenValue > 0, \"incorrect _sellTokenValue\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenValue,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n\n transferNFT(\n _sellToken, \n _sellTokenId, \n _sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n sender,\n address(this)\n );\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime if it's not set\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId) internal {\n emit AuctionFinished(_auctionId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n address seller = currentAuction.seller;\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n currentAuction.sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n \n deactivateAuction(_auctionId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return this.supportsInterface(interfaceId);\n }\n\n}" + }, + "@rarible/auction/contracts/1155/AuctionHouseBase1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase1155 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint96 sellTokenValue;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n\n}" + }, + "@rarible/auction/contracts/721/AuctionHouse721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase721.sol\";\nimport \"../wrapper/TokenToAuction.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse721 is ERC721HolderUpgradeable, TokenToAuction, AuctionHouseBase721 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse721_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC721Holder_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse721_init_unchained();\n }\n\n function __AuctionHouse721_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC721 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n transferNFT(\n _sellToken, \n _sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n sender,\n address(this)\n );\n setAuctionForToken(_sellToken, _sellTokenId, currentAuctionId);\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId, address token, uint tokenId) internal {\n emit AuctionFinished(_auctionId);\n deleteAuctionForToken(token, tokenId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n address seller = currentAuction.seller;\n require(_checkAuctionExistence(seller), \"there is no auction with this id\");\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n \n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n /// @dev function to call from wrapper to put bid\n function putBidWrapper(uint256 _auctionId) external payable {\n require(auctions[_auctionId].buyAsset == address(0), \"only ETH bids allowed\");\n putBid(_auctionId, Bid(msg.value, LibBidDataV1.V1, \"\"));\n }\n\n}" + }, + "@rarible/auction/contracts/721/AuctionHouseBase721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase721 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n}" + }, + "@rarible/auction/contracts/AuctionHouseBase.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libs/LibAucDataV1.sol\";\nimport \"./libs/LibBidDataV1.sol\";\nimport \"./libs/SafeMathUpgradeable96.sol\";\n\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nabstract contract AuctionHouseBase is OwnableUpgradeable, ReentrancyGuardUpgradeable, RaribleTransferManager, TransferExecutor {\n using LibTransfer for address;\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n /// @dev default minimal auction duration and also the time for that auction is extended when it's about to end (endTime - now < EXTENSION_DURATION)\n uint96 internal constant EXTENSION_DURATION = 15 minutes;\n\n /// @dev maximum auction duration\n uint128 internal constant MAX_DURATION = 1000 days;\n\n /// @dev maximum fee base point\n uint internal constant MAX_FEE_BASE_POINT = 1000;\n\n /// @dev mapping to store eth amount that is ready to be withdrawn (used for faulty eth-bids)\n mapping(address => uint) readyToWithdraw;\n\n /// @dev latest auctionId\n uint256 public auctionId;\n\n /// @dev minimal auction duration\n uint96 public minimalDuration;\n\n /// @dev minimal bid increase in base points\n uint96 public minimalStepBasePoint;\n\n /// @dev bid struct\n struct Bid {\n // the amount \n uint amount;\n // version of Bid to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Bid, can be seen in \"LibBidDataV1.sol\"\n bytes data;\n }\n\n /// @dev event that emits when auction is created\n event AuctionCreated(uint indexed auctionId, address seller);\n /// @dev event that emits when bid is placed\n event BidPlaced(uint indexed auctionId, address buyer, uint endTime);\n /// @dev event that emits when auction is finished\n event AuctionFinished(uint indexed auctionId);\n /// @dev event that emits when auction is canceled\n event AuctionCancelled(uint indexed auctionId);\n /// @dev event that emits when auction is bought out\n event AuctionBuyOut(uint indexed auctionId, address buyer);\n\n /// @dev event that's emitted when user can withdraw ETH from the AuctionHouse\n event AvailableToWithdraw(address indexed owner, uint added, uint total);\n /// @dev event that's emitted when minimal auction duration changes\n event MinimalDurationChanged(uint oldValue, uint newValue);\n\n event MinimalStepChanged(uint oldValue, uint newValue);\n\n function __AuctionHouseBase_init_unchained(\n uint96 _minimalStepBasePoint\n ) internal initializer {\n auctionId = 1;\n minimalDuration = EXTENSION_DURATION;\n minimalStepBasePoint = _minimalStepBasePoint;\n }\n\n /// @dev increments auctionId and returns new value\n function getNextAndIncrementAuctionId() internal returns (uint256) {\n return auctionId++;\n }\n\n function changeMinimalDuration(uint96 newValue) external onlyOwner {\n emit MinimalDurationChanged(minimalDuration, newValue);\n minimalDuration = newValue;\n }\n\n function changeMinimalStep(uint96 newValue) external onlyOwner {\n emit MinimalStepChanged(minimalStepBasePoint, newValue);\n minimalStepBasePoint = newValue;\n }\n\n function transferNFT (\n address token,\n uint tokenId,\n uint value,\n bytes4 assetClass,\n address from,\n address to\n ) internal {\n transfer(\n getSellAsset(\n token,\n tokenId,\n value,\n assetClass\n ),\n from,\n to,\n proxies[assetClass]\n );\n }\n\n function transferBid(\n uint value,\n address token,\n address from,\n address to,\n address proxy\n ) internal {\n transfer(\n getBuyAsset(\n token,\n value\n ),\n from,\n to,\n proxy\n );\n }\n\n function getSellAsset(address token, uint tokenId, uint value, bytes4 assetClass) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n asset.assetType.assetClass = assetClass;\n asset.assetType.data = abi.encode(token, tokenId);\n }\n\n function getBuyAsset(address token, uint value) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n\n if (token == address(0)){\n asset.assetType.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n asset.assetType.assetClass = LibAsset.ERC20_ASSET_CLASS;\n asset.assetType.data = abi.encode(token);\n }\n }\n\n function getPayouts(address maker) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(maker);\n payout[0].value = 10000;\n return payout;\n }\n\n function getOriginFee(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee = new LibPart.Part[](1);\n originFee[0].account = payable(address(data));\n originFee[0].value = uint96(getValueFromData(data));\n return originFee;\n }\n\n function _checkAuctionRangeTime(uint endTime, uint startTime) internal view returns (bool){\n uint currentTime = block.timestamp;\n if (startTime > 0 && startTime > currentTime) {\n return false;\n }\n if (endTime > 0 && endTime <= currentTime){\n return false;\n }\n\n return true;\n }\n\n /// @dev returns true if newAmount is enough for buyOut\n function buyOutVerify(LibAucDataV1.DataV1 memory aucData, uint newAmount) internal pure returns (bool) {\n if (aucData.buyOutPrice > 0 && aucData.buyOutPrice <= newAmount) {\n return true;\n }\n return false;\n }\n\n /// @dev returns true if auction exists, false otherwise\n function _checkAuctionExistence(address seller) internal pure returns (bool){\n return seller != address(0);\n }\n\n /// @dev Used to withdraw faulty bids (bids that failed to return after out-bidding)\n function withdrawFaultyBid(address _to) external {\n address sender = _msgSender();\n uint amount = readyToWithdraw[sender];\n require( amount > 0, \"nothing to withdraw\");\n readyToWithdraw[sender] = 0;\n _to.transferEth(amount);\n }\n\n function _returnBid(\n Bid memory oldBid,\n address buyAsset,\n address oldBuyer,\n address proxy\n ) internal {\n // nothing to return\n if (oldBuyer == address(0)) {\n return;\n }\n if (buyAsset == address(0)) {\n (bool success,) = oldBuyer.call{ value: oldBid.amount }(\"\");\n if (!success) {\n uint currentValueToWithdraw = readyToWithdraw[oldBuyer];\n uint newValueToWithdraw = oldBid.amount.add(currentValueToWithdraw);\n readyToWithdraw[oldBuyer] = newValueToWithdraw;\n emit AvailableToWithdraw(oldBuyer, oldBid.amount, newValueToWithdraw);\n }\n } else {\n transferBid(\n oldBid.amount,\n buyAsset,\n address(this),\n oldBuyer,\n proxy\n );\n }\n }\n\n function _getProxy(address buyAsset) internal view returns(address){\n address proxy;\n if (buyAsset != address(0)){\n proxy = proxies[LibAsset.ERC20_ASSET_CLASS];\n }\n return proxy;\n }\n\n /// @dev check that msg.value more than bid amount with fees and return change\n function checkEthReturnChange(uint totalAmount, address buyer) internal {\n uint msgValue = msg.value;\n require(msgValue >= totalAmount, \"not enough ETH\");\n uint256 change = msgValue.sub(totalAmount);\n if (change > 0) {\n buyer.transferEth(change);\n }\n }\n\n /// @dev returns true if auction in progress, false otherwise\n function checkAuctionInProgress(address seller, uint endTime, uint startTime) internal view{\n require(_checkAuctionExistence(seller) && _checkAuctionRangeTime(endTime, startTime), \"auction is inactive\");\n }\n\n /// @dev reserves new bid and returns the last one if it exists\n function reserveBid(\n address buyAsset,\n address oldBuyer,\n address newBuyer,\n Bid memory oldBid,\n address proxy,\n uint newTotalAmount\n ) internal {\n // return old bid if theres any\n _returnBid(\n oldBid,\n buyAsset,\n oldBuyer,\n proxy\n );\n \n //lock new bid\n transferBid(\n newTotalAmount,\n buyAsset,\n newBuyer,\n address(this),\n proxy\n );\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function _getMinimalNextBid(address buyer, uint96 minimalPrice, uint amount) internal view returns (uint minBid){\n if (buyer == address(0x0)) {\n minBid = minimalPrice;\n } else {\n minBid = amount.add(amount.bp(minimalStepBasePoint));\n }\n }\n\n function getValueFromData(uint data) internal pure returns(uint) {\n return (data >> 160);\n }\n\n uint256[50] private ______gap;\n}" + }, + "@rarible/auction/contracts/libs/LibAucDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Auction struct\nlibrary LibAucDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Auction data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n // auction duration\n uint96 duration;\n // auction startTime\n uint96 startTime;\n // auction buyout price\n uint96 buyOutPrice;\n }\n\n /// @dev returns parsed data field of an Auction (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n }\n } else {\n revert(\"wrong auction dataType\");\n }\n }\n}\n\n" + }, + "@rarible/auction/contracts/libs/LibBidDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Bid struct\nlibrary LibBidDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Bid data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n }\n\n /// @dev returns parsed data field of a Bid (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n } \n } else {\n revert(\"wrong bid dataType\");\n }\n }\n}\n" + }, + "@rarible/auction/contracts/libs/SafeMathUpgradeable96.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable96 {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint96 a, uint96 b) internal pure returns (uint96) {\n uint96 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint96 a, uint96 b) internal pure returns (uint96) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n}\n" + }, + "@rarible/auction/contracts/wrapper/IMarketWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/**\n * @title IMarketWrapper\n * @author Anna Carroll\n * @notice IMarketWrapper provides a common interface for\n * interacting with NFT auction markets.\n * Contracts can abstract their interactions with\n * different NFT markets using IMarketWrapper.\n * NFT markets can become compatible with any contract\n * using IMarketWrapper by deploying a MarketWrapper contract\n * that implements this interface using the logic of their Market.\n *\n * WARNING: MarketWrapper contracts should NEVER write to storage!\n * When implementing a MarketWrapper, exercise caution; a poorly implemented\n * MarketWrapper contract could permanently lose access to the NFT or user funds.\n */\ninterface IMarketWrapper {\n /**\n * @notice Given the auctionId, nftContract, and tokenId, check that:\n * 1. the auction ID matches the token\n * referred to by tokenId + nftContract\n * 2. the auctionId refers to an *ACTIVE* auction\n * (e.g. an auction that will accept bids)\n * within this market contract\n * 3. any additional validation to ensure that\n * a PartyBid can bid on this auction\n * (ex: if the market allows arbitrary bidding currencies,\n * check that the auction currency is ETH)\n * Note: This function probably should have been named \"isValidAuction\"\n * @dev Called in PartyBid.sol in `initialize` at line 174\n * @return TRUE if the auction is valid\n */\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external view returns (bool);\n\n /**\n * @notice Calculate the minimum next bid for this auction.\n * PartyBid contracts always submit the minimum possible\n * bid that will be accepted by the Market contract.\n * usually, this is either the reserve price (if there are no bids)\n * or a certain percentage increase above the current highest bid\n * @dev Called in PartyBid.sol in `bid` at line 251\n * @return minimum bid amount\n */\n function getMinimumBid(uint256 auctionId) external view returns (uint256);\n\n /**\n * @notice Query the current highest bidder for this auction\n * It is assumed that there is always 1 winning highest bidder for an auction\n * This is used to ensure that PartyBid cannot outbid itself if it is already winning\n * @dev Called in PartyBid.sol in `bid` at line 241\n * @return highest bidder\n */\n function getCurrentHighestBidder(uint256 auctionId)\n external\n view\n returns (address);\n\n /**\n * @notice Submit bid to Market contract\n * @dev Called in PartyBid.sol in `bid` at line 259\n */\n function bid(uint256 auctionId, uint256 bidAmount) external;\n\n /**\n * @notice Determine whether the auction has been finalized\n * Used to check if it is still possible to bid\n * And to determine whether the PartyBid should finalize the auction\n * @dev Called in PartyBid.sol in `bid` at line 247\n * @dev and in `finalize` at line 288\n * @return TRUE if the auction has been finalized\n */\n function isFinalized(uint256 auctionId) external view returns (bool);\n\n /**\n * @notice Finalize the results of the auction\n * on the Market contract\n * It is assumed that this operation is performed once for each auction,\n * that after it is done the auction is over and the NFT has been\n * transferred to the auction winner.\n * @dev Called in PartyBid.sol in `finalize` at line 289\n */\n function finalize(uint256 auctionId) external;\n}" + }, + "@rarible/auction/contracts/wrapper/TokenToAuction.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/// @dev contract to add tokenToAuctionId functionality to auctionHouse\ncontract TokenToAuction {\n /// @dev mapping to store auction ids for token address + token id (only stores erc-721 tokens)\n mapping(address => mapping(uint256 => uint256)) private tokenToAuctionId;\n\n /// @dev returns auction id by token address and token id\n function getAuctionByToken(address _collection, uint tokenId) external view returns(uint) {\n return tokenToAuctionId[_collection][tokenId];\n }\n\n /// @dev sets auction id for token address and token id\n function setAuctionForToken(address token, uint tokenId, uint auctionId) internal {\n tokenToAuctionId[token][tokenId] = auctionId;\n }\n\n /// @dev deletes auctionId from tokenToAuctionId\n function deleteAuctionForToken(address token, uint tokenId) internal {\n delete tokenToAuctionId[token][tokenId];\n }\n \n uint256[50] private ______gap;\n}" + }, + "@rarible/auction/contracts/wrapper/Wrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\nimport \"./IMarketWrapper.sol\";\nimport \"../721/AuctionHouse721.sol\";\n\ncontract Wrapper is IMarketWrapper{\n\n AuctionHouse721 internal immutable auction;\n\n constructor(address _auction) {\n auction = AuctionHouse721(_auction);\n }\n\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external override view returns (bool){\n return auctionId == auction. getAuctionByToken(nftContract, tokenId);\n }\n\n function getMinimumBid(uint256 auctionId) external override view returns (uint256){\n return auction.getMinimalNextBid(auctionId);\n }\n\n function getCurrentHighestBidder(uint256 auctionId)\n external\n override\n view\n returns (address){\n return auction.getCurrentBuyer(auctionId);\n }\n\n function bid(uint256 auctionId, uint256 bidAmount) external override{\n (bool success, bytes memory returnData) =\n address(auction).call{value: bidAmount}(\n abi.encodeWithSignature(\"putBidWrapper(uint256)\", auctionId)\n );\n require(success, string(returnData));\n }\n\n function isFinalized(uint256 auctionId) external override view returns (bool){\n return !auction.checkAuctionExistence(auctionId);\n }\n\n function finalize(uint256 auctionId) external override{\n auction.finishAuction(auctionId);\n }\n}" + }, + "@rarible/custom-matchers/contracts/AssetMatcherCollection.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\n/*\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\n */\ncontract AssetMatcherCollection is IAssetMatcher {\n\n bytes constant EMPTY = \"\";\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\n if (\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\n ) {\n (address leftToken) = abi.decode(leftAssetType.data, (address));\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\n if (leftToken == rightToken) {\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\n }\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n}" + }, + "@rarible/exchange-interfaces/contracts/IAssetMatcher.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface IAssetMatcher {\n function matchAssets(\n LibAsset.AssetType memory leftAssetType,\n LibAsset.AssetType memory rightAssetType\n ) external view returns (LibAsset.AssetType memory);\n}\n" + }, + "@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface ICryptoPunksMarket {\n //to get address punk owner from mapping (uint => address) public punkIndexToAddress;\n function punkIndexToAddress(uint key) external returns (address);\n\n function buyPunk(uint punkIndex) payable external;\n\n function transferPunk(address to, uint punkIndex) external;\n\n function offerPunkForSaleToAddress(uint punkIndex, uint minSalePriceInWei, address toAddress) external;\n}" + }, + "@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\ninterface IERC20TransferProxy {\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\n}\n" + }, + "@rarible/exchange-interfaces/contracts/INftTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\ninterface INftTransferProxy {\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n}\n" + }, + "@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/exchange-interfaces/contracts/ITransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" + }, + "@rarible/exchange-v2/contracts/AssetMatcher.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\n require(newFill.leftValue > 0, \"nothing to fill\");\n }\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\n require(newFill.rightValue > 0, \"nothing to fill\");\n }\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibDirectTransfer { //LibDirectTransfers\n /*All buy parameters need for create buyOrder and sellOrder*/\n struct Purchase {\n address sellOrderMaker; //\n uint256 sellOrderNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 sellOrderPaymentAmount;\n address paymentToken;\n uint256 sellOrderSalt;\n uint sellOrderStart;\n uint sellOrderEnd;\n bytes4 sellOrderDataType;\n bytes sellOrderData;\n bytes sellOrderSignature;\n\n uint256 buyOrderPaymentAmount;\n uint256 buyOrderNftAmount;\n bytes buyOrderData;\n }\n\n /*All accept bid parameters need for create buyOrder and sellOrder*/\n struct AcceptBid {\n address bidMaker; //\n uint256 bidNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 bidPaymentAmount;\n address paymentToken;\n uint256 bidSalt;\n uint bidStart;\n uint bidEnd;\n bytes4 bidDataType;\n bytes bidData;\n bytes bidSignature;\n\n uint256 sellOrderPaymentAmount;\n uint256 sellOrderNftAmount;\n bytes sellOrderData;\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibFill.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n * @return tuple representing fill of both assets\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary LibMath {\n using SafeMathUpgradeable for uint;\n\n /// @dev Calculates partial value given a numerator and denominator rounded down.\n /// Reverts if rounding error is >= 0.1%\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return partialAmount value of target rounded down.\n function safeGetPartialAmountFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorFloor(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding down.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // The absolute rounding error is the difference between the rounded\n // value and the ideal value. The relative rounding error is the\n // absolute rounding error divided by the absolute value of the\n // ideal value. This is undefined when the ideal value is zero.\n //\n // The ideal value is `numerator * target / denominator`.\n // Let's call `numerator * target % denominator` the remainder.\n // The absolute error is `remainder / denominator`.\n //\n // When the ideal value is zero, we require the absolute error to\n // be zero. Fortunately, this is always the case. The ideal value is\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\n // remainder and absolute error are also zero.\n if (target == 0 || numerator == 0) {\n return false;\n }\n\n // Otherwise, we want the relative rounding error to be strictly\n // less than 0.1%.\n // The relative error is `remainder / (numerator * target)`.\n // We want the relative error less than 1 / 1000:\n // remainder / (numerator * target) < 1 / 1000\n // or equivalently:\n // 1000 * remainder < numerator * target\n // so we have a rounding error iff:\n // 1000 * remainder >= numerator * target\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n isError = remainder.mul(1000) >= numerator.mul(target);\n }\n\n function safeGetPartialAmountCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorCeil(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding up.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // See the comments in `isRoundingError`.\n if (target == 0 || numerator == 0) {\n // When either is zero, the ideal value and rounded value are zero\n // and there is no rounding error. (Although the relative error\n // is undefined.)\n return false;\n }\n // Compute remainder as before\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n remainder = denominator.sub(remainder) % denominator;\n isError = remainder.mul(1000) >= numerator.mul(target);\n return isError;\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nimport \"./LibMath.sol\";\nimport \"./LibOrderDataV3.sol\";\nimport \"./LibOrderDataV2.sol\";\nimport \"./LibOrderDataV1.sol\";\n\nlibrary LibOrder {\n using SafeMathUpgradeable for uint;\n\n bytes32 constant ORDER_TYPEHASH = keccak256(\n \"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\n\n struct Order {\n address maker;\n LibAsset.Asset makeAsset;\n address taker;\n LibAsset.Asset takeAsset;\n uint salt;\n uint start;\n uint end;\n bytes4 dataType;\n bytes data;\n }\n\n /**\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\n * @param order initial order to calculate remaining values for\n * @param fill current fill of the left order (0 if order is unfilled)\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\n */\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\n if (isMakeFill) {\n makeValue = order.makeAsset.value.sub(fill);\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\n } else {\n takeValue = order.takeAsset.value.sub(fill);\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \n } \n }\n\n function hashKey(Order memory order) internal pure returns (bytes32) {\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt\n ));\n } else {\n //order.data is in hash for V2, V3 and all new order\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt,\n order.data\n ));\n }\n }\n\n function hash(Order memory order) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ORDER_TYPEHASH,\n order.maker,\n LibAsset.hash(order.makeAsset),\n order.taker,\n LibAsset.hash(order.takeAsset),\n order.salt,\n order.start,\n order.end,\n order.dataType,\n keccak256(order.data)\n ));\n }\n\n function validateOrderTime(LibOrder.Order memory order) internal view {\n require(order.start == 0 || order.start < block.timestamp, \"Order start validation failed\");\n require(order.end == 0 || order.end > block.timestamp, \"Order end validation failed\");\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderData.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibOrderData {\n\n struct GenericOrderData {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n } \n\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\n if (order.dataType == LibOrderDataV1.V1) {\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n } else if (order.dataType == LibOrderDataV2.V2) {\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n dataOrder.isMakeFill = data.isMakeFill;\n } else if (order.dataType == 0xffffffff) {\n } else {\n revert(\"Unknown Order data type\");\n }\n if (dataOrder.payouts.length == 0) {\n dataOrder.payouts = payoutSet(order.maker);\n }\n }\n\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(orderAddress);\n payout[0].value = 10000;\n return payout;\n }\n\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee;\n\n if (dataFirst > 0 && dataSecond > 0){\n originFee = new LibPart.Part[](2);\n\n originFee[0] = uintToLibPart(dataFirst);\n originFee[1] = uintToLibPart(dataSecond);\n }\n\n if (dataFirst > 0 && dataSecond == 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataFirst);\n }\n\n if (dataFirst == 0 && dataSecond > 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataSecond);\n }\n\n return originFee;\n }\n\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payouts;\n\n if (data > 0) {\n payouts = new LibPart.Part[](1);\n payouts[0] = uintToLibPart(data);\n }\n\n return payouts;\n }\n\n /**\n @notice converts uint to LibPart.Part\n @param data address and value encoded in uint (first 12 bytes )\n @return result LibPart.Part \n */\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\n if (data > 0){\n result.account = payable(address(data));\n result.value = uint96(data >> 160);\n }\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n struct DataV1 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV2 {\n bytes4 constant public V2 = bytes4(keccak256(\"V2\"));\n\n struct DataV2 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\n/// @dev deprecated\nlibrary LibOrderDataV3 {\n bytes4 constant public V3_SELL = bytes4(keccak256(\"V3_SELL\"));\n bytes4 constant public V3_BUY = bytes4(keccak256(\"V3_BUY\"));\n\n struct DataV3_SELL {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n uint maxFeesBasePoint;\n bytes32 marketplaceMarker;\n }\n\n struct DataV3_BUY {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n bytes32 marketplaceMarker;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/OrderValidator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./libraries/LibOrder.sol\";\n\nimport \"@rarible/lib-signature/contracts/IERC1271.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\n\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\n using LibSignature for bytes32;\n using AddressUpgradeable for address;\n \n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function __OrderValidator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Exchange\", \"2\");\n }\n\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\n if (order.salt == 0) {\n if (order.maker != address(0)) {\n require(_msgSender() == order.maker, \"maker is not tx sender\");\n }\n } else {\n if (_msgSender() != order.maker) {\n bytes32 hash = LibOrder.hash(order);\n // if maker is contract checking ERC1271 signature\n if (order.maker.isContract()) {\n require(\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\n \"contract order signature verification error\"\n );\n } else {\n // if maker is not contract then checking ECDSA signature\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\n revert(\"order signature verification error\");\n } else {\n require (order.maker != address(0), \"no maker\");\n }\n }\n }\n }\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../../contracts/ExchangeV2.sol\";\n\ncontract RaribleTestHelper {\n function encode(LibOrderDataV1.DataV1 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV2(LibOrderDataV2.DataV2 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_SELL(LibOrderDataV3.DataV3_SELL memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_BUY(LibOrderDataV3.DataV3_BUY memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value)\n external\n pure\n returns (uint256)\n {\n return (uint256(value) << 160) + uint256(account);\n }\n\n function hashKey(LibOrder.Order calldata order)\n external\n pure\n returns (bytes32)\n {\n return LibOrder.hashKey(order);\n }\n\n function hashV2(\n address maker,\n LibAsset.Asset memory makeAsset,\n LibAsset.Asset memory takeAsset,\n uint256 salt,\n bytes memory data\n ) public pure returns (bytes32) {\n return\n keccak256(\n abi.encode(\n maker,\n LibAsset.hash(makeAsset.assetType),\n LibAsset.hash(takeAsset.assetType),\n salt,\n data\n )\n );\n }\n\n function encodeLazy721(LibERC721LazyMint.Mint721Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n function encodeLazy1155(LibERC1155LazyMint.Mint1155Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n\ninterface IBlur {\n enum Side { Buy, Sell }\n enum SignatureVersion { Single, Bulk }\n enum AssetType { ERC721, ERC1155 }\n\n struct Fee {\n uint16 rate;\n address payable recipient;\n }\n \n struct Order {\n address trader;\n Side side;\n address matchingPolicy;\n address collection;\n uint256 tokenId;\n uint256 amount;\n address paymentToken;\n uint256 price;\n uint256 listingTime;\n /* Order expiration timestamp - 0 for oracle cancellations. */\n uint256 expirationTime;\n Fee[] fees;\n uint256 salt;\n bytes extraParams;\n }\n\n struct Input {\n Order order;\n uint8 v;\n bytes32 r;\n bytes32 s;\n bytes extraSignature;\n SignatureVersion signatureVersion;\n uint256 blockNumber;\n }\n\n function execute(Input calldata sell, Input calldata buy)\n external\n payable;\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\n\ninterface IExchangeV2 {\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable;\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable;\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../libraries/LibLooksRare.sol\";\n\ninterface ILooksRare {\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\n\n /**\n * @notice This function allows a user to execute a taker bid (against a maker ask).\n * @param takerBid Taker bid struct\n * @param makerAsk Maker ask struct\n * @param makerSignature Maker signature\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\n * @param affiliate Affiliate address\n */\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ILSSVMRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\ninterface ILSSVMRouter {\n struct PairSwapSpecific {\n address pair;\n uint256[] nftIds;\n }\n\n /**\n @notice Swaps ETH into specific NFTs using multiple pairs.\n @param swapList The list of pairs to trade with and the IDs of the NFTs to buy from each.\n @param ethRecipient The address that will receive the unspent ETH input\n @param nftRecipient The address that will receive the NFT output\n @param deadline The Unix timestamp (in seconds) at/after which the swap will revert\n @return remainingValue The unspent ETH amount\n */\n function swapETHForSpecificNFTs(\n PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n )\n external\n payable\n returns (uint256 remainingValue);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"../libraries/LibSeaPort.sol\";\n\ninterface ISeaPort {\n function fulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder calldata advancedOrder,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n bytes32 fulfillerConduitKey,\n address recipient\n ) external payable returns (bool fulfilled);\n\n function fulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\n bytes32 fulfillerConduitKey,\n address recipient,\n uint256 maximumFulfilled\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\n\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\n external\n payable\n returns (bool fulfilled);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface IWyvernExchange {\n function atomicMatch_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n\n enum Side {\n Buy,\n Sell\n }\n\n enum SaleKind {\n FixedPrice,\n DutchAuction\n }\n\n function calculateFinalPrice(\n Side side,\n SaleKind saleKind,\n uint256 basePrice,\n uint256 extra,\n uint256 listingTime,\n uint256 expirationTime\n ) external view returns (uint256);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface Ix2y2 {\n\n struct OrderItem {\n uint256 price;\n bytes data;\n }\n\n struct Pair721 {\n address token;\n uint256 tokenId;\n }\n\n struct Pair1155 {\n address token;\n uint256 tokenId;\n uint256 amount;\n }\n\n struct Order {\n uint256 salt;\n address user;\n uint256 network;\n uint256 intent;\n uint256 delegateType;\n uint256 deadline;\n address currency;\n bytes dataMask;\n OrderItem[] items;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n uint8 signVersion;\n }\n\n struct Fee {\n uint256 percentage;\n address to;\n }\n\n struct SettleDetail {\n Op op;\n uint256 orderIdx;\n uint256 itemIdx;\n uint256 price;\n bytes32 itemHash;\n address executionDelegate;\n bytes dataReplacement;\n uint256 bidIncentivePct;\n uint256 aucMinIncrementPct;\n uint256 aucIncDurationSecs;\n Fee[] fees;\n }\n\n struct SettleShared {\n uint256 salt;\n uint256 deadline;\n uint256 amountToEth;\n uint256 amountToWeth;\n address user;\n bool canFail;\n }\n\n struct RunInput {\n Order[] orders;\n SettleDetail[] details;\n SettleShared shared;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n }\n\n enum Op {\n INVALID,\n // off-chain\n COMPLETE_SELL_OFFER,\n COMPLETE_BUY_OFFER,\n CANCEL_OFFER,\n // auction\n BID,\n COMPLETE_AUCTION,\n REFUND_AUCTION,\n REFUND_AUCTION_STUCK_ITEM\n }\n\n function run(RunInput memory input) external payable;\n}" + }, + "@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\nabstract contract IsPausable is Ownable {\n bool public paused;\n\n event Paused(bool paused);\n\n function pause(bool _paused) external onlyOwner {\n paused = _paused;\n emit Paused(_paused);\n }\n\n function requireNotPaused() internal view {\n require (!paused, \"the contract is paused\");\n }\n\n}\n" + }, + "@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibLooksRare {\n struct MakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address signer; // signer of the maker order\n address collection; // collection address\n uint256 price; // price (used as )\n uint256 tokenId; // id of the token\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\n address currency; // currency (e.g., WETH)\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\n uint256 startTime; // startTime in timestamp\n uint256 endTime; // endTime in timestamp\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // additional parameters\n uint8 v; // v: parameter (27 or 28)\n bytes32 r; // r: parameter\n bytes32 s; // s: parameter\n }\n\n struct TakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address taker; // msg.sender\n uint256 price; // final price for the purchase\n uint256 tokenId;\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // other params (e.g., tokenId)\n }\n\n /**\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\n */\n enum CollectionType {\n ERC721,\n ERC1155\n }\n\n /**\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\n */\n enum QuoteType {\n Bid,\n Ask\n }\n /**\n * 1. Maker struct\n */\n\n /**\n * @notice Maker is the struct for a maker order.\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\n * @param globalNonce Global user order nonce for maker orders\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\n * @param strategyId Strategy id\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\n * @param collection Collection address\n * @param currency Currency address (@dev address(0) = ETH)\n * @param signer Signer address\n * @param startTime Start timestamp\n * @param endTime End timestamp\n * @param price Minimum price for maker ask, maximum price for maker bid\n * @param itemIds Array of itemIds\n * @param amounts Array of amounts\n * @param additionalParameters Extra data specific for the order\n */\n struct Maker {\n QuoteType quoteType;\n uint256 globalNonce;\n uint256 subsetNonce;\n uint256 orderNonce;\n uint256 strategyId;\n CollectionType collectionType;\n address collection;\n address currency;\n address signer;\n uint256 startTime;\n uint256 endTime;\n uint256 price;\n uint256[] itemIds;\n uint256[] amounts;\n bytes additionalParameters;\n }\n\n /**\n * 2. Taker struct\n */\n\n /**\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\n * @param additionalParameters Extra data specific for the order\n */\n struct Taker {\n address recipient;\n bytes additionalParameters;\n }\n\n /**\n * 3. Merkle tree struct\n */\n\n enum MerkleTreeNodePosition {\n Left,\n Right\n }\n\n /**\n * @notice MerkleTreeNode is a MerkleTree's node.\n * @param value It can be an order hash or a proof\n * @param position The node's position in its branch.\n * It can be left or right or none\n * (before the tree is sorted).\n */\n struct MerkleTreeNode {\n bytes32 value;\n MerkleTreeNodePosition position;\n }\n\n /**\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\n * @dev A Merkle tree can be computed with order hashes.\n * It can contain order hashes from both maker bid and maker ask structs.\n * @param root Merkle root\n * @param proof Array containing the merkle proof\n */\n struct MerkleTree {\n bytes32 root;\n MerkleTreeNode[] proof;\n }\n}\n" + }, + "@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" + }, + "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n address public immutable seaPort_1_6;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,//0\n WyvernExchange,//1\n SeaPort_1_1,//2\n X2Y2,//3\n LooksRareOrders,//4\n SudoSwap,//5\n SeaPort_1_4,//6\n LooksRareV2,//7\n Blur,//8\n SeaPort_1_5,//9\n SeaPort_1_6//10\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[11] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n //address _seaPort_1_6, 10\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n seaPort_1_6 = marketplaces[10];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" + }, + "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" + }, + "@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"./LibERC1155LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC1155LazyMint is IERC1155Upgradeable {\n\n event Supply(\n uint256 tokenId,\n uint256 value\n );\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC1155LazyMint.Mint1155Data memory data,\n address to,\n uint256 _amount\n ) external;\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) external;\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC1155LazyMint {\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC1155_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\n\n struct Mint1155Data {\n uint tokenId;\n string tokenURI;\n uint supply;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n data.supply,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"./LibERC721LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC721LazyMint is IERC721Upgradeable {\n\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external;\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external;\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC721LazyMint {\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC721_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\n\n struct Mint721Data {\n uint tokenId;\n string tokenURI;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n\n}\n" + }, + "@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/erc-721/IERC721LazyMint.sol\";\n\ncontract ERC721LazyMintTest is IERC721LazyMint, ERC721Upgradeable {\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external override {\n _mint(to, data.tokenId);\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external override {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n this.mintAndTransfer(data, to);\n }\n }\n\n function encode(LibERC721LazyMint.Mint721Data memory data)\n external\n view\n returns (bytes memory)\n {\n return abi.encode(address(this), data);\n }\n}\n" + }, + "@rarible/lib-asset/contracts/LibAsset.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibAsset {\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\"ETH\"));\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\"ERC20\"));\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\"ERC721\"));\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\"ERC1155\"));\n bytes4 constant public COLLECTION = bytes4(keccak256(\"COLLECTION\"));\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\"CRYPTO_PUNKS\"));\n\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\n \"AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes32 constant ASSET_TYPEHASH = keccak256(\n \"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n struct AssetType {\n bytes4 assetClass;\n bytes data;\n }\n\n struct Asset {\n AssetType assetType;\n uint value;\n }\n\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPE_TYPEHASH,\n assetType.assetClass,\n keccak256(assetType.data)\n ));\n }\n\n function hash(Asset memory asset) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPEHASH,\n hash(asset.assetType),\n asset.value\n ));\n }\n\n}\n" + }, + "@rarible/lib-bp/contracts/BpLibrary.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary BpLibrary {\n using SafeMathUpgradeable for uint;\n\n function bp(uint value, uint bpValue) internal pure returns (uint) {\n return value.mul(bpValue).div(10000);\n }\n}\n" + }, + "@rarible/lib-part/contracts/LibPart.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibPart {\n bytes32 public constant TYPE_HASH = keccak256(\"Part(address account,uint96 value)\");\n\n struct Part {\n address payable account;\n uint96 value;\n }\n\n function hash(Part memory part) internal pure returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\n }\n}\n" + }, + "@rarible/lib-signature/contracts/ERC1271.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nabstract contract ERC1271 {\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\n\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\n\n /**\n * @dev Function must be implemented by deriving contract\n * @param _hash Arbitrary length data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\n *\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\n\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\n }\n}" + }, + "@rarible/lib-signature/contracts/IERC1271.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ninterface IERC1271 {\n\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param _hash Hash of the data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n *\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\n}" + }, + "@rarible/lib-signature/contracts/LibSignature.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nlibrary LibSignature {\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature)\n internal\n pure\n returns (address)\n {\n // Check the signature length\n if (signature.length != 65) {\n revert(\"ECDSA: invalid signature length\");\n }\n\n // Divide the signature in r, s and v variables\n bytes32 r;\n bytes32 s;\n uint8 v;\n\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n // solhint-disable-next-line no-inline-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n\n return recover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n require(\n uint256(s) <=\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\n \"ECDSA: invalid signature 's' value\"\n );\n\n // If the signature is valid (and not malleable), return the signer address\n // v > 30 is a special case, we need to adjust hash with \"\\x19Ethereum Signed Message:\\n32\"\n // and v = v - 4\n address signer;\n if (v > 30) {\n require(\n v - 4 == 27 || v - 4 == 28,\n \"ECDSA: invalid signature 'v' value\"\n );\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\n } else {\n require(v == 27 || v == 28, \"ECDSA: invalid signature 'v' value\");\n signer = ecrecover(hash, v, r, s);\n }\n\n require(signer != address(0), \"ECDSA: invalid signature\");\n\n return signer;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * replicates the behavior of the\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n * JSON-RPC method.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash)\n internal\n pure\n returns (bytes32)\n {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return\n keccak256(\n abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash)\n );\n }\n}\n" + }, + "@rarible/meta-tx/contracts/EIP712MetaTransaction.sol": { + "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" + }, + "@rarible/role-operator/contracts/OperatorRole.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocksV2.sol\";\n\ncontract RoyaltiesProviderArtBlocksV2 is IRoyaltiesProvider {\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n RoyaltyArtBlocksV2 artBlocksV2 = RoyaltyArtBlocksV2(token);\n\n (address payable[] memory recipients, uint256[] memory bps) = artBlocksV2.getRoyalties(tokenId);\n \n uint256 len = recipients.length;\n\n LibPart.Part[] memory result = new LibPart.Part[](len);\n \n for (uint i = 0; i < len; i++) {\n result[i].account = recipients[i];\n result[i].value = uint96(bps[i]);\n }\n\n return result;\n }\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyV2Legacy.sol\";\n\ncontract RoyaltiesProviderV2Legacy is IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n return RoyaltyV2Legacy(token).getRoyalties(tokenId);\n }\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocks.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocks {\n \n function getRoyaltyData(uint256 _tokenId) external virtual view returns (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID);\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocksV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocksV2 {\n \n /**\n * @notice Gets royalty Basis Points (BPS) for token ID `_tokenId`.\n * This conforms to the IManifold interface designated in the Royalty\n * Registry's RoyaltyEngineV1.sol contract.\n * ref: https://github.com/manifoldxyz/royalty-registry-solidity\n * @param _tokenId Token ID to be queried.\n * @return recipients Array of royalty payment recipients\n * @return bps Array of Basis Points (BPS) allocated to each recipient,\n * aligned by index.\n * @dev reverts if invalid _tokenId\n * @dev only returns recipients that have a non-zero BPS allocation\n */\n function getRoyalties(uint256 _tokenId) \n external \n view\n virtual\n returns (\n address payable[] memory recipients, \n uint256[] memory bps\n );\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyV2Legacy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" + }, + "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" + }, + "@rarible/royalties/contracts/IERC2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n///\n/// @dev Interface for the NFT Royalty Standard\n///\n//interface IERC2981 is IERC165 {\ninterface IERC2981 {\n /// ERC165 bytes to add to interface array - set in parent contract\n /// implementing this standard\n ///\n /// bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n /// _registerInterface(_INTERFACE_ID_ERC2981);\n\n /// @notice Called with the sale price to determine how much royalty\n // is owed and to whom.\n /// @param _tokenId - the NFT asset queried for royalty information\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\n /// @return receiver - address of who should be sent the royalty payment\n /// @return royaltyAmount - the royalty payment amount for _salePrice\n function royaltyInfo(\n uint256 _tokenId,\n uint256 _salePrice\n ) external view returns (\n address receiver,\n uint256 royaltyAmount\n );\n}" + }, + "@rarible/royalties/contracts/impl/AbstractRoyalties.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract AbstractRoyalties {\n mapping (uint256 => LibPart.Part[]) internal royalties;\n\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\n uint256 totalValue;\n for (uint i = 0; i < _royalties.length; ++i) {\n require(_royalties[i].account != address(0x0), \"Recipient should be present\");\n require(_royalties[i].value != 0, \"Royalty value should be positive\");\n totalValue += _royalties[i].value;\n royalties[id].push(_royalties[i]);\n }\n require(totalValue < 10000, \"Royalty total value should be < 10000\");\n _onRoyaltiesSet(id, _royalties);\n }\n\n function _updateAccount(uint256 _id, address _from, address _to) internal {\n uint length = royalties[_id].length;\n for(uint i = 0; i < length; ++i) {\n if (royalties[_id][i].account == _from) {\n royalties[_id][i].account = payable(address(uint160(_to)));\n }\n }\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\n}\n" + }, + "@rarible/royalties/contracts/impl/RoyaltiesV1Impl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV1.sol\";\n\ncontract RoyaltiesV1Impl is AbstractRoyalties, RoyaltiesV1 {\n\n function getFeeRecipients(uint256 id) public override view returns (address payable[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n address payable[] memory result = new address payable[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = address(uint160(_royalties[i].account));\n }\n return result;\n }\n\n function getFeeBps(uint256 id) public override view returns (uint[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n uint[] memory result = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = _royalties[i].value;\n }\n return result;\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n address[] memory recipients = new address[](_royalties.length);\n uint[] memory bps = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n recipients[i] = _royalties[i].account;\n bps[i] = _royalties[i].value;\n }\n emit SecondarySaleFees(id, recipients, bps);\n }\n}\n" + }, + "@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV2.sol\";\nimport \"../IERC2981.sol\";\nimport \"../LibRoyalties2981.sol\";\n\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\n\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\n return royalties[id];\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n emit RoyaltiesSet(id, _royalties);\n }\n\n /*\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\n */\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\n if (royalties[id].length == 0) {\n receiver = address(0);\n royaltyAmount = 0;\n return(receiver, royaltyAmount);\n }\n LibPart.Part[] memory _royalties = royalties[id];\n receiver = _royalties[0].account;\n uint percent;\n for (uint i = 0; i < _royalties.length; ++i) {\n percent += _royalties[i].value;\n }\n //don`t need require(percent < 10000, \"Token royalty > 100%\"); here, because check later in calculateRoyalties\n royaltyAmount = percent * _salePrice / 10000;\n }\n}\n" + }, + "@rarible/royalties/contracts/LibRoyalties2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibRoyalties2981 {\n /*\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\n uint96 constant _WEIGHT_VALUE = 1000000;\n\n /*Method for converting amount to percent and forming LibPart*/\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\n LibPart.Part[] memory result;\n if (amount == 0) {\n return result;\n }\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\n require(percent < 10000, \"Royalties 2981 exceeds 100%\");\n result = new LibPart.Part[](1);\n result[0].account = payable(to);\n result[0].value = uint96(percent);\n return result;\n }\n}\n" + }, + "@rarible/royalties/contracts/LibRoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV1 {\n /*\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\n *\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\n */\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\n}\n" + }, + "@rarible/royalties/contracts/LibRoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV2 {\n /*\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\n}\n" + }, + "@rarible/royalties/contracts/RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\ninterface RoyaltiesV1 {\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\n\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\n function getFeeBps(uint256 id) external view returns (uint[] memory);\n}\n" + }, + "@rarible/royalties/contracts/RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltiesV2 {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC1155RoyaltiesV2 is RoyaltiesV2Impl, ERC1155Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, uint amount, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId, amount, \"\");\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV1Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV1.sol\";\n\ncontract TestERC721RoyaltiesV1 is RoyaltiesV1Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV1._INTERFACE_ID_FEES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC721RoyaltiesV2 is RoyaltiesV2Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/test/contracts/TestERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\n\ncontract TestERC1155 is ERC1155, Pausable {\n constructor() ERC1155(\"uri\"){\n\n }\n\n function mint(address to, uint tokenId, uint amount) external {\n _mint(to, tokenId, amount, \"\");\n }\n\n function batchSafeTransferFrom(\n address[] memory froms,\n address[] memory tos,\n uint256[] memory ids,\n uint256[] memory amounts\n ) external {\n require(froms.length == tos.length, \"wrong length 1\");\n require(tos.length == ids.length, \"wrong length 2\");\n require(ids.length == amounts.length, \"wrong length 3\");\n\n for (uint i = 0; i < froms.length; i ++) {\n safeTransferFrom(froms[i], tos[i], ids[i], amounts[i], \"\");\n }\n }\n\n function emitPauseEvent(bool paused) external {\n if (paused) {\n emit Paused(address(0));\n } else {\n emit Unpaused(address(0));\n }\n }\n}\n" + }, + "@rarible/test/contracts/TestERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\n\ncontract TestERC20 is ERC20Upgradeable {\n function mint(address to, uint amount) external {\n _mint(to, amount);\n }\n\n function init() external {\n __ERC20_init(\"TestERC20\", \"TE20\");\n }\n}\n" + }, + "@rarible/test/contracts/TestERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\n\ncontract TestERC721 is ERC721Upgradeable {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" + }, + "@rarible/tokens/contracts/access/MinterAccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" + }, + "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n\n uint256[50] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\n\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\n using StringsUpgradeable for uint256;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _clearMetadata(uint256 tokenId) internal override virtual {\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n uint256[50] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721/ERC721Base.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeable.sol\";\nimport \"./ERC721DefaultApproval.sol\";\nimport \"./ERC721Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721Base is OwnableUpgradeable, ERC721DefaultApproval, ERC721BurnableUpgradeable, ERC721Lazy, HasContractURI {\n\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721Upgradeable, ERC721DefaultApproval) view returns (bool) {\n return ERC721DefaultApproval._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApproval, ERC721Upgradeable, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApproval.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721Lazy) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function _mint(address to, uint256 tokenId) internal override(ERC721Lazy, ERC721Upgradeable) {\n super._mint(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721BurnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721Upgradeable.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeable is Initializable, ContextUpgradeable, ERC721Upgradeable {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721DefaultApproval.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721Upgradeable.sol\";\n\nabstract contract ERC721DefaultApproval is ERC721Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Lazy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\n\nabstract contract ERC721Lazy is IERC721LazyMint, ERC721Upgradeable, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _mint(address to, uint256 tokenId) internal virtual override {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burned(tokenId), \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Rarible.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Base.sol\";\n\ncontract ERC721Rarible is ERC721Base {\n\n event CreateERC721Rarible(address owner, string name, string symbol);\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external initializer {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/HasContractURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/IsPrivateCollection.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" + }, + "@rarible/tokens/contracts/LibURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibURI {\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\n function checkPrefix(string memory base, string memory _tokenURI)\n internal\n pure\n returns (string memory)\n {\n bytes memory whatBytes = bytes(base);\n bytes memory whereBytes = bytes(_tokenURI);\n\n if (whatBytes.length > whereBytes.length) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n\n for (uint256 j = 0; j < whatBytes.length; j++) {\n if (whereBytes[j] != whatBytes[j]) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n }\n\n return _tokenURI;\n }\n}\n" + }, + "@rarible/tokens/contracts/Mint721Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\n\ncontract Mint721Validator is ERC1271Validator {\n function __Mint721Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint721\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nabstract contract ITransferExecutor {\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal virtual;\n}\n" + }, + "@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../lib/LibDeal.sol\";\nimport \"./ITransferExecutor.sol\";\n\nabstract contract ITransferManager is ITransferExecutor {\n\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\n}" + }, + "@rarible/transfer-manager/contracts/lib/LibDeal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\nimport \"./LibFeeSide.sol\";\n\nlibrary LibDeal {\n struct DealSide {\n LibAsset.Asset asset;\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n address proxy;\n address from;\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/lib/LibFeeSide.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibFeeSide {\n\n enum FeeSide {NONE, LEFT, RIGHT}\n\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n return FeeSide.NONE;\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/lib/LibTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibTransfer {\n function transferEth(address to, uint value) internal {\n (bool success,) = to.call{ value: value }(\"\");\n require(success, \"transfer failed\");\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/RaribleTransferManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n ProtocolFeeData memory _protocolFee,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param _protocolFee protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n ProtocolFeeData memory _protocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = _protocolFee.buyerAmount;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" + }, + "@rarible/transfer-manager/contracts/TransferExecutor.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" + }, + "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract PunkTransferProxy is OperatorRole, ITransferProxy {\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, uint punkIndex) = abi.decode(asset.assetType.data, (address, uint));\n ICryptoPunksMarket punkToken = ICryptoPunksMarket(token);\n //check punk from real owner\n require(punkToken.punkIndexToAddress(punkIndex) == from, \"Seller not punk owner\");\n //buy punk to proxy, now proxy is owner\n punkToken.buyPunk(punkIndex);\n //Transfer ownership of a punk to buyer\n punkToken.transferPunk(to, punkIndex);\n }\n}" + }, + "src/AssetMatchersImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { AssetMatcherCollection } from \"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\";\n" + }, + "src/Auction.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {AuctionHouse1155} from \"@rarible/auction/contracts/1155/AuctionHouse1155.sol\";\nimport {AuctionHouse721} from \"@rarible/auction/contracts/721/AuctionHouse721.sol\";\nimport {Wrapper} from \"@rarible/auction/contracts/wrapper/Wrapper.sol\";" + }, + "src/ExchangeV2Import.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ExchangeV2} from \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {ExchangeMetaV2} from \"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\";" + }, + "src/ExchangeWrapperImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" + }, + "src/RaribleExchangeWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {RaribleExchangeWrapper} from \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" + }, + "src/RoyaltiesRegistryImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {RoyaltiesProviderV2Legacy} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol\";\nimport {RoyaltiesProviderArtBlocks} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol\";\nimport {RoyaltiesProviderArtBlocksV2} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol\";\n" + }, + "src/TokensImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\n//tokens 721\nimport {ERC721Rarible} from \"@rarible/tokens/contracts/erc-721/ERC721Rarible.sol\";\nimport {ERC721RaribleMinimal} from \"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport {ERC721RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\";\n\n//tokens 1155\nimport {ERC1155Rarible} from \"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\";\nimport {ERC1155RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\";\n\n//meta tokens\nimport {ERC721RaribleMeta} from \"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\";\nimport {ERC1155RaribleMeta} from \"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\";\n\n//beacons\nimport {ERC1155RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\";\nimport {ERC721RaribleMinimalBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\";\nimport {ERC721RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol\";\nimport {ERC1155RaribleBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\";\nimport {ERC721RaribleMinimalBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\";\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" + }, + "src/TransferProxiesImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ERC721LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\";\nimport {ERC1155LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\nimport {PunkTransferProxy} from \"@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol\";\n" + }, + "src/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/proxy/ProxyAdmin.sol\";\n" + }, + "test/contracts/ERC721LazyMintTest.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol\";\n" + }, + "test/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" + }, + "test/contracts/TestERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155 } from \"@rarible/test/contracts/TestERC1155.sol\";\n\n" + }, + "test/contracts/TestERC1155RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol\";\n\n" + }, + "test/contracts/TestERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" + }, + "test/contracts/TestERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721 } from \"@rarible/test/contracts/TestERC721.sol\";\n" + }, + "test/contracts/TestERC721RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV1 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol\";\n" + }, + "test/contracts/TestERC721RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol\";\n\n" + }, + "test/contracts/WrapperHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport { WrapperHelper } from \"@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol\";" + }, + "test/exchange/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/base_sepolia/RaribleExchangeWrapper.json b/projects/hardhat-deploy/deployments/base_sepolia/RaribleExchangeWrapper.json index 1561af171..e1b0745f2 100644 --- a/projects/hardhat-deploy/deployments/base_sepolia/RaribleExchangeWrapper.json +++ b/projects/hardhat-deploy/deployments/base_sepolia/RaribleExchangeWrapper.json @@ -1,12 +1,12 @@ { - "address": "0x4fEB488209d2A0A71fEef28E5fA306F15b2D5FEa", + "address": "0x3d3c8f3aCcf388c3618BbE80598692B6d15bd4D5", "abi": [ { "inputs": [ { - "internalType": "address[10]", + "internalType": "address[11]", "name": "marketplaces", - "type": "address[10]" + "type": "address[11]" }, { "internalType": "address", @@ -379,6 +379,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "seaPort_1_6", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -513,34 +526,34 @@ "type": "receive" } ], - "transactionHash": "0xd33cf980027e4129c897e1cba44f405583503c93694e84fcfd96059cc686b656", + "transactionHash": "0x482c9da35d68354a82cf5a7aec54350cf6caa4c96aa4bea126139cae51e18b23", "receipt": { "to": null, "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x4fEB488209d2A0A71fEef28E5fA306F15b2D5FEa", - "transactionIndex": 1, - "gasUsed": "4082923", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000002000000000000000000004000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xcc440ff9d14f2ed482786113ed1660944472ee0a3f1fc92c549ad204ecc79921", - "transactionHash": "0xd33cf980027e4129c897e1cba44f405583503c93694e84fcfd96059cc686b656", + "contractAddress": "0x3d3c8f3aCcf388c3618BbE80598692B6d15bd4D5", + "transactionIndex": 2, + "gasUsed": "4210107", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000010000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc08d5e02cd61a79e1a2b720b9e0a532cd7cd9b6de32c90136bef1e7ea5616569", + "transactionHash": "0x482c9da35d68354a82cf5a7aec54350cf6caa4c96aa4bea126139cae51e18b23", "logs": [ { - "transactionIndex": 1, - "blockNumber": 3385043, - "transactionHash": "0xd33cf980027e4129c897e1cba44f405583503c93694e84fcfd96059cc686b656", - "address": "0x4fEB488209d2A0A71fEef28E5fA306F15b2D5FEa", + "transactionIndex": 2, + "blockNumber": 8870387, + "transactionHash": "0x482c9da35d68354a82cf5a7aec54350cf6caa4c96aa4bea126139cae51e18b23", + "address": "0x3d3c8f3aCcf388c3618BbE80598692B6d15bd4D5", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" ], "data": "0x", - "logIndex": 0, - "blockHash": "0xcc440ff9d14f2ed482786113ed1660944472ee0a3f1fc92c549ad204ecc79921" + "logIndex": 3, + "blockHash": "0xc08d5e02cd61a79e1a2b720b9e0a532cd7cd9b6de32c90136bef1e7ea5616569" } ], - "blockNumber": 3385043, - "cumulativeGasUsed": "4129824", + "blockNumber": 8870387, + "cumulativeGasUsed": "4380634", "status": 1, "byzantium": true }, @@ -555,18 +568,19 @@ "0x00000000000001ad428e4906aE43D8F9852d0dD6", "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000", - "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC" + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", + "0x0000000000000068F116a894984e2DB1123eB395" ], "0x0000000000000000000000000000000000000000", [ "0xBc57D6e50fa760A01536A7c2EAEDD6fC9b2A4f9A" ] ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[10]\",\"name\":\"marketplaces\",\"type\":\"address[10]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":\"RaribleExchangeWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165 is IERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n constructor () internal {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Receiver.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\ncontract ERC1155Holder is ERC1155Receiver {\\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155BatchReceived.selector;\\n }\\n}\\n\",\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155Receiver.sol\\\";\\nimport \\\"../../introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\\n constructor() internal {\\n _registerInterface(\\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n}\\n\",\"keccak256\":\"0x57a0e246fb1c8f9cccf91c508eafe474e40260a31de3a39019ba8312cfdf9b2d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155Receiver is IERC165 {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC721Receiver.sol\\\";\\n\\n /**\\n * @dev Implementation of the {IERC721Receiver} interface.\\n *\\n * Accepts all token transfers. \\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\\n */\\ncontract ERC721Holder is IERC721Receiver {\\n\\n /**\\n * @dev See {IERC721Receiver-onERC721Received}.\\n *\\n * Always returns `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n}\\n\",\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3a89b0a6ff66280e8e48f9f2c862d5c0e8ab23ee306ae5b204cd588931661a93\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n}\\n\",\"keccak256\":\"0xa9d02b9e22ffb9d25f412979951822d56b05d857de1f47ce82ad7b4a8d4601f6\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n require(newFill.rightValue > 0 && newFill.leftValue > 0, \\\"nothing to fill\\\");\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3f48a34d89493d2c5799d4ebcb80d714de368f1470234b7539ad0a4296055241\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0x51b74eb51875062b862e2fe38d0294e22a764f9f5dd470fc1cfe433207b124cb\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill){\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x178b508b30b501b104be37d15c159a16b2823869bdb37a9227dc0c4f624eb3bc\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\\\";\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport \\\"./interfaces/IWyvernExchange.sol\\\";\\nimport \\\"./interfaces/IExchangeV2.sol\\\";\\nimport \\\"./interfaces/ISeaPort.sol\\\";\\nimport \\\"./interfaces/Ix2y2.sol\\\";\\nimport \\\"./interfaces/ILooksRare.sol\\\";\\nimport \\\"./interfaces/IBlur.sol\\\";\\n\\nimport \\\"./libraries/IsPausable.sol\\\";\\n\\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\\n using LibTransfer for address;\\n using BpLibrary for uint;\\n using SafeMath for uint;\\n\\n //marketplaces\\n address public immutable wyvernExchange;\\n address public immutable exchangeV2;\\n address public immutable seaPort_1_1;\\n address public immutable x2y2;\\n address public immutable looksRare;\\n address public immutable sudoswap;\\n address public immutable seaPort_1_4;\\n address public immutable looksRareV2;\\n address public immutable blur;\\n address public immutable seaPort_1_5;\\n\\n //currencties\\n address public immutable weth;\\n\\n //constants\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n event Execution(bool result);\\n\\n enum Markets {\\n ExchangeV2,\\n WyvernExchange,\\n SeaPort_1_1,\\n X2Y2,\\n LooksRareOrders,\\n SudoSwap,\\n SeaPort_1_4,\\n LooksRareV2,\\n Blur,\\n SeaPort_1_5\\n }\\n\\n enum AdditionalDataTypes {\\n NoAdditionalData,\\n RoyaltiesAdditionalData\\n }\\n\\n enum Currencies {\\n ETH,\\n WETH\\n }\\n\\n /**\\n @notice struct for the purchase data\\n @param marketId - market key from Markets enum (what market to use)\\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\\n bytes (27,28) used for dataType\\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\\n @param data - data for market call\\n */\\n struct PurchaseDetails {\\n Markets marketId;\\n uint256 amount;\\n uint fees;\\n bytes data;\\n }\\n\\n /**\\n @notice struct for the data with additional Ddta\\n @param data - data for market call\\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\\n */\\n struct AdditionalData {\\n bytes data;\\n uint[] additionalRoyalties;\\n }\\n\\n constructor(\\n address[10] memory marketplaces,\\n //address _wyvernExchange, 0\\n //address _exchangeV2, 1\\n //address _seaPort_1_1, 2\\n //address _x2y2, 3\\n //address _looksRare, 4\\n //address _sudoswap, 5\\n //address _seaPort_1_4, 6\\n //address _looksRareV2, 7\\n //address _blur, 8\\n //address _seaPort_1_5, 9\\n address _weth,\\n address[] memory transferProxies\\n ) {\\n wyvernExchange = marketplaces[0];\\n exchangeV2 = marketplaces[1];\\n seaPort_1_1 = marketplaces[2];\\n x2y2 = marketplaces[3];\\n looksRare = marketplaces[4];\\n sudoswap = marketplaces[5];\\n seaPort_1_4 = marketplaces[6];\\n looksRareV2 = marketplaces[7];\\n blur = marketplaces[8];\\n seaPort_1_5 = marketplaces[9];\\n\\n weth = _weth;\\n\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n if (_weth != address(0)){\\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n }\\n\\n /**\\n @notice executes a single purchase\\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n */\\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\\n requireNotPaused();\\n \\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\\n \\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n Currencies currency = getCurrency(purchaseDetails.fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n emit Execution(success);\\n \\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes an array of purchases\\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\\n */\\n \\n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\\n requireNotPaused();\\n\\n uint sumFirstFeesETH = 0;\\n uint sumSecondFeesETH = 0;\\n uint sumFirstFeesWETH = 0;\\n uint sumSecondFeesWETH = 0;\\n bool result = false;\\n\\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = 0;\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\\n }\\n\\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n Currencies currency = getCurrency(purchaseDetails[i].fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n result = result || success;\\n emit Execution(success);\\n }\\n\\n require(result, \\\"no successful executions\\\");\\n\\n //pay fees in ETH \\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\\n\\n //pay fees in WETH\\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\\n\\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes one purchase in ETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n uint paymentAmount = purchaseDetails.amount;\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase wyvernExchange failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\\n\\n if (allowFail) {\\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n Ix2y2(x2y2).run{value : paymentAmount}(input);\\n }\\n\\n //for every element in input.details[] getting\\n // order = input.details[i].orderIdx\\n // and from that order getting item = input.details[i].itemId\\n for (uint i = 0; i < input.details.length; ++i) {\\n uint orderId = input.details[i].orderIdx;\\n uint itemId = input.details[i].itemIdx;\\n bytes memory data = input.orders[orderId].items[itemId].data;\\n {\\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\\n }\\n }\\n\\n // 1 = erc-721\\n if (input.orders[orderId].delegateType == 1) {\\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair721 memory p = pairs[j];\\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\\n }\\n } else if (input.orders[orderId].delegateType == 2) {\\n // 2 = erc-1155\\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair1155 memory p = pairs[j];\\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \\\"\\\");\\n }\\n } else {\\n revert(\\\"unknown delegateType x2y2\\\");\\n }\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\\n if (allowFail) {\\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase sudoswap failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase LooksRareV2 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.Blur){\\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\\n if (allowFail) {\\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId ETH\\\");\\n }\\n\\n //transferring royalties\\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\\n \\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice executes one purchase in WETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n\\n //buying\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed WETH\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId WETH\\\");\\n }\\n \\n //transfer royalties\\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\\n\\n //get fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice transfers ETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n LibTransfer.transferEth(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers WETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers change back to sender\\n */\\n function transferChange() internal {\\n uint ethAmount = address(this).balance;\\n if (ethAmount > 0) {\\n address(msg.sender).transferEth(ethAmount);\\n }\\n }\\n\\n /**\\n @notice transfers weth change back to sender\\n */\\n function transferChangeWETH() internal {\\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\\n if (wethAmount > 0) {\\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\\n }\\n }\\n\\n /**\\n @notice parses fees in base points from one uint and calculates real amount of fees\\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\\n @param amount price of the order\\n @return firstFeeAmount real amount for the first fee\\n @return secondFeeAmount real amount for the second fee\\n */\\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\\n uint firstFee = uint(uint16(fees >> 16));\\n uint secondFee = uint(uint16(fees));\\n return (amount.bp(firstFee), amount.bp(secondFee));\\n }\\n\\n /**\\n @notice parses \\\"fees\\\" field to find the currency for the purchase\\n @param fees field with encoded data\\n @return 0 if ETH, 1 if WETH ERC-20\\n */\\n function getCurrency(uint fees) internal pure returns(Currencies) {\\n return Currencies(uint16(fees >> 48));\\n }\\n\\n\\n /**\\n @notice parses _data to data for market call and additionalData\\n @param feesAndDataType 27 and 28 bytes for dataType\\n @return marketData data for market call\\n @return additionalRoyalties array uint256, (base point + address)\\n */\\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\\n uint[] memory additionalRoyalties;\\n\\n //return no royalties if wrong data type\\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\\n return (_data, additionalRoyalties);\\n }\\n\\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\\n\\n //return no royalties if market doesn't support royalties\\n if (supportsRoyalties(marketId)) {\\n return (additionalData.data, additionalData.additionalRoyalties);\\n } else {\\n return (additionalData.data, additionalRoyalties);\\n } \\n }\\n \\n revert(\\\"unknown additionalDataType\\\");\\n }\\n\\n /**\\n @notice transfer additional royalties in ETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeETH(value, account);\\n }\\n }\\n }\\n\\n /**\\n @notice transfer additional royalties in WETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeWETH(value, account);\\n }\\n }\\n }\\n\\n // modifies `src`\\n function _arrayReplace(\\n bytes memory src,\\n bytes memory replacement,\\n bytes memory mask\\n ) internal view virtual {\\n require(src.length == replacement.length);\\n require(src.length == mask.length);\\n\\n for (uint256 i = 0; i < src.length; ++i) {\\n if (mask[i] != 0) {\\n src[i] = replacement[i];\\n }\\n }\\n }\\n\\n /**\\n @notice returns true if this contract supports additional royalties for the marketplace;\\n now royalties are supported for:\\n 1. SudoSwap\\n 2. LooksRare old\\n 3. LooksRare V2\\n */\\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\\n if (\\n marketId == Markets.SudoSwap ||\\n marketId == Markets.LooksRareOrders ||\\n marketId == Markets.LooksRareV2\\n ) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\\n uint result = 0;\\n\\n Currencies currency = getCurrency(detail.fees);\\n\\n //for every purchase with WETH we sum amount, fees and royalties needed\\n if (currency == Currencies.WETH) {\\n\\n //add amount\\n result = result + detail.amount;\\n\\n //add fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\\n result = result + firstFeeAmount + secondFeeAmount;\\n\\n //add royalties\\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\\n for (uint j = 0; j < royalties.length; ++j) {\\n uint royaltyBasePoint = uint(royalties[j] >> 160);\\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\\n result = result + royaltyValue;\\n }\\n }\\n\\n return result;\\n }\\n\\n /**\\n @notice approves weth for a list of the addresses\\n @param transferProxies - array of addresses to approve WETH for\\n */\\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n receive() external payable {}\\n}\",\"keccak256\":\"0xeab6e5c7ffdbfc05eb128b8b75ff03a37d85b1e8eb4b4c0ede7311106c1259c1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\n\\ninterface IBlur {\\n enum Side { Buy, Sell }\\n enum SignatureVersion { Single, Bulk }\\n enum AssetType { ERC721, ERC1155 }\\n\\n struct Fee {\\n uint16 rate;\\n address payable recipient;\\n }\\n \\n struct Order {\\n address trader;\\n Side side;\\n address matchingPolicy;\\n address collection;\\n uint256 tokenId;\\n uint256 amount;\\n address paymentToken;\\n uint256 price;\\n uint256 listingTime;\\n /* Order expiration timestamp - 0 for oracle cancellations. */\\n uint256 expirationTime;\\n Fee[] fees;\\n uint256 salt;\\n bytes extraParams;\\n }\\n\\n struct Input {\\n Order order;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n bytes extraSignature;\\n SignatureVersion signatureVersion;\\n uint256 blockNumber;\\n }\\n\\n function execute(Input calldata sell, Input calldata buy)\\n external\\n payable;\\n}\\n\",\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-v2/contracts/ExchangeV2.sol\\\";\\n\\nimport {RoyaltiesRegistry} from \\\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\\\";\\nimport {TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\\\";\\nimport {ERC20TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\\\";\\n\\ninterface IExchangeV2 {\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable;\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable;\\n}\",\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibLooksRare.sol\\\";\\n\\ninterface ILooksRare {\\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\\n\\n /**\\n * @notice This function allows a user to execute a taker bid (against a maker ask).\\n * @param takerBid Taker bid struct\\n * @param makerAsk Maker ask struct\\n * @param makerSignature Maker signature\\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\\n * @param affiliate Affiliate address\\n */\\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\\n}\\n\",\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibSeaPort.sol\\\";\\n\\ninterface ISeaPort {\\n function fulfillAdvancedOrder(\\n LibSeaPort.AdvancedOrder calldata advancedOrder,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n bytes32 fulfillerConduitKey,\\n address recipient\\n ) external payable returns (bool fulfilled);\\n\\n function fulfillAvailableAdvancedOrders(\\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\\n bytes32 fulfillerConduitKey,\\n address recipient,\\n uint256 maximumFulfilled\\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\\n\\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\\n external\\n payable\\n returns (bool fulfilled);\\n}\",\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface IWyvernExchange {\\n function atomicMatch_(\\n address[14] memory addrs,\\n uint[18] memory uints,\\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\\n bytes memory calldataBuy,\\n bytes memory calldataSell,\\n bytes memory replacementPatternBuy,\\n bytes memory replacementPatternSell,\\n bytes memory staticExtradataBuy,\\n bytes memory staticExtradataSell,\\n uint8[2] memory vs,\\n bytes32[5] memory rssMetadata)\\n external\\n payable;\\n\\n enum Side {\\n Buy,\\n Sell\\n }\\n\\n enum SaleKind {\\n FixedPrice,\\n DutchAuction\\n }\\n\\n function calculateFinalPrice(\\n Side side,\\n SaleKind saleKind,\\n uint256 basePrice,\\n uint256 extra,\\n uint256 listingTime,\\n uint256 expirationTime\\n ) external view returns (uint256);\\n}\",\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface Ix2y2 {\\n\\n struct OrderItem {\\n uint256 price;\\n bytes data;\\n }\\n\\n struct Pair721 {\\n address token;\\n uint256 tokenId;\\n }\\n\\n struct Pair1155 {\\n address token;\\n uint256 tokenId;\\n uint256 amount;\\n }\\n\\n struct Order {\\n uint256 salt;\\n address user;\\n uint256 network;\\n uint256 intent;\\n uint256 delegateType;\\n uint256 deadline;\\n address currency;\\n bytes dataMask;\\n OrderItem[] items;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n uint8 signVersion;\\n }\\n\\n struct Fee {\\n uint256 percentage;\\n address to;\\n }\\n\\n struct SettleDetail {\\n Op op;\\n uint256 orderIdx;\\n uint256 itemIdx;\\n uint256 price;\\n bytes32 itemHash;\\n address executionDelegate;\\n bytes dataReplacement;\\n uint256 bidIncentivePct;\\n uint256 aucMinIncrementPct;\\n uint256 aucIncDurationSecs;\\n Fee[] fees;\\n }\\n\\n struct SettleShared {\\n uint256 salt;\\n uint256 deadline;\\n uint256 amountToEth;\\n uint256 amountToWeth;\\n address user;\\n bool canFail;\\n }\\n\\n struct RunInput {\\n Order[] orders;\\n SettleDetail[] details;\\n SettleShared shared;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n }\\n\\n enum Op {\\n INVALID,\\n // off-chain\\n COMPLETE_SELL_OFFER,\\n COMPLETE_BUY_OFFER,\\n CANCEL_OFFER,\\n // auction\\n BID,\\n COMPLETE_AUCTION,\\n REFUND_AUCTION,\\n REFUND_AUCTION_STUCK_ITEM\\n }\\n\\n function run(RunInput memory input) external payable;\\n}\",\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nabstract contract IsPausable is Ownable {\\n bool public paused;\\n\\n event Paused(bool paused);\\n\\n function pause(bool _paused) external onlyOwner {\\n paused = _paused;\\n emit Paused(_paused);\\n }\\n\\n function requireNotPaused() internal view {\\n require (!paused, \\\"the contract is paused\\\");\\n }\\n\\n}\\n\",\"keccak256\":\"0xd0ea1d6838dd79b8cfe64e777e4f84456928f0e3621fbb6acd00492e738b2b61\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibLooksRare {\\n struct MakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address signer; // signer of the maker order\\n address collection; // collection address\\n uint256 price; // price (used as )\\n uint256 tokenId; // id of the token\\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\\n address currency; // currency (e.g., WETH)\\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\\n uint256 startTime; // startTime in timestamp\\n uint256 endTime; // endTime in timestamp\\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // additional parameters\\n uint8 v; // v: parameter (27 or 28)\\n bytes32 r; // r: parameter\\n bytes32 s; // s: parameter\\n }\\n\\n struct TakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address taker; // msg.sender\\n uint256 price; // final price for the purchase\\n uint256 tokenId;\\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // other params (e.g., tokenId)\\n }\\n\\n /**\\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\\n */\\n enum CollectionType {\\n ERC721,\\n ERC1155\\n }\\n\\n /**\\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\\n */\\n enum QuoteType {\\n Bid,\\n Ask\\n }\\n /**\\n * 1. Maker struct\\n */\\n\\n /**\\n * @notice Maker is the struct for a maker order.\\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\\n * @param globalNonce Global user order nonce for maker orders\\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\\n * @param strategyId Strategy id\\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\\n * @param collection Collection address\\n * @param currency Currency address (@dev address(0) = ETH)\\n * @param signer Signer address\\n * @param startTime Start timestamp\\n * @param endTime End timestamp\\n * @param price Minimum price for maker ask, maximum price for maker bid\\n * @param itemIds Array of itemIds\\n * @param amounts Array of amounts\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Maker {\\n QuoteType quoteType;\\n uint256 globalNonce;\\n uint256 subsetNonce;\\n uint256 orderNonce;\\n uint256 strategyId;\\n CollectionType collectionType;\\n address collection;\\n address currency;\\n address signer;\\n uint256 startTime;\\n uint256 endTime;\\n uint256 price;\\n uint256[] itemIds;\\n uint256[] amounts;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 2. Taker struct\\n */\\n\\n /**\\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Taker {\\n address recipient;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 3. Merkle tree struct\\n */\\n\\n enum MerkleTreeNodePosition {\\n Left,\\n Right\\n }\\n\\n /**\\n * @notice MerkleTreeNode is a MerkleTree's node.\\n * @param value It can be an order hash or a proof\\n * @param position The node's position in its branch.\\n * It can be left or right or none\\n * (before the tree is sorted).\\n */\\n struct MerkleTreeNode {\\n bytes32 value;\\n MerkleTreeNodePosition position;\\n }\\n\\n /**\\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\\n * @dev A Merkle tree can be computed with order hashes.\\n * It can contain order hashes from both maker bid and maker ask structs.\\n * @param root Merkle root\\n * @param proof Array containing the merkle proof\\n */\\n struct MerkleTree {\\n bytes32 root;\\n MerkleTreeNode[] proof;\\n }\\n}\\n\",\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibSeaPort {\\n /**\\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\\n * matching, a group of six functions may be called that only requires a\\n * subset of the usual order arguments. Note the use of a \\\"basicOrderType\\\"\\n * enum; this represents both the usual order type as well as the \\\"route\\\"\\n * of the basic order (a simple derivation function for the basic order\\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\\n */\\n struct BasicOrderParameters {\\n address considerationToken; // 0x24\\n uint256 considerationIdentifier; // 0x44\\n uint256 considerationAmount; // 0x64\\n address payable offerer; // 0x84\\n address zone; // 0xa4\\n address offerToken; // 0xc4\\n uint256 offerIdentifier; // 0xe4\\n uint256 offerAmount; // 0x104\\n BasicOrderType basicOrderType; // 0x124\\n uint256 startTime; // 0x144\\n uint256 endTime; // 0x164\\n bytes32 zoneHash; // 0x184\\n uint256 salt; // 0x1a4\\n bytes32 offererConduitKey; // 0x1c4\\n bytes32 fulfillerConduitKey; // 0x1e4\\n uint256 totalOriginalAdditionalRecipients; // 0x204\\n AdditionalRecipient[] additionalRecipients; // 0x224\\n bytes signature; // 0x244\\n }\\n /**\\n * @dev Basic orders can supply any number of additional recipients, with the\\n * implied assumption that they are supplied from the offered ETH (or other\\n * native token) or ERC20 token for the order.\\n */\\n struct AdditionalRecipient {\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum BasicOrderType {\\n // 0: no partial fills, anyone can execute\\n ETH_TO_ERC721_FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n ETH_TO_ERC721_PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC721_FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 4: no partial fills, anyone can execute\\n ETH_TO_ERC1155_FULL_OPEN,\\n\\n // 5: partial fills supported, anyone can execute\\n ETH_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 6: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 7: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 8: no partial fills, anyone can execute\\n ERC20_TO_ERC721_FULL_OPEN,\\n\\n // 9: partial fills supported, anyone can execute\\n ERC20_TO_ERC721_PARTIAL_OPEN,\\n\\n // 10: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC721_FULL_RESTRICTED,\\n\\n // 11: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 12: no partial fills, anyone can execute\\n ERC20_TO_ERC1155_FULL_OPEN,\\n\\n // 13: partial fills supported, anyone can execute\\n ERC20_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 14: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 15: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 16: no partial fills, anyone can execute\\n ERC721_TO_ERC20_FULL_OPEN,\\n\\n // 17: partial fills supported, anyone can execute\\n ERC721_TO_ERC20_PARTIAL_OPEN,\\n\\n // 18: no partial fills, only offerer or zone can execute\\n ERC721_TO_ERC20_FULL_RESTRICTED,\\n\\n // 19: partial fills supported, only offerer or zone can execute\\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\\n\\n // 20: no partial fills, anyone can execute\\n ERC1155_TO_ERC20_FULL_OPEN,\\n\\n // 21: partial fills supported, anyone can execute\\n ERC1155_TO_ERC20_PARTIAL_OPEN,\\n\\n // 22: no partial fills, only offerer or zone can execute\\n ERC1155_TO_ERC20_FULL_RESTRICTED,\\n\\n // 23: partial fills supported, only offerer or zone can execute\\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\\n }\\n\\n /**\\n * @dev The full set of order components, with the exception of the counter,\\n * must be supplied when fulfilling more sophisticated orders or groups of\\n * orders. The total number of original consideration items must also be\\n * supplied, as the caller may specify additional consideration items.\\n */\\n struct OrderParameters {\\n address offerer; // 0x00\\n address zone; // 0x20\\n OfferItem[] offer; // 0x40\\n ConsiderationItem[] consideration; // 0x60\\n OrderType orderType; // 0x80\\n uint256 startTime; // 0xa0\\n uint256 endTime; // 0xc0\\n bytes32 zoneHash; // 0xe0\\n uint256 salt; // 0x100\\n bytes32 conduitKey; // 0x120\\n uint256 totalOriginalConsiderationItems; // 0x140\\n // offer.length // 0x160\\n }\\n\\n /**\\n * @dev Orders require a signature in addition to the other order parameters.\\n */\\n struct Order {\\n OrderParameters parameters;\\n bytes signature;\\n }\\n\\n struct AdvancedOrder {\\n OrderParameters parameters;\\n uint120 numerator;\\n uint120 denominator;\\n bytes signature;\\n bytes extraData;\\n }\\n\\n struct OfferItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n }\\n\\n /**\\n * @dev A consideration item has the same five components as an offer item and\\n * an additional sixth component designating the required recipient of the\\n * item.\\n */\\n struct ConsiderationItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum OrderType {\\n // 0: no partial fills, anyone can execute\\n FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n PARTIAL_RESTRICTED\\n }\\n\\n // prettier-ignore\\n enum ItemType {\\n // 0: ETH on mainnet, MATIC on polygon, etc.\\n NATIVE,\\n\\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\\n ERC20,\\n\\n // 2: ERC721 items\\n ERC721,\\n\\n // 3: ERC1155 items\\n ERC1155,\\n\\n // 4: ERC721 items where a number of tokenIds are supported\\n ERC721_WITH_CRITERIA,\\n\\n // 5: ERC1155 items where a number of ids are supported\\n ERC1155_WITH_CRITERIA\\n }\\n\\n /**\\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\\n * offer and consideration items, then generates a single execution\\n * element. A given fulfillment can be applied to as many offer and\\n * consideration items as desired, but must contain at least one offer and\\n * at least one consideration that match. The fulfillment must also remain\\n * consistent on all key parameters across all offer items (same offerer,\\n * token, type, tokenId, and conduit preference) as well as across all\\n * consideration items (token, type, tokenId, and recipient).\\n */\\n struct Fulfillment {\\n FulfillmentComponent[] offerComponents;\\n FulfillmentComponent[] considerationComponents;\\n }\\n\\n /**\\n * @dev Each fulfillment component contains one index referencing a specific\\n * order and another referencing a specific offer or consideration item.\\n */\\n struct FulfillmentComponent {\\n uint256 orderIndex;\\n uint256 itemIndex;\\n }\\n\\n /**\\n * @dev An execution is triggered once all consideration items have been zeroed\\n * out. It sends the item in question from the offerer to the item's\\n * recipient, optionally sourcing approvals from either this contract\\n * directly or from the offerer's chosen conduit if one is specified. An\\n * execution is not provided as an argument, but rather is derived via\\n * orders, criteria resolvers, and fulfillments (where the total number of\\n * executions will be less than or equal to the total number of indicated\\n * fulfillments) and returned as part of `matchOrders`.\\n */\\n struct Execution {\\n ReceivedItem item;\\n address offerer;\\n bytes32 conduitKey;\\n }\\n\\n /**\\n * @dev A received item is translated from a utilized consideration item and has\\n * the same four components as a spent item, as well as an additional fifth\\n * component designating the required recipient of the item.\\n */\\n struct ReceivedItem {\\n ItemType itemType;\\n address token;\\n uint256 identifier;\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n struct CriteriaResolver {\\n uint256 orderIndex;\\n Side side;\\n uint256 index;\\n uint256 identifier;\\n bytes32[] criteriaProof;\\n }\\n\\n // prettier-ignore\\n enum Side {\\n // 0: Items that can be spent\\n OFFER,\\n\\n // 1: Items that must be received\\n CONSIDERATION\\n }\\n}\\n\",\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x7f99c2e0828bbba57e1599d92f1368b62ef0e9cd62bda3c4091e108d1fbc35b6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x5e982ad688493d9c729757c2ebd98efecd0bf3b33992f7342edf6c349874b86c\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x363fa1f25a41aa7d7b3fb9e2d182dec04c3774d06d9eed428b3fe48140fa4b7e\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x87cd179c900495ee44c1b9c7fa57f4da0228217d78792bd6d6a6fde6c32be2b2\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x6101e06040523480156200001257600080fd5b5060405162004cd538038062004cd5833981016040819052620000359162000344565b60006200004162000210565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200009d6301ffc9a760e01b62000214565b620000af630271189760e51b62000214565b82516001600160601b0319606091821b811660809081526020860151831b821660a09081526040870151841b831660c090815284880151851b841660e090815292880151851b841661010090815291880151851b841661012090815290880151851b84166101405291870151841b831661016052860151831b821661018052850151821b81166101a0529083901b166101c05260005b815181101562000206576001600160a01b03831615620001fd57826001600160a01b031663095ea7b38383815181106200017b57fe5b60200260200101516000196040518363ffffffff1660e01b8152600401620001a592919062000429565b602060405180830381600087803b158015620001c057600080fd5b505af1158015620001d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fb919062000400565b505b60010162000145565b5050505062000466565b3390565b6001600160e01b0319808216141562000274576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b80516001600160a01b0381168114620002b457600080fd5b919050565b600082601f830112620002ca578081fd5b815160206001600160401b03821115620002e057fe5b808202620002f082820162000442565b8381528281019086840183880185018910156200030b578687fd5b8693505b85841015620003385762000323816200029c565b8352600193909301929184019184016200030f565b50979650505050505050565b600080600061018084860312156200035a578283fd5b84601f85011262000369578283fd5b610140620003778162000442565b908501908086888411156200038a578687fd5b865b600a811015620003b757620003a1826200029c565b845260209384019391909101906001016200038c565b50508095505050620003c9816200029c565b61016086015190935090506001600160401b03811115620003e8578182fd5b620003f686828701620002b9565b9150509250925092565b60006020828403121562000412578081fd5b8151801515811462000422578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b03811182821017156200045e57fe5b604052919050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c61475f62000576600039806104f7528061060f528061082c528061099f52806121fd52806122b452806123435250806104af5280611cd852806120c5525080610c355280611af35280611b8d5250806104d352806119e9525080610bed52806119175280611ff5525080610524528061184552508061090b528061161952806116b3525080610d6c52806111c052806112565250806103af5280610f0e5280611e4a52508061092f52806110bd5280611f25525080610c115280610feb525061475f6000f3fe6080604052600436106101435760003560e01c806386dcbd27116100b6578063bd4486ee1161006f578063bd4486ee14610319578063c9f0a2fa1461032e578063df6c255814610343578063f23a6e6114610358578063f2fde38b14610378578063fc40c9c7146103985761014a565b806386dcbd27146102875780638da5cb5b146102a75780639110c777146102bc578063a05f32dc146102d1578063b94ee332146102e6578063bc197c81146102f95761014a565b80633733b82b116101085780633733b82b1461020b5780633fc8cef3146102205780635c975abb146102355780635ea1e4c91461024a578063715018a61461025f57806386496e7a146102745761014a565b80628534f71461014f57806301ffc9a71461017a57806302329a29146101a7578063150b7a02146101c9578063349d6a85146101f65761014a565b3661014a57005b600080fd5b34801561015b57600080fd5b506101646103ad565b6040516101719190613e85565b60405180910390f35b34801561018657600080fd5b5061019a6101953660046136e6565b6103d1565b6040516101719190613f0e565b3480156101b357600080fd5b506101c76101c23660046136ae565b6103f4565b005b3480156101d557600080fd5b506101e96101e4366004613318565b61049d565b6040516101719190613f19565b34801561020257600080fd5b506101646104ad565b34801561021757600080fd5b506101646104d1565b34801561022c57600080fd5b506101646104f5565b34801561024157600080fd5b5061019a610519565b34801561025657600080fd5b50610164610522565b34801561026b57600080fd5b506101c7610546565b6101c761028236600461386a565b6105f2565b34801561029357600080fd5b506101c76102a23660046133e7565b6107bd565b3480156102b357600080fd5b506101646108fa565b3480156102c857600080fd5b50610164610909565b3480156102dd57600080fd5b5061016461092d565b6101c76102f43660046135f3565b610951565b34801561030557600080fd5b506101e961031436600461326f565b610bda565b34801561032557600080fd5b50610164610beb565b34801561033a57600080fd5b50610164610c0f565b34801561034f57600080fd5b50610164610c33565b34801561036457600080fd5b506101e9610373366004613381565b610c57565b34801561038457600080fd5b506101c7610393366004613253565b610c68565b3480156103a457600080fd5b50610164610d6a565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b6103fc610d8e565b6001600160a01b031661040d6108fa565b6001600160a01b031614610456576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61054e610d8e565b6001600160a01b031661055f6108fa565b6001600160a01b0316146105a8576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6105fa610d92565b600061060584610de5565b905080156106b8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610644610d8e565b30846040518463ffffffff1660e01b815260040161066493929190613e99565b602060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b691906136ca565b505b60006106c78560400151610eb0565b905060008080808460018111156106da57fe5b141561070b576106eb886000610ecc565b919450925090506106fc8288611de2565b6107068187611de2565b610766565b600184600181111561071957fe5b14156107455761072a886000611e0d565b9194509250905061073b82886121c9565b61070681876121c9565b60405162461bcd60e51b815260040161075d906140a2565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107959190613f0e565b60405180910390a16107a5612286565b84156107b3576107b361229a565b5050505050505050565b6107c5610d8e565b6001600160a01b03166107d66108fa565b6001600160a01b03161461081f576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b60005b818110156108f5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061086557fe5b905060200201602081019061087a9190613253565b6000196040518363ffffffff1660e01b815260040161089a929190613ef5565b602060405180830381600087803b1580156108b457600080fd5b505af11580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec91906136ca565b50600101610822565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610959610d92565b60008060008060008060005b8a518110156109965761098a8b828151811061097d57fe5b6020026020010151610de5565b90910190600101610965565b508015610a48577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109d4610d8e565b30846040518463ffffffff1660e01b81526004016109f493929190613e99565b602060405180830381600087803b158015610a0e57600080fd5b505af1158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4691906136ca565b505b60005b8a51811015610b72576000610a768c8381518110610a6557fe5b602002602001015160400151610eb0565b90506000808080846001811115610a8957fe5b1415610ad057610aac8f8681518110610a9e57fe5b60200260200101518d610ecc565b91945092509050610abd8b836123e8565b9a50610ac98a826123e8565b9950610b21565b6001846001811115610ade57fe5b141561074557610b018f8681518110610af357fe5b60200260200101518d611e0d565b91945092509050610b1289836123e8565b9850610b1e88826123e8565b97505b8680610b2a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b5b9190613f0e565b60405180910390a150505050806001019050610a4b565b5081610b905760405162461bcd60e51b815260040161075d906142b3565b610b9a868a611de2565b610ba48589611de2565b610bae848a6121c9565b610bb883896121c9565b610bc0612286565b8015610bce57610bce61229a565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c70610d8e565b6001600160a01b0316610c816108fa565b6001600160a01b031614610cca576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b6001600160a01b038116610d0f5760405162461bcd60e51b81526004018080602001828103825260268152602001806146c36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610de3576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610dfb8460400151610eb0565b90506001816001811115610e0b57fe5b1415610ea95760208401516040850151928101926000918291610e2d91612449565b91509150808285010193506000610e5187606001518860400151896000015161247a565b91505060005b8151811015610ea457600060a0838381518110610e7057fe5b6020026020010151901c90506000610e95828b6020015161253390919063ffffffff16565b97909701965050600101610e57565b505050505b5092915050565b6000603082901c61ffff166001811115610ec657fe5b92915050565b6000806000806000610eeb87606001518860400151896000015161247a565b60208901519193509150600288516009811115610f0457fe5b1415610fd25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f459190613e69565b60006040518083038185875af1925050503d8060008114610f82576040519150601f19603f3d011682016040523d82523d6000602084013e610f87565b606091505b505090508715610faf5780610faa57600080600096509650965050505050611ddb565b610fcc565b80610fcc5760405162461bcd60e51b815260040161075d90614108565b50611da9565b600188516009811115610fe157fe5b14156110a45760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516110229190613e69565b60006040518083038185875af1925050503d806000811461105f576040519150601f19603f3d011682016040523d82523d6000602084013e611064565b606091505b5050905087156110875780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90613f98565b6000885160098111156110b357fe5b14156111765760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516110f49190613e69565b60006040518083038185875af1925050503d8060008114611131576040519150601f19603f3d011682016040523d82523d6000602084013e611136565b606091505b5050905087156111595780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90614006565b60038851600981111561118557fe5b14156115c8576000838060200190518101906111a191906138c0565b9050871561123f5760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906111f7908590600401614318565b6000604051808303818588803b15801561121057600080fd5b505af193505050508015611222575060015b61123a57600080600096509650965050505050611ddb565b6112c0565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061128d908590600401614318565b6000604051808303818588803b1580156112a657600080fd5b505af11580156112ba573d6000803e3d6000fd5b50505050505b60005b8160200151518110156115c1576000826020015182815181106112e257fe5b602002602001015160200151905060008360200151838151811061130257fe5b602002602001015160400151905060008460000151838151811061132257fe5b60200260200101516101000151828151811061133a57fe5b602002602001015160200151905060008560000151848151811061135a57fe5b602002602001015160e0015151118015611390575060008560200151858151811061138157fe5b602002602001015160c0015151115b156113d6576113d681866020015186815181106113a957fe5b602002602001015160c00151876000015186815181106113c557fe5b602002602001015160e0015161254b565b84518051849081106113e457fe5b602002602001015160800151600114156114b95760008180602001905181019061140e9190613532565b905060005b81518110156114b257600082828151811061142a57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611450610d8e565b84602001516040518463ffffffff1660e01b815260040161147393929190613e99565b600060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505060019093019250611413915050565b50506115b3565b84518051849081106114c757fe5b6020026020010151608001516002141561159b576000818060200190518101906114f19190613455565b905060005b81518110156114b257600082828151811061150d57fe5b6020026020010151905080600001516001600160a01b031663f242432a30611533610d8e565b846020015185604001516040518563ffffffff1660e01b815260040161155c9493929190613ebd565b600060405180830381600087803b15801561157657600080fd5b505af115801561158a573d6000803e3d6000fd5b5050600190930192506114f6915050565b60405162461bcd60e51b815260040161075d906141e2565b5050508060010190506112c3565b5050611da9565b6004885160098111156115d757fe5b141561182c576000806000858060200190518101906115f69190613988565b925092509250891561169c57604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b296908690611652908790879060040161449f565b6000604051808303818588803b15801561166b57600080fd5b505af19350505050801561167d575060015b611697576000806000985098509850505050505050611ddb565b61171f565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b2969086906116ec908790879060040161449f565b6000604051808303818588803b15801561170557600080fd5b505af1158015611719573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117ae5781604001516001600160a01b03166342842e0e30611754610d8e565b85608001516040518463ffffffff1660e01b815260040161177793929190613e99565b600060405180830381600087803b15801561179157600080fd5b505af11580156117a5573d6000803e3d6000fd5b50505050611824565b6001600160e01b0319811663025ceed960e61b141561180c5781604001516001600160a01b031663f242432a306117e3610d8e565b85608001518660a001516040518563ffffffff1660e01b81526004016117779493929190613ebd565b60405162461bcd60e51b815260040161075d90614250565b505050611da9565b60058851600981111561183b57fe5b14156118fe5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316828560405161187c9190613e69565b60006040518083038185875af1925050503d80600081146118b9576040519150601f19603f3d011682016040523d82523d6000602084013e6118be565b606091505b5050905087156118e15780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d906141ab565b60068851600981111561190d57fe5b14156119d05760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316828560405161194e9190613e69565b60006040518083038185875af1925050503d806000811461198b576040519150601f19603f3d011682016040523d82523d6000602084013e611990565b606091505b5050905087156119b35780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90613fcf565b6007885160098111156119df57fe5b1415611aa25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a209190613e69565b60006040518083038185875af1925050503d8060008114611a5d576040519150601f19603f3d011682016040523d82523d6000602084013e611a62565b606091505b505090508715611a855780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90614219565b600888516009811115611ab157fe5b1415611cbf57600080600085806020019051810190611ad091906137f6565b9250925092508915611b7657604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b2c90879087906004016142ea565b6000604051808303818588803b158015611b4557600080fd5b505af193505050508015611b57575060015b611b71576000806000985098509850505050505050611ddb565b611bf9565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611bc690879087906004016142ea565b6000604051808303818588803b158015611bdf57600080fd5b505af1158015611bf3573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c58578251606001516001600160a01b03166342842e0e30611c2f610d8e565b8651608001516040516001600160e01b031960e086901b16815261177793929190600401613e99565b6001600160e01b0319811663025ceed960e61b141561180c578251606001516001600160a01b031663f242432a30611c8e610d8e565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117779493929190600401613ebd565b600988516009811115611cce57fe5b1415611d915760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d0f9190613e69565b60006040518083038185875af1925050503d8060008114611d4c576040519150601f19603f3d011682016040523d82523d6000602084013e611d51565b606091505b505090508715611d745780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d9061413f565b60405162461bcd60e51b815260040161075d90614074565b611db78289602001516125dc565b600080611dcc8a604001518b60200151612449565b60019950909750955050505050505b9250925092565b600082118015611dfa57506001600160a01b03811615155b15611e0957611e098183612665565b5050565b6000806000806000611e2c87606001518860400151896000015161247a565b9092509050600287516009811115611e4057fe5b1415611f0c5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611e809190613e69565b6000604051808303816000865af19150503d8060008114611ebd576040519150601f19603f3d011682016040523d82523d6000602084013e611ec2565b606091505b505090508615611ee95780611ee4576000806000955095509550505050611ddb565b611f06565b80611f065760405162461bcd60e51b815260040161075d90614176565b50612194565b600087516009811115611f1b57fe5b1415611fdc5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f5b9190613e69565b6000604051808303816000865af19150503d8060008114611f98576040519150601f19603f3d011682016040523d82523d6000602084013e611f9d565b606091505b505090508615611fbf5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d9061403d565b600687516009811115611feb57fe5b14156120ac5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168360405161202b9190613e69565b6000604051808303816000865af19150503d8060008114612068576040519150601f19603f3d011682016040523d82523d6000602084013e61206d565b606091505b50509050861561208f5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d90613f2e565b6009875160098111156120bb57fe5b141561217c5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516120fb9190613e69565b6000604051808303816000865af19150503d8060008114612138576040519150601f19603f3d011682016040523d82523d6000602084013e61213d565b606091505b50509050861561215f5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d90613f63565b60405162461bcd60e51b815260040161075d906140d9565b6121a28188602001516126fd565b6000806121b789604001518a60200151612449565b60019b919a5098509650505050505050565b6000821180156121e157506001600160a01b03811615155b15611e095760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906122349084908690600401613ef5565b602060405180830381600087803b15801561224e57600080fd5b505af1158015612262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f591906136ca565b478015612297576122973382612665565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906122e9903090600401613e85565b60206040518083038186803b15801561230157600080fd5b505afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190613a75565b90508015612297577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612378610d8e565b836040518363ffffffff1660e01b8152600401612396929190613ef5565b602060405180830381600087803b1580156123b057600080fd5b505af11580156123c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0991906136ca565b600082820183811015612442576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166124638583612533565b61246d8683612533565b9350935050509250929050565b6060806000602085901c61ffff16600181111561249357fe5b9050606060008260018111156124a557fe5b14156124b757869350915061252b9050565b60018260018111156124c557fe5b1415612513576000878060200190518101906124e19190613702565b90506124ec86612786565b1561250757806000015181602001519450945050505061252b565b519350915061252b9050565b60405162461bcd60e51b815260040161075d9061427c565b935093915050565b600061244261271061254585856127d8565b90612831565b815183511461255957600080fd5b805183511461256757600080fd5b60005b83518110156125d65781818151811061257f57fe5b01602001516001600160f81b031916156125ce5782818151811061259f57fe5b602001015160f81c60f81b8482815181106125b657fe5b60200101906001600160f81b031916908160001a9053505b60010161256a565b50505050565b60005b82518110156108f55760008382815181106125f657fe5b6020026020010151111561265d57600083828151811061261257fe5b60200260200101519050600060a085848151811061262c57fe5b6020026020010151901c9050600061264d828661253390919063ffffffff16565b90506126598184611de2565b5050505b6001016125df565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146126b0576040519150601f19603f3d011682016040523d82523d6000602084013e6126b5565b606091505b50509050806108f5576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156108f557600083828151811061271757fe5b6020026020010151111561277e57600083828151811061273357fe5b60200260200101519050600060a085848151811061274d57fe5b6020026020010151901c9050600061276e828661253390919063ffffffff16565b905061277a81846121c9565b5050505b600101612700565b6000600582600981111561279657fe5b14806127ad575060048260098111156127ab57fe5b145b806127c3575060078260098111156127c157fe5b145b156127d0575060016103ef565b506000919050565b6000826127e757506000610ec6565b828202828482816127f457fe5b04146124425760405162461bcd60e51b81526004018080602001828103825260218152602001806146e96021913960400191505060405180910390fd5b6000808211612887576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161289057fe5b049392505050565b80356103ef81614689565b80516103ef81614689565b600082601f8301126128be578081fd5b815160206128d36128ce8361461f565b6145fc565b828152818101908583016040808602880185018910156128f1578687fd5b865b8681101561295b5781838b031215612909578788fd5b81518281018181106001600160401b038211171561292357fe5b8352835161ffff8116811461293657898afd5b81528387015161294581614689565b81880152855293850193918101916001016128f3565b509198975050505050505050565b600082601f830112612979578081fd5b815160206129896128ce8361461f565b828152818101908583016040808602880185018910156129a7578687fd5b865b8681101561295b5781838b0312156129bf578788fd5b81518281018181106001600160401b03821117156129d957fe5b835283518152868401516129ec81614689565b81880152855293850193918101916001016129a9565b600082601f830112612a12578081fd5b81516020612a226128ce8361461f565b82815281810190858301855b85811015612aab5781518801604080601f19838d03011215612a4e578889fd5b80518181016001600160401b038282108183111715612a6957fe5b818452848a01518352928401519280841115612a83578b8cfd5b5050612a938c8984860101612df9565b81890152865250509284019290840190600101612a2e565b5090979650505050505050565b600082601f830112612ac8578081fd5b81516020612ad86128ce8361461f565b82815281810190858301855b85811015612aab57815188016101a080601f19838d03011215612b05578889fd5b612b0e816145fc565b878301518152612b20604084016128a3565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612b5860e084016128a3565b60c08201526101008301516001600160401b0380821115612b77578b8cfd5b612b858e8b84880101612df9565b60e084015261012091508185015181811115612b9f578c8dfd5b612bad8f8c83890101612a02565b610100850152505061014080850151828401526101609150818501518184015250610180612bdc818601613242565b82840152612beb848601613242565b9083015250865250509284019290840190600101612ae4565b600082601f830112612c14578081fd5b81516020612c246128ce8361461f565b82815281810190858301855b85811015612aab578151880161016080601f19838d03011215612c51578889fd5b612c5a816145fc565b612c65888401612e44565b815260408084015189830152606080850151828401526080915081850151818401525060a0808501518284015260c09150612ca18286016128a3565b9083015260e08401516001600160401b0380821115612cbe578c8dfd5b612ccc8f8c84890101612df9565b8385015261010092508286015160e0850152610120915081860151838501526101409250828601518285015284860151945080851115612d0a578c8dfd5b5050612d1a8d8a85870101612969565b90820152865250509284019290840190600101612c30565b600082601f830112612d42578081fd5b81356020612d526128ce8361461f565b8281528181019085830183850287018401881015612d6e578586fd5b855b85811015612aab57813584529284019290840190600101612d70565b80356103ef8161469e565b80516103ef8161469e565b80516103ef816146ac565b600082601f830112612dbd578081fd5b8135612dcb6128ce8261463c565b818152846020838601011115612ddf578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612e09578081fd5b8151612e176128ce8261463c565b818152846020838601011115612e2b578283fd5b612e3c82602083016020870161465d565b949350505050565b8051600881106103ef57600080fd5b8051600281106103ef57600080fd5b600060e08284031215612e73578081fd5b612e7d60e06145fc565b905081516001600160401b0380821115612e9657600080fd5b612ea285838601613026565b8352612eb060208501613242565b602084015260408401516040840152606084015160608401526080840151915080821115612edd57600080fd5b50612eea84828501612df9565b608083015250612efc60a08301612e53565b60a082015260c082015160c082015292915050565b6000610200808385031215612f24578182fd5b612f2d816145fc565b915050612f3982612d97565b8152612f47602083016128a3565b6020820152612f58604083016128a3565b6040820152606082015160608201526080820151608082015260a082015160a0820152612f8760c083016128a3565b60c0820152612f9860e083016128a3565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b03811115612fe457600080fd5b612ff085828601612df9565b8284015250506101a0613004818401613242565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a0808385031215613039578182fd5b613042816145fc565b91505061304e826128a3565b815261305c60208301612e53565b602082015261306d604083016128a3565b604082015261307e606083016128a3565b60608201526080820151608082015260a082015160a08201526130a360c083016128a3565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156130e457600080fd5b6130f0868387016128ae565b838501526101609250828501518385015261018092508285015191508082111561311957600080fd5b5061312685828601612df9565b82840152505092915050565b600060808284031215613143578081fd5b604051608081016001600160401b03828210818311171561316057fe5b8160405282935084359150600a821061317857600080fd5b818352602085013560208401526040850135604084015260608501359150808211156131a357600080fd5b506131b085828601612dad565b6060830152505092915050565b600060c082840312156131ce578081fd5b60405160c081018181106001600160401b03821117156131ea57fe5b806040525080915082518152602083015160208201526040830151604082015260608301516060820152608083015161322281614689565b608082015260a08301516132358161469e565b60a0919091015292915050565b805160ff811681146103ef57600080fd5b600060208284031215613264578081fd5b813561244281614689565b600080600080600060a08688031215613286578081fd5b853561329181614689565b945060208601356132a181614689565b935060408601356001600160401b03808211156132bc578283fd5b6132c889838a01612d32565b945060608801359150808211156132dd578283fd5b6132e989838a01612d32565b935060808801359150808211156132fe578283fd5b5061330b88828901612dad565b9150509295509295909350565b6000806000806080858703121561332d578182fd5b843561333881614689565b9350602085013561334881614689565b92506040850135915060608501356001600160401b03811115613369578182fd5b61337587828801612dad565b91505092959194509250565b600080600080600060a08688031215613398578283fd5b85356133a381614689565b945060208601356133b381614689565b9350604086013592506060860135915060808601356001600160401b038111156133db578182fd5b61330b88828901612dad565b600080602083850312156133f9578182fd5b82356001600160401b038082111561340f578384fd5b818501915085601f830112613422578384fd5b813581811115613430578485fd5b8660208083028501011115613443578485fd5b60209290920196919550909350505050565b60006020808385031215613467578182fd5b82516001600160401b038082111561347d578384fd5b818501915085601f830112613490578384fd5b815161349e6128ce8261461f565b818152848101908486016060808502870188018b10156134bc578889fd5b8896505b848710156135235780828c0312156134d6578889fd5b6040805182810181811089821117156134eb57fe5b825283516134f881614689565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906134c0565b50909998505050505050505050565b60006020808385031215613544578182fd5b82516001600160401b038082111561355a578384fd5b818501915085601f83011261356d578384fd5b815161357b6128ce8261461f565b818152848101908486016040808502870188018b1015613599578889fd5b8896505b848710156135235780828c0312156135b3578889fd5b805181810181811088821117156135c657fe5b825282516135d381614689565b81528289015189820152845260019690960195928701929081019061359d565b60008060008060808587031215613608578182fd5b84356001600160401b0381111561361d578283fd5b8501601f8101871361362d578283fd5b8035602061363d6128ce8361461f565b82815281810190848301875b85811015613672576136608d8684358a0101613132565b84529284019290840190600101613649565b50508098505050613684818901612898565b955050505061369560408601612898565b91506136a360608601612d8c565b905092959194509250565b6000602082840312156136bf578081fd5b81356124428161469e565b6000602082840312156136db578081fd5b81516124428161469e565b6000602082840312156136f7578081fd5b8135612442816146ac565b60006020808385031215613714578182fd5b82516001600160401b038082111561372a578384fd5b908401906040828703121561373d578384fd5b60405160408101818110838211171561375257fe5b604052825182811115613763578586fd5b61376f88828601612df9565b8252508383015182811115613782578586fd5b80840193505086601f840112613796578485fd5b825191506137a66128ce8361461f565b82815284810190848601868502860187018a10156137c2578788fd5b8795505b848610156137e45780518352600195909501949186019186016137c6565b50948201949094529695505050505050565b60008060006060848603121561380a578081fd5b83516001600160401b0380821115613820578283fd5b61382c87838801612e62565b94506020860151915080821115613841578283fd5b5061384e86828701612e62565b925050604084015161385f816146ac565b809150509250925092565b60008060006060848603121561387e578081fd5b83356001600160401b03811115613893578182fd5b61389f86828701613132565b93505060208401356138b081614689565b9150604084013561385f81614689565b6000602082840312156138d1578081fd5b81516001600160401b03808211156138e7578283fd5b9083019061016082860312156138fb578283fd5b61390560c06145fc565b825182811115613913578485fd5b61391f87828601612ab8565b825250602083015182811115613933578485fd5b61393f87828601612c04565b60208301525061395286604085016131bd565b60408201526101008301516060820152610120830151608082015261397a6101408401613242565b60a082015295945050505050565b60008060006060848603121561399c578081fd5b83516001600160401b03808211156139b2578283fd5b9085019060c082880312156139c5578283fd5b60405160c0810181811083821117156139da57fe5b6040526139e683612d97565b81526139f4602084016128a3565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613a28578485fd5b613a3489828601612df9565b60a0830152506020870151909550915080821115613a50578283fd5b50613a5d86828701612f11565b925050613a6c60408501612da2565b90509250925092565b600060208284031215613a86578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613ae1578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613aad565b509495945050505050565b6000815180845260208085019450808401835b83811015613ae1578151805188528301516001600160a01b03168388015260409096019590820190600101613aff565b60008282518085526020808601955080818302840101818601855b84811015612aab57858303601f190189528151805184528401516040858501819052613b7881860183613c7e565b9a86019a9450505090830190600101613b4a565b6000815180845260208085018081965082840281019150828601855b85811015613c6b5782840389528151610160613bc5868351613caa565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613bfd82890182613a8d565b505060c0808301518282890152613c1683890182613c7e565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613c57915082905083613aec565b9a87019a9550505090840190600101613ba8565b5091979650505050505050565b15159052565b60008151808452613c9681602086016020860161465d565b601f01601f19169290920160200192915050565b60088110613cb457fe5b9052565b60028110613cb457fe5b6000815160e08452613cd860e085018251613a8d565b6020810151610100613cec81870183613cb8565b60408301519150610120613d0281880184613a8d565b60608401519250610140613d1881890185613a8d565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613d4c818c0188613a8d565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613d876102808b0187613a9a565b918701516102408b01529095015188860360df19016102608a0152949350613db59250839150849050613c7e565b9150506020830151613dca6020860182613e62565b50604083015160408501526060830151606085015260808301518482036080860152613df68282613c7e565b91505060a0830151613e0b60a0860182613cb8565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b60008251613e7b81846020870161465d565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b6000604082526142fd6040830185613cc2565b828103602084015261430f8185613cc2565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614435578a820361019f19018452855180518352898101516143758b850182613a8d565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516143b082860182613a8d565b505060e08082015189828601526143c98a860182613c7e565b91505061010080830151858303828701526143e48382613b2f565b925050506101208083015181860152506101408083015181860152508682015161441088860182613e62565b509089015190614422848b0183613e62565b968a0196948a019492505060010161434d565b50968a0151898803601f190160408b0152966144518189613b8c565b97505050506040880151935061446a6060880185613e20565b6060880151610120880152608088015161014088015260a0880151935061449381880185613e62565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e08501526144f982850182613c7e565b90508381036020850152610200614511828751613c78565b60208601516145236020840182613a8d565b5060408601516145366040840182613a8d565b50606086015160608301526080860151608083015260a086015160a083015260c086015161456760c0840182613a8d565b5060e086015161457a60e0840182613a8d565b508583015192820192909252610120808601519082015261014080860151908201526101608086015190820152610180808601518183018490529092906145c382840182613c7e565b935050506101a0808601516145da82840182613e62565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561461757fe5b604052919050565b60006001600160401b0382111561463257fe5b5060209081020190565b60006001600160401b0382111561464f57fe5b50601f01601f191660200190565b60005b83811015614678578181015183820152602001614660565b838111156125d65750506000910152565b6001600160a01b038116811461229757600080fd5b801515811461229757600080fd5b6001600160e01b03198116811461229757600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204cedaa680c5a0679008a0d1c00fbacd1ead2703a81cf38dc69116d58d31e721a64736f6c63430007060033", - "deployedBytecode": "0x6080604052600436106101435760003560e01c806386dcbd27116100b6578063bd4486ee1161006f578063bd4486ee14610319578063c9f0a2fa1461032e578063df6c255814610343578063f23a6e6114610358578063f2fde38b14610378578063fc40c9c7146103985761014a565b806386dcbd27146102875780638da5cb5b146102a75780639110c777146102bc578063a05f32dc146102d1578063b94ee332146102e6578063bc197c81146102f95761014a565b80633733b82b116101085780633733b82b1461020b5780633fc8cef3146102205780635c975abb146102355780635ea1e4c91461024a578063715018a61461025f57806386496e7a146102745761014a565b80628534f71461014f57806301ffc9a71461017a57806302329a29146101a7578063150b7a02146101c9578063349d6a85146101f65761014a565b3661014a57005b600080fd5b34801561015b57600080fd5b506101646103ad565b6040516101719190613e85565b60405180910390f35b34801561018657600080fd5b5061019a6101953660046136e6565b6103d1565b6040516101719190613f0e565b3480156101b357600080fd5b506101c76101c23660046136ae565b6103f4565b005b3480156101d557600080fd5b506101e96101e4366004613318565b61049d565b6040516101719190613f19565b34801561020257600080fd5b506101646104ad565b34801561021757600080fd5b506101646104d1565b34801561022c57600080fd5b506101646104f5565b34801561024157600080fd5b5061019a610519565b34801561025657600080fd5b50610164610522565b34801561026b57600080fd5b506101c7610546565b6101c761028236600461386a565b6105f2565b34801561029357600080fd5b506101c76102a23660046133e7565b6107bd565b3480156102b357600080fd5b506101646108fa565b3480156102c857600080fd5b50610164610909565b3480156102dd57600080fd5b5061016461092d565b6101c76102f43660046135f3565b610951565b34801561030557600080fd5b506101e961031436600461326f565b610bda565b34801561032557600080fd5b50610164610beb565b34801561033a57600080fd5b50610164610c0f565b34801561034f57600080fd5b50610164610c33565b34801561036457600080fd5b506101e9610373366004613381565b610c57565b34801561038457600080fd5b506101c7610393366004613253565b610c68565b3480156103a457600080fd5b50610164610d6a565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b6103fc610d8e565b6001600160a01b031661040d6108fa565b6001600160a01b031614610456576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61054e610d8e565b6001600160a01b031661055f6108fa565b6001600160a01b0316146105a8576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6105fa610d92565b600061060584610de5565b905080156106b8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610644610d8e565b30846040518463ffffffff1660e01b815260040161066493929190613e99565b602060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b691906136ca565b505b60006106c78560400151610eb0565b905060008080808460018111156106da57fe5b141561070b576106eb886000610ecc565b919450925090506106fc8288611de2565b6107068187611de2565b610766565b600184600181111561071957fe5b14156107455761072a886000611e0d565b9194509250905061073b82886121c9565b61070681876121c9565b60405162461bcd60e51b815260040161075d906140a2565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107959190613f0e565b60405180910390a16107a5612286565b84156107b3576107b361229a565b5050505050505050565b6107c5610d8e565b6001600160a01b03166107d66108fa565b6001600160a01b03161461081f576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b60005b818110156108f5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061086557fe5b905060200201602081019061087a9190613253565b6000196040518363ffffffff1660e01b815260040161089a929190613ef5565b602060405180830381600087803b1580156108b457600080fd5b505af11580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec91906136ca565b50600101610822565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610959610d92565b60008060008060008060005b8a518110156109965761098a8b828151811061097d57fe5b6020026020010151610de5565b90910190600101610965565b508015610a48577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109d4610d8e565b30846040518463ffffffff1660e01b81526004016109f493929190613e99565b602060405180830381600087803b158015610a0e57600080fd5b505af1158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4691906136ca565b505b60005b8a51811015610b72576000610a768c8381518110610a6557fe5b602002602001015160400151610eb0565b90506000808080846001811115610a8957fe5b1415610ad057610aac8f8681518110610a9e57fe5b60200260200101518d610ecc565b91945092509050610abd8b836123e8565b9a50610ac98a826123e8565b9950610b21565b6001846001811115610ade57fe5b141561074557610b018f8681518110610af357fe5b60200260200101518d611e0d565b91945092509050610b1289836123e8565b9850610b1e88826123e8565b97505b8680610b2a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b5b9190613f0e565b60405180910390a150505050806001019050610a4b565b5081610b905760405162461bcd60e51b815260040161075d906142b3565b610b9a868a611de2565b610ba48589611de2565b610bae848a6121c9565b610bb883896121c9565b610bc0612286565b8015610bce57610bce61229a565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c70610d8e565b6001600160a01b0316610c816108fa565b6001600160a01b031614610cca576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b6001600160a01b038116610d0f5760405162461bcd60e51b81526004018080602001828103825260268152602001806146c36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610de3576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610dfb8460400151610eb0565b90506001816001811115610e0b57fe5b1415610ea95760208401516040850151928101926000918291610e2d91612449565b91509150808285010193506000610e5187606001518860400151896000015161247a565b91505060005b8151811015610ea457600060a0838381518110610e7057fe5b6020026020010151901c90506000610e95828b6020015161253390919063ffffffff16565b97909701965050600101610e57565b505050505b5092915050565b6000603082901c61ffff166001811115610ec657fe5b92915050565b6000806000806000610eeb87606001518860400151896000015161247a565b60208901519193509150600288516009811115610f0457fe5b1415610fd25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f459190613e69565b60006040518083038185875af1925050503d8060008114610f82576040519150601f19603f3d011682016040523d82523d6000602084013e610f87565b606091505b505090508715610faf5780610faa57600080600096509650965050505050611ddb565b610fcc565b80610fcc5760405162461bcd60e51b815260040161075d90614108565b50611da9565b600188516009811115610fe157fe5b14156110a45760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516110229190613e69565b60006040518083038185875af1925050503d806000811461105f576040519150601f19603f3d011682016040523d82523d6000602084013e611064565b606091505b5050905087156110875780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90613f98565b6000885160098111156110b357fe5b14156111765760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516110f49190613e69565b60006040518083038185875af1925050503d8060008114611131576040519150601f19603f3d011682016040523d82523d6000602084013e611136565b606091505b5050905087156111595780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90614006565b60038851600981111561118557fe5b14156115c8576000838060200190518101906111a191906138c0565b9050871561123f5760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906111f7908590600401614318565b6000604051808303818588803b15801561121057600080fd5b505af193505050508015611222575060015b61123a57600080600096509650965050505050611ddb565b6112c0565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061128d908590600401614318565b6000604051808303818588803b1580156112a657600080fd5b505af11580156112ba573d6000803e3d6000fd5b50505050505b60005b8160200151518110156115c1576000826020015182815181106112e257fe5b602002602001015160200151905060008360200151838151811061130257fe5b602002602001015160400151905060008460000151838151811061132257fe5b60200260200101516101000151828151811061133a57fe5b602002602001015160200151905060008560000151848151811061135a57fe5b602002602001015160e0015151118015611390575060008560200151858151811061138157fe5b602002602001015160c0015151115b156113d6576113d681866020015186815181106113a957fe5b602002602001015160c00151876000015186815181106113c557fe5b602002602001015160e0015161254b565b84518051849081106113e457fe5b602002602001015160800151600114156114b95760008180602001905181019061140e9190613532565b905060005b81518110156114b257600082828151811061142a57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611450610d8e565b84602001516040518463ffffffff1660e01b815260040161147393929190613e99565b600060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505060019093019250611413915050565b50506115b3565b84518051849081106114c757fe5b6020026020010151608001516002141561159b576000818060200190518101906114f19190613455565b905060005b81518110156114b257600082828151811061150d57fe5b6020026020010151905080600001516001600160a01b031663f242432a30611533610d8e565b846020015185604001516040518563ffffffff1660e01b815260040161155c9493929190613ebd565b600060405180830381600087803b15801561157657600080fd5b505af115801561158a573d6000803e3d6000fd5b5050600190930192506114f6915050565b60405162461bcd60e51b815260040161075d906141e2565b5050508060010190506112c3565b5050611da9565b6004885160098111156115d757fe5b141561182c576000806000858060200190518101906115f69190613988565b925092509250891561169c57604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b296908690611652908790879060040161449f565b6000604051808303818588803b15801561166b57600080fd5b505af19350505050801561167d575060015b611697576000806000985098509850505050505050611ddb565b61171f565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b2969086906116ec908790879060040161449f565b6000604051808303818588803b15801561170557600080fd5b505af1158015611719573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117ae5781604001516001600160a01b03166342842e0e30611754610d8e565b85608001516040518463ffffffff1660e01b815260040161177793929190613e99565b600060405180830381600087803b15801561179157600080fd5b505af11580156117a5573d6000803e3d6000fd5b50505050611824565b6001600160e01b0319811663025ceed960e61b141561180c5781604001516001600160a01b031663f242432a306117e3610d8e565b85608001518660a001516040518563ffffffff1660e01b81526004016117779493929190613ebd565b60405162461bcd60e51b815260040161075d90614250565b505050611da9565b60058851600981111561183b57fe5b14156118fe5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316828560405161187c9190613e69565b60006040518083038185875af1925050503d80600081146118b9576040519150601f19603f3d011682016040523d82523d6000602084013e6118be565b606091505b5050905087156118e15780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d906141ab565b60068851600981111561190d57fe5b14156119d05760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316828560405161194e9190613e69565b60006040518083038185875af1925050503d806000811461198b576040519150601f19603f3d011682016040523d82523d6000602084013e611990565b606091505b5050905087156119b35780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90613fcf565b6007885160098111156119df57fe5b1415611aa25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a209190613e69565b60006040518083038185875af1925050503d8060008114611a5d576040519150601f19603f3d011682016040523d82523d6000602084013e611a62565b606091505b505090508715611a855780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90614219565b600888516009811115611ab157fe5b1415611cbf57600080600085806020019051810190611ad091906137f6565b9250925092508915611b7657604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b2c90879087906004016142ea565b6000604051808303818588803b158015611b4557600080fd5b505af193505050508015611b57575060015b611b71576000806000985098509850505050505050611ddb565b611bf9565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611bc690879087906004016142ea565b6000604051808303818588803b158015611bdf57600080fd5b505af1158015611bf3573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c58578251606001516001600160a01b03166342842e0e30611c2f610d8e565b8651608001516040516001600160e01b031960e086901b16815261177793929190600401613e99565b6001600160e01b0319811663025ceed960e61b141561180c578251606001516001600160a01b031663f242432a30611c8e610d8e565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117779493929190600401613ebd565b600988516009811115611cce57fe5b1415611d915760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d0f9190613e69565b60006040518083038185875af1925050503d8060008114611d4c576040519150601f19603f3d011682016040523d82523d6000602084013e611d51565b606091505b505090508715611d745780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d9061413f565b60405162461bcd60e51b815260040161075d90614074565b611db78289602001516125dc565b600080611dcc8a604001518b60200151612449565b60019950909750955050505050505b9250925092565b600082118015611dfa57506001600160a01b03811615155b15611e0957611e098183612665565b5050565b6000806000806000611e2c87606001518860400151896000015161247a565b9092509050600287516009811115611e4057fe5b1415611f0c5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611e809190613e69565b6000604051808303816000865af19150503d8060008114611ebd576040519150601f19603f3d011682016040523d82523d6000602084013e611ec2565b606091505b505090508615611ee95780611ee4576000806000955095509550505050611ddb565b611f06565b80611f065760405162461bcd60e51b815260040161075d90614176565b50612194565b600087516009811115611f1b57fe5b1415611fdc5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f5b9190613e69565b6000604051808303816000865af19150503d8060008114611f98576040519150601f19603f3d011682016040523d82523d6000602084013e611f9d565b606091505b505090508615611fbf5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d9061403d565b600687516009811115611feb57fe5b14156120ac5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168360405161202b9190613e69565b6000604051808303816000865af19150503d8060008114612068576040519150601f19603f3d011682016040523d82523d6000602084013e61206d565b606091505b50509050861561208f5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d90613f2e565b6009875160098111156120bb57fe5b141561217c5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516120fb9190613e69565b6000604051808303816000865af19150503d8060008114612138576040519150601f19603f3d011682016040523d82523d6000602084013e61213d565b606091505b50509050861561215f5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d90613f63565b60405162461bcd60e51b815260040161075d906140d9565b6121a28188602001516126fd565b6000806121b789604001518a60200151612449565b60019b919a5098509650505050505050565b6000821180156121e157506001600160a01b03811615155b15611e095760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906122349084908690600401613ef5565b602060405180830381600087803b15801561224e57600080fd5b505af1158015612262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f591906136ca565b478015612297576122973382612665565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906122e9903090600401613e85565b60206040518083038186803b15801561230157600080fd5b505afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190613a75565b90508015612297577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612378610d8e565b836040518363ffffffff1660e01b8152600401612396929190613ef5565b602060405180830381600087803b1580156123b057600080fd5b505af11580156123c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0991906136ca565b600082820183811015612442576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166124638583612533565b61246d8683612533565b9350935050509250929050565b6060806000602085901c61ffff16600181111561249357fe5b9050606060008260018111156124a557fe5b14156124b757869350915061252b9050565b60018260018111156124c557fe5b1415612513576000878060200190518101906124e19190613702565b90506124ec86612786565b1561250757806000015181602001519450945050505061252b565b519350915061252b9050565b60405162461bcd60e51b815260040161075d9061427c565b935093915050565b600061244261271061254585856127d8565b90612831565b815183511461255957600080fd5b805183511461256757600080fd5b60005b83518110156125d65781818151811061257f57fe5b01602001516001600160f81b031916156125ce5782818151811061259f57fe5b602001015160f81c60f81b8482815181106125b657fe5b60200101906001600160f81b031916908160001a9053505b60010161256a565b50505050565b60005b82518110156108f55760008382815181106125f657fe5b6020026020010151111561265d57600083828151811061261257fe5b60200260200101519050600060a085848151811061262c57fe5b6020026020010151901c9050600061264d828661253390919063ffffffff16565b90506126598184611de2565b5050505b6001016125df565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146126b0576040519150601f19603f3d011682016040523d82523d6000602084013e6126b5565b606091505b50509050806108f5576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156108f557600083828151811061271757fe5b6020026020010151111561277e57600083828151811061273357fe5b60200260200101519050600060a085848151811061274d57fe5b6020026020010151901c9050600061276e828661253390919063ffffffff16565b905061277a81846121c9565b5050505b600101612700565b6000600582600981111561279657fe5b14806127ad575060048260098111156127ab57fe5b145b806127c3575060078260098111156127c157fe5b145b156127d0575060016103ef565b506000919050565b6000826127e757506000610ec6565b828202828482816127f457fe5b04146124425760405162461bcd60e51b81526004018080602001828103825260218152602001806146e96021913960400191505060405180910390fd5b6000808211612887576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161289057fe5b049392505050565b80356103ef81614689565b80516103ef81614689565b600082601f8301126128be578081fd5b815160206128d36128ce8361461f565b6145fc565b828152818101908583016040808602880185018910156128f1578687fd5b865b8681101561295b5781838b031215612909578788fd5b81518281018181106001600160401b038211171561292357fe5b8352835161ffff8116811461293657898afd5b81528387015161294581614689565b81880152855293850193918101916001016128f3565b509198975050505050505050565b600082601f830112612979578081fd5b815160206129896128ce8361461f565b828152818101908583016040808602880185018910156129a7578687fd5b865b8681101561295b5781838b0312156129bf578788fd5b81518281018181106001600160401b03821117156129d957fe5b835283518152868401516129ec81614689565b81880152855293850193918101916001016129a9565b600082601f830112612a12578081fd5b81516020612a226128ce8361461f565b82815281810190858301855b85811015612aab5781518801604080601f19838d03011215612a4e578889fd5b80518181016001600160401b038282108183111715612a6957fe5b818452848a01518352928401519280841115612a83578b8cfd5b5050612a938c8984860101612df9565b81890152865250509284019290840190600101612a2e565b5090979650505050505050565b600082601f830112612ac8578081fd5b81516020612ad86128ce8361461f565b82815281810190858301855b85811015612aab57815188016101a080601f19838d03011215612b05578889fd5b612b0e816145fc565b878301518152612b20604084016128a3565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612b5860e084016128a3565b60c08201526101008301516001600160401b0380821115612b77578b8cfd5b612b858e8b84880101612df9565b60e084015261012091508185015181811115612b9f578c8dfd5b612bad8f8c83890101612a02565b610100850152505061014080850151828401526101609150818501518184015250610180612bdc818601613242565b82840152612beb848601613242565b9083015250865250509284019290840190600101612ae4565b600082601f830112612c14578081fd5b81516020612c246128ce8361461f565b82815281810190858301855b85811015612aab578151880161016080601f19838d03011215612c51578889fd5b612c5a816145fc565b612c65888401612e44565b815260408084015189830152606080850151828401526080915081850151818401525060a0808501518284015260c09150612ca18286016128a3565b9083015260e08401516001600160401b0380821115612cbe578c8dfd5b612ccc8f8c84890101612df9565b8385015261010092508286015160e0850152610120915081860151838501526101409250828601518285015284860151945080851115612d0a578c8dfd5b5050612d1a8d8a85870101612969565b90820152865250509284019290840190600101612c30565b600082601f830112612d42578081fd5b81356020612d526128ce8361461f565b8281528181019085830183850287018401881015612d6e578586fd5b855b85811015612aab57813584529284019290840190600101612d70565b80356103ef8161469e565b80516103ef8161469e565b80516103ef816146ac565b600082601f830112612dbd578081fd5b8135612dcb6128ce8261463c565b818152846020838601011115612ddf578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612e09578081fd5b8151612e176128ce8261463c565b818152846020838601011115612e2b578283fd5b612e3c82602083016020870161465d565b949350505050565b8051600881106103ef57600080fd5b8051600281106103ef57600080fd5b600060e08284031215612e73578081fd5b612e7d60e06145fc565b905081516001600160401b0380821115612e9657600080fd5b612ea285838601613026565b8352612eb060208501613242565b602084015260408401516040840152606084015160608401526080840151915080821115612edd57600080fd5b50612eea84828501612df9565b608083015250612efc60a08301612e53565b60a082015260c082015160c082015292915050565b6000610200808385031215612f24578182fd5b612f2d816145fc565b915050612f3982612d97565b8152612f47602083016128a3565b6020820152612f58604083016128a3565b6040820152606082015160608201526080820151608082015260a082015160a0820152612f8760c083016128a3565b60c0820152612f9860e083016128a3565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b03811115612fe457600080fd5b612ff085828601612df9565b8284015250506101a0613004818401613242565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a0808385031215613039578182fd5b613042816145fc565b91505061304e826128a3565b815261305c60208301612e53565b602082015261306d604083016128a3565b604082015261307e606083016128a3565b60608201526080820151608082015260a082015160a08201526130a360c083016128a3565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156130e457600080fd5b6130f0868387016128ae565b838501526101609250828501518385015261018092508285015191508082111561311957600080fd5b5061312685828601612df9565b82840152505092915050565b600060808284031215613143578081fd5b604051608081016001600160401b03828210818311171561316057fe5b8160405282935084359150600a821061317857600080fd5b818352602085013560208401526040850135604084015260608501359150808211156131a357600080fd5b506131b085828601612dad565b6060830152505092915050565b600060c082840312156131ce578081fd5b60405160c081018181106001600160401b03821117156131ea57fe5b806040525080915082518152602083015160208201526040830151604082015260608301516060820152608083015161322281614689565b608082015260a08301516132358161469e565b60a0919091015292915050565b805160ff811681146103ef57600080fd5b600060208284031215613264578081fd5b813561244281614689565b600080600080600060a08688031215613286578081fd5b853561329181614689565b945060208601356132a181614689565b935060408601356001600160401b03808211156132bc578283fd5b6132c889838a01612d32565b945060608801359150808211156132dd578283fd5b6132e989838a01612d32565b935060808801359150808211156132fe578283fd5b5061330b88828901612dad565b9150509295509295909350565b6000806000806080858703121561332d578182fd5b843561333881614689565b9350602085013561334881614689565b92506040850135915060608501356001600160401b03811115613369578182fd5b61337587828801612dad565b91505092959194509250565b600080600080600060a08688031215613398578283fd5b85356133a381614689565b945060208601356133b381614689565b9350604086013592506060860135915060808601356001600160401b038111156133db578182fd5b61330b88828901612dad565b600080602083850312156133f9578182fd5b82356001600160401b038082111561340f578384fd5b818501915085601f830112613422578384fd5b813581811115613430578485fd5b8660208083028501011115613443578485fd5b60209290920196919550909350505050565b60006020808385031215613467578182fd5b82516001600160401b038082111561347d578384fd5b818501915085601f830112613490578384fd5b815161349e6128ce8261461f565b818152848101908486016060808502870188018b10156134bc578889fd5b8896505b848710156135235780828c0312156134d6578889fd5b6040805182810181811089821117156134eb57fe5b825283516134f881614689565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906134c0565b50909998505050505050505050565b60006020808385031215613544578182fd5b82516001600160401b038082111561355a578384fd5b818501915085601f83011261356d578384fd5b815161357b6128ce8261461f565b818152848101908486016040808502870188018b1015613599578889fd5b8896505b848710156135235780828c0312156135b3578889fd5b805181810181811088821117156135c657fe5b825282516135d381614689565b81528289015189820152845260019690960195928701929081019061359d565b60008060008060808587031215613608578182fd5b84356001600160401b0381111561361d578283fd5b8501601f8101871361362d578283fd5b8035602061363d6128ce8361461f565b82815281810190848301875b85811015613672576136608d8684358a0101613132565b84529284019290840190600101613649565b50508098505050613684818901612898565b955050505061369560408601612898565b91506136a360608601612d8c565b905092959194509250565b6000602082840312156136bf578081fd5b81356124428161469e565b6000602082840312156136db578081fd5b81516124428161469e565b6000602082840312156136f7578081fd5b8135612442816146ac565b60006020808385031215613714578182fd5b82516001600160401b038082111561372a578384fd5b908401906040828703121561373d578384fd5b60405160408101818110838211171561375257fe5b604052825182811115613763578586fd5b61376f88828601612df9565b8252508383015182811115613782578586fd5b80840193505086601f840112613796578485fd5b825191506137a66128ce8361461f565b82815284810190848601868502860187018a10156137c2578788fd5b8795505b848610156137e45780518352600195909501949186019186016137c6565b50948201949094529695505050505050565b60008060006060848603121561380a578081fd5b83516001600160401b0380821115613820578283fd5b61382c87838801612e62565b94506020860151915080821115613841578283fd5b5061384e86828701612e62565b925050604084015161385f816146ac565b809150509250925092565b60008060006060848603121561387e578081fd5b83356001600160401b03811115613893578182fd5b61389f86828701613132565b93505060208401356138b081614689565b9150604084013561385f81614689565b6000602082840312156138d1578081fd5b81516001600160401b03808211156138e7578283fd5b9083019061016082860312156138fb578283fd5b61390560c06145fc565b825182811115613913578485fd5b61391f87828601612ab8565b825250602083015182811115613933578485fd5b61393f87828601612c04565b60208301525061395286604085016131bd565b60408201526101008301516060820152610120830151608082015261397a6101408401613242565b60a082015295945050505050565b60008060006060848603121561399c578081fd5b83516001600160401b03808211156139b2578283fd5b9085019060c082880312156139c5578283fd5b60405160c0810181811083821117156139da57fe5b6040526139e683612d97565b81526139f4602084016128a3565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613a28578485fd5b613a3489828601612df9565b60a0830152506020870151909550915080821115613a50578283fd5b50613a5d86828701612f11565b925050613a6c60408501612da2565b90509250925092565b600060208284031215613a86578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613ae1578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613aad565b509495945050505050565b6000815180845260208085019450808401835b83811015613ae1578151805188528301516001600160a01b03168388015260409096019590820190600101613aff565b60008282518085526020808601955080818302840101818601855b84811015612aab57858303601f190189528151805184528401516040858501819052613b7881860183613c7e565b9a86019a9450505090830190600101613b4a565b6000815180845260208085018081965082840281019150828601855b85811015613c6b5782840389528151610160613bc5868351613caa565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613bfd82890182613a8d565b505060c0808301518282890152613c1683890182613c7e565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613c57915082905083613aec565b9a87019a9550505090840190600101613ba8565b5091979650505050505050565b15159052565b60008151808452613c9681602086016020860161465d565b601f01601f19169290920160200192915050565b60088110613cb457fe5b9052565b60028110613cb457fe5b6000815160e08452613cd860e085018251613a8d565b6020810151610100613cec81870183613cb8565b60408301519150610120613d0281880184613a8d565b60608401519250610140613d1881890185613a8d565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613d4c818c0188613a8d565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613d876102808b0187613a9a565b918701516102408b01529095015188860360df19016102608a0152949350613db59250839150849050613c7e565b9150506020830151613dca6020860182613e62565b50604083015160408501526060830151606085015260808301518482036080860152613df68282613c7e565b91505060a0830151613e0b60a0860182613cb8565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b60008251613e7b81846020870161465d565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b6000604082526142fd6040830185613cc2565b828103602084015261430f8185613cc2565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614435578a820361019f19018452855180518352898101516143758b850182613a8d565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516143b082860182613a8d565b505060e08082015189828601526143c98a860182613c7e565b91505061010080830151858303828701526143e48382613b2f565b925050506101208083015181860152506101408083015181860152508682015161441088860182613e62565b509089015190614422848b0183613e62565b968a0196948a019492505060010161434d565b50968a0151898803601f190160408b0152966144518189613b8c565b97505050506040880151935061446a6060880185613e20565b6060880151610120880152608088015161014088015260a0880151935061449381880185613e62565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e08501526144f982850182613c7e565b90508381036020850152610200614511828751613c78565b60208601516145236020840182613a8d565b5060408601516145366040840182613a8d565b50606086015160608301526080860151608083015260a086015160a083015260c086015161456760c0840182613a8d565b5060e086015161457a60e0840182613a8d565b508583015192820192909252610120808601519082015261014080860151908201526101608086015190820152610180808601518183018490529092906145c382840182613c7e565b935050506101a0808601516145da82840182613e62565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561461757fe5b604052919050565b60006001600160401b0382111561463257fe5b5060209081020190565b60006001600160401b0382111561464f57fe5b50601f01601f191660200190565b60005b83811015614678578181015183820152602001614660565b838111156125d65750506000910152565b6001600160a01b038116811461229757600080fd5b801515811461229757600080fd5b6001600160e01b03198116811461229757600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204cedaa680c5a0679008a0d1c00fbacd1ead2703a81cf38dc69116d58d31e721a64736f6c63430007060033", + "numDeployments": 2, + "solcInputHash": "5fd82e04a71dd28dcf06afe03af2d381", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[11]\",\"name\":\"marketplaces\",\"type\":\"address[11]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_6\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":\"RaribleExchangeWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165 is IERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n constructor () internal {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Receiver.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\ncontract ERC1155Holder is ERC1155Receiver {\\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155BatchReceived.selector;\\n }\\n}\\n\",\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155Receiver.sol\\\";\\nimport \\\"../../introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\\n constructor() internal {\\n _registerInterface(\\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n}\\n\",\"keccak256\":\"0x57a0e246fb1c8f9cccf91c508eafe474e40260a31de3a39019ba8312cfdf9b2d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155Receiver is IERC165 {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC721Receiver.sol\\\";\\n\\n /**\\n * @dev Implementation of the {IERC721Receiver} interface.\\n *\\n * Accepts all token transfers. \\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\\n */\\ncontract ERC721Holder is IERC721Receiver {\\n\\n /**\\n * @dev See {IERC721Receiver-onERC721Received}.\\n *\\n * Always returns `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n}\\n\",\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3a89b0a6ff66280e8e48f9f2c862d5c0e8ab23ee306ae5b204cd588931661a93\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n}\\n\",\"keccak256\":\"0xa9d02b9e22ffb9d25f412979951822d56b05d857de1f47ce82ad7b4a8d4601f6\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\\\";\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport \\\"./interfaces/IWyvernExchange.sol\\\";\\nimport \\\"./interfaces/IExchangeV2.sol\\\";\\nimport \\\"./interfaces/ISeaPort.sol\\\";\\nimport \\\"./interfaces/Ix2y2.sol\\\";\\nimport \\\"./interfaces/ILooksRare.sol\\\";\\nimport \\\"./interfaces/IBlur.sol\\\";\\n\\nimport \\\"./libraries/IsPausable.sol\\\";\\n\\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\\n using LibTransfer for address;\\n using BpLibrary for uint;\\n using SafeMath for uint;\\n\\n //marketplaces\\n address public immutable wyvernExchange;\\n address public immutable exchangeV2;\\n address public immutable seaPort_1_1;\\n address public immutable x2y2;\\n address public immutable looksRare;\\n address public immutable sudoswap;\\n address public immutable seaPort_1_4;\\n address public immutable looksRareV2;\\n address public immutable blur;\\n address public immutable seaPort_1_5;\\n address public immutable seaPort_1_6;\\n\\n //currencties\\n address public immutable weth;\\n\\n //constants\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n event Execution(bool result);\\n\\n enum Markets {\\n ExchangeV2,//0\\n WyvernExchange,//1\\n SeaPort_1_1,//2\\n X2Y2,//3\\n LooksRareOrders,//4\\n SudoSwap,//5\\n SeaPort_1_4,//6\\n LooksRareV2,//7\\n Blur,//8\\n SeaPort_1_5,//9\\n SeaPort_1_6//10\\n }\\n\\n enum AdditionalDataTypes {\\n NoAdditionalData,\\n RoyaltiesAdditionalData\\n }\\n\\n enum Currencies {\\n ETH,\\n WETH\\n }\\n\\n /**\\n @notice struct for the purchase data\\n @param marketId - market key from Markets enum (what market to use)\\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\\n bytes (27,28) used for dataType\\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\\n @param data - data for market call\\n */\\n struct PurchaseDetails {\\n Markets marketId;\\n uint256 amount;\\n uint fees;\\n bytes data;\\n }\\n\\n /**\\n @notice struct for the data with additional Ddta\\n @param data - data for market call\\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\\n */\\n struct AdditionalData {\\n bytes data;\\n uint[] additionalRoyalties;\\n }\\n\\n constructor(\\n address[11] memory marketplaces,\\n //address _wyvernExchange, 0\\n //address _exchangeV2, 1\\n //address _seaPort_1_1, 2\\n //address _x2y2, 3\\n //address _looksRare, 4\\n //address _sudoswap, 5\\n //address _seaPort_1_4, 6\\n //address _looksRareV2, 7\\n //address _blur, 8\\n //address _seaPort_1_5, 9\\n //address _seaPort_1_6, 10\\n address _weth,\\n address[] memory transferProxies\\n ) {\\n wyvernExchange = marketplaces[0];\\n exchangeV2 = marketplaces[1];\\n seaPort_1_1 = marketplaces[2];\\n x2y2 = marketplaces[3];\\n looksRare = marketplaces[4];\\n sudoswap = marketplaces[5];\\n seaPort_1_4 = marketplaces[6];\\n looksRareV2 = marketplaces[7];\\n blur = marketplaces[8];\\n seaPort_1_5 = marketplaces[9];\\n seaPort_1_6 = marketplaces[10];\\n\\n weth = _weth;\\n\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n if (_weth != address(0)){\\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n }\\n\\n /**\\n @notice executes a single purchase\\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n */\\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\\n requireNotPaused();\\n \\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\\n \\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n Currencies currency = getCurrency(purchaseDetails.fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n emit Execution(success);\\n \\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes an array of purchases\\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\\n */\\n \\n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\\n requireNotPaused();\\n\\n uint sumFirstFeesETH = 0;\\n uint sumSecondFeesETH = 0;\\n uint sumFirstFeesWETH = 0;\\n uint sumSecondFeesWETH = 0;\\n bool result = false;\\n\\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = 0;\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\\n }\\n\\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n Currencies currency = getCurrency(purchaseDetails[i].fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n result = result || success;\\n emit Execution(success);\\n }\\n\\n require(result, \\\"no successful executions\\\");\\n\\n //pay fees in ETH \\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\\n\\n //pay fees in WETH\\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\\n\\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes one purchase in ETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n uint paymentAmount = purchaseDetails.amount;\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase wyvernExchange failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\\n\\n if (allowFail) {\\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n Ix2y2(x2y2).run{value : paymentAmount}(input);\\n }\\n\\n //for every element in input.details[] getting\\n // order = input.details[i].orderIdx\\n // and from that order getting item = input.details[i].itemId\\n for (uint i = 0; i < input.details.length; ++i) {\\n uint orderId = input.details[i].orderIdx;\\n uint itemId = input.details[i].itemIdx;\\n bytes memory data = input.orders[orderId].items[itemId].data;\\n {\\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\\n }\\n }\\n\\n // 1 = erc-721\\n if (input.orders[orderId].delegateType == 1) {\\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair721 memory p = pairs[j];\\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\\n }\\n } else if (input.orders[orderId].delegateType == 2) {\\n // 2 = erc-1155\\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair1155 memory p = pairs[j];\\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \\\"\\\");\\n }\\n } else {\\n revert(\\\"unknown delegateType x2y2\\\");\\n }\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\\n if (allowFail) {\\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase sudoswap failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase LooksRareV2 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.Blur){\\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\\n if (allowFail) {\\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId ETH\\\");\\n }\\n\\n //transferring royalties\\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\\n \\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice executes one purchase in WETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n\\n //buying\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed WETH\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId WETH\\\");\\n }\\n \\n //transfer royalties\\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\\n\\n //get fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice transfers ETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n LibTransfer.transferEth(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers WETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers change back to sender\\n */\\n function transferChange() internal {\\n uint ethAmount = address(this).balance;\\n if (ethAmount > 0) {\\n address(msg.sender).transferEth(ethAmount);\\n }\\n }\\n\\n /**\\n @notice transfers weth change back to sender\\n */\\n function transferChangeWETH() internal {\\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\\n if (wethAmount > 0) {\\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\\n }\\n }\\n\\n /**\\n @notice parses fees in base points from one uint and calculates real amount of fees\\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\\n @param amount price of the order\\n @return firstFeeAmount real amount for the first fee\\n @return secondFeeAmount real amount for the second fee\\n */\\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\\n uint firstFee = uint(uint16(fees >> 16));\\n uint secondFee = uint(uint16(fees));\\n return (amount.bp(firstFee), amount.bp(secondFee));\\n }\\n\\n /**\\n @notice parses \\\"fees\\\" field to find the currency for the purchase\\n @param fees field with encoded data\\n @return 0 if ETH, 1 if WETH ERC-20\\n */\\n function getCurrency(uint fees) internal pure returns(Currencies) {\\n return Currencies(uint16(fees >> 48));\\n }\\n\\n\\n /**\\n @notice parses _data to data for market call and additionalData\\n @param feesAndDataType 27 and 28 bytes for dataType\\n @return marketData data for market call\\n @return additionalRoyalties array uint256, (base point + address)\\n */\\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\\n uint[] memory additionalRoyalties;\\n\\n //return no royalties if wrong data type\\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\\n return (_data, additionalRoyalties);\\n }\\n\\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\\n\\n //return no royalties if market doesn't support royalties\\n if (supportsRoyalties(marketId)) {\\n return (additionalData.data, additionalData.additionalRoyalties);\\n } else {\\n return (additionalData.data, additionalRoyalties);\\n } \\n }\\n \\n revert(\\\"unknown additionalDataType\\\");\\n }\\n\\n /**\\n @notice transfer additional royalties in ETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeETH(value, account);\\n }\\n }\\n }\\n\\n /**\\n @notice transfer additional royalties in WETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeWETH(value, account);\\n }\\n }\\n }\\n\\n // modifies `src`\\n function _arrayReplace(\\n bytes memory src,\\n bytes memory replacement,\\n bytes memory mask\\n ) internal view virtual {\\n require(src.length == replacement.length);\\n require(src.length == mask.length);\\n\\n for (uint256 i = 0; i < src.length; ++i) {\\n if (mask[i] != 0) {\\n src[i] = replacement[i];\\n }\\n }\\n }\\n\\n /**\\n @notice returns true if this contract supports additional royalties for the marketplace;\\n now royalties are supported for:\\n 1. SudoSwap\\n 2. LooksRare old\\n 3. LooksRare V2\\n */\\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\\n if (\\n marketId == Markets.SudoSwap ||\\n marketId == Markets.LooksRareOrders ||\\n marketId == Markets.LooksRareV2\\n ) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\\n uint result = 0;\\n\\n Currencies currency = getCurrency(detail.fees);\\n\\n //for every purchase with WETH we sum amount, fees and royalties needed\\n if (currency == Currencies.WETH) {\\n\\n //add amount\\n result = result + detail.amount;\\n\\n //add fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\\n result = result + firstFeeAmount + secondFeeAmount;\\n\\n //add royalties\\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\\n for (uint j = 0; j < royalties.length; ++j) {\\n uint royaltyBasePoint = uint(royalties[j] >> 160);\\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\\n result = result + royaltyValue;\\n }\\n }\\n\\n return result;\\n }\\n\\n /**\\n @notice approves weth for a list of the addresses\\n @param transferProxies - array of addresses to approve WETH for\\n */\\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n receive() external payable {}\\n}\",\"keccak256\":\"0xe2bc3642e9df1b789a04dadbb81842deef698616ecc68aa2a4d89252dda77783\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\n\\ninterface IBlur {\\n enum Side { Buy, Sell }\\n enum SignatureVersion { Single, Bulk }\\n enum AssetType { ERC721, ERC1155 }\\n\\n struct Fee {\\n uint16 rate;\\n address payable recipient;\\n }\\n \\n struct Order {\\n address trader;\\n Side side;\\n address matchingPolicy;\\n address collection;\\n uint256 tokenId;\\n uint256 amount;\\n address paymentToken;\\n uint256 price;\\n uint256 listingTime;\\n /* Order expiration timestamp - 0 for oracle cancellations. */\\n uint256 expirationTime;\\n Fee[] fees;\\n uint256 salt;\\n bytes extraParams;\\n }\\n\\n struct Input {\\n Order order;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n bytes extraSignature;\\n SignatureVersion signatureVersion;\\n uint256 blockNumber;\\n }\\n\\n function execute(Input calldata sell, Input calldata buy)\\n external\\n payable;\\n}\\n\",\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-v2/contracts/ExchangeV2.sol\\\";\\n\\nimport {RoyaltiesRegistry} from \\\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\\\";\\nimport {TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\\\";\\nimport {ERC20TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\\\";\\n\\ninterface IExchangeV2 {\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable;\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable;\\n}\",\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibLooksRare.sol\\\";\\n\\ninterface ILooksRare {\\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\\n\\n /**\\n * @notice This function allows a user to execute a taker bid (against a maker ask).\\n * @param takerBid Taker bid struct\\n * @param makerAsk Maker ask struct\\n * @param makerSignature Maker signature\\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\\n * @param affiliate Affiliate address\\n */\\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\\n}\\n\",\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibSeaPort.sol\\\";\\n\\ninterface ISeaPort {\\n function fulfillAdvancedOrder(\\n LibSeaPort.AdvancedOrder calldata advancedOrder,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n bytes32 fulfillerConduitKey,\\n address recipient\\n ) external payable returns (bool fulfilled);\\n\\n function fulfillAvailableAdvancedOrders(\\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\\n bytes32 fulfillerConduitKey,\\n address recipient,\\n uint256 maximumFulfilled\\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\\n\\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\\n external\\n payable\\n returns (bool fulfilled);\\n}\",\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface IWyvernExchange {\\n function atomicMatch_(\\n address[14] memory addrs,\\n uint[18] memory uints,\\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\\n bytes memory calldataBuy,\\n bytes memory calldataSell,\\n bytes memory replacementPatternBuy,\\n bytes memory replacementPatternSell,\\n bytes memory staticExtradataBuy,\\n bytes memory staticExtradataSell,\\n uint8[2] memory vs,\\n bytes32[5] memory rssMetadata)\\n external\\n payable;\\n\\n enum Side {\\n Buy,\\n Sell\\n }\\n\\n enum SaleKind {\\n FixedPrice,\\n DutchAuction\\n }\\n\\n function calculateFinalPrice(\\n Side side,\\n SaleKind saleKind,\\n uint256 basePrice,\\n uint256 extra,\\n uint256 listingTime,\\n uint256 expirationTime\\n ) external view returns (uint256);\\n}\",\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface Ix2y2 {\\n\\n struct OrderItem {\\n uint256 price;\\n bytes data;\\n }\\n\\n struct Pair721 {\\n address token;\\n uint256 tokenId;\\n }\\n\\n struct Pair1155 {\\n address token;\\n uint256 tokenId;\\n uint256 amount;\\n }\\n\\n struct Order {\\n uint256 salt;\\n address user;\\n uint256 network;\\n uint256 intent;\\n uint256 delegateType;\\n uint256 deadline;\\n address currency;\\n bytes dataMask;\\n OrderItem[] items;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n uint8 signVersion;\\n }\\n\\n struct Fee {\\n uint256 percentage;\\n address to;\\n }\\n\\n struct SettleDetail {\\n Op op;\\n uint256 orderIdx;\\n uint256 itemIdx;\\n uint256 price;\\n bytes32 itemHash;\\n address executionDelegate;\\n bytes dataReplacement;\\n uint256 bidIncentivePct;\\n uint256 aucMinIncrementPct;\\n uint256 aucIncDurationSecs;\\n Fee[] fees;\\n }\\n\\n struct SettleShared {\\n uint256 salt;\\n uint256 deadline;\\n uint256 amountToEth;\\n uint256 amountToWeth;\\n address user;\\n bool canFail;\\n }\\n\\n struct RunInput {\\n Order[] orders;\\n SettleDetail[] details;\\n SettleShared shared;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n }\\n\\n enum Op {\\n INVALID,\\n // off-chain\\n COMPLETE_SELL_OFFER,\\n COMPLETE_BUY_OFFER,\\n CANCEL_OFFER,\\n // auction\\n BID,\\n COMPLETE_AUCTION,\\n REFUND_AUCTION,\\n REFUND_AUCTION_STUCK_ITEM\\n }\\n\\n function run(RunInput memory input) external payable;\\n}\",\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nabstract contract IsPausable is Ownable {\\n bool public paused;\\n\\n event Paused(bool paused);\\n\\n function pause(bool _paused) external onlyOwner {\\n paused = _paused;\\n emit Paused(_paused);\\n }\\n\\n function requireNotPaused() internal view {\\n require (!paused, \\\"the contract is paused\\\");\\n }\\n\\n}\\n\",\"keccak256\":\"0xd0ea1d6838dd79b8cfe64e777e4f84456928f0e3621fbb6acd00492e738b2b61\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibLooksRare {\\n struct MakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address signer; // signer of the maker order\\n address collection; // collection address\\n uint256 price; // price (used as )\\n uint256 tokenId; // id of the token\\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\\n address currency; // currency (e.g., WETH)\\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\\n uint256 startTime; // startTime in timestamp\\n uint256 endTime; // endTime in timestamp\\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // additional parameters\\n uint8 v; // v: parameter (27 or 28)\\n bytes32 r; // r: parameter\\n bytes32 s; // s: parameter\\n }\\n\\n struct TakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address taker; // msg.sender\\n uint256 price; // final price for the purchase\\n uint256 tokenId;\\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // other params (e.g., tokenId)\\n }\\n\\n /**\\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\\n */\\n enum CollectionType {\\n ERC721,\\n ERC1155\\n }\\n\\n /**\\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\\n */\\n enum QuoteType {\\n Bid,\\n Ask\\n }\\n /**\\n * 1. Maker struct\\n */\\n\\n /**\\n * @notice Maker is the struct for a maker order.\\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\\n * @param globalNonce Global user order nonce for maker orders\\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\\n * @param strategyId Strategy id\\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\\n * @param collection Collection address\\n * @param currency Currency address (@dev address(0) = ETH)\\n * @param signer Signer address\\n * @param startTime Start timestamp\\n * @param endTime End timestamp\\n * @param price Minimum price for maker ask, maximum price for maker bid\\n * @param itemIds Array of itemIds\\n * @param amounts Array of amounts\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Maker {\\n QuoteType quoteType;\\n uint256 globalNonce;\\n uint256 subsetNonce;\\n uint256 orderNonce;\\n uint256 strategyId;\\n CollectionType collectionType;\\n address collection;\\n address currency;\\n address signer;\\n uint256 startTime;\\n uint256 endTime;\\n uint256 price;\\n uint256[] itemIds;\\n uint256[] amounts;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 2. Taker struct\\n */\\n\\n /**\\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Taker {\\n address recipient;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 3. Merkle tree struct\\n */\\n\\n enum MerkleTreeNodePosition {\\n Left,\\n Right\\n }\\n\\n /**\\n * @notice MerkleTreeNode is a MerkleTree's node.\\n * @param value It can be an order hash or a proof\\n * @param position The node's position in its branch.\\n * It can be left or right or none\\n * (before the tree is sorted).\\n */\\n struct MerkleTreeNode {\\n bytes32 value;\\n MerkleTreeNodePosition position;\\n }\\n\\n /**\\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\\n * @dev A Merkle tree can be computed with order hashes.\\n * It can contain order hashes from both maker bid and maker ask structs.\\n * @param root Merkle root\\n * @param proof Array containing the merkle proof\\n */\\n struct MerkleTree {\\n bytes32 root;\\n MerkleTreeNode[] proof;\\n }\\n}\\n\",\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibSeaPort {\\n /**\\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\\n * matching, a group of six functions may be called that only requires a\\n * subset of the usual order arguments. Note the use of a \\\"basicOrderType\\\"\\n * enum; this represents both the usual order type as well as the \\\"route\\\"\\n * of the basic order (a simple derivation function for the basic order\\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\\n */\\n struct BasicOrderParameters {\\n address considerationToken; // 0x24\\n uint256 considerationIdentifier; // 0x44\\n uint256 considerationAmount; // 0x64\\n address payable offerer; // 0x84\\n address zone; // 0xa4\\n address offerToken; // 0xc4\\n uint256 offerIdentifier; // 0xe4\\n uint256 offerAmount; // 0x104\\n BasicOrderType basicOrderType; // 0x124\\n uint256 startTime; // 0x144\\n uint256 endTime; // 0x164\\n bytes32 zoneHash; // 0x184\\n uint256 salt; // 0x1a4\\n bytes32 offererConduitKey; // 0x1c4\\n bytes32 fulfillerConduitKey; // 0x1e4\\n uint256 totalOriginalAdditionalRecipients; // 0x204\\n AdditionalRecipient[] additionalRecipients; // 0x224\\n bytes signature; // 0x244\\n }\\n /**\\n * @dev Basic orders can supply any number of additional recipients, with the\\n * implied assumption that they are supplied from the offered ETH (or other\\n * native token) or ERC20 token for the order.\\n */\\n struct AdditionalRecipient {\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum BasicOrderType {\\n // 0: no partial fills, anyone can execute\\n ETH_TO_ERC721_FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n ETH_TO_ERC721_PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC721_FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 4: no partial fills, anyone can execute\\n ETH_TO_ERC1155_FULL_OPEN,\\n\\n // 5: partial fills supported, anyone can execute\\n ETH_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 6: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 7: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 8: no partial fills, anyone can execute\\n ERC20_TO_ERC721_FULL_OPEN,\\n\\n // 9: partial fills supported, anyone can execute\\n ERC20_TO_ERC721_PARTIAL_OPEN,\\n\\n // 10: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC721_FULL_RESTRICTED,\\n\\n // 11: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 12: no partial fills, anyone can execute\\n ERC20_TO_ERC1155_FULL_OPEN,\\n\\n // 13: partial fills supported, anyone can execute\\n ERC20_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 14: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 15: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 16: no partial fills, anyone can execute\\n ERC721_TO_ERC20_FULL_OPEN,\\n\\n // 17: partial fills supported, anyone can execute\\n ERC721_TO_ERC20_PARTIAL_OPEN,\\n\\n // 18: no partial fills, only offerer or zone can execute\\n ERC721_TO_ERC20_FULL_RESTRICTED,\\n\\n // 19: partial fills supported, only offerer or zone can execute\\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\\n\\n // 20: no partial fills, anyone can execute\\n ERC1155_TO_ERC20_FULL_OPEN,\\n\\n // 21: partial fills supported, anyone can execute\\n ERC1155_TO_ERC20_PARTIAL_OPEN,\\n\\n // 22: no partial fills, only offerer or zone can execute\\n ERC1155_TO_ERC20_FULL_RESTRICTED,\\n\\n // 23: partial fills supported, only offerer or zone can execute\\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\\n }\\n\\n /**\\n * @dev The full set of order components, with the exception of the counter,\\n * must be supplied when fulfilling more sophisticated orders or groups of\\n * orders. The total number of original consideration items must also be\\n * supplied, as the caller may specify additional consideration items.\\n */\\n struct OrderParameters {\\n address offerer; // 0x00\\n address zone; // 0x20\\n OfferItem[] offer; // 0x40\\n ConsiderationItem[] consideration; // 0x60\\n OrderType orderType; // 0x80\\n uint256 startTime; // 0xa0\\n uint256 endTime; // 0xc0\\n bytes32 zoneHash; // 0xe0\\n uint256 salt; // 0x100\\n bytes32 conduitKey; // 0x120\\n uint256 totalOriginalConsiderationItems; // 0x140\\n // offer.length // 0x160\\n }\\n\\n /**\\n * @dev Orders require a signature in addition to the other order parameters.\\n */\\n struct Order {\\n OrderParameters parameters;\\n bytes signature;\\n }\\n\\n struct AdvancedOrder {\\n OrderParameters parameters;\\n uint120 numerator;\\n uint120 denominator;\\n bytes signature;\\n bytes extraData;\\n }\\n\\n struct OfferItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n }\\n\\n /**\\n * @dev A consideration item has the same five components as an offer item and\\n * an additional sixth component designating the required recipient of the\\n * item.\\n */\\n struct ConsiderationItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum OrderType {\\n // 0: no partial fills, anyone can execute\\n FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n PARTIAL_RESTRICTED\\n }\\n\\n // prettier-ignore\\n enum ItemType {\\n // 0: ETH on mainnet, MATIC on polygon, etc.\\n NATIVE,\\n\\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\\n ERC20,\\n\\n // 2: ERC721 items\\n ERC721,\\n\\n // 3: ERC1155 items\\n ERC1155,\\n\\n // 4: ERC721 items where a number of tokenIds are supported\\n ERC721_WITH_CRITERIA,\\n\\n // 5: ERC1155 items where a number of ids are supported\\n ERC1155_WITH_CRITERIA\\n }\\n\\n /**\\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\\n * offer and consideration items, then generates a single execution\\n * element. A given fulfillment can be applied to as many offer and\\n * consideration items as desired, but must contain at least one offer and\\n * at least one consideration that match. The fulfillment must also remain\\n * consistent on all key parameters across all offer items (same offerer,\\n * token, type, tokenId, and conduit preference) as well as across all\\n * consideration items (token, type, tokenId, and recipient).\\n */\\n struct Fulfillment {\\n FulfillmentComponent[] offerComponents;\\n FulfillmentComponent[] considerationComponents;\\n }\\n\\n /**\\n * @dev Each fulfillment component contains one index referencing a specific\\n * order and another referencing a specific offer or consideration item.\\n */\\n struct FulfillmentComponent {\\n uint256 orderIndex;\\n uint256 itemIndex;\\n }\\n\\n /**\\n * @dev An execution is triggered once all consideration items have been zeroed\\n * out. It sends the item in question from the offerer to the item's\\n * recipient, optionally sourcing approvals from either this contract\\n * directly or from the offerer's chosen conduit if one is specified. An\\n * execution is not provided as an argument, but rather is derived via\\n * orders, criteria resolvers, and fulfillments (where the total number of\\n * executions will be less than or equal to the total number of indicated\\n * fulfillments) and returned as part of `matchOrders`.\\n */\\n struct Execution {\\n ReceivedItem item;\\n address offerer;\\n bytes32 conduitKey;\\n }\\n\\n /**\\n * @dev A received item is translated from a utilized consideration item and has\\n * the same four components as a spent item, as well as an additional fifth\\n * component designating the required recipient of the item.\\n */\\n struct ReceivedItem {\\n ItemType itemType;\\n address token;\\n uint256 identifier;\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n struct CriteriaResolver {\\n uint256 orderIndex;\\n Side side;\\n uint256 index;\\n uint256 identifier;\\n bytes32[] criteriaProof;\\n }\\n\\n // prettier-ignore\\n enum Side {\\n // 0: Items that can be spent\\n OFFER,\\n\\n // 1: Items that must be received\\n CONSIDERATION\\n }\\n}\\n\",\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x7f99c2e0828bbba57e1599d92f1368b62ef0e9cd62bda3c4091e108d1fbc35b6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x5e982ad688493d9c729757c2ebd98efecd0bf3b33992f7342edf6c349874b86c\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x363fa1f25a41aa7d7b3fb9e2d182dec04c3774d06d9eed428b3fe48140fa4b7e\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x87cd179c900495ee44c1b9c7fa57f4da0228217d78792bd6d6a6fde6c32be2b2\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6102006040523480156200001257600080fd5b5060405162004f4738038062004f47833981016040819052620000359162000352565b6000620000416200021e565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200009d6301ffc9a760e01b62000222565b620000af630271189760e51b62000222565b82516001600160601b0319606091821b811660809081526020860151831b821660a09081526040870151841b831660c090815284880151851b841660e090815292880151851b841661010090815291880151851b841661012090815290880151851b841661014090815292880151851b84166101605290870151841b831661018052860151831b82166101a052850151821b81166101c0529083901b166101e05260005b815181101562000214576001600160a01b038316156200020b57826001600160a01b031663095ea7b38383815181106200018957fe5b60200260200101516000196040518363ffffffff1660e01b8152600401620001b392919062000437565b602060405180830381600087803b158015620001ce57600080fd5b505af1158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020991906200040e565b505b60010162000153565b5050505062000474565b3390565b6001600160e01b0319808216141562000282576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b80516001600160a01b0381168114620002c257600080fd5b919050565b600082601f830112620002d8578081fd5b815160206001600160401b03821115620002ee57fe5b808202620002fe82820162000450565b83815282810190868401838801850189101562000319578687fd5b8693505b8584101562000346576200033181620002aa565b8352600193909301929184019184016200031d565b50979650505050505050565b60008060006101a0848603121562000368578283fd5b84601f85011262000377578283fd5b610160620003858162000450565b9085019080868884111562000398578687fd5b865b600b811015620003c557620003af82620002aa565b845260209384019391909101906001016200039a565b50508095505050620003d781620002aa565b61018086015190935090506001600160401b03811115620003f6578182fd5b6200040486828701620002c7565b9150509250925092565b60006020828403121562000420578081fd5b8151801515811462000430578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b03811182821017156200046c57fe5b604052919050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6149ac6200059b60003980610517528061062f528061084c52806109bf52806123e3528061249a5280612529525080610d8c5280611dee52806122ab5250806104cf5280611d1c52806121db525080610c555280611b375280611bd15250806104f35280611a2d525080610c0d528061195b528061210b525080610544528061188952508061092b528061165d52806116f7525080610db05280611204528061129a5250806103cf5280610f525280611f6052508061094f5280611101528061203b525080610c31528061102f52506149ac6000f3fe60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204ccd56ab995869fdbc4ed21f23f9fabaa9ca715a97c76cb58a753eac8de130ff64736f6c63430007060033", + "deployedBytecode": "0x60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204ccd56ab995869fdbc4ed21f23f9fabaa9ca715a97c76cb58a753eac8de130ff64736f6c63430007060033", "devdoc": { "kind": "dev", "methods": { @@ -642,7 +656,7 @@ "type": "t_mapping(t_bytes4,t_bool)" }, { - "astId": 17196, + "astId": 17316, "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", "label": "paused", "offset": 0, diff --git a/projects/hardhat-deploy/deployments/base_sepolia/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json b/projects/hardhat-deploy/deployments/base_sepolia/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json new file mode 100644 index 000000000..ce8ca1d7b --- /dev/null +++ b/projects/hardhat-deploy/deployments/base_sepolia/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json @@ -0,0 +1,617 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal initializer {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712Upgradeable is Initializable {\n /* solhint-disable var-name-mixedcase */\n bytes32 private _HASHED_NAME;\n bytes32 private _HASHED_VERSION;\n bytes32 private constant _TYPE_HASH = keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n function __EIP712_init(string memory name, string memory version) internal initializer {\n __EIP712_init_unchained(name, version);\n }\n\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\n }\n\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\n return keccak256(\n abi.encode(\n typeHash,\n name,\n version,\n _getChainId(),\n address(this)\n )\n );\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n }\n\n function _getChainId() private view returns (uint256 chainId) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n\n /**\n * @dev The hash of the name parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712NameHash() internal virtual view returns (bytes32) {\n return _HASHED_NAME;\n }\n\n /**\n * @dev The hash of the version parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\n return _HASHED_VERSION;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165Upgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n function __ERC165_init() internal initializer {\n __ERC165_init_unchained();\n }\n\n function __ERC165_init_unchained() internal initializer {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165Upgradeable {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\n// solhint-disable-next-line compiler-version\npragma solidity >=0.4.24 <0.8.0;\n\nimport \"../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n */\nabstract contract Initializable {\n\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(_initializing || _isConstructor() || !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /// @dev Returns true if and only if the function is running in the constructor\n function _isConstructor() private view returns (bool) {\n return !AddressUpgradeable.isContract(address(this));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155HolderUpgradeable is Initializable, ERC1155ReceiverUpgradeable {\n function __ERC1155Holder_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ERC1155Holder_init_unchained();\n }\n\n function __ERC1155Holder_init_unchained() internal initializer {\n }\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\n function __ERC1155Receiver_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n }\n\n function __ERC1155Receiver_init_unchained() internal initializer {\n _registerInterface(\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\n );\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\nimport \"./IERC1155MetadataURIUpgradeable.sol\";\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC20Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable {\n using SafeMathUpgradeable for uint256;\n\n mapping (address => uint256) private _balances;\n\n mapping (address => mapping (address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n * a default value of 18.\n *\n * To select a different value for {decimals}, use {_setupDecimals}.\n *\n * All three of these values are immutable: they can only be set once during\n * construction.\n */\n function __ERC20_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC20_init_unchained(name_, symbol_);\n }\n\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n _decimals = 18;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n * called.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return _decimals;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * Requirements:\n *\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n * - the caller must have allowance for ``sender``'s tokens of at least\n * `amount`.\n */\n function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n /**\n * @dev Moves tokens `amount` from `sender` to `recipient`.\n *\n * This is internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: mint to the zero address\");\n\n _beforeTokenTransfer(address(0), account, amount);\n\n _totalSupply = _totalSupply.add(amount);\n _balances[account] = _balances[account].add(amount);\n emit Transfer(address(0), account, amount);\n }\n\n /**\n * @dev Destroys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: burn from the zero address\");\n\n _beforeTokenTransfer(account, address(0), amount);\n\n _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n _totalSupply = _totalSupply.sub(amount);\n emit Transfer(account, address(0), amount);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(address owner, address spender, uint256 amount) internal virtual {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Sets {decimals} to a value other than the default one of 18.\n *\n * WARNING: This function should only be called from the constructor. Most\n * applications that interact with token contracts will not expect\n * {decimals} to ever change, and may work incorrectly if it does.\n */\n function _setupDecimals(uint8 decimals_) internal virtual {\n _decimals = decimals_;\n }\n\n /**\n * @dev Hook that is called before any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * will be to transferred to `to`.\n * - when `from` is zero, `amount` tokens will be minted for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n uint256[44] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20Upgradeable {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721HolderUpgradeable is Initializable, IERC721ReceiverUpgradeable {\n function __ERC721Holder_init() internal initializer {\n __ERC721Holder_init_unchained();\n }\n\n function __ERC721Holder_init_unchained() internal initializer {\n }\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC721Upgradeable.sol\";\nimport \"./IERC721MetadataUpgradeable.sol\";\nimport \"./IERC721EnumerableUpgradeable.sol\";\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../utils/EnumerableSetUpgradeable.sol\";\nimport \"../../utils/EnumerableMapUpgradeable.sol\";\nimport \"../../utils/StringsUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) private _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap private _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits an {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[41] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721EnumerableUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the total amount of tokens stored by the contract.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);\n\n /**\n * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n * Use along with {totalSupply} to enumerate all tokens.\n */\n function tokenByIndex(uint256 index) external view returns (uint256);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721ReceiverUpgradeable {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the caller.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool _approved) external;\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal initializer {\n __Context_init_unchained();\n }\n\n function __Context_init_unchained() internal initializer {\n }\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing an enumerable variant of Solidity's\n * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]\n * type.\n *\n * Maps have the following properties:\n *\n * - Entries are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Entries are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableMap for EnumerableMap.UintToAddressMap;\n *\n * // Declare a set state variable\n * EnumerableMap.UintToAddressMap private myMap;\n * }\n * ```\n *\n * As of v3.0.0, only maps of type `uint256 -> address` (`UintToAddressMap`) are\n * supported.\n */\nlibrary EnumerableMapUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Map type with\n // bytes32 keys and values.\n // The Map implementation uses private functions, and user-facing\n // implementations (such as Uint256ToAddressMap) are just wrappers around\n // the underlying Map.\n // This means that we can only create new EnumerableMaps for types that fit\n // in bytes32.\n\n struct MapEntry {\n bytes32 _key;\n bytes32 _value;\n }\n\n struct Map {\n // Storage of map keys and values\n MapEntry[] _entries;\n\n // Position of the entry defined by a key in the `entries` array, plus 1\n // because index 0 means a key is not in the map.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex == 0) { // Equivalent to !contains(map, key)\n map._entries.push(MapEntry({ _key: key, _value: value }));\n // The entry is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n map._indexes[key] = map._entries.length;\n return true;\n } else {\n map._entries[keyIndex - 1]._value = value;\n return false;\n }\n }\n\n /**\n * @dev Removes a key-value pair from a map. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function _remove(Map storage map, bytes32 key) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex != 0) { // Equivalent to contains(map, key)\n // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one\n // in the array, and then remove the last entry (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = keyIndex - 1;\n uint256 lastIndex = map._entries.length - 1;\n\n // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n MapEntry storage lastEntry = map._entries[lastIndex];\n\n // Move the last entry to the index where the entry to delete is\n map._entries[toDeleteIndex] = lastEntry;\n // Update the index for the moved entry\n map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved entry was stored\n map._entries.pop();\n\n // Delete the index for the deleted slot\n delete map._indexes[key];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function _contains(Map storage map, bytes32 key) private view returns (bool) {\n return map._indexes[key] != 0;\n }\n\n /**\n * @dev Returns the number of key-value pairs in the map. O(1).\n */\n function _length(Map storage map) private view returns (uint256) {\n return map._entries.length;\n }\n\n /**\n * @dev Returns the key-value pair stored at position `index` in the map. O(1).\n *\n * Note that there are no guarantees on the ordering of entries inside the\n * array, and it may change when more entries are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {\n require(map._entries.length > index, \"EnumerableMap: index out of bounds\");\n\n MapEntry storage entry = map._entries[index];\n return (entry._key, entry._value);\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n */\n function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {\n uint256 keyIndex = map._indexes[key];\n if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)\n return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function _get(Map storage map, bytes32 key) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, \"EnumerableMap: nonexistent key\"); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n /**\n * @dev Same as {_get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {_tryGet}.\n */\n function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n // UintToAddressMap\n\n struct UintToAddressMap {\n Map _inner;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {\n return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {\n return _remove(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {\n return _contains(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns the number of elements in the map. O(1).\n */\n function length(UintToAddressMap storage map) internal view returns (uint256) {\n return _length(map._inner);\n }\n\n /**\n * @dev Returns the element stored at position `index` in the set. O(1).\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {\n (bytes32 key, bytes32 value) = _at(map._inner, index);\n return (uint256(key), address(uint160(uint256(value))));\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n *\n * _Available since v3.4._\n */\n function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {\n (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));\n return (success, address(uint160(uint256(value))));\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key)))));\n }\n\n /**\n * @dev Same as {get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryGet}.\n */\n function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n */\nlibrary EnumerableSetUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) { // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n bytes32 lastvalue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastvalue;\n // Update the index for the moved value\n set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n require(set._values.length > index, \"EnumerableSet: index out of bounds\");\n return set._values[index];\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuardUpgradeable is Initializable {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n function __ReentrancyGuard_init() internal initializer {\n __ReentrancyGuard_init_unchained();\n }\n\n function __ReentrancyGuard_init_unchained() internal initializer {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n // On the first call to nonReentrant, _notEntered will be true\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary StringsUpgradeable {\n /**\n * @dev Converts a `uint256` to its ASCII `string` representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n uint256 index = digits - 1;\n temp = value;\n while (temp != 0) {\n buffer[index--] = bytes1(uint8(48 + temp % 10));\n temp /= 10;\n }\n return string(buffer);\n }\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" + }, + "@openzeppelin/contracts/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165 is IERC165 {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n constructor () internal {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "@openzeppelin/contracts/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts/math/SafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\nimport \"./IBeacon.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy {\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) public payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _setBeacon(beacon, data);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address beacon) {\n bytes32 slot = _BEACON_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n beacon := sload(slot)\n }\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_beacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n require(\n Address.isContract(beacon),\n \"BeaconProxy: beacon is not a contract\"\n );\n require(\n Address.isContract(IBeacon(beacon).implementation()),\n \"BeaconProxy: beacon implementation is not a contract\"\n );\n bytes32 slot = _BEACON_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, beacon)\n }\n\n if (data.length > 0) {\n Address.functionDelegateCall(_implementation(), data, \"BeaconProxy: function call failed\");\n }\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "@openzeppelin/contracts/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../access/Ownable.sol\";\nimport \"./TransparentUpgradeableProxy.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(TransparentUpgradeableProxy proxy, address implementation, bytes memory data) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./UpgradeableProxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\n */\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _setAdmin(admin_);\n }\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _admin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _admin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n require(newAdmin != address(0), \"TransparentUpgradeableProxy: new admin is the zero address\");\n emit AdminChanged(_admin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external virtual ifAdmin {\n _upgradeTo(newImplementation);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\n _upgradeTo(newImplementation);\n Address.functionDelegateCall(newImplementation, data);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address adm) {\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n adm := sload(slot)\n }\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n bytes32 slot = _ADMIN_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newAdmin)\n }\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _admin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../access/Ownable.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n constructor(address implementation_) public {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/UpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n *\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\n * {TransparentUpgradeableProxy}.\n */\ncontract UpgradeableProxy is Proxy {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) public payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _setImplementation(_logic);\n if(_data.length > 0) {\n Address.functionDelegateCall(_logic, _data);\n }\n }\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n impl := sload(slot)\n }\n }\n\n /**\n * @dev Upgrades the proxy to a new implementation.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal virtual {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableProxy: new implementation is not a contract\");\n\n bytes32 slot = _IMPLEMENTATION_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newImplementation)\n }\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155.sol\";\nimport \"./IERC1155MetadataURI.sol\";\nimport \"./IERC1155Receiver.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../introspection/ERC165.sol\";\nimport \"../../math/SafeMath.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {\n using SafeMath for uint256;\n using Address for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n constructor (string memory uri_) public {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Receiver.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155Holder is ERC1155Receiver {\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Receiver.sol\";\nimport \"../../introspection/ERC165.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\n constructor() internal {\n _registerInterface(\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\n );\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155 is IERC165 {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURI is IERC1155 {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155Receiver is IERC165 {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/ERC721Holder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721Receiver.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721Holder is IERC721Receiver {\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Pausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n bool private _paused;\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n constructor () internal {\n _paused = false;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n require(!paused(), \"Pausable: paused\");\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n require(paused(), \"Pausable: not paused\");\n _;\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" + }, + "@rarible/auction/contracts/1155/AuctionHouse1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase1155.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse1155 is ERC1155HolderUpgradeable, AuctionHouseBase1155 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse1155_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse1155_init_unchained();\n }\n\n function __AuctionHouse1155_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint96 _sellTokenValue,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC1155 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(_sellTokenValue > 0, \"incorrect _sellTokenValue\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenValue,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n\n transferNFT(\n _sellToken, \n _sellTokenId, \n _sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n sender,\n address(this)\n );\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime if it's not set\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId) internal {\n emit AuctionFinished(_auctionId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n address seller = currentAuction.seller;\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n currentAuction.sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n \n deactivateAuction(_auctionId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return this.supportsInterface(interfaceId);\n }\n\n}" + }, + "@rarible/auction/contracts/1155/AuctionHouseBase1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase1155 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint96 sellTokenValue;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n\n}" + }, + "@rarible/auction/contracts/721/AuctionHouse721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase721.sol\";\nimport \"../wrapper/TokenToAuction.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse721 is ERC721HolderUpgradeable, TokenToAuction, AuctionHouseBase721 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse721_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC721Holder_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse721_init_unchained();\n }\n\n function __AuctionHouse721_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC721 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n transferNFT(\n _sellToken, \n _sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n sender,\n address(this)\n );\n setAuctionForToken(_sellToken, _sellTokenId, currentAuctionId);\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId, address token, uint tokenId) internal {\n emit AuctionFinished(_auctionId);\n deleteAuctionForToken(token, tokenId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n address seller = currentAuction.seller;\n require(_checkAuctionExistence(seller), \"there is no auction with this id\");\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n \n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n /// @dev function to call from wrapper to put bid\n function putBidWrapper(uint256 _auctionId) external payable {\n require(auctions[_auctionId].buyAsset == address(0), \"only ETH bids allowed\");\n putBid(_auctionId, Bid(msg.value, LibBidDataV1.V1, \"\"));\n }\n\n}" + }, + "@rarible/auction/contracts/721/AuctionHouseBase721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase721 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n}" + }, + "@rarible/auction/contracts/AuctionHouseBase.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libs/LibAucDataV1.sol\";\nimport \"./libs/LibBidDataV1.sol\";\nimport \"./libs/SafeMathUpgradeable96.sol\";\n\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nabstract contract AuctionHouseBase is OwnableUpgradeable, ReentrancyGuardUpgradeable, RaribleTransferManager, TransferExecutor {\n using LibTransfer for address;\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n /// @dev default minimal auction duration and also the time for that auction is extended when it's about to end (endTime - now < EXTENSION_DURATION)\n uint96 internal constant EXTENSION_DURATION = 15 minutes;\n\n /// @dev maximum auction duration\n uint128 internal constant MAX_DURATION = 1000 days;\n\n /// @dev maximum fee base point\n uint internal constant MAX_FEE_BASE_POINT = 1000;\n\n /// @dev mapping to store eth amount that is ready to be withdrawn (used for faulty eth-bids)\n mapping(address => uint) readyToWithdraw;\n\n /// @dev latest auctionId\n uint256 public auctionId;\n\n /// @dev minimal auction duration\n uint96 public minimalDuration;\n\n /// @dev minimal bid increase in base points\n uint96 public minimalStepBasePoint;\n\n /// @dev bid struct\n struct Bid {\n // the amount \n uint amount;\n // version of Bid to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Bid, can be seen in \"LibBidDataV1.sol\"\n bytes data;\n }\n\n /// @dev event that emits when auction is created\n event AuctionCreated(uint indexed auctionId, address seller);\n /// @dev event that emits when bid is placed\n event BidPlaced(uint indexed auctionId, address buyer, uint endTime);\n /// @dev event that emits when auction is finished\n event AuctionFinished(uint indexed auctionId);\n /// @dev event that emits when auction is canceled\n event AuctionCancelled(uint indexed auctionId);\n /// @dev event that emits when auction is bought out\n event AuctionBuyOut(uint indexed auctionId, address buyer);\n\n /// @dev event that's emitted when user can withdraw ETH from the AuctionHouse\n event AvailableToWithdraw(address indexed owner, uint added, uint total);\n /// @dev event that's emitted when minimal auction duration changes\n event MinimalDurationChanged(uint oldValue, uint newValue);\n\n event MinimalStepChanged(uint oldValue, uint newValue);\n\n function __AuctionHouseBase_init_unchained(\n uint96 _minimalStepBasePoint\n ) internal initializer {\n auctionId = 1;\n minimalDuration = EXTENSION_DURATION;\n minimalStepBasePoint = _minimalStepBasePoint;\n }\n\n /// @dev increments auctionId and returns new value\n function getNextAndIncrementAuctionId() internal returns (uint256) {\n return auctionId++;\n }\n\n function changeMinimalDuration(uint96 newValue) external onlyOwner {\n emit MinimalDurationChanged(minimalDuration, newValue);\n minimalDuration = newValue;\n }\n\n function changeMinimalStep(uint96 newValue) external onlyOwner {\n emit MinimalStepChanged(minimalStepBasePoint, newValue);\n minimalStepBasePoint = newValue;\n }\n\n function transferNFT (\n address token,\n uint tokenId,\n uint value,\n bytes4 assetClass,\n address from,\n address to\n ) internal {\n transfer(\n getSellAsset(\n token,\n tokenId,\n value,\n assetClass\n ),\n from,\n to,\n proxies[assetClass]\n );\n }\n\n function transferBid(\n uint value,\n address token,\n address from,\n address to,\n address proxy\n ) internal {\n transfer(\n getBuyAsset(\n token,\n value\n ),\n from,\n to,\n proxy\n );\n }\n\n function getSellAsset(address token, uint tokenId, uint value, bytes4 assetClass) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n asset.assetType.assetClass = assetClass;\n asset.assetType.data = abi.encode(token, tokenId);\n }\n\n function getBuyAsset(address token, uint value) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n\n if (token == address(0)){\n asset.assetType.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n asset.assetType.assetClass = LibAsset.ERC20_ASSET_CLASS;\n asset.assetType.data = abi.encode(token);\n }\n }\n\n function getPayouts(address maker) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(maker);\n payout[0].value = 10000;\n return payout;\n }\n\n function getOriginFee(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee = new LibPart.Part[](1);\n originFee[0].account = payable(address(data));\n originFee[0].value = uint96(getValueFromData(data));\n return originFee;\n }\n\n function _checkAuctionRangeTime(uint endTime, uint startTime) internal view returns (bool){\n uint currentTime = block.timestamp;\n if (startTime > 0 && startTime > currentTime) {\n return false;\n }\n if (endTime > 0 && endTime <= currentTime){\n return false;\n }\n\n return true;\n }\n\n /// @dev returns true if newAmount is enough for buyOut\n function buyOutVerify(LibAucDataV1.DataV1 memory aucData, uint newAmount) internal pure returns (bool) {\n if (aucData.buyOutPrice > 0 && aucData.buyOutPrice <= newAmount) {\n return true;\n }\n return false;\n }\n\n /// @dev returns true if auction exists, false otherwise\n function _checkAuctionExistence(address seller) internal pure returns (bool){\n return seller != address(0);\n }\n\n /// @dev Used to withdraw faulty bids (bids that failed to return after out-bidding)\n function withdrawFaultyBid(address _to) external {\n address sender = _msgSender();\n uint amount = readyToWithdraw[sender];\n require( amount > 0, \"nothing to withdraw\");\n readyToWithdraw[sender] = 0;\n _to.transferEth(amount);\n }\n\n function _returnBid(\n Bid memory oldBid,\n address buyAsset,\n address oldBuyer,\n address proxy\n ) internal {\n // nothing to return\n if (oldBuyer == address(0)) {\n return;\n }\n if (buyAsset == address(0)) {\n (bool success,) = oldBuyer.call{ value: oldBid.amount }(\"\");\n if (!success) {\n uint currentValueToWithdraw = readyToWithdraw[oldBuyer];\n uint newValueToWithdraw = oldBid.amount.add(currentValueToWithdraw);\n readyToWithdraw[oldBuyer] = newValueToWithdraw;\n emit AvailableToWithdraw(oldBuyer, oldBid.amount, newValueToWithdraw);\n }\n } else {\n transferBid(\n oldBid.amount,\n buyAsset,\n address(this),\n oldBuyer,\n proxy\n );\n }\n }\n\n function _getProxy(address buyAsset) internal view returns(address){\n address proxy;\n if (buyAsset != address(0)){\n proxy = proxies[LibAsset.ERC20_ASSET_CLASS];\n }\n return proxy;\n }\n\n /// @dev check that msg.value more than bid amount with fees and return change\n function checkEthReturnChange(uint totalAmount, address buyer) internal {\n uint msgValue = msg.value;\n require(msgValue >= totalAmount, \"not enough ETH\");\n uint256 change = msgValue.sub(totalAmount);\n if (change > 0) {\n buyer.transferEth(change);\n }\n }\n\n /// @dev returns true if auction in progress, false otherwise\n function checkAuctionInProgress(address seller, uint endTime, uint startTime) internal view{\n require(_checkAuctionExistence(seller) && _checkAuctionRangeTime(endTime, startTime), \"auction is inactive\");\n }\n\n /// @dev reserves new bid and returns the last one if it exists\n function reserveBid(\n address buyAsset,\n address oldBuyer,\n address newBuyer,\n Bid memory oldBid,\n address proxy,\n uint newTotalAmount\n ) internal {\n // return old bid if theres any\n _returnBid(\n oldBid,\n buyAsset,\n oldBuyer,\n proxy\n );\n \n //lock new bid\n transferBid(\n newTotalAmount,\n buyAsset,\n newBuyer,\n address(this),\n proxy\n );\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function _getMinimalNextBid(address buyer, uint96 minimalPrice, uint amount) internal view returns (uint minBid){\n if (buyer == address(0x0)) {\n minBid = minimalPrice;\n } else {\n minBid = amount.add(amount.bp(minimalStepBasePoint));\n }\n }\n\n function getValueFromData(uint data) internal pure returns(uint) {\n return (data >> 160);\n }\n\n uint256[50] private ______gap;\n}" + }, + "@rarible/auction/contracts/libs/LibAucDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Auction struct\nlibrary LibAucDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Auction data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n // auction duration\n uint96 duration;\n // auction startTime\n uint96 startTime;\n // auction buyout price\n uint96 buyOutPrice;\n }\n\n /// @dev returns parsed data field of an Auction (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n }\n } else {\n revert(\"wrong auction dataType\");\n }\n }\n}\n\n" + }, + "@rarible/auction/contracts/libs/LibBidDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Bid struct\nlibrary LibBidDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Bid data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n }\n\n /// @dev returns parsed data field of a Bid (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n } \n } else {\n revert(\"wrong bid dataType\");\n }\n }\n}\n" + }, + "@rarible/auction/contracts/libs/SafeMathUpgradeable96.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable96 {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint96 a, uint96 b) internal pure returns (uint96) {\n uint96 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint96 a, uint96 b) internal pure returns (uint96) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n}\n" + }, + "@rarible/auction/contracts/wrapper/IMarketWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/**\n * @title IMarketWrapper\n * @author Anna Carroll\n * @notice IMarketWrapper provides a common interface for\n * interacting with NFT auction markets.\n * Contracts can abstract their interactions with\n * different NFT markets using IMarketWrapper.\n * NFT markets can become compatible with any contract\n * using IMarketWrapper by deploying a MarketWrapper contract\n * that implements this interface using the logic of their Market.\n *\n * WARNING: MarketWrapper contracts should NEVER write to storage!\n * When implementing a MarketWrapper, exercise caution; a poorly implemented\n * MarketWrapper contract could permanently lose access to the NFT or user funds.\n */\ninterface IMarketWrapper {\n /**\n * @notice Given the auctionId, nftContract, and tokenId, check that:\n * 1. the auction ID matches the token\n * referred to by tokenId + nftContract\n * 2. the auctionId refers to an *ACTIVE* auction\n * (e.g. an auction that will accept bids)\n * within this market contract\n * 3. any additional validation to ensure that\n * a PartyBid can bid on this auction\n * (ex: if the market allows arbitrary bidding currencies,\n * check that the auction currency is ETH)\n * Note: This function probably should have been named \"isValidAuction\"\n * @dev Called in PartyBid.sol in `initialize` at line 174\n * @return TRUE if the auction is valid\n */\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external view returns (bool);\n\n /**\n * @notice Calculate the minimum next bid for this auction.\n * PartyBid contracts always submit the minimum possible\n * bid that will be accepted by the Market contract.\n * usually, this is either the reserve price (if there are no bids)\n * or a certain percentage increase above the current highest bid\n * @dev Called in PartyBid.sol in `bid` at line 251\n * @return minimum bid amount\n */\n function getMinimumBid(uint256 auctionId) external view returns (uint256);\n\n /**\n * @notice Query the current highest bidder for this auction\n * It is assumed that there is always 1 winning highest bidder for an auction\n * This is used to ensure that PartyBid cannot outbid itself if it is already winning\n * @dev Called in PartyBid.sol in `bid` at line 241\n * @return highest bidder\n */\n function getCurrentHighestBidder(uint256 auctionId)\n external\n view\n returns (address);\n\n /**\n * @notice Submit bid to Market contract\n * @dev Called in PartyBid.sol in `bid` at line 259\n */\n function bid(uint256 auctionId, uint256 bidAmount) external;\n\n /**\n * @notice Determine whether the auction has been finalized\n * Used to check if it is still possible to bid\n * And to determine whether the PartyBid should finalize the auction\n * @dev Called in PartyBid.sol in `bid` at line 247\n * @dev and in `finalize` at line 288\n * @return TRUE if the auction has been finalized\n */\n function isFinalized(uint256 auctionId) external view returns (bool);\n\n /**\n * @notice Finalize the results of the auction\n * on the Market contract\n * It is assumed that this operation is performed once for each auction,\n * that after it is done the auction is over and the NFT has been\n * transferred to the auction winner.\n * @dev Called in PartyBid.sol in `finalize` at line 289\n */\n function finalize(uint256 auctionId) external;\n}" + }, + "@rarible/auction/contracts/wrapper/TokenToAuction.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/// @dev contract to add tokenToAuctionId functionality to auctionHouse\ncontract TokenToAuction {\n /// @dev mapping to store auction ids for token address + token id (only stores erc-721 tokens)\n mapping(address => mapping(uint256 => uint256)) private tokenToAuctionId;\n\n /// @dev returns auction id by token address and token id\n function getAuctionByToken(address _collection, uint tokenId) external view returns(uint) {\n return tokenToAuctionId[_collection][tokenId];\n }\n\n /// @dev sets auction id for token address and token id\n function setAuctionForToken(address token, uint tokenId, uint auctionId) internal {\n tokenToAuctionId[token][tokenId] = auctionId;\n }\n\n /// @dev deletes auctionId from tokenToAuctionId\n function deleteAuctionForToken(address token, uint tokenId) internal {\n delete tokenToAuctionId[token][tokenId];\n }\n \n uint256[50] private ______gap;\n}" + }, + "@rarible/auction/contracts/wrapper/Wrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\nimport \"./IMarketWrapper.sol\";\nimport \"../721/AuctionHouse721.sol\";\n\ncontract Wrapper is IMarketWrapper{\n\n AuctionHouse721 internal immutable auction;\n\n constructor(address _auction) {\n auction = AuctionHouse721(_auction);\n }\n\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external override view returns (bool){\n return auctionId == auction. getAuctionByToken(nftContract, tokenId);\n }\n\n function getMinimumBid(uint256 auctionId) external override view returns (uint256){\n return auction.getMinimalNextBid(auctionId);\n }\n\n function getCurrentHighestBidder(uint256 auctionId)\n external\n override\n view\n returns (address){\n return auction.getCurrentBuyer(auctionId);\n }\n\n function bid(uint256 auctionId, uint256 bidAmount) external override{\n (bool success, bytes memory returnData) =\n address(auction).call{value: bidAmount}(\n abi.encodeWithSignature(\"putBidWrapper(uint256)\", auctionId)\n );\n require(success, string(returnData));\n }\n\n function isFinalized(uint256 auctionId) external override view returns (bool){\n return !auction.checkAuctionExistence(auctionId);\n }\n\n function finalize(uint256 auctionId) external override{\n auction.finishAuction(auctionId);\n }\n}" + }, + "@rarible/custom-matchers/contracts/AssetMatcherCollection.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\n/*\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\n */\ncontract AssetMatcherCollection is IAssetMatcher {\n\n bytes constant EMPTY = \"\";\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\n if (\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\n ) {\n (address leftToken) = abi.decode(leftAssetType.data, (address));\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\n if (leftToken == rightToken) {\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\n }\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n}" + }, + "@rarible/exchange-interfaces/contracts/IAssetMatcher.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface IAssetMatcher {\n function matchAssets(\n LibAsset.AssetType memory leftAssetType,\n LibAsset.AssetType memory rightAssetType\n ) external view returns (LibAsset.AssetType memory);\n}\n" + }, + "@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface ICryptoPunksMarket {\n //to get address punk owner from mapping (uint => address) public punkIndexToAddress;\n function punkIndexToAddress(uint key) external returns (address);\n\n function buyPunk(uint punkIndex) payable external;\n\n function transferPunk(address to, uint punkIndex) external;\n\n function offerPunkForSaleToAddress(uint punkIndex, uint minSalePriceInWei, address toAddress) external;\n}" + }, + "@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\ninterface IERC20TransferProxy {\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\n}\n" + }, + "@rarible/exchange-interfaces/contracts/INftTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\ninterface INftTransferProxy {\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n}\n" + }, + "@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/exchange-interfaces/contracts/ITransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" + }, + "@rarible/exchange-v2/contracts/AssetMatcher.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\n require(newFill.leftValue > 0, \"nothing to fill\");\n }\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\n require(newFill.rightValue > 0, \"nothing to fill\");\n }\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibDirectTransfer { //LibDirectTransfers\n /*All buy parameters need for create buyOrder and sellOrder*/\n struct Purchase {\n address sellOrderMaker; //\n uint256 sellOrderNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 sellOrderPaymentAmount;\n address paymentToken;\n uint256 sellOrderSalt;\n uint sellOrderStart;\n uint sellOrderEnd;\n bytes4 sellOrderDataType;\n bytes sellOrderData;\n bytes sellOrderSignature;\n\n uint256 buyOrderPaymentAmount;\n uint256 buyOrderNftAmount;\n bytes buyOrderData;\n }\n\n /*All accept bid parameters need for create buyOrder and sellOrder*/\n struct AcceptBid {\n address bidMaker; //\n uint256 bidNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 bidPaymentAmount;\n address paymentToken;\n uint256 bidSalt;\n uint bidStart;\n uint bidEnd;\n bytes4 bidDataType;\n bytes bidData;\n bytes bidSignature;\n\n uint256 sellOrderPaymentAmount;\n uint256 sellOrderNftAmount;\n bytes sellOrderData;\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibFill.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n * @return tuple representing fill of both assets\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary LibMath {\n using SafeMathUpgradeable for uint;\n\n /// @dev Calculates partial value given a numerator and denominator rounded down.\n /// Reverts if rounding error is >= 0.1%\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return partialAmount value of target rounded down.\n function safeGetPartialAmountFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorFloor(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding down.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // The absolute rounding error is the difference between the rounded\n // value and the ideal value. The relative rounding error is the\n // absolute rounding error divided by the absolute value of the\n // ideal value. This is undefined when the ideal value is zero.\n //\n // The ideal value is `numerator * target / denominator`.\n // Let's call `numerator * target % denominator` the remainder.\n // The absolute error is `remainder / denominator`.\n //\n // When the ideal value is zero, we require the absolute error to\n // be zero. Fortunately, this is always the case. The ideal value is\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\n // remainder and absolute error are also zero.\n if (target == 0 || numerator == 0) {\n return false;\n }\n\n // Otherwise, we want the relative rounding error to be strictly\n // less than 0.1%.\n // The relative error is `remainder / (numerator * target)`.\n // We want the relative error less than 1 / 1000:\n // remainder / (numerator * target) < 1 / 1000\n // or equivalently:\n // 1000 * remainder < numerator * target\n // so we have a rounding error iff:\n // 1000 * remainder >= numerator * target\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n isError = remainder.mul(1000) >= numerator.mul(target);\n }\n\n function safeGetPartialAmountCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorCeil(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding up.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // See the comments in `isRoundingError`.\n if (target == 0 || numerator == 0) {\n // When either is zero, the ideal value and rounded value are zero\n // and there is no rounding error. (Although the relative error\n // is undefined.)\n return false;\n }\n // Compute remainder as before\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n remainder = denominator.sub(remainder) % denominator;\n isError = remainder.mul(1000) >= numerator.mul(target);\n return isError;\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nimport \"./LibMath.sol\";\nimport \"./LibOrderDataV3.sol\";\nimport \"./LibOrderDataV2.sol\";\nimport \"./LibOrderDataV1.sol\";\n\nlibrary LibOrder {\n using SafeMathUpgradeable for uint;\n\n bytes32 constant ORDER_TYPEHASH = keccak256(\n \"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\n\n struct Order {\n address maker;\n LibAsset.Asset makeAsset;\n address taker;\n LibAsset.Asset takeAsset;\n uint salt;\n uint start;\n uint end;\n bytes4 dataType;\n bytes data;\n }\n\n /**\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\n * @param order initial order to calculate remaining values for\n * @param fill current fill of the left order (0 if order is unfilled)\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\n */\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\n if (isMakeFill) {\n makeValue = order.makeAsset.value.sub(fill);\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\n } else {\n takeValue = order.takeAsset.value.sub(fill);\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \n } \n }\n\n function hashKey(Order memory order) internal pure returns (bytes32) {\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt\n ));\n } else {\n //order.data is in hash for V2, V3 and all new order\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt,\n order.data\n ));\n }\n }\n\n function hash(Order memory order) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ORDER_TYPEHASH,\n order.maker,\n LibAsset.hash(order.makeAsset),\n order.taker,\n LibAsset.hash(order.takeAsset),\n order.salt,\n order.start,\n order.end,\n order.dataType,\n keccak256(order.data)\n ));\n }\n\n function validateOrderTime(LibOrder.Order memory order) internal view {\n require(order.start == 0 || order.start < block.timestamp, \"Order start validation failed\");\n require(order.end == 0 || order.end > block.timestamp, \"Order end validation failed\");\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderData.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibOrderData {\n\n struct GenericOrderData {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n } \n\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\n if (order.dataType == LibOrderDataV1.V1) {\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n } else if (order.dataType == LibOrderDataV2.V2) {\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n dataOrder.isMakeFill = data.isMakeFill;\n } else if (order.dataType == 0xffffffff) {\n } else {\n revert(\"Unknown Order data type\");\n }\n if (dataOrder.payouts.length == 0) {\n dataOrder.payouts = payoutSet(order.maker);\n }\n }\n\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(orderAddress);\n payout[0].value = 10000;\n return payout;\n }\n\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee;\n\n if (dataFirst > 0 && dataSecond > 0){\n originFee = new LibPart.Part[](2);\n\n originFee[0] = uintToLibPart(dataFirst);\n originFee[1] = uintToLibPart(dataSecond);\n }\n\n if (dataFirst > 0 && dataSecond == 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataFirst);\n }\n\n if (dataFirst == 0 && dataSecond > 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataSecond);\n }\n\n return originFee;\n }\n\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payouts;\n\n if (data > 0) {\n payouts = new LibPart.Part[](1);\n payouts[0] = uintToLibPart(data);\n }\n\n return payouts;\n }\n\n /**\n @notice converts uint to LibPart.Part\n @param data address and value encoded in uint (first 12 bytes )\n @return result LibPart.Part \n */\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\n if (data > 0){\n result.account = payable(address(data));\n result.value = uint96(data >> 160);\n }\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n struct DataV1 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV2 {\n bytes4 constant public V2 = bytes4(keccak256(\"V2\"));\n\n struct DataV2 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\n/// @dev deprecated\nlibrary LibOrderDataV3 {\n bytes4 constant public V3_SELL = bytes4(keccak256(\"V3_SELL\"));\n bytes4 constant public V3_BUY = bytes4(keccak256(\"V3_BUY\"));\n\n struct DataV3_SELL {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n uint maxFeesBasePoint;\n bytes32 marketplaceMarker;\n }\n\n struct DataV3_BUY {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n bytes32 marketplaceMarker;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/OrderValidator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./libraries/LibOrder.sol\";\n\nimport \"@rarible/lib-signature/contracts/IERC1271.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\n\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\n using LibSignature for bytes32;\n using AddressUpgradeable for address;\n \n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function __OrderValidator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Exchange\", \"2\");\n }\n\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\n if (order.salt == 0) {\n if (order.maker != address(0)) {\n require(_msgSender() == order.maker, \"maker is not tx sender\");\n }\n } else {\n if (_msgSender() != order.maker) {\n bytes32 hash = LibOrder.hash(order);\n // if maker is contract checking ERC1271 signature\n if (order.maker.isContract()) {\n require(\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\n \"contract order signature verification error\"\n );\n } else {\n // if maker is not contract then checking ECDSA signature\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\n revert(\"order signature verification error\");\n } else {\n require (order.maker != address(0), \"no maker\");\n }\n }\n }\n }\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../../contracts/ExchangeV2.sol\";\n\ncontract RaribleTestHelper {\n function encode(LibOrderDataV1.DataV1 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV2(LibOrderDataV2.DataV2 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_SELL(LibOrderDataV3.DataV3_SELL memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_BUY(LibOrderDataV3.DataV3_BUY memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value)\n external\n pure\n returns (uint256)\n {\n return (uint256(value) << 160) + uint256(account);\n }\n\n function hashKey(LibOrder.Order calldata order)\n external\n pure\n returns (bytes32)\n {\n return LibOrder.hashKey(order);\n }\n\n function hashV2(\n address maker,\n LibAsset.Asset memory makeAsset,\n LibAsset.Asset memory takeAsset,\n uint256 salt,\n bytes memory data\n ) public pure returns (bytes32) {\n return\n keccak256(\n abi.encode(\n maker,\n LibAsset.hash(makeAsset.assetType),\n LibAsset.hash(takeAsset.assetType),\n salt,\n data\n )\n );\n }\n\n function encodeLazy721(LibERC721LazyMint.Mint721Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n function encodeLazy1155(LibERC1155LazyMint.Mint1155Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n\ninterface IBlur {\n enum Side { Buy, Sell }\n enum SignatureVersion { Single, Bulk }\n enum AssetType { ERC721, ERC1155 }\n\n struct Fee {\n uint16 rate;\n address payable recipient;\n }\n \n struct Order {\n address trader;\n Side side;\n address matchingPolicy;\n address collection;\n uint256 tokenId;\n uint256 amount;\n address paymentToken;\n uint256 price;\n uint256 listingTime;\n /* Order expiration timestamp - 0 for oracle cancellations. */\n uint256 expirationTime;\n Fee[] fees;\n uint256 salt;\n bytes extraParams;\n }\n\n struct Input {\n Order order;\n uint8 v;\n bytes32 r;\n bytes32 s;\n bytes extraSignature;\n SignatureVersion signatureVersion;\n uint256 blockNumber;\n }\n\n function execute(Input calldata sell, Input calldata buy)\n external\n payable;\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\n\ninterface IExchangeV2 {\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable;\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable;\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../libraries/LibLooksRare.sol\";\n\ninterface ILooksRare {\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\n\n /**\n * @notice This function allows a user to execute a taker bid (against a maker ask).\n * @param takerBid Taker bid struct\n * @param makerAsk Maker ask struct\n * @param makerSignature Maker signature\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\n * @param affiliate Affiliate address\n */\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ILSSVMRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\ninterface ILSSVMRouter {\n struct PairSwapSpecific {\n address pair;\n uint256[] nftIds;\n }\n\n /**\n @notice Swaps ETH into specific NFTs using multiple pairs.\n @param swapList The list of pairs to trade with and the IDs of the NFTs to buy from each.\n @param ethRecipient The address that will receive the unspent ETH input\n @param nftRecipient The address that will receive the NFT output\n @param deadline The Unix timestamp (in seconds) at/after which the swap will revert\n @return remainingValue The unspent ETH amount\n */\n function swapETHForSpecificNFTs(\n PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n )\n external\n payable\n returns (uint256 remainingValue);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"../libraries/LibSeaPort.sol\";\n\ninterface ISeaPort {\n function fulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder calldata advancedOrder,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n bytes32 fulfillerConduitKey,\n address recipient\n ) external payable returns (bool fulfilled);\n\n function fulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\n bytes32 fulfillerConduitKey,\n address recipient,\n uint256 maximumFulfilled\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\n\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\n external\n payable\n returns (bool fulfilled);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface IWyvernExchange {\n function atomicMatch_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n\n enum Side {\n Buy,\n Sell\n }\n\n enum SaleKind {\n FixedPrice,\n DutchAuction\n }\n\n function calculateFinalPrice(\n Side side,\n SaleKind saleKind,\n uint256 basePrice,\n uint256 extra,\n uint256 listingTime,\n uint256 expirationTime\n ) external view returns (uint256);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface Ix2y2 {\n\n struct OrderItem {\n uint256 price;\n bytes data;\n }\n\n struct Pair721 {\n address token;\n uint256 tokenId;\n }\n\n struct Pair1155 {\n address token;\n uint256 tokenId;\n uint256 amount;\n }\n\n struct Order {\n uint256 salt;\n address user;\n uint256 network;\n uint256 intent;\n uint256 delegateType;\n uint256 deadline;\n address currency;\n bytes dataMask;\n OrderItem[] items;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n uint8 signVersion;\n }\n\n struct Fee {\n uint256 percentage;\n address to;\n }\n\n struct SettleDetail {\n Op op;\n uint256 orderIdx;\n uint256 itemIdx;\n uint256 price;\n bytes32 itemHash;\n address executionDelegate;\n bytes dataReplacement;\n uint256 bidIncentivePct;\n uint256 aucMinIncrementPct;\n uint256 aucIncDurationSecs;\n Fee[] fees;\n }\n\n struct SettleShared {\n uint256 salt;\n uint256 deadline;\n uint256 amountToEth;\n uint256 amountToWeth;\n address user;\n bool canFail;\n }\n\n struct RunInput {\n Order[] orders;\n SettleDetail[] details;\n SettleShared shared;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n }\n\n enum Op {\n INVALID,\n // off-chain\n COMPLETE_SELL_OFFER,\n COMPLETE_BUY_OFFER,\n CANCEL_OFFER,\n // auction\n BID,\n COMPLETE_AUCTION,\n REFUND_AUCTION,\n REFUND_AUCTION_STUCK_ITEM\n }\n\n function run(RunInput memory input) external payable;\n}" + }, + "@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\nabstract contract IsPausable is Ownable {\n bool public paused;\n\n event Paused(bool paused);\n\n function pause(bool _paused) external onlyOwner {\n paused = _paused;\n emit Paused(_paused);\n }\n\n function requireNotPaused() internal view {\n require (!paused, \"the contract is paused\");\n }\n\n}\n" + }, + "@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibLooksRare {\n struct MakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address signer; // signer of the maker order\n address collection; // collection address\n uint256 price; // price (used as )\n uint256 tokenId; // id of the token\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\n address currency; // currency (e.g., WETH)\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\n uint256 startTime; // startTime in timestamp\n uint256 endTime; // endTime in timestamp\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // additional parameters\n uint8 v; // v: parameter (27 or 28)\n bytes32 r; // r: parameter\n bytes32 s; // s: parameter\n }\n\n struct TakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address taker; // msg.sender\n uint256 price; // final price for the purchase\n uint256 tokenId;\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // other params (e.g., tokenId)\n }\n\n /**\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\n */\n enum CollectionType {\n ERC721,\n ERC1155\n }\n\n /**\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\n */\n enum QuoteType {\n Bid,\n Ask\n }\n /**\n * 1. Maker struct\n */\n\n /**\n * @notice Maker is the struct for a maker order.\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\n * @param globalNonce Global user order nonce for maker orders\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\n * @param strategyId Strategy id\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\n * @param collection Collection address\n * @param currency Currency address (@dev address(0) = ETH)\n * @param signer Signer address\n * @param startTime Start timestamp\n * @param endTime End timestamp\n * @param price Minimum price for maker ask, maximum price for maker bid\n * @param itemIds Array of itemIds\n * @param amounts Array of amounts\n * @param additionalParameters Extra data specific for the order\n */\n struct Maker {\n QuoteType quoteType;\n uint256 globalNonce;\n uint256 subsetNonce;\n uint256 orderNonce;\n uint256 strategyId;\n CollectionType collectionType;\n address collection;\n address currency;\n address signer;\n uint256 startTime;\n uint256 endTime;\n uint256 price;\n uint256[] itemIds;\n uint256[] amounts;\n bytes additionalParameters;\n }\n\n /**\n * 2. Taker struct\n */\n\n /**\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\n * @param additionalParameters Extra data specific for the order\n */\n struct Taker {\n address recipient;\n bytes additionalParameters;\n }\n\n /**\n * 3. Merkle tree struct\n */\n\n enum MerkleTreeNodePosition {\n Left,\n Right\n }\n\n /**\n * @notice MerkleTreeNode is a MerkleTree's node.\n * @param value It can be an order hash or a proof\n * @param position The node's position in its branch.\n * It can be left or right or none\n * (before the tree is sorted).\n */\n struct MerkleTreeNode {\n bytes32 value;\n MerkleTreeNodePosition position;\n }\n\n /**\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\n * @dev A Merkle tree can be computed with order hashes.\n * It can contain order hashes from both maker bid and maker ask structs.\n * @param root Merkle root\n * @param proof Array containing the merkle proof\n */\n struct MerkleTree {\n bytes32 root;\n MerkleTreeNode[] proof;\n }\n}\n" + }, + "@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" + }, + "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n address public immutable seaPort_1_6;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,//0\n WyvernExchange,//1\n SeaPort_1_1,//2\n X2Y2,//3\n LooksRareOrders,//4\n SudoSwap,//5\n SeaPort_1_4,//6\n LooksRareV2,//7\n Blur,//8\n SeaPort_1_5,//9\n SeaPort_1_6//10\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[11] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n //address _seaPort_1_6, 10\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n seaPort_1_6 = marketplaces[10];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" + }, + "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" + }, + "@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"./LibERC1155LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC1155LazyMint is IERC1155Upgradeable {\n\n event Supply(\n uint256 tokenId,\n uint256 value\n );\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC1155LazyMint.Mint1155Data memory data,\n address to,\n uint256 _amount\n ) external;\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) external;\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC1155LazyMint {\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC1155_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\n\n struct Mint1155Data {\n uint tokenId;\n string tokenURI;\n uint supply;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n data.supply,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"./LibERC721LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC721LazyMint is IERC721Upgradeable {\n\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external;\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external;\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC721LazyMint {\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC721_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\n\n struct Mint721Data {\n uint tokenId;\n string tokenURI;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n\n}\n" + }, + "@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/erc-721/IERC721LazyMint.sol\";\n\ncontract ERC721LazyMintTest is IERC721LazyMint, ERC721Upgradeable {\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external override {\n _mint(to, data.tokenId);\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external override {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n this.mintAndTransfer(data, to);\n }\n }\n\n function encode(LibERC721LazyMint.Mint721Data memory data)\n external\n view\n returns (bytes memory)\n {\n return abi.encode(address(this), data);\n }\n}\n" + }, + "@rarible/lib-asset/contracts/LibAsset.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibAsset {\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\"ETH\"));\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\"ERC20\"));\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\"ERC721\"));\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\"ERC1155\"));\n bytes4 constant public COLLECTION = bytes4(keccak256(\"COLLECTION\"));\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\"CRYPTO_PUNKS\"));\n\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\n \"AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes32 constant ASSET_TYPEHASH = keccak256(\n \"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n struct AssetType {\n bytes4 assetClass;\n bytes data;\n }\n\n struct Asset {\n AssetType assetType;\n uint value;\n }\n\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPE_TYPEHASH,\n assetType.assetClass,\n keccak256(assetType.data)\n ));\n }\n\n function hash(Asset memory asset) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPEHASH,\n hash(asset.assetType),\n asset.value\n ));\n }\n\n}\n" + }, + "@rarible/lib-bp/contracts/BpLibrary.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary BpLibrary {\n using SafeMathUpgradeable for uint;\n\n function bp(uint value, uint bpValue) internal pure returns (uint) {\n return value.mul(bpValue).div(10000);\n }\n}\n" + }, + "@rarible/lib-part/contracts/LibPart.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibPart {\n bytes32 public constant TYPE_HASH = keccak256(\"Part(address account,uint96 value)\");\n\n struct Part {\n address payable account;\n uint96 value;\n }\n\n function hash(Part memory part) internal pure returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\n }\n}\n" + }, + "@rarible/lib-signature/contracts/ERC1271.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nabstract contract ERC1271 {\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\n\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\n\n /**\n * @dev Function must be implemented by deriving contract\n * @param _hash Arbitrary length data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\n *\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\n\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\n }\n}" + }, + "@rarible/lib-signature/contracts/IERC1271.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ninterface IERC1271 {\n\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param _hash Hash of the data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n *\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\n}" + }, + "@rarible/lib-signature/contracts/LibSignature.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nlibrary LibSignature {\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature)\n internal\n pure\n returns (address)\n {\n // Check the signature length\n if (signature.length != 65) {\n revert(\"ECDSA: invalid signature length\");\n }\n\n // Divide the signature in r, s and v variables\n bytes32 r;\n bytes32 s;\n uint8 v;\n\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n // solhint-disable-next-line no-inline-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n\n return recover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n require(\n uint256(s) <=\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\n \"ECDSA: invalid signature 's' value\"\n );\n\n // If the signature is valid (and not malleable), return the signer address\n // v > 30 is a special case, we need to adjust hash with \"\\x19Ethereum Signed Message:\\n32\"\n // and v = v - 4\n address signer;\n if (v > 30) {\n require(\n v - 4 == 27 || v - 4 == 28,\n \"ECDSA: invalid signature 'v' value\"\n );\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\n } else {\n require(v == 27 || v == 28, \"ECDSA: invalid signature 'v' value\");\n signer = ecrecover(hash, v, r, s);\n }\n\n require(signer != address(0), \"ECDSA: invalid signature\");\n\n return signer;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * replicates the behavior of the\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n * JSON-RPC method.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash)\n internal\n pure\n returns (bytes32)\n {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return\n keccak256(\n abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash)\n );\n }\n}\n" + }, + "@rarible/meta-tx/contracts/EIP712MetaTransaction.sol": { + "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" + }, + "@rarible/role-operator/contracts/OperatorRole.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocksV2.sol\";\n\ncontract RoyaltiesProviderArtBlocksV2 is IRoyaltiesProvider {\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n RoyaltyArtBlocksV2 artBlocksV2 = RoyaltyArtBlocksV2(token);\n\n (address payable[] memory recipients, uint256[] memory bps) = artBlocksV2.getRoyalties(tokenId);\n \n uint256 len = recipients.length;\n\n LibPart.Part[] memory result = new LibPart.Part[](len);\n \n for (uint i = 0; i < len; i++) {\n result[i].account = recipients[i];\n result[i].value = uint96(bps[i]);\n }\n\n return result;\n }\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyV2Legacy.sol\";\n\ncontract RoyaltiesProviderV2Legacy is IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n return RoyaltyV2Legacy(token).getRoyalties(tokenId);\n }\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocks.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocks {\n \n function getRoyaltyData(uint256 _tokenId) external virtual view returns (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID);\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocksV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocksV2 {\n \n /**\n * @notice Gets royalty Basis Points (BPS) for token ID `_tokenId`.\n * This conforms to the IManifold interface designated in the Royalty\n * Registry's RoyaltyEngineV1.sol contract.\n * ref: https://github.com/manifoldxyz/royalty-registry-solidity\n * @param _tokenId Token ID to be queried.\n * @return recipients Array of royalty payment recipients\n * @return bps Array of Basis Points (BPS) allocated to each recipient,\n * aligned by index.\n * @dev reverts if invalid _tokenId\n * @dev only returns recipients that have a non-zero BPS allocation\n */\n function getRoyalties(uint256 _tokenId) \n external \n view\n virtual\n returns (\n address payable[] memory recipients, \n uint256[] memory bps\n );\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyV2Legacy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" + }, + "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" + }, + "@rarible/royalties/contracts/IERC2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n///\n/// @dev Interface for the NFT Royalty Standard\n///\n//interface IERC2981 is IERC165 {\ninterface IERC2981 {\n /// ERC165 bytes to add to interface array - set in parent contract\n /// implementing this standard\n ///\n /// bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n /// _registerInterface(_INTERFACE_ID_ERC2981);\n\n /// @notice Called with the sale price to determine how much royalty\n // is owed and to whom.\n /// @param _tokenId - the NFT asset queried for royalty information\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\n /// @return receiver - address of who should be sent the royalty payment\n /// @return royaltyAmount - the royalty payment amount for _salePrice\n function royaltyInfo(\n uint256 _tokenId,\n uint256 _salePrice\n ) external view returns (\n address receiver,\n uint256 royaltyAmount\n );\n}" + }, + "@rarible/royalties/contracts/impl/AbstractRoyalties.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract AbstractRoyalties {\n mapping (uint256 => LibPart.Part[]) internal royalties;\n\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\n uint256 totalValue;\n for (uint i = 0; i < _royalties.length; ++i) {\n require(_royalties[i].account != address(0x0), \"Recipient should be present\");\n require(_royalties[i].value != 0, \"Royalty value should be positive\");\n totalValue += _royalties[i].value;\n royalties[id].push(_royalties[i]);\n }\n require(totalValue < 10000, \"Royalty total value should be < 10000\");\n _onRoyaltiesSet(id, _royalties);\n }\n\n function _updateAccount(uint256 _id, address _from, address _to) internal {\n uint length = royalties[_id].length;\n for(uint i = 0; i < length; ++i) {\n if (royalties[_id][i].account == _from) {\n royalties[_id][i].account = payable(address(uint160(_to)));\n }\n }\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\n}\n" + }, + "@rarible/royalties/contracts/impl/RoyaltiesV1Impl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV1.sol\";\n\ncontract RoyaltiesV1Impl is AbstractRoyalties, RoyaltiesV1 {\n\n function getFeeRecipients(uint256 id) public override view returns (address payable[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n address payable[] memory result = new address payable[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = address(uint160(_royalties[i].account));\n }\n return result;\n }\n\n function getFeeBps(uint256 id) public override view returns (uint[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n uint[] memory result = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = _royalties[i].value;\n }\n return result;\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n address[] memory recipients = new address[](_royalties.length);\n uint[] memory bps = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n recipients[i] = _royalties[i].account;\n bps[i] = _royalties[i].value;\n }\n emit SecondarySaleFees(id, recipients, bps);\n }\n}\n" + }, + "@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV2.sol\";\nimport \"../IERC2981.sol\";\nimport \"../LibRoyalties2981.sol\";\n\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\n\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\n return royalties[id];\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n emit RoyaltiesSet(id, _royalties);\n }\n\n /*\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\n */\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\n if (royalties[id].length == 0) {\n receiver = address(0);\n royaltyAmount = 0;\n return(receiver, royaltyAmount);\n }\n LibPart.Part[] memory _royalties = royalties[id];\n receiver = _royalties[0].account;\n uint percent;\n for (uint i = 0; i < _royalties.length; ++i) {\n percent += _royalties[i].value;\n }\n //don`t need require(percent < 10000, \"Token royalty > 100%\"); here, because check later in calculateRoyalties\n royaltyAmount = percent * _salePrice / 10000;\n }\n}\n" + }, + "@rarible/royalties/contracts/LibRoyalties2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibRoyalties2981 {\n /*\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\n uint96 constant _WEIGHT_VALUE = 1000000;\n\n /*Method for converting amount to percent and forming LibPart*/\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\n LibPart.Part[] memory result;\n if (amount == 0) {\n return result;\n }\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\n require(percent < 10000, \"Royalties 2981 exceeds 100%\");\n result = new LibPart.Part[](1);\n result[0].account = payable(to);\n result[0].value = uint96(percent);\n return result;\n }\n}\n" + }, + "@rarible/royalties/contracts/LibRoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV1 {\n /*\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\n *\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\n */\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\n}\n" + }, + "@rarible/royalties/contracts/LibRoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV2 {\n /*\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\n}\n" + }, + "@rarible/royalties/contracts/RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\ninterface RoyaltiesV1 {\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\n\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\n function getFeeBps(uint256 id) external view returns (uint[] memory);\n}\n" + }, + "@rarible/royalties/contracts/RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltiesV2 {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC1155RoyaltiesV2 is RoyaltiesV2Impl, ERC1155Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, uint amount, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId, amount, \"\");\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV1Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV1.sol\";\n\ncontract TestERC721RoyaltiesV1 is RoyaltiesV1Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV1._INTERFACE_ID_FEES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC721RoyaltiesV2 is RoyaltiesV2Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/test/contracts/TestERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\n\ncontract TestERC1155 is ERC1155, Pausable {\n constructor() ERC1155(\"uri\"){\n\n }\n\n function mint(address to, uint tokenId, uint amount) external {\n _mint(to, tokenId, amount, \"\");\n }\n\n function batchSafeTransferFrom(\n address[] memory froms,\n address[] memory tos,\n uint256[] memory ids,\n uint256[] memory amounts\n ) external {\n require(froms.length == tos.length, \"wrong length 1\");\n require(tos.length == ids.length, \"wrong length 2\");\n require(ids.length == amounts.length, \"wrong length 3\");\n\n for (uint i = 0; i < froms.length; i ++) {\n safeTransferFrom(froms[i], tos[i], ids[i], amounts[i], \"\");\n }\n }\n\n function emitPauseEvent(bool paused) external {\n if (paused) {\n emit Paused(address(0));\n } else {\n emit Unpaused(address(0));\n }\n }\n}\n" + }, + "@rarible/test/contracts/TestERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\n\ncontract TestERC20 is ERC20Upgradeable {\n function mint(address to, uint amount) external {\n _mint(to, amount);\n }\n\n function init() external {\n __ERC20_init(\"TestERC20\", \"TE20\");\n }\n}\n" + }, + "@rarible/test/contracts/TestERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\n\ncontract TestERC721 is ERC721Upgradeable {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" + }, + "@rarible/tokens/contracts/access/MinterAccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" + }, + "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n\n uint256[50] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\n\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\n using StringsUpgradeable for uint256;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _clearMetadata(uint256 tokenId) internal override virtual {\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n uint256[50] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721/ERC721Base.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeable.sol\";\nimport \"./ERC721DefaultApproval.sol\";\nimport \"./ERC721Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721Base is OwnableUpgradeable, ERC721DefaultApproval, ERC721BurnableUpgradeable, ERC721Lazy, HasContractURI {\n\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721Upgradeable, ERC721DefaultApproval) view returns (bool) {\n return ERC721DefaultApproval._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApproval, ERC721Upgradeable, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApproval.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721Lazy) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function _mint(address to, uint256 tokenId) internal override(ERC721Lazy, ERC721Upgradeable) {\n super._mint(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721BurnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721Upgradeable.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeable is Initializable, ContextUpgradeable, ERC721Upgradeable {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721DefaultApproval.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721Upgradeable.sol\";\n\nabstract contract ERC721DefaultApproval is ERC721Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Lazy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\n\nabstract contract ERC721Lazy is IERC721LazyMint, ERC721Upgradeable, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _mint(address to, uint256 tokenId) internal virtual override {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burned(tokenId), \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Rarible.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Base.sol\";\n\ncontract ERC721Rarible is ERC721Base {\n\n event CreateERC721Rarible(address owner, string name, string symbol);\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external initializer {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/HasContractURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/IsPrivateCollection.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" + }, + "@rarible/tokens/contracts/LibURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibURI {\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\n function checkPrefix(string memory base, string memory _tokenURI)\n internal\n pure\n returns (string memory)\n {\n bytes memory whatBytes = bytes(base);\n bytes memory whereBytes = bytes(_tokenURI);\n\n if (whatBytes.length > whereBytes.length) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n\n for (uint256 j = 0; j < whatBytes.length; j++) {\n if (whereBytes[j] != whatBytes[j]) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n }\n\n return _tokenURI;\n }\n}\n" + }, + "@rarible/tokens/contracts/Mint721Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\n\ncontract Mint721Validator is ERC1271Validator {\n function __Mint721Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint721\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nabstract contract ITransferExecutor {\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal virtual;\n}\n" + }, + "@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../lib/LibDeal.sol\";\nimport \"./ITransferExecutor.sol\";\n\nabstract contract ITransferManager is ITransferExecutor {\n\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\n}" + }, + "@rarible/transfer-manager/contracts/lib/LibDeal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\nimport \"./LibFeeSide.sol\";\n\nlibrary LibDeal {\n struct DealSide {\n LibAsset.Asset asset;\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n address proxy;\n address from;\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/lib/LibFeeSide.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibFeeSide {\n\n enum FeeSide {NONE, LEFT, RIGHT}\n\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n return FeeSide.NONE;\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/lib/LibTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibTransfer {\n function transferEth(address to, uint value) internal {\n (bool success,) = to.call{ value: value }(\"\");\n require(success, \"transfer failed\");\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/RaribleTransferManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n ProtocolFeeData memory _protocolFee,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param _protocolFee protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n ProtocolFeeData memory _protocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = _protocolFee.buyerAmount;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" + }, + "@rarible/transfer-manager/contracts/TransferExecutor.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" + }, + "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract PunkTransferProxy is OperatorRole, ITransferProxy {\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, uint punkIndex) = abi.decode(asset.assetType.data, (address, uint));\n ICryptoPunksMarket punkToken = ICryptoPunksMarket(token);\n //check punk from real owner\n require(punkToken.punkIndexToAddress(punkIndex) == from, \"Seller not punk owner\");\n //buy punk to proxy, now proxy is owner\n punkToken.buyPunk(punkIndex);\n //Transfer ownership of a punk to buyer\n punkToken.transferPunk(to, punkIndex);\n }\n}" + }, + "src/AssetMatchersImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { AssetMatcherCollection } from \"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\";\n" + }, + "src/Auction.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {AuctionHouse1155} from \"@rarible/auction/contracts/1155/AuctionHouse1155.sol\";\nimport {AuctionHouse721} from \"@rarible/auction/contracts/721/AuctionHouse721.sol\";\nimport {Wrapper} from \"@rarible/auction/contracts/wrapper/Wrapper.sol\";" + }, + "src/ExchangeV2Import.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ExchangeV2} from \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {ExchangeMetaV2} from \"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\";" + }, + "src/ExchangeWrapperImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" + }, + "src/RaribleExchangeWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {RaribleExchangeWrapper} from \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" + }, + "src/RoyaltiesRegistryImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {RoyaltiesProviderV2Legacy} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol\";\nimport {RoyaltiesProviderArtBlocks} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol\";\nimport {RoyaltiesProviderArtBlocksV2} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol\";\n" + }, + "src/TokensImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\n//tokens 721\nimport {ERC721Rarible} from \"@rarible/tokens/contracts/erc-721/ERC721Rarible.sol\";\nimport {ERC721RaribleMinimal} from \"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport {ERC721RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\";\n\n//tokens 1155\nimport {ERC1155Rarible} from \"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\";\nimport {ERC1155RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\";\n\n//meta tokens\nimport {ERC721RaribleMeta} from \"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\";\nimport {ERC1155RaribleMeta} from \"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\";\n\n//beacons\nimport {ERC1155RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\";\nimport {ERC721RaribleMinimalBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\";\nimport {ERC721RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol\";\nimport {ERC1155RaribleBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\";\nimport {ERC721RaribleMinimalBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\";\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" + }, + "src/TransferProxiesImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ERC721LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\";\nimport {ERC1155LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\nimport {PunkTransferProxy} from \"@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol\";\n" + }, + "src/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/proxy/ProxyAdmin.sol\";\n" + }, + "test/contracts/ERC721LazyMintTest.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol\";\n" + }, + "test/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" + }, + "test/contracts/TestERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155 } from \"@rarible/test/contracts/TestERC1155.sol\";\n\n" + }, + "test/contracts/TestERC1155RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol\";\n\n" + }, + "test/contracts/TestERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" + }, + "test/contracts/TestERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721 } from \"@rarible/test/contracts/TestERC721.sol\";\n" + }, + "test/contracts/TestERC721RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV1 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol\";\n" + }, + "test/contracts/TestERC721RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol\";\n\n" + }, + "test/contracts/WrapperHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport { WrapperHelper } from \"@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol\";" + }, + "test/exchange/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_amoy_testnet/RaribleExchangeWrapper.json b/projects/hardhat-deploy/deployments/polygon_amoy_testnet/RaribleExchangeWrapper.json index 6a4f396ed..367068107 100644 --- a/projects/hardhat-deploy/deployments/polygon_amoy_testnet/RaribleExchangeWrapper.json +++ b/projects/hardhat-deploy/deployments/polygon_amoy_testnet/RaribleExchangeWrapper.json @@ -1,12 +1,12 @@ { - "address": "0x2FCE8435F0455eDc702199741411dbcD1B7606cA", + "address": "0x7d47126a2600E22eab9eD6CF0e515678727779A6", "abi": [ { "inputs": [ { - "internalType": "address[10]", + "internalType": "address[11]", "name": "marketplaces", - "type": "address[10]" + "type": "address[11]" }, { "internalType": "address", @@ -379,6 +379,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "seaPort_1_6", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -513,49 +526,49 @@ "type": "receive" } ], - "transactionHash": "0xa6099b23f1589f9fa45eaecbc51935697771fc4cf0f4acdf07368eec1cf2a4a1", + "transactionHash": "0x1a9f7be63ccdfb28723c6d01c65bc4263a553d570c9735b2370dec1635813840", "receipt": { "to": null, "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x2FCE8435F0455eDc702199741411dbcD1B7606cA", - "transactionIndex": 2, - "gasUsed": "4082947", - "logsBloom": "0x00000000000000000000000000000000000000002000000000800000000000000000000000000000000000000000000000008000000000000000000040000000000000000000000000400000000000c80001000000000080000100000000000000000000020000100000000000000800000000000000000080000000000000500000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000080000000000000000000000100000000020000000000000000000000000000000000000000000000000000000000000100000", - "blockHash": "0xaf3d4e285cc28541b5074c8aeb9aaf38395ed4a35929e2921f2e69185177e6db", - "transactionHash": "0xa6099b23f1589f9fa45eaecbc51935697771fc4cf0f4acdf07368eec1cf2a4a1", + "contractAddress": "0x7d47126a2600E22eab9eD6CF0e515678727779A6", + "transactionIndex": 21, + "gasUsed": "4210107", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000880001000000000000000100000000000000000000020000000000000000000800000000000000000080000000000000500000000000200000000000000000000000000000000000000000010000400002200000000000000000000000000000000000000000000000000000002000004000000000000000000001000000080000000000000000000000100000000022000000000000000000000000000000000000000000000000000000000000100000", + "blockHash": "0x2823f041d95ff2c3c0c553680c67475381a7484fc29db1a63dbd29059094b00e", + "transactionHash": "0x1a9f7be63ccdfb28723c6d01c65bc4263a553d570c9735b2370dec1635813840", "logs": [ { - "transactionIndex": 2, - "blockNumber": 5193841, - "transactionHash": "0xa6099b23f1589f9fa45eaecbc51935697771fc4cf0f4acdf07368eec1cf2a4a1", - "address": "0x2FCE8435F0455eDc702199741411dbcD1B7606cA", + "transactionIndex": 21, + "blockNumber": 6040352, + "transactionHash": "0x1a9f7be63ccdfb28723c6d01c65bc4263a553d570c9735b2370dec1635813840", + "address": "0x7d47126a2600E22eab9eD6CF0e515678727779A6", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" ], "data": "0x", - "logIndex": 6, - "blockHash": "0xaf3d4e285cc28541b5074c8aeb9aaf38395ed4a35929e2921f2e69185177e6db" + "logIndex": 58, + "blockHash": "0x2823f041d95ff2c3c0c553680c67475381a7484fc29db1a63dbd29059094b00e" }, { - "transactionIndex": 2, - "blockNumber": 5193841, - "transactionHash": "0xa6099b23f1589f9fa45eaecbc51935697771fc4cf0f4acdf07368eec1cf2a4a1", + "transactionIndex": 21, + "blockNumber": 6040352, + "transactionHash": "0x1a9f7be63ccdfb28723c6d01c65bc4263a553d570c9735b2370dec1635813840", "address": "0x0000000000000000000000000000000000001010", "topics": [ "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", "0x0000000000000000000000000000000000000000000000000000000000001010", "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", - "0x0000000000000000000000004631753190f2f5a15a7ba172bbac102b7d95fa22" + "0x00000000000000000000000022b64229c41429a023549fdab3385893b579327a" ], - "data": "0x000000000000000000000000000000000000000000000000029a495a7683669e00000000000000000000000000000000000000000000000003a2d59b9d10b27a00000000000000000000000000000000000000000000000bd8772597726af75100000000000000000000000000000000000000000000000001088c41268d4bdc00000000000000000000000000000000000000000000000bdb116ef1e8ee5def", - "logIndex": 7, - "blockHash": "0xaf3d4e285cc28541b5074c8aeb9aaf38395ed4a35929e2921f2e69185177e6db" + "data": "0x0000000000000000000000000000000000000000000000000062b7dcb68d3f8800000000000000000000000000000000000000000000000002103c953962ccb900000000000000000000000000000000000000000000003c2c843e0fa28ad19700000000000000000000000000000000000000000000000001ad84b882d58d3100000000000000000000000000000000000000000000003c2ce6f5ec5918111f", + "logIndex": 59, + "blockHash": "0x2823f041d95ff2c3c0c553680c67475381a7484fc29db1a63dbd29059094b00e" } ], - "blockNumber": 5193841, - "cumulativeGasUsed": "4230587", + "blockNumber": 6040352, + "cumulativeGasUsed": "18598941", "status": 1, "byzantium": true }, @@ -570,18 +583,19 @@ "0x00000000000001ad428e4906aE43D8F9852d0dD6", "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000", - "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC" + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", + "0x0000000000000068F116a894984e2DB1123eB395" ], "0x0000000000000000000000000000000000000000", [ "0xB8863180CAC2d0Ab665e5968C0De25298A1D8CEe" ] ], - "numDeployments": 1, - "solcInputHash": "7238d10cc6d9b157a0ebb0f70bc36233", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[10]\",\"name\":\"marketplaces\",\"type\":\"address[10]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":\"RaribleExchangeWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165 is IERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n constructor () internal {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Receiver.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\ncontract ERC1155Holder is ERC1155Receiver {\\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155BatchReceived.selector;\\n }\\n}\\n\",\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155Receiver.sol\\\";\\nimport \\\"../../introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\\n constructor() internal {\\n _registerInterface(\\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n}\\n\",\"keccak256\":\"0x57a0e246fb1c8f9cccf91c508eafe474e40260a31de3a39019ba8312cfdf9b2d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155Receiver is IERC165 {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC721Receiver.sol\\\";\\n\\n /**\\n * @dev Implementation of the {IERC721Receiver} interface.\\n *\\n * Accepts all token transfers. \\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\\n */\\ncontract ERC721Holder is IERC721Receiver {\\n\\n /**\\n * @dev See {IERC721Receiver-onERC721Received}.\\n *\\n * Always returns `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n}\\n\",\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3a89b0a6ff66280e8e48f9f2c862d5c0e8ab23ee306ae5b204cd588931661a93\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n}\\n\",\"keccak256\":\"0xa9d02b9e22ffb9d25f412979951822d56b05d857de1f47ce82ad7b4a8d4601f6\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\\\";\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport \\\"./interfaces/IWyvernExchange.sol\\\";\\nimport \\\"./interfaces/IExchangeV2.sol\\\";\\nimport \\\"./interfaces/ISeaPort.sol\\\";\\nimport \\\"./interfaces/Ix2y2.sol\\\";\\nimport \\\"./interfaces/ILooksRare.sol\\\";\\nimport \\\"./interfaces/IBlur.sol\\\";\\n\\nimport \\\"./libraries/IsPausable.sol\\\";\\n\\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\\n using LibTransfer for address;\\n using BpLibrary for uint;\\n using SafeMath for uint;\\n\\n //marketplaces\\n address public immutable wyvernExchange;\\n address public immutable exchangeV2;\\n address public immutable seaPort_1_1;\\n address public immutable x2y2;\\n address public immutable looksRare;\\n address public immutable sudoswap;\\n address public immutable seaPort_1_4;\\n address public immutable looksRareV2;\\n address public immutable blur;\\n address public immutable seaPort_1_5;\\n\\n //currencties\\n address public immutable weth;\\n\\n //constants\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n event Execution(bool result);\\n\\n enum Markets {\\n ExchangeV2,\\n WyvernExchange,\\n SeaPort_1_1,\\n X2Y2,\\n LooksRareOrders,\\n SudoSwap,\\n SeaPort_1_4,\\n LooksRareV2,\\n Blur,\\n SeaPort_1_5\\n }\\n\\n enum AdditionalDataTypes {\\n NoAdditionalData,\\n RoyaltiesAdditionalData\\n }\\n\\n enum Currencies {\\n ETH,\\n WETH\\n }\\n\\n /**\\n @notice struct for the purchase data\\n @param marketId - market key from Markets enum (what market to use)\\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\\n bytes (27,28) used for dataType\\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\\n @param data - data for market call\\n */\\n struct PurchaseDetails {\\n Markets marketId;\\n uint256 amount;\\n uint fees;\\n bytes data;\\n }\\n\\n /**\\n @notice struct for the data with additional Ddta\\n @param data - data for market call\\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\\n */\\n struct AdditionalData {\\n bytes data;\\n uint[] additionalRoyalties;\\n }\\n\\n constructor(\\n address[10] memory marketplaces,\\n //address _wyvernExchange, 0\\n //address _exchangeV2, 1\\n //address _seaPort_1_1, 2\\n //address _x2y2, 3\\n //address _looksRare, 4\\n //address _sudoswap, 5\\n //address _seaPort_1_4, 6\\n //address _looksRareV2, 7\\n //address _blur, 8\\n //address _seaPort_1_5, 9\\n address _weth,\\n address[] memory transferProxies\\n ) {\\n wyvernExchange = marketplaces[0];\\n exchangeV2 = marketplaces[1];\\n seaPort_1_1 = marketplaces[2];\\n x2y2 = marketplaces[3];\\n looksRare = marketplaces[4];\\n sudoswap = marketplaces[5];\\n seaPort_1_4 = marketplaces[6];\\n looksRareV2 = marketplaces[7];\\n blur = marketplaces[8];\\n seaPort_1_5 = marketplaces[9];\\n\\n weth = _weth;\\n\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n if (_weth != address(0)){\\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n }\\n\\n /**\\n @notice executes a single purchase\\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n */\\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\\n requireNotPaused();\\n \\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\\n \\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n Currencies currency = getCurrency(purchaseDetails.fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n emit Execution(success);\\n \\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes an array of purchases\\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\\n */\\n \\n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\\n requireNotPaused();\\n\\n uint sumFirstFeesETH = 0;\\n uint sumSecondFeesETH = 0;\\n uint sumFirstFeesWETH = 0;\\n uint sumSecondFeesWETH = 0;\\n bool result = false;\\n\\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = 0;\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\\n }\\n\\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n Currencies currency = getCurrency(purchaseDetails[i].fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n result = result || success;\\n emit Execution(success);\\n }\\n\\n require(result, \\\"no successful executions\\\");\\n\\n //pay fees in ETH \\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\\n\\n //pay fees in WETH\\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\\n\\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes one purchase in ETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n uint paymentAmount = purchaseDetails.amount;\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase wyvernExchange failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\\n\\n if (allowFail) {\\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n Ix2y2(x2y2).run{value : paymentAmount}(input);\\n }\\n\\n //for every element in input.details[] getting\\n // order = input.details[i].orderIdx\\n // and from that order getting item = input.details[i].itemId\\n for (uint i = 0; i < input.details.length; ++i) {\\n uint orderId = input.details[i].orderIdx;\\n uint itemId = input.details[i].itemIdx;\\n bytes memory data = input.orders[orderId].items[itemId].data;\\n {\\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\\n }\\n }\\n\\n // 1 = erc-721\\n if (input.orders[orderId].delegateType == 1) {\\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair721 memory p = pairs[j];\\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\\n }\\n } else if (input.orders[orderId].delegateType == 2) {\\n // 2 = erc-1155\\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair1155 memory p = pairs[j];\\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \\\"\\\");\\n }\\n } else {\\n revert(\\\"unknown delegateType x2y2\\\");\\n }\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\\n if (allowFail) {\\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase sudoswap failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase LooksRareV2 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.Blur){\\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\\n if (allowFail) {\\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId ETH\\\");\\n }\\n\\n //transferring royalties\\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\\n \\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice executes one purchase in WETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n\\n //buying\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed WETH\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId WETH\\\");\\n }\\n \\n //transfer royalties\\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\\n\\n //get fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice transfers ETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n LibTransfer.transferEth(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers WETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers change back to sender\\n */\\n function transferChange() internal {\\n uint ethAmount = address(this).balance;\\n if (ethAmount > 0) {\\n address(msg.sender).transferEth(ethAmount);\\n }\\n }\\n\\n /**\\n @notice transfers weth change back to sender\\n */\\n function transferChangeWETH() internal {\\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\\n if (wethAmount > 0) {\\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\\n }\\n }\\n\\n /**\\n @notice parses fees in base points from one uint and calculates real amount of fees\\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\\n @param amount price of the order\\n @return firstFeeAmount real amount for the first fee\\n @return secondFeeAmount real amount for the second fee\\n */\\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\\n uint firstFee = uint(uint16(fees >> 16));\\n uint secondFee = uint(uint16(fees));\\n return (amount.bp(firstFee), amount.bp(secondFee));\\n }\\n\\n /**\\n @notice parses \\\"fees\\\" field to find the currency for the purchase\\n @param fees field with encoded data\\n @return 0 if ETH, 1 if WETH ERC-20\\n */\\n function getCurrency(uint fees) internal pure returns(Currencies) {\\n return Currencies(uint16(fees >> 48));\\n }\\n\\n\\n /**\\n @notice parses _data to data for market call and additionalData\\n @param feesAndDataType 27 and 28 bytes for dataType\\n @return marketData data for market call\\n @return additionalRoyalties array uint256, (base point + address)\\n */\\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\\n uint[] memory additionalRoyalties;\\n\\n //return no royalties if wrong data type\\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\\n return (_data, additionalRoyalties);\\n }\\n\\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\\n\\n //return no royalties if market doesn't support royalties\\n if (supportsRoyalties(marketId)) {\\n return (additionalData.data, additionalData.additionalRoyalties);\\n } else {\\n return (additionalData.data, additionalRoyalties);\\n } \\n }\\n \\n revert(\\\"unknown additionalDataType\\\");\\n }\\n\\n /**\\n @notice transfer additional royalties in ETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeETH(value, account);\\n }\\n }\\n }\\n\\n /**\\n @notice transfer additional royalties in WETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeWETH(value, account);\\n }\\n }\\n }\\n\\n // modifies `src`\\n function _arrayReplace(\\n bytes memory src,\\n bytes memory replacement,\\n bytes memory mask\\n ) internal view virtual {\\n require(src.length == replacement.length);\\n require(src.length == mask.length);\\n\\n for (uint256 i = 0; i < src.length; ++i) {\\n if (mask[i] != 0) {\\n src[i] = replacement[i];\\n }\\n }\\n }\\n\\n /**\\n @notice returns true if this contract supports additional royalties for the marketplace;\\n now royalties are supported for:\\n 1. SudoSwap\\n 2. LooksRare old\\n 3. LooksRare V2\\n */\\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\\n if (\\n marketId == Markets.SudoSwap ||\\n marketId == Markets.LooksRareOrders ||\\n marketId == Markets.LooksRareV2\\n ) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\\n uint result = 0;\\n\\n Currencies currency = getCurrency(detail.fees);\\n\\n //for every purchase with WETH we sum amount, fees and royalties needed\\n if (currency == Currencies.WETH) {\\n\\n //add amount\\n result = result + detail.amount;\\n\\n //add fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\\n result = result + firstFeeAmount + secondFeeAmount;\\n\\n //add royalties\\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\\n for (uint j = 0; j < royalties.length; ++j) {\\n uint royaltyBasePoint = uint(royalties[j] >> 160);\\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\\n result = result + royaltyValue;\\n }\\n }\\n\\n return result;\\n }\\n\\n /**\\n @notice approves weth for a list of the addresses\\n @param transferProxies - array of addresses to approve WETH for\\n */\\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n receive() external payable {}\\n}\",\"keccak256\":\"0xeab6e5c7ffdbfc05eb128b8b75ff03a37d85b1e8eb4b4c0ede7311106c1259c1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\n\\ninterface IBlur {\\n enum Side { Buy, Sell }\\n enum SignatureVersion { Single, Bulk }\\n enum AssetType { ERC721, ERC1155 }\\n\\n struct Fee {\\n uint16 rate;\\n address payable recipient;\\n }\\n \\n struct Order {\\n address trader;\\n Side side;\\n address matchingPolicy;\\n address collection;\\n uint256 tokenId;\\n uint256 amount;\\n address paymentToken;\\n uint256 price;\\n uint256 listingTime;\\n /* Order expiration timestamp - 0 for oracle cancellations. */\\n uint256 expirationTime;\\n Fee[] fees;\\n uint256 salt;\\n bytes extraParams;\\n }\\n\\n struct Input {\\n Order order;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n bytes extraSignature;\\n SignatureVersion signatureVersion;\\n uint256 blockNumber;\\n }\\n\\n function execute(Input calldata sell, Input calldata buy)\\n external\\n payable;\\n}\\n\",\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-v2/contracts/ExchangeV2.sol\\\";\\n\\nimport {RoyaltiesRegistry} from \\\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\\\";\\nimport {TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\\\";\\nimport {ERC20TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\\\";\\n\\ninterface IExchangeV2 {\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable;\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable;\\n}\",\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibLooksRare.sol\\\";\\n\\ninterface ILooksRare {\\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\\n\\n /**\\n * @notice This function allows a user to execute a taker bid (against a maker ask).\\n * @param takerBid Taker bid struct\\n * @param makerAsk Maker ask struct\\n * @param makerSignature Maker signature\\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\\n * @param affiliate Affiliate address\\n */\\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\\n}\\n\",\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibSeaPort.sol\\\";\\n\\ninterface ISeaPort {\\n function fulfillAdvancedOrder(\\n LibSeaPort.AdvancedOrder calldata advancedOrder,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n bytes32 fulfillerConduitKey,\\n address recipient\\n ) external payable returns (bool fulfilled);\\n\\n function fulfillAvailableAdvancedOrders(\\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\\n bytes32 fulfillerConduitKey,\\n address recipient,\\n uint256 maximumFulfilled\\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\\n\\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\\n external\\n payable\\n returns (bool fulfilled);\\n}\",\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface IWyvernExchange {\\n function atomicMatch_(\\n address[14] memory addrs,\\n uint[18] memory uints,\\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\\n bytes memory calldataBuy,\\n bytes memory calldataSell,\\n bytes memory replacementPatternBuy,\\n bytes memory replacementPatternSell,\\n bytes memory staticExtradataBuy,\\n bytes memory staticExtradataSell,\\n uint8[2] memory vs,\\n bytes32[5] memory rssMetadata)\\n external\\n payable;\\n\\n enum Side {\\n Buy,\\n Sell\\n }\\n\\n enum SaleKind {\\n FixedPrice,\\n DutchAuction\\n }\\n\\n function calculateFinalPrice(\\n Side side,\\n SaleKind saleKind,\\n uint256 basePrice,\\n uint256 extra,\\n uint256 listingTime,\\n uint256 expirationTime\\n ) external view returns (uint256);\\n}\",\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface Ix2y2 {\\n\\n struct OrderItem {\\n uint256 price;\\n bytes data;\\n }\\n\\n struct Pair721 {\\n address token;\\n uint256 tokenId;\\n }\\n\\n struct Pair1155 {\\n address token;\\n uint256 tokenId;\\n uint256 amount;\\n }\\n\\n struct Order {\\n uint256 salt;\\n address user;\\n uint256 network;\\n uint256 intent;\\n uint256 delegateType;\\n uint256 deadline;\\n address currency;\\n bytes dataMask;\\n OrderItem[] items;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n uint8 signVersion;\\n }\\n\\n struct Fee {\\n uint256 percentage;\\n address to;\\n }\\n\\n struct SettleDetail {\\n Op op;\\n uint256 orderIdx;\\n uint256 itemIdx;\\n uint256 price;\\n bytes32 itemHash;\\n address executionDelegate;\\n bytes dataReplacement;\\n uint256 bidIncentivePct;\\n uint256 aucMinIncrementPct;\\n uint256 aucIncDurationSecs;\\n Fee[] fees;\\n }\\n\\n struct SettleShared {\\n uint256 salt;\\n uint256 deadline;\\n uint256 amountToEth;\\n uint256 amountToWeth;\\n address user;\\n bool canFail;\\n }\\n\\n struct RunInput {\\n Order[] orders;\\n SettleDetail[] details;\\n SettleShared shared;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n }\\n\\n enum Op {\\n INVALID,\\n // off-chain\\n COMPLETE_SELL_OFFER,\\n COMPLETE_BUY_OFFER,\\n CANCEL_OFFER,\\n // auction\\n BID,\\n COMPLETE_AUCTION,\\n REFUND_AUCTION,\\n REFUND_AUCTION_STUCK_ITEM\\n }\\n\\n function run(RunInput memory input) external payable;\\n}\",\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nabstract contract IsPausable is Ownable {\\n bool public paused;\\n\\n event Paused(bool paused);\\n\\n function pause(bool _paused) external onlyOwner {\\n paused = _paused;\\n emit Paused(_paused);\\n }\\n\\n function requireNotPaused() internal view {\\n require (!paused, \\\"the contract is paused\\\");\\n }\\n\\n}\\n\",\"keccak256\":\"0xd0ea1d6838dd79b8cfe64e777e4f84456928f0e3621fbb6acd00492e738b2b61\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibLooksRare {\\n struct MakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address signer; // signer of the maker order\\n address collection; // collection address\\n uint256 price; // price (used as )\\n uint256 tokenId; // id of the token\\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\\n address currency; // currency (e.g., WETH)\\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\\n uint256 startTime; // startTime in timestamp\\n uint256 endTime; // endTime in timestamp\\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // additional parameters\\n uint8 v; // v: parameter (27 or 28)\\n bytes32 r; // r: parameter\\n bytes32 s; // s: parameter\\n }\\n\\n struct TakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address taker; // msg.sender\\n uint256 price; // final price for the purchase\\n uint256 tokenId;\\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // other params (e.g., tokenId)\\n }\\n\\n /**\\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\\n */\\n enum CollectionType {\\n ERC721,\\n ERC1155\\n }\\n\\n /**\\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\\n */\\n enum QuoteType {\\n Bid,\\n Ask\\n }\\n /**\\n * 1. Maker struct\\n */\\n\\n /**\\n * @notice Maker is the struct for a maker order.\\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\\n * @param globalNonce Global user order nonce for maker orders\\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\\n * @param strategyId Strategy id\\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\\n * @param collection Collection address\\n * @param currency Currency address (@dev address(0) = ETH)\\n * @param signer Signer address\\n * @param startTime Start timestamp\\n * @param endTime End timestamp\\n * @param price Minimum price for maker ask, maximum price for maker bid\\n * @param itemIds Array of itemIds\\n * @param amounts Array of amounts\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Maker {\\n QuoteType quoteType;\\n uint256 globalNonce;\\n uint256 subsetNonce;\\n uint256 orderNonce;\\n uint256 strategyId;\\n CollectionType collectionType;\\n address collection;\\n address currency;\\n address signer;\\n uint256 startTime;\\n uint256 endTime;\\n uint256 price;\\n uint256[] itemIds;\\n uint256[] amounts;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 2. Taker struct\\n */\\n\\n /**\\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Taker {\\n address recipient;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 3. Merkle tree struct\\n */\\n\\n enum MerkleTreeNodePosition {\\n Left,\\n Right\\n }\\n\\n /**\\n * @notice MerkleTreeNode is a MerkleTree's node.\\n * @param value It can be an order hash or a proof\\n * @param position The node's position in its branch.\\n * It can be left or right or none\\n * (before the tree is sorted).\\n */\\n struct MerkleTreeNode {\\n bytes32 value;\\n MerkleTreeNodePosition position;\\n }\\n\\n /**\\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\\n * @dev A Merkle tree can be computed with order hashes.\\n * It can contain order hashes from both maker bid and maker ask structs.\\n * @param root Merkle root\\n * @param proof Array containing the merkle proof\\n */\\n struct MerkleTree {\\n bytes32 root;\\n MerkleTreeNode[] proof;\\n }\\n}\\n\",\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibSeaPort {\\n /**\\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\\n * matching, a group of six functions may be called that only requires a\\n * subset of the usual order arguments. Note the use of a \\\"basicOrderType\\\"\\n * enum; this represents both the usual order type as well as the \\\"route\\\"\\n * of the basic order (a simple derivation function for the basic order\\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\\n */\\n struct BasicOrderParameters {\\n address considerationToken; // 0x24\\n uint256 considerationIdentifier; // 0x44\\n uint256 considerationAmount; // 0x64\\n address payable offerer; // 0x84\\n address zone; // 0xa4\\n address offerToken; // 0xc4\\n uint256 offerIdentifier; // 0xe4\\n uint256 offerAmount; // 0x104\\n BasicOrderType basicOrderType; // 0x124\\n uint256 startTime; // 0x144\\n uint256 endTime; // 0x164\\n bytes32 zoneHash; // 0x184\\n uint256 salt; // 0x1a4\\n bytes32 offererConduitKey; // 0x1c4\\n bytes32 fulfillerConduitKey; // 0x1e4\\n uint256 totalOriginalAdditionalRecipients; // 0x204\\n AdditionalRecipient[] additionalRecipients; // 0x224\\n bytes signature; // 0x244\\n }\\n /**\\n * @dev Basic orders can supply any number of additional recipients, with the\\n * implied assumption that they are supplied from the offered ETH (or other\\n * native token) or ERC20 token for the order.\\n */\\n struct AdditionalRecipient {\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum BasicOrderType {\\n // 0: no partial fills, anyone can execute\\n ETH_TO_ERC721_FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n ETH_TO_ERC721_PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC721_FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 4: no partial fills, anyone can execute\\n ETH_TO_ERC1155_FULL_OPEN,\\n\\n // 5: partial fills supported, anyone can execute\\n ETH_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 6: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 7: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 8: no partial fills, anyone can execute\\n ERC20_TO_ERC721_FULL_OPEN,\\n\\n // 9: partial fills supported, anyone can execute\\n ERC20_TO_ERC721_PARTIAL_OPEN,\\n\\n // 10: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC721_FULL_RESTRICTED,\\n\\n // 11: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 12: no partial fills, anyone can execute\\n ERC20_TO_ERC1155_FULL_OPEN,\\n\\n // 13: partial fills supported, anyone can execute\\n ERC20_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 14: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 15: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 16: no partial fills, anyone can execute\\n ERC721_TO_ERC20_FULL_OPEN,\\n\\n // 17: partial fills supported, anyone can execute\\n ERC721_TO_ERC20_PARTIAL_OPEN,\\n\\n // 18: no partial fills, only offerer or zone can execute\\n ERC721_TO_ERC20_FULL_RESTRICTED,\\n\\n // 19: partial fills supported, only offerer or zone can execute\\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\\n\\n // 20: no partial fills, anyone can execute\\n ERC1155_TO_ERC20_FULL_OPEN,\\n\\n // 21: partial fills supported, anyone can execute\\n ERC1155_TO_ERC20_PARTIAL_OPEN,\\n\\n // 22: no partial fills, only offerer or zone can execute\\n ERC1155_TO_ERC20_FULL_RESTRICTED,\\n\\n // 23: partial fills supported, only offerer or zone can execute\\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\\n }\\n\\n /**\\n * @dev The full set of order components, with the exception of the counter,\\n * must be supplied when fulfilling more sophisticated orders or groups of\\n * orders. The total number of original consideration items must also be\\n * supplied, as the caller may specify additional consideration items.\\n */\\n struct OrderParameters {\\n address offerer; // 0x00\\n address zone; // 0x20\\n OfferItem[] offer; // 0x40\\n ConsiderationItem[] consideration; // 0x60\\n OrderType orderType; // 0x80\\n uint256 startTime; // 0xa0\\n uint256 endTime; // 0xc0\\n bytes32 zoneHash; // 0xe0\\n uint256 salt; // 0x100\\n bytes32 conduitKey; // 0x120\\n uint256 totalOriginalConsiderationItems; // 0x140\\n // offer.length // 0x160\\n }\\n\\n /**\\n * @dev Orders require a signature in addition to the other order parameters.\\n */\\n struct Order {\\n OrderParameters parameters;\\n bytes signature;\\n }\\n\\n struct AdvancedOrder {\\n OrderParameters parameters;\\n uint120 numerator;\\n uint120 denominator;\\n bytes signature;\\n bytes extraData;\\n }\\n\\n struct OfferItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n }\\n\\n /**\\n * @dev A consideration item has the same five components as an offer item and\\n * an additional sixth component designating the required recipient of the\\n * item.\\n */\\n struct ConsiderationItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum OrderType {\\n // 0: no partial fills, anyone can execute\\n FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n PARTIAL_RESTRICTED\\n }\\n\\n // prettier-ignore\\n enum ItemType {\\n // 0: ETH on mainnet, MATIC on polygon, etc.\\n NATIVE,\\n\\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\\n ERC20,\\n\\n // 2: ERC721 items\\n ERC721,\\n\\n // 3: ERC1155 items\\n ERC1155,\\n\\n // 4: ERC721 items where a number of tokenIds are supported\\n ERC721_WITH_CRITERIA,\\n\\n // 5: ERC1155 items where a number of ids are supported\\n ERC1155_WITH_CRITERIA\\n }\\n\\n /**\\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\\n * offer and consideration items, then generates a single execution\\n * element. A given fulfillment can be applied to as many offer and\\n * consideration items as desired, but must contain at least one offer and\\n * at least one consideration that match. The fulfillment must also remain\\n * consistent on all key parameters across all offer items (same offerer,\\n * token, type, tokenId, and conduit preference) as well as across all\\n * consideration items (token, type, tokenId, and recipient).\\n */\\n struct Fulfillment {\\n FulfillmentComponent[] offerComponents;\\n FulfillmentComponent[] considerationComponents;\\n }\\n\\n /**\\n * @dev Each fulfillment component contains one index referencing a specific\\n * order and another referencing a specific offer or consideration item.\\n */\\n struct FulfillmentComponent {\\n uint256 orderIndex;\\n uint256 itemIndex;\\n }\\n\\n /**\\n * @dev An execution is triggered once all consideration items have been zeroed\\n * out. It sends the item in question from the offerer to the item's\\n * recipient, optionally sourcing approvals from either this contract\\n * directly or from the offerer's chosen conduit if one is specified. An\\n * execution is not provided as an argument, but rather is derived via\\n * orders, criteria resolvers, and fulfillments (where the total number of\\n * executions will be less than or equal to the total number of indicated\\n * fulfillments) and returned as part of `matchOrders`.\\n */\\n struct Execution {\\n ReceivedItem item;\\n address offerer;\\n bytes32 conduitKey;\\n }\\n\\n /**\\n * @dev A received item is translated from a utilized consideration item and has\\n * the same four components as a spent item, as well as an additional fifth\\n * component designating the required recipient of the item.\\n */\\n struct ReceivedItem {\\n ItemType itemType;\\n address token;\\n uint256 identifier;\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n struct CriteriaResolver {\\n uint256 orderIndex;\\n Side side;\\n uint256 index;\\n uint256 identifier;\\n bytes32[] criteriaProof;\\n }\\n\\n // prettier-ignore\\n enum Side {\\n // 0: Items that can be spent\\n OFFER,\\n\\n // 1: Items that must be received\\n CONSIDERATION\\n }\\n}\\n\",\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x7f99c2e0828bbba57e1599d92f1368b62ef0e9cd62bda3c4091e108d1fbc35b6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x5e982ad688493d9c729757c2ebd98efecd0bf3b33992f7342edf6c349874b86c\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x363fa1f25a41aa7d7b3fb9e2d182dec04c3774d06d9eed428b3fe48140fa4b7e\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x87cd179c900495ee44c1b9c7fa57f4da0228217d78792bd6d6a6fde6c32be2b2\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x6101e06040523480156200001257600080fd5b5060405162004cd538038062004cd5833981016040819052620000359162000344565b60006200004162000210565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200009d6301ffc9a760e01b62000214565b620000af630271189760e51b62000214565b82516001600160601b0319606091821b811660809081526020860151831b821660a09081526040870151841b831660c090815284880151851b841660e090815292880151851b841661010090815291880151851b841661012090815290880151851b84166101405291870151841b831661016052860151831b821661018052850151821b81166101a0529083901b166101c05260005b815181101562000206576001600160a01b03831615620001fd57826001600160a01b031663095ea7b38383815181106200017b57fe5b60200260200101516000196040518363ffffffff1660e01b8152600401620001a592919062000429565b602060405180830381600087803b158015620001c057600080fd5b505af1158015620001d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fb919062000400565b505b60010162000145565b5050505062000466565b3390565b6001600160e01b0319808216141562000274576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b80516001600160a01b0381168114620002b457600080fd5b919050565b600082601f830112620002ca578081fd5b815160206001600160401b03821115620002e057fe5b808202620002f082820162000442565b8381528281019086840183880185018910156200030b578687fd5b8693505b85841015620003385762000323816200029c565b8352600193909301929184019184016200030f565b50979650505050505050565b600080600061018084860312156200035a578283fd5b84601f85011262000369578283fd5b610140620003778162000442565b908501908086888411156200038a578687fd5b865b600a811015620003b757620003a1826200029c565b845260209384019391909101906001016200038c565b50508095505050620003c9816200029c565b61016086015190935090506001600160401b03811115620003e8578182fd5b620003f686828701620002b9565b9150509250925092565b60006020828403121562000412578081fd5b8151801515811462000422578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b03811182821017156200045e57fe5b604052919050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c61475f62000576600039806104f7528061060f528061082c528061099f52806121fd52806122b452806123435250806104af5280611cd852806120c5525080610c355280611af35280611b8d5250806104d352806119e9525080610bed52806119175280611ff5525080610524528061184552508061090b528061161952806116b3525080610d6c52806111c052806112565250806103af5280610f0e5280611e4a52508061092f52806110bd5280611f25525080610c115280610feb525061475f6000f3fe6080604052600436106101435760003560e01c806386dcbd27116100b6578063bd4486ee1161006f578063bd4486ee14610319578063c9f0a2fa1461032e578063df6c255814610343578063f23a6e6114610358578063f2fde38b14610378578063fc40c9c7146103985761014a565b806386dcbd27146102875780638da5cb5b146102a75780639110c777146102bc578063a05f32dc146102d1578063b94ee332146102e6578063bc197c81146102f95761014a565b80633733b82b116101085780633733b82b1461020b5780633fc8cef3146102205780635c975abb146102355780635ea1e4c91461024a578063715018a61461025f57806386496e7a146102745761014a565b80628534f71461014f57806301ffc9a71461017a57806302329a29146101a7578063150b7a02146101c9578063349d6a85146101f65761014a565b3661014a57005b600080fd5b34801561015b57600080fd5b506101646103ad565b6040516101719190613e85565b60405180910390f35b34801561018657600080fd5b5061019a6101953660046136e6565b6103d1565b6040516101719190613f0e565b3480156101b357600080fd5b506101c76101c23660046136ae565b6103f4565b005b3480156101d557600080fd5b506101e96101e4366004613318565b61049d565b6040516101719190613f19565b34801561020257600080fd5b506101646104ad565b34801561021757600080fd5b506101646104d1565b34801561022c57600080fd5b506101646104f5565b34801561024157600080fd5b5061019a610519565b34801561025657600080fd5b50610164610522565b34801561026b57600080fd5b506101c7610546565b6101c761028236600461386a565b6105f2565b34801561029357600080fd5b506101c76102a23660046133e7565b6107bd565b3480156102b357600080fd5b506101646108fa565b3480156102c857600080fd5b50610164610909565b3480156102dd57600080fd5b5061016461092d565b6101c76102f43660046135f3565b610951565b34801561030557600080fd5b506101e961031436600461326f565b610bda565b34801561032557600080fd5b50610164610beb565b34801561033a57600080fd5b50610164610c0f565b34801561034f57600080fd5b50610164610c33565b34801561036457600080fd5b506101e9610373366004613381565b610c57565b34801561038457600080fd5b506101c7610393366004613253565b610c68565b3480156103a457600080fd5b50610164610d6a565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b6103fc610d8e565b6001600160a01b031661040d6108fa565b6001600160a01b031614610456576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61054e610d8e565b6001600160a01b031661055f6108fa565b6001600160a01b0316146105a8576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6105fa610d92565b600061060584610de5565b905080156106b8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610644610d8e565b30846040518463ffffffff1660e01b815260040161066493929190613e99565b602060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b691906136ca565b505b60006106c78560400151610eb0565b905060008080808460018111156106da57fe5b141561070b576106eb886000610ecc565b919450925090506106fc8288611de2565b6107068187611de2565b610766565b600184600181111561071957fe5b14156107455761072a886000611e0d565b9194509250905061073b82886121c9565b61070681876121c9565b60405162461bcd60e51b815260040161075d906140a2565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107959190613f0e565b60405180910390a16107a5612286565b84156107b3576107b361229a565b5050505050505050565b6107c5610d8e565b6001600160a01b03166107d66108fa565b6001600160a01b03161461081f576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b60005b818110156108f5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061086557fe5b905060200201602081019061087a9190613253565b6000196040518363ffffffff1660e01b815260040161089a929190613ef5565b602060405180830381600087803b1580156108b457600080fd5b505af11580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec91906136ca565b50600101610822565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610959610d92565b60008060008060008060005b8a518110156109965761098a8b828151811061097d57fe5b6020026020010151610de5565b90910190600101610965565b508015610a48577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109d4610d8e565b30846040518463ffffffff1660e01b81526004016109f493929190613e99565b602060405180830381600087803b158015610a0e57600080fd5b505af1158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4691906136ca565b505b60005b8a51811015610b72576000610a768c8381518110610a6557fe5b602002602001015160400151610eb0565b90506000808080846001811115610a8957fe5b1415610ad057610aac8f8681518110610a9e57fe5b60200260200101518d610ecc565b91945092509050610abd8b836123e8565b9a50610ac98a826123e8565b9950610b21565b6001846001811115610ade57fe5b141561074557610b018f8681518110610af357fe5b60200260200101518d611e0d565b91945092509050610b1289836123e8565b9850610b1e88826123e8565b97505b8680610b2a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b5b9190613f0e565b60405180910390a150505050806001019050610a4b565b5081610b905760405162461bcd60e51b815260040161075d906142b3565b610b9a868a611de2565b610ba48589611de2565b610bae848a6121c9565b610bb883896121c9565b610bc0612286565b8015610bce57610bce61229a565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c70610d8e565b6001600160a01b0316610c816108fa565b6001600160a01b031614610cca576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b6001600160a01b038116610d0f5760405162461bcd60e51b81526004018080602001828103825260268152602001806146c36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610de3576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610dfb8460400151610eb0565b90506001816001811115610e0b57fe5b1415610ea95760208401516040850151928101926000918291610e2d91612449565b91509150808285010193506000610e5187606001518860400151896000015161247a565b91505060005b8151811015610ea457600060a0838381518110610e7057fe5b6020026020010151901c90506000610e95828b6020015161253390919063ffffffff16565b97909701965050600101610e57565b505050505b5092915050565b6000603082901c61ffff166001811115610ec657fe5b92915050565b6000806000806000610eeb87606001518860400151896000015161247a565b60208901519193509150600288516009811115610f0457fe5b1415610fd25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f459190613e69565b60006040518083038185875af1925050503d8060008114610f82576040519150601f19603f3d011682016040523d82523d6000602084013e610f87565b606091505b505090508715610faf5780610faa57600080600096509650965050505050611ddb565b610fcc565b80610fcc5760405162461bcd60e51b815260040161075d90614108565b50611da9565b600188516009811115610fe157fe5b14156110a45760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516110229190613e69565b60006040518083038185875af1925050503d806000811461105f576040519150601f19603f3d011682016040523d82523d6000602084013e611064565b606091505b5050905087156110875780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90613f98565b6000885160098111156110b357fe5b14156111765760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516110f49190613e69565b60006040518083038185875af1925050503d8060008114611131576040519150601f19603f3d011682016040523d82523d6000602084013e611136565b606091505b5050905087156111595780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90614006565b60038851600981111561118557fe5b14156115c8576000838060200190518101906111a191906138c0565b9050871561123f5760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906111f7908590600401614318565b6000604051808303818588803b15801561121057600080fd5b505af193505050508015611222575060015b61123a57600080600096509650965050505050611ddb565b6112c0565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061128d908590600401614318565b6000604051808303818588803b1580156112a657600080fd5b505af11580156112ba573d6000803e3d6000fd5b50505050505b60005b8160200151518110156115c1576000826020015182815181106112e257fe5b602002602001015160200151905060008360200151838151811061130257fe5b602002602001015160400151905060008460000151838151811061132257fe5b60200260200101516101000151828151811061133a57fe5b602002602001015160200151905060008560000151848151811061135a57fe5b602002602001015160e0015151118015611390575060008560200151858151811061138157fe5b602002602001015160c0015151115b156113d6576113d681866020015186815181106113a957fe5b602002602001015160c00151876000015186815181106113c557fe5b602002602001015160e0015161254b565b84518051849081106113e457fe5b602002602001015160800151600114156114b95760008180602001905181019061140e9190613532565b905060005b81518110156114b257600082828151811061142a57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611450610d8e565b84602001516040518463ffffffff1660e01b815260040161147393929190613e99565b600060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505060019093019250611413915050565b50506115b3565b84518051849081106114c757fe5b6020026020010151608001516002141561159b576000818060200190518101906114f19190613455565b905060005b81518110156114b257600082828151811061150d57fe5b6020026020010151905080600001516001600160a01b031663f242432a30611533610d8e565b846020015185604001516040518563ffffffff1660e01b815260040161155c9493929190613ebd565b600060405180830381600087803b15801561157657600080fd5b505af115801561158a573d6000803e3d6000fd5b5050600190930192506114f6915050565b60405162461bcd60e51b815260040161075d906141e2565b5050508060010190506112c3565b5050611da9565b6004885160098111156115d757fe5b141561182c576000806000858060200190518101906115f69190613988565b925092509250891561169c57604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b296908690611652908790879060040161449f565b6000604051808303818588803b15801561166b57600080fd5b505af19350505050801561167d575060015b611697576000806000985098509850505050505050611ddb565b61171f565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b2969086906116ec908790879060040161449f565b6000604051808303818588803b15801561170557600080fd5b505af1158015611719573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117ae5781604001516001600160a01b03166342842e0e30611754610d8e565b85608001516040518463ffffffff1660e01b815260040161177793929190613e99565b600060405180830381600087803b15801561179157600080fd5b505af11580156117a5573d6000803e3d6000fd5b50505050611824565b6001600160e01b0319811663025ceed960e61b141561180c5781604001516001600160a01b031663f242432a306117e3610d8e565b85608001518660a001516040518563ffffffff1660e01b81526004016117779493929190613ebd565b60405162461bcd60e51b815260040161075d90614250565b505050611da9565b60058851600981111561183b57fe5b14156118fe5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316828560405161187c9190613e69565b60006040518083038185875af1925050503d80600081146118b9576040519150601f19603f3d011682016040523d82523d6000602084013e6118be565b606091505b5050905087156118e15780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d906141ab565b60068851600981111561190d57fe5b14156119d05760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316828560405161194e9190613e69565b60006040518083038185875af1925050503d806000811461198b576040519150601f19603f3d011682016040523d82523d6000602084013e611990565b606091505b5050905087156119b35780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90613fcf565b6007885160098111156119df57fe5b1415611aa25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a209190613e69565b60006040518083038185875af1925050503d8060008114611a5d576040519150601f19603f3d011682016040523d82523d6000602084013e611a62565b606091505b505090508715611a855780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90614219565b600888516009811115611ab157fe5b1415611cbf57600080600085806020019051810190611ad091906137f6565b9250925092508915611b7657604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b2c90879087906004016142ea565b6000604051808303818588803b158015611b4557600080fd5b505af193505050508015611b57575060015b611b71576000806000985098509850505050505050611ddb565b611bf9565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611bc690879087906004016142ea565b6000604051808303818588803b158015611bdf57600080fd5b505af1158015611bf3573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c58578251606001516001600160a01b03166342842e0e30611c2f610d8e565b8651608001516040516001600160e01b031960e086901b16815261177793929190600401613e99565b6001600160e01b0319811663025ceed960e61b141561180c578251606001516001600160a01b031663f242432a30611c8e610d8e565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117779493929190600401613ebd565b600988516009811115611cce57fe5b1415611d915760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d0f9190613e69565b60006040518083038185875af1925050503d8060008114611d4c576040519150601f19603f3d011682016040523d82523d6000602084013e611d51565b606091505b505090508715611d745780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d9061413f565b60405162461bcd60e51b815260040161075d90614074565b611db78289602001516125dc565b600080611dcc8a604001518b60200151612449565b60019950909750955050505050505b9250925092565b600082118015611dfa57506001600160a01b03811615155b15611e0957611e098183612665565b5050565b6000806000806000611e2c87606001518860400151896000015161247a565b9092509050600287516009811115611e4057fe5b1415611f0c5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611e809190613e69565b6000604051808303816000865af19150503d8060008114611ebd576040519150601f19603f3d011682016040523d82523d6000602084013e611ec2565b606091505b505090508615611ee95780611ee4576000806000955095509550505050611ddb565b611f06565b80611f065760405162461bcd60e51b815260040161075d90614176565b50612194565b600087516009811115611f1b57fe5b1415611fdc5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f5b9190613e69565b6000604051808303816000865af19150503d8060008114611f98576040519150601f19603f3d011682016040523d82523d6000602084013e611f9d565b606091505b505090508615611fbf5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d9061403d565b600687516009811115611feb57fe5b14156120ac5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168360405161202b9190613e69565b6000604051808303816000865af19150503d8060008114612068576040519150601f19603f3d011682016040523d82523d6000602084013e61206d565b606091505b50509050861561208f5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d90613f2e565b6009875160098111156120bb57fe5b141561217c5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516120fb9190613e69565b6000604051808303816000865af19150503d8060008114612138576040519150601f19603f3d011682016040523d82523d6000602084013e61213d565b606091505b50509050861561215f5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d90613f63565b60405162461bcd60e51b815260040161075d906140d9565b6121a28188602001516126fd565b6000806121b789604001518a60200151612449565b60019b919a5098509650505050505050565b6000821180156121e157506001600160a01b03811615155b15611e095760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906122349084908690600401613ef5565b602060405180830381600087803b15801561224e57600080fd5b505af1158015612262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f591906136ca565b478015612297576122973382612665565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906122e9903090600401613e85565b60206040518083038186803b15801561230157600080fd5b505afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190613a75565b90508015612297577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612378610d8e565b836040518363ffffffff1660e01b8152600401612396929190613ef5565b602060405180830381600087803b1580156123b057600080fd5b505af11580156123c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0991906136ca565b600082820183811015612442576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166124638583612533565b61246d8683612533565b9350935050509250929050565b6060806000602085901c61ffff16600181111561249357fe5b9050606060008260018111156124a557fe5b14156124b757869350915061252b9050565b60018260018111156124c557fe5b1415612513576000878060200190518101906124e19190613702565b90506124ec86612786565b1561250757806000015181602001519450945050505061252b565b519350915061252b9050565b60405162461bcd60e51b815260040161075d9061427c565b935093915050565b600061244261271061254585856127d8565b90612831565b815183511461255957600080fd5b805183511461256757600080fd5b60005b83518110156125d65781818151811061257f57fe5b01602001516001600160f81b031916156125ce5782818151811061259f57fe5b602001015160f81c60f81b8482815181106125b657fe5b60200101906001600160f81b031916908160001a9053505b60010161256a565b50505050565b60005b82518110156108f55760008382815181106125f657fe5b6020026020010151111561265d57600083828151811061261257fe5b60200260200101519050600060a085848151811061262c57fe5b6020026020010151901c9050600061264d828661253390919063ffffffff16565b90506126598184611de2565b5050505b6001016125df565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146126b0576040519150601f19603f3d011682016040523d82523d6000602084013e6126b5565b606091505b50509050806108f5576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156108f557600083828151811061271757fe5b6020026020010151111561277e57600083828151811061273357fe5b60200260200101519050600060a085848151811061274d57fe5b6020026020010151901c9050600061276e828661253390919063ffffffff16565b905061277a81846121c9565b5050505b600101612700565b6000600582600981111561279657fe5b14806127ad575060048260098111156127ab57fe5b145b806127c3575060078260098111156127c157fe5b145b156127d0575060016103ef565b506000919050565b6000826127e757506000610ec6565b828202828482816127f457fe5b04146124425760405162461bcd60e51b81526004018080602001828103825260218152602001806146e96021913960400191505060405180910390fd5b6000808211612887576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161289057fe5b049392505050565b80356103ef81614689565b80516103ef81614689565b600082601f8301126128be578081fd5b815160206128d36128ce8361461f565b6145fc565b828152818101908583016040808602880185018910156128f1578687fd5b865b8681101561295b5781838b031215612909578788fd5b81518281018181106001600160401b038211171561292357fe5b8352835161ffff8116811461293657898afd5b81528387015161294581614689565b81880152855293850193918101916001016128f3565b509198975050505050505050565b600082601f830112612979578081fd5b815160206129896128ce8361461f565b828152818101908583016040808602880185018910156129a7578687fd5b865b8681101561295b5781838b0312156129bf578788fd5b81518281018181106001600160401b03821117156129d957fe5b835283518152868401516129ec81614689565b81880152855293850193918101916001016129a9565b600082601f830112612a12578081fd5b81516020612a226128ce8361461f565b82815281810190858301855b85811015612aab5781518801604080601f19838d03011215612a4e578889fd5b80518181016001600160401b038282108183111715612a6957fe5b818452848a01518352928401519280841115612a83578b8cfd5b5050612a938c8984860101612df9565b81890152865250509284019290840190600101612a2e565b5090979650505050505050565b600082601f830112612ac8578081fd5b81516020612ad86128ce8361461f565b82815281810190858301855b85811015612aab57815188016101a080601f19838d03011215612b05578889fd5b612b0e816145fc565b878301518152612b20604084016128a3565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612b5860e084016128a3565b60c08201526101008301516001600160401b0380821115612b77578b8cfd5b612b858e8b84880101612df9565b60e084015261012091508185015181811115612b9f578c8dfd5b612bad8f8c83890101612a02565b610100850152505061014080850151828401526101609150818501518184015250610180612bdc818601613242565b82840152612beb848601613242565b9083015250865250509284019290840190600101612ae4565b600082601f830112612c14578081fd5b81516020612c246128ce8361461f565b82815281810190858301855b85811015612aab578151880161016080601f19838d03011215612c51578889fd5b612c5a816145fc565b612c65888401612e44565b815260408084015189830152606080850151828401526080915081850151818401525060a0808501518284015260c09150612ca18286016128a3565b9083015260e08401516001600160401b0380821115612cbe578c8dfd5b612ccc8f8c84890101612df9565b8385015261010092508286015160e0850152610120915081860151838501526101409250828601518285015284860151945080851115612d0a578c8dfd5b5050612d1a8d8a85870101612969565b90820152865250509284019290840190600101612c30565b600082601f830112612d42578081fd5b81356020612d526128ce8361461f565b8281528181019085830183850287018401881015612d6e578586fd5b855b85811015612aab57813584529284019290840190600101612d70565b80356103ef8161469e565b80516103ef8161469e565b80516103ef816146ac565b600082601f830112612dbd578081fd5b8135612dcb6128ce8261463c565b818152846020838601011115612ddf578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612e09578081fd5b8151612e176128ce8261463c565b818152846020838601011115612e2b578283fd5b612e3c82602083016020870161465d565b949350505050565b8051600881106103ef57600080fd5b8051600281106103ef57600080fd5b600060e08284031215612e73578081fd5b612e7d60e06145fc565b905081516001600160401b0380821115612e9657600080fd5b612ea285838601613026565b8352612eb060208501613242565b602084015260408401516040840152606084015160608401526080840151915080821115612edd57600080fd5b50612eea84828501612df9565b608083015250612efc60a08301612e53565b60a082015260c082015160c082015292915050565b6000610200808385031215612f24578182fd5b612f2d816145fc565b915050612f3982612d97565b8152612f47602083016128a3565b6020820152612f58604083016128a3565b6040820152606082015160608201526080820151608082015260a082015160a0820152612f8760c083016128a3565b60c0820152612f9860e083016128a3565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b03811115612fe457600080fd5b612ff085828601612df9565b8284015250506101a0613004818401613242565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a0808385031215613039578182fd5b613042816145fc565b91505061304e826128a3565b815261305c60208301612e53565b602082015261306d604083016128a3565b604082015261307e606083016128a3565b60608201526080820151608082015260a082015160a08201526130a360c083016128a3565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156130e457600080fd5b6130f0868387016128ae565b838501526101609250828501518385015261018092508285015191508082111561311957600080fd5b5061312685828601612df9565b82840152505092915050565b600060808284031215613143578081fd5b604051608081016001600160401b03828210818311171561316057fe5b8160405282935084359150600a821061317857600080fd5b818352602085013560208401526040850135604084015260608501359150808211156131a357600080fd5b506131b085828601612dad565b6060830152505092915050565b600060c082840312156131ce578081fd5b60405160c081018181106001600160401b03821117156131ea57fe5b806040525080915082518152602083015160208201526040830151604082015260608301516060820152608083015161322281614689565b608082015260a08301516132358161469e565b60a0919091015292915050565b805160ff811681146103ef57600080fd5b600060208284031215613264578081fd5b813561244281614689565b600080600080600060a08688031215613286578081fd5b853561329181614689565b945060208601356132a181614689565b935060408601356001600160401b03808211156132bc578283fd5b6132c889838a01612d32565b945060608801359150808211156132dd578283fd5b6132e989838a01612d32565b935060808801359150808211156132fe578283fd5b5061330b88828901612dad565b9150509295509295909350565b6000806000806080858703121561332d578182fd5b843561333881614689565b9350602085013561334881614689565b92506040850135915060608501356001600160401b03811115613369578182fd5b61337587828801612dad565b91505092959194509250565b600080600080600060a08688031215613398578283fd5b85356133a381614689565b945060208601356133b381614689565b9350604086013592506060860135915060808601356001600160401b038111156133db578182fd5b61330b88828901612dad565b600080602083850312156133f9578182fd5b82356001600160401b038082111561340f578384fd5b818501915085601f830112613422578384fd5b813581811115613430578485fd5b8660208083028501011115613443578485fd5b60209290920196919550909350505050565b60006020808385031215613467578182fd5b82516001600160401b038082111561347d578384fd5b818501915085601f830112613490578384fd5b815161349e6128ce8261461f565b818152848101908486016060808502870188018b10156134bc578889fd5b8896505b848710156135235780828c0312156134d6578889fd5b6040805182810181811089821117156134eb57fe5b825283516134f881614689565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906134c0565b50909998505050505050505050565b60006020808385031215613544578182fd5b82516001600160401b038082111561355a578384fd5b818501915085601f83011261356d578384fd5b815161357b6128ce8261461f565b818152848101908486016040808502870188018b1015613599578889fd5b8896505b848710156135235780828c0312156135b3578889fd5b805181810181811088821117156135c657fe5b825282516135d381614689565b81528289015189820152845260019690960195928701929081019061359d565b60008060008060808587031215613608578182fd5b84356001600160401b0381111561361d578283fd5b8501601f8101871361362d578283fd5b8035602061363d6128ce8361461f565b82815281810190848301875b85811015613672576136608d8684358a0101613132565b84529284019290840190600101613649565b50508098505050613684818901612898565b955050505061369560408601612898565b91506136a360608601612d8c565b905092959194509250565b6000602082840312156136bf578081fd5b81356124428161469e565b6000602082840312156136db578081fd5b81516124428161469e565b6000602082840312156136f7578081fd5b8135612442816146ac565b60006020808385031215613714578182fd5b82516001600160401b038082111561372a578384fd5b908401906040828703121561373d578384fd5b60405160408101818110838211171561375257fe5b604052825182811115613763578586fd5b61376f88828601612df9565b8252508383015182811115613782578586fd5b80840193505086601f840112613796578485fd5b825191506137a66128ce8361461f565b82815284810190848601868502860187018a10156137c2578788fd5b8795505b848610156137e45780518352600195909501949186019186016137c6565b50948201949094529695505050505050565b60008060006060848603121561380a578081fd5b83516001600160401b0380821115613820578283fd5b61382c87838801612e62565b94506020860151915080821115613841578283fd5b5061384e86828701612e62565b925050604084015161385f816146ac565b809150509250925092565b60008060006060848603121561387e578081fd5b83356001600160401b03811115613893578182fd5b61389f86828701613132565b93505060208401356138b081614689565b9150604084013561385f81614689565b6000602082840312156138d1578081fd5b81516001600160401b03808211156138e7578283fd5b9083019061016082860312156138fb578283fd5b61390560c06145fc565b825182811115613913578485fd5b61391f87828601612ab8565b825250602083015182811115613933578485fd5b61393f87828601612c04565b60208301525061395286604085016131bd565b60408201526101008301516060820152610120830151608082015261397a6101408401613242565b60a082015295945050505050565b60008060006060848603121561399c578081fd5b83516001600160401b03808211156139b2578283fd5b9085019060c082880312156139c5578283fd5b60405160c0810181811083821117156139da57fe5b6040526139e683612d97565b81526139f4602084016128a3565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613a28578485fd5b613a3489828601612df9565b60a0830152506020870151909550915080821115613a50578283fd5b50613a5d86828701612f11565b925050613a6c60408501612da2565b90509250925092565b600060208284031215613a86578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613ae1578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613aad565b509495945050505050565b6000815180845260208085019450808401835b83811015613ae1578151805188528301516001600160a01b03168388015260409096019590820190600101613aff565b60008282518085526020808601955080818302840101818601855b84811015612aab57858303601f190189528151805184528401516040858501819052613b7881860183613c7e565b9a86019a9450505090830190600101613b4a565b6000815180845260208085018081965082840281019150828601855b85811015613c6b5782840389528151610160613bc5868351613caa565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613bfd82890182613a8d565b505060c0808301518282890152613c1683890182613c7e565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613c57915082905083613aec565b9a87019a9550505090840190600101613ba8565b5091979650505050505050565b15159052565b60008151808452613c9681602086016020860161465d565b601f01601f19169290920160200192915050565b60088110613cb457fe5b9052565b60028110613cb457fe5b6000815160e08452613cd860e085018251613a8d565b6020810151610100613cec81870183613cb8565b60408301519150610120613d0281880184613a8d565b60608401519250610140613d1881890185613a8d565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613d4c818c0188613a8d565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613d876102808b0187613a9a565b918701516102408b01529095015188860360df19016102608a0152949350613db59250839150849050613c7e565b9150506020830151613dca6020860182613e62565b50604083015160408501526060830151606085015260808301518482036080860152613df68282613c7e565b91505060a0830151613e0b60a0860182613cb8565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b60008251613e7b81846020870161465d565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b6000604082526142fd6040830185613cc2565b828103602084015261430f8185613cc2565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614435578a820361019f19018452855180518352898101516143758b850182613a8d565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516143b082860182613a8d565b505060e08082015189828601526143c98a860182613c7e565b91505061010080830151858303828701526143e48382613b2f565b925050506101208083015181860152506101408083015181860152508682015161441088860182613e62565b509089015190614422848b0183613e62565b968a0196948a019492505060010161434d565b50968a0151898803601f190160408b0152966144518189613b8c565b97505050506040880151935061446a6060880185613e20565b6060880151610120880152608088015161014088015260a0880151935061449381880185613e62565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e08501526144f982850182613c7e565b90508381036020850152610200614511828751613c78565b60208601516145236020840182613a8d565b5060408601516145366040840182613a8d565b50606086015160608301526080860151608083015260a086015160a083015260c086015161456760c0840182613a8d565b5060e086015161457a60e0840182613a8d565b508583015192820192909252610120808601519082015261014080860151908201526101608086015190820152610180808601518183018490529092906145c382840182613c7e565b935050506101a0808601516145da82840182613e62565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561461757fe5b604052919050565b60006001600160401b0382111561463257fe5b5060209081020190565b60006001600160401b0382111561464f57fe5b50601f01601f191660200190565b60005b83811015614678578181015183820152602001614660565b838111156125d65750506000910152565b6001600160a01b038116811461229757600080fd5b801515811461229757600080fd5b6001600160e01b03198116811461229757600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200757283dc07c411443b1e1b6d7a36c58c05c1c146251b1933ac518ad9dd4f82064736f6c63430007060033", - "deployedBytecode": "0x6080604052600436106101435760003560e01c806386dcbd27116100b6578063bd4486ee1161006f578063bd4486ee14610319578063c9f0a2fa1461032e578063df6c255814610343578063f23a6e6114610358578063f2fde38b14610378578063fc40c9c7146103985761014a565b806386dcbd27146102875780638da5cb5b146102a75780639110c777146102bc578063a05f32dc146102d1578063b94ee332146102e6578063bc197c81146102f95761014a565b80633733b82b116101085780633733b82b1461020b5780633fc8cef3146102205780635c975abb146102355780635ea1e4c91461024a578063715018a61461025f57806386496e7a146102745761014a565b80628534f71461014f57806301ffc9a71461017a57806302329a29146101a7578063150b7a02146101c9578063349d6a85146101f65761014a565b3661014a57005b600080fd5b34801561015b57600080fd5b506101646103ad565b6040516101719190613e85565b60405180910390f35b34801561018657600080fd5b5061019a6101953660046136e6565b6103d1565b6040516101719190613f0e565b3480156101b357600080fd5b506101c76101c23660046136ae565b6103f4565b005b3480156101d557600080fd5b506101e96101e4366004613318565b61049d565b6040516101719190613f19565b34801561020257600080fd5b506101646104ad565b34801561021757600080fd5b506101646104d1565b34801561022c57600080fd5b506101646104f5565b34801561024157600080fd5b5061019a610519565b34801561025657600080fd5b50610164610522565b34801561026b57600080fd5b506101c7610546565b6101c761028236600461386a565b6105f2565b34801561029357600080fd5b506101c76102a23660046133e7565b6107bd565b3480156102b357600080fd5b506101646108fa565b3480156102c857600080fd5b50610164610909565b3480156102dd57600080fd5b5061016461092d565b6101c76102f43660046135f3565b610951565b34801561030557600080fd5b506101e961031436600461326f565b610bda565b34801561032557600080fd5b50610164610beb565b34801561033a57600080fd5b50610164610c0f565b34801561034f57600080fd5b50610164610c33565b34801561036457600080fd5b506101e9610373366004613381565b610c57565b34801561038457600080fd5b506101c7610393366004613253565b610c68565b3480156103a457600080fd5b50610164610d6a565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b6103fc610d8e565b6001600160a01b031661040d6108fa565b6001600160a01b031614610456576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61054e610d8e565b6001600160a01b031661055f6108fa565b6001600160a01b0316146105a8576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6105fa610d92565b600061060584610de5565b905080156106b8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610644610d8e565b30846040518463ffffffff1660e01b815260040161066493929190613e99565b602060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b691906136ca565b505b60006106c78560400151610eb0565b905060008080808460018111156106da57fe5b141561070b576106eb886000610ecc565b919450925090506106fc8288611de2565b6107068187611de2565b610766565b600184600181111561071957fe5b14156107455761072a886000611e0d565b9194509250905061073b82886121c9565b61070681876121c9565b60405162461bcd60e51b815260040161075d906140a2565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107959190613f0e565b60405180910390a16107a5612286565b84156107b3576107b361229a565b5050505050505050565b6107c5610d8e565b6001600160a01b03166107d66108fa565b6001600160a01b03161461081f576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b60005b818110156108f5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061086557fe5b905060200201602081019061087a9190613253565b6000196040518363ffffffff1660e01b815260040161089a929190613ef5565b602060405180830381600087803b1580156108b457600080fd5b505af11580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec91906136ca565b50600101610822565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610959610d92565b60008060008060008060005b8a518110156109965761098a8b828151811061097d57fe5b6020026020010151610de5565b90910190600101610965565b508015610a48577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109d4610d8e565b30846040518463ffffffff1660e01b81526004016109f493929190613e99565b602060405180830381600087803b158015610a0e57600080fd5b505af1158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4691906136ca565b505b60005b8a51811015610b72576000610a768c8381518110610a6557fe5b602002602001015160400151610eb0565b90506000808080846001811115610a8957fe5b1415610ad057610aac8f8681518110610a9e57fe5b60200260200101518d610ecc565b91945092509050610abd8b836123e8565b9a50610ac98a826123e8565b9950610b21565b6001846001811115610ade57fe5b141561074557610b018f8681518110610af357fe5b60200260200101518d611e0d565b91945092509050610b1289836123e8565b9850610b1e88826123e8565b97505b8680610b2a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b5b9190613f0e565b60405180910390a150505050806001019050610a4b565b5081610b905760405162461bcd60e51b815260040161075d906142b3565b610b9a868a611de2565b610ba48589611de2565b610bae848a6121c9565b610bb883896121c9565b610bc0612286565b8015610bce57610bce61229a565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c70610d8e565b6001600160a01b0316610c816108fa565b6001600160a01b031614610cca576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b6001600160a01b038116610d0f5760405162461bcd60e51b81526004018080602001828103825260268152602001806146c36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610de3576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610dfb8460400151610eb0565b90506001816001811115610e0b57fe5b1415610ea95760208401516040850151928101926000918291610e2d91612449565b91509150808285010193506000610e5187606001518860400151896000015161247a565b91505060005b8151811015610ea457600060a0838381518110610e7057fe5b6020026020010151901c90506000610e95828b6020015161253390919063ffffffff16565b97909701965050600101610e57565b505050505b5092915050565b6000603082901c61ffff166001811115610ec657fe5b92915050565b6000806000806000610eeb87606001518860400151896000015161247a565b60208901519193509150600288516009811115610f0457fe5b1415610fd25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f459190613e69565b60006040518083038185875af1925050503d8060008114610f82576040519150601f19603f3d011682016040523d82523d6000602084013e610f87565b606091505b505090508715610faf5780610faa57600080600096509650965050505050611ddb565b610fcc565b80610fcc5760405162461bcd60e51b815260040161075d90614108565b50611da9565b600188516009811115610fe157fe5b14156110a45760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516110229190613e69565b60006040518083038185875af1925050503d806000811461105f576040519150601f19603f3d011682016040523d82523d6000602084013e611064565b606091505b5050905087156110875780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90613f98565b6000885160098111156110b357fe5b14156111765760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516110f49190613e69565b60006040518083038185875af1925050503d8060008114611131576040519150601f19603f3d011682016040523d82523d6000602084013e611136565b606091505b5050905087156111595780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90614006565b60038851600981111561118557fe5b14156115c8576000838060200190518101906111a191906138c0565b9050871561123f5760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906111f7908590600401614318565b6000604051808303818588803b15801561121057600080fd5b505af193505050508015611222575060015b61123a57600080600096509650965050505050611ddb565b6112c0565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061128d908590600401614318565b6000604051808303818588803b1580156112a657600080fd5b505af11580156112ba573d6000803e3d6000fd5b50505050505b60005b8160200151518110156115c1576000826020015182815181106112e257fe5b602002602001015160200151905060008360200151838151811061130257fe5b602002602001015160400151905060008460000151838151811061132257fe5b60200260200101516101000151828151811061133a57fe5b602002602001015160200151905060008560000151848151811061135a57fe5b602002602001015160e0015151118015611390575060008560200151858151811061138157fe5b602002602001015160c0015151115b156113d6576113d681866020015186815181106113a957fe5b602002602001015160c00151876000015186815181106113c557fe5b602002602001015160e0015161254b565b84518051849081106113e457fe5b602002602001015160800151600114156114b95760008180602001905181019061140e9190613532565b905060005b81518110156114b257600082828151811061142a57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611450610d8e565b84602001516040518463ffffffff1660e01b815260040161147393929190613e99565b600060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505060019093019250611413915050565b50506115b3565b84518051849081106114c757fe5b6020026020010151608001516002141561159b576000818060200190518101906114f19190613455565b905060005b81518110156114b257600082828151811061150d57fe5b6020026020010151905080600001516001600160a01b031663f242432a30611533610d8e565b846020015185604001516040518563ffffffff1660e01b815260040161155c9493929190613ebd565b600060405180830381600087803b15801561157657600080fd5b505af115801561158a573d6000803e3d6000fd5b5050600190930192506114f6915050565b60405162461bcd60e51b815260040161075d906141e2565b5050508060010190506112c3565b5050611da9565b6004885160098111156115d757fe5b141561182c576000806000858060200190518101906115f69190613988565b925092509250891561169c57604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b296908690611652908790879060040161449f565b6000604051808303818588803b15801561166b57600080fd5b505af19350505050801561167d575060015b611697576000806000985098509850505050505050611ddb565b61171f565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b2969086906116ec908790879060040161449f565b6000604051808303818588803b15801561170557600080fd5b505af1158015611719573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117ae5781604001516001600160a01b03166342842e0e30611754610d8e565b85608001516040518463ffffffff1660e01b815260040161177793929190613e99565b600060405180830381600087803b15801561179157600080fd5b505af11580156117a5573d6000803e3d6000fd5b50505050611824565b6001600160e01b0319811663025ceed960e61b141561180c5781604001516001600160a01b031663f242432a306117e3610d8e565b85608001518660a001516040518563ffffffff1660e01b81526004016117779493929190613ebd565b60405162461bcd60e51b815260040161075d90614250565b505050611da9565b60058851600981111561183b57fe5b14156118fe5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316828560405161187c9190613e69565b60006040518083038185875af1925050503d80600081146118b9576040519150601f19603f3d011682016040523d82523d6000602084013e6118be565b606091505b5050905087156118e15780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d906141ab565b60068851600981111561190d57fe5b14156119d05760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316828560405161194e9190613e69565b60006040518083038185875af1925050503d806000811461198b576040519150601f19603f3d011682016040523d82523d6000602084013e611990565b606091505b5050905087156119b35780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90613fcf565b6007885160098111156119df57fe5b1415611aa25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a209190613e69565b60006040518083038185875af1925050503d8060008114611a5d576040519150601f19603f3d011682016040523d82523d6000602084013e611a62565b606091505b505090508715611a855780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90614219565b600888516009811115611ab157fe5b1415611cbf57600080600085806020019051810190611ad091906137f6565b9250925092508915611b7657604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b2c90879087906004016142ea565b6000604051808303818588803b158015611b4557600080fd5b505af193505050508015611b57575060015b611b71576000806000985098509850505050505050611ddb565b611bf9565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611bc690879087906004016142ea565b6000604051808303818588803b158015611bdf57600080fd5b505af1158015611bf3573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c58578251606001516001600160a01b03166342842e0e30611c2f610d8e565b8651608001516040516001600160e01b031960e086901b16815261177793929190600401613e99565b6001600160e01b0319811663025ceed960e61b141561180c578251606001516001600160a01b031663f242432a30611c8e610d8e565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117779493929190600401613ebd565b600988516009811115611cce57fe5b1415611d915760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d0f9190613e69565b60006040518083038185875af1925050503d8060008114611d4c576040519150601f19603f3d011682016040523d82523d6000602084013e611d51565b606091505b505090508715611d745780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d9061413f565b60405162461bcd60e51b815260040161075d90614074565b611db78289602001516125dc565b600080611dcc8a604001518b60200151612449565b60019950909750955050505050505b9250925092565b600082118015611dfa57506001600160a01b03811615155b15611e0957611e098183612665565b5050565b6000806000806000611e2c87606001518860400151896000015161247a565b9092509050600287516009811115611e4057fe5b1415611f0c5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611e809190613e69565b6000604051808303816000865af19150503d8060008114611ebd576040519150601f19603f3d011682016040523d82523d6000602084013e611ec2565b606091505b505090508615611ee95780611ee4576000806000955095509550505050611ddb565b611f06565b80611f065760405162461bcd60e51b815260040161075d90614176565b50612194565b600087516009811115611f1b57fe5b1415611fdc5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f5b9190613e69565b6000604051808303816000865af19150503d8060008114611f98576040519150601f19603f3d011682016040523d82523d6000602084013e611f9d565b606091505b505090508615611fbf5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d9061403d565b600687516009811115611feb57fe5b14156120ac5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168360405161202b9190613e69565b6000604051808303816000865af19150503d8060008114612068576040519150601f19603f3d011682016040523d82523d6000602084013e61206d565b606091505b50509050861561208f5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d90613f2e565b6009875160098111156120bb57fe5b141561217c5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516120fb9190613e69565b6000604051808303816000865af19150503d8060008114612138576040519150601f19603f3d011682016040523d82523d6000602084013e61213d565b606091505b50509050861561215f5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d90613f63565b60405162461bcd60e51b815260040161075d906140d9565b6121a28188602001516126fd565b6000806121b789604001518a60200151612449565b60019b919a5098509650505050505050565b6000821180156121e157506001600160a01b03811615155b15611e095760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906122349084908690600401613ef5565b602060405180830381600087803b15801561224e57600080fd5b505af1158015612262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f591906136ca565b478015612297576122973382612665565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906122e9903090600401613e85565b60206040518083038186803b15801561230157600080fd5b505afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190613a75565b90508015612297577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612378610d8e565b836040518363ffffffff1660e01b8152600401612396929190613ef5565b602060405180830381600087803b1580156123b057600080fd5b505af11580156123c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0991906136ca565b600082820183811015612442576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166124638583612533565b61246d8683612533565b9350935050509250929050565b6060806000602085901c61ffff16600181111561249357fe5b9050606060008260018111156124a557fe5b14156124b757869350915061252b9050565b60018260018111156124c557fe5b1415612513576000878060200190518101906124e19190613702565b90506124ec86612786565b1561250757806000015181602001519450945050505061252b565b519350915061252b9050565b60405162461bcd60e51b815260040161075d9061427c565b935093915050565b600061244261271061254585856127d8565b90612831565b815183511461255957600080fd5b805183511461256757600080fd5b60005b83518110156125d65781818151811061257f57fe5b01602001516001600160f81b031916156125ce5782818151811061259f57fe5b602001015160f81c60f81b8482815181106125b657fe5b60200101906001600160f81b031916908160001a9053505b60010161256a565b50505050565b60005b82518110156108f55760008382815181106125f657fe5b6020026020010151111561265d57600083828151811061261257fe5b60200260200101519050600060a085848151811061262c57fe5b6020026020010151901c9050600061264d828661253390919063ffffffff16565b90506126598184611de2565b5050505b6001016125df565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146126b0576040519150601f19603f3d011682016040523d82523d6000602084013e6126b5565b606091505b50509050806108f5576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156108f557600083828151811061271757fe5b6020026020010151111561277e57600083828151811061273357fe5b60200260200101519050600060a085848151811061274d57fe5b6020026020010151901c9050600061276e828661253390919063ffffffff16565b905061277a81846121c9565b5050505b600101612700565b6000600582600981111561279657fe5b14806127ad575060048260098111156127ab57fe5b145b806127c3575060078260098111156127c157fe5b145b156127d0575060016103ef565b506000919050565b6000826127e757506000610ec6565b828202828482816127f457fe5b04146124425760405162461bcd60e51b81526004018080602001828103825260218152602001806146e96021913960400191505060405180910390fd5b6000808211612887576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161289057fe5b049392505050565b80356103ef81614689565b80516103ef81614689565b600082601f8301126128be578081fd5b815160206128d36128ce8361461f565b6145fc565b828152818101908583016040808602880185018910156128f1578687fd5b865b8681101561295b5781838b031215612909578788fd5b81518281018181106001600160401b038211171561292357fe5b8352835161ffff8116811461293657898afd5b81528387015161294581614689565b81880152855293850193918101916001016128f3565b509198975050505050505050565b600082601f830112612979578081fd5b815160206129896128ce8361461f565b828152818101908583016040808602880185018910156129a7578687fd5b865b8681101561295b5781838b0312156129bf578788fd5b81518281018181106001600160401b03821117156129d957fe5b835283518152868401516129ec81614689565b81880152855293850193918101916001016129a9565b600082601f830112612a12578081fd5b81516020612a226128ce8361461f565b82815281810190858301855b85811015612aab5781518801604080601f19838d03011215612a4e578889fd5b80518181016001600160401b038282108183111715612a6957fe5b818452848a01518352928401519280841115612a83578b8cfd5b5050612a938c8984860101612df9565b81890152865250509284019290840190600101612a2e565b5090979650505050505050565b600082601f830112612ac8578081fd5b81516020612ad86128ce8361461f565b82815281810190858301855b85811015612aab57815188016101a080601f19838d03011215612b05578889fd5b612b0e816145fc565b878301518152612b20604084016128a3565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612b5860e084016128a3565b60c08201526101008301516001600160401b0380821115612b77578b8cfd5b612b858e8b84880101612df9565b60e084015261012091508185015181811115612b9f578c8dfd5b612bad8f8c83890101612a02565b610100850152505061014080850151828401526101609150818501518184015250610180612bdc818601613242565b82840152612beb848601613242565b9083015250865250509284019290840190600101612ae4565b600082601f830112612c14578081fd5b81516020612c246128ce8361461f565b82815281810190858301855b85811015612aab578151880161016080601f19838d03011215612c51578889fd5b612c5a816145fc565b612c65888401612e44565b815260408084015189830152606080850151828401526080915081850151818401525060a0808501518284015260c09150612ca18286016128a3565b9083015260e08401516001600160401b0380821115612cbe578c8dfd5b612ccc8f8c84890101612df9565b8385015261010092508286015160e0850152610120915081860151838501526101409250828601518285015284860151945080851115612d0a578c8dfd5b5050612d1a8d8a85870101612969565b90820152865250509284019290840190600101612c30565b600082601f830112612d42578081fd5b81356020612d526128ce8361461f565b8281528181019085830183850287018401881015612d6e578586fd5b855b85811015612aab57813584529284019290840190600101612d70565b80356103ef8161469e565b80516103ef8161469e565b80516103ef816146ac565b600082601f830112612dbd578081fd5b8135612dcb6128ce8261463c565b818152846020838601011115612ddf578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612e09578081fd5b8151612e176128ce8261463c565b818152846020838601011115612e2b578283fd5b612e3c82602083016020870161465d565b949350505050565b8051600881106103ef57600080fd5b8051600281106103ef57600080fd5b600060e08284031215612e73578081fd5b612e7d60e06145fc565b905081516001600160401b0380821115612e9657600080fd5b612ea285838601613026565b8352612eb060208501613242565b602084015260408401516040840152606084015160608401526080840151915080821115612edd57600080fd5b50612eea84828501612df9565b608083015250612efc60a08301612e53565b60a082015260c082015160c082015292915050565b6000610200808385031215612f24578182fd5b612f2d816145fc565b915050612f3982612d97565b8152612f47602083016128a3565b6020820152612f58604083016128a3565b6040820152606082015160608201526080820151608082015260a082015160a0820152612f8760c083016128a3565b60c0820152612f9860e083016128a3565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b03811115612fe457600080fd5b612ff085828601612df9565b8284015250506101a0613004818401613242565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a0808385031215613039578182fd5b613042816145fc565b91505061304e826128a3565b815261305c60208301612e53565b602082015261306d604083016128a3565b604082015261307e606083016128a3565b60608201526080820151608082015260a082015160a08201526130a360c083016128a3565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156130e457600080fd5b6130f0868387016128ae565b838501526101609250828501518385015261018092508285015191508082111561311957600080fd5b5061312685828601612df9565b82840152505092915050565b600060808284031215613143578081fd5b604051608081016001600160401b03828210818311171561316057fe5b8160405282935084359150600a821061317857600080fd5b818352602085013560208401526040850135604084015260608501359150808211156131a357600080fd5b506131b085828601612dad565b6060830152505092915050565b600060c082840312156131ce578081fd5b60405160c081018181106001600160401b03821117156131ea57fe5b806040525080915082518152602083015160208201526040830151604082015260608301516060820152608083015161322281614689565b608082015260a08301516132358161469e565b60a0919091015292915050565b805160ff811681146103ef57600080fd5b600060208284031215613264578081fd5b813561244281614689565b600080600080600060a08688031215613286578081fd5b853561329181614689565b945060208601356132a181614689565b935060408601356001600160401b03808211156132bc578283fd5b6132c889838a01612d32565b945060608801359150808211156132dd578283fd5b6132e989838a01612d32565b935060808801359150808211156132fe578283fd5b5061330b88828901612dad565b9150509295509295909350565b6000806000806080858703121561332d578182fd5b843561333881614689565b9350602085013561334881614689565b92506040850135915060608501356001600160401b03811115613369578182fd5b61337587828801612dad565b91505092959194509250565b600080600080600060a08688031215613398578283fd5b85356133a381614689565b945060208601356133b381614689565b9350604086013592506060860135915060808601356001600160401b038111156133db578182fd5b61330b88828901612dad565b600080602083850312156133f9578182fd5b82356001600160401b038082111561340f578384fd5b818501915085601f830112613422578384fd5b813581811115613430578485fd5b8660208083028501011115613443578485fd5b60209290920196919550909350505050565b60006020808385031215613467578182fd5b82516001600160401b038082111561347d578384fd5b818501915085601f830112613490578384fd5b815161349e6128ce8261461f565b818152848101908486016060808502870188018b10156134bc578889fd5b8896505b848710156135235780828c0312156134d6578889fd5b6040805182810181811089821117156134eb57fe5b825283516134f881614689565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906134c0565b50909998505050505050505050565b60006020808385031215613544578182fd5b82516001600160401b038082111561355a578384fd5b818501915085601f83011261356d578384fd5b815161357b6128ce8261461f565b818152848101908486016040808502870188018b1015613599578889fd5b8896505b848710156135235780828c0312156135b3578889fd5b805181810181811088821117156135c657fe5b825282516135d381614689565b81528289015189820152845260019690960195928701929081019061359d565b60008060008060808587031215613608578182fd5b84356001600160401b0381111561361d578283fd5b8501601f8101871361362d578283fd5b8035602061363d6128ce8361461f565b82815281810190848301875b85811015613672576136608d8684358a0101613132565b84529284019290840190600101613649565b50508098505050613684818901612898565b955050505061369560408601612898565b91506136a360608601612d8c565b905092959194509250565b6000602082840312156136bf578081fd5b81356124428161469e565b6000602082840312156136db578081fd5b81516124428161469e565b6000602082840312156136f7578081fd5b8135612442816146ac565b60006020808385031215613714578182fd5b82516001600160401b038082111561372a578384fd5b908401906040828703121561373d578384fd5b60405160408101818110838211171561375257fe5b604052825182811115613763578586fd5b61376f88828601612df9565b8252508383015182811115613782578586fd5b80840193505086601f840112613796578485fd5b825191506137a66128ce8361461f565b82815284810190848601868502860187018a10156137c2578788fd5b8795505b848610156137e45780518352600195909501949186019186016137c6565b50948201949094529695505050505050565b60008060006060848603121561380a578081fd5b83516001600160401b0380821115613820578283fd5b61382c87838801612e62565b94506020860151915080821115613841578283fd5b5061384e86828701612e62565b925050604084015161385f816146ac565b809150509250925092565b60008060006060848603121561387e578081fd5b83356001600160401b03811115613893578182fd5b61389f86828701613132565b93505060208401356138b081614689565b9150604084013561385f81614689565b6000602082840312156138d1578081fd5b81516001600160401b03808211156138e7578283fd5b9083019061016082860312156138fb578283fd5b61390560c06145fc565b825182811115613913578485fd5b61391f87828601612ab8565b825250602083015182811115613933578485fd5b61393f87828601612c04565b60208301525061395286604085016131bd565b60408201526101008301516060820152610120830151608082015261397a6101408401613242565b60a082015295945050505050565b60008060006060848603121561399c578081fd5b83516001600160401b03808211156139b2578283fd5b9085019060c082880312156139c5578283fd5b60405160c0810181811083821117156139da57fe5b6040526139e683612d97565b81526139f4602084016128a3565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613a28578485fd5b613a3489828601612df9565b60a0830152506020870151909550915080821115613a50578283fd5b50613a5d86828701612f11565b925050613a6c60408501612da2565b90509250925092565b600060208284031215613a86578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613ae1578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613aad565b509495945050505050565b6000815180845260208085019450808401835b83811015613ae1578151805188528301516001600160a01b03168388015260409096019590820190600101613aff565b60008282518085526020808601955080818302840101818601855b84811015612aab57858303601f190189528151805184528401516040858501819052613b7881860183613c7e565b9a86019a9450505090830190600101613b4a565b6000815180845260208085018081965082840281019150828601855b85811015613c6b5782840389528151610160613bc5868351613caa565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613bfd82890182613a8d565b505060c0808301518282890152613c1683890182613c7e565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613c57915082905083613aec565b9a87019a9550505090840190600101613ba8565b5091979650505050505050565b15159052565b60008151808452613c9681602086016020860161465d565b601f01601f19169290920160200192915050565b60088110613cb457fe5b9052565b60028110613cb457fe5b6000815160e08452613cd860e085018251613a8d565b6020810151610100613cec81870183613cb8565b60408301519150610120613d0281880184613a8d565b60608401519250610140613d1881890185613a8d565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613d4c818c0188613a8d565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613d876102808b0187613a9a565b918701516102408b01529095015188860360df19016102608a0152949350613db59250839150849050613c7e565b9150506020830151613dca6020860182613e62565b50604083015160408501526060830151606085015260808301518482036080860152613df68282613c7e565b91505060a0830151613e0b60a0860182613cb8565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b60008251613e7b81846020870161465d565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b6000604082526142fd6040830185613cc2565b828103602084015261430f8185613cc2565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614435578a820361019f19018452855180518352898101516143758b850182613a8d565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516143b082860182613a8d565b505060e08082015189828601526143c98a860182613c7e565b91505061010080830151858303828701526143e48382613b2f565b925050506101208083015181860152506101408083015181860152508682015161441088860182613e62565b509089015190614422848b0183613e62565b968a0196948a019492505060010161434d565b50968a0151898803601f190160408b0152966144518189613b8c565b97505050506040880151935061446a6060880185613e20565b6060880151610120880152608088015161014088015260a0880151935061449381880185613e62565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e08501526144f982850182613c7e565b90508381036020850152610200614511828751613c78565b60208601516145236020840182613a8d565b5060408601516145366040840182613a8d565b50606086015160608301526080860151608083015260a086015160a083015260c086015161456760c0840182613a8d565b5060e086015161457a60e0840182613a8d565b508583015192820192909252610120808601519082015261014080860151908201526101608086015190820152610180808601518183018490529092906145c382840182613c7e565b935050506101a0808601516145da82840182613e62565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561461757fe5b604052919050565b60006001600160401b0382111561463257fe5b5060209081020190565b60006001600160401b0382111561464f57fe5b50601f01601f191660200190565b60005b83811015614678578181015183820152602001614660565b838111156125d65750506000910152565b6001600160a01b038116811461229757600080fd5b801515811461229757600080fd5b6001600160e01b03198116811461229757600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200757283dc07c411443b1e1b6d7a36c58c05c1c146251b1933ac518ad9dd4f82064736f6c63430007060033", + "numDeployments": 2, + "solcInputHash": "5fd82e04a71dd28dcf06afe03af2d381", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[11]\",\"name\":\"marketplaces\",\"type\":\"address[11]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_6\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":\"RaribleExchangeWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165 is IERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n constructor () internal {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Receiver.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\ncontract ERC1155Holder is ERC1155Receiver {\\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155BatchReceived.selector;\\n }\\n}\\n\",\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155Receiver.sol\\\";\\nimport \\\"../../introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\\n constructor() internal {\\n _registerInterface(\\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n}\\n\",\"keccak256\":\"0x57a0e246fb1c8f9cccf91c508eafe474e40260a31de3a39019ba8312cfdf9b2d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155Receiver is IERC165 {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC721Receiver.sol\\\";\\n\\n /**\\n * @dev Implementation of the {IERC721Receiver} interface.\\n *\\n * Accepts all token transfers. \\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\\n */\\ncontract ERC721Holder is IERC721Receiver {\\n\\n /**\\n * @dev See {IERC721Receiver-onERC721Received}.\\n *\\n * Always returns `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n}\\n\",\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3a89b0a6ff66280e8e48f9f2c862d5c0e8ab23ee306ae5b204cd588931661a93\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n}\\n\",\"keccak256\":\"0xa9d02b9e22ffb9d25f412979951822d56b05d857de1f47ce82ad7b4a8d4601f6\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\\\";\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport \\\"./interfaces/IWyvernExchange.sol\\\";\\nimport \\\"./interfaces/IExchangeV2.sol\\\";\\nimport \\\"./interfaces/ISeaPort.sol\\\";\\nimport \\\"./interfaces/Ix2y2.sol\\\";\\nimport \\\"./interfaces/ILooksRare.sol\\\";\\nimport \\\"./interfaces/IBlur.sol\\\";\\n\\nimport \\\"./libraries/IsPausable.sol\\\";\\n\\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\\n using LibTransfer for address;\\n using BpLibrary for uint;\\n using SafeMath for uint;\\n\\n //marketplaces\\n address public immutable wyvernExchange;\\n address public immutable exchangeV2;\\n address public immutable seaPort_1_1;\\n address public immutable x2y2;\\n address public immutable looksRare;\\n address public immutable sudoswap;\\n address public immutable seaPort_1_4;\\n address public immutable looksRareV2;\\n address public immutable blur;\\n address public immutable seaPort_1_5;\\n address public immutable seaPort_1_6;\\n\\n //currencties\\n address public immutable weth;\\n\\n //constants\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n event Execution(bool result);\\n\\n enum Markets {\\n ExchangeV2,//0\\n WyvernExchange,//1\\n SeaPort_1_1,//2\\n X2Y2,//3\\n LooksRareOrders,//4\\n SudoSwap,//5\\n SeaPort_1_4,//6\\n LooksRareV2,//7\\n Blur,//8\\n SeaPort_1_5,//9\\n SeaPort_1_6//10\\n }\\n\\n enum AdditionalDataTypes {\\n NoAdditionalData,\\n RoyaltiesAdditionalData\\n }\\n\\n enum Currencies {\\n ETH,\\n WETH\\n }\\n\\n /**\\n @notice struct for the purchase data\\n @param marketId - market key from Markets enum (what market to use)\\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\\n bytes (27,28) used for dataType\\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\\n @param data - data for market call\\n */\\n struct PurchaseDetails {\\n Markets marketId;\\n uint256 amount;\\n uint fees;\\n bytes data;\\n }\\n\\n /**\\n @notice struct for the data with additional Ddta\\n @param data - data for market call\\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\\n */\\n struct AdditionalData {\\n bytes data;\\n uint[] additionalRoyalties;\\n }\\n\\n constructor(\\n address[11] memory marketplaces,\\n //address _wyvernExchange, 0\\n //address _exchangeV2, 1\\n //address _seaPort_1_1, 2\\n //address _x2y2, 3\\n //address _looksRare, 4\\n //address _sudoswap, 5\\n //address _seaPort_1_4, 6\\n //address _looksRareV2, 7\\n //address _blur, 8\\n //address _seaPort_1_5, 9\\n //address _seaPort_1_6, 10\\n address _weth,\\n address[] memory transferProxies\\n ) {\\n wyvernExchange = marketplaces[0];\\n exchangeV2 = marketplaces[1];\\n seaPort_1_1 = marketplaces[2];\\n x2y2 = marketplaces[3];\\n looksRare = marketplaces[4];\\n sudoswap = marketplaces[5];\\n seaPort_1_4 = marketplaces[6];\\n looksRareV2 = marketplaces[7];\\n blur = marketplaces[8];\\n seaPort_1_5 = marketplaces[9];\\n seaPort_1_6 = marketplaces[10];\\n\\n weth = _weth;\\n\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n if (_weth != address(0)){\\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n }\\n\\n /**\\n @notice executes a single purchase\\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n */\\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\\n requireNotPaused();\\n \\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\\n \\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n Currencies currency = getCurrency(purchaseDetails.fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n emit Execution(success);\\n \\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes an array of purchases\\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\\n */\\n \\n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\\n requireNotPaused();\\n\\n uint sumFirstFeesETH = 0;\\n uint sumSecondFeesETH = 0;\\n uint sumFirstFeesWETH = 0;\\n uint sumSecondFeesWETH = 0;\\n bool result = false;\\n\\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = 0;\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\\n }\\n\\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n Currencies currency = getCurrency(purchaseDetails[i].fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n result = result || success;\\n emit Execution(success);\\n }\\n\\n require(result, \\\"no successful executions\\\");\\n\\n //pay fees in ETH \\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\\n\\n //pay fees in WETH\\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\\n\\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes one purchase in ETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n uint paymentAmount = purchaseDetails.amount;\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase wyvernExchange failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\\n\\n if (allowFail) {\\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n Ix2y2(x2y2).run{value : paymentAmount}(input);\\n }\\n\\n //for every element in input.details[] getting\\n // order = input.details[i].orderIdx\\n // and from that order getting item = input.details[i].itemId\\n for (uint i = 0; i < input.details.length; ++i) {\\n uint orderId = input.details[i].orderIdx;\\n uint itemId = input.details[i].itemIdx;\\n bytes memory data = input.orders[orderId].items[itemId].data;\\n {\\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\\n }\\n }\\n\\n // 1 = erc-721\\n if (input.orders[orderId].delegateType == 1) {\\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair721 memory p = pairs[j];\\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\\n }\\n } else if (input.orders[orderId].delegateType == 2) {\\n // 2 = erc-1155\\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair1155 memory p = pairs[j];\\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \\\"\\\");\\n }\\n } else {\\n revert(\\\"unknown delegateType x2y2\\\");\\n }\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\\n if (allowFail) {\\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase sudoswap failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase LooksRareV2 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.Blur){\\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\\n if (allowFail) {\\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId ETH\\\");\\n }\\n\\n //transferring royalties\\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\\n \\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice executes one purchase in WETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n\\n //buying\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed WETH\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId WETH\\\");\\n }\\n \\n //transfer royalties\\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\\n\\n //get fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice transfers ETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n LibTransfer.transferEth(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers WETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers change back to sender\\n */\\n function transferChange() internal {\\n uint ethAmount = address(this).balance;\\n if (ethAmount > 0) {\\n address(msg.sender).transferEth(ethAmount);\\n }\\n }\\n\\n /**\\n @notice transfers weth change back to sender\\n */\\n function transferChangeWETH() internal {\\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\\n if (wethAmount > 0) {\\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\\n }\\n }\\n\\n /**\\n @notice parses fees in base points from one uint and calculates real amount of fees\\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\\n @param amount price of the order\\n @return firstFeeAmount real amount for the first fee\\n @return secondFeeAmount real amount for the second fee\\n */\\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\\n uint firstFee = uint(uint16(fees >> 16));\\n uint secondFee = uint(uint16(fees));\\n return (amount.bp(firstFee), amount.bp(secondFee));\\n }\\n\\n /**\\n @notice parses \\\"fees\\\" field to find the currency for the purchase\\n @param fees field with encoded data\\n @return 0 if ETH, 1 if WETH ERC-20\\n */\\n function getCurrency(uint fees) internal pure returns(Currencies) {\\n return Currencies(uint16(fees >> 48));\\n }\\n\\n\\n /**\\n @notice parses _data to data for market call and additionalData\\n @param feesAndDataType 27 and 28 bytes for dataType\\n @return marketData data for market call\\n @return additionalRoyalties array uint256, (base point + address)\\n */\\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\\n uint[] memory additionalRoyalties;\\n\\n //return no royalties if wrong data type\\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\\n return (_data, additionalRoyalties);\\n }\\n\\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\\n\\n //return no royalties if market doesn't support royalties\\n if (supportsRoyalties(marketId)) {\\n return (additionalData.data, additionalData.additionalRoyalties);\\n } else {\\n return (additionalData.data, additionalRoyalties);\\n } \\n }\\n \\n revert(\\\"unknown additionalDataType\\\");\\n }\\n\\n /**\\n @notice transfer additional royalties in ETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeETH(value, account);\\n }\\n }\\n }\\n\\n /**\\n @notice transfer additional royalties in WETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeWETH(value, account);\\n }\\n }\\n }\\n\\n // modifies `src`\\n function _arrayReplace(\\n bytes memory src,\\n bytes memory replacement,\\n bytes memory mask\\n ) internal view virtual {\\n require(src.length == replacement.length);\\n require(src.length == mask.length);\\n\\n for (uint256 i = 0; i < src.length; ++i) {\\n if (mask[i] != 0) {\\n src[i] = replacement[i];\\n }\\n }\\n }\\n\\n /**\\n @notice returns true if this contract supports additional royalties for the marketplace;\\n now royalties are supported for:\\n 1. SudoSwap\\n 2. LooksRare old\\n 3. LooksRare V2\\n */\\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\\n if (\\n marketId == Markets.SudoSwap ||\\n marketId == Markets.LooksRareOrders ||\\n marketId == Markets.LooksRareV2\\n ) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\\n uint result = 0;\\n\\n Currencies currency = getCurrency(detail.fees);\\n\\n //for every purchase with WETH we sum amount, fees and royalties needed\\n if (currency == Currencies.WETH) {\\n\\n //add amount\\n result = result + detail.amount;\\n\\n //add fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\\n result = result + firstFeeAmount + secondFeeAmount;\\n\\n //add royalties\\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\\n for (uint j = 0; j < royalties.length; ++j) {\\n uint royaltyBasePoint = uint(royalties[j] >> 160);\\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\\n result = result + royaltyValue;\\n }\\n }\\n\\n return result;\\n }\\n\\n /**\\n @notice approves weth for a list of the addresses\\n @param transferProxies - array of addresses to approve WETH for\\n */\\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n receive() external payable {}\\n}\",\"keccak256\":\"0xe2bc3642e9df1b789a04dadbb81842deef698616ecc68aa2a4d89252dda77783\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\n\\ninterface IBlur {\\n enum Side { Buy, Sell }\\n enum SignatureVersion { Single, Bulk }\\n enum AssetType { ERC721, ERC1155 }\\n\\n struct Fee {\\n uint16 rate;\\n address payable recipient;\\n }\\n \\n struct Order {\\n address trader;\\n Side side;\\n address matchingPolicy;\\n address collection;\\n uint256 tokenId;\\n uint256 amount;\\n address paymentToken;\\n uint256 price;\\n uint256 listingTime;\\n /* Order expiration timestamp - 0 for oracle cancellations. */\\n uint256 expirationTime;\\n Fee[] fees;\\n uint256 salt;\\n bytes extraParams;\\n }\\n\\n struct Input {\\n Order order;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n bytes extraSignature;\\n SignatureVersion signatureVersion;\\n uint256 blockNumber;\\n }\\n\\n function execute(Input calldata sell, Input calldata buy)\\n external\\n payable;\\n}\\n\",\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-v2/contracts/ExchangeV2.sol\\\";\\n\\nimport {RoyaltiesRegistry} from \\\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\\\";\\nimport {TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\\\";\\nimport {ERC20TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\\\";\\n\\ninterface IExchangeV2 {\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable;\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable;\\n}\",\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibLooksRare.sol\\\";\\n\\ninterface ILooksRare {\\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\\n\\n /**\\n * @notice This function allows a user to execute a taker bid (against a maker ask).\\n * @param takerBid Taker bid struct\\n * @param makerAsk Maker ask struct\\n * @param makerSignature Maker signature\\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\\n * @param affiliate Affiliate address\\n */\\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\\n}\\n\",\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibSeaPort.sol\\\";\\n\\ninterface ISeaPort {\\n function fulfillAdvancedOrder(\\n LibSeaPort.AdvancedOrder calldata advancedOrder,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n bytes32 fulfillerConduitKey,\\n address recipient\\n ) external payable returns (bool fulfilled);\\n\\n function fulfillAvailableAdvancedOrders(\\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\\n bytes32 fulfillerConduitKey,\\n address recipient,\\n uint256 maximumFulfilled\\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\\n\\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\\n external\\n payable\\n returns (bool fulfilled);\\n}\",\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface IWyvernExchange {\\n function atomicMatch_(\\n address[14] memory addrs,\\n uint[18] memory uints,\\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\\n bytes memory calldataBuy,\\n bytes memory calldataSell,\\n bytes memory replacementPatternBuy,\\n bytes memory replacementPatternSell,\\n bytes memory staticExtradataBuy,\\n bytes memory staticExtradataSell,\\n uint8[2] memory vs,\\n bytes32[5] memory rssMetadata)\\n external\\n payable;\\n\\n enum Side {\\n Buy,\\n Sell\\n }\\n\\n enum SaleKind {\\n FixedPrice,\\n DutchAuction\\n }\\n\\n function calculateFinalPrice(\\n Side side,\\n SaleKind saleKind,\\n uint256 basePrice,\\n uint256 extra,\\n uint256 listingTime,\\n uint256 expirationTime\\n ) external view returns (uint256);\\n}\",\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface Ix2y2 {\\n\\n struct OrderItem {\\n uint256 price;\\n bytes data;\\n }\\n\\n struct Pair721 {\\n address token;\\n uint256 tokenId;\\n }\\n\\n struct Pair1155 {\\n address token;\\n uint256 tokenId;\\n uint256 amount;\\n }\\n\\n struct Order {\\n uint256 salt;\\n address user;\\n uint256 network;\\n uint256 intent;\\n uint256 delegateType;\\n uint256 deadline;\\n address currency;\\n bytes dataMask;\\n OrderItem[] items;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n uint8 signVersion;\\n }\\n\\n struct Fee {\\n uint256 percentage;\\n address to;\\n }\\n\\n struct SettleDetail {\\n Op op;\\n uint256 orderIdx;\\n uint256 itemIdx;\\n uint256 price;\\n bytes32 itemHash;\\n address executionDelegate;\\n bytes dataReplacement;\\n uint256 bidIncentivePct;\\n uint256 aucMinIncrementPct;\\n uint256 aucIncDurationSecs;\\n Fee[] fees;\\n }\\n\\n struct SettleShared {\\n uint256 salt;\\n uint256 deadline;\\n uint256 amountToEth;\\n uint256 amountToWeth;\\n address user;\\n bool canFail;\\n }\\n\\n struct RunInput {\\n Order[] orders;\\n SettleDetail[] details;\\n SettleShared shared;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n }\\n\\n enum Op {\\n INVALID,\\n // off-chain\\n COMPLETE_SELL_OFFER,\\n COMPLETE_BUY_OFFER,\\n CANCEL_OFFER,\\n // auction\\n BID,\\n COMPLETE_AUCTION,\\n REFUND_AUCTION,\\n REFUND_AUCTION_STUCK_ITEM\\n }\\n\\n function run(RunInput memory input) external payable;\\n}\",\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nabstract contract IsPausable is Ownable {\\n bool public paused;\\n\\n event Paused(bool paused);\\n\\n function pause(bool _paused) external onlyOwner {\\n paused = _paused;\\n emit Paused(_paused);\\n }\\n\\n function requireNotPaused() internal view {\\n require (!paused, \\\"the contract is paused\\\");\\n }\\n\\n}\\n\",\"keccak256\":\"0xd0ea1d6838dd79b8cfe64e777e4f84456928f0e3621fbb6acd00492e738b2b61\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibLooksRare {\\n struct MakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address signer; // signer of the maker order\\n address collection; // collection address\\n uint256 price; // price (used as )\\n uint256 tokenId; // id of the token\\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\\n address currency; // currency (e.g., WETH)\\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\\n uint256 startTime; // startTime in timestamp\\n uint256 endTime; // endTime in timestamp\\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // additional parameters\\n uint8 v; // v: parameter (27 or 28)\\n bytes32 r; // r: parameter\\n bytes32 s; // s: parameter\\n }\\n\\n struct TakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address taker; // msg.sender\\n uint256 price; // final price for the purchase\\n uint256 tokenId;\\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // other params (e.g., tokenId)\\n }\\n\\n /**\\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\\n */\\n enum CollectionType {\\n ERC721,\\n ERC1155\\n }\\n\\n /**\\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\\n */\\n enum QuoteType {\\n Bid,\\n Ask\\n }\\n /**\\n * 1. Maker struct\\n */\\n\\n /**\\n * @notice Maker is the struct for a maker order.\\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\\n * @param globalNonce Global user order nonce for maker orders\\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\\n * @param strategyId Strategy id\\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\\n * @param collection Collection address\\n * @param currency Currency address (@dev address(0) = ETH)\\n * @param signer Signer address\\n * @param startTime Start timestamp\\n * @param endTime End timestamp\\n * @param price Minimum price for maker ask, maximum price for maker bid\\n * @param itemIds Array of itemIds\\n * @param amounts Array of amounts\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Maker {\\n QuoteType quoteType;\\n uint256 globalNonce;\\n uint256 subsetNonce;\\n uint256 orderNonce;\\n uint256 strategyId;\\n CollectionType collectionType;\\n address collection;\\n address currency;\\n address signer;\\n uint256 startTime;\\n uint256 endTime;\\n uint256 price;\\n uint256[] itemIds;\\n uint256[] amounts;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 2. Taker struct\\n */\\n\\n /**\\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Taker {\\n address recipient;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 3. Merkle tree struct\\n */\\n\\n enum MerkleTreeNodePosition {\\n Left,\\n Right\\n }\\n\\n /**\\n * @notice MerkleTreeNode is a MerkleTree's node.\\n * @param value It can be an order hash or a proof\\n * @param position The node's position in its branch.\\n * It can be left or right or none\\n * (before the tree is sorted).\\n */\\n struct MerkleTreeNode {\\n bytes32 value;\\n MerkleTreeNodePosition position;\\n }\\n\\n /**\\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\\n * @dev A Merkle tree can be computed with order hashes.\\n * It can contain order hashes from both maker bid and maker ask structs.\\n * @param root Merkle root\\n * @param proof Array containing the merkle proof\\n */\\n struct MerkleTree {\\n bytes32 root;\\n MerkleTreeNode[] proof;\\n }\\n}\\n\",\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibSeaPort {\\n /**\\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\\n * matching, a group of six functions may be called that only requires a\\n * subset of the usual order arguments. Note the use of a \\\"basicOrderType\\\"\\n * enum; this represents both the usual order type as well as the \\\"route\\\"\\n * of the basic order (a simple derivation function for the basic order\\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\\n */\\n struct BasicOrderParameters {\\n address considerationToken; // 0x24\\n uint256 considerationIdentifier; // 0x44\\n uint256 considerationAmount; // 0x64\\n address payable offerer; // 0x84\\n address zone; // 0xa4\\n address offerToken; // 0xc4\\n uint256 offerIdentifier; // 0xe4\\n uint256 offerAmount; // 0x104\\n BasicOrderType basicOrderType; // 0x124\\n uint256 startTime; // 0x144\\n uint256 endTime; // 0x164\\n bytes32 zoneHash; // 0x184\\n uint256 salt; // 0x1a4\\n bytes32 offererConduitKey; // 0x1c4\\n bytes32 fulfillerConduitKey; // 0x1e4\\n uint256 totalOriginalAdditionalRecipients; // 0x204\\n AdditionalRecipient[] additionalRecipients; // 0x224\\n bytes signature; // 0x244\\n }\\n /**\\n * @dev Basic orders can supply any number of additional recipients, with the\\n * implied assumption that they are supplied from the offered ETH (or other\\n * native token) or ERC20 token for the order.\\n */\\n struct AdditionalRecipient {\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum BasicOrderType {\\n // 0: no partial fills, anyone can execute\\n ETH_TO_ERC721_FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n ETH_TO_ERC721_PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC721_FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 4: no partial fills, anyone can execute\\n ETH_TO_ERC1155_FULL_OPEN,\\n\\n // 5: partial fills supported, anyone can execute\\n ETH_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 6: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 7: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 8: no partial fills, anyone can execute\\n ERC20_TO_ERC721_FULL_OPEN,\\n\\n // 9: partial fills supported, anyone can execute\\n ERC20_TO_ERC721_PARTIAL_OPEN,\\n\\n // 10: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC721_FULL_RESTRICTED,\\n\\n // 11: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 12: no partial fills, anyone can execute\\n ERC20_TO_ERC1155_FULL_OPEN,\\n\\n // 13: partial fills supported, anyone can execute\\n ERC20_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 14: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 15: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 16: no partial fills, anyone can execute\\n ERC721_TO_ERC20_FULL_OPEN,\\n\\n // 17: partial fills supported, anyone can execute\\n ERC721_TO_ERC20_PARTIAL_OPEN,\\n\\n // 18: no partial fills, only offerer or zone can execute\\n ERC721_TO_ERC20_FULL_RESTRICTED,\\n\\n // 19: partial fills supported, only offerer or zone can execute\\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\\n\\n // 20: no partial fills, anyone can execute\\n ERC1155_TO_ERC20_FULL_OPEN,\\n\\n // 21: partial fills supported, anyone can execute\\n ERC1155_TO_ERC20_PARTIAL_OPEN,\\n\\n // 22: no partial fills, only offerer or zone can execute\\n ERC1155_TO_ERC20_FULL_RESTRICTED,\\n\\n // 23: partial fills supported, only offerer or zone can execute\\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\\n }\\n\\n /**\\n * @dev The full set of order components, with the exception of the counter,\\n * must be supplied when fulfilling more sophisticated orders or groups of\\n * orders. The total number of original consideration items must also be\\n * supplied, as the caller may specify additional consideration items.\\n */\\n struct OrderParameters {\\n address offerer; // 0x00\\n address zone; // 0x20\\n OfferItem[] offer; // 0x40\\n ConsiderationItem[] consideration; // 0x60\\n OrderType orderType; // 0x80\\n uint256 startTime; // 0xa0\\n uint256 endTime; // 0xc0\\n bytes32 zoneHash; // 0xe0\\n uint256 salt; // 0x100\\n bytes32 conduitKey; // 0x120\\n uint256 totalOriginalConsiderationItems; // 0x140\\n // offer.length // 0x160\\n }\\n\\n /**\\n * @dev Orders require a signature in addition to the other order parameters.\\n */\\n struct Order {\\n OrderParameters parameters;\\n bytes signature;\\n }\\n\\n struct AdvancedOrder {\\n OrderParameters parameters;\\n uint120 numerator;\\n uint120 denominator;\\n bytes signature;\\n bytes extraData;\\n }\\n\\n struct OfferItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n }\\n\\n /**\\n * @dev A consideration item has the same five components as an offer item and\\n * an additional sixth component designating the required recipient of the\\n * item.\\n */\\n struct ConsiderationItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum OrderType {\\n // 0: no partial fills, anyone can execute\\n FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n PARTIAL_RESTRICTED\\n }\\n\\n // prettier-ignore\\n enum ItemType {\\n // 0: ETH on mainnet, MATIC on polygon, etc.\\n NATIVE,\\n\\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\\n ERC20,\\n\\n // 2: ERC721 items\\n ERC721,\\n\\n // 3: ERC1155 items\\n ERC1155,\\n\\n // 4: ERC721 items where a number of tokenIds are supported\\n ERC721_WITH_CRITERIA,\\n\\n // 5: ERC1155 items where a number of ids are supported\\n ERC1155_WITH_CRITERIA\\n }\\n\\n /**\\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\\n * offer and consideration items, then generates a single execution\\n * element. A given fulfillment can be applied to as many offer and\\n * consideration items as desired, but must contain at least one offer and\\n * at least one consideration that match. The fulfillment must also remain\\n * consistent on all key parameters across all offer items (same offerer,\\n * token, type, tokenId, and conduit preference) as well as across all\\n * consideration items (token, type, tokenId, and recipient).\\n */\\n struct Fulfillment {\\n FulfillmentComponent[] offerComponents;\\n FulfillmentComponent[] considerationComponents;\\n }\\n\\n /**\\n * @dev Each fulfillment component contains one index referencing a specific\\n * order and another referencing a specific offer or consideration item.\\n */\\n struct FulfillmentComponent {\\n uint256 orderIndex;\\n uint256 itemIndex;\\n }\\n\\n /**\\n * @dev An execution is triggered once all consideration items have been zeroed\\n * out. It sends the item in question from the offerer to the item's\\n * recipient, optionally sourcing approvals from either this contract\\n * directly or from the offerer's chosen conduit if one is specified. An\\n * execution is not provided as an argument, but rather is derived via\\n * orders, criteria resolvers, and fulfillments (where the total number of\\n * executions will be less than or equal to the total number of indicated\\n * fulfillments) and returned as part of `matchOrders`.\\n */\\n struct Execution {\\n ReceivedItem item;\\n address offerer;\\n bytes32 conduitKey;\\n }\\n\\n /**\\n * @dev A received item is translated from a utilized consideration item and has\\n * the same four components as a spent item, as well as an additional fifth\\n * component designating the required recipient of the item.\\n */\\n struct ReceivedItem {\\n ItemType itemType;\\n address token;\\n uint256 identifier;\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n struct CriteriaResolver {\\n uint256 orderIndex;\\n Side side;\\n uint256 index;\\n uint256 identifier;\\n bytes32[] criteriaProof;\\n }\\n\\n // prettier-ignore\\n enum Side {\\n // 0: Items that can be spent\\n OFFER,\\n\\n // 1: Items that must be received\\n CONSIDERATION\\n }\\n}\\n\",\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x7f99c2e0828bbba57e1599d92f1368b62ef0e9cd62bda3c4091e108d1fbc35b6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x5e982ad688493d9c729757c2ebd98efecd0bf3b33992f7342edf6c349874b86c\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x363fa1f25a41aa7d7b3fb9e2d182dec04c3774d06d9eed428b3fe48140fa4b7e\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x87cd179c900495ee44c1b9c7fa57f4da0228217d78792bd6d6a6fde6c32be2b2\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6102006040523480156200001257600080fd5b5060405162004f4738038062004f47833981016040819052620000359162000352565b6000620000416200021e565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200009d6301ffc9a760e01b62000222565b620000af630271189760e51b62000222565b82516001600160601b0319606091821b811660809081526020860151831b821660a09081526040870151841b831660c090815284880151851b841660e090815292880151851b841661010090815291880151851b841661012090815290880151851b841661014090815292880151851b84166101605290870151841b831661018052860151831b82166101a052850151821b81166101c0529083901b166101e05260005b815181101562000214576001600160a01b038316156200020b57826001600160a01b031663095ea7b38383815181106200018957fe5b60200260200101516000196040518363ffffffff1660e01b8152600401620001b392919062000437565b602060405180830381600087803b158015620001ce57600080fd5b505af1158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020991906200040e565b505b60010162000153565b5050505062000474565b3390565b6001600160e01b0319808216141562000282576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b80516001600160a01b0381168114620002c257600080fd5b919050565b600082601f830112620002d8578081fd5b815160206001600160401b03821115620002ee57fe5b808202620002fe82820162000450565b83815282810190868401838801850189101562000319578687fd5b8693505b8584101562000346576200033181620002aa565b8352600193909301929184019184016200031d565b50979650505050505050565b60008060006101a0848603121562000368578283fd5b84601f85011262000377578283fd5b610160620003858162000450565b9085019080868884111562000398578687fd5b865b600b811015620003c557620003af82620002aa565b845260209384019391909101906001016200039a565b50508095505050620003d781620002aa565b61018086015190935090506001600160401b03811115620003f6578182fd5b6200040486828701620002c7565b9150509250925092565b60006020828403121562000420578081fd5b8151801515811462000430578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b03811182821017156200046c57fe5b604052919050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6149ac6200059b60003980610517528061062f528061084c52806109bf52806123e3528061249a5280612529525080610d8c5280611dee52806122ab5250806104cf5280611d1c52806121db525080610c555280611b375280611bd15250806104f35280611a2d525080610c0d528061195b528061210b525080610544528061188952508061092b528061165d52806116f7525080610db05280611204528061129a5250806103cf5280610f525280611f6052508061094f5280611101528061203b525080610c31528061102f52506149ac6000f3fe60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204ccd56ab995869fdbc4ed21f23f9fabaa9ca715a97c76cb58a753eac8de130ff64736f6c63430007060033", + "deployedBytecode": "0x60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204ccd56ab995869fdbc4ed21f23f9fabaa9ca715a97c76cb58a753eac8de130ff64736f6c63430007060033", "devdoc": { "kind": "dev", "methods": { @@ -657,7 +671,7 @@ "type": "t_mapping(t_bytes4,t_bool)" }, { - "astId": 17235, + "astId": 17316, "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", "label": "paused", "offset": 0, diff --git a/projects/hardhat-deploy/deployments/polygon_amoy_testnet/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json b/projects/hardhat-deploy/deployments/polygon_amoy_testnet/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json new file mode 100644 index 000000000..ce8ca1d7b --- /dev/null +++ b/projects/hardhat-deploy/deployments/polygon_amoy_testnet/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json @@ -0,0 +1,617 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal initializer {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712Upgradeable is Initializable {\n /* solhint-disable var-name-mixedcase */\n bytes32 private _HASHED_NAME;\n bytes32 private _HASHED_VERSION;\n bytes32 private constant _TYPE_HASH = keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n function __EIP712_init(string memory name, string memory version) internal initializer {\n __EIP712_init_unchained(name, version);\n }\n\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\n }\n\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\n return keccak256(\n abi.encode(\n typeHash,\n name,\n version,\n _getChainId(),\n address(this)\n )\n );\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n }\n\n function _getChainId() private view returns (uint256 chainId) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n\n /**\n * @dev The hash of the name parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712NameHash() internal virtual view returns (bytes32) {\n return _HASHED_NAME;\n }\n\n /**\n * @dev The hash of the version parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\n return _HASHED_VERSION;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165Upgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n function __ERC165_init() internal initializer {\n __ERC165_init_unchained();\n }\n\n function __ERC165_init_unchained() internal initializer {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165Upgradeable {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\n// solhint-disable-next-line compiler-version\npragma solidity >=0.4.24 <0.8.0;\n\nimport \"../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n */\nabstract contract Initializable {\n\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(_initializing || _isConstructor() || !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /// @dev Returns true if and only if the function is running in the constructor\n function _isConstructor() private view returns (bool) {\n return !AddressUpgradeable.isContract(address(this));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155HolderUpgradeable is Initializable, ERC1155ReceiverUpgradeable {\n function __ERC1155Holder_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ERC1155Holder_init_unchained();\n }\n\n function __ERC1155Holder_init_unchained() internal initializer {\n }\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\n function __ERC1155Receiver_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n }\n\n function __ERC1155Receiver_init_unchained() internal initializer {\n _registerInterface(\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\n );\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\nimport \"./IERC1155MetadataURIUpgradeable.sol\";\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC20Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable {\n using SafeMathUpgradeable for uint256;\n\n mapping (address => uint256) private _balances;\n\n mapping (address => mapping (address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n * a default value of 18.\n *\n * To select a different value for {decimals}, use {_setupDecimals}.\n *\n * All three of these values are immutable: they can only be set once during\n * construction.\n */\n function __ERC20_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC20_init_unchained(name_, symbol_);\n }\n\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n _decimals = 18;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n * called.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return _decimals;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * Requirements:\n *\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n * - the caller must have allowance for ``sender``'s tokens of at least\n * `amount`.\n */\n function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n /**\n * @dev Moves tokens `amount` from `sender` to `recipient`.\n *\n * This is internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: mint to the zero address\");\n\n _beforeTokenTransfer(address(0), account, amount);\n\n _totalSupply = _totalSupply.add(amount);\n _balances[account] = _balances[account].add(amount);\n emit Transfer(address(0), account, amount);\n }\n\n /**\n * @dev Destroys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: burn from the zero address\");\n\n _beforeTokenTransfer(account, address(0), amount);\n\n _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n _totalSupply = _totalSupply.sub(amount);\n emit Transfer(account, address(0), amount);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(address owner, address spender, uint256 amount) internal virtual {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Sets {decimals} to a value other than the default one of 18.\n *\n * WARNING: This function should only be called from the constructor. Most\n * applications that interact with token contracts will not expect\n * {decimals} to ever change, and may work incorrectly if it does.\n */\n function _setupDecimals(uint8 decimals_) internal virtual {\n _decimals = decimals_;\n }\n\n /**\n * @dev Hook that is called before any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * will be to transferred to `to`.\n * - when `from` is zero, `amount` tokens will be minted for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n uint256[44] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20Upgradeable {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721HolderUpgradeable is Initializable, IERC721ReceiverUpgradeable {\n function __ERC721Holder_init() internal initializer {\n __ERC721Holder_init_unchained();\n }\n\n function __ERC721Holder_init_unchained() internal initializer {\n }\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC721Upgradeable.sol\";\nimport \"./IERC721MetadataUpgradeable.sol\";\nimport \"./IERC721EnumerableUpgradeable.sol\";\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../utils/EnumerableSetUpgradeable.sol\";\nimport \"../../utils/EnumerableMapUpgradeable.sol\";\nimport \"../../utils/StringsUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) private _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap private _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits an {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[41] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721EnumerableUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the total amount of tokens stored by the contract.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);\n\n /**\n * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n * Use along with {totalSupply} to enumerate all tokens.\n */\n function tokenByIndex(uint256 index) external view returns (uint256);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721ReceiverUpgradeable {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the caller.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool _approved) external;\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal initializer {\n __Context_init_unchained();\n }\n\n function __Context_init_unchained() internal initializer {\n }\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing an enumerable variant of Solidity's\n * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]\n * type.\n *\n * Maps have the following properties:\n *\n * - Entries are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Entries are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableMap for EnumerableMap.UintToAddressMap;\n *\n * // Declare a set state variable\n * EnumerableMap.UintToAddressMap private myMap;\n * }\n * ```\n *\n * As of v3.0.0, only maps of type `uint256 -> address` (`UintToAddressMap`) are\n * supported.\n */\nlibrary EnumerableMapUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Map type with\n // bytes32 keys and values.\n // The Map implementation uses private functions, and user-facing\n // implementations (such as Uint256ToAddressMap) are just wrappers around\n // the underlying Map.\n // This means that we can only create new EnumerableMaps for types that fit\n // in bytes32.\n\n struct MapEntry {\n bytes32 _key;\n bytes32 _value;\n }\n\n struct Map {\n // Storage of map keys and values\n MapEntry[] _entries;\n\n // Position of the entry defined by a key in the `entries` array, plus 1\n // because index 0 means a key is not in the map.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex == 0) { // Equivalent to !contains(map, key)\n map._entries.push(MapEntry({ _key: key, _value: value }));\n // The entry is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n map._indexes[key] = map._entries.length;\n return true;\n } else {\n map._entries[keyIndex - 1]._value = value;\n return false;\n }\n }\n\n /**\n * @dev Removes a key-value pair from a map. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function _remove(Map storage map, bytes32 key) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex != 0) { // Equivalent to contains(map, key)\n // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one\n // in the array, and then remove the last entry (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = keyIndex - 1;\n uint256 lastIndex = map._entries.length - 1;\n\n // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n MapEntry storage lastEntry = map._entries[lastIndex];\n\n // Move the last entry to the index where the entry to delete is\n map._entries[toDeleteIndex] = lastEntry;\n // Update the index for the moved entry\n map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved entry was stored\n map._entries.pop();\n\n // Delete the index for the deleted slot\n delete map._indexes[key];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function _contains(Map storage map, bytes32 key) private view returns (bool) {\n return map._indexes[key] != 0;\n }\n\n /**\n * @dev Returns the number of key-value pairs in the map. O(1).\n */\n function _length(Map storage map) private view returns (uint256) {\n return map._entries.length;\n }\n\n /**\n * @dev Returns the key-value pair stored at position `index` in the map. O(1).\n *\n * Note that there are no guarantees on the ordering of entries inside the\n * array, and it may change when more entries are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {\n require(map._entries.length > index, \"EnumerableMap: index out of bounds\");\n\n MapEntry storage entry = map._entries[index];\n return (entry._key, entry._value);\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n */\n function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {\n uint256 keyIndex = map._indexes[key];\n if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)\n return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function _get(Map storage map, bytes32 key) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, \"EnumerableMap: nonexistent key\"); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n /**\n * @dev Same as {_get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {_tryGet}.\n */\n function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n // UintToAddressMap\n\n struct UintToAddressMap {\n Map _inner;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {\n return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {\n return _remove(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {\n return _contains(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns the number of elements in the map. O(1).\n */\n function length(UintToAddressMap storage map) internal view returns (uint256) {\n return _length(map._inner);\n }\n\n /**\n * @dev Returns the element stored at position `index` in the set. O(1).\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {\n (bytes32 key, bytes32 value) = _at(map._inner, index);\n return (uint256(key), address(uint160(uint256(value))));\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n *\n * _Available since v3.4._\n */\n function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {\n (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));\n return (success, address(uint160(uint256(value))));\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key)))));\n }\n\n /**\n * @dev Same as {get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryGet}.\n */\n function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n */\nlibrary EnumerableSetUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) { // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n bytes32 lastvalue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastvalue;\n // Update the index for the moved value\n set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n require(set._values.length > index, \"EnumerableSet: index out of bounds\");\n return set._values[index];\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuardUpgradeable is Initializable {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n function __ReentrancyGuard_init() internal initializer {\n __ReentrancyGuard_init_unchained();\n }\n\n function __ReentrancyGuard_init_unchained() internal initializer {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n // On the first call to nonReentrant, _notEntered will be true\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary StringsUpgradeable {\n /**\n * @dev Converts a `uint256` to its ASCII `string` representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n uint256 index = digits - 1;\n temp = value;\n while (temp != 0) {\n buffer[index--] = bytes1(uint8(48 + temp % 10));\n temp /= 10;\n }\n return string(buffer);\n }\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" + }, + "@openzeppelin/contracts/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165 is IERC165 {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n constructor () internal {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "@openzeppelin/contracts/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts/math/SafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\nimport \"./IBeacon.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy {\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) public payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _setBeacon(beacon, data);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address beacon) {\n bytes32 slot = _BEACON_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n beacon := sload(slot)\n }\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_beacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n require(\n Address.isContract(beacon),\n \"BeaconProxy: beacon is not a contract\"\n );\n require(\n Address.isContract(IBeacon(beacon).implementation()),\n \"BeaconProxy: beacon implementation is not a contract\"\n );\n bytes32 slot = _BEACON_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, beacon)\n }\n\n if (data.length > 0) {\n Address.functionDelegateCall(_implementation(), data, \"BeaconProxy: function call failed\");\n }\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "@openzeppelin/contracts/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../access/Ownable.sol\";\nimport \"./TransparentUpgradeableProxy.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(TransparentUpgradeableProxy proxy, address implementation, bytes memory data) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./UpgradeableProxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\n */\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _setAdmin(admin_);\n }\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _admin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _admin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n require(newAdmin != address(0), \"TransparentUpgradeableProxy: new admin is the zero address\");\n emit AdminChanged(_admin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external virtual ifAdmin {\n _upgradeTo(newImplementation);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\n _upgradeTo(newImplementation);\n Address.functionDelegateCall(newImplementation, data);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address adm) {\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n adm := sload(slot)\n }\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n bytes32 slot = _ADMIN_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newAdmin)\n }\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _admin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../access/Ownable.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n constructor(address implementation_) public {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/UpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n *\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\n * {TransparentUpgradeableProxy}.\n */\ncontract UpgradeableProxy is Proxy {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) public payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _setImplementation(_logic);\n if(_data.length > 0) {\n Address.functionDelegateCall(_logic, _data);\n }\n }\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n impl := sload(slot)\n }\n }\n\n /**\n * @dev Upgrades the proxy to a new implementation.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal virtual {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableProxy: new implementation is not a contract\");\n\n bytes32 slot = _IMPLEMENTATION_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newImplementation)\n }\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155.sol\";\nimport \"./IERC1155MetadataURI.sol\";\nimport \"./IERC1155Receiver.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../introspection/ERC165.sol\";\nimport \"../../math/SafeMath.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {\n using SafeMath for uint256;\n using Address for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n constructor (string memory uri_) public {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Receiver.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155Holder is ERC1155Receiver {\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Receiver.sol\";\nimport \"../../introspection/ERC165.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\n constructor() internal {\n _registerInterface(\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\n );\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155 is IERC165 {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURI is IERC1155 {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155Receiver is IERC165 {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/ERC721Holder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721Receiver.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721Holder is IERC721Receiver {\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Pausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n bool private _paused;\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n constructor () internal {\n _paused = false;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n require(!paused(), \"Pausable: paused\");\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n require(paused(), \"Pausable: not paused\");\n _;\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" + }, + "@rarible/auction/contracts/1155/AuctionHouse1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase1155.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse1155 is ERC1155HolderUpgradeable, AuctionHouseBase1155 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse1155_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse1155_init_unchained();\n }\n\n function __AuctionHouse1155_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint96 _sellTokenValue,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC1155 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(_sellTokenValue > 0, \"incorrect _sellTokenValue\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenValue,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n\n transferNFT(\n _sellToken, \n _sellTokenId, \n _sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n sender,\n address(this)\n );\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime if it's not set\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId) internal {\n emit AuctionFinished(_auctionId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n address seller = currentAuction.seller;\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n currentAuction.sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n \n deactivateAuction(_auctionId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return this.supportsInterface(interfaceId);\n }\n\n}" + }, + "@rarible/auction/contracts/1155/AuctionHouseBase1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase1155 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint96 sellTokenValue;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n\n}" + }, + "@rarible/auction/contracts/721/AuctionHouse721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase721.sol\";\nimport \"../wrapper/TokenToAuction.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse721 is ERC721HolderUpgradeable, TokenToAuction, AuctionHouseBase721 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse721_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC721Holder_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse721_init_unchained();\n }\n\n function __AuctionHouse721_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC721 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n transferNFT(\n _sellToken, \n _sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n sender,\n address(this)\n );\n setAuctionForToken(_sellToken, _sellTokenId, currentAuctionId);\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId, address token, uint tokenId) internal {\n emit AuctionFinished(_auctionId);\n deleteAuctionForToken(token, tokenId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n address seller = currentAuction.seller;\n require(_checkAuctionExistence(seller), \"there is no auction with this id\");\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n \n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n /// @dev function to call from wrapper to put bid\n function putBidWrapper(uint256 _auctionId) external payable {\n require(auctions[_auctionId].buyAsset == address(0), \"only ETH bids allowed\");\n putBid(_auctionId, Bid(msg.value, LibBidDataV1.V1, \"\"));\n }\n\n}" + }, + "@rarible/auction/contracts/721/AuctionHouseBase721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase721 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n}" + }, + "@rarible/auction/contracts/AuctionHouseBase.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libs/LibAucDataV1.sol\";\nimport \"./libs/LibBidDataV1.sol\";\nimport \"./libs/SafeMathUpgradeable96.sol\";\n\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nabstract contract AuctionHouseBase is OwnableUpgradeable, ReentrancyGuardUpgradeable, RaribleTransferManager, TransferExecutor {\n using LibTransfer for address;\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n /// @dev default minimal auction duration and also the time for that auction is extended when it's about to end (endTime - now < EXTENSION_DURATION)\n uint96 internal constant EXTENSION_DURATION = 15 minutes;\n\n /// @dev maximum auction duration\n uint128 internal constant MAX_DURATION = 1000 days;\n\n /// @dev maximum fee base point\n uint internal constant MAX_FEE_BASE_POINT = 1000;\n\n /// @dev mapping to store eth amount that is ready to be withdrawn (used for faulty eth-bids)\n mapping(address => uint) readyToWithdraw;\n\n /// @dev latest auctionId\n uint256 public auctionId;\n\n /// @dev minimal auction duration\n uint96 public minimalDuration;\n\n /// @dev minimal bid increase in base points\n uint96 public minimalStepBasePoint;\n\n /// @dev bid struct\n struct Bid {\n // the amount \n uint amount;\n // version of Bid to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Bid, can be seen in \"LibBidDataV1.sol\"\n bytes data;\n }\n\n /// @dev event that emits when auction is created\n event AuctionCreated(uint indexed auctionId, address seller);\n /// @dev event that emits when bid is placed\n event BidPlaced(uint indexed auctionId, address buyer, uint endTime);\n /// @dev event that emits when auction is finished\n event AuctionFinished(uint indexed auctionId);\n /// @dev event that emits when auction is canceled\n event AuctionCancelled(uint indexed auctionId);\n /// @dev event that emits when auction is bought out\n event AuctionBuyOut(uint indexed auctionId, address buyer);\n\n /// @dev event that's emitted when user can withdraw ETH from the AuctionHouse\n event AvailableToWithdraw(address indexed owner, uint added, uint total);\n /// @dev event that's emitted when minimal auction duration changes\n event MinimalDurationChanged(uint oldValue, uint newValue);\n\n event MinimalStepChanged(uint oldValue, uint newValue);\n\n function __AuctionHouseBase_init_unchained(\n uint96 _minimalStepBasePoint\n ) internal initializer {\n auctionId = 1;\n minimalDuration = EXTENSION_DURATION;\n minimalStepBasePoint = _minimalStepBasePoint;\n }\n\n /// @dev increments auctionId and returns new value\n function getNextAndIncrementAuctionId() internal returns (uint256) {\n return auctionId++;\n }\n\n function changeMinimalDuration(uint96 newValue) external onlyOwner {\n emit MinimalDurationChanged(minimalDuration, newValue);\n minimalDuration = newValue;\n }\n\n function changeMinimalStep(uint96 newValue) external onlyOwner {\n emit MinimalStepChanged(minimalStepBasePoint, newValue);\n minimalStepBasePoint = newValue;\n }\n\n function transferNFT (\n address token,\n uint tokenId,\n uint value,\n bytes4 assetClass,\n address from,\n address to\n ) internal {\n transfer(\n getSellAsset(\n token,\n tokenId,\n value,\n assetClass\n ),\n from,\n to,\n proxies[assetClass]\n );\n }\n\n function transferBid(\n uint value,\n address token,\n address from,\n address to,\n address proxy\n ) internal {\n transfer(\n getBuyAsset(\n token,\n value\n ),\n from,\n to,\n proxy\n );\n }\n\n function getSellAsset(address token, uint tokenId, uint value, bytes4 assetClass) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n asset.assetType.assetClass = assetClass;\n asset.assetType.data = abi.encode(token, tokenId);\n }\n\n function getBuyAsset(address token, uint value) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n\n if (token == address(0)){\n asset.assetType.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n asset.assetType.assetClass = LibAsset.ERC20_ASSET_CLASS;\n asset.assetType.data = abi.encode(token);\n }\n }\n\n function getPayouts(address maker) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(maker);\n payout[0].value = 10000;\n return payout;\n }\n\n function getOriginFee(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee = new LibPart.Part[](1);\n originFee[0].account = payable(address(data));\n originFee[0].value = uint96(getValueFromData(data));\n return originFee;\n }\n\n function _checkAuctionRangeTime(uint endTime, uint startTime) internal view returns (bool){\n uint currentTime = block.timestamp;\n if (startTime > 0 && startTime > currentTime) {\n return false;\n }\n if (endTime > 0 && endTime <= currentTime){\n return false;\n }\n\n return true;\n }\n\n /// @dev returns true if newAmount is enough for buyOut\n function buyOutVerify(LibAucDataV1.DataV1 memory aucData, uint newAmount) internal pure returns (bool) {\n if (aucData.buyOutPrice > 0 && aucData.buyOutPrice <= newAmount) {\n return true;\n }\n return false;\n }\n\n /// @dev returns true if auction exists, false otherwise\n function _checkAuctionExistence(address seller) internal pure returns (bool){\n return seller != address(0);\n }\n\n /// @dev Used to withdraw faulty bids (bids that failed to return after out-bidding)\n function withdrawFaultyBid(address _to) external {\n address sender = _msgSender();\n uint amount = readyToWithdraw[sender];\n require( amount > 0, \"nothing to withdraw\");\n readyToWithdraw[sender] = 0;\n _to.transferEth(amount);\n }\n\n function _returnBid(\n Bid memory oldBid,\n address buyAsset,\n address oldBuyer,\n address proxy\n ) internal {\n // nothing to return\n if (oldBuyer == address(0)) {\n return;\n }\n if (buyAsset == address(0)) {\n (bool success,) = oldBuyer.call{ value: oldBid.amount }(\"\");\n if (!success) {\n uint currentValueToWithdraw = readyToWithdraw[oldBuyer];\n uint newValueToWithdraw = oldBid.amount.add(currentValueToWithdraw);\n readyToWithdraw[oldBuyer] = newValueToWithdraw;\n emit AvailableToWithdraw(oldBuyer, oldBid.amount, newValueToWithdraw);\n }\n } else {\n transferBid(\n oldBid.amount,\n buyAsset,\n address(this),\n oldBuyer,\n proxy\n );\n }\n }\n\n function _getProxy(address buyAsset) internal view returns(address){\n address proxy;\n if (buyAsset != address(0)){\n proxy = proxies[LibAsset.ERC20_ASSET_CLASS];\n }\n return proxy;\n }\n\n /// @dev check that msg.value more than bid amount with fees and return change\n function checkEthReturnChange(uint totalAmount, address buyer) internal {\n uint msgValue = msg.value;\n require(msgValue >= totalAmount, \"not enough ETH\");\n uint256 change = msgValue.sub(totalAmount);\n if (change > 0) {\n buyer.transferEth(change);\n }\n }\n\n /// @dev returns true if auction in progress, false otherwise\n function checkAuctionInProgress(address seller, uint endTime, uint startTime) internal view{\n require(_checkAuctionExistence(seller) && _checkAuctionRangeTime(endTime, startTime), \"auction is inactive\");\n }\n\n /// @dev reserves new bid and returns the last one if it exists\n function reserveBid(\n address buyAsset,\n address oldBuyer,\n address newBuyer,\n Bid memory oldBid,\n address proxy,\n uint newTotalAmount\n ) internal {\n // return old bid if theres any\n _returnBid(\n oldBid,\n buyAsset,\n oldBuyer,\n proxy\n );\n \n //lock new bid\n transferBid(\n newTotalAmount,\n buyAsset,\n newBuyer,\n address(this),\n proxy\n );\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function _getMinimalNextBid(address buyer, uint96 minimalPrice, uint amount) internal view returns (uint minBid){\n if (buyer == address(0x0)) {\n minBid = minimalPrice;\n } else {\n minBid = amount.add(amount.bp(minimalStepBasePoint));\n }\n }\n\n function getValueFromData(uint data) internal pure returns(uint) {\n return (data >> 160);\n }\n\n uint256[50] private ______gap;\n}" + }, + "@rarible/auction/contracts/libs/LibAucDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Auction struct\nlibrary LibAucDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Auction data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n // auction duration\n uint96 duration;\n // auction startTime\n uint96 startTime;\n // auction buyout price\n uint96 buyOutPrice;\n }\n\n /// @dev returns parsed data field of an Auction (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n }\n } else {\n revert(\"wrong auction dataType\");\n }\n }\n}\n\n" + }, + "@rarible/auction/contracts/libs/LibBidDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Bid struct\nlibrary LibBidDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Bid data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n }\n\n /// @dev returns parsed data field of a Bid (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n } \n } else {\n revert(\"wrong bid dataType\");\n }\n }\n}\n" + }, + "@rarible/auction/contracts/libs/SafeMathUpgradeable96.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable96 {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint96 a, uint96 b) internal pure returns (uint96) {\n uint96 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint96 a, uint96 b) internal pure returns (uint96) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n}\n" + }, + "@rarible/auction/contracts/wrapper/IMarketWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/**\n * @title IMarketWrapper\n * @author Anna Carroll\n * @notice IMarketWrapper provides a common interface for\n * interacting with NFT auction markets.\n * Contracts can abstract their interactions with\n * different NFT markets using IMarketWrapper.\n * NFT markets can become compatible with any contract\n * using IMarketWrapper by deploying a MarketWrapper contract\n * that implements this interface using the logic of their Market.\n *\n * WARNING: MarketWrapper contracts should NEVER write to storage!\n * When implementing a MarketWrapper, exercise caution; a poorly implemented\n * MarketWrapper contract could permanently lose access to the NFT or user funds.\n */\ninterface IMarketWrapper {\n /**\n * @notice Given the auctionId, nftContract, and tokenId, check that:\n * 1. the auction ID matches the token\n * referred to by tokenId + nftContract\n * 2. the auctionId refers to an *ACTIVE* auction\n * (e.g. an auction that will accept bids)\n * within this market contract\n * 3. any additional validation to ensure that\n * a PartyBid can bid on this auction\n * (ex: if the market allows arbitrary bidding currencies,\n * check that the auction currency is ETH)\n * Note: This function probably should have been named \"isValidAuction\"\n * @dev Called in PartyBid.sol in `initialize` at line 174\n * @return TRUE if the auction is valid\n */\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external view returns (bool);\n\n /**\n * @notice Calculate the minimum next bid for this auction.\n * PartyBid contracts always submit the minimum possible\n * bid that will be accepted by the Market contract.\n * usually, this is either the reserve price (if there are no bids)\n * or a certain percentage increase above the current highest bid\n * @dev Called in PartyBid.sol in `bid` at line 251\n * @return minimum bid amount\n */\n function getMinimumBid(uint256 auctionId) external view returns (uint256);\n\n /**\n * @notice Query the current highest bidder for this auction\n * It is assumed that there is always 1 winning highest bidder for an auction\n * This is used to ensure that PartyBid cannot outbid itself if it is already winning\n * @dev Called in PartyBid.sol in `bid` at line 241\n * @return highest bidder\n */\n function getCurrentHighestBidder(uint256 auctionId)\n external\n view\n returns (address);\n\n /**\n * @notice Submit bid to Market contract\n * @dev Called in PartyBid.sol in `bid` at line 259\n */\n function bid(uint256 auctionId, uint256 bidAmount) external;\n\n /**\n * @notice Determine whether the auction has been finalized\n * Used to check if it is still possible to bid\n * And to determine whether the PartyBid should finalize the auction\n * @dev Called in PartyBid.sol in `bid` at line 247\n * @dev and in `finalize` at line 288\n * @return TRUE if the auction has been finalized\n */\n function isFinalized(uint256 auctionId) external view returns (bool);\n\n /**\n * @notice Finalize the results of the auction\n * on the Market contract\n * It is assumed that this operation is performed once for each auction,\n * that after it is done the auction is over and the NFT has been\n * transferred to the auction winner.\n * @dev Called in PartyBid.sol in `finalize` at line 289\n */\n function finalize(uint256 auctionId) external;\n}" + }, + "@rarible/auction/contracts/wrapper/TokenToAuction.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/// @dev contract to add tokenToAuctionId functionality to auctionHouse\ncontract TokenToAuction {\n /// @dev mapping to store auction ids for token address + token id (only stores erc-721 tokens)\n mapping(address => mapping(uint256 => uint256)) private tokenToAuctionId;\n\n /// @dev returns auction id by token address and token id\n function getAuctionByToken(address _collection, uint tokenId) external view returns(uint) {\n return tokenToAuctionId[_collection][tokenId];\n }\n\n /// @dev sets auction id for token address and token id\n function setAuctionForToken(address token, uint tokenId, uint auctionId) internal {\n tokenToAuctionId[token][tokenId] = auctionId;\n }\n\n /// @dev deletes auctionId from tokenToAuctionId\n function deleteAuctionForToken(address token, uint tokenId) internal {\n delete tokenToAuctionId[token][tokenId];\n }\n \n uint256[50] private ______gap;\n}" + }, + "@rarible/auction/contracts/wrapper/Wrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\nimport \"./IMarketWrapper.sol\";\nimport \"../721/AuctionHouse721.sol\";\n\ncontract Wrapper is IMarketWrapper{\n\n AuctionHouse721 internal immutable auction;\n\n constructor(address _auction) {\n auction = AuctionHouse721(_auction);\n }\n\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external override view returns (bool){\n return auctionId == auction. getAuctionByToken(nftContract, tokenId);\n }\n\n function getMinimumBid(uint256 auctionId) external override view returns (uint256){\n return auction.getMinimalNextBid(auctionId);\n }\n\n function getCurrentHighestBidder(uint256 auctionId)\n external\n override\n view\n returns (address){\n return auction.getCurrentBuyer(auctionId);\n }\n\n function bid(uint256 auctionId, uint256 bidAmount) external override{\n (bool success, bytes memory returnData) =\n address(auction).call{value: bidAmount}(\n abi.encodeWithSignature(\"putBidWrapper(uint256)\", auctionId)\n );\n require(success, string(returnData));\n }\n\n function isFinalized(uint256 auctionId) external override view returns (bool){\n return !auction.checkAuctionExistence(auctionId);\n }\n\n function finalize(uint256 auctionId) external override{\n auction.finishAuction(auctionId);\n }\n}" + }, + "@rarible/custom-matchers/contracts/AssetMatcherCollection.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\n/*\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\n */\ncontract AssetMatcherCollection is IAssetMatcher {\n\n bytes constant EMPTY = \"\";\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\n if (\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\n ) {\n (address leftToken) = abi.decode(leftAssetType.data, (address));\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\n if (leftToken == rightToken) {\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\n }\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n}" + }, + "@rarible/exchange-interfaces/contracts/IAssetMatcher.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface IAssetMatcher {\n function matchAssets(\n LibAsset.AssetType memory leftAssetType,\n LibAsset.AssetType memory rightAssetType\n ) external view returns (LibAsset.AssetType memory);\n}\n" + }, + "@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface ICryptoPunksMarket {\n //to get address punk owner from mapping (uint => address) public punkIndexToAddress;\n function punkIndexToAddress(uint key) external returns (address);\n\n function buyPunk(uint punkIndex) payable external;\n\n function transferPunk(address to, uint punkIndex) external;\n\n function offerPunkForSaleToAddress(uint punkIndex, uint minSalePriceInWei, address toAddress) external;\n}" + }, + "@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\ninterface IERC20TransferProxy {\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\n}\n" + }, + "@rarible/exchange-interfaces/contracts/INftTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\ninterface INftTransferProxy {\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n}\n" + }, + "@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/exchange-interfaces/contracts/ITransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" + }, + "@rarible/exchange-v2/contracts/AssetMatcher.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\n require(newFill.leftValue > 0, \"nothing to fill\");\n }\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\n require(newFill.rightValue > 0, \"nothing to fill\");\n }\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibDirectTransfer { //LibDirectTransfers\n /*All buy parameters need for create buyOrder and sellOrder*/\n struct Purchase {\n address sellOrderMaker; //\n uint256 sellOrderNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 sellOrderPaymentAmount;\n address paymentToken;\n uint256 sellOrderSalt;\n uint sellOrderStart;\n uint sellOrderEnd;\n bytes4 sellOrderDataType;\n bytes sellOrderData;\n bytes sellOrderSignature;\n\n uint256 buyOrderPaymentAmount;\n uint256 buyOrderNftAmount;\n bytes buyOrderData;\n }\n\n /*All accept bid parameters need for create buyOrder and sellOrder*/\n struct AcceptBid {\n address bidMaker; //\n uint256 bidNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 bidPaymentAmount;\n address paymentToken;\n uint256 bidSalt;\n uint bidStart;\n uint bidEnd;\n bytes4 bidDataType;\n bytes bidData;\n bytes bidSignature;\n\n uint256 sellOrderPaymentAmount;\n uint256 sellOrderNftAmount;\n bytes sellOrderData;\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibFill.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n * @return tuple representing fill of both assets\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary LibMath {\n using SafeMathUpgradeable for uint;\n\n /// @dev Calculates partial value given a numerator and denominator rounded down.\n /// Reverts if rounding error is >= 0.1%\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return partialAmount value of target rounded down.\n function safeGetPartialAmountFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorFloor(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding down.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // The absolute rounding error is the difference between the rounded\n // value and the ideal value. The relative rounding error is the\n // absolute rounding error divided by the absolute value of the\n // ideal value. This is undefined when the ideal value is zero.\n //\n // The ideal value is `numerator * target / denominator`.\n // Let's call `numerator * target % denominator` the remainder.\n // The absolute error is `remainder / denominator`.\n //\n // When the ideal value is zero, we require the absolute error to\n // be zero. Fortunately, this is always the case. The ideal value is\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\n // remainder and absolute error are also zero.\n if (target == 0 || numerator == 0) {\n return false;\n }\n\n // Otherwise, we want the relative rounding error to be strictly\n // less than 0.1%.\n // The relative error is `remainder / (numerator * target)`.\n // We want the relative error less than 1 / 1000:\n // remainder / (numerator * target) < 1 / 1000\n // or equivalently:\n // 1000 * remainder < numerator * target\n // so we have a rounding error iff:\n // 1000 * remainder >= numerator * target\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n isError = remainder.mul(1000) >= numerator.mul(target);\n }\n\n function safeGetPartialAmountCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorCeil(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding up.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // See the comments in `isRoundingError`.\n if (target == 0 || numerator == 0) {\n // When either is zero, the ideal value and rounded value are zero\n // and there is no rounding error. (Although the relative error\n // is undefined.)\n return false;\n }\n // Compute remainder as before\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n remainder = denominator.sub(remainder) % denominator;\n isError = remainder.mul(1000) >= numerator.mul(target);\n return isError;\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nimport \"./LibMath.sol\";\nimport \"./LibOrderDataV3.sol\";\nimport \"./LibOrderDataV2.sol\";\nimport \"./LibOrderDataV1.sol\";\n\nlibrary LibOrder {\n using SafeMathUpgradeable for uint;\n\n bytes32 constant ORDER_TYPEHASH = keccak256(\n \"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\n\n struct Order {\n address maker;\n LibAsset.Asset makeAsset;\n address taker;\n LibAsset.Asset takeAsset;\n uint salt;\n uint start;\n uint end;\n bytes4 dataType;\n bytes data;\n }\n\n /**\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\n * @param order initial order to calculate remaining values for\n * @param fill current fill of the left order (0 if order is unfilled)\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\n */\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\n if (isMakeFill) {\n makeValue = order.makeAsset.value.sub(fill);\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\n } else {\n takeValue = order.takeAsset.value.sub(fill);\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \n } \n }\n\n function hashKey(Order memory order) internal pure returns (bytes32) {\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt\n ));\n } else {\n //order.data is in hash for V2, V3 and all new order\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt,\n order.data\n ));\n }\n }\n\n function hash(Order memory order) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ORDER_TYPEHASH,\n order.maker,\n LibAsset.hash(order.makeAsset),\n order.taker,\n LibAsset.hash(order.takeAsset),\n order.salt,\n order.start,\n order.end,\n order.dataType,\n keccak256(order.data)\n ));\n }\n\n function validateOrderTime(LibOrder.Order memory order) internal view {\n require(order.start == 0 || order.start < block.timestamp, \"Order start validation failed\");\n require(order.end == 0 || order.end > block.timestamp, \"Order end validation failed\");\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderData.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibOrderData {\n\n struct GenericOrderData {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n } \n\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\n if (order.dataType == LibOrderDataV1.V1) {\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n } else if (order.dataType == LibOrderDataV2.V2) {\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n dataOrder.isMakeFill = data.isMakeFill;\n } else if (order.dataType == 0xffffffff) {\n } else {\n revert(\"Unknown Order data type\");\n }\n if (dataOrder.payouts.length == 0) {\n dataOrder.payouts = payoutSet(order.maker);\n }\n }\n\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(orderAddress);\n payout[0].value = 10000;\n return payout;\n }\n\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee;\n\n if (dataFirst > 0 && dataSecond > 0){\n originFee = new LibPart.Part[](2);\n\n originFee[0] = uintToLibPart(dataFirst);\n originFee[1] = uintToLibPart(dataSecond);\n }\n\n if (dataFirst > 0 && dataSecond == 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataFirst);\n }\n\n if (dataFirst == 0 && dataSecond > 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataSecond);\n }\n\n return originFee;\n }\n\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payouts;\n\n if (data > 0) {\n payouts = new LibPart.Part[](1);\n payouts[0] = uintToLibPart(data);\n }\n\n return payouts;\n }\n\n /**\n @notice converts uint to LibPart.Part\n @param data address and value encoded in uint (first 12 bytes )\n @return result LibPart.Part \n */\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\n if (data > 0){\n result.account = payable(address(data));\n result.value = uint96(data >> 160);\n }\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n struct DataV1 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV2 {\n bytes4 constant public V2 = bytes4(keccak256(\"V2\"));\n\n struct DataV2 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\n/// @dev deprecated\nlibrary LibOrderDataV3 {\n bytes4 constant public V3_SELL = bytes4(keccak256(\"V3_SELL\"));\n bytes4 constant public V3_BUY = bytes4(keccak256(\"V3_BUY\"));\n\n struct DataV3_SELL {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n uint maxFeesBasePoint;\n bytes32 marketplaceMarker;\n }\n\n struct DataV3_BUY {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n bytes32 marketplaceMarker;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/OrderValidator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./libraries/LibOrder.sol\";\n\nimport \"@rarible/lib-signature/contracts/IERC1271.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\n\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\n using LibSignature for bytes32;\n using AddressUpgradeable for address;\n \n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function __OrderValidator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Exchange\", \"2\");\n }\n\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\n if (order.salt == 0) {\n if (order.maker != address(0)) {\n require(_msgSender() == order.maker, \"maker is not tx sender\");\n }\n } else {\n if (_msgSender() != order.maker) {\n bytes32 hash = LibOrder.hash(order);\n // if maker is contract checking ERC1271 signature\n if (order.maker.isContract()) {\n require(\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\n \"contract order signature verification error\"\n );\n } else {\n // if maker is not contract then checking ECDSA signature\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\n revert(\"order signature verification error\");\n } else {\n require (order.maker != address(0), \"no maker\");\n }\n }\n }\n }\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../../contracts/ExchangeV2.sol\";\n\ncontract RaribleTestHelper {\n function encode(LibOrderDataV1.DataV1 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV2(LibOrderDataV2.DataV2 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_SELL(LibOrderDataV3.DataV3_SELL memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_BUY(LibOrderDataV3.DataV3_BUY memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value)\n external\n pure\n returns (uint256)\n {\n return (uint256(value) << 160) + uint256(account);\n }\n\n function hashKey(LibOrder.Order calldata order)\n external\n pure\n returns (bytes32)\n {\n return LibOrder.hashKey(order);\n }\n\n function hashV2(\n address maker,\n LibAsset.Asset memory makeAsset,\n LibAsset.Asset memory takeAsset,\n uint256 salt,\n bytes memory data\n ) public pure returns (bytes32) {\n return\n keccak256(\n abi.encode(\n maker,\n LibAsset.hash(makeAsset.assetType),\n LibAsset.hash(takeAsset.assetType),\n salt,\n data\n )\n );\n }\n\n function encodeLazy721(LibERC721LazyMint.Mint721Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n function encodeLazy1155(LibERC1155LazyMint.Mint1155Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n\ninterface IBlur {\n enum Side { Buy, Sell }\n enum SignatureVersion { Single, Bulk }\n enum AssetType { ERC721, ERC1155 }\n\n struct Fee {\n uint16 rate;\n address payable recipient;\n }\n \n struct Order {\n address trader;\n Side side;\n address matchingPolicy;\n address collection;\n uint256 tokenId;\n uint256 amount;\n address paymentToken;\n uint256 price;\n uint256 listingTime;\n /* Order expiration timestamp - 0 for oracle cancellations. */\n uint256 expirationTime;\n Fee[] fees;\n uint256 salt;\n bytes extraParams;\n }\n\n struct Input {\n Order order;\n uint8 v;\n bytes32 r;\n bytes32 s;\n bytes extraSignature;\n SignatureVersion signatureVersion;\n uint256 blockNumber;\n }\n\n function execute(Input calldata sell, Input calldata buy)\n external\n payable;\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\n\ninterface IExchangeV2 {\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable;\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable;\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../libraries/LibLooksRare.sol\";\n\ninterface ILooksRare {\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\n\n /**\n * @notice This function allows a user to execute a taker bid (against a maker ask).\n * @param takerBid Taker bid struct\n * @param makerAsk Maker ask struct\n * @param makerSignature Maker signature\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\n * @param affiliate Affiliate address\n */\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ILSSVMRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\ninterface ILSSVMRouter {\n struct PairSwapSpecific {\n address pair;\n uint256[] nftIds;\n }\n\n /**\n @notice Swaps ETH into specific NFTs using multiple pairs.\n @param swapList The list of pairs to trade with and the IDs of the NFTs to buy from each.\n @param ethRecipient The address that will receive the unspent ETH input\n @param nftRecipient The address that will receive the NFT output\n @param deadline The Unix timestamp (in seconds) at/after which the swap will revert\n @return remainingValue The unspent ETH amount\n */\n function swapETHForSpecificNFTs(\n PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n )\n external\n payable\n returns (uint256 remainingValue);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"../libraries/LibSeaPort.sol\";\n\ninterface ISeaPort {\n function fulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder calldata advancedOrder,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n bytes32 fulfillerConduitKey,\n address recipient\n ) external payable returns (bool fulfilled);\n\n function fulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\n bytes32 fulfillerConduitKey,\n address recipient,\n uint256 maximumFulfilled\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\n\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\n external\n payable\n returns (bool fulfilled);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface IWyvernExchange {\n function atomicMatch_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n\n enum Side {\n Buy,\n Sell\n }\n\n enum SaleKind {\n FixedPrice,\n DutchAuction\n }\n\n function calculateFinalPrice(\n Side side,\n SaleKind saleKind,\n uint256 basePrice,\n uint256 extra,\n uint256 listingTime,\n uint256 expirationTime\n ) external view returns (uint256);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface Ix2y2 {\n\n struct OrderItem {\n uint256 price;\n bytes data;\n }\n\n struct Pair721 {\n address token;\n uint256 tokenId;\n }\n\n struct Pair1155 {\n address token;\n uint256 tokenId;\n uint256 amount;\n }\n\n struct Order {\n uint256 salt;\n address user;\n uint256 network;\n uint256 intent;\n uint256 delegateType;\n uint256 deadline;\n address currency;\n bytes dataMask;\n OrderItem[] items;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n uint8 signVersion;\n }\n\n struct Fee {\n uint256 percentage;\n address to;\n }\n\n struct SettleDetail {\n Op op;\n uint256 orderIdx;\n uint256 itemIdx;\n uint256 price;\n bytes32 itemHash;\n address executionDelegate;\n bytes dataReplacement;\n uint256 bidIncentivePct;\n uint256 aucMinIncrementPct;\n uint256 aucIncDurationSecs;\n Fee[] fees;\n }\n\n struct SettleShared {\n uint256 salt;\n uint256 deadline;\n uint256 amountToEth;\n uint256 amountToWeth;\n address user;\n bool canFail;\n }\n\n struct RunInput {\n Order[] orders;\n SettleDetail[] details;\n SettleShared shared;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n }\n\n enum Op {\n INVALID,\n // off-chain\n COMPLETE_SELL_OFFER,\n COMPLETE_BUY_OFFER,\n CANCEL_OFFER,\n // auction\n BID,\n COMPLETE_AUCTION,\n REFUND_AUCTION,\n REFUND_AUCTION_STUCK_ITEM\n }\n\n function run(RunInput memory input) external payable;\n}" + }, + "@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\nabstract contract IsPausable is Ownable {\n bool public paused;\n\n event Paused(bool paused);\n\n function pause(bool _paused) external onlyOwner {\n paused = _paused;\n emit Paused(_paused);\n }\n\n function requireNotPaused() internal view {\n require (!paused, \"the contract is paused\");\n }\n\n}\n" + }, + "@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibLooksRare {\n struct MakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address signer; // signer of the maker order\n address collection; // collection address\n uint256 price; // price (used as )\n uint256 tokenId; // id of the token\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\n address currency; // currency (e.g., WETH)\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\n uint256 startTime; // startTime in timestamp\n uint256 endTime; // endTime in timestamp\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // additional parameters\n uint8 v; // v: parameter (27 or 28)\n bytes32 r; // r: parameter\n bytes32 s; // s: parameter\n }\n\n struct TakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address taker; // msg.sender\n uint256 price; // final price for the purchase\n uint256 tokenId;\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // other params (e.g., tokenId)\n }\n\n /**\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\n */\n enum CollectionType {\n ERC721,\n ERC1155\n }\n\n /**\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\n */\n enum QuoteType {\n Bid,\n Ask\n }\n /**\n * 1. Maker struct\n */\n\n /**\n * @notice Maker is the struct for a maker order.\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\n * @param globalNonce Global user order nonce for maker orders\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\n * @param strategyId Strategy id\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\n * @param collection Collection address\n * @param currency Currency address (@dev address(0) = ETH)\n * @param signer Signer address\n * @param startTime Start timestamp\n * @param endTime End timestamp\n * @param price Minimum price for maker ask, maximum price for maker bid\n * @param itemIds Array of itemIds\n * @param amounts Array of amounts\n * @param additionalParameters Extra data specific for the order\n */\n struct Maker {\n QuoteType quoteType;\n uint256 globalNonce;\n uint256 subsetNonce;\n uint256 orderNonce;\n uint256 strategyId;\n CollectionType collectionType;\n address collection;\n address currency;\n address signer;\n uint256 startTime;\n uint256 endTime;\n uint256 price;\n uint256[] itemIds;\n uint256[] amounts;\n bytes additionalParameters;\n }\n\n /**\n * 2. Taker struct\n */\n\n /**\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\n * @param additionalParameters Extra data specific for the order\n */\n struct Taker {\n address recipient;\n bytes additionalParameters;\n }\n\n /**\n * 3. Merkle tree struct\n */\n\n enum MerkleTreeNodePosition {\n Left,\n Right\n }\n\n /**\n * @notice MerkleTreeNode is a MerkleTree's node.\n * @param value It can be an order hash or a proof\n * @param position The node's position in its branch.\n * It can be left or right or none\n * (before the tree is sorted).\n */\n struct MerkleTreeNode {\n bytes32 value;\n MerkleTreeNodePosition position;\n }\n\n /**\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\n * @dev A Merkle tree can be computed with order hashes.\n * It can contain order hashes from both maker bid and maker ask structs.\n * @param root Merkle root\n * @param proof Array containing the merkle proof\n */\n struct MerkleTree {\n bytes32 root;\n MerkleTreeNode[] proof;\n }\n}\n" + }, + "@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" + }, + "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n address public immutable seaPort_1_6;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,//0\n WyvernExchange,//1\n SeaPort_1_1,//2\n X2Y2,//3\n LooksRareOrders,//4\n SudoSwap,//5\n SeaPort_1_4,//6\n LooksRareV2,//7\n Blur,//8\n SeaPort_1_5,//9\n SeaPort_1_6//10\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[11] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n //address _seaPort_1_6, 10\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n seaPort_1_6 = marketplaces[10];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" + }, + "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" + }, + "@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"./LibERC1155LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC1155LazyMint is IERC1155Upgradeable {\n\n event Supply(\n uint256 tokenId,\n uint256 value\n );\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC1155LazyMint.Mint1155Data memory data,\n address to,\n uint256 _amount\n ) external;\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) external;\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC1155LazyMint {\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC1155_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\n\n struct Mint1155Data {\n uint tokenId;\n string tokenURI;\n uint supply;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n data.supply,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"./LibERC721LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC721LazyMint is IERC721Upgradeable {\n\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external;\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external;\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC721LazyMint {\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC721_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\n\n struct Mint721Data {\n uint tokenId;\n string tokenURI;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n\n}\n" + }, + "@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/erc-721/IERC721LazyMint.sol\";\n\ncontract ERC721LazyMintTest is IERC721LazyMint, ERC721Upgradeable {\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external override {\n _mint(to, data.tokenId);\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external override {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n this.mintAndTransfer(data, to);\n }\n }\n\n function encode(LibERC721LazyMint.Mint721Data memory data)\n external\n view\n returns (bytes memory)\n {\n return abi.encode(address(this), data);\n }\n}\n" + }, + "@rarible/lib-asset/contracts/LibAsset.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibAsset {\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\"ETH\"));\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\"ERC20\"));\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\"ERC721\"));\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\"ERC1155\"));\n bytes4 constant public COLLECTION = bytes4(keccak256(\"COLLECTION\"));\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\"CRYPTO_PUNKS\"));\n\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\n \"AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes32 constant ASSET_TYPEHASH = keccak256(\n \"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n struct AssetType {\n bytes4 assetClass;\n bytes data;\n }\n\n struct Asset {\n AssetType assetType;\n uint value;\n }\n\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPE_TYPEHASH,\n assetType.assetClass,\n keccak256(assetType.data)\n ));\n }\n\n function hash(Asset memory asset) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPEHASH,\n hash(asset.assetType),\n asset.value\n ));\n }\n\n}\n" + }, + "@rarible/lib-bp/contracts/BpLibrary.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary BpLibrary {\n using SafeMathUpgradeable for uint;\n\n function bp(uint value, uint bpValue) internal pure returns (uint) {\n return value.mul(bpValue).div(10000);\n }\n}\n" + }, + "@rarible/lib-part/contracts/LibPart.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibPart {\n bytes32 public constant TYPE_HASH = keccak256(\"Part(address account,uint96 value)\");\n\n struct Part {\n address payable account;\n uint96 value;\n }\n\n function hash(Part memory part) internal pure returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\n }\n}\n" + }, + "@rarible/lib-signature/contracts/ERC1271.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nabstract contract ERC1271 {\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\n\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\n\n /**\n * @dev Function must be implemented by deriving contract\n * @param _hash Arbitrary length data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\n *\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\n\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\n }\n}" + }, + "@rarible/lib-signature/contracts/IERC1271.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ninterface IERC1271 {\n\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param _hash Hash of the data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n *\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\n}" + }, + "@rarible/lib-signature/contracts/LibSignature.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nlibrary LibSignature {\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature)\n internal\n pure\n returns (address)\n {\n // Check the signature length\n if (signature.length != 65) {\n revert(\"ECDSA: invalid signature length\");\n }\n\n // Divide the signature in r, s and v variables\n bytes32 r;\n bytes32 s;\n uint8 v;\n\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n // solhint-disable-next-line no-inline-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n\n return recover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n require(\n uint256(s) <=\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\n \"ECDSA: invalid signature 's' value\"\n );\n\n // If the signature is valid (and not malleable), return the signer address\n // v > 30 is a special case, we need to adjust hash with \"\\x19Ethereum Signed Message:\\n32\"\n // and v = v - 4\n address signer;\n if (v > 30) {\n require(\n v - 4 == 27 || v - 4 == 28,\n \"ECDSA: invalid signature 'v' value\"\n );\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\n } else {\n require(v == 27 || v == 28, \"ECDSA: invalid signature 'v' value\");\n signer = ecrecover(hash, v, r, s);\n }\n\n require(signer != address(0), \"ECDSA: invalid signature\");\n\n return signer;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * replicates the behavior of the\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n * JSON-RPC method.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash)\n internal\n pure\n returns (bytes32)\n {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return\n keccak256(\n abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash)\n );\n }\n}\n" + }, + "@rarible/meta-tx/contracts/EIP712MetaTransaction.sol": { + "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" + }, + "@rarible/role-operator/contracts/OperatorRole.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocksV2.sol\";\n\ncontract RoyaltiesProviderArtBlocksV2 is IRoyaltiesProvider {\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n RoyaltyArtBlocksV2 artBlocksV2 = RoyaltyArtBlocksV2(token);\n\n (address payable[] memory recipients, uint256[] memory bps) = artBlocksV2.getRoyalties(tokenId);\n \n uint256 len = recipients.length;\n\n LibPart.Part[] memory result = new LibPart.Part[](len);\n \n for (uint i = 0; i < len; i++) {\n result[i].account = recipients[i];\n result[i].value = uint96(bps[i]);\n }\n\n return result;\n }\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyV2Legacy.sol\";\n\ncontract RoyaltiesProviderV2Legacy is IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n return RoyaltyV2Legacy(token).getRoyalties(tokenId);\n }\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocks.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocks {\n \n function getRoyaltyData(uint256 _tokenId) external virtual view returns (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID);\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocksV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocksV2 {\n \n /**\n * @notice Gets royalty Basis Points (BPS) for token ID `_tokenId`.\n * This conforms to the IManifold interface designated in the Royalty\n * Registry's RoyaltyEngineV1.sol contract.\n * ref: https://github.com/manifoldxyz/royalty-registry-solidity\n * @param _tokenId Token ID to be queried.\n * @return recipients Array of royalty payment recipients\n * @return bps Array of Basis Points (BPS) allocated to each recipient,\n * aligned by index.\n * @dev reverts if invalid _tokenId\n * @dev only returns recipients that have a non-zero BPS allocation\n */\n function getRoyalties(uint256 _tokenId) \n external \n view\n virtual\n returns (\n address payable[] memory recipients, \n uint256[] memory bps\n );\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyV2Legacy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" + }, + "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" + }, + "@rarible/royalties/contracts/IERC2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n///\n/// @dev Interface for the NFT Royalty Standard\n///\n//interface IERC2981 is IERC165 {\ninterface IERC2981 {\n /// ERC165 bytes to add to interface array - set in parent contract\n /// implementing this standard\n ///\n /// bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n /// _registerInterface(_INTERFACE_ID_ERC2981);\n\n /// @notice Called with the sale price to determine how much royalty\n // is owed and to whom.\n /// @param _tokenId - the NFT asset queried for royalty information\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\n /// @return receiver - address of who should be sent the royalty payment\n /// @return royaltyAmount - the royalty payment amount for _salePrice\n function royaltyInfo(\n uint256 _tokenId,\n uint256 _salePrice\n ) external view returns (\n address receiver,\n uint256 royaltyAmount\n );\n}" + }, + "@rarible/royalties/contracts/impl/AbstractRoyalties.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract AbstractRoyalties {\n mapping (uint256 => LibPart.Part[]) internal royalties;\n\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\n uint256 totalValue;\n for (uint i = 0; i < _royalties.length; ++i) {\n require(_royalties[i].account != address(0x0), \"Recipient should be present\");\n require(_royalties[i].value != 0, \"Royalty value should be positive\");\n totalValue += _royalties[i].value;\n royalties[id].push(_royalties[i]);\n }\n require(totalValue < 10000, \"Royalty total value should be < 10000\");\n _onRoyaltiesSet(id, _royalties);\n }\n\n function _updateAccount(uint256 _id, address _from, address _to) internal {\n uint length = royalties[_id].length;\n for(uint i = 0; i < length; ++i) {\n if (royalties[_id][i].account == _from) {\n royalties[_id][i].account = payable(address(uint160(_to)));\n }\n }\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\n}\n" + }, + "@rarible/royalties/contracts/impl/RoyaltiesV1Impl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV1.sol\";\n\ncontract RoyaltiesV1Impl is AbstractRoyalties, RoyaltiesV1 {\n\n function getFeeRecipients(uint256 id) public override view returns (address payable[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n address payable[] memory result = new address payable[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = address(uint160(_royalties[i].account));\n }\n return result;\n }\n\n function getFeeBps(uint256 id) public override view returns (uint[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n uint[] memory result = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = _royalties[i].value;\n }\n return result;\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n address[] memory recipients = new address[](_royalties.length);\n uint[] memory bps = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n recipients[i] = _royalties[i].account;\n bps[i] = _royalties[i].value;\n }\n emit SecondarySaleFees(id, recipients, bps);\n }\n}\n" + }, + "@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV2.sol\";\nimport \"../IERC2981.sol\";\nimport \"../LibRoyalties2981.sol\";\n\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\n\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\n return royalties[id];\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n emit RoyaltiesSet(id, _royalties);\n }\n\n /*\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\n */\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\n if (royalties[id].length == 0) {\n receiver = address(0);\n royaltyAmount = 0;\n return(receiver, royaltyAmount);\n }\n LibPart.Part[] memory _royalties = royalties[id];\n receiver = _royalties[0].account;\n uint percent;\n for (uint i = 0; i < _royalties.length; ++i) {\n percent += _royalties[i].value;\n }\n //don`t need require(percent < 10000, \"Token royalty > 100%\"); here, because check later in calculateRoyalties\n royaltyAmount = percent * _salePrice / 10000;\n }\n}\n" + }, + "@rarible/royalties/contracts/LibRoyalties2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibRoyalties2981 {\n /*\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\n uint96 constant _WEIGHT_VALUE = 1000000;\n\n /*Method for converting amount to percent and forming LibPart*/\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\n LibPart.Part[] memory result;\n if (amount == 0) {\n return result;\n }\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\n require(percent < 10000, \"Royalties 2981 exceeds 100%\");\n result = new LibPart.Part[](1);\n result[0].account = payable(to);\n result[0].value = uint96(percent);\n return result;\n }\n}\n" + }, + "@rarible/royalties/contracts/LibRoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV1 {\n /*\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\n *\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\n */\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\n}\n" + }, + "@rarible/royalties/contracts/LibRoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV2 {\n /*\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\n}\n" + }, + "@rarible/royalties/contracts/RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\ninterface RoyaltiesV1 {\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\n\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\n function getFeeBps(uint256 id) external view returns (uint[] memory);\n}\n" + }, + "@rarible/royalties/contracts/RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltiesV2 {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC1155RoyaltiesV2 is RoyaltiesV2Impl, ERC1155Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, uint amount, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId, amount, \"\");\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV1Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV1.sol\";\n\ncontract TestERC721RoyaltiesV1 is RoyaltiesV1Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV1._INTERFACE_ID_FEES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC721RoyaltiesV2 is RoyaltiesV2Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/test/contracts/TestERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\n\ncontract TestERC1155 is ERC1155, Pausable {\n constructor() ERC1155(\"uri\"){\n\n }\n\n function mint(address to, uint tokenId, uint amount) external {\n _mint(to, tokenId, amount, \"\");\n }\n\n function batchSafeTransferFrom(\n address[] memory froms,\n address[] memory tos,\n uint256[] memory ids,\n uint256[] memory amounts\n ) external {\n require(froms.length == tos.length, \"wrong length 1\");\n require(tos.length == ids.length, \"wrong length 2\");\n require(ids.length == amounts.length, \"wrong length 3\");\n\n for (uint i = 0; i < froms.length; i ++) {\n safeTransferFrom(froms[i], tos[i], ids[i], amounts[i], \"\");\n }\n }\n\n function emitPauseEvent(bool paused) external {\n if (paused) {\n emit Paused(address(0));\n } else {\n emit Unpaused(address(0));\n }\n }\n}\n" + }, + "@rarible/test/contracts/TestERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\n\ncontract TestERC20 is ERC20Upgradeable {\n function mint(address to, uint amount) external {\n _mint(to, amount);\n }\n\n function init() external {\n __ERC20_init(\"TestERC20\", \"TE20\");\n }\n}\n" + }, + "@rarible/test/contracts/TestERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\n\ncontract TestERC721 is ERC721Upgradeable {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" + }, + "@rarible/tokens/contracts/access/MinterAccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" + }, + "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n\n uint256[50] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\n\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\n using StringsUpgradeable for uint256;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _clearMetadata(uint256 tokenId) internal override virtual {\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n uint256[50] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721/ERC721Base.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeable.sol\";\nimport \"./ERC721DefaultApproval.sol\";\nimport \"./ERC721Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721Base is OwnableUpgradeable, ERC721DefaultApproval, ERC721BurnableUpgradeable, ERC721Lazy, HasContractURI {\n\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721Upgradeable, ERC721DefaultApproval) view returns (bool) {\n return ERC721DefaultApproval._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApproval, ERC721Upgradeable, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApproval.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721Lazy) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function _mint(address to, uint256 tokenId) internal override(ERC721Lazy, ERC721Upgradeable) {\n super._mint(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721BurnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721Upgradeable.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeable is Initializable, ContextUpgradeable, ERC721Upgradeable {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721DefaultApproval.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721Upgradeable.sol\";\n\nabstract contract ERC721DefaultApproval is ERC721Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Lazy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\n\nabstract contract ERC721Lazy is IERC721LazyMint, ERC721Upgradeable, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _mint(address to, uint256 tokenId) internal virtual override {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burned(tokenId), \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Rarible.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Base.sol\";\n\ncontract ERC721Rarible is ERC721Base {\n\n event CreateERC721Rarible(address owner, string name, string symbol);\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external initializer {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/HasContractURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/IsPrivateCollection.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" + }, + "@rarible/tokens/contracts/LibURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibURI {\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\n function checkPrefix(string memory base, string memory _tokenURI)\n internal\n pure\n returns (string memory)\n {\n bytes memory whatBytes = bytes(base);\n bytes memory whereBytes = bytes(_tokenURI);\n\n if (whatBytes.length > whereBytes.length) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n\n for (uint256 j = 0; j < whatBytes.length; j++) {\n if (whereBytes[j] != whatBytes[j]) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n }\n\n return _tokenURI;\n }\n}\n" + }, + "@rarible/tokens/contracts/Mint721Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\n\ncontract Mint721Validator is ERC1271Validator {\n function __Mint721Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint721\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nabstract contract ITransferExecutor {\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal virtual;\n}\n" + }, + "@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../lib/LibDeal.sol\";\nimport \"./ITransferExecutor.sol\";\n\nabstract contract ITransferManager is ITransferExecutor {\n\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\n}" + }, + "@rarible/transfer-manager/contracts/lib/LibDeal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\nimport \"./LibFeeSide.sol\";\n\nlibrary LibDeal {\n struct DealSide {\n LibAsset.Asset asset;\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n address proxy;\n address from;\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/lib/LibFeeSide.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibFeeSide {\n\n enum FeeSide {NONE, LEFT, RIGHT}\n\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n return FeeSide.NONE;\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/lib/LibTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibTransfer {\n function transferEth(address to, uint value) internal {\n (bool success,) = to.call{ value: value }(\"\");\n require(success, \"transfer failed\");\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/RaribleTransferManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n ProtocolFeeData memory _protocolFee,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param _protocolFee protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n ProtocolFeeData memory _protocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = _protocolFee.buyerAmount;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" + }, + "@rarible/transfer-manager/contracts/TransferExecutor.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" + }, + "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract PunkTransferProxy is OperatorRole, ITransferProxy {\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, uint punkIndex) = abi.decode(asset.assetType.data, (address, uint));\n ICryptoPunksMarket punkToken = ICryptoPunksMarket(token);\n //check punk from real owner\n require(punkToken.punkIndexToAddress(punkIndex) == from, \"Seller not punk owner\");\n //buy punk to proxy, now proxy is owner\n punkToken.buyPunk(punkIndex);\n //Transfer ownership of a punk to buyer\n punkToken.transferPunk(to, punkIndex);\n }\n}" + }, + "src/AssetMatchersImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { AssetMatcherCollection } from \"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\";\n" + }, + "src/Auction.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {AuctionHouse1155} from \"@rarible/auction/contracts/1155/AuctionHouse1155.sol\";\nimport {AuctionHouse721} from \"@rarible/auction/contracts/721/AuctionHouse721.sol\";\nimport {Wrapper} from \"@rarible/auction/contracts/wrapper/Wrapper.sol\";" + }, + "src/ExchangeV2Import.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ExchangeV2} from \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {ExchangeMetaV2} from \"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\";" + }, + "src/ExchangeWrapperImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" + }, + "src/RaribleExchangeWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {RaribleExchangeWrapper} from \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" + }, + "src/RoyaltiesRegistryImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {RoyaltiesProviderV2Legacy} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol\";\nimport {RoyaltiesProviderArtBlocks} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol\";\nimport {RoyaltiesProviderArtBlocksV2} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol\";\n" + }, + "src/TokensImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\n//tokens 721\nimport {ERC721Rarible} from \"@rarible/tokens/contracts/erc-721/ERC721Rarible.sol\";\nimport {ERC721RaribleMinimal} from \"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport {ERC721RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\";\n\n//tokens 1155\nimport {ERC1155Rarible} from \"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\";\nimport {ERC1155RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\";\n\n//meta tokens\nimport {ERC721RaribleMeta} from \"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\";\nimport {ERC1155RaribleMeta} from \"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\";\n\n//beacons\nimport {ERC1155RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\";\nimport {ERC721RaribleMinimalBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\";\nimport {ERC721RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol\";\nimport {ERC1155RaribleBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\";\nimport {ERC721RaribleMinimalBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\";\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" + }, + "src/TransferProxiesImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ERC721LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\";\nimport {ERC1155LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\nimport {PunkTransferProxy} from \"@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol\";\n" + }, + "src/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/proxy/ProxyAdmin.sol\";\n" + }, + "test/contracts/ERC721LazyMintTest.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol\";\n" + }, + "test/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" + }, + "test/contracts/TestERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155 } from \"@rarible/test/contracts/TestERC1155.sol\";\n\n" + }, + "test/contracts/TestERC1155RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol\";\n\n" + }, + "test/contracts/TestERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" + }, + "test/contracts/TestERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721 } from \"@rarible/test/contracts/TestERC721.sol\";\n" + }, + "test/contracts/TestERC721RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV1 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol\";\n" + }, + "test/contracts/TestERC721RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol\";\n\n" + }, + "test/contracts/WrapperHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport { WrapperHelper } from \"@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol\";" + }, + "test/exchange/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/networks/arbitrum_sepolia.md b/projects/hardhat-deploy/networks/arbitrum_sepolia.md index 32b7f6ade..86ca7945e 100644 --- a/projects/hardhat-deploy/networks/arbitrum_sepolia.md +++ b/projects/hardhat-deploy/networks/arbitrum_sepolia.md @@ -14,5 +14,6 @@ ERC721RaribleMinimal | 0xB02f8F8F3527e5b2C7dB72B7eE1Af244fA8B3BAE | https://sepolia.arbiscan.io/address/0xB02f8F8F3527e5b2C7dB72B7eE1Af244fA8B3BAE ERC721RaribleMinimalBeacon | 0xED2DfF3672795C89dAd8a8162026838fFd818B82 | https://sepolia.arbiscan.io/address/0xED2DfF3672795C89dAd8a8162026838fFd818B82 ExchangeV2 | 0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118 | https://sepolia.arbiscan.io/address/0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118 + RaribleExchangeWrapper | 0x6374B7AC4b09a4C211ebf83e8DBB934D03487f82 | https://sepolia.arbiscan.io/address/0x6374B7AC4b09a4C211ebf83e8DBB934D03487f82 RoyaltiesRegistry | 0x4f4cC63D7f2bC894078d41f284453062842Afa46 | https://sepolia.arbiscan.io/address/0x4f4cC63D7f2bC894078d41f284453062842Afa46 TransferProxy | 0x3049455cdA17beE43d61090Ec344624aeda72Ed6 | https://sepolia.arbiscan.io/address/0x3049455cdA17beE43d61090Ec344624aeda72Ed6 diff --git a/projects/hardhat-deploy/networks/base_sepolia.md b/projects/hardhat-deploy/networks/base_sepolia.md index 42776f335..3844772f0 100644 --- a/projects/hardhat-deploy/networks/base_sepolia.md +++ b/projects/hardhat-deploy/networks/base_sepolia.md @@ -12,6 +12,6 @@ ERC721RaribleMeta | 0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494 | https://base-sepolia.blockscout.com/address/0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494 ERC721RaribleMinimalBeaconMeta | 0x41407B447Fb5425187A9BCA3a062644EF2410F8D | https://base-sepolia.blockscout.com/address/0x41407B447Fb5425187A9BCA3a062644EF2410F8D ExchangeMetaV2 | 0x0fE65B68Eb627c21EAF3cfe8183C4F946F3d48BD | https://base-sepolia.blockscout.com/address/0x0fE65B68Eb627c21EAF3cfe8183C4F946F3d48BD - RaribleExchangeWrapper | 0x4fEB488209d2A0A71fEef28E5fA306F15b2D5FEa | https://base-sepolia.blockscout.com/address/0x4fEB488209d2A0A71fEef28E5fA306F15b2D5FEa + RaribleExchangeWrapper | 0x3d3c8f3aCcf388c3618BbE80598692B6d15bd4D5 | https://base-sepolia.blockscout.com/address/0x3d3c8f3aCcf388c3618BbE80598692B6d15bd4D5 RoyaltiesRegistry | 0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b | https://base-sepolia.blockscout.com/address/0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b TransferProxy | 0x4f4cC63D7f2bC894078d41f284453062842Afa46 | https://base-sepolia.blockscout.com/address/0x4f4cC63D7f2bC894078d41f284453062842Afa46 diff --git a/projects/hardhat-deploy/networks/polygon_amoy_testnet.md b/projects/hardhat-deploy/networks/polygon_amoy_testnet.md index 635578b93..017e7af2d 100644 --- a/projects/hardhat-deploy/networks/polygon_amoy_testnet.md +++ b/projects/hardhat-deploy/networks/polygon_amoy_testnet.md @@ -12,6 +12,6 @@ ERC721RaribleMeta | 0x41407B447Fb5425187A9BCA3a062644EF2410F8D | https://www.oklink.com/amoy/address/0x41407B447Fb5425187A9BCA3a062644EF2410F8D ERC721RaribleMinimalBeaconMeta | 0xB020bA7fcF43DCc59eF0103624BD6FADE66d105E | https://www.oklink.com/amoy/address/0xB020bA7fcF43DCc59eF0103624BD6FADE66d105E ExchangeMetaV2 | 0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77 | https://www.oklink.com/amoy/address/0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77 - RaribleExchangeWrapper | 0x2FCE8435F0455eDc702199741411dbcD1B7606cA | https://www.oklink.com/amoy/address/0x2FCE8435F0455eDc702199741411dbcD1B7606cA + RaribleExchangeWrapper | 0x7d47126a2600E22eab9eD6CF0e515678727779A6 | https://www.oklink.com/amoy/address/0x7d47126a2600E22eab9eD6CF0e515678727779A6 RoyaltiesRegistry | 0xD1f689646861870D44B33dBBb413Fa7D06A2B52f | https://www.oklink.com/amoy/address/0xD1f689646861870D44B33dBBb413Fa7D06A2B52f TransferProxy | 0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af | https://www.oklink.com/amoy/address/0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af diff --git a/projects/hardhat-deploy/utils/config/arbitrum_sepolia.json b/projects/hardhat-deploy/utils/config/arbitrum_sepolia.json index efc70ff2d..37a435d14 100644 --- a/projects/hardhat-deploy/utils/config/arbitrum_sepolia.json +++ b/projects/hardhat-deploy/utils/config/arbitrum_sepolia.json @@ -1,4 +1,4 @@ { - "deploy_meta": true, - "deploy_non_meta": false + "deploy_meta": false, + "deploy_non_meta": true } \ No newline at end of file From 94679b87637069fc8e87f35b03fd2e8847a3accb Mon Sep 17 00:00:00 2001 From: disenotov Date: Wed, 24 Apr 2024 09:04:30 +0300 Subject: [PATCH 02/25] chore: deploy contracts to oasys mainnet --- .../hardhat-deploy/deployments/oasys/.chainId | 1 + .../oasys/AssetMatcherCollection.json | 84 + .../deployments/oasys/DefaultProxyAdmin.json | 214 +++ .../oasys/ERC1155LazyMintTransferProxy.json | 250 +++ .../deployments/oasys/ERC1155Rarible.json | 199 ++ .../oasys/ERC1155RaribleBeacon.json | 165 ++ .../oasys/ERC1155RaribleFactoryC2.json | 340 ++++ .../oasys/ERC1155Rarible_Implementation.json | 1632 +++++++++++++++++ .../deployments/oasys/ERC20TransferProxy.json | 238 +++ .../oasys/ERC721LazyMintTransferProxy.json | 250 +++ .../oasys/ERC721RaribleFactoryC2.json | 340 ++++ .../oasys/ERC721RaribleMinimal.json | 199 ++ .../oasys/ERC721RaribleMinimalBeacon.json | 165 ++ .../ERC721RaribleMinimal_Implementation.json | 1508 +++++++++++++++ .../deployments/oasys/ExchangeV2.json | 199 ++ .../oasys/ExchangeV2_Implementation.json | 1206 ++++++++++++ .../oasys/PermissionedContractFactory.json | 491 +++++ .../oasys/RaribleExchangeWrapper.json | 642 +++++++ .../deployments/oasys/RoyaltiesRegistry.json | 199 ++ .../RoyaltiesRegistry_Implementation.json | 609 ++++++ .../deployments/oasys/TransferProxy.json | 276 +++ .../5d7ce4cc295dc1f452c8f0c73dceccfb.json | 605 ++++++ .../6bd3e189b416974652fe89dcdf00f7eb.json | 605 ++++++ .../97f4234afe2a6aef4388d964e224ac4a.json | 95 + .../a8f7bc89d9961e2d9345e17e373af95f.json | 73 + projects/hardhat-deploy/networks/oasys.md | 18 + 26 files changed, 10603 insertions(+) create mode 100644 projects/hardhat-deploy/deployments/oasys/.chainId create mode 100644 projects/hardhat-deploy/deployments/oasys/AssetMatcherCollection.json create mode 100644 projects/hardhat-deploy/deployments/oasys/DefaultProxyAdmin.json create mode 100644 projects/hardhat-deploy/deployments/oasys/ERC1155LazyMintTransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/oasys/ERC1155Rarible.json create mode 100644 projects/hardhat-deploy/deployments/oasys/ERC1155RaribleBeacon.json create mode 100644 projects/hardhat-deploy/deployments/oasys/ERC1155RaribleFactoryC2.json create mode 100644 projects/hardhat-deploy/deployments/oasys/ERC1155Rarible_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/oasys/ERC20TransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/oasys/ERC721LazyMintTransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/oasys/ERC721RaribleFactoryC2.json create mode 100644 projects/hardhat-deploy/deployments/oasys/ERC721RaribleMinimal.json create mode 100644 projects/hardhat-deploy/deployments/oasys/ERC721RaribleMinimalBeacon.json create mode 100644 projects/hardhat-deploy/deployments/oasys/ERC721RaribleMinimal_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/oasys/ExchangeV2.json create mode 100644 projects/hardhat-deploy/deployments/oasys/ExchangeV2_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/oasys/PermissionedContractFactory.json create mode 100644 projects/hardhat-deploy/deployments/oasys/RaribleExchangeWrapper.json create mode 100644 projects/hardhat-deploy/deployments/oasys/RoyaltiesRegistry.json create mode 100644 projects/hardhat-deploy/deployments/oasys/RoyaltiesRegistry_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/oasys/TransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/oasys/solcInputs/5d7ce4cc295dc1f452c8f0c73dceccfb.json create mode 100644 projects/hardhat-deploy/deployments/oasys/solcInputs/6bd3e189b416974652fe89dcdf00f7eb.json create mode 100644 projects/hardhat-deploy/deployments/oasys/solcInputs/97f4234afe2a6aef4388d964e224ac4a.json create mode 100644 projects/hardhat-deploy/deployments/oasys/solcInputs/a8f7bc89d9961e2d9345e17e373af95f.json create mode 100644 projects/hardhat-deploy/networks/oasys.md diff --git a/projects/hardhat-deploy/deployments/oasys/.chainId b/projects/hardhat-deploy/deployments/oasys/.chainId new file mode 100644 index 000000000..030d25b28 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/.chainId @@ -0,0 +1 @@ +248 \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/AssetMatcherCollection.json b/projects/hardhat-deploy/deployments/oasys/AssetMatcherCollection.json new file mode 100644 index 000000000..2ba5209d8 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/AssetMatcherCollection.json @@ -0,0 +1,84 @@ +{ + "address": "0xD30271264D862605B98e04E988BD50EB37F7E9C9", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "leftAssetType", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "rightAssetType", + "type": "tuple" + } + ], + "name": "matchAssets", + "outputs": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "numDeployments": 13, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"leftAssetType\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"rightAssetType\",\"type\":\"tuple\"}],\"name\":\"matchAssets\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\":\"AssetMatcherCollection\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\n/*\\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\\n */\\ncontract AssetMatcherCollection is IAssetMatcher {\\n\\n bytes constant EMPTY = \\\"\\\";\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\\n if (\\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \\n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \\n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\\n ) {\\n (address leftToken) = abi.decode(leftAssetType.data, (address));\\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\\n if (leftToken == rightToken) {\\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\\n }\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n}\",\"keccak256\":\"0x115e3e94c7b3df6de5c8adf15c42bc737876212e37bd0d0ebe446494d57c94e9\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610403806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d3f7cb014610030575b600080fd5b61004361003e3660046102da565b610059565b604051610050919061033b565b60405180910390f35b610061610195565b81516001600160e01b0319166339d690a360e11b1480610092575081516001600160e01b03191663d8f960c160e01b145b806100ae575081516001600160e01b03191663025ceed960e61b145b806100c9575081516001600160e01b03191662737ea960e61b145b806100e5575081516001600160e01b031916630f9ae27560e21b145b1561016b5760008360200151806020019051810190610104919061028e565b90506000836020015180602001905181019061012091906102af565b509050806001600160a01b0316826001600160a01b031614156101685750506040805180820190915282516001600160e01b031916815260208084015190820152905061018f565b50505b50604080518082018252600080825282516020818101909452908152918101919091525b92915050565b60408051808201909152600081526060602082015290565b80516001600160a01b03811681146101c457600080fd5b919050565b6000604082840312156101da578081fd5b6040516040810167ffffffffffffffff82821081831117156101f857fe5b816040528293508435915063ffffffff60e01b8216821461021857600080fd5b908252602090848201358181111561022f57600080fd5b8501601f8101871361024057600080fd5b80358281111561024c57fe5b61025e601f8201601f191685016103a9565b9250808352878482840101111561027457600080fd5b808483018585013760009083018401525091015292915050565b60006020828403121561029f578081fd5b6102a8826101ad565b9392505050565b600080604083850312156102c1578081fd5b6102ca836101ad565b9150602083015190509250929050565b600080604083850312156102ec578182fd5b823567ffffffffffffffff80821115610303578384fd5b61030f868387016101c9565b93506020850135915080821115610324578283fd5b50610331858286016101c9565b9150509250929050565b6000602080835263ffffffff60e01b84511681840152808401516040808501528051806060860152835b8181101561038157828101840151868201608001528301610365565b818111156103925784608083880101525b50601f01601f191693909301608001949350505050565b60405181810167ffffffffffffffff811182821017156103c557fe5b60405291905056fea2646970667358221220fe8f50b49531504ff963dc9b719db80c3131b9d5b69661a49edd957769dee45764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d3f7cb014610030575b600080fd5b61004361003e3660046102da565b610059565b604051610050919061033b565b60405180910390f35b610061610195565b81516001600160e01b0319166339d690a360e11b1480610092575081516001600160e01b03191663d8f960c160e01b145b806100ae575081516001600160e01b03191663025ceed960e61b145b806100c9575081516001600160e01b03191662737ea960e61b145b806100e5575081516001600160e01b031916630f9ae27560e21b145b1561016b5760008360200151806020019051810190610104919061028e565b90506000836020015180602001905181019061012091906102af565b509050806001600160a01b0316826001600160a01b031614156101685750506040805180820190915282516001600160e01b031916815260208084015190820152905061018f565b50505b50604080518082018252600080825282516020818101909452908152918101919091525b92915050565b60408051808201909152600081526060602082015290565b80516001600160a01b03811681146101c457600080fd5b919050565b6000604082840312156101da578081fd5b6040516040810167ffffffffffffffff82821081831117156101f857fe5b816040528293508435915063ffffffff60e01b8216821461021857600080fd5b908252602090848201358181111561022f57600080fd5b8501601f8101871361024057600080fd5b80358281111561024c57fe5b61025e601f8201601f191685016103a9565b9250808352878482840101111561027457600080fd5b808483018585013760009083018401525091015292915050565b60006020828403121561029f578081fd5b6102a8826101ad565b9392505050565b600080604083850312156102c1578081fd5b6102ca836101ad565b9150602083015190509250929050565b600080604083850312156102ec578182fd5b823567ffffffffffffffff80821115610303578384fd5b61030f868387016101c9565b93506020850135915080821115610324578283fd5b50610331858286016101c9565b9150509250929050565b6000602080835263ffffffff60e01b84511681840152808401516040808501528051806060860152835b8181101561038157828101840151868201608001528301610365565b818111156103925784608083880101525b50601f01601f191693909301608001949350505050565b60405181810167ffffffffffffffff811182821017156103c557fe5b60405291905056fea2646970667358221220fe8f50b49531504ff963dc9b719db80c3131b9d5b69661a49edd957769dee45764736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/DefaultProxyAdmin.json b/projects/hardhat-deploy/deployments/oasys/DefaultProxyAdmin.json new file mode 100644 index 000000000..f78124826 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/DefaultProxyAdmin.json @@ -0,0 +1,214 @@ +{ + "address": "0x5eC8268AeD656E9817282938f99Cf6a4c4cFBAF0", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "numDeployments": 24, + "solcInputHash": "97f4234afe2a6aef4388d964e224ac4a", + "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-sol08/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-sol08/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor() {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(\\n Address.isContract(IBeacon(newBeacon).implementation()),\\n \\\"ERC1967: beacon implementation is not a contract\\\"\\n );\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overridden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x33b8603bfbef7f33d9308b79c79aa3db7eb19525fd1addd764285e834ca275d7\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107598061007e6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610545565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d161022e565b005b3480156100df57600080fd5b506100d16100ee366004610569565b610242565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f3660046105d1565b6102c3565b34801561013057600080fd5b506100d161013f366004610569565b61034b565b34801561015057600080fd5b506100d161015f366004610545565b61039a565b34801561017057600080fd5b506100a061017f366004610545565b61042f565b6000806000836001600160a01b03166040516101c3907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d80600081146101fe576040519150601f19603f3d011682016040523d82523d6000602084013e610203565b606091505b50915091508161021257600080fd5b8080602001905181019061022691906106a7565b949350505050565b61023661046e565b61024060006104c8565b565b61024a61046e565b6040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b1580156102a757600080fd5b505af11580156102bb573d6000803e3d6000fd5b505050505050565b6102cb61046e565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef28690349061031490869086906004016106c4565b6000604051808303818588803b15801561032d57600080fd5b505af1158015610341573d6000803e3d6000fd5b5050505050505050565b61035361046e565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690633659cfe69060240161028d565b6103a261046e565b6001600160a01b0381166104235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61042c816104c8565b50565b6000806000836001600160a01b03166040516101c3907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000546001600160a01b031633146102405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041a565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461042c57600080fd5b60006020828403121561055757600080fd5b813561056281610530565b9392505050565b6000806040838503121561057c57600080fd5b823561058781610530565b9150602083013561059781610530565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156105e657600080fd5b83356105f181610530565b9250602084013561060181610530565b9150604084013567ffffffffffffffff8082111561061e57600080fd5b818601915086601f83011261063257600080fd5b813581811115610644576106446105a2565b604051601f8201601f19908116603f0116810190838211818310171561066c5761066c6105a2565b8160405282815289602084870101111561068557600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156106b957600080fd5b815161056281610530565b6001600160a01b038316815260006020604081840152835180604085015260005b81811015610701578581018301518582016060015282016106e5565b506000606082860101526060601f19601f83011685010192505050939250505056fea2646970667358221220e08e0d2eece1efd9b7bb8c6ce80fa9f9bee9550a46d7dfced058f0651be29aaf64736f6c63430008130033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b366004610545565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d161022e565b005b3480156100df57600080fd5b506100d16100ee366004610569565b610242565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f3660046105d1565b6102c3565b34801561013057600080fd5b506100d161013f366004610569565b61034b565b34801561015057600080fd5b506100d161015f366004610545565b61039a565b34801561017057600080fd5b506100a061017f366004610545565b61042f565b6000806000836001600160a01b03166040516101c3907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d80600081146101fe576040519150601f19603f3d011682016040523d82523d6000602084013e610203565b606091505b50915091508161021257600080fd5b8080602001905181019061022691906106a7565b949350505050565b61023661046e565b61024060006104c8565b565b61024a61046e565b6040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b1580156102a757600080fd5b505af11580156102bb573d6000803e3d6000fd5b505050505050565b6102cb61046e565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef28690349061031490869086906004016106c4565b6000604051808303818588803b15801561032d57600080fd5b505af1158015610341573d6000803e3d6000fd5b5050505050505050565b61035361046e565b6040517f3659cfe60000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152831690633659cfe69060240161028d565b6103a261046e565b6001600160a01b0381166104235760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61042c816104c8565b50565b6000806000836001600160a01b03166040516101c3907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000546001600160a01b031633146102405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041a565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116811461042c57600080fd5b60006020828403121561055757600080fd5b813561056281610530565b9392505050565b6000806040838503121561057c57600080fd5b823561058781610530565b9150602083013561059781610530565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156105e657600080fd5b83356105f181610530565b9250602084013561060181610530565b9150604084013567ffffffffffffffff8082111561061e57600080fd5b818601915086601f83011261063257600080fd5b813581811115610644576106446105a2565b604051601f8201601f19908116603f0116810190838211818310171561066c5761066c6105a2565b8160405282815289602084870101111561068557600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000602082840312156106b957600080fd5b815161056281610530565b6001600160a01b038316815260006020604081840152835180604085015260005b81811015610701578581018301518582016060015282016106e5565b506000606082860101526060601f19601f83011685010192505050939250505056fea2646970667358221220e08e0d2eece1efd9b7bb8c6ce80fa9f9bee9550a46d7dfced058f0651be29aaf64736f6c63430008130033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 400, + "contract": "@openzeppelin/contracts-sol08/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/ERC1155LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/oasys/ERC1155LazyMintTransferProxy.json new file mode 100644 index 000000000..84ea6d3f9 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/ERC1155LazyMintTransferProxy.json @@ -0,0 +1,250 @@ +{ + "address": "0x7698983DF7cd2A57aCDF97656aebFf64398A60a7", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "asset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "numDeployments": 17, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":\"ERC1155LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\\n }\\n}\\n\",\"keccak256\":\"0x246520e6a1b1b2a82d45b69e7f62b9a13a989b4cf274554b380f05eeca530edc\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610e2e806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109dd565b6101b0565b61008a6102a6565b6100af610352565b6040516100bc9190610ba6565b60405180910390f35b61008a6100d33660046108c3565b610361565b61008a6100e63660046108c3565b6103e7565b61008a6100f93660046108c3565b61046a565b600054610100900460ff1680610117575061011761056d565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b61019361057e565b61019b61061e565b80156101ad576000805461ff00191690555b50565b606560006101bc610717565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610dd16028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061023391906108df565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b815260040161026d9493929190610bba565b600060405180830381600087803b15801561028757600080fd5b505af115801561029b573d6000803e3d6000fd5b505050505050505050565b6102ae610717565b6001600160a01b03166102bf610352565b6001600160a01b031614610308576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610369610717565b6001600160a01b031661037a610352565b6001600160a01b0316146103c3576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6103ef610717565b6001600160a01b0316610400610352565b6001600160a01b031614610449576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b610472610717565b6001600160a01b0316610483610352565b6001600160a01b0316146104cc576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b0381166105115760405162461bcd60e51b8152600401808060200182810382526026815260200180610d5d6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105783061071b565b15905090565b600054610100900460ff1680610597575061059761056d565b806105a5575060005460ff16155b6105e05760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff1680610637575061063761056d565b80610645575060005460ff16155b6106805760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff161580156106ab576000805460ff1961ff0019909116610100171660011790555b60006106b5610717565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061073861073384610cf5565b610cb3565b905082815283838301111561074c57600080fd5b61075a836020830184610d17565b9392505050565b803561072081610d47565b600082601f83011261077c578081fd5b8151602061078c61073383610cd7565b82815281810190858301855b858110156107d6578151880189603f8201126107b2578788fd5b6107c38a8783015160408401610725565b8552509284019290840190600101610798565b5090979650505050505050565b600082601f8301126107f3578081fd5b8151602061080361073383610cd7565b82815281810190858301604080860288018501891015610821578687fd5b865b868110156108965781838b031215610839578788fd5b815182810181811067ffffffffffffffff8211171561085457fe5b8352835161086181610d47565b8152838701516bffffffffffffffffffffffff8116811461088057898afd5b8188015285529385019391810191600101610823565b509198975050505050505050565b600082601f8301126108b4578081fd5b61075a83835160208501610725565b6000602082840312156108d4578081fd5b813561075a81610d47565b600080604083850312156108f1578081fd5b82516108fc81610d47565b602084015190925067ffffffffffffffff80821115610919578283fd5b9084019060c0828703121561092c578283fd5b61093660c0610cb3565b8251815260208301518281111561094b578485fd5b610957888286016108a4565b60208301525060408301516040820152606083015182811115610978578485fd5b610984888286016107e3565b60608301525060808301518281111561099b578485fd5b6109a7888286016107e3565b60808301525060a0830151828111156109be578485fd5b6109ca8882860161076c565b60a0830152508093505050509250929050565b6000806000606084860312156109f1578081fd5b833567ffffffffffffffff80821115610a08578283fd5b81860191506040808389031215610a1d578384fd5b80518181018181108482111715610a3057fe5b808352843584811115610a41578687fd5b8501808b03841315610a51578687fd5b608083018281108682111715610a6357fe5b845280356001600160e01b031981168114610a7c578788fd5b825260208181013586811115610a90578889fd5b82019550601f86018c13610aa2578788fd5b85359150610ab261073383610cf5565b8281528c82848901011115610ac5578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610af4818c01610761565b985050505050610b05818801610761565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b6f57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b31565b509495945050505050565b60008151808452610b92816020860160208601610d17565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610be2610140850182610b7a565b9050604088015160c08501526060880151607f19808684030160e0870152610c0a8383610b1e565b925060808a015191508086840301610100870152610c288383610b1e565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610c8157601f19868303018452610c6f828651610b7a565b94870194938701939150600101610c53565b508096505050505050610c9681840187610b11565b50610ca46040830185610b11565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610ccf57fe5b604052919050565b600067ffffffffffffffff821115610ceb57fe5b5060209081020190565b600067ffffffffffffffff821115610d0957fe5b50601f01601f191660200190565b60005b83811015610d32578181015183820152602001610d1a565b83811115610d41576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a28019e3a9ffc83e27b05dd4ff150123e74358301a86a8729d2441ab31507f4664736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109dd565b6101b0565b61008a6102a6565b6100af610352565b6040516100bc9190610ba6565b60405180910390f35b61008a6100d33660046108c3565b610361565b61008a6100e63660046108c3565b6103e7565b61008a6100f93660046108c3565b61046a565b600054610100900460ff1680610117575061011761056d565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b61019361057e565b61019b61061e565b80156101ad576000805461ff00191690555b50565b606560006101bc610717565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610dd16028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061023391906108df565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b815260040161026d9493929190610bba565b600060405180830381600087803b15801561028757600080fd5b505af115801561029b573d6000803e3d6000fd5b505050505050505050565b6102ae610717565b6001600160a01b03166102bf610352565b6001600160a01b031614610308576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610369610717565b6001600160a01b031661037a610352565b6001600160a01b0316146103c3576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6103ef610717565b6001600160a01b0316610400610352565b6001600160a01b031614610449576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b610472610717565b6001600160a01b0316610483610352565b6001600160a01b0316146104cc576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b0381166105115760405162461bcd60e51b8152600401808060200182810382526026815260200180610d5d6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105783061071b565b15905090565b600054610100900460ff1680610597575061059761056d565b806105a5575060005460ff16155b6105e05760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff1680610637575061063761056d565b80610645575060005460ff16155b6106805760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff161580156106ab576000805460ff1961ff0019909116610100171660011790555b60006106b5610717565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061073861073384610cf5565b610cb3565b905082815283838301111561074c57600080fd5b61075a836020830184610d17565b9392505050565b803561072081610d47565b600082601f83011261077c578081fd5b8151602061078c61073383610cd7565b82815281810190858301855b858110156107d6578151880189603f8201126107b2578788fd5b6107c38a8783015160408401610725565b8552509284019290840190600101610798565b5090979650505050505050565b600082601f8301126107f3578081fd5b8151602061080361073383610cd7565b82815281810190858301604080860288018501891015610821578687fd5b865b868110156108965781838b031215610839578788fd5b815182810181811067ffffffffffffffff8211171561085457fe5b8352835161086181610d47565b8152838701516bffffffffffffffffffffffff8116811461088057898afd5b8188015285529385019391810191600101610823565b509198975050505050505050565b600082601f8301126108b4578081fd5b61075a83835160208501610725565b6000602082840312156108d4578081fd5b813561075a81610d47565b600080604083850312156108f1578081fd5b82516108fc81610d47565b602084015190925067ffffffffffffffff80821115610919578283fd5b9084019060c0828703121561092c578283fd5b61093660c0610cb3565b8251815260208301518281111561094b578485fd5b610957888286016108a4565b60208301525060408301516040820152606083015182811115610978578485fd5b610984888286016107e3565b60608301525060808301518281111561099b578485fd5b6109a7888286016107e3565b60808301525060a0830151828111156109be578485fd5b6109ca8882860161076c565b60a0830152508093505050509250929050565b6000806000606084860312156109f1578081fd5b833567ffffffffffffffff80821115610a08578283fd5b81860191506040808389031215610a1d578384fd5b80518181018181108482111715610a3057fe5b808352843584811115610a41578687fd5b8501808b03841315610a51578687fd5b608083018281108682111715610a6357fe5b845280356001600160e01b031981168114610a7c578788fd5b825260208181013586811115610a90578889fd5b82019550601f86018c13610aa2578788fd5b85359150610ab261073383610cf5565b8281528c82848901011115610ac5578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610af4818c01610761565b985050505050610b05818801610761565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b6f57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b31565b509495945050505050565b60008151808452610b92816020860160208601610d17565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610be2610140850182610b7a565b9050604088015160c08501526060880151607f19808684030160e0870152610c0a8383610b1e565b925060808a015191508086840301610100870152610c288383610b1e565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610c8157601f19868303018452610c6f828651610b7a565b94870194938701939150600101610c53565b508096505050505050610c9681840187610b11565b50610ca46040830185610b11565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610ccf57fe5b604052919050565b600067ffffffffffffffff821115610ceb57fe5b5060209081020190565b600067ffffffffffffffff821115610d0957fe5b50601f01601f191660200190565b60005b83811015610d32578181015183820152602001610d1a565b83811115610d41576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a28019e3a9ffc83e27b05dd4ff150123e74358301a86a8729d2441ab31507f4664736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19253, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/ERC1155Rarible.json b/projects/hardhat-deploy/deployments/oasys/ERC1155Rarible.json new file mode 100644 index 000000000..00ab5a3d2 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/ERC1155Rarible.json @@ -0,0 +1,199 @@ +{ + "address": "0x090dA3FB3917FC06f2b28F227BcB28a73f946a2E", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "numDeployments": 4, + "solcInputHash": "97f4234afe2a6aef4388d964e224ac4a", + "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-sol08/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-sol08/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(\\n Address.isContract(IBeacon(newBeacon).implementation()),\\n \\\"ERC1967: beacon implementation is not a contract\\\"\\n );\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overridden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405260405162000e3338038062000e33833981016040819052620000269162000414565b828162000036828260006200004d565b50620000449050826200007f565b50505062000547565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000dec833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e0c6027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000dec8339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b60606001600160a01b0384163b620003015760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001c4565b600080856001600160a01b0316856040516200031e9190620004f4565b600060405180830381855af49150503d80600081146200035b576040519150601f19603f3d011682016040523d82523d6000602084013e62000360565b606091505b509092509050620003738282866200037d565b9695505050505050565b606083156200038e5750816200015b565b8251156200039f5782518084602001fd5b8160405162461bcd60e51b8152600401620001c4919062000512565b80516001600160a01b0381168114620003d357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200040b578181015183820152602001620003f1565b50506000910152565b6000806000606084860312156200042a57600080fd5b6200043584620003bb565b92506200044560208501620003bb565b60408501519092506001600160401b03808211156200046357600080fd5b818601915086601f8301126200047857600080fd5b8151818111156200048d576200048d620003d8565b604051601f8201601f19908116603f01168101908382118183101715620004b857620004b8620003d8565b81604052828152896020848701011115620004d257600080fd5b620004e5836020830160208801620003ee565b80955050505050509250925092565b6000825162000508818460208701620003ee565b9190910192915050565b602081526000825180602084015262000533816040850160208701620003ee565b601f01601f19169190910160400192915050565b61089580620005576000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610727565b610128565b61006b6100a3366004610742565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610727565b6101fd565b34801561010557600080fd5b506100bd61021d565b61011661023e565b6101266101216102ee565b6102f8565b565b61013061031c565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061034f565b50565b61015a61010e565b61016d61031c565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061034f915050565b505050565b6101bf61010e565b60006101d661031c565b6001600160a01b031633036101f2576101ed6102ee565b905090565b6101fa61010e565b90565b61020561031c565b6001600160a01b0316330361015d5761015a8161037a565b600061022761031c565b6001600160a01b031633036101f2576101ed61031c565b61024661031c565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6103ce565b3660008037600080366000845af43d6000803e808015610317573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610358836103f6565b6000825111806103655750805b156101bf576103748383610436565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103a361031c565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610462565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610340565b6103ff8161053a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061045b8383604051806060016040528060278152602001610839602791396105de565b9392505050565b6001600160a01b0381166104de5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102e5565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6001600160a01b0381163b6105b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016102e5565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610501565b60606001600160a01b0384163b61065d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016102e5565b600080856001600160a01b03168560405161067891906107e9565b600060405180830381855af49150503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b50915091506106c88282866106d2565b9695505050505050565b606083156106e157508161045b565b8251156106f15782518084602001fd5b8160405162461bcd60e51b81526004016102e59190610805565b80356001600160a01b038116811461072257600080fd5b919050565b60006020828403121561073957600080fd5b61045b8261070b565b60008060006040848603121561075757600080fd5b6107608461070b565b9250602084013567ffffffffffffffff8082111561077d57600080fd5b818601915086601f83011261079157600080fd5b8135818111156107a057600080fd5b8760208285010111156107b257600080fd5b6020830194508093505050509250925092565b60005b838110156107e05781810151838201526020016107c8565b50506000910152565b600082516107fb8184602087016107c5565b9190910192915050565b60208152600082518060208401526108248160408501602087016107c5565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c237d612a72e85a9456b87073b6e556b1bd4fb18a233025ebd3fcd47377bbfa364736f6c63430008130033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610727565b610128565b61006b6100a3366004610742565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610727565b6101fd565b34801561010557600080fd5b506100bd61021d565b61011661023e565b6101266101216102ee565b6102f8565b565b61013061031c565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061034f565b50565b61015a61010e565b61016d61031c565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061034f915050565b505050565b6101bf61010e565b60006101d661031c565b6001600160a01b031633036101f2576101ed6102ee565b905090565b6101fa61010e565b90565b61020561031c565b6001600160a01b0316330361015d5761015a8161037a565b600061022761031c565b6001600160a01b031633036101f2576101ed61031c565b61024661031c565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6103ce565b3660008037600080366000845af43d6000803e808015610317573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610358836103f6565b6000825111806103655750805b156101bf576103748383610436565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103a361031c565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610462565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610340565b6103ff8161053a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061045b8383604051806060016040528060278152602001610839602791396105de565b9392505050565b6001600160a01b0381166104de5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102e5565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6001600160a01b0381163b6105b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016102e5565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610501565b60606001600160a01b0384163b61065d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016102e5565b600080856001600160a01b03168560405161067891906107e9565b600060405180830381855af49150503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b50915091506106c88282866106d2565b9695505050505050565b606083156106e157508161045b565b8251156106f15782518084602001fd5b8160405162461bcd60e51b81526004016102e59190610805565b80356001600160a01b038116811461072257600080fd5b919050565b60006020828403121561073957600080fd5b61045b8261070b565b60008060006040848603121561075757600080fd5b6107608461070b565b9250602084013567ffffffffffffffff8082111561077d57600080fd5b818601915086601f83011261079157600080fd5b8135818111156107a057600080fd5b8760208285010111156107b257600080fd5b6020830194508093505050509250925092565b60005b838110156107e05781810151838201526020016107c8565b50506000910152565b600082516107fb8184602087016107c5565b9190910192915050565b60208152600082518060208401526108248160408501602087016107c5565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c237d612a72e85a9456b87073b6e556b1bd4fb18a233025ebd3fcd47377bbfa364736f6c63430008130033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "events": { + "AdminChanged(address,address)": { + "details": "Emitted when the admin account has changed." + }, + "BeaconUpgraded(address)": { + "details": "Emitted when the beacon is upgraded." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/ERC1155RaribleBeacon.json b/projects/hardhat-deploy/deployments/oasys/ERC1155RaribleBeacon.json new file mode 100644 index 000000000..82565d9b7 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/ERC1155RaribleBeacon.json @@ -0,0 +1,165 @@ +{ + "address": "0x6253D31110dE339a9D58d15a294C6a96F4703d93", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "numDeployments": 3, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\":\"ERC1155RaribleBeacon\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\\n constructor(address impl) UpgradeableBeacon(impl) {\\n\\n }\\n}\\n\",\"keccak256\":\"0xeac97cea9e8e27a1a405f493d56456e845c2a3e6058e48d931f0f692865d3f9f\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506040516105d73803806105d78339818101604052602081101561003357600080fd5b505180600061004061009a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100938161009e565b5050610114565b3390565b6100b18161010e60201b6103821760201c565b6100ec5760405162461bcd60e51b81526004018080602001828103825260338152602001806105a46033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b610481806101236000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220e9d7f6e22783cbcada5463072ff2ae001e3cc27936a59d613ef9b7d47e56193964736f6c634300070600335570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220e9d7f6e22783cbcada5463072ff2ae001e3cc27936a59d613ef9b7d47e56193964736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "implementation()": { + "details": "Returns the current implementation address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeTo(address)": { + "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol:ERC1155RaribleBeacon", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6181, + "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol:ERC1155RaribleBeacon", + "label": "_implementation", + "offset": 0, + "slot": "1", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/ERC1155RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/oasys/ERC1155RaribleFactoryC2.json new file mode 100644 index 000000000..bc00cab6d --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/ERC1155RaribleFactoryC2.json @@ -0,0 +1,340 @@ +{ + "address": "0xD9Cb91C9b6Aa00e75ef856557CA86371599be3e8", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_beacon", + "type": "address" + }, + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_lazyTransferProxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create1155RaribleProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create1155RaribleUserProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "beacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "numDeployments": 2, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":\"ERC1155RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-1155/ERC1155Rarible.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\\n *\\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC1155RaribleFactoryC2 is Ownable{\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create1155RaribleProxy(address proxy);\\n event Create1155RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleProxy(beaconProxy);\\n }\\n \\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n\\n}\\n\",\"keccak256\":\"0xf2c0efef181a15847820a0eafa6c85af2502d48586283d1404fb10ab06388949\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n function __ERC1155Burnable_init() internal {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155Burnable_init_unchained();\\n }\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x04026ec0775a9613c66bf515f9454e3025214af3fbefbc5cf0bf639f05653cd0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Base.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n \\n isPrivate = true;\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n \\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0xf3d502238807629731e84e509bd669962e01492f857c1f1670d87a91c2a11921\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa4b84593337391e99f4106494088a16eadb94b68afee9d1f63dd23b042f62e31\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405161167638038061167683398101604081905261002f916100e5565b60006100396100c5565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039485166001600160a01b031991821617909155600280549385169382169390931790925560038054919093169116179055610127565b3390565b80516001600160a01b03811681146100e057600080fd5b919050565b6000806000606084860312156100f9578283fd5b610102846100c9565b9250610110602085016100c9565b915061011e604085016100c9565b90509250925092565b611540806101366000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212206c5e5108127247c039b7978e7531eff2e8c38bd974b35df0d871707b6dbe041164736f6c63430007060033", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212206c5e5108127247c039b7978e7531eff2e8c38bd974b35df0d871707b6dbe041164736f6c63430007060033", + "devdoc": { + "details": "This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.", + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 22034, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "beacon", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 22036, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "transferProxy", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 22038, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "lazyTransferProxy", + "offset": 0, + "slot": "3", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/ERC1155Rarible_Implementation.json b/projects/hardhat-deploy/deployments/oasys/ERC1155Rarible_Implementation.json new file mode 100644 index 000000000..d15fd2fe9 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/ERC1155Rarible_Implementation.json @@ -0,0 +1,1632 @@ +{ + "address": "0xED868Aee9e8B814406f6220dc31F20F62Cbf4e70", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BurnLazy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "BurnLazyBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Supply", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "TransferBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferSingle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "URI", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "burnBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "numDeployments": 7, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnLazy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"BurnLazyBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"balanceOf(address,uint256)\":{\"details\":\"See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"See {IERC1155-safeBatchTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"See {IERC1155-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC1155-setApprovalForAll}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":\"ERC1155Rarible\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n function __ERC1155Burnable_init() internal {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155Burnable_init_unchained();\\n }\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x04026ec0775a9613c66bf515f9454e3025214af3fbefbc5cf0bf639f05653cd0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Base.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n \\n isPrivate = true;\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n \\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0xf3d502238807629731e84e509bd669962e01492f857c1f1670d87a91c2a11921\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa4b84593337391e99f4106494088a16eadb94b68afee9d1f63dd23b042f62e31\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50615623806100206000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c806371e2a65711610104578063cad96cca116100a2578063f242432a11610071578063f242432a146103f1578063f2fde38b14610404578063f5298aca14610417578063ffc4e0a71461042a576101d9565b8063cad96cca146103b0578063e07f2319146103c3578063e8a3d485146103d6578063e985e9c5146103de576101d9565b806395d89b41116100de57806395d89b411461036f578063983b2d5614610377578063a22cb4651461038a578063aa271e1a1461039d576101d9565b806371e2a65714610327578063891be9741461033a5780638da5cb5b1461035a576101d9565b80632eb2c2d61161017c57806361e054591161014b57806361e05459146102f15780636b20c454146103045780636c0360eb14610317578063715018a61461031f576101d9565b80632eb2c2d6146102985780633092afd5146102ab5780634e1273f4146102be57806355f804b3146102de576101d9565b80630e89341c116101b85780630e89341c1461023c5780630eaead671461024f578063173c43d2146102645780632a55205a14610277576101d9565b8062fdd58e146101de57806301ffc9a71461020757806306fdde0314610227575b600080fd5b6101f16101ec366004614963565b61043d565b6040516101fe91906151cf565b60405180910390f35b61021a610215366004614a5c565b6104af565b6040516101fe9190614f20565b61022f6104c2565b6040516101fe9190614f2b565b61022f61024a366004614d27565b610551565b61026261025d366004614cd0565b61055c565b005b610262610272366004614ab6565b610600565b61028a610285366004614d80565b610663565b6040516101fe929190614ebc565b6102626102a63660046147b1565b610771565b6102626102b936600461475d565b610a6f565b6102d16102cc3660046149fc565b610b1f565b6040516101fe9190614ee8565b6102626102ec366004614a84565b610c0a565b6102626102ff366004614b7d565b610caf565b6102626103123660046148c0565b610d16565b61022f610e9c565b610262610f34565b6102626103353660046149c2565b610fe0565b61034d610348366004614d27565b6110c9565b6040516101fe9190614ed5565b610362611159565b6040516101fe9190614e72565b61022f611168565b61026261038536600461475d565b6111c4565b610262610398366004614932565b611279565b61021a6103ab36600461475d565b611368565b61034d6103be366004614d27565b611387565b6102626103d1366004614d3f565b611402565b61022f611445565b61021a6103ec366004614779565b6114a1565b6102626103ff36600461485a565b6114b4565b61026261041236600461475d565b61166d565b61026261042536600461498e565b611770565b610262610438366004614c69565b6117ec565b60006001600160a01b0383166104845760405162461bcd60e51b815260040180806020018281038252602b81526020018061537b602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b60006104ba82611894565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105495780601f1061051e57610100808354040283529160200191610549565b820191906000526020600020905b81548152906001019060200180831161052c57829003601f168201915b505050505081565b60606104ba82611933565b6102965460ff16156105f057826060015160008151811061057957fe5b6020026020010151600001516001600160a01b0316610596611159565b6001600160a01b031614806105cb57506105cb83606001516000815181106105ba57fe5b602002602001015160000151611368565b6105f05760405162461bcd60e51b81526004016105e790614f69565b60405180910390fd5b6105fb838383611ac9565b505050565b61060e868686868686611dc5565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610642611ef7565b878760405161065393929190614e86565b60405180910390a1505050505050565b60008281526101fa602052604081205481906106845750600090508061076a565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561070057600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016106b1565b5050505090508060008151811061071357fe5b60209081029190910101515192506000805b825181101561075e5782818151811061073a57fe5b6020026020010151602001516001600160601b031682019150806001019050610725565b50612710908502049150505b9250929050565b81518351146107b15760405162461bcd60e51b81526004018080602001828103825260288152602001806155c66028913960400191505060405180910390fd5b6001600160a01b0384166107f65760405162461bcd60e51b815260040180806020018281038252602581526020018061543b6025913960400191505060405180910390fd5b6107fe611ef7565b6001600160a01b0316856001600160a01b031614806108245750610824856103ec611ef7565b61085f5760405162461bcd60e51b81526004018080602001828103825260328152602001806154606032913960400191505060405180910390fd5b6000610869611ef7565b9050610879818787878787610a67565b60005b845181101561097f57600085828151811061089357fe5b6020026020010151905060008583815181106108ab57fe5b60200260200101519050610918816040518060600160405280602a8152602001615505602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611efb9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a168152205461094f9082611f92565b60009283526097602090815260408085206001600160a01b038c168652909152909220919091555060010161087c565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610a055781810151838201526020016109ed565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610a44578181015183820152602001610a2c565b5050505090500194505050505060405180910390a4610a67818787878787611fec565b505050505050565b610a77611ef7565b6001600160a01b0316610a88611159565b6001600160a01b031614610ad1576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b60608151835114610b615760405162461bcd60e51b815260040180806020018281038252602981526020018061559d6029913960400191505060405180910390fd5b600083516001600160401b0381118015610b7a57600080fd5b50604051908082528060200260200182016040528015610ba4578160200160208202803683370190505b50905060005b8451811015610c0257610be3858281518110610bc257fe5b6020026020010151858381518110610bd657fe5b602002602001015161043d565b828281518110610bef57fe5b6020908102919091010152600101610baa565b509392505050565b610c12611ef7565b6001600160a01b0316610c23611159565b6001600160a01b031614610c6c576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b610c7581612262565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d681604051610ca49190614f2b565b60405180910390a150565b610cbd878787878686611dc5565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc610cf4611ef7565b8888604051610d0593929190614e86565b60405180910390a150505050505050565b8051825114610d375760405162461bcd60e51b81526004016105e790615118565b600082516001600160401b0381118015610d5057600080fd5b50604051908082528060200260200182016040528015610d7a578160200160208202803683370190505b509050600083516001600160401b0381118015610d9657600080fd5b50604051908082528060200260200182016040528015610dc0578160200160208202803683370190505b50905060005b8451811015610e3557610dff858281518110610dde57fe5b6020026020010151858381518110610df257fe5b6020026020010151612276565b848381518110610e0b57fe5b60200260200101848481518110610e1e57fe5b602090810291909101019190915252600101610dc6565b50610e418585846122eb565b846001600160a01b0316610e53611ef7565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051610e8d929190614efb565b60405180910390a35050505050565b61012f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f295780601f10610efe57610100808354040283529160200191610f29565b820191906000526020600020905b815481529060010190602001808311610f0c57829003601f168201915b505050505090505b90565b610f3c611ef7565b6001600160a01b0316610f4d611159565b6001600160a01b031614610f96576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b610fe8611ef7565b6001600160a01b0316610ff9611159565b6001600160a01b031614611042576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b60005b81518110156110c557600082828151811061105c57fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a350600101611045565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561114e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016110ff565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105495780601f1061051e57610100808354040283529160200191610549565b6111cc611ef7565b6001600160a01b03166111dd611159565b6001600160a01b031614611226576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b031661128b611ef7565b6001600160a01b031614156112d15760405162461bcd60e51b81526004018080602001828103825260298152602001806155746029913960400191505060405180910390fd5b80609860006112de611ef7565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611322611ef7565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa6020908152604080832080548251818502810185019093528083526060949293919290918401821561114e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016110ff565b816001600160a01b0316611414611ef7565b6001600160a01b03161461143a5760405162461bcd60e51b81526004016105e790615020565b6105fb83838361235f565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105495780601f1061051e57610100808354040283529160200191610549565b60006114ad838361240b565b9392505050565b6001600160a01b0384166114f95760405162461bcd60e51b815260040180806020018281038252602581526020018061543b6025913960400191505060405180910390fd5b611501611ef7565b6001600160a01b0316856001600160a01b031614806115275750611527856103ec611ef7565b6115625760405162461bcd60e51b81526004018080602001828103825260298152602001806153f06029913960400191505060405180910390fd5b600061156c611ef7565b905061158c81878761157d88612437565b61158688612437565b87610a67565b6115d3836040518060600160405280602a8152602001615505602a913960008781526097602090815260408083206001600160a01b038d1684529091529020549190611efb565b60008581526097602090815260408083206001600160a01b038b8116855292528083209390935587168152205461160a9084611f92565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a84169386169260008051602061535b83398151915292908290030190a4610a6781878787878761247c565b611675611ef7565b6001600160a01b0316611686611159565b6001600160a01b0316146116cf576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6001600160a01b0381166117145760405162461bcd60e51b81526004018080602001828103825260268152602001806153a66026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008061177d8484612276565b90925090508115611793576117938585846125ed565b80156117e557846001600160a01b03166117ab611ef7565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051610e8d9291906151f1565b5050505050565b60006117fc84866000015161043d565b90508181156118365782808310156118115750815b6118318686896000015184604051806020016040528060008152506114b4565b830390505b8015610a6757856060015160008151811061184d57fe5b6020026020010151600001516001600160a01b0316856001600160a01b0316146118895760405162461bcd60e51b81526004016105e790614f3e565b610a6786858361055c565b60006001600160e01b03198216636db15a0f60e01b14806118c557506001600160e01b0319821663656cb66560e11b145b806118e057506001600160e01b0319821663152a902d60e11b145b806118fb57506001600160e01b031982166301ffc9a760e01b145b8061191657506001600160e01b03198216636cdb3d1360e11b145b806104ba5750506001600160e01b0319166303a24d0760e21b1490565b600081815261012e6020908152604080832080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352606094938301828280156119c85780601f1061199d576101008083540402835291602001916119c8565b820191906000526020600020905b8154815290600101906020018083116119ab57829003601f168201915b5050505050905060006119d9610e9c565b90508051600014156119ed575090506104bd565b815115611a07576119fe8183612661565b925050506104bd565b80611a1185612846565b6040516020018083805190602001908083835b60208310611a435780518252601f199092019160209182019101611a24565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310611a8b5780518252601f199092019160209182019101611a6c565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c6000611ad8611ef7565b9050806001600160a01b0316826001600160a01b03161480611aff5750611aff82826114a1565b611b1b5760405162461bcd60e51b81526004016105e79061506f565b60008311611b3b5760405162461bcd60e51b81526004016105e790615045565b845160009081526101fc6020526040902054611ca4578460600151600081518110611b6257fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611b9e5760405162461bcd60e51b81526004016105e790614ff5565b6000856040015111611bc25760405162461bcd60e51b81526004016105e790614f96565b8460a001515185606001515114611bd857600080fd5b6000611be386612920565b905060005b866060015151811015611c5957600087606001518281518110611c0757fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611c5057611c5081848a60a001518581518110611c4357fe5b6020026020010151612b73565b50600101611be8565b50611c6c86600001518760400151612b7e565b611c7e86600001518760800151612be8565b611c9086600001518760600151612dd7565b611ca286600001518760200151612f86565b505b611cc3848660000151856040518060200160405280600081525061304a565b836001600160a01b0316826001600160a01b031614611d7457816001600160a01b031660006001600160a01b0316826001600160a01b031660008051602061535b833981519152886000015187604051611d1e9291906151f1565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b031660008051602061535b833981519152886000015187604051611d679291906151f1565b60405180910390a46117e5565b836001600160a01b031660006001600160a01b0316826001600160a01b031660008051602061535b833981519152886000015187604051611db69291906151f1565b60405180910390a45050505050565b600054610100900460ff1680611dde5750611dde61305c565b80611dec575060005460ff16155b611e275760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015611e52576000805460ff1961ff0019909116610100171660011790555b611e5a61306d565b611e62613167565b611e6a613169565b611e7261321a565b611e7a6132ba565b611e926040518060200160405280600081525061338a565b611e9b84613455565b611ea3613167565b611eab613507565b611eb587876135a4565b611ebd61321a565b611ec685612262565b611ed18360016135cd565b611edc8260016135cd565b8015611eee576000805461ff00191690555b50505050505050565b3390565b60008184841115611f8a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f4f578181015183820152602001611f37565b50505050905090810190601f168015611f7c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156114ad576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b611ffe846001600160a01b031661362d565b15610a6757836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561208c578181015183820152602001612074565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156120cb5781810151838201526020016120b3565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156121075781810151838201526020016120ef565b50505050905090810190601f1680156121345780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561215957600080fd5b505af192505050801561217e57506040513d602081101561217957600080fd5b505160015b6122135761218a615245565b8061219557506121dc565b60405162461bcd60e51b8152602060048201818152835160248401528351849391928392604401919085019080838360008315611f4f578181015183820152602001611f37565b60405162461bcd60e51b81526004018080602001828103825260348152602001806152ff6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b14611eee5760405162461bcd60e51b81526004018080602001828103825260288152602001806153336028913960400191505060405180910390fd5b80516110c59061012f9060208401906143a1565b806000606084901c612286611ef7565b6001600160a01b0316816001600160a01b031614156122e35783915060006122ad86613633565b905080156122d25760006122c087613646565b82039050808611156122d0578093505b505b6122dc8684613659565b8285039350505b509250929050565b6122f3611ef7565b6001600160a01b0316836001600160a01b031614806123195750612319836103ec611ef7565b6123545760405162461bcd60e51b81526004018080602001828103825260298152602001806153f06029913960400191505060405180910390fd5b6105fb838383613672565b60008381526101fa6020526040812054905b818110156117e55760008581526101fa6020526040902080546001600160a01b0386169190839081106123a057fe5b6000918252602090912001546001600160a01b031614156124035760008581526101fa602052604090208054849190839081106123d957fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612371565b6001600160a01b038116600090815260c9602052604081205460ff16806114ad57506114ad83836138e0565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061246b57fe5b602090810291909101015292915050565b61248e846001600160a01b031661362d565b15610a6757836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561251d578181015183820152602001612505565b50505050905090810190601f16801561254a5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561256d57600080fd5b505af192505050801561259257506040513d602081101561258d57600080fd5b505160015b61259e5761218a615245565b6001600160e01b0319811663f23a6e6160e01b14611eee5760405162461bcd60e51b81526004018080602001828103825260288152602001806153336028913960400191505060405180910390fd5b6125f5611ef7565b6001600160a01b0316836001600160a01b0316148061261b575061261b836103ec611ef7565b6126565760405162461bcd60e51b81526004018080602001828103825260298152602001806153f06029913960400191505060405180910390fd5b6105fb83838361390e565b8051825160609184918491101561272c5784846040516020018083805190602001908083835b602083106126a65780518252601f199092019160209182019101612687565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106126ee5780518252601f1990920191602091820191016126cf565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052925050506104a9565b60005b825181101561283c5782818151811061274457fe5b602001015160f81c60f81b6001600160f81b03191682828151811061276557fe5b01602001516001600160f81b031916146128345785856040516020018083805190602001908083835b602083106127ad5780518252601f19909201916020918201910161278e565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106127f55780518252601f1990920191602091820191016127d6565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405293505050506104a9565b60010161272f565b5092949350505050565b60608161286b57506040805180820190915260018152600360fc1b60208201526104bd565b8160005b811561288357600101600a8204915061286f565b6000816001600160401b038111801561289b57600080fd5b506040519080825280601f01601f1916602001820160405280156128c6576020820181803683370190505b50859350905060001982015b831561291757600a840660300160f81b828280600190039350815181106128f557fe5b60200101906001600160f81b031916908160001a905350600a840493506128d2565b50949350505050565b6000808260800151516001600160401b038111801561293e57600080fd5b50604051908082528060200260200182016040528015612968578160200160208202803683370190505b50905060005b8360800151518110156129ba5761299b8460800151828151811061298e57fe5b6020026020010151613a2f565b8282815181106129a757fe5b602090810291909101015260010161296e565b5060008360600151516001600160401b03811180156129d857600080fd5b50604051908082528060200260200182016040528015612a02578160200160208202803683370190505b50905060005b846060015151811015612a4757612a288560600151828151811061298e57fe5b828281518110612a3457fe5b6020908102919091010152600101612a08565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b83811015612ab0578181015183820152602001612a98565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b83811015612b01578181015183820152602001612ae9565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b6105fb838383613a9c565b60008281526101fc602052604090205415612b9857600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c90612bdc90849084906151f1565b60405180910390a15050565b6000805b8251811015612d8c5760006001600160a01b0316838281518110612c0c57fe5b6020026020010151600001516001600160a01b03161415612c74576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b828181518110612c8057fe5b6020026020010151602001516001600160601b031660001415612cea576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b828181518110612cf657fe5b6020026020010151602001516001600160601b0316820191506101fa6000858152602001908152602001600020838281518110612d2f57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501612bec565b506127108110612dcd5760405162461bcd60e51b815260040180806020018281038252602581526020018061554f6025913960400191505060405180910390fd5b6105fb8383613cde565b60008281526101fb6020526040812090805b8351811015612f255760006001600160a01b0316848281518110612e0957fe5b6020026020010151600001516001600160a01b03161415612e3c5760405162461bcd60e51b81526004016105e7906150e1565b838181518110612e4857fe5b6020026020010151602001516001600160601b031660001415612e7d5760405162461bcd60e51b81526004016105e790614fc0565b82848281518110612e8a57fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612f1b90859083908110612ef757fe5b6020026020010151602001516001600160601b031683611f9290919063ffffffff16565b9150600101612de9565b508061271014612f475760405162461bcd60e51b81526004016105e790615181565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612f789291906151d8565b60405180910390a150505050565b600082815261012e602090815260409091208251612fa6928401906143a1565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b612fd284611933565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561300c578181015183820152602001612ff4565b50505050905090810190601f1680156130395780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b61305684848484613d0f565b50505050565b60006130673061362d565b15905090565b600054610100900460ff1680613086575061308661305c565b80613094575060005460ff16155b6130cf5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff161580156130fa576000805460ff1961ff0019909116610100171660011790555b6000613104611ef7565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015613164576000805461ff00191690555b50565b565b600054610100900460ff1680613182575061318261305c565b80613190575060005460ff16155b6131cb5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff161580156131f6576000805460ff1961ff0019909116610100171660011790555b6132066301ffc9a760e01b613e21565b8015613164576000805461ff001916905550565b600054610100900460ff1680613233575061323361305c565b80613241575060005460ff16155b61327c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613206576000805460ff1961ff0019909116610100171660011790558015613164576000805461ff001916905550565b600054610100900460ff16806132d357506132d361305c565b806132e1575060005460ff16155b61331c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613347576000805460ff1961ff0019909116610100171660011790555b613206604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250613ea5565b600054610100900460ff16806133a357506133a361305c565b806133b1575060005460ff16155b6133ec5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613417576000805460ff1961ff0019909116610100171660011790555b61342082613f67565b613430636cdb3d1360e11b613e21565b6134406303a24d0760e21b613e21565b80156110c5576000805461ff00191690555050565b600054610100900460ff168061346e575061346e61305c565b8061347c575060005460ff16155b6134b75760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff161580156134e2576000805460ff1961ff0019909116610100171660011790555b81516134f6906102309060208501906143a1565b5061344063e8a3d48560e01b613e21565b600054610100900460ff1680613520575061352061305c565b8061352e575060005460ff16155b6135695760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613594576000805460ff1961ff0019909116610100171660011790555b61320663656cb66560e11b613e21565b81516135b8906102629060208501906143a1565b5080516105fb906102639060208401906143a1565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b0383166136b75760405162461bcd60e51b81526004018080602001828103825260238152602001806154e26023913960400191505060405180910390fd5b80518251146136f75760405162461bcd60e51b81526004018080602001828103825260288152602001806155c66028913960400191505060405180910390fd5b6000613701611ef7565b905061372181856000868660405180602001604052806000815250610a67565b60005b83518110156137ff576137b683828151811061373c57fe5b60200260200101516040518060600160405280602481526020016153cc602491396097600088868151811061376d57fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002054611efb9092919063ffffffff16565b609760008684815181106137c657fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101613724565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561388657818101518382015260200161386e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156138c55781810151838201526020016138ad565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b0383166139535760405162461bcd60e51b81526004018080602001828103825260238152602001806154e26023913960400191505060405180910390fd5b600061395d611ef7565b905061398d8185600061396f87612437565b61397887612437565b60405180602001604052806000815250610a67565b6139d4826040518060600160405280602481526020016153cc6024913960008681526097602090815260408083206001600160a01b038b1684529091529020549190611efb565b60008481526097602090815260408083206001600160a01b03808a168086529184528285209590955581518881529283018790528151939490939086169260008051602061535b83398151915292908290030190a450505050565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000613aa783613f7a565b90506000825160411415613ac257613abf8284613fc6565b90505b846001600160a01b0316816001600160a01b0316146117e557613aed856001600160a01b031661362d565b15613c665760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b83811015613b5c578181015183820152602001613b44565b50505050905090810190601f168015613b895780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015613ba757600080fd5b505afa158015613bbb573d6000803e3d6000fd5b505050506040513d6020811015613bd157600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b031990911614613c605760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611f4f578181015183820152602001611f37565b506117e5565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315611f4f578181015183820152602001611f37565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612bdc9291906151d8565b60008381526101fd6020526040812054613d2a908490611f92565b60008581526101fc6020526040902054909150811115613d5c5760405162461bcd60e51b81526004016105e7906150b7565b60008481526101fd602052604090208190556001600160a01b038516613d945760405162461bcd60e51b81526004016105e790615140565b6000613d9e611ef7565b9050613dbf81600088613db089612437565b613db989612437565b88610a67565b60008581526097602090815260408083206001600160a01b038a168452909152902054613dec9085611f92565b60008681526097602090815260408083206001600160a01b038b168452909152812091909155610a679082908888888861247c565b6001600160e01b03198082161415613e80576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff1680613ebe5750613ebe61305c565b80613ecc575060005460ff16155b613f075760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613f32576000805460ff1961ff0019909116610100171660011790555b8251602080850191909120835191840191909120610162919091556101635580156105fb576000805461ff0019169055505050565b80516110c59060999060208401906143a1565b6000613f84614046565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000815160411461401e576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61403c86828585614086565b9695505050505050565b60006140817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6140746142dc565b61407c6142e3565b6142ea565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156140e75760405162461bcd60e51b81526004018080602001828103825260228152602001806154196022913960400191505060405180910390fd5b6000601e8560ff1611156141c1576004850360ff16601b148061411057506004850360ff16601c145b61414b5760405162461bcd60e51b81526004018080602001828103825260228152602001806154c06022913960400191505060405180910390fd5b60016141568761434c565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156141b0573d6000803e3d6000fd5b505050602060405103519050614278565b8460ff16601b14806141d657508460ff16601c145b6142115760405162461bcd60e51b81526004018080602001828103825260228152602001806154c06022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561426b573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166142d3576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b60008383836142f761439d565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b4690565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826143d7576000855561441d565b82601f106143f057805160ff191683800117855561441d565b8280016001018555821561441d579182015b8281111561441d578251825591602001919060010190614402565b5061442992915061442d565b5090565b5b80821115614429576000815560010161442e565b80356104bd816152e9565b600082601f83011261445d578081fd5b8135602061447261446d83615222565b6151ff565b828152818101908583018385028701840188101561448e578586fd5b855b858110156144b55781356144a3816152e9565b84529284019290840190600101614490565b5090979650505050505050565b600082601f8301126144d2578081fd5b813560206144e261446d83615222565b82815281810190858301855b858110156144b557614505898684358b010161462c565b845292840192908401906001016144ee565b600082601f830112614527578081fd5b8135602061453761446d83615222565b82815281810190858301604080860288018501891015614555578687fd5b865b868110156145c45781838b03121561456d578788fd5b81518281018181106001600160401b038211171561458757fe5b83528335614594816152e9565b8152838701356001600160601b03811681146145ae57898afd5b8188015285529385019391810191600101614557565b509198975050505050505050565b600082601f8301126145e2578081fd5b813560206145f261446d83615222565b828152818101908583018385028701840188101561460e578586fd5b855b858110156144b557813584529284019290840190600101614610565b600082601f83011261463c578081fd5b81356001600160401b0381111561464f57fe5b614662601f8201601f19166020016151ff565b818152846020838601011115614676578283fd5b816020850160208301379081016020019190915292915050565b600060c082840312156146a1578081fd5b6146ab60c06151ff565b90508135815260208201356001600160401b03808211156146cb57600080fd5b6146d78583860161462c565b60208401526040840135604084015260608401359150808211156146fa57600080fd5b61470685838601614517565b6060840152608084013591508082111561471f57600080fd5b61472b85838601614517565b608084015260a084013591508082111561474457600080fd5b50614751848285016144c2565b60a08301525092915050565b60006020828403121561476e578081fd5b81356114ad816152e9565b6000806040838503121561478b578081fd5b8235614796816152e9565b915060208301356147a6816152e9565b809150509250929050565b600080600080600060a086880312156147c8578081fd5b85356147d3816152e9565b945060208601356147e3816152e9565b935060408601356001600160401b03808211156147fe578283fd5b61480a89838a016145d2565b9450606088013591508082111561481f578283fd5b61482b89838a016145d2565b93506080880135915080821115614840578283fd5b5061484d8882890161462c565b9150509295509295909350565b600080600080600060a08688031215614871578283fd5b853561487c816152e9565b9450602086013561488c816152e9565b9350604086013592506060860135915060808601356001600160401b038111156148b4578182fd5b61484d8882890161462c565b6000806000606084860312156148d4578081fd5b83356148df816152e9565b925060208401356001600160401b03808211156148fa578283fd5b614906878388016145d2565b9350604086013591508082111561491b578283fd5b50614928868287016145d2565b9150509250925092565b60008060408385031215614944578182fd5b823561494f816152e9565b9150602083013580151581146147a6578182fd5b60008060408385031215614975578182fd5b8235614980816152e9565b946020939093013593505050565b6000806000606084860312156149a2578081fd5b83356149ad816152e9565b95602085013595506040909401359392505050565b6000602082840312156149d3578081fd5b81356001600160401b038111156149e8578182fd5b6149f48482850161444d565b949350505050565b60008060408385031215614a0e578182fd5b82356001600160401b0380821115614a24578384fd5b614a308683870161444d565b93506020850135915080821115614a45578283fd5b50614a52858286016145d2565b9150509250929050565b600060208284031215614a6d578081fd5b81356001600160e01b0319811681146114ad578182fd5b600060208284031215614a95578081fd5b81356001600160401b03811115614aaa578182fd5b6149f48482850161462c565b60008060008060008060c08789031215614ace578384fd5b86356001600160401b0380821115614ae4578586fd5b614af08a838b0161462c565b97506020890135915080821115614b05578586fd5b614b118a838b0161462c565b96506040890135915080821115614b26578586fd5b614b328a838b0161462c565b95506060890135915080821115614b47578283fd5b50614b5489828a0161462c565b935050614b6360808801614442565b9150614b7160a08801614442565b90509295509295509295565b600080600080600080600060e0888a031215614b97578485fd5b87356001600160401b0380821115614bad578687fd5b614bb98b838c0161462c565b985060208a0135915080821115614bce578687fd5b614bda8b838c0161462c565b975060408a0135915080821115614bef578687fd5b614bfb8b838c0161462c565b965060608a0135915080821115614c10578283fd5b614c1c8b838c0161462c565b955060808a0135915080821115614c31578283fd5b50614c3e8a828b0161444d565b935050614c4d60a08901614442565b9150614c5b60c08901614442565b905092959891949750929550565b60008060008060808587031215614c7e578182fd5b84356001600160401b03811115614c93578283fd5b614c9f87828801614690565b9450506020850135614cb0816152e9565b92506040850135614cc0816152e9565b9396929550929360600135925050565b600080600060608486031215614ce4578081fd5b83356001600160401b03811115614cf9578182fd5b614d0586828701614690565b9350506020840135614d16816152e9565b929592945050506040919091013590565b600060208284031215614d38578081fd5b5035919050565b600080600060608486031215614d53578081fd5b833592506020840135614d65816152e9565b91506040840135614d75816152e9565b809150509250925092565b60008060408385031215614d92578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614ded57815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614db4565b509495945050505050565b6000815180845260208085019450808401835b83811015614ded57815187529582019590820190600101614e0b565b60008151808452815b81811015614e4c57602081850181015186830182015201614e30565b81811115614e5d5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614eaa90830185614e27565b828103604084015261403c8185614e27565b6001600160a01b03929092168252602082015260400190565b6000602082526114ad6020830184614da1565b6000602082526114ad6020830184614df8565b600060408252614f0e6040830185614df8565b82810360208401526142d38185614df8565b901515815260200190565b6000602082526114ad6020830184614e27565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526149f46040830184614da1565b918252602082015260400190565b6040518181016001600160401b038111828210171561521a57fe5b604052919050565b60006001600160401b0382111561523557fe5b5060209081020190565b60e01c90565b600060443d101561525557610f31565b600481823e6308c379a0615269825161523f565b1461527357610f31565b6040513d600319016004823e80513d6001600160401b0381602484011181841117156152a25750505050610f31565b828401925082519150808211156152bc5750505050610f31565b503d830160208284010111156152d457505050610f31565b601f01601f1916810160200160405291505090565b6001600160a01b038116811461316457600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a26469706673582212201fcf1585ef785faaf22ca08a73a9325e2c8445a52b799df379ca4d72f94061b164736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101d95760003560e01c806371e2a65711610104578063cad96cca116100a2578063f242432a11610071578063f242432a146103f1578063f2fde38b14610404578063f5298aca14610417578063ffc4e0a71461042a576101d9565b8063cad96cca146103b0578063e07f2319146103c3578063e8a3d485146103d6578063e985e9c5146103de576101d9565b806395d89b41116100de57806395d89b411461036f578063983b2d5614610377578063a22cb4651461038a578063aa271e1a1461039d576101d9565b806371e2a65714610327578063891be9741461033a5780638da5cb5b1461035a576101d9565b80632eb2c2d61161017c57806361e054591161014b57806361e05459146102f15780636b20c454146103045780636c0360eb14610317578063715018a61461031f576101d9565b80632eb2c2d6146102985780633092afd5146102ab5780634e1273f4146102be57806355f804b3146102de576101d9565b80630e89341c116101b85780630e89341c1461023c5780630eaead671461024f578063173c43d2146102645780632a55205a14610277576101d9565b8062fdd58e146101de57806301ffc9a71461020757806306fdde0314610227575b600080fd5b6101f16101ec366004614963565b61043d565b6040516101fe91906151cf565b60405180910390f35b61021a610215366004614a5c565b6104af565b6040516101fe9190614f20565b61022f6104c2565b6040516101fe9190614f2b565b61022f61024a366004614d27565b610551565b61026261025d366004614cd0565b61055c565b005b610262610272366004614ab6565b610600565b61028a610285366004614d80565b610663565b6040516101fe929190614ebc565b6102626102a63660046147b1565b610771565b6102626102b936600461475d565b610a6f565b6102d16102cc3660046149fc565b610b1f565b6040516101fe9190614ee8565b6102626102ec366004614a84565b610c0a565b6102626102ff366004614b7d565b610caf565b6102626103123660046148c0565b610d16565b61022f610e9c565b610262610f34565b6102626103353660046149c2565b610fe0565b61034d610348366004614d27565b6110c9565b6040516101fe9190614ed5565b610362611159565b6040516101fe9190614e72565b61022f611168565b61026261038536600461475d565b6111c4565b610262610398366004614932565b611279565b61021a6103ab36600461475d565b611368565b61034d6103be366004614d27565b611387565b6102626103d1366004614d3f565b611402565b61022f611445565b61021a6103ec366004614779565b6114a1565b6102626103ff36600461485a565b6114b4565b61026261041236600461475d565b61166d565b61026261042536600461498e565b611770565b610262610438366004614c69565b6117ec565b60006001600160a01b0383166104845760405162461bcd60e51b815260040180806020018281038252602b81526020018061537b602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b60006104ba82611894565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105495780601f1061051e57610100808354040283529160200191610549565b820191906000526020600020905b81548152906001019060200180831161052c57829003601f168201915b505050505081565b60606104ba82611933565b6102965460ff16156105f057826060015160008151811061057957fe5b6020026020010151600001516001600160a01b0316610596611159565b6001600160a01b031614806105cb57506105cb83606001516000815181106105ba57fe5b602002602001015160000151611368565b6105f05760405162461bcd60e51b81526004016105e790614f69565b60405180910390fd5b6105fb838383611ac9565b505050565b61060e868686868686611dc5565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610642611ef7565b878760405161065393929190614e86565b60405180910390a1505050505050565b60008281526101fa602052604081205481906106845750600090508061076a565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561070057600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016106b1565b5050505090508060008151811061071357fe5b60209081029190910101515192506000805b825181101561075e5782818151811061073a57fe5b6020026020010151602001516001600160601b031682019150806001019050610725565b50612710908502049150505b9250929050565b81518351146107b15760405162461bcd60e51b81526004018080602001828103825260288152602001806155c66028913960400191505060405180910390fd5b6001600160a01b0384166107f65760405162461bcd60e51b815260040180806020018281038252602581526020018061543b6025913960400191505060405180910390fd5b6107fe611ef7565b6001600160a01b0316856001600160a01b031614806108245750610824856103ec611ef7565b61085f5760405162461bcd60e51b81526004018080602001828103825260328152602001806154606032913960400191505060405180910390fd5b6000610869611ef7565b9050610879818787878787610a67565b60005b845181101561097f57600085828151811061089357fe5b6020026020010151905060008583815181106108ab57fe5b60200260200101519050610918816040518060600160405280602a8152602001615505602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611efb9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a168152205461094f9082611f92565b60009283526097602090815260408085206001600160a01b038c168652909152909220919091555060010161087c565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610a055781810151838201526020016109ed565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610a44578181015183820152602001610a2c565b5050505090500194505050505060405180910390a4610a67818787878787611fec565b505050505050565b610a77611ef7565b6001600160a01b0316610a88611159565b6001600160a01b031614610ad1576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b60608151835114610b615760405162461bcd60e51b815260040180806020018281038252602981526020018061559d6029913960400191505060405180910390fd5b600083516001600160401b0381118015610b7a57600080fd5b50604051908082528060200260200182016040528015610ba4578160200160208202803683370190505b50905060005b8451811015610c0257610be3858281518110610bc257fe5b6020026020010151858381518110610bd657fe5b602002602001015161043d565b828281518110610bef57fe5b6020908102919091010152600101610baa565b509392505050565b610c12611ef7565b6001600160a01b0316610c23611159565b6001600160a01b031614610c6c576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b610c7581612262565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d681604051610ca49190614f2b565b60405180910390a150565b610cbd878787878686611dc5565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc610cf4611ef7565b8888604051610d0593929190614e86565b60405180910390a150505050505050565b8051825114610d375760405162461bcd60e51b81526004016105e790615118565b600082516001600160401b0381118015610d5057600080fd5b50604051908082528060200260200182016040528015610d7a578160200160208202803683370190505b509050600083516001600160401b0381118015610d9657600080fd5b50604051908082528060200260200182016040528015610dc0578160200160208202803683370190505b50905060005b8451811015610e3557610dff858281518110610dde57fe5b6020026020010151858381518110610df257fe5b6020026020010151612276565b848381518110610e0b57fe5b60200260200101848481518110610e1e57fe5b602090810291909101019190915252600101610dc6565b50610e418585846122eb565b846001600160a01b0316610e53611ef7565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051610e8d929190614efb565b60405180910390a35050505050565b61012f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f295780601f10610efe57610100808354040283529160200191610f29565b820191906000526020600020905b815481529060010190602001808311610f0c57829003601f168201915b505050505090505b90565b610f3c611ef7565b6001600160a01b0316610f4d611159565b6001600160a01b031614610f96576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b610fe8611ef7565b6001600160a01b0316610ff9611159565b6001600160a01b031614611042576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b60005b81518110156110c557600082828151811061105c57fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a350600101611045565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561114e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016110ff565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105495780601f1061051e57610100808354040283529160200191610549565b6111cc611ef7565b6001600160a01b03166111dd611159565b6001600160a01b031614611226576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b031661128b611ef7565b6001600160a01b031614156112d15760405162461bcd60e51b81526004018080602001828103825260298152602001806155746029913960400191505060405180910390fd5b80609860006112de611ef7565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611322611ef7565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa6020908152604080832080548251818502810185019093528083526060949293919290918401821561114e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016110ff565b816001600160a01b0316611414611ef7565b6001600160a01b03161461143a5760405162461bcd60e51b81526004016105e790615020565b6105fb83838361235f565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105495780601f1061051e57610100808354040283529160200191610549565b60006114ad838361240b565b9392505050565b6001600160a01b0384166114f95760405162461bcd60e51b815260040180806020018281038252602581526020018061543b6025913960400191505060405180910390fd5b611501611ef7565b6001600160a01b0316856001600160a01b031614806115275750611527856103ec611ef7565b6115625760405162461bcd60e51b81526004018080602001828103825260298152602001806153f06029913960400191505060405180910390fd5b600061156c611ef7565b905061158c81878761157d88612437565b61158688612437565b87610a67565b6115d3836040518060600160405280602a8152602001615505602a913960008781526097602090815260408083206001600160a01b038d1684529091529020549190611efb565b60008581526097602090815260408083206001600160a01b038b8116855292528083209390935587168152205461160a9084611f92565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a84169386169260008051602061535b83398151915292908290030190a4610a6781878787878761247c565b611675611ef7565b6001600160a01b0316611686611159565b6001600160a01b0316146116cf576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6001600160a01b0381166117145760405162461bcd60e51b81526004018080602001828103825260268152602001806153a66026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008061177d8484612276565b90925090508115611793576117938585846125ed565b80156117e557846001600160a01b03166117ab611ef7565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051610e8d9291906151f1565b5050505050565b60006117fc84866000015161043d565b90508181156118365782808310156118115750815b6118318686896000015184604051806020016040528060008152506114b4565b830390505b8015610a6757856060015160008151811061184d57fe5b6020026020010151600001516001600160a01b0316856001600160a01b0316146118895760405162461bcd60e51b81526004016105e790614f3e565b610a6786858361055c565b60006001600160e01b03198216636db15a0f60e01b14806118c557506001600160e01b0319821663656cb66560e11b145b806118e057506001600160e01b0319821663152a902d60e11b145b806118fb57506001600160e01b031982166301ffc9a760e01b145b8061191657506001600160e01b03198216636cdb3d1360e11b145b806104ba5750506001600160e01b0319166303a24d0760e21b1490565b600081815261012e6020908152604080832080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352606094938301828280156119c85780601f1061199d576101008083540402835291602001916119c8565b820191906000526020600020905b8154815290600101906020018083116119ab57829003601f168201915b5050505050905060006119d9610e9c565b90508051600014156119ed575090506104bd565b815115611a07576119fe8183612661565b925050506104bd565b80611a1185612846565b6040516020018083805190602001908083835b60208310611a435780518252601f199092019160209182019101611a24565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310611a8b5780518252601f199092019160209182019101611a6c565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c6000611ad8611ef7565b9050806001600160a01b0316826001600160a01b03161480611aff5750611aff82826114a1565b611b1b5760405162461bcd60e51b81526004016105e79061506f565b60008311611b3b5760405162461bcd60e51b81526004016105e790615045565b845160009081526101fc6020526040902054611ca4578460600151600081518110611b6257fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611b9e5760405162461bcd60e51b81526004016105e790614ff5565b6000856040015111611bc25760405162461bcd60e51b81526004016105e790614f96565b8460a001515185606001515114611bd857600080fd5b6000611be386612920565b905060005b866060015151811015611c5957600087606001518281518110611c0757fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611c5057611c5081848a60a001518581518110611c4357fe5b6020026020010151612b73565b50600101611be8565b50611c6c86600001518760400151612b7e565b611c7e86600001518760800151612be8565b611c9086600001518760600151612dd7565b611ca286600001518760200151612f86565b505b611cc3848660000151856040518060200160405280600081525061304a565b836001600160a01b0316826001600160a01b031614611d7457816001600160a01b031660006001600160a01b0316826001600160a01b031660008051602061535b833981519152886000015187604051611d1e9291906151f1565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b031660008051602061535b833981519152886000015187604051611d679291906151f1565b60405180910390a46117e5565b836001600160a01b031660006001600160a01b0316826001600160a01b031660008051602061535b833981519152886000015187604051611db69291906151f1565b60405180910390a45050505050565b600054610100900460ff1680611dde5750611dde61305c565b80611dec575060005460ff16155b611e275760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015611e52576000805460ff1961ff0019909116610100171660011790555b611e5a61306d565b611e62613167565b611e6a613169565b611e7261321a565b611e7a6132ba565b611e926040518060200160405280600081525061338a565b611e9b84613455565b611ea3613167565b611eab613507565b611eb587876135a4565b611ebd61321a565b611ec685612262565b611ed18360016135cd565b611edc8260016135cd565b8015611eee576000805461ff00191690555b50505050505050565b3390565b60008184841115611f8a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f4f578181015183820152602001611f37565b50505050905090810190601f168015611f7c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156114ad576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b611ffe846001600160a01b031661362d565b15610a6757836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561208c578181015183820152602001612074565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156120cb5781810151838201526020016120b3565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156121075781810151838201526020016120ef565b50505050905090810190601f1680156121345780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561215957600080fd5b505af192505050801561217e57506040513d602081101561217957600080fd5b505160015b6122135761218a615245565b8061219557506121dc565b60405162461bcd60e51b8152602060048201818152835160248401528351849391928392604401919085019080838360008315611f4f578181015183820152602001611f37565b60405162461bcd60e51b81526004018080602001828103825260348152602001806152ff6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b14611eee5760405162461bcd60e51b81526004018080602001828103825260288152602001806153336028913960400191505060405180910390fd5b80516110c59061012f9060208401906143a1565b806000606084901c612286611ef7565b6001600160a01b0316816001600160a01b031614156122e35783915060006122ad86613633565b905080156122d25760006122c087613646565b82039050808611156122d0578093505b505b6122dc8684613659565b8285039350505b509250929050565b6122f3611ef7565b6001600160a01b0316836001600160a01b031614806123195750612319836103ec611ef7565b6123545760405162461bcd60e51b81526004018080602001828103825260298152602001806153f06029913960400191505060405180910390fd5b6105fb838383613672565b60008381526101fa6020526040812054905b818110156117e55760008581526101fa6020526040902080546001600160a01b0386169190839081106123a057fe5b6000918252602090912001546001600160a01b031614156124035760008581526101fa602052604090208054849190839081106123d957fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612371565b6001600160a01b038116600090815260c9602052604081205460ff16806114ad57506114ad83836138e0565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061246b57fe5b602090810291909101015292915050565b61248e846001600160a01b031661362d565b15610a6757836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561251d578181015183820152602001612505565b50505050905090810190601f16801561254a5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561256d57600080fd5b505af192505050801561259257506040513d602081101561258d57600080fd5b505160015b61259e5761218a615245565b6001600160e01b0319811663f23a6e6160e01b14611eee5760405162461bcd60e51b81526004018080602001828103825260288152602001806153336028913960400191505060405180910390fd5b6125f5611ef7565b6001600160a01b0316836001600160a01b0316148061261b575061261b836103ec611ef7565b6126565760405162461bcd60e51b81526004018080602001828103825260298152602001806153f06029913960400191505060405180910390fd5b6105fb83838361390e565b8051825160609184918491101561272c5784846040516020018083805190602001908083835b602083106126a65780518252601f199092019160209182019101612687565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106126ee5780518252601f1990920191602091820191016126cf565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052925050506104a9565b60005b825181101561283c5782818151811061274457fe5b602001015160f81c60f81b6001600160f81b03191682828151811061276557fe5b01602001516001600160f81b031916146128345785856040516020018083805190602001908083835b602083106127ad5780518252601f19909201916020918201910161278e565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106127f55780518252601f1990920191602091820191016127d6565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405293505050506104a9565b60010161272f565b5092949350505050565b60608161286b57506040805180820190915260018152600360fc1b60208201526104bd565b8160005b811561288357600101600a8204915061286f565b6000816001600160401b038111801561289b57600080fd5b506040519080825280601f01601f1916602001820160405280156128c6576020820181803683370190505b50859350905060001982015b831561291757600a840660300160f81b828280600190039350815181106128f557fe5b60200101906001600160f81b031916908160001a905350600a840493506128d2565b50949350505050565b6000808260800151516001600160401b038111801561293e57600080fd5b50604051908082528060200260200182016040528015612968578160200160208202803683370190505b50905060005b8360800151518110156129ba5761299b8460800151828151811061298e57fe5b6020026020010151613a2f565b8282815181106129a757fe5b602090810291909101015260010161296e565b5060008360600151516001600160401b03811180156129d857600080fd5b50604051908082528060200260200182016040528015612a02578160200160208202803683370190505b50905060005b846060015151811015612a4757612a288560600151828151811061298e57fe5b828281518110612a3457fe5b6020908102919091010152600101612a08565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b83811015612ab0578181015183820152602001612a98565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b83811015612b01578181015183820152602001612ae9565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b6105fb838383613a9c565b60008281526101fc602052604090205415612b9857600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c90612bdc90849084906151f1565b60405180910390a15050565b6000805b8251811015612d8c5760006001600160a01b0316838281518110612c0c57fe5b6020026020010151600001516001600160a01b03161415612c74576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b828181518110612c8057fe5b6020026020010151602001516001600160601b031660001415612cea576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b828181518110612cf657fe5b6020026020010151602001516001600160601b0316820191506101fa6000858152602001908152602001600020838281518110612d2f57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501612bec565b506127108110612dcd5760405162461bcd60e51b815260040180806020018281038252602581526020018061554f6025913960400191505060405180910390fd5b6105fb8383613cde565b60008281526101fb6020526040812090805b8351811015612f255760006001600160a01b0316848281518110612e0957fe5b6020026020010151600001516001600160a01b03161415612e3c5760405162461bcd60e51b81526004016105e7906150e1565b838181518110612e4857fe5b6020026020010151602001516001600160601b031660001415612e7d5760405162461bcd60e51b81526004016105e790614fc0565b82848281518110612e8a57fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612f1b90859083908110612ef757fe5b6020026020010151602001516001600160601b031683611f9290919063ffffffff16565b9150600101612de9565b508061271014612f475760405162461bcd60e51b81526004016105e790615181565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612f789291906151d8565b60405180910390a150505050565b600082815261012e602090815260409091208251612fa6928401906143a1565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b612fd284611933565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561300c578181015183820152602001612ff4565b50505050905090810190601f1680156130395780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b61305684848484613d0f565b50505050565b60006130673061362d565b15905090565b600054610100900460ff1680613086575061308661305c565b80613094575060005460ff16155b6130cf5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff161580156130fa576000805460ff1961ff0019909116610100171660011790555b6000613104611ef7565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015613164576000805461ff00191690555b50565b565b600054610100900460ff1680613182575061318261305c565b80613190575060005460ff16155b6131cb5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff161580156131f6576000805460ff1961ff0019909116610100171660011790555b6132066301ffc9a760e01b613e21565b8015613164576000805461ff001916905550565b600054610100900460ff1680613233575061323361305c565b80613241575060005460ff16155b61327c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613206576000805460ff1961ff0019909116610100171660011790558015613164576000805461ff001916905550565b600054610100900460ff16806132d357506132d361305c565b806132e1575060005460ff16155b61331c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613347576000805460ff1961ff0019909116610100171660011790555b613206604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250613ea5565b600054610100900460ff16806133a357506133a361305c565b806133b1575060005460ff16155b6133ec5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613417576000805460ff1961ff0019909116610100171660011790555b61342082613f67565b613430636cdb3d1360e11b613e21565b6134406303a24d0760e21b613e21565b80156110c5576000805461ff00191690555050565b600054610100900460ff168061346e575061346e61305c565b8061347c575060005460ff16155b6134b75760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff161580156134e2576000805460ff1961ff0019909116610100171660011790555b81516134f6906102309060208501906143a1565b5061344063e8a3d48560e01b613e21565b600054610100900460ff1680613520575061352061305c565b8061352e575060005460ff16155b6135695760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613594576000805460ff1961ff0019909116610100171660011790555b61320663656cb66560e11b613e21565b81516135b8906102629060208501906143a1565b5080516105fb906102639060208401906143a1565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b0383166136b75760405162461bcd60e51b81526004018080602001828103825260238152602001806154e26023913960400191505060405180910390fd5b80518251146136f75760405162461bcd60e51b81526004018080602001828103825260288152602001806155c66028913960400191505060405180910390fd5b6000613701611ef7565b905061372181856000868660405180602001604052806000815250610a67565b60005b83518110156137ff576137b683828151811061373c57fe5b60200260200101516040518060600160405280602481526020016153cc602491396097600088868151811061376d57fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002054611efb9092919063ffffffff16565b609760008684815181106137c657fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101613724565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561388657818101518382015260200161386e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156138c55781810151838201526020016138ad565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b0383166139535760405162461bcd60e51b81526004018080602001828103825260238152602001806154e26023913960400191505060405180910390fd5b600061395d611ef7565b905061398d8185600061396f87612437565b61397887612437565b60405180602001604052806000815250610a67565b6139d4826040518060600160405280602481526020016153cc6024913960008681526097602090815260408083206001600160a01b038b1684529091529020549190611efb565b60008481526097602090815260408083206001600160a01b03808a168086529184528285209590955581518881529283018790528151939490939086169260008051602061535b83398151915292908290030190a450505050565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000613aa783613f7a565b90506000825160411415613ac257613abf8284613fc6565b90505b846001600160a01b0316816001600160a01b0316146117e557613aed856001600160a01b031661362d565b15613c665760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b83811015613b5c578181015183820152602001613b44565b50505050905090810190601f168015613b895780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015613ba757600080fd5b505afa158015613bbb573d6000803e3d6000fd5b505050506040513d6020811015613bd157600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b031990911614613c605760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611f4f578181015183820152602001611f37565b506117e5565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315611f4f578181015183820152602001611f37565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612bdc9291906151d8565b60008381526101fd6020526040812054613d2a908490611f92565b60008581526101fc6020526040902054909150811115613d5c5760405162461bcd60e51b81526004016105e7906150b7565b60008481526101fd602052604090208190556001600160a01b038516613d945760405162461bcd60e51b81526004016105e790615140565b6000613d9e611ef7565b9050613dbf81600088613db089612437565b613db989612437565b88610a67565b60008581526097602090815260408083206001600160a01b038a168452909152902054613dec9085611f92565b60008681526097602090815260408083206001600160a01b038b168452909152812091909155610a679082908888888861247c565b6001600160e01b03198082161415613e80576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff1680613ebe5750613ebe61305c565b80613ecc575060005460ff16155b613f075760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613f32576000805460ff1961ff0019909116610100171660011790555b8251602080850191909120835191840191909120610162919091556101635580156105fb576000805461ff0019169055505050565b80516110c59060999060208401906143a1565b6000613f84614046565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000815160411461401e576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61403c86828585614086565b9695505050505050565b60006140817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6140746142dc565b61407c6142e3565b6142ea565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156140e75760405162461bcd60e51b81526004018080602001828103825260228152602001806154196022913960400191505060405180910390fd5b6000601e8560ff1611156141c1576004850360ff16601b148061411057506004850360ff16601c145b61414b5760405162461bcd60e51b81526004018080602001828103825260228152602001806154c06022913960400191505060405180910390fd5b60016141568761434c565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156141b0573d6000803e3d6000fd5b505050602060405103519050614278565b8460ff16601b14806141d657508460ff16601c145b6142115760405162461bcd60e51b81526004018080602001828103825260228152602001806154c06022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561426b573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166142d3576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b60008383836142f761439d565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b4690565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826143d7576000855561441d565b82601f106143f057805160ff191683800117855561441d565b8280016001018555821561441d579182015b8281111561441d578251825591602001919060010190614402565b5061442992915061442d565b5090565b5b80821115614429576000815560010161442e565b80356104bd816152e9565b600082601f83011261445d578081fd5b8135602061447261446d83615222565b6151ff565b828152818101908583018385028701840188101561448e578586fd5b855b858110156144b55781356144a3816152e9565b84529284019290840190600101614490565b5090979650505050505050565b600082601f8301126144d2578081fd5b813560206144e261446d83615222565b82815281810190858301855b858110156144b557614505898684358b010161462c565b845292840192908401906001016144ee565b600082601f830112614527578081fd5b8135602061453761446d83615222565b82815281810190858301604080860288018501891015614555578687fd5b865b868110156145c45781838b03121561456d578788fd5b81518281018181106001600160401b038211171561458757fe5b83528335614594816152e9565b8152838701356001600160601b03811681146145ae57898afd5b8188015285529385019391810191600101614557565b509198975050505050505050565b600082601f8301126145e2578081fd5b813560206145f261446d83615222565b828152818101908583018385028701840188101561460e578586fd5b855b858110156144b557813584529284019290840190600101614610565b600082601f83011261463c578081fd5b81356001600160401b0381111561464f57fe5b614662601f8201601f19166020016151ff565b818152846020838601011115614676578283fd5b816020850160208301379081016020019190915292915050565b600060c082840312156146a1578081fd5b6146ab60c06151ff565b90508135815260208201356001600160401b03808211156146cb57600080fd5b6146d78583860161462c565b60208401526040840135604084015260608401359150808211156146fa57600080fd5b61470685838601614517565b6060840152608084013591508082111561471f57600080fd5b61472b85838601614517565b608084015260a084013591508082111561474457600080fd5b50614751848285016144c2565b60a08301525092915050565b60006020828403121561476e578081fd5b81356114ad816152e9565b6000806040838503121561478b578081fd5b8235614796816152e9565b915060208301356147a6816152e9565b809150509250929050565b600080600080600060a086880312156147c8578081fd5b85356147d3816152e9565b945060208601356147e3816152e9565b935060408601356001600160401b03808211156147fe578283fd5b61480a89838a016145d2565b9450606088013591508082111561481f578283fd5b61482b89838a016145d2565b93506080880135915080821115614840578283fd5b5061484d8882890161462c565b9150509295509295909350565b600080600080600060a08688031215614871578283fd5b853561487c816152e9565b9450602086013561488c816152e9565b9350604086013592506060860135915060808601356001600160401b038111156148b4578182fd5b61484d8882890161462c565b6000806000606084860312156148d4578081fd5b83356148df816152e9565b925060208401356001600160401b03808211156148fa578283fd5b614906878388016145d2565b9350604086013591508082111561491b578283fd5b50614928868287016145d2565b9150509250925092565b60008060408385031215614944578182fd5b823561494f816152e9565b9150602083013580151581146147a6578182fd5b60008060408385031215614975578182fd5b8235614980816152e9565b946020939093013593505050565b6000806000606084860312156149a2578081fd5b83356149ad816152e9565b95602085013595506040909401359392505050565b6000602082840312156149d3578081fd5b81356001600160401b038111156149e8578182fd5b6149f48482850161444d565b949350505050565b60008060408385031215614a0e578182fd5b82356001600160401b0380821115614a24578384fd5b614a308683870161444d565b93506020850135915080821115614a45578283fd5b50614a52858286016145d2565b9150509250929050565b600060208284031215614a6d578081fd5b81356001600160e01b0319811681146114ad578182fd5b600060208284031215614a95578081fd5b81356001600160401b03811115614aaa578182fd5b6149f48482850161462c565b60008060008060008060c08789031215614ace578384fd5b86356001600160401b0380821115614ae4578586fd5b614af08a838b0161462c565b97506020890135915080821115614b05578586fd5b614b118a838b0161462c565b96506040890135915080821115614b26578586fd5b614b328a838b0161462c565b95506060890135915080821115614b47578283fd5b50614b5489828a0161462c565b935050614b6360808801614442565b9150614b7160a08801614442565b90509295509295509295565b600080600080600080600060e0888a031215614b97578485fd5b87356001600160401b0380821115614bad578687fd5b614bb98b838c0161462c565b985060208a0135915080821115614bce578687fd5b614bda8b838c0161462c565b975060408a0135915080821115614bef578687fd5b614bfb8b838c0161462c565b965060608a0135915080821115614c10578283fd5b614c1c8b838c0161462c565b955060808a0135915080821115614c31578283fd5b50614c3e8a828b0161444d565b935050614c4d60a08901614442565b9150614c5b60c08901614442565b905092959891949750929550565b60008060008060808587031215614c7e578182fd5b84356001600160401b03811115614c93578283fd5b614c9f87828801614690565b9450506020850135614cb0816152e9565b92506040850135614cc0816152e9565b9396929550929360600135925050565b600080600060608486031215614ce4578081fd5b83356001600160401b03811115614cf9578182fd5b614d0586828701614690565b9350506020840135614d16816152e9565b929592945050506040919091013590565b600060208284031215614d38578081fd5b5035919050565b600080600060608486031215614d53578081fd5b833592506020840135614d65816152e9565b91506040840135614d75816152e9565b809150509250925092565b60008060408385031215614d92578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614ded57815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614db4565b509495945050505050565b6000815180845260208085019450808401835b83811015614ded57815187529582019590820190600101614e0b565b60008151808452815b81811015614e4c57602081850181015186830182015201614e30565b81811115614e5d5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614eaa90830185614e27565b828103604084015261403c8185614e27565b6001600160a01b03929092168252602082015260400190565b6000602082526114ad6020830184614da1565b6000602082526114ad6020830184614df8565b600060408252614f0e6040830185614df8565b82810360208401526142d38185614df8565b901515815260200190565b6000602082526114ad6020830184614e27565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526149f46040830184614da1565b918252602082015260400190565b6040518181016001600160401b038111828210171561521a57fe5b604052919050565b60006001600160401b0382111561523557fe5b5060209081020190565b60e01c90565b600060443d101561525557610f31565b600481823e6308c379a0615269825161523f565b1461527357610f31565b6040513d600319016004823e80513d6001600160401b0381602484011181841117156152a25750505050610f31565b828401925082519150808211156152bc5750505050610f31565b503d830160208284010111156152d457505050610f31565b601f01601f1916810160200160405291505090565b6001600160a01b038116811461316457600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a26469706673582212201fcf1585ef785faaf22ca08a73a9325e2c8445a52b799df379ca4d72f94061b164736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "addMinter(address)": { + "details": "Add `minter` to the list of allowed minters." + }, + "addMinters(address[])": { + "details": "Add `minters` to the list of allowed minters." + }, + "balanceOf(address,uint256)": { + "details": "See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address." + }, + "balanceOfBatch(address[],uint256[])": { + "details": "See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length." + }, + "baseURI()": { + "details": "Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID." + }, + "isMinter(address)": { + "details": "Returns `true` if `account` has been granted to minters." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "removeMinter(address)": { + "details": "Revoke `_minter` from the list of allowed minters." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": { + "details": "See {IERC1155-safeBatchTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,uint256,bytes)": { + "details": "See {IERC1155-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC1155-setApprovalForAll}." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 307, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 364, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 24317, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "_balances", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))" + }, + { + "astId": 24323, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "_operatorApprovals", + "offset": 0, + "slot": "152", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 24325, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "_uri", + "offset": 0, + "slot": "153", + "type": "t_string_storage" + }, + { + "astId": 25318, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "154", + "type": "t_array(t_uint256)47_storage" + }, + { + "astId": 23360, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "defaultApprovals", + "offset": 0, + "slot": "201", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 23410, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 23350, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 23140, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "_tokenURIs", + "offset": 0, + "slot": "302", + "type": "t_mapping(t_uint256,t_string_storage)" + }, + { + "astId": 23142, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "_baseURI", + "offset": 0, + "slot": "303", + "type": "t_string_storage" + }, + { + "astId": 23257, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 138, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "354", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "355", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "356", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 25681, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "406", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 25356, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "456", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 20832, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "royalties", + "offset": 0, + "slot": "506", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)18638_storage)dyn_storage)" + }, + { + "astId": 23447, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "creators", + "offset": 0, + "slot": "507", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)18638_storage)dyn_storage)" + }, + { + "astId": 23451, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "supply", + "offset": 0, + "slot": "508", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 23455, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "minted", + "offset": 0, + "slot": "509", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 24068, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "510", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 21657, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "contractURI", + "offset": 0, + "slot": "560", + "type": "t_string_storage" + }, + { + "astId": 21691, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "561", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 22764, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "name", + "offset": 0, + "slot": "610", + "type": "t_string_storage" + }, + { + "astId": 22766, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "symbol", + "offset": 0, + "slot": "611", + "type": "t_string_storage" + }, + { + "astId": 23125, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "612", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 21697, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "isPrivate", + "offset": 0, + "slot": "662", + "type": "t_bool" + }, + { + "astId": 21701, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "663", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 21826, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "_minters", + "offset": 0, + "slot": "712", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 21947, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "__gap", + "offset": 0, + "slot": "713", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)18638_storage)dyn_storage": { + "base": "t_struct(Part)18638_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)47_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_array(t_struct(Part)18638_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct LibPart.Part[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(Part)18638_storage)dyn_storage" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_uint256,t_string_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => string)", + "numberOfBytes": "32", + "value": "t_string_storage" + }, + "t_mapping(t_uint256,t_uint256)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Part)18638_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 18635, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 18637, + "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/ERC20TransferProxy.json b/projects/hardhat-deploy/deployments/oasys/ERC20TransferProxy.json new file mode 100644 index 000000000..701d41a50 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/ERC20TransferProxy.json @@ -0,0 +1,238 @@ +{ + "address": "0x15FCB776c6A0E050FF0e9b423a0EAD1F0dfE1196", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__ERC20TransferProxy_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "erc20safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "numDeployments": 20, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__ERC20TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"erc20safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":\"ERC20TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x363fa1f25a41aa7d7b3fb9e2d182dec04c3774d06d9eed428b3fe48140fa4b7e\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5061095c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100e35780639870d7fe14610107578063ac8a584a1461012d578063f2fde38b1461015357610088565b80632ff26a0a1461008d578063715018a614610097578063759781271461009f578063776062c3146100a7575b600080fd5b610095610179565b005b61009561022b565b6100956102d7565b610095600480360360808110156100bd57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561036c565b6100eb6104bb565b604080516001600160a01b039092168252519081900360200190f35b6100956004803603602081101561011d57600080fd5b50356001600160a01b03166104ca565b6100956004803603602081101561014357600080fd5b50356001600160a01b0316610550565b6100956004803603602081101561016957600080fd5b50356001600160a01b03166105d3565b600054610100900460ff168061019257506101926106d6565b806101a0575060005460ff16155b6101db5760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610206576000805460ff1961ff0019909116610100171660011790555b61020e6106e7565b610216610787565b8015610228576000805461ff00191690555b50565b610233610880565b6001600160a01b03166102446104bb565b6001600160a01b03161461028d576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806102f057506102f06106d6565b806102fe575060005460ff16155b6103395760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610364576000805460ff1961ff0019909116610100171660011790555b610216610179565b60656000610378610880565b6001600160a01b0316815260208101919091526040016000205460ff166103d05760405162461bcd60e51b81526004018080602001828103825260288152602001806108ff6028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561043857600080fd5b505af115801561044c573d6000803e3d6000fd5b505050506040513d602081101561046257600080fd5b50516104b5576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b6104d2610880565b6001600160a01b03166104e36104bb565b6001600160a01b03161461052c576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b610558610880565b6001600160a01b03166105696104bb565b6001600160a01b0316146105b2576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b6105db610880565b6001600160a01b03166105ec6104bb565b6001600160a01b031614610635576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03811661067a5760405162461bcd60e51b815260040180806020018281038252602681526020018061088b6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006106e130610884565b15905090565b600054610100900460ff168061070057506107006106d6565b8061070e575060005460ff16155b6107495760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610216576000805460ff1961ff0019909116610100171660011790558015610228576000805461ff001916905550565b600054610100900460ff16806107a057506107a06106d6565b806107ae575060005460ff16155b6107e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610814576000805460ff1961ff0019909116610100171660011790555b600061081e610880565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610228576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212202973a98c7cda54d291a78bc2c1e7767938d5273d121da56e402b35febf3f882c64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100e35780639870d7fe14610107578063ac8a584a1461012d578063f2fde38b1461015357610088565b80632ff26a0a1461008d578063715018a614610097578063759781271461009f578063776062c3146100a7575b600080fd5b610095610179565b005b61009561022b565b6100956102d7565b610095600480360360808110156100bd57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561036c565b6100eb6104bb565b604080516001600160a01b039092168252519081900360200190f35b6100956004803603602081101561011d57600080fd5b50356001600160a01b03166104ca565b6100956004803603602081101561014357600080fd5b50356001600160a01b0316610550565b6100956004803603602081101561016957600080fd5b50356001600160a01b03166105d3565b600054610100900460ff168061019257506101926106d6565b806101a0575060005460ff16155b6101db5760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610206576000805460ff1961ff0019909116610100171660011790555b61020e6106e7565b610216610787565b8015610228576000805461ff00191690555b50565b610233610880565b6001600160a01b03166102446104bb565b6001600160a01b03161461028d576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806102f057506102f06106d6565b806102fe575060005460ff16155b6103395760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610364576000805460ff1961ff0019909116610100171660011790555b610216610179565b60656000610378610880565b6001600160a01b0316815260208101919091526040016000205460ff166103d05760405162461bcd60e51b81526004018080602001828103825260288152602001806108ff6028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561043857600080fd5b505af115801561044c573d6000803e3d6000fd5b505050506040513d602081101561046257600080fd5b50516104b5576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b6104d2610880565b6001600160a01b03166104e36104bb565b6001600160a01b03161461052c576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b610558610880565b6001600160a01b03166105696104bb565b6001600160a01b0316146105b2576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b6105db610880565b6001600160a01b03166105ec6104bb565b6001600160a01b031614610635576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03811661067a5760405162461bcd60e51b815260040180806020018281038252602681526020018061088b6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006106e130610884565b15905090565b600054610100900460ff168061070057506107006106d6565b8061070e575060005460ff16155b6107495760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610216576000805460ff1961ff0019909116610100171660011790558015610228576000805461ff001916905550565b600054610100900460ff16806107a057506107a06106d6565b806107ae575060005460ff16155b6107e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610814576000805460ff1961ff0019909116610100171660011790555b600061081e610880565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610228576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212202973a98c7cda54d291a78bc2c1e7767938d5273d121da56e402b35febf3f882c64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19253, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/ERC721LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/oasys/ERC721LazyMintTransferProxy.json new file mode 100644 index 000000000..c4b31da9e --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/ERC721LazyMintTransferProxy.json @@ -0,0 +1,250 @@ +{ + "address": "0x56b666895EFab1fb4Fa29298F390c380126d581c", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "asset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "numDeployments": 18, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":\"ERC721LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\\n }\\n}\\n\",\"keccak256\":\"0x39f9db52acb6155394c2e91f3ef71c9027fcd4b7ec0f48bb4307cc115aa715f5\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610e65806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109fb565b6101b0565b61008a6102ce565b6100af61037a565b6040516100bc9190610bc4565b60405180910390f35b61008a6100d33660046108eb565b610389565b61008a6100e63660046108eb565b61040f565b61008a6100f93660046108eb565b610492565b600054610100900460ff16806101175750610117610595565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b6101936105a6565b61019b610646565b80156101ad576000805461ff00191690555b50565b606560006101bc61073f565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610e086028913960400191505060405180910390fd5b82602001516001146102415760405162461bcd60e51b815260040161023890610bd8565b60405180910390fd5b6000808460000151602001518060200190518101906102609190610907565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb299061029590849088908890600401610c04565b600060405180830381600087803b1580156102af57600080fd5b505af11580156102c3573d6000803e3d6000fd5b505050505050505050565b6102d661073f565b6001600160a01b03166102e761037a565b6001600160a01b031614610330576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61039161073f565b6001600160a01b03166103a261037a565b6001600160a01b0316146103eb576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b61041761073f565b6001600160a01b031661042861037a565b6001600160a01b031614610471576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61049a61073f565b6001600160a01b03166104ab61037a565b6001600160a01b0316146104f4576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b0381166105395760405162461bcd60e51b8152600401808060200182810382526026815260200180610d946026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105a030610743565b15905090565b600054610100900460ff16806105bf57506105bf610595565b806105cd575060005460ff16155b6106085760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff168061065f575061065f610595565b8061066d575060005460ff16155b6106a85760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff161580156106d3576000805460ff1961ff0019909116610100171660011790555b60006106dd61073f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061076061075b84610d2c565b610cea565b905082815283838301111561077457600080fd5b610782836020830184610d4e565b9392505050565b803561074881610d7e565b600082601f8301126107a4578081fd5b815160206107b461075b83610d0e565b82815281810190858301855b858110156107fe578151880189603f8201126107da578788fd5b6107eb8a878301516040840161074d565b85525092840192908401906001016107c0565b5090979650505050505050565b600082601f83011261081b578081fd5b8151602061082b61075b83610d0e565b82815281810190858301604080860288018501891015610849578687fd5b865b868110156108be5781838b031215610861578788fd5b815182810181811067ffffffffffffffff8211171561087c57fe5b8352835161088981610d7e565b8152838701516bffffffffffffffffffffffff811681146108a857898afd5b818801528552938501939181019160010161084b565b509198975050505050505050565b600082601f8301126108dc578081fd5b6107828383516020850161074d565b6000602082840312156108fc578081fd5b813561078281610d7e565b60008060408385031215610919578081fd5b825161092481610d7e565b602084015190925067ffffffffffffffff80821115610941578283fd5b9084019060a08287031215610954578283fd5b61095e60a0610cea565b82518152602083015182811115610973578485fd5b61097f888286016108cc565b602083015250604083015182811115610996578485fd5b6109a28882860161080b565b6040830152506060830151828111156109b9578485fd5b6109c58882860161080b565b6060830152506080830151828111156109dc578485fd5b6109e888828601610794565b6080830152508093505050509250929050565b600080600060608486031215610a0f578081fd5b833567ffffffffffffffff80821115610a26578283fd5b81860191506040808389031215610a3b578384fd5b80518181018181108482111715610a4e57fe5b808352843584811115610a5f578687fd5b8501808b03841315610a6f578687fd5b608083018281108682111715610a8157fe5b845280356001600160e01b031981168114610a9a578788fd5b825260208181013586811115610aae578889fd5b82019550601f86018c13610ac0578788fd5b85359150610ad061075b83610d2c565b8281528c82848901011115610ae3578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610b12818c01610789565b985050505050610b23818801610789565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b8d57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b4f565b509495945050505050565b60008151808452610bb0816020860160208601610d4e565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610c2c610100850182610b98565b90506040870151605f19808684030160a0870152610c4a8383610b3c565b925060608901519150808684030160c0870152610c678383610b3c565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610cbf57601f19868303018452610cad828651610b98565b94870194938701939150600101610c91565b508096505050505050610cd481840186610b2f565b50610ce26040830184610b2f565b949350505050565b60405181810167ffffffffffffffff81118282101715610d0657fe5b604052919050565b600067ffffffffffffffff821115610d2257fe5b5060209081020190565b600067ffffffffffffffff821115610d4057fe5b50601f01601f191660200190565b60005b83811015610d69578181015183820152602001610d51565b83811115610d78576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a264697066735822122022780bcbc2a56161a6a3722e0e0c474492ff0b09629887f64b03fb1768e170fe64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109fb565b6101b0565b61008a6102ce565b6100af61037a565b6040516100bc9190610bc4565b60405180910390f35b61008a6100d33660046108eb565b610389565b61008a6100e63660046108eb565b61040f565b61008a6100f93660046108eb565b610492565b600054610100900460ff16806101175750610117610595565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b6101936105a6565b61019b610646565b80156101ad576000805461ff00191690555b50565b606560006101bc61073f565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610e086028913960400191505060405180910390fd5b82602001516001146102415760405162461bcd60e51b815260040161023890610bd8565b60405180910390fd5b6000808460000151602001518060200190518101906102609190610907565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb299061029590849088908890600401610c04565b600060405180830381600087803b1580156102af57600080fd5b505af11580156102c3573d6000803e3d6000fd5b505050505050505050565b6102d661073f565b6001600160a01b03166102e761037a565b6001600160a01b031614610330576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61039161073f565b6001600160a01b03166103a261037a565b6001600160a01b0316146103eb576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b61041761073f565b6001600160a01b031661042861037a565b6001600160a01b031614610471576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61049a61073f565b6001600160a01b03166104ab61037a565b6001600160a01b0316146104f4576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b0381166105395760405162461bcd60e51b8152600401808060200182810382526026815260200180610d946026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105a030610743565b15905090565b600054610100900460ff16806105bf57506105bf610595565b806105cd575060005460ff16155b6106085760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff168061065f575061065f610595565b8061066d575060005460ff16155b6106a85760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff161580156106d3576000805460ff1961ff0019909116610100171660011790555b60006106dd61073f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061076061075b84610d2c565b610cea565b905082815283838301111561077457600080fd5b610782836020830184610d4e565b9392505050565b803561074881610d7e565b600082601f8301126107a4578081fd5b815160206107b461075b83610d0e565b82815281810190858301855b858110156107fe578151880189603f8201126107da578788fd5b6107eb8a878301516040840161074d565b85525092840192908401906001016107c0565b5090979650505050505050565b600082601f83011261081b578081fd5b8151602061082b61075b83610d0e565b82815281810190858301604080860288018501891015610849578687fd5b865b868110156108be5781838b031215610861578788fd5b815182810181811067ffffffffffffffff8211171561087c57fe5b8352835161088981610d7e565b8152838701516bffffffffffffffffffffffff811681146108a857898afd5b818801528552938501939181019160010161084b565b509198975050505050505050565b600082601f8301126108dc578081fd5b6107828383516020850161074d565b6000602082840312156108fc578081fd5b813561078281610d7e565b60008060408385031215610919578081fd5b825161092481610d7e565b602084015190925067ffffffffffffffff80821115610941578283fd5b9084019060a08287031215610954578283fd5b61095e60a0610cea565b82518152602083015182811115610973578485fd5b61097f888286016108cc565b602083015250604083015182811115610996578485fd5b6109a28882860161080b565b6040830152506060830151828111156109b9578485fd5b6109c58882860161080b565b6060830152506080830151828111156109dc578485fd5b6109e888828601610794565b6080830152508093505050509250929050565b600080600060608486031215610a0f578081fd5b833567ffffffffffffffff80821115610a26578283fd5b81860191506040808389031215610a3b578384fd5b80518181018181108482111715610a4e57fe5b808352843584811115610a5f578687fd5b8501808b03841315610a6f578687fd5b608083018281108682111715610a8157fe5b845280356001600160e01b031981168114610a9a578788fd5b825260208181013586811115610aae578889fd5b82019550601f86018c13610ac0578788fd5b85359150610ad061075b83610d2c565b8281528c82848901011115610ae3578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610b12818c01610789565b985050505050610b23818801610789565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b8d57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b4f565b509495945050505050565b60008151808452610bb0816020860160208601610d4e565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610c2c610100850182610b98565b90506040870151605f19808684030160a0870152610c4a8383610b3c565b925060608901519150808684030160c0870152610c678383610b3c565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610cbf57601f19868303018452610cad828651610b98565b94870194938701939150600101610c91565b508096505050505050610cd481840186610b2f565b50610ce26040830184610b2f565b949350505050565b60405181810167ffffffffffffffff81118282101715610d0657fe5b604052919050565b600067ffffffffffffffff821115610d2257fe5b5060209081020190565b600067ffffffffffffffff821115610d4057fe5b50601f01601f191660200190565b60005b83811015610d69578181015183820152602001610d51565b83811115610d78576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a264697066735822122022780bcbc2a56161a6a3722e0e0c474492ff0b09629887f64b03fb1768e170fe64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19253, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/ERC721RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/oasys/ERC721RaribleFactoryC2.json new file mode 100644 index 000000000..4434b911e --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/ERC721RaribleFactoryC2.json @@ -0,0 +1,340 @@ +{ + "address": "0xEe962828d39ec46962B883bfFeBa0721499d435C", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_beacon", + "type": "address" + }, + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_lazyTransferProxy", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create721RaribleProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create721RaribleUserProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "beacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "numDeployments": 8, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":\"ERC721RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-721-minimal/ERC721RaribleMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC721Rarible token.\\n *\\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC721RaribleFactoryC2 is Ownable {\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create721RaribleProxy(address proxy);\\n event Create721RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleProxy(beaconProxy);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that private contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n}\\n\",\"keccak256\":\"0x4f3333862394062fca2a044f5dda27e9520739988f72127f95a6ad911248cc25\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721BaseMinimal.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = true;\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x189d72b3e2bae68029d2341c9a6f7e98dcbd94cc47703b3ae4e25f89facb9f29\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405161167638038061167683398101604081905261002f916100e5565b60006100396100c5565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039485166001600160a01b031991821617909155600280549385169382169390931790925560038054919093169116179055610127565b3390565b80516001600160a01b03811681146100e057600080fd5b919050565b6000806000606084860312156100f9578283fd5b610102846100c9565b9250610110602085016100c9565b915061011e604085016100c9565b90509250925092565b611540806101366000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220eddea18042d9f39d17b0a1fd61e2ed79324248e73c5a11bf15501760c458070264736f6c63430007060033", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220eddea18042d9f39d17b0a1fd61e2ed79324248e73c5a11bf15501760c458070264736f6c63430007060033", + "devdoc": { + "details": "This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.", + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 22393, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "beacon", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 22395, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "transferProxy", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 22397, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "lazyTransferProxy", + "offset": 0, + "slot": "3", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/ERC721RaribleMinimal.json b/projects/hardhat-deploy/deployments/oasys/ERC721RaribleMinimal.json new file mode 100644 index 000000000..4265bd0d0 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/ERC721RaribleMinimal.json @@ -0,0 +1,199 @@ +{ + "address": "0xA5C290Fce4ad37a254FCd799D986bDf24bd2Af25", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "numDeployments": 11, + "solcInputHash": "97f4234afe2a6aef4388d964e224ac4a", + "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-sol08/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-sol08/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(\\n Address.isContract(IBeacon(newBeacon).implementation()),\\n \\\"ERC1967: beacon implementation is not a contract\\\"\\n );\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overridden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405260405162000e3338038062000e33833981016040819052620000269162000414565b828162000036828260006200004d565b50620000449050826200007f565b50505062000547565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000dec833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e0c6027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000dec8339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b60606001600160a01b0384163b620003015760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001c4565b600080856001600160a01b0316856040516200031e9190620004f4565b600060405180830381855af49150503d80600081146200035b576040519150601f19603f3d011682016040523d82523d6000602084013e62000360565b606091505b509092509050620003738282866200037d565b9695505050505050565b606083156200038e5750816200015b565b8251156200039f5782518084602001fd5b8160405162461bcd60e51b8152600401620001c4919062000512565b80516001600160a01b0381168114620003d357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200040b578181015183820152602001620003f1565b50506000910152565b6000806000606084860312156200042a57600080fd5b6200043584620003bb565b92506200044560208501620003bb565b60408501519092506001600160401b03808211156200046357600080fd5b818601915086601f8301126200047857600080fd5b8151818111156200048d576200048d620003d8565b604051601f8201601f19908116603f01168101908382118183101715620004b857620004b8620003d8565b81604052828152896020848701011115620004d257600080fd5b620004e5836020830160208801620003ee565b80955050505050509250925092565b6000825162000508818460208701620003ee565b9190910192915050565b602081526000825180602084015262000533816040850160208701620003ee565b601f01601f19169190910160400192915050565b61089580620005576000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610727565b610128565b61006b6100a3366004610742565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610727565b6101fd565b34801561010557600080fd5b506100bd61021d565b61011661023e565b6101266101216102ee565b6102f8565b565b61013061031c565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061034f565b50565b61015a61010e565b61016d61031c565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061034f915050565b505050565b6101bf61010e565b60006101d661031c565b6001600160a01b031633036101f2576101ed6102ee565b905090565b6101fa61010e565b90565b61020561031c565b6001600160a01b0316330361015d5761015a8161037a565b600061022761031c565b6001600160a01b031633036101f2576101ed61031c565b61024661031c565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6103ce565b3660008037600080366000845af43d6000803e808015610317573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610358836103f6565b6000825111806103655750805b156101bf576103748383610436565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103a361031c565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610462565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610340565b6103ff8161053a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061045b8383604051806060016040528060278152602001610839602791396105de565b9392505050565b6001600160a01b0381166104de5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102e5565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6001600160a01b0381163b6105b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016102e5565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610501565b60606001600160a01b0384163b61065d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016102e5565b600080856001600160a01b03168560405161067891906107e9565b600060405180830381855af49150503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b50915091506106c88282866106d2565b9695505050505050565b606083156106e157508161045b565b8251156106f15782518084602001fd5b8160405162461bcd60e51b81526004016102e59190610805565b80356001600160a01b038116811461072257600080fd5b919050565b60006020828403121561073957600080fd5b61045b8261070b565b60008060006040848603121561075757600080fd5b6107608461070b565b9250602084013567ffffffffffffffff8082111561077d57600080fd5b818601915086601f83011261079157600080fd5b8135818111156107a057600080fd5b8760208285010111156107b257600080fd5b6020830194508093505050509250925092565b60005b838110156107e05781810151838201526020016107c8565b50506000910152565b600082516107fb8184602087016107c5565b9190910192915050565b60208152600082518060208401526108248160408501602087016107c5565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c237d612a72e85a9456b87073b6e556b1bd4fb18a233025ebd3fcd47377bbfa364736f6c63430008130033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610727565b610128565b61006b6100a3366004610742565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610727565b6101fd565b34801561010557600080fd5b506100bd61021d565b61011661023e565b6101266101216102ee565b6102f8565b565b61013061031c565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061034f565b50565b61015a61010e565b61016d61031c565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061034f915050565b505050565b6101bf61010e565b60006101d661031c565b6001600160a01b031633036101f2576101ed6102ee565b905090565b6101fa61010e565b90565b61020561031c565b6001600160a01b0316330361015d5761015a8161037a565b600061022761031c565b6001600160a01b031633036101f2576101ed61031c565b61024661031c565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6103ce565b3660008037600080366000845af43d6000803e808015610317573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610358836103f6565b6000825111806103655750805b156101bf576103748383610436565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103a361031c565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610462565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610340565b6103ff8161053a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061045b8383604051806060016040528060278152602001610839602791396105de565b9392505050565b6001600160a01b0381166104de5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102e5565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6001600160a01b0381163b6105b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016102e5565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610501565b60606001600160a01b0384163b61065d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016102e5565b600080856001600160a01b03168560405161067891906107e9565b600060405180830381855af49150503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b50915091506106c88282866106d2565b9695505050505050565b606083156106e157508161045b565b8251156106f15782518084602001fd5b8160405162461bcd60e51b81526004016102e59190610805565b80356001600160a01b038116811461072257600080fd5b919050565b60006020828403121561073957600080fd5b61045b8261070b565b60008060006040848603121561075757600080fd5b6107608461070b565b9250602084013567ffffffffffffffff8082111561077d57600080fd5b818601915086601f83011261079157600080fd5b8135818111156107a057600080fd5b8760208285010111156107b257600080fd5b6020830194508093505050509250925092565b60005b838110156107e05781810151838201526020016107c8565b50506000910152565b600082516107fb8184602087016107c5565b9190910192915050565b60208152600082518060208401526108248160408501602087016107c5565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c237d612a72e85a9456b87073b6e556b1bd4fb18a233025ebd3fcd47377bbfa364736f6c63430008130033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "events": { + "AdminChanged(address,address)": { + "details": "Emitted when the admin account has changed." + }, + "BeaconUpgraded(address)": { + "details": "Emitted when the beacon is upgraded." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/ERC721RaribleMinimalBeacon.json b/projects/hardhat-deploy/deployments/oasys/ERC721RaribleMinimalBeacon.json new file mode 100644 index 000000000..f0c01a42d --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/ERC721RaribleMinimalBeacon.json @@ -0,0 +1,165 @@ +{ + "address": "0xd3139Dc967375637B8715aa66ad0FB5a29Fb70f6", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "numDeployments": 9, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\":\"ERC721RaribleMinimalBeacon\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\\n constructor(address impl) UpgradeableBeacon(impl) {\\n\\n }\\n}\\n\",\"keccak256\":\"0x373664a30cbe44e442d055cae5ae935c7c3a9bcddb6f9f8fa79cb0e767a93f0c\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506040516105d73803806105d78339818101604052602081101561003357600080fd5b505180600061004061009a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100938161009e565b5050610114565b3390565b6100b18161010e60201b6103821760201c565b6100ec5760405162461bcd60e51b81526004018080602001828103825260338152602001806105a46033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b610481806101236000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212201ca8157d439eba6d8f9274010072e0c311e6540da8a0fa6f2029a22e6097d10964736f6c634300070600335570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212201ca8157d439eba6d8f9274010072e0c311e6540da8a0fa6f2029a22e6097d10964736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "implementation()": { + "details": "Returns the current implementation address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeTo(address)": { + "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol:ERC721RaribleMinimalBeacon", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6181, + "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol:ERC721RaribleMinimalBeacon", + "label": "_implementation", + "offset": 0, + "slot": "1", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/ERC721RaribleMinimal_Implementation.json b/projects/hardhat-deploy/deployments/oasys/ERC721RaribleMinimal_Implementation.json new file mode 100644 index 000000000..2836f511b --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/ERC721RaribleMinimal_Implementation.json @@ -0,0 +1,1508 @@ +{ + "address": "0x48915B9975a4132818877A68d03a2953D7Ef7d58", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "numDeployments": 12, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"burn(uint256)\":{\"details\":\"Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":\"ERC721RaribleMinimal\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721BaseMinimal.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = true;\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x189d72b3e2bae68029d2341c9a6f7e98dcbd94cc47703b3ae4e25f89facb9f29\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5061498b806100206000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f578063aa271e1a116100a2578063e07f231911610071578063e07f23191461042c578063e8a3d4851461043f578063e985e9c514610447578063f2fde38b1461045a576101f0565b8063aa271e1a146103e0578063b88d4fde146103f3578063c87b56dd14610406578063cad96cca14610419576101f0565b80638da5cb5b116100de5780638da5cb5b146103aa57806395d89b41146103b2578063983b2d56146103ba578063a22cb465146103cd576101f0565b8063715018a61461035c57806371e2a65714610364578063832fbb2914610377578063891be9741461038a576101f0565b80633db397c61161018757806355f804b31161015657806355f804b31461030e5780636352211e146103215780636c0360eb1461033457806370a082311461033c576101f0565b80633db397c6146102c257806342842e0e146102d557806342966c68146102e85780634648eb9d146102fb576101f0565b806322a775b6116101c357806322a775b61461026857806323b872dd1461027b5780632a55205a1461028e5780633092afd5146102af576101f0565b806301ffc9a7146101f557806306fdde031461021e578063081812fc14610233578063095ea7b314610253575b600080fd5b610208610203366004613f7b565b61046d565b60405161021591906143a4565b60405180910390f35b610226610480565b60405161021591906143af565b61024661024136600461422d565b610516565b604051610215919061432e565b610266610261366004613f1e565b610579565b005b610266610276366004614188565b61064f565b610266610289366004613e44565b6106f1565b6102a161029c36600461426b565b610748565b604051610215929190614378565b6102666102bd366004613df0565b610856565b6102666102d0366004613fd5565b610906565b6102666102e3366004613e44565b610969565b6102666102f636600461422d565b610984565b61026661030936600461409c565b610a4e565b61026661031c366004613fa3565b610ab5565b61024661032f36600461422d565b610b5a565b610226610bae565b61034f61034a366004613df0565b610c10565b6040516102159190614575565b610266610c74565b610266610372366004613f49565b610d20565b6102666103853660046141cc565b610e05565b61039d61039836600461422d565b610e80565b6040516102159190614391565b610246610f10565b610226610f1f565b6102666103c8366004613df0565b610f80565b6102666103db366004613eed565b611035565b6102086103ee366004613df0565b61113b565b610266610401366004613e84565b61115a565b61022661041436600461422d565b6111b8565b61039d61042736600461422d565b6111c3565b61026661043a366004614245565b61123e565b610226611281565b610208610455366004613e0c565b611310565b610266610468366004613df0565b611325565b600061047882611428565b90505b919050565b60fd8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561050c5780601f106104e15761010080835404028352916020019161050c565b820191906000526020600020905b8154815290600101906020018083116104ef57829003601f168201915b5050505050905090565b6000610521826114e2565b61055c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806147bf602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b600061058482610b5a565b9050806001600160a01b0316836001600160a01b031614156105d75760405162461bcd60e51b81526004018080602001828103825260218152602001806148af6021913960400191505060405180910390fd5b806001600160a01b03166105e96114ff565b6001600160a01b031614806106055750610605816104556114ff565b6106405760405162461bcd60e51b81526004018080602001828103825260388152602001806146b76038913960400191505060405180910390fd5b61064a8383611503565b505050565b6102925460ff16156106e357816040015160008151811061066c57fe5b6020026020010151600001516001600160a01b0316610689610f10565b6001600160a01b031614806106be57506106be82604001516000815181106106ad57fe5b60200260200101516000015161113b565b6106e35760405162461bcd60e51b81526004016106da906143ed565b60405180910390fd5b6106ed8282611572565b5050565b6107026106fc6114ff565b826116f4565b61073d5760405162461bcd60e51b81526004018080602001828103825260318152602001806148d06031913960400191505060405180910390fd5b61064a838383611700565b60008281526101c6602052604081205481906107695750600090508061084f565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b828210156107e557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610796565b505050509050806000815181106107f857fe5b60209081029190910101515192506000805b82518110156108435782818151811061081f57fe5b6020026020010151602001516001600160601b03168201915080600101905061080a565b50612710908502049150505b9250929050565b61085e6114ff565b6001600160a01b031661086f610f10565b6001600160a01b0316146108b8576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b61091486868686868661181f565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd6109486114ff565b878760405161095993929190614342565b60405180910390a1505050505050565b61064a8383836040518060200160405280600081525061115a565b61098d816114e2565b6109fc57606081901c61099e6114ff565b6001600160a01b0316816001600160a01b0316146109ed5760405162461bcd60e51b815260040180806020018281038252602d815260200180614792602d913960400191505060405180910390fd5b6109f682611939565b50610a4b565b610a076106fc6114ff565b610a425760405162461bcd60e51b81526004018080602001828103825260308152602001806149266030913960400191505060405180910390fd5b610a4b81611955565b50565b610a5c87878787868661181f565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e9913610a936114ff565b8888604051610aa493929190614342565b60405180910390a150505050505050565b610abd6114ff565b6001600160a01b0316610ace610f10565b6001600160a01b031614610b17576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b610b20816119f1565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d681604051610b4f91906143af565b60405180910390a150565b600081815260ff60205260408120546001600160a01b0316806104785760405162461bcd60e51b81526004018080602001828103825260298152602001806147196029913960400191505060405180910390fd5b6101c88054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561050c5780601f106104e15761010080835404028352916020019161050c565b60006001600160a01b038216610c575760405162461bcd60e51b815260040180806020018281038252602a8152602001806146ef602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b610c7c6114ff565b6001600160a01b0316610c8d610f10565b6001600160a01b031614610cd6576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b610d286114ff565b6001600160a01b0316610d39610f10565b6001600160a01b031614610d82576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b60005b81518110156106ed576000828281518110610d9c57fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a350600101610d85565b8251610e10906114e2565b15610e2957610e2482828560000151610969565b61064a565b8260400151600081518110610e3a57fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614610e765760405162461bcd60e51b81526004016106da906143c2565b61064a838261064f565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f0557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610eb6565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561050c5780601f106104e15761010080835404028352916020019161050c565b610f886114ff565b6001600160a01b0316610f99610f10565b6001600160a01b031614610fe2576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b61103d6114ff565b6001600160a01b0316826001600160a01b031614156110a3576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006110b16114ff565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556110f56114ff565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b61116b6111656114ff565b836116f4565b6111a65760405162461bcd60e51b81526004018080602001828103825260318152602001806148d06031913960400191505060405180910390fd5b6111b284848484611a05565b50505050565b606061047882611a57565b60008181526101c660209081526040808320805482518185028101850190935280835260609492939192909184018215610f0557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610eb6565b816001600160a01b03166112506114ff565b6001600160a01b0316146112765760405162461bcd60e51b81526004016106da9061447a565b61064a838383611a62565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156113085780601f106112dd57610100808354040283529160200191611308565b820191906000526020600020905b8154815290600101906020018083116112eb57829003601f168201915b505050505081565b600061131c8383611b0e565b90505b92915050565b61132d6114ff565b6001600160a01b031661133e610f10565b6001600160a01b031614611387576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6001600160a01b0381166113cc5760405162461bcd60e51b815260040180806020018281038252602681526020018061461f6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b03198216638486f69f60e01b148061145957506001600160e01b0319821663656cb66560e11b145b8061147457506001600160e01b0319821663152a902d60e11b145b8061148f57506001600160e01b031982166301ffc9a760e01b145b806114aa57506001600160e01b031982166380ac58cd60e01b145b806114c557506001600160e01b03198216635b5e139f60e01b145b806104785750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b3390565b60008181526101016020526040902080546001600160a01b0319166001600160a01b038416908117909155819061153982610b5a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b815160601c60006115816114ff565b9050836040015160008151811061159457fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146115d05760405162461bcd60e51b81526004016106da9061444f565b836080015151846040015151146115e657600080fd5b806001600160a01b0316826001600160a01b0316148061160b575061160b8282611310565b6116275760405162461bcd60e51b81526004016106da906144d6565b600061163285611b3b565b905060005b8560400151518110156116a85760008660400151828151811061165657fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b03161461169f5761169f81848960800151858151811061169257fe5b6020026020010151611d82565b50600101611637565b506116b7848660000151611d8d565b6116c985600001518660600151611da7565b6116db85600001518660400151611f96565b6116ed85600001518660200151612145565b5050505050565b600061131c83836121a9565b826001600160a01b031661171382610b5a565b6001600160a01b0316146117585760405162461bcd60e51b81526004018080602001828103825260298152602001806148376029913960400191505060405180910390fd5b6001600160a01b03821661179d5760405162461bcd60e51b81526004018080602001828103825260248152602001806146456024913960400191505060405180910390fd5b6117a883838361064a565b6117b3600082611503565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b0319168217905592518493929160008051602061488f83398151915291a4505050565b600054610100900460ff168061183857506118386121d6565b80611846575060005460ff16155b6118815760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156118ac576000805460ff1961ff0019909116610100171660011790555b6118b5856119f1565b6118bd6121e7565b6118c5612288565b6118cd6121e7565b6118d5612325565b6118dd6123c2565b6118e56121e7565b6118ed6124bb565b6118f56121e7565b6118fe8461258a565b6119088787612651565b61191383600161273c565b61191e82600161273c565b8015611930576000805461ff00191690555b50505050505050565b600090815261010360205260409020805460ff19166001179055565b600061196082610b5a565b905061196e8160008461064a565b611979600083611503565b6119828261279d565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b03191690556119c782611939565b60405182906000906001600160a01b0384169060008051602061488f833981519152908390a45050565b80516106ed906101c8906020840190613a58565b611a10848484611700565b611a1c848484846127a6565b6111b25760405162461bcd60e51b81526004018080602001828103825260328152602001806145ed6032913960400191505060405180910390fd5b60606104788261295c565b60008381526101c66020526040812054905b818110156116ed5760008581526101c66020526040902080546001600160a01b038616919083908110611aa357fe5b6000918252602090912001546001600160a01b03161415611b065760008581526101c660205260409020805484919083908110611adc57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101611a74565b6001600160a01b038116600090815261012f602052604081205460ff168061131c575061131c8383612b37565b6000808260600151516001600160401b0381118015611b5957600080fd5b50604051908082528060200260200182016040528015611b83578160200160208202803683370190505b50905060005b836060015151811015611bd557611bb684606001518281518110611ba957fe5b6020026020010151612b66565b828281518110611bc257fe5b6020908102919091010152600101611b89565b5060008360400151516001600160401b0381118015611bf357600080fd5b50604051908082528060200260200182016040528015611c1d578160200160208202803683370190505b50905060005b846040015151811015611c6257611c4385604001518281518110611ba957fe5b828281518110611c4f57fe5b6020908102919091010152600101611c23565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b83811015611cc6578181015183820152602001611cae565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b83811015611d17578181015183820152602001611cff565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b61064a838383612bd3565b6106ed828260405180602001604052806000815250612e52565b6000805b8251811015611f4b5760006001600160a01b0316838281518110611dcb57fe5b6020026020010151600001516001600160a01b03161415611e33576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b828181518110611e3f57fe5b6020026020010151602001516001600160601b031660001415611ea9576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b828181518110611eb557fe5b6020026020010151602001516001600160601b0316820191506101c66000858152602001908152602001600020838281518110611eee57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501611dab565b506127108110611f8c5760405162461bcd60e51b81526004018080602001828103825260258152602001806149016025913960400191505060405180910390fd5b61064a8383612ea4565b60008281526101fb6020526040812090805b83518110156120e45760006001600160a01b0316848281518110611fc857fe5b6020026020010151600001516001600160a01b03161415611ffb5760405162461bcd60e51b81526004016106da9061449f565b83818151811061200757fe5b6020026020010151602001516001600160601b03166000141561203c5760405162461bcd60e51b81526004016106da9061441a565b8284828151811061204957fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b03199092169190911790921691909117905583516120da908590839081106120b657fe5b6020026020010151602001516001600160601b031683612ee190919063ffffffff16565b9150600101611fa8565b5080612710146121065760405162461bcd60e51b81526004016106da90614527565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f848460405161213792919061457e565b60405180910390a150505050565b61214e826114e2565b6121895760405162461bcd60e51b815260040180806020018281038252602c8152602001806147eb602c913960400191505060405180910390fd5b60008281526101c760209081526040909120825161064a92840190613a58565b6001600160a01b038216600090815261012f602052604081205460ff168061131c575061131c8383612f3b565b60006121e130612fd7565b15905090565b600054610100900460ff168061220057506122006121d6565b8061220e575060005460ff16155b6122495760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612274576000805460ff1961ff0019909116610100171660011790555b8015610a4b576000805461ff001916905550565b600054610100900460ff16806122a157506122a16121d6565b806122af575060005460ff16155b6122ea5760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612315576000805460ff1961ff0019909116610100171660011790555b61227463656cb66560e11b612fdd565b600054610100900460ff168061233e575061233e6121d6565b8061234c575060005460ff16155b6123875760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156123b2576000805460ff1961ff0019909116610100171660011790555b6122746301ffc9a760e01b612fdd565b600054610100900460ff16806123db57506123db6121d6565b806123e9575060005460ff16155b6124245760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff1615801561244f576000805460ff1961ff0019909116610100171660011790555b60006124596114ff565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610a4b576000805461ff001916905550565b600054610100900460ff16806124d457506124d46121d6565b806124e2575060005460ff16155b61251d5760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612548576000805460ff1961ff0019909116610100171660011790555b612274604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b815250613061565b600054610100900460ff16806125a357506125a36121d6565b806125b1575060005460ff16155b6125ec5760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612617576000805460ff1961ff0019909116610100171660011790555b815161262b9061022e906020850190613a58565b5061263c63e8a3d48560e01b612fdd565b80156106ed576000805461ff00191690555050565b600054610100900460ff168061266a575061266a6121d6565b80612678575060005460ff16155b6126b35760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156126de576000805460ff1961ff0019909116610100171660011790555b82516126f19060fd906020860190613a58565b5081516127059060fe906020850190613a58565b506127166380ac58cd60e01b612fdd565b612726635b5e139f60e01b612fdd565b801561064a576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b610a4b81613121565b60006127ba846001600160a01b0316612fd7565b1561295057836001600160a01b031663150b7a026127d66114ff565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612849578181015183820152602001612831565b50505050905090810190601f1680156128765780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561289857600080fd5b505af19250505080156128bd57506040513d60208110156128b857600080fd5b505160015b612936573d8080156128eb576040519150601f19603f3d011682016040523d82523d6000602084013e6128f0565b606091505b50805161292e5760405162461bcd60e51b81526004018080602001828103825260328152602001806145ed6032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612954565b5060015b949350505050565b6060612967826114e2565b6129a25760405162461bcd60e51b815260040180806020018281038252602f815260200180614860602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f810185900485028201850190935282815292909190830182828015612a365780601f10612a0b57610100808354040283529160200191612a36565b820191906000526020600020905b815481529060010190602001808311612a1957829003601f168201915b505050505090506000612a47610bae565b9050805160001415612a5b5750905061047b565b815115612a7557612a6c818361312a565b9250505061047b565b80612a7f8561330f565b6040516020018083805190602001908083835b60208310612ab15780518252601f199092019160209182019101612a92565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612af95780518252601f199092019160209182019101612ada565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000612bde836133e9565b90506000825160411415612bf957612bf68284613435565b90505b846001600160a01b0316816001600160a01b0316146116ed57612c24856001600160a01b0316612fd7565b15612dda5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b83811015612c93578181015183820152602001612c7b565b50505050905090810190601f168015612cc05780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015612cde57600080fd5b505afa158015612cf2573d6000803e3d6000fd5b505050506040513d6020811015612d0857600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b031990911614612dd45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d99578181015183820152602001612d81565b50505050905090810190601f168015612dc65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506116ed565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315612d99578181015183820152602001612d81565b612e5c83836134b5565b612e6960008484846127a6565b61064a5760405162461bcd60e51b81526004018080602001828103825260328152602001806145ed6032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612ed592919061457e565b60405180910390a15050565b60008282018381101561131c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000612f46826114e2565b612f815760405162461bcd60e51b815260040180806020018281038252602c81526020018061468b602c913960400191505060405180910390fd5b6000612f8c83610b5a565b9050806001600160a01b0316846001600160a01b03161480612fc75750836001600160a01b0316612fbc84610516565b6001600160a01b0316145b8061295457506129548185611310565b3b151590565b6001600160e01b0319808216141561303c576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff168061307a575061307a6121d6565b80613088575060005460ff16155b6130c35760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156130ee576000805460ff1961ff0019909116610100171660011790555b8251602080850191909120835191840191909120609791909155609855801561064a576000805461ff0019169055505050565b610a4b8161361b565b805182516060918491849110156131f55784846040516020018083805190602001908083835b6020831061316f5780518252601f199092019160209182019101613150565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106131b75780518252601f199092019160209182019101613198565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529250505061131f565b60005b82518110156133055782818151811061320d57fe5b602001015160f81c60f81b6001600160f81b03191682828151811061322e57fe5b01602001516001600160f81b031916146132fd5785856040516020018083805190602001908083835b602083106132765780518252601f199092019160209182019101613257565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106132be5780518252601f19909201916020918201910161329f565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052935050505061131f565b6001016131f8565b5092949350505050565b60608161333457506040805180820190915260018152600360fc1b602082015261047b565b8160005b811561334c57600101600a82049150613338565b6000816001600160401b038111801561336457600080fd5b506040519080825280601f01601f19166020018201604052801561338f576020820181803683370190505b50859350905060001982015b83156133e057600a840660300160f81b828280600190039350815181106133be57fe5b60200101906001600160f81b031916908160001a905350600a8404935061339b565b50949350505050565b60006133f361365b565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000815160411461348d576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6134ab8682858561369b565b9695505050505050565b6001600160a01b038216613510576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff161561356c576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b613575816114e2565b156135c7576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b6135d36000838361064a565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b03191690911790556106ed82826138f1565b60008181526101c760205260409020546002600019610100600184161502019091160415610a4b5760008181526101c760205260408120610a4b91613ae4565b60006136967f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6136896138fb565b613691613901565b613907565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156136fc5760405162461bcd60e51b81526004018080602001828103825260228152602001806146696022913960400191505060405180910390fd5b6000601e8560ff1611156137d6576004850360ff16601b148061372557506004850360ff16601c145b6137605760405162461bcd60e51b81526004018080602001828103825260228152602001806147706022913960400191505060405180910390fd5b600161376b87613969565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156137c5573d6000803e3d6000fd5b50505060206040510351905061388d565b8460ff16601b14806137eb57508460ff16601c145b6138265760405162461bcd60e51b81526004018080602001828103825260228152602001806147706022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613880573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166138e8576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6106ed82826139ba565b60975490565b60985490565b6000838383613914613a54565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b0383168114613a295760405182906001600160a01b0383169060009060008051602061488f833981519152908290a481836001600160a01b0316826001600160a01b031660008051602061488f83398151915260405160405180910390a461064a565b60405182906001600160a01b0385169060009060008051602061488f833981519152908290a4505050565b4690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613a8e5760008555613ad4565b82601f10613aa757805160ff1916838001178555613ad4565b82800160010185558215613ad4579182015b82811115613ad4578251825591602001919060010190613ab9565b50613ae0929150613b24565b5090565b50805460018160011615610100020316600290046000825580601f10613b0a5750610a4b565b601f016020900490600052602060002090810190610a4b91905b5b80821115613ae05760008155600101613b25565b803561047b816145d7565b600082601f830112613b54578081fd5b81356020613b69613b64836145ba565b614597565b8281528181019085830183850287018401881015613b85578586fd5b855b85811015613bac578135613b9a816145d7565b84529284019290840190600101613b87565b5090979650505050505050565b600082601f830112613bc9578081fd5b81356020613bd9613b64836145ba565b82815281810190858301855b85811015613bac57613bfc898684358b0101613cc9565b84529284019290840190600101613be5565b600082601f830112613c1e578081fd5b81356020613c2e613b64836145ba565b82815281810190858301604080860288018501891015613c4c578687fd5b865b86811015613cbb5781838b031215613c64578788fd5b81518281018181106001600160401b0382111715613c7e57fe5b83528335613c8b816145d7565b8152838701356001600160601b0381168114613ca557898afd5b8188015285529385019391810191600101613c4e565b509198975050505050505050565b600082601f830112613cd9578081fd5b81356001600160401b03811115613cec57fe5b613cff601f8201601f1916602001614597565b818152846020838601011115613d13578283fd5b816020850160208301379081016020019190915292915050565b600060a08284031215613d3e578081fd5b613d4860a0614597565b90508135815260208201356001600160401b0380821115613d6857600080fd5b613d7485838601613cc9565b60208401526040840135915080821115613d8d57600080fd5b613d9985838601613c0e565b60408401526060840135915080821115613db257600080fd5b613dbe85838601613c0e565b60608401526080840135915080821115613dd757600080fd5b50613de484828501613bb9565b60808301525092915050565b600060208284031215613e01578081fd5b813561131c816145d7565b60008060408385031215613e1e578081fd5b8235613e29816145d7565b91506020830135613e39816145d7565b809150509250929050565b600080600060608486031215613e58578081fd5b8335613e63816145d7565b92506020840135613e73816145d7565b929592945050506040919091013590565b60008060008060808587031215613e99578081fd5b8435613ea4816145d7565b93506020850135613eb4816145d7565b92506040850135915060608501356001600160401b03811115613ed5578182fd5b613ee187828801613cc9565b91505092959194509250565b60008060408385031215613eff578182fd5b8235613f0a816145d7565b915060208301358015158114613e39578182fd5b60008060408385031215613f30578182fd5b8235613f3b816145d7565b946020939093013593505050565b600060208284031215613f5a578081fd5b81356001600160401b03811115613f6f578182fd5b61295484828501613b44565b600060208284031215613f8c578081fd5b81356001600160e01b03198116811461131c578182fd5b600060208284031215613fb4578081fd5b81356001600160401b03811115613fc9578182fd5b61295484828501613cc9565b60008060008060008060c08789031215613fed578384fd5b86356001600160401b0380821115614003578586fd5b61400f8a838b01613cc9565b97506020890135915080821115614024578586fd5b6140308a838b01613cc9565b96506040890135915080821115614045578586fd5b6140518a838b01613cc9565b95506060890135915080821115614066578384fd5b5061407389828a01613cc9565b93505061408260808801613b39565b915061409060a08801613b39565b90509295509295509295565b600080600080600080600060e0888a0312156140b6578485fd5b87356001600160401b03808211156140cc578687fd5b6140d88b838c01613cc9565b985060208a01359150808211156140ed578687fd5b6140f98b838c01613cc9565b975060408a013591508082111561410e578687fd5b61411a8b838c01613cc9565b965060608a013591508082111561412f578283fd5b61413b8b838c01613cc9565b955060808a0135915080821115614150578283fd5b5061415d8a828b01613b44565b93505061416c60a08901613b39565b915061417a60c08901613b39565b905092959891949750929550565b6000806040838503121561419a578182fd5b82356001600160401b038111156141af578283fd5b6141bb85828601613d2d565b9250506020830135613e39816145d7565b6000806000606084860312156141e0578081fd5b83356001600160401b038111156141f5578182fd5b61420186828701613d2d565b9350506020840135614212816145d7565b91506040840135614222816145d7565b809150509250925092565b60006020828403121561423e578081fd5b5035919050565b600080600060608486031215614259578081fd5b833592506020840135614212816145d7565b6000806040838503121561427d578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156142d857815180516001600160a01b031688528301516001600160601b0316838801526040909601959082019060010161429f565b509495945050505050565b60008151808452815b81811015614308576020818501810151868301820152016142ec565b818111156143195782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614366908301856142e3565b82810360408401526134ab81856142e3565b6001600160a01b03929092168252602082015260400190565b60006020825261131c602083018461428c565b901515815260200190565b60006020825261131c60208301846142e3565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b600083825260406020830152612954604083018461428c565b6040518181016001600160401b03811182821017156145b257fe5b604052919050565b60006001600160401b038211156145cd57fe5b5060209081020190565b6001600160a01b0381168114610a4b57600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220872bc930150cac441fe8e7a9d3bc2a73c62da627ee61bc24187073649c45a4a564736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f578063aa271e1a116100a2578063e07f231911610071578063e07f23191461042c578063e8a3d4851461043f578063e985e9c514610447578063f2fde38b1461045a576101f0565b8063aa271e1a146103e0578063b88d4fde146103f3578063c87b56dd14610406578063cad96cca14610419576101f0565b80638da5cb5b116100de5780638da5cb5b146103aa57806395d89b41146103b2578063983b2d56146103ba578063a22cb465146103cd576101f0565b8063715018a61461035c57806371e2a65714610364578063832fbb2914610377578063891be9741461038a576101f0565b80633db397c61161018757806355f804b31161015657806355f804b31461030e5780636352211e146103215780636c0360eb1461033457806370a082311461033c576101f0565b80633db397c6146102c257806342842e0e146102d557806342966c68146102e85780634648eb9d146102fb576101f0565b806322a775b6116101c357806322a775b61461026857806323b872dd1461027b5780632a55205a1461028e5780633092afd5146102af576101f0565b806301ffc9a7146101f557806306fdde031461021e578063081812fc14610233578063095ea7b314610253575b600080fd5b610208610203366004613f7b565b61046d565b60405161021591906143a4565b60405180910390f35b610226610480565b60405161021591906143af565b61024661024136600461422d565b610516565b604051610215919061432e565b610266610261366004613f1e565b610579565b005b610266610276366004614188565b61064f565b610266610289366004613e44565b6106f1565b6102a161029c36600461426b565b610748565b604051610215929190614378565b6102666102bd366004613df0565b610856565b6102666102d0366004613fd5565b610906565b6102666102e3366004613e44565b610969565b6102666102f636600461422d565b610984565b61026661030936600461409c565b610a4e565b61026661031c366004613fa3565b610ab5565b61024661032f36600461422d565b610b5a565b610226610bae565b61034f61034a366004613df0565b610c10565b6040516102159190614575565b610266610c74565b610266610372366004613f49565b610d20565b6102666103853660046141cc565b610e05565b61039d61039836600461422d565b610e80565b6040516102159190614391565b610246610f10565b610226610f1f565b6102666103c8366004613df0565b610f80565b6102666103db366004613eed565b611035565b6102086103ee366004613df0565b61113b565b610266610401366004613e84565b61115a565b61022661041436600461422d565b6111b8565b61039d61042736600461422d565b6111c3565b61026661043a366004614245565b61123e565b610226611281565b610208610455366004613e0c565b611310565b610266610468366004613df0565b611325565b600061047882611428565b90505b919050565b60fd8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561050c5780601f106104e15761010080835404028352916020019161050c565b820191906000526020600020905b8154815290600101906020018083116104ef57829003601f168201915b5050505050905090565b6000610521826114e2565b61055c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806147bf602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b600061058482610b5a565b9050806001600160a01b0316836001600160a01b031614156105d75760405162461bcd60e51b81526004018080602001828103825260218152602001806148af6021913960400191505060405180910390fd5b806001600160a01b03166105e96114ff565b6001600160a01b031614806106055750610605816104556114ff565b6106405760405162461bcd60e51b81526004018080602001828103825260388152602001806146b76038913960400191505060405180910390fd5b61064a8383611503565b505050565b6102925460ff16156106e357816040015160008151811061066c57fe5b6020026020010151600001516001600160a01b0316610689610f10565b6001600160a01b031614806106be57506106be82604001516000815181106106ad57fe5b60200260200101516000015161113b565b6106e35760405162461bcd60e51b81526004016106da906143ed565b60405180910390fd5b6106ed8282611572565b5050565b6107026106fc6114ff565b826116f4565b61073d5760405162461bcd60e51b81526004018080602001828103825260318152602001806148d06031913960400191505060405180910390fd5b61064a838383611700565b60008281526101c6602052604081205481906107695750600090508061084f565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b828210156107e557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610796565b505050509050806000815181106107f857fe5b60209081029190910101515192506000805b82518110156108435782818151811061081f57fe5b6020026020010151602001516001600160601b03168201915080600101905061080a565b50612710908502049150505b9250929050565b61085e6114ff565b6001600160a01b031661086f610f10565b6001600160a01b0316146108b8576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b61091486868686868661181f565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd6109486114ff565b878760405161095993929190614342565b60405180910390a1505050505050565b61064a8383836040518060200160405280600081525061115a565b61098d816114e2565b6109fc57606081901c61099e6114ff565b6001600160a01b0316816001600160a01b0316146109ed5760405162461bcd60e51b815260040180806020018281038252602d815260200180614792602d913960400191505060405180910390fd5b6109f682611939565b50610a4b565b610a076106fc6114ff565b610a425760405162461bcd60e51b81526004018080602001828103825260308152602001806149266030913960400191505060405180910390fd5b610a4b81611955565b50565b610a5c87878787868661181f565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e9913610a936114ff565b8888604051610aa493929190614342565b60405180910390a150505050505050565b610abd6114ff565b6001600160a01b0316610ace610f10565b6001600160a01b031614610b17576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b610b20816119f1565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d681604051610b4f91906143af565b60405180910390a150565b600081815260ff60205260408120546001600160a01b0316806104785760405162461bcd60e51b81526004018080602001828103825260298152602001806147196029913960400191505060405180910390fd5b6101c88054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561050c5780601f106104e15761010080835404028352916020019161050c565b60006001600160a01b038216610c575760405162461bcd60e51b815260040180806020018281038252602a8152602001806146ef602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b610c7c6114ff565b6001600160a01b0316610c8d610f10565b6001600160a01b031614610cd6576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b610d286114ff565b6001600160a01b0316610d39610f10565b6001600160a01b031614610d82576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b60005b81518110156106ed576000828281518110610d9c57fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a350600101610d85565b8251610e10906114e2565b15610e2957610e2482828560000151610969565b61064a565b8260400151600081518110610e3a57fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614610e765760405162461bcd60e51b81526004016106da906143c2565b61064a838261064f565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f0557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610eb6565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561050c5780601f106104e15761010080835404028352916020019161050c565b610f886114ff565b6001600160a01b0316610f99610f10565b6001600160a01b031614610fe2576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b61103d6114ff565b6001600160a01b0316826001600160a01b031614156110a3576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006110b16114ff565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556110f56114ff565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b61116b6111656114ff565b836116f4565b6111a65760405162461bcd60e51b81526004018080602001828103825260318152602001806148d06031913960400191505060405180910390fd5b6111b284848484611a05565b50505050565b606061047882611a57565b60008181526101c660209081526040808320805482518185028101850190935280835260609492939192909184018215610f0557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610eb6565b816001600160a01b03166112506114ff565b6001600160a01b0316146112765760405162461bcd60e51b81526004016106da9061447a565b61064a838383611a62565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156113085780601f106112dd57610100808354040283529160200191611308565b820191906000526020600020905b8154815290600101906020018083116112eb57829003601f168201915b505050505081565b600061131c8383611b0e565b90505b92915050565b61132d6114ff565b6001600160a01b031661133e610f10565b6001600160a01b031614611387576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6001600160a01b0381166113cc5760405162461bcd60e51b815260040180806020018281038252602681526020018061461f6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b03198216638486f69f60e01b148061145957506001600160e01b0319821663656cb66560e11b145b8061147457506001600160e01b0319821663152a902d60e11b145b8061148f57506001600160e01b031982166301ffc9a760e01b145b806114aa57506001600160e01b031982166380ac58cd60e01b145b806114c557506001600160e01b03198216635b5e139f60e01b145b806104785750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b3390565b60008181526101016020526040902080546001600160a01b0319166001600160a01b038416908117909155819061153982610b5a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b815160601c60006115816114ff565b9050836040015160008151811061159457fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146115d05760405162461bcd60e51b81526004016106da9061444f565b836080015151846040015151146115e657600080fd5b806001600160a01b0316826001600160a01b0316148061160b575061160b8282611310565b6116275760405162461bcd60e51b81526004016106da906144d6565b600061163285611b3b565b905060005b8560400151518110156116a85760008660400151828151811061165657fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b03161461169f5761169f81848960800151858151811061169257fe5b6020026020010151611d82565b50600101611637565b506116b7848660000151611d8d565b6116c985600001518660600151611da7565b6116db85600001518660400151611f96565b6116ed85600001518660200151612145565b5050505050565b600061131c83836121a9565b826001600160a01b031661171382610b5a565b6001600160a01b0316146117585760405162461bcd60e51b81526004018080602001828103825260298152602001806148376029913960400191505060405180910390fd5b6001600160a01b03821661179d5760405162461bcd60e51b81526004018080602001828103825260248152602001806146456024913960400191505060405180910390fd5b6117a883838361064a565b6117b3600082611503565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b0319168217905592518493929160008051602061488f83398151915291a4505050565b600054610100900460ff168061183857506118386121d6565b80611846575060005460ff16155b6118815760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156118ac576000805460ff1961ff0019909116610100171660011790555b6118b5856119f1565b6118bd6121e7565b6118c5612288565b6118cd6121e7565b6118d5612325565b6118dd6123c2565b6118e56121e7565b6118ed6124bb565b6118f56121e7565b6118fe8461258a565b6119088787612651565b61191383600161273c565b61191e82600161273c565b8015611930576000805461ff00191690555b50505050505050565b600090815261010360205260409020805460ff19166001179055565b600061196082610b5a565b905061196e8160008461064a565b611979600083611503565b6119828261279d565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b03191690556119c782611939565b60405182906000906001600160a01b0384169060008051602061488f833981519152908390a45050565b80516106ed906101c8906020840190613a58565b611a10848484611700565b611a1c848484846127a6565b6111b25760405162461bcd60e51b81526004018080602001828103825260328152602001806145ed6032913960400191505060405180910390fd5b60606104788261295c565b60008381526101c66020526040812054905b818110156116ed5760008581526101c66020526040902080546001600160a01b038616919083908110611aa357fe5b6000918252602090912001546001600160a01b03161415611b065760008581526101c660205260409020805484919083908110611adc57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101611a74565b6001600160a01b038116600090815261012f602052604081205460ff168061131c575061131c8383612b37565b6000808260600151516001600160401b0381118015611b5957600080fd5b50604051908082528060200260200182016040528015611b83578160200160208202803683370190505b50905060005b836060015151811015611bd557611bb684606001518281518110611ba957fe5b6020026020010151612b66565b828281518110611bc257fe5b6020908102919091010152600101611b89565b5060008360400151516001600160401b0381118015611bf357600080fd5b50604051908082528060200260200182016040528015611c1d578160200160208202803683370190505b50905060005b846040015151811015611c6257611c4385604001518281518110611ba957fe5b828281518110611c4f57fe5b6020908102919091010152600101611c23565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b83811015611cc6578181015183820152602001611cae565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b83811015611d17578181015183820152602001611cff565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b61064a838383612bd3565b6106ed828260405180602001604052806000815250612e52565b6000805b8251811015611f4b5760006001600160a01b0316838281518110611dcb57fe5b6020026020010151600001516001600160a01b03161415611e33576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b828181518110611e3f57fe5b6020026020010151602001516001600160601b031660001415611ea9576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b828181518110611eb557fe5b6020026020010151602001516001600160601b0316820191506101c66000858152602001908152602001600020838281518110611eee57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501611dab565b506127108110611f8c5760405162461bcd60e51b81526004018080602001828103825260258152602001806149016025913960400191505060405180910390fd5b61064a8383612ea4565b60008281526101fb6020526040812090805b83518110156120e45760006001600160a01b0316848281518110611fc857fe5b6020026020010151600001516001600160a01b03161415611ffb5760405162461bcd60e51b81526004016106da9061449f565b83818151811061200757fe5b6020026020010151602001516001600160601b03166000141561203c5760405162461bcd60e51b81526004016106da9061441a565b8284828151811061204957fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b03199092169190911790921691909117905583516120da908590839081106120b657fe5b6020026020010151602001516001600160601b031683612ee190919063ffffffff16565b9150600101611fa8565b5080612710146121065760405162461bcd60e51b81526004016106da90614527565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f848460405161213792919061457e565b60405180910390a150505050565b61214e826114e2565b6121895760405162461bcd60e51b815260040180806020018281038252602c8152602001806147eb602c913960400191505060405180910390fd5b60008281526101c760209081526040909120825161064a92840190613a58565b6001600160a01b038216600090815261012f602052604081205460ff168061131c575061131c8383612f3b565b60006121e130612fd7565b15905090565b600054610100900460ff168061220057506122006121d6565b8061220e575060005460ff16155b6122495760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612274576000805460ff1961ff0019909116610100171660011790555b8015610a4b576000805461ff001916905550565b600054610100900460ff16806122a157506122a16121d6565b806122af575060005460ff16155b6122ea5760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612315576000805460ff1961ff0019909116610100171660011790555b61227463656cb66560e11b612fdd565b600054610100900460ff168061233e575061233e6121d6565b8061234c575060005460ff16155b6123875760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156123b2576000805460ff1961ff0019909116610100171660011790555b6122746301ffc9a760e01b612fdd565b600054610100900460ff16806123db57506123db6121d6565b806123e9575060005460ff16155b6124245760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff1615801561244f576000805460ff1961ff0019909116610100171660011790555b60006124596114ff565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610a4b576000805461ff001916905550565b600054610100900460ff16806124d457506124d46121d6565b806124e2575060005460ff16155b61251d5760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612548576000805460ff1961ff0019909116610100171660011790555b612274604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b815250613061565b600054610100900460ff16806125a357506125a36121d6565b806125b1575060005460ff16155b6125ec5760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612617576000805460ff1961ff0019909116610100171660011790555b815161262b9061022e906020850190613a58565b5061263c63e8a3d48560e01b612fdd565b80156106ed576000805461ff00191690555050565b600054610100900460ff168061266a575061266a6121d6565b80612678575060005460ff16155b6126b35760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156126de576000805460ff1961ff0019909116610100171660011790555b82516126f19060fd906020860190613a58565b5081516127059060fe906020850190613a58565b506127166380ac58cd60e01b612fdd565b612726635b5e139f60e01b612fdd565b801561064a576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b610a4b81613121565b60006127ba846001600160a01b0316612fd7565b1561295057836001600160a01b031663150b7a026127d66114ff565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612849578181015183820152602001612831565b50505050905090810190601f1680156128765780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561289857600080fd5b505af19250505080156128bd57506040513d60208110156128b857600080fd5b505160015b612936573d8080156128eb576040519150601f19603f3d011682016040523d82523d6000602084013e6128f0565b606091505b50805161292e5760405162461bcd60e51b81526004018080602001828103825260328152602001806145ed6032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612954565b5060015b949350505050565b6060612967826114e2565b6129a25760405162461bcd60e51b815260040180806020018281038252602f815260200180614860602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f810185900485028201850190935282815292909190830182828015612a365780601f10612a0b57610100808354040283529160200191612a36565b820191906000526020600020905b815481529060010190602001808311612a1957829003601f168201915b505050505090506000612a47610bae565b9050805160001415612a5b5750905061047b565b815115612a7557612a6c818361312a565b9250505061047b565b80612a7f8561330f565b6040516020018083805190602001908083835b60208310612ab15780518252601f199092019160209182019101612a92565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612af95780518252601f199092019160209182019101612ada565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000612bde836133e9565b90506000825160411415612bf957612bf68284613435565b90505b846001600160a01b0316816001600160a01b0316146116ed57612c24856001600160a01b0316612fd7565b15612dda5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b83811015612c93578181015183820152602001612c7b565b50505050905090810190601f168015612cc05780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015612cde57600080fd5b505afa158015612cf2573d6000803e3d6000fd5b505050506040513d6020811015612d0857600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b031990911614612dd45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d99578181015183820152602001612d81565b50505050905090810190601f168015612dc65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506116ed565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315612d99578181015183820152602001612d81565b612e5c83836134b5565b612e6960008484846127a6565b61064a5760405162461bcd60e51b81526004018080602001828103825260328152602001806145ed6032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612ed592919061457e565b60405180910390a15050565b60008282018381101561131c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000612f46826114e2565b612f815760405162461bcd60e51b815260040180806020018281038252602c81526020018061468b602c913960400191505060405180910390fd5b6000612f8c83610b5a565b9050806001600160a01b0316846001600160a01b03161480612fc75750836001600160a01b0316612fbc84610516565b6001600160a01b0316145b8061295457506129548185611310565b3b151590565b6001600160e01b0319808216141561303c576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff168061307a575061307a6121d6565b80613088575060005460ff16155b6130c35760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156130ee576000805460ff1961ff0019909116610100171660011790555b8251602080850191909120835191840191909120609791909155609855801561064a576000805461ff0019169055505050565b610a4b8161361b565b805182516060918491849110156131f55784846040516020018083805190602001908083835b6020831061316f5780518252601f199092019160209182019101613150565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106131b75780518252601f199092019160209182019101613198565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529250505061131f565b60005b82518110156133055782818151811061320d57fe5b602001015160f81c60f81b6001600160f81b03191682828151811061322e57fe5b01602001516001600160f81b031916146132fd5785856040516020018083805190602001908083835b602083106132765780518252601f199092019160209182019101613257565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106132be5780518252601f19909201916020918201910161329f565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052935050505061131f565b6001016131f8565b5092949350505050565b60608161333457506040805180820190915260018152600360fc1b602082015261047b565b8160005b811561334c57600101600a82049150613338565b6000816001600160401b038111801561336457600080fd5b506040519080825280601f01601f19166020018201604052801561338f576020820181803683370190505b50859350905060001982015b83156133e057600a840660300160f81b828280600190039350815181106133be57fe5b60200101906001600160f81b031916908160001a905350600a8404935061339b565b50949350505050565b60006133f361365b565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000815160411461348d576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6134ab8682858561369b565b9695505050505050565b6001600160a01b038216613510576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff161561356c576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b613575816114e2565b156135c7576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b6135d36000838361064a565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b03191690911790556106ed82826138f1565b60008181526101c760205260409020546002600019610100600184161502019091160415610a4b5760008181526101c760205260408120610a4b91613ae4565b60006136967f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6136896138fb565b613691613901565b613907565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156136fc5760405162461bcd60e51b81526004018080602001828103825260228152602001806146696022913960400191505060405180910390fd5b6000601e8560ff1611156137d6576004850360ff16601b148061372557506004850360ff16601c145b6137605760405162461bcd60e51b81526004018080602001828103825260228152602001806147706022913960400191505060405180910390fd5b600161376b87613969565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156137c5573d6000803e3d6000fd5b50505060206040510351905061388d565b8460ff16601b14806137eb57508460ff16601c145b6138265760405162461bcd60e51b81526004018080602001828103825260228152602001806147706022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613880573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166138e8576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6106ed82826139ba565b60975490565b60985490565b6000838383613914613a54565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b0383168114613a295760405182906001600160a01b0383169060009060008051602061488f833981519152908290a481836001600160a01b0316826001600160a01b031660008051602061488f83398151915260405160405180910390a461064a565b60405182906001600160a01b0385169060009060008051602061488f833981519152908290a4505050565b4690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613a8e5760008555613ad4565b82601f10613aa757805160ff1916838001178555613ad4565b82800160010185558215613ad4579182015b82811115613ad4578251825591602001919060010190613ab9565b50613ae0929150613b24565b5090565b50805460018160011615610100020316600290046000825580601f10613b0a5750610a4b565b601f016020900490600052602060002090810190610a4b91905b5b80821115613ae05760008155600101613b25565b803561047b816145d7565b600082601f830112613b54578081fd5b81356020613b69613b64836145ba565b614597565b8281528181019085830183850287018401881015613b85578586fd5b855b85811015613bac578135613b9a816145d7565b84529284019290840190600101613b87565b5090979650505050505050565b600082601f830112613bc9578081fd5b81356020613bd9613b64836145ba565b82815281810190858301855b85811015613bac57613bfc898684358b0101613cc9565b84529284019290840190600101613be5565b600082601f830112613c1e578081fd5b81356020613c2e613b64836145ba565b82815281810190858301604080860288018501891015613c4c578687fd5b865b86811015613cbb5781838b031215613c64578788fd5b81518281018181106001600160401b0382111715613c7e57fe5b83528335613c8b816145d7565b8152838701356001600160601b0381168114613ca557898afd5b8188015285529385019391810191600101613c4e565b509198975050505050505050565b600082601f830112613cd9578081fd5b81356001600160401b03811115613cec57fe5b613cff601f8201601f1916602001614597565b818152846020838601011115613d13578283fd5b816020850160208301379081016020019190915292915050565b600060a08284031215613d3e578081fd5b613d4860a0614597565b90508135815260208201356001600160401b0380821115613d6857600080fd5b613d7485838601613cc9565b60208401526040840135915080821115613d8d57600080fd5b613d9985838601613c0e565b60408401526060840135915080821115613db257600080fd5b613dbe85838601613c0e565b60608401526080840135915080821115613dd757600080fd5b50613de484828501613bb9565b60808301525092915050565b600060208284031215613e01578081fd5b813561131c816145d7565b60008060408385031215613e1e578081fd5b8235613e29816145d7565b91506020830135613e39816145d7565b809150509250929050565b600080600060608486031215613e58578081fd5b8335613e63816145d7565b92506020840135613e73816145d7565b929592945050506040919091013590565b60008060008060808587031215613e99578081fd5b8435613ea4816145d7565b93506020850135613eb4816145d7565b92506040850135915060608501356001600160401b03811115613ed5578182fd5b613ee187828801613cc9565b91505092959194509250565b60008060408385031215613eff578182fd5b8235613f0a816145d7565b915060208301358015158114613e39578182fd5b60008060408385031215613f30578182fd5b8235613f3b816145d7565b946020939093013593505050565b600060208284031215613f5a578081fd5b81356001600160401b03811115613f6f578182fd5b61295484828501613b44565b600060208284031215613f8c578081fd5b81356001600160e01b03198116811461131c578182fd5b600060208284031215613fb4578081fd5b81356001600160401b03811115613fc9578182fd5b61295484828501613cc9565b60008060008060008060c08789031215613fed578384fd5b86356001600160401b0380821115614003578586fd5b61400f8a838b01613cc9565b97506020890135915080821115614024578586fd5b6140308a838b01613cc9565b96506040890135915080821115614045578586fd5b6140518a838b01613cc9565b95506060890135915080821115614066578384fd5b5061407389828a01613cc9565b93505061408260808801613b39565b915061409060a08801613b39565b90509295509295509295565b600080600080600080600060e0888a0312156140b6578485fd5b87356001600160401b03808211156140cc578687fd5b6140d88b838c01613cc9565b985060208a01359150808211156140ed578687fd5b6140f98b838c01613cc9565b975060408a013591508082111561410e578687fd5b61411a8b838c01613cc9565b965060608a013591508082111561412f578283fd5b61413b8b838c01613cc9565b955060808a0135915080821115614150578283fd5b5061415d8a828b01613b44565b93505061416c60a08901613b39565b915061417a60c08901613b39565b905092959891949750929550565b6000806040838503121561419a578182fd5b82356001600160401b038111156141af578283fd5b6141bb85828601613d2d565b9250506020830135613e39816145d7565b6000806000606084860312156141e0578081fd5b83356001600160401b038111156141f5578182fd5b61420186828701613d2d565b9350506020840135614212816145d7565b91506040840135614222816145d7565b809150509250925092565b60006020828403121561423e578081fd5b5035919050565b600080600060608486031215614259578081fd5b833592506020840135614212816145d7565b6000806040838503121561427d578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156142d857815180516001600160a01b031688528301516001600160601b0316838801526040909601959082019060010161429f565b509495945050505050565b60008151808452815b81811015614308576020818501810151868301820152016142ec565b818111156143195782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614366908301856142e3565b82810360408401526134ab81856142e3565b6001600160a01b03929092168252602082015260400190565b60006020825261131c602083018461428c565b901515815260200190565b60006020825261131c60208301846142e3565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b600083825260406020830152612954604083018461428c565b6040518181016001600160401b03811182821017156145b257fe5b604052919050565b60006001600160401b038211156145cd57fe5b5060209081020190565b6001600160a01b0381168114610a4b57600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220872bc930150cac441fe8e7a9d3bc2a73c62da627ee61bc24187073649c45a4a564736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "addMinter(address)": { + "details": "Add `minter` to the list of allowed minters." + }, + "addMinters(address[])": { + "details": "Add `minters` to the list of allowed minters." + }, + "approve(address,uint256)": { + "details": "See {IERC721-approve}." + }, + "balanceOf(address)": { + "details": "See {IERC721-balanceOf}." + }, + "baseURI()": { + "details": "Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID." + }, + "burn(uint256)": { + "details": "Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator." + }, + "getApproved(uint256)": { + "details": "See {IERC721-getApproved}." + }, + "isMinter(address)": { + "details": "Returns `true` if `account` has been granted to minters." + }, + "name()": { + "details": "See {IERC721Metadata-name}." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "ownerOf(uint256)": { + "details": "See {IERC721-ownerOf}." + }, + "removeMinter(address)": { + "details": "Revoke `_minter` from the list of allowed minters." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "safeTransferFrom(address,address,uint256)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,bytes)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC721-setApprovalForAll}." + }, + "symbol()": { + "details": "See {IERC721Metadata-symbol}." + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC721-transferFrom}." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 307, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 364, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 138, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "151", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "152", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "153", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 25681, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "203", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26857, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_name", + "offset": 0, + "slot": "253", + "type": "t_string_storage" + }, + { + "astId": 26859, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_symbol", + "offset": 0, + "slot": "254", + "type": "t_string_storage" + }, + { + "astId": 26863, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_owners", + "offset": 0, + "slot": "255", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 26867, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_balances", + "offset": 0, + "slot": "256", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 26871, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_tokenApprovals", + "offset": 0, + "slot": "257", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 26877, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_operatorApprovals", + "offset": 0, + "slot": "258", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 26887, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_burnedTokens", + "offset": 0, + "slot": "259", + "type": "t_mapping(t_uint256,t_bool)" + }, + { + "astId": 27666, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "260", + "type": "t_array(t_uint256)43_storage" + }, + { + "astId": 25924, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "defaultApprovals", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 25995, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 25914, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "354", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 21816, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "404", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 20832, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "royalties", + "offset": 0, + "slot": "454", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)18638_storage)dyn_storage)" + }, + { + "astId": 26691, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_tokenURIs", + "offset": 0, + "slot": "455", + "type": "t_mapping(t_uint256,t_string_storage)" + }, + { + "astId": 26693, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_baseURI", + "offset": 0, + "slot": "456", + "type": "t_string_storage" + }, + { + "astId": 26828, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "457", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26038, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "creators", + "offset": 0, + "slot": "507", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)18638_storage)dyn_storage)" + }, + { + "astId": 26463, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "508", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 21657, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "contractURI", + "offset": 0, + "slot": "558", + "type": "t_string_storage" + }, + { + "astId": 21691, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "559", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 25828, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "608", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 21697, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "isPrivate", + "offset": 0, + "slot": "658", + "type": "t_bool" + }, + { + "astId": 21701, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "659", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 21826, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "_minters", + "offset": 0, + "slot": "708", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 21947, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "__gap", + "offset": 0, + "slot": "709", + "type": "t_array(t_uint256)50_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)18638_storage)dyn_storage": { + "base": "t_struct(Part)18638_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)43_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[43]", + "numberOfBytes": "1376" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_address)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_uint256,t_array(t_struct(Part)18638_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct LibPart.Part[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(Part)18638_storage)dyn_storage" + }, + "t_mapping(t_uint256,t_bool)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_string_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => string)", + "numberOfBytes": "32", + "value": "t_string_storage" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Part)18638_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 18635, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 18637, + "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/ExchangeV2.json b/projects/hardhat-deploy/deployments/oasys/ExchangeV2.json new file mode 100644 index 000000000..c99199fed --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/ExchangeV2.json @@ -0,0 +1,199 @@ +{ + "address": "0xfD79EF502b5b97E86804A9359fE5Ba48AB3658c5", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "numDeployments": 14, + "solcInputHash": "97f4234afe2a6aef4388d964e224ac4a", + "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-sol08/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-sol08/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(\\n Address.isContract(IBeacon(newBeacon).implementation()),\\n \\\"ERC1967: beacon implementation is not a contract\\\"\\n );\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overridden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405260405162000e3338038062000e33833981016040819052620000269162000414565b828162000036828260006200004d565b50620000449050826200007f565b50505062000547565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000dec833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e0c6027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000dec8339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b60606001600160a01b0384163b620003015760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001c4565b600080856001600160a01b0316856040516200031e9190620004f4565b600060405180830381855af49150503d80600081146200035b576040519150601f19603f3d011682016040523d82523d6000602084013e62000360565b606091505b509092509050620003738282866200037d565b9695505050505050565b606083156200038e5750816200015b565b8251156200039f5782518084602001fd5b8160405162461bcd60e51b8152600401620001c4919062000512565b80516001600160a01b0381168114620003d357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200040b578181015183820152602001620003f1565b50506000910152565b6000806000606084860312156200042a57600080fd5b6200043584620003bb565b92506200044560208501620003bb565b60408501519092506001600160401b03808211156200046357600080fd5b818601915086601f8301126200047857600080fd5b8151818111156200048d576200048d620003d8565b604051601f8201601f19908116603f01168101908382118183101715620004b857620004b8620003d8565b81604052828152896020848701011115620004d257600080fd5b620004e5836020830160208801620003ee565b80955050505050509250925092565b6000825162000508818460208701620003ee565b9190910192915050565b602081526000825180602084015262000533816040850160208701620003ee565b601f01601f19169190910160400192915050565b61089580620005576000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610727565b610128565b61006b6100a3366004610742565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610727565b6101fd565b34801561010557600080fd5b506100bd61021d565b61011661023e565b6101266101216102ee565b6102f8565b565b61013061031c565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061034f565b50565b61015a61010e565b61016d61031c565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061034f915050565b505050565b6101bf61010e565b60006101d661031c565b6001600160a01b031633036101f2576101ed6102ee565b905090565b6101fa61010e565b90565b61020561031c565b6001600160a01b0316330361015d5761015a8161037a565b600061022761031c565b6001600160a01b031633036101f2576101ed61031c565b61024661031c565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6103ce565b3660008037600080366000845af43d6000803e808015610317573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610358836103f6565b6000825111806103655750805b156101bf576103748383610436565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103a361031c565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610462565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610340565b6103ff8161053a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061045b8383604051806060016040528060278152602001610839602791396105de565b9392505050565b6001600160a01b0381166104de5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102e5565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6001600160a01b0381163b6105b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016102e5565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610501565b60606001600160a01b0384163b61065d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016102e5565b600080856001600160a01b03168560405161067891906107e9565b600060405180830381855af49150503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b50915091506106c88282866106d2565b9695505050505050565b606083156106e157508161045b565b8251156106f15782518084602001fd5b8160405162461bcd60e51b81526004016102e59190610805565b80356001600160a01b038116811461072257600080fd5b919050565b60006020828403121561073957600080fd5b61045b8261070b565b60008060006040848603121561075757600080fd5b6107608461070b565b9250602084013567ffffffffffffffff8082111561077d57600080fd5b818601915086601f83011261079157600080fd5b8135818111156107a057600080fd5b8760208285010111156107b257600080fd5b6020830194508093505050509250925092565b60005b838110156107e05781810151838201526020016107c8565b50506000910152565b600082516107fb8184602087016107c5565b9190910192915050565b60208152600082518060208401526108248160408501602087016107c5565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c237d612a72e85a9456b87073b6e556b1bd4fb18a233025ebd3fcd47377bbfa364736f6c63430008130033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610727565b610128565b61006b6100a3366004610742565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610727565b6101fd565b34801561010557600080fd5b506100bd61021d565b61011661023e565b6101266101216102ee565b6102f8565b565b61013061031c565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061034f565b50565b61015a61010e565b61016d61031c565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061034f915050565b505050565b6101bf61010e565b60006101d661031c565b6001600160a01b031633036101f2576101ed6102ee565b905090565b6101fa61010e565b90565b61020561031c565b6001600160a01b0316330361015d5761015a8161037a565b600061022761031c565b6001600160a01b031633036101f2576101ed61031c565b61024661031c565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6103ce565b3660008037600080366000845af43d6000803e808015610317573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610358836103f6565b6000825111806103655750805b156101bf576103748383610436565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103a361031c565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610462565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610340565b6103ff8161053a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061045b8383604051806060016040528060278152602001610839602791396105de565b9392505050565b6001600160a01b0381166104de5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102e5565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6001600160a01b0381163b6105b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016102e5565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610501565b60606001600160a01b0384163b61065d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016102e5565b600080856001600160a01b03168560405161067891906107e9565b600060405180830381855af49150503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b50915091506106c88282866106d2565b9695505050505050565b606083156106e157508161045b565b8251156106f15782518084602001fd5b8160405162461bcd60e51b81526004016102e59190610805565b80356001600160a01b038116811461072257600080fd5b919050565b60006020828403121561073957600080fd5b61045b8261070b565b60008060006040848603121561075757600080fd5b6107608461070b565b9250602084013567ffffffffffffffff8082111561077d57600080fd5b818601915086601f83011261079157600080fd5b8135818111156107a057600080fd5b8760208285010111156107b257600080fd5b6020830194508093505050509250925092565b60005b838110156107e05781810151838201526020016107c8565b50506000910152565b600082516107fb8184602087016107c5565b9190910192915050565b60208152600082518060208401526108248160408501602087016107c5565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c237d612a72e85a9456b87073b6e556b1bd4fb18a233025ebd3fcd47377bbfa364736f6c63430008130033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "events": { + "AdminChanged(address,address)": { + "details": "Emitted when the admin account has changed." + }, + "BeaconUpgraded(address)": { + "details": "Emitted when the beacon is upgraded." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/ExchangeV2_Implementation.json b/projects/hardhat-deploy/deployments/oasys/ExchangeV2_Implementation.json new file mode 100644 index 000000000..4948bc2b6 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/ExchangeV2_Implementation.json @@ -0,0 +1,1206 @@ +{ + "address": "0x4a37CDF38DC22Bb3e4169FB60e5865006dd4466c", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "BuyerFeeAmountChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "Cancel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldValue", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newValue", + "type": "address" + } + ], + "name": "FeeReceiverChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "leftHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "rightHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newLeftFill", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newRightFill", + "type": "uint256" + } + ], + "name": "Match", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "MatcherChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "ProxyChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "SellerFeeAmountChanged", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + } + ], + "name": "__ExchangeV2_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "order", + "type": "tuple" + } + ], + "name": "cancel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "bidMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "bidPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "bidDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "bidData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "bidSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.AcceptBid", + "name": "direct", + "type": "tuple" + } + ], + "name": "directAcceptBid", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sellOrderMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "sellOrderDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sellOrderSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "buyOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "buyOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "buyOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.Purchase", + "name": "direct", + "type": "tuple" + } + ], + "name": "directPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "fills", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderLeft", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureLeft", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderRight", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureRight", + "type": "bytes" + } + ], + "name": "matchOrders", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFee", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "sellerAmount", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "royaltiesRegistry", + "outputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setAllProtocolFeeData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "setAssetMatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeBuyerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + } + ], + "name": "setPrtocolFeeReceiver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeSellerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesRegistry", + "type": "address" + } + ], + "name": "setRoyaltiesRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "setTransferProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "numDeployments": 16, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"BuyerFeeAmountChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"Cancel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"}],\"name\":\"FeeReceiverChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leftHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"rightHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLeftFill\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRightFill\",\"type\":\"uint256\"}],\"name\":\"Match\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"MatcherChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"SellerFeeAmountChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_erc20TransferProxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newDefaultFeeReceiver\",\"type\":\"address\"},{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesProvider\",\"type\":\"address\"}],\"name\":\"__ExchangeV2_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"bidMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"bidPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"bidDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"bidData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bidSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.AcceptBid\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directAcceptBid\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sellOrderMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"sellOrderDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"buyOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.Purchase\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"fills\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderLeft\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureLeft\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderRight\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureRight\",\"type\":\"bytes\"}],\"name\":\"matchOrders\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"sellerAmount\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"royaltiesRegistry\",\"outputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setAllProtocolFeeData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"setAssetMatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeBuyerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"setPrtocolFeeReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeSellerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesRegistry\",\"type\":\"address\"}],\"name\":\"setRoyaltiesRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"setTransferProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\",\"params\":{\"direct\":\"struct with parameters for accept bid operation\"}},\"directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":\"ExchangeV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3a89b0a6ff66280e8e48f9f2c862d5c0e8ab23ee306ae5b204cd588931661a93\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n}\\n\",\"keccak256\":\"0xa9d02b9e22ffb9d25f412979951822d56b05d857de1f47ce82ad7b4a8d4601f6\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x5e982ad688493d9c729757c2ebd98efecd0bf3b33992f7342edf6c349874b86c\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506152e1806100206000396000f3fe6080604052600436106101095760003560e01c8063b0e21e8a11610095578063d6ca6ab711610064578063d6ca6ab71461029c578063e2864fe3146102bc578063e99a3f80146102dc578063eae3ad6f146102ef578063f2fde38b1461030f57610109565b8063b0e21e8a14610218578063b39deb461461023c578063b74c8e9a1461025c578063bc158c2d1461027c57610109565b80633be89922116100dc5780633be899221461019957806367d49a3b146101b95780636d8f0694146101cc578063715018a6146101ee5780638da5cb5b1461020357610109565b80630d5f7d351461010e5780631372a6251461012357806320158c441461014357806330c642f114610179575b600080fd5b61012161011c366004614876565b61032f565b005b34801561012f57600080fd5b5061012161013e366004614713565b61064c565b34801561014f57600080fd5b5061016361015e36600461480a565b610720565b6040516101709190614c73565b60405180910390f35b34801561018557600080fd5b5061012161019436600461483e565b610733565b3480156101a557600080fd5b506101216101b43660046144be565b610803565b6101216101c7366004614876565b610888565b3480156101d857600080fd5b506101e1610b68565b6040516101709190614ba7565b3480156101fa57600080fd5b50610121610b78565b34801561020f57600080fd5b506101e1610c24565b34801561022457600080fd5b5061022d610c33565b60405161017093929190614c4a565b34801561024857600080fd5b5061012161025736600461483e565b610c5e565b34801561026857600080fd5b5061012161027736600461477a565b610d22565b34801561028857600080fd5b506101216102973660046144be565b610da4565b3480156102a857600080fd5b506101216102b7366004614b44565b610e71565b3480156102c857600080fd5b506101216102d7366004614a6b565b610f4b565b6101216102ea366004614a9d565b61100c565b3480156102fb57600080fd5b5061012161030a366004614b44565b611022565b34801561031b57600080fd5b5061012161032a3660046144be565b6110f9565b600061034961034460c0840160a085016144be565b6111fc565b6040805161012081019091529091506000908061036960208601866144be565b6001600160a01b03168152602001604051806040016040528060405180604001604052808860400160208101906103a09190614822565b6001600160e01b03191681526020016103bc60608a018a615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a08301520161045f61014086016101208701614822565b6001600160e01b031916815260200161047c610140860186615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815180830183528781526101808901356020828101919091528201528082018390528151608081018352949550919391925060608084019291829182820191829161051091908c01908c01614822565b6001600160e01b031916815260200161052c60608b018b615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a0890135602092830152918352820181905260408201819052606082015260800161059b61014087016101208801614822565b6001600160e01b03191681526020016105b86101c0870187615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250905061063c82610602610160870187615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061126292505050565b6106468282611279565b50505050565b600054610100900460ff168061066557506106656114cb565b80610673575060005460ff16155b6106ae5760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff161580156106d9576000805460ff1961ff0019909116610100171660011790555b6106e16114dc565b6106e961157e565b6106f38686611677565b6106fe848484611721565b6107066117e1565b8015610718576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b61073b6118b1565b6001600160a01b031661074c610c24565b6001600160a01b031614610795576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593906107f7908490614ba7565b60405180910390a25050565b61080b6118b1565b6001600160a01b031661081c610c24565b6001600160a01b031614610865576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b600061089d61034460c0840160a085016144be565b604080516101208101909152909150600090806108bd60208601866144be565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b03168152602001604051806040016040528060405180604001604052808860400160208101906109229190614822565b6001600160e01b031916815260200161093e60608a018a615089565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e0850135604082015261010085013560608201526080016109b961014086016101208701614822565b6001600160e01b03191681526020016109d6610140860186615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815160808101835294955091939192506020830191908190818101908190610a489060608c01908c01614822565b6001600160e01b0319168152602001610a6460608b018b615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c001610af761014087016101208801614822565b6001600160e01b0319168152602001610b146101c0870187615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610b5e82610602610160870187615089565b6106468183611279565b610162546001600160a01b031681565b610b806118b1565b6001600160a01b0316610b91610c24565b6001600160a01b031614610bda576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b610c666118b1565b6001600160a01b0316610c77610c24565b6001600160a01b031614610cc0576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f906107f7908490614ba7565b610d2a6118b1565b6001600160a01b0316610d3b610c24565b6001600160a01b031614610d84576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610d8d83610da4565b610d9682610e71565b610d9f81611022565b505050565b610dac6118b1565b6001600160a01b0316610dbd610c24565b6001600160a01b031614610e06576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd0391610e46916001600160a01b03909116908490614bbb565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b610e796118b1565b6001600160a01b0316610e8a610c24565b6001600160a01b031614610ed3576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e91610f1891600160a01b90910465ffffffffffff16908490615070565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316610f5e6118b1565b6001600160a01b031614610f8d5760405162461bcd60e51b8152600401610f8490614fe0565b60405180910390fd5b6080810151610fae5760405162461bcd60e51b8152600401610f8490614d72565b6000610fb9826118b5565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a90611000908390614c73565b60405180910390a15050565b61101884848484611a3d565b6106468483611279565b61102a6118b1565b6001600160a01b031661103b610c24565b6001600160a01b031614611084576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916110c991600160d01b90910465ffffffffffff16908490615070565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b6111016118b1565b6001600160a01b0316611112610c24565b6001600160a01b03161461115b576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6001600160a01b0381166111a05760405162461bcd60e51b81526004018080602001828103825260268152602001806151866026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b6112046140b3565b61120c6140b3565b6001600160a01b038316611229576355575f5d60e11b815261125a565b6322ba176160e21b8152604051611244908490602001614ba7565b60408051601f1981840301815291905260208201525b90505b919050565b61126b82611b09565b6112758282611bd3565b5050565b6000806112868484611e82565b9150915060008060006112998787611f1b565b9250925092506000806113f26040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506113ed8a600001518a60000151611fca565b61209c565b885191935091506001600160e01b0319166355575f5d60e11b14156114715785516001600160e01b0319166355575f5d60e11b141561143057600080fd5b813410156114505760405162461bcd60e51b8152600401610f8490614fb8565b8134111561146c5761146c6114653484612213565b3390612270565b6114c0565b85516001600160e01b0319166355575f5d60e11b14156114c057803410156114ab5760405162461bcd60e51b8152600401610f8490614fb8565b803411156114c0576114c06114653483612213565b505050505050505050565b60006114d630612308565b15905090565b600054610100900460ff16806114f557506114f56114cb565b80611503575060005460ff16155b61153e5760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff16158015611569576000805460ff1961ff0019909116610100171660011790555b801561157b576000805461ff00191690555b50565b600054610100900460ff168061159757506115976114cb565b806115a5575060005460ff16155b6115e05760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff1615801561160b576000805460ff1961ff0019909116610100171660011790555b60006116156118b1565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561157b576000805461ff001916905550565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff168061173a575061173a6114cb565b80611748575060005460ff16155b6117835760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff161580156117ae576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610646576000805461ff001916905550505050565b600054610100900460ff16806117fa57506117fa6114cb565b80611808575060005460ff16155b6118435760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff1615801561186e576000805460ff1961ff0019909116610100171660011790555b6115696040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b81525061230e565b3390565b60e08101516000906001600160e01b031916632611a13360e11b14806118e9575060e08201516001600160e01b0319908116145b1561195e5781516020830151516118ff906123ce565b60608401515161190e906123ce565b846080015160405160200180856001600160a01b0316815260200184815260200183815260200182815260200194505050505060405160208183030381529060405280519060200120905061125d565b815160208301515161196f906123ce565b60608401515161197e906123ce565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156119ea5781810151838201526020016119d2565b50505050905090810190601f168015611a175780820380516001836020036101000a031916815260200191505b50965050505050505060405160208183030381529060405280519060200120905061125d565b611a478484611262565b611a518282611262565b60408401516001600160a01b031615611aad5781516001600160a01b031615611aad5783604001516001600160a01b031682600001516001600160a01b031614611aad5760405162461bcd60e51b8152600401610f8490614f75565b60408201516001600160a01b0316156106465783516001600160a01b0316156106465783600001516001600160a01b031682604001516001600160a01b0316146106465760405162461bcd60e51b8152600401610f8490614de4565b60a08101511580611b1d5750428160a00151105b611b6e576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c08101511580611b825750428160c00151115b61157b576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b6080820151611c585781516001600160a01b031615611c535781516001600160a01b0316611bff6118b1565b6001600160a01b031614611c53576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b611275565b81516001600160a01b0316611c6b6118b1565b6001600160a01b031614611275576000611c8483612438565b9050611c9c83600001516001600160a01b0316612308565b15611dd8578251630b135d3f60e11b906001600160a01b0316631626ba7e611cc384612528565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611d16578181015183820152602001611cfe565b50505050905090810190601f168015611d435780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611d6157600080fd5b505afa158015611d75573d6000803e3d6000fd5b505050506040513d6020811015611d8b57600080fd5b50516001600160e01b03191614611dd35760405162461bcd60e51b815260040180806020018281038252602b8152602001806151f0602b913960400191505060405180910390fd5b610d9f565b82516001600160a01b0316611df683611df084612528565b90612574565b6001600160a01b031614611e3b5760405162461bcd60e51b81526004018080602001828103825260228152602001806151ce6022913960400191505060405180910390fd5b82516001600160a01b0316610d9f576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b611e8a6140b3565b611e926140b3565b602084015151606084015151611ea891906125f4565b80519092506001600160e01b031916611ed35760405162461bcd60e51b8152600401610f8490614f49565b606084015151602084015151611ee991906125f4565b80519091506001600160e01b031916611f145760405162461bcd60e51b8152600401610f8490614f49565b9250929050565b611f236140cb565b611f2b6140cb565b611f336140ee565b6000611f3e866118b5565b90506000611f4b866118b5565b90506000611f576118b1565b88519091506001600160a01b0316611f76576001600160a01b03811688525b86516001600160a01b0316611f92576001600160a01b03811687525b611f9b88612634565b9550611fa687612634565b9450611fbe888885858a604001518a6040015161272d565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b1415611fed57506001612096565b6001600160e01b031982166355575f5d60e11b141561200e57506002612096565b6001600160e01b031983166322ba176160e21b141561202f57506001612096565b6001600160e01b031982166322ba176160e21b141561205057506002612096565b6001600160e01b0319831663025ceed960e61b141561207157506001612096565b6001600160e01b0319821663025ceed960e61b141561209257506002612096565b5060005b92915050565b825160209081015183519091015160018360028111156120b857fe5b141561213a5760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b909104169181019190915261210a90869086906128e8565b9150612135846000015160000151856000015160200151866080015188602001518860600151612b62565b61220b565b600283600281111561214857fe5b14156121c55760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b909104169181019190915261219a90859087906128e8565b9050612135856000015160000151866000015160200151876080015187602001518960600151612b62565b8451805160209182015160808801519287015160608901516121e8949190612b62565b83518051602091820151608087015192880151606088015161220b949190612b62565b935093915050565b60008282111561226a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146122bb576040519150601f19603f3d011682016040523d82523d6000602084013e6122c0565b606091505b5050905080610d9f576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff168061232757506123276114cb565b80612335575060005460ff16155b6123705760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff1615801561239b576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca558015610d9f576000805461ff0019169055505050565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d826000015161246d8460200151612ce6565b846040015161247f8660600151612ce6565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b6000612532612d56565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b600081516041146125cc576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6125ea86828585612d96565b9695505050505050565b6125fc6140b3565b60006126088484612fec565b80519091506001600160e01b03191661262d576126258385612fec565b915050612096565b9050612096565b61263c6140cb565b60e08201516001600160e01b031916632611a13360e11b14156126885760008261010001518060200190518101906126749190614933565b805183526020908101519083015250612714565b60e08201516001600160e01b0319166323d235ef60e01b14156126e05760008261010001518060200190518101906126c091906149bf565b805183526020808201519084015260409081015115159083015250612714565b60e08201516001600160e01b031990811614156126fc57612714565b60405162461bcd60e51b8152600401610f8490614edb565b80515161125d57815161272690613208565b8152919050565b6127356140ee565b60006127458860800151876132a3565b905060006127578860800151876132a3565b905060006127698a8a85858a8a6132c8565b9050896020015160200151600014158061278a575060608901516020015115155b156127ad5780516127ad5760405162461bcd60e51b8152600401610f8490614e54565b60608a0151602001511515806127c957506020808a0151015115155b156127f25760008160200151116127f25760405162461bcd60e51b8152600401610f8490614e54565b60808a01511561284557851561282457805161280f908490613361565b600089815261012f6020526040902055612845565b6020810151612834908490613361565b600089815261012f60205260409020555b60808901511561289857841561287a576020810151612865908390613361565b600088815261012f6020526040902055612898565b8051612887908390613361565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c450926128d3928c928c929190614c7c565b60405180910390a19998505050505050505050565b60006129018460000151602001518386604001516133c2565b9050600061292b828660000151602001518760800151868960000151600001518a60600151613464565b8551805186515160208089015193015160808a015160608b01519596506129599593949293879291906134c1565b9050846040015151600114801561297557508360400151516001145b80156129ca5750846040015160008151811061298d57fe5b6020026020010151600001516001600160a01b031684604001516000815181106129b357fe5b6020026020010151600001516001600160a01b0316145b15612ae057604080516001808252818301909252600091816020015b6129ee614108565b8152602001906001900390816129e65790505090508460400151600081518110612a1457fe5b60200260200101516000015181600081518110612a2d57fe5b60209081029190910101516001600160a01b03909116905260408601518051600090612a5557fe5b6020026020010151602001518560400151600081518110612a7257fe5b6020026020010151602001510181600081518110612a8c57fe5b6020026020010151602001906001600160601b031690816001600160601b031681525050612ad686600001516000015183886000015160200151848a608001518b606001516135c6565b509150612b399050565b612b0a85600001516000015182876000015160200151886040015189608001518a606001516135c6565b50855180516020909101516040870151608089015160608a0151949550612b359486939291906135c6565b5090505b612b5a85600001516000015182876080015187602001518960600151612b62565b509392505050565b6000825111612b835760405162461bcd60e51b8152600401610f8490614da0565b600084815b6001855103811015612c52576000612bc9868381518110612ba557fe5b6020026020010151602001516001600160601b03168961367b90919063ffffffff16565b9050612bfe868381518110612bda57fe5b6020026020010151602001516001600160601b03168561336190919063ffffffff16565b93508015612c4957612c108382612213565b9250612c4960405180604001604052808b81526020018381525088888581518110612c3757fe5b60200260200101516000015188613693565b50600101612b88565b50600084600186510381518110612c6557fe5b60200260200101519050612c8f81602001516001600160601b03168461336190919063ffffffff16565b92508261271014612cb25760405162461bcd60e51b8152600401610f8490614f12565b8115612cdc57612cdc60405180604001604052808a81526020018481525087836000015187613693565b5050505050505050565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b08612d1683600001516123ce565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b6000612d917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612d84613a9b565b612d8c613aa1565b613aa7565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612df75760405162461bcd60e51b81526004018080602001828103825260228152602001806151ac6022913960400191505060405180910390fd5b6000601e8560ff161115612ed1576004850360ff16601b1480612e2057506004850360ff16601c145b612e5b5760405162461bcd60e51b81526004018080602001828103825260228152602001806152496022913960400191505060405180910390fd5b6001612e6687613b09565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612ec0573d6000803e3d6000fd5b505050602060405103519050612f88565b8460ff16601b1480612ee657508460ff16601c145b612f215760405162461bcd60e51b81526004018080602001828103825260228152602001806152496022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612f7b573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116612fe3576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b612ff46140b3565b825182516001600160e01b031982166355575f5d60e11b141561305f576001600160e01b031981166355575f5d60e11b1415613034578492505050612096565b5050604080518082018252600080825282516020818101909452908152918101919091529050612096565b6001600160e01b031982166322ba176160e21b14156130a4576001600160e01b031981166322ba176160e21b14156130345761309b8585613b5a565b92505050612096565b6001600160e01b031982166339d690a360e11b14156130e0576001600160e01b031981166339d690a360e11b14156130345761309b8585613b5a565b6001600160e01b0319821663025ceed960e61b141561311c576001600160e01b0319811663025ceed960e61b14156130345761309b8585613b5a565b6001600160e01b031982166000908152606560205260409020546001600160a01b031680156131d1576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb0906131739089908990600401615005565b60006040518083038186803b15801561318b57600080fd5b505afa15801561319f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131c791908101906148a8565b9350505050612096565b6001600160e01b031983811690831614156131f0576131c78686613b5a565b60405162461bcd60e51b8152600401610f8490614d04565b60408051600180825281830190925260609160009190816020015b61322b614108565b815260200190600190039081613223579050509050828160008151811061324e57fe5b6020026020010151600001906001600160a01b031690816001600160a01b0316815250506127108160008151811061328257fe5b6020908102919091018101516001600160601b039092169101529050919050565b6000826132b257506000612096565b50600090815261012f6020526040902054919050565b6132d06140ee565b6000806132de898887613bb7565b915091506000806132f08a8988613bb7565b915091508381118061330a5750838114801561330a575083155b156133365761332b84848c60200151602001518d6060015160200151613c30565b9450505050506125ea565b6133528b60200151602001518c60600151602001518484613cb5565b9b9a5050505050505050505050565b6000828201838110156133bb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b602082015160009065ffffffffffff16815b835181101561344f576127108482815181106133ec57fe5b6020026020010151602001516001600160601b0316111561341f5760405162461bcd60e51b8152600401610f8490614eac565b83818151811061342b57fe5b6020026020010151602001516001600160601b0316820191508060010190506133d4565b50612fe361345d868361367b565b8690613361565b60008060006134868989886040015189602001510165ffffffffffff16613d3b565b909250905080156134b5576134b560405180604001604052808781526020018381525088886000015187613693565b50979650505050505050565b6000806134cd88613d5d565b9050805160011480156134e1575086516001145b801561352e5750866000815181106134f557fe5b6020026020010151600001516001600160a01b03168160008151811061351757fe5b6020026020010151600001516001600160a01b0316145b1561357f576113888160008151811061354357fe5b6020026020010151602001516001600160601b031611156135765760405162461bcd60e51b8152600401610f8490614d3b565b859150506135bb565b6000806135908b8989868a8a6135c6565b915091506113888111156135b65760405162461bcd60e51b8152600401610f8490614d3b565b509150505b979650505050505050565b846000805b855181101561366f576136078682815181106135e357fe5b6020026020010151602001516001600160601b03168361336190919063ffffffff16565b91506000613636848989858151811061361c57fe5b6020026020010151602001516001600160601b0316613d3b565b909450905080156136665761366660405180604001604052808c81526020018381525087898581518110612c3757fe5b506001016135cb565b50965096945050505050565b60006133bb61271061368d8585613ed2565b90613f2b565b8351516001600160e01b0319166339d690a360e11b14156137d9576000808560000151602001518060200190518101906136cd91906146e6565b9150915085602001516001146136f55760405162461bcd60e51b8152600401610f8490614e28565b6001600160a01b03851630141561376d57604051632142170760e11b81526001600160a01b038316906342842e0e9061373690309088908690600401614bd5565b600060405180830381600087803b15801561375057600080fd5b505af1158015613764573d6000803e3d6000fd5b505050506137d2565b604051637b84dc8360e11b81526001600160a01b0384169063f709b9069061379f908590899089908790600401614cda565b600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050505b5050610646565b8351516001600160e01b0319166322ba176160e21b141561393757600084600001516020015180602001905181019061381291906144da565b90506001600160a01b0384163014156138c957602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb91613856918791600401614c31565b602060405180830381600087803b15801561387057600080fd5b505af1158015613884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a891906147f0565b6138c45760405162461bcd60e51b8152600401610f8490614e7d565b613931565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c3916138fe91859189918991600401614cda565b600060405180830381600087803b15801561391857600080fd5b505af115801561392c573d6000803e3d6000fd5b505050505b50610646565b8351516001600160e01b03191663025ceed960e61b14156139f45760008085600001516020015180602001905181019061397191906146e6565b90925090506001600160a01b0385163014156139bc576020860151604051637921219560e11b81526001600160a01b0384169163f242432a9161373691309189918791600401614bf9565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee99161379f9186918a918a91889190600401614c97565b8351516001600160e01b0319166355575f5d60e11b1415613a3d576001600160a01b0382163014613a38576020840151613a38906001600160a01b03841690612270565b610646565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf190613a6d9087908790879060040161502a565b600060405180830381600087803b158015613a8757600080fd5b505af1158015612cdc573d6000803e3d6000fd5b60c95490565b60ca5490565b6000838383613ab4613f92565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b613b626140b3565b60208084015180519082012083820151805192019190912080821415613b8c578492505050612096565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b6000808215613bf6576020808601510151613bd29085612213565b9150613bef85606001516020015186602001516020015184613f96565b905061220b565b606085015160200151613c099085612213565b9050613c2685602001516020015186606001516020015183613f96565b9150935093915050565b613c386140ee565b6000613c45858585613f96565b905085811115613c9c576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b613cbd6140ee565b6000613cca838787613f96565b905083811115613d21576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b600080613d5185613d4c868661367b565b613ffc565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480613d91575081516001600160e01b0319166339d690a360e11b145b15613e47576000808360200151806020019051810190613db191906146e6565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a90613de89085908590600401614c31565b600060405180830381600087803b158015613e0257600080fd5b505af1158015613e16573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e3e91908101906147be565b9250505061125d565b81516001600160e01b03191662737ea960e61b1415613e885760008260200151806020019051810190613e7a91906144f6565b60800151925061125d915050565b81516001600160e01b03191663d8f960c160e01b1415613eca5760008260200151806020019051810190613ebc91906145f3565b60600151925061125d915050565b506060919050565b600082613ee157506000612096565b82820282848281613eee57fe5b04146133bb5760405162461bcd60e51b815260040180806020018281038252602181526020018061526b6021913960400191505060405180910390fd5b6000808211613f81576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381613f8a57fe5b049392505050565b4690565b6000613fa3848484614024565b15613fe6576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b613ff48361368d8685613ed2565b949350505050565b6000808284111561401b576140118484612213565b9150829050611f14565b50600093915050565b60008261406b576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b811580614076575083155b15614083575060006133bb565b6000838061408d57fe5b858409905061409c8584613ed2565b6140a8826103e8613ed2565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b803561125d8161515a565b600082601f83011261413a578081fd5b8151602061414f61414a836150f0565b6150cd565b82815281810190858301855b8581101561418457614172898684518b01016142b3565b8452928401929084019060010161415b565b5090979650505050505050565b600082601f8301126141a1578081fd5b815160206141b161414a836150f0565b828152818101908583016040808602880185018910156141cf578687fd5b865b8681101561423e5781838b0312156141e7578788fd5b81518281018181106001600160401b038211171561420157fe5b8352835161420e8161515a565b8152838701516001600160601b038116811461422857898afd5b81880152855293850193918101916001016141d1565b509198975050505050505050565b8051801515811461125d57600080fd5b803561125d8161516f565b600082601f830112614277578081fd5b813561428561414a8261510d565b818152846020838601011115614299578283fd5b816020850160208301379081016020019190915292915050565b600082601f8301126142c3578081fd5b81516142d161414a8261510d565b8181528460208386010111156142e5578283fd5b613ff482602083016020870161512e565b60006101e08284031215614308578081fd5b50919050565b60006040808385031215614320578182fd5b80518181016001600160401b03828210818311171561433b57fe5b81845282945085358181111561435057600080fd5b860180880385131561436157600080fd5b60808401838110838211171561437357fe5b9094528335936143828561516f565b9382526020840135938185111561439857600080fd5b6143a488868301614267565b60608501525050815260209384013593019290925292915050565b60006101208083850312156143d2578182fd5b6143db816150cd565b9150506143e78261411f565b815260208201356001600160401b038082111561440357600080fd5b61440f8583860161430e565b60208401526144206040850161411f565b6040840152606084013591508082111561443957600080fd5b6144458583860161430e565b60608401526080840135608084015260a084013560a084015260c084013560c084015261447460e0850161425c565b60e08401526101009150818401358181111561448f57600080fd5b61449b86828701614267565b8385015250505092915050565b803565ffffffffffff8116811461125d57600080fd5b6000602082840312156144cf578081fd5b81356133bb8161515a565b6000602082840312156144eb578081fd5b81516133bb8161515a565b60008060408385031215614508578081fd5b82516145138161515a565b60208401519092506001600160401b038082111561452f578283fd5b9084019060c08287031215614542578283fd5b61454c60c06150cd565b82518152602083015182811115614561578485fd5b61456d888286016142b3565b6020830152506040830151604082015260608301518281111561458e578485fd5b61459a88828601614191565b6060830152506080830151828111156145b1578485fd5b6145bd88828601614191565b60808301525060a0830151828111156145d4578485fd5b6145e08882860161412a565b60a0830152508093505050509250929050565b60008060408385031215614605578182fd5b82516146108161515a565b60208401519092506001600160401b038082111561462c578283fd5b9084019060a0828703121561463f578283fd5b61464960a06150cd565b8251815260208301518281111561465e578485fd5b61466a888286016142b3565b602083015250604083015182811115614681578485fd5b61468d88828601614191565b6040830152506060830151828111156146a4578485fd5b6146b088828601614191565b6060830152506080830151828111156146c7578485fd5b6146d38882860161412a565b6080830152508093505050509250929050565b600080604083850312156146f8578182fd5b82516147038161515a565b6020939093015192949293505050565b600080600080600060a0868803121561472a578081fd5b85356147358161515a565b945060208601356147458161515a565b935060408601359250606086013561475c8161515a565b9150608086013561476c8161515a565b809150509295509295909350565b60008060006060848603121561478e578081fd5b83356147998161515a565b92506147a7602085016144a8565b91506147b5604085016144a8565b90509250925092565b6000602082840312156147cf578081fd5b81516001600160401b038111156147e4578182fd5b613ff484828501614191565b600060208284031215614801578081fd5b6133bb8261424c565b60006020828403121561481b578081fd5b5035919050565b600060208284031215614833578081fd5b81356133bb8161516f565b60008060408385031215614850578182fd5b823561485b8161516f565b9150602083013561486b8161515a565b809150509250929050565b600060208284031215614887578081fd5b81356001600160401b0381111561489c578182fd5b613ff4848285016142f6565b6000602082840312156148b9578081fd5b81516001600160401b03808211156148cf578283fd5b90830190604082860312156148e2578283fd5b6040516040810181811083821117156148f757fe5b60405282516149058161516f565b8152602083015182811115614918578485fd5b614924878286016142b3565b60208301525095945050505050565b600060208284031215614944578081fd5b81516001600160401b038082111561495a578283fd5b908301906040828603121561496d578283fd5b60405160408101818110838211171561498257fe5b604052825182811115614993578485fd5b61499f87828601614191565b8252506020830151828111156149b3578485fd5b61492487828601614191565b6000602082840312156149d0578081fd5b81516001600160401b03808211156149e6578283fd5b90830190606082860312156149f9578283fd5b604051606081018181108382111715614a0e57fe5b604052825182811115614a1f578485fd5b614a2b87828601614191565b825250602083015182811115614a3f578485fd5b614a4b87828601614191565b602083015250614a5d6040840161424c565b604082015295945050505050565b600060208284031215614a7c578081fd5b81356001600160401b03811115614a91578182fd5b613ff4848285016143bf565b60008060008060808587031215614ab2578182fd5b84356001600160401b0380821115614ac8578384fd5b614ad4888389016143bf565b95506020870135915080821115614ae9578384fd5b614af588838901614267565b94506040870135915080821115614b0a578384fd5b614b16888389016143bf565b93506060870135915080821115614b2b578283fd5b50614b3887828801614267565b91505092959194509250565b600060208284031215614b55578081fd5b6133bb826144a8565b600063ffffffff60e01b82511683526020820151604060208501528051806040860152614b9281606087016020850161512e565b601f01601f1916939093016060019392505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b6000604082526150186040830185614b5e565b8281036020840152612fe38185614b5e565b60006060825284516040606084015261504660a0840182614b5e565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e1984360301811261509f578283fd5b8301803591506001600160401b038211156150b8578283fd5b602001915036819003821315611f1457600080fd5b6040518181016001600160401b03811182821017156150e857fe5b604052919050565b60006001600160401b0382111561510357fe5b5060209081020190565b60006001600160401b0382111561512057fe5b50601f01601f191660200190565b60005b83811015615149578181015183820152602001615131565b838111156106465750506000910152565b6001600160a01b038116811461157b57600080fd5b6001600160e01b03198116811461157b57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220afb45cb0b68502f6c2ce48c7b8d3e776771b70a03d2365b57f0f0085b66e5eae64736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101095760003560e01c8063b0e21e8a11610095578063d6ca6ab711610064578063d6ca6ab71461029c578063e2864fe3146102bc578063e99a3f80146102dc578063eae3ad6f146102ef578063f2fde38b1461030f57610109565b8063b0e21e8a14610218578063b39deb461461023c578063b74c8e9a1461025c578063bc158c2d1461027c57610109565b80633be89922116100dc5780633be899221461019957806367d49a3b146101b95780636d8f0694146101cc578063715018a6146101ee5780638da5cb5b1461020357610109565b80630d5f7d351461010e5780631372a6251461012357806320158c441461014357806330c642f114610179575b600080fd5b61012161011c366004614876565b61032f565b005b34801561012f57600080fd5b5061012161013e366004614713565b61064c565b34801561014f57600080fd5b5061016361015e36600461480a565b610720565b6040516101709190614c73565b60405180910390f35b34801561018557600080fd5b5061012161019436600461483e565b610733565b3480156101a557600080fd5b506101216101b43660046144be565b610803565b6101216101c7366004614876565b610888565b3480156101d857600080fd5b506101e1610b68565b6040516101709190614ba7565b3480156101fa57600080fd5b50610121610b78565b34801561020f57600080fd5b506101e1610c24565b34801561022457600080fd5b5061022d610c33565b60405161017093929190614c4a565b34801561024857600080fd5b5061012161025736600461483e565b610c5e565b34801561026857600080fd5b5061012161027736600461477a565b610d22565b34801561028857600080fd5b506101216102973660046144be565b610da4565b3480156102a857600080fd5b506101216102b7366004614b44565b610e71565b3480156102c857600080fd5b506101216102d7366004614a6b565b610f4b565b6101216102ea366004614a9d565b61100c565b3480156102fb57600080fd5b5061012161030a366004614b44565b611022565b34801561031b57600080fd5b5061012161032a3660046144be565b6110f9565b600061034961034460c0840160a085016144be565b6111fc565b6040805161012081019091529091506000908061036960208601866144be565b6001600160a01b03168152602001604051806040016040528060405180604001604052808860400160208101906103a09190614822565b6001600160e01b03191681526020016103bc60608a018a615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a08301520161045f61014086016101208701614822565b6001600160e01b031916815260200161047c610140860186615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815180830183528781526101808901356020828101919091528201528082018390528151608081018352949550919391925060608084019291829182820191829161051091908c01908c01614822565b6001600160e01b031916815260200161052c60608b018b615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a0890135602092830152918352820181905260408201819052606082015260800161059b61014087016101208801614822565b6001600160e01b03191681526020016105b86101c0870187615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250905061063c82610602610160870187615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061126292505050565b6106468282611279565b50505050565b600054610100900460ff168061066557506106656114cb565b80610673575060005460ff16155b6106ae5760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff161580156106d9576000805460ff1961ff0019909116610100171660011790555b6106e16114dc565b6106e961157e565b6106f38686611677565b6106fe848484611721565b6107066117e1565b8015610718576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b61073b6118b1565b6001600160a01b031661074c610c24565b6001600160a01b031614610795576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593906107f7908490614ba7565b60405180910390a25050565b61080b6118b1565b6001600160a01b031661081c610c24565b6001600160a01b031614610865576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b600061089d61034460c0840160a085016144be565b604080516101208101909152909150600090806108bd60208601866144be565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b03168152602001604051806040016040528060405180604001604052808860400160208101906109229190614822565b6001600160e01b031916815260200161093e60608a018a615089565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e0850135604082015261010085013560608201526080016109b961014086016101208701614822565b6001600160e01b03191681526020016109d6610140860186615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815160808101835294955091939192506020830191908190818101908190610a489060608c01908c01614822565b6001600160e01b0319168152602001610a6460608b018b615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c001610af761014087016101208801614822565b6001600160e01b0319168152602001610b146101c0870187615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610b5e82610602610160870187615089565b6106468183611279565b610162546001600160a01b031681565b610b806118b1565b6001600160a01b0316610b91610c24565b6001600160a01b031614610bda576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b610c666118b1565b6001600160a01b0316610c77610c24565b6001600160a01b031614610cc0576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f906107f7908490614ba7565b610d2a6118b1565b6001600160a01b0316610d3b610c24565b6001600160a01b031614610d84576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610d8d83610da4565b610d9682610e71565b610d9f81611022565b505050565b610dac6118b1565b6001600160a01b0316610dbd610c24565b6001600160a01b031614610e06576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd0391610e46916001600160a01b03909116908490614bbb565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b610e796118b1565b6001600160a01b0316610e8a610c24565b6001600160a01b031614610ed3576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e91610f1891600160a01b90910465ffffffffffff16908490615070565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316610f5e6118b1565b6001600160a01b031614610f8d5760405162461bcd60e51b8152600401610f8490614fe0565b60405180910390fd5b6080810151610fae5760405162461bcd60e51b8152600401610f8490614d72565b6000610fb9826118b5565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a90611000908390614c73565b60405180910390a15050565b61101884848484611a3d565b6106468483611279565b61102a6118b1565b6001600160a01b031661103b610c24565b6001600160a01b031614611084576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916110c991600160d01b90910465ffffffffffff16908490615070565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b6111016118b1565b6001600160a01b0316611112610c24565b6001600160a01b03161461115b576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6001600160a01b0381166111a05760405162461bcd60e51b81526004018080602001828103825260268152602001806151866026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b6112046140b3565b61120c6140b3565b6001600160a01b038316611229576355575f5d60e11b815261125a565b6322ba176160e21b8152604051611244908490602001614ba7565b60408051601f1981840301815291905260208201525b90505b919050565b61126b82611b09565b6112758282611bd3565b5050565b6000806112868484611e82565b9150915060008060006112998787611f1b565b9250925092506000806113f26040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506113ed8a600001518a60000151611fca565b61209c565b885191935091506001600160e01b0319166355575f5d60e11b14156114715785516001600160e01b0319166355575f5d60e11b141561143057600080fd5b813410156114505760405162461bcd60e51b8152600401610f8490614fb8565b8134111561146c5761146c6114653484612213565b3390612270565b6114c0565b85516001600160e01b0319166355575f5d60e11b14156114c057803410156114ab5760405162461bcd60e51b8152600401610f8490614fb8565b803411156114c0576114c06114653483612213565b505050505050505050565b60006114d630612308565b15905090565b600054610100900460ff16806114f557506114f56114cb565b80611503575060005460ff16155b61153e5760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff16158015611569576000805460ff1961ff0019909116610100171660011790555b801561157b576000805461ff00191690555b50565b600054610100900460ff168061159757506115976114cb565b806115a5575060005460ff16155b6115e05760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff1615801561160b576000805460ff1961ff0019909116610100171660011790555b60006116156118b1565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561157b576000805461ff001916905550565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff168061173a575061173a6114cb565b80611748575060005460ff16155b6117835760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff161580156117ae576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610646576000805461ff001916905550505050565b600054610100900460ff16806117fa57506117fa6114cb565b80611808575060005460ff16155b6118435760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff1615801561186e576000805460ff1961ff0019909116610100171660011790555b6115696040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b81525061230e565b3390565b60e08101516000906001600160e01b031916632611a13360e11b14806118e9575060e08201516001600160e01b0319908116145b1561195e5781516020830151516118ff906123ce565b60608401515161190e906123ce565b846080015160405160200180856001600160a01b0316815260200184815260200183815260200182815260200194505050505060405160208183030381529060405280519060200120905061125d565b815160208301515161196f906123ce565b60608401515161197e906123ce565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156119ea5781810151838201526020016119d2565b50505050905090810190601f168015611a175780820380516001836020036101000a031916815260200191505b50965050505050505060405160208183030381529060405280519060200120905061125d565b611a478484611262565b611a518282611262565b60408401516001600160a01b031615611aad5781516001600160a01b031615611aad5783604001516001600160a01b031682600001516001600160a01b031614611aad5760405162461bcd60e51b8152600401610f8490614f75565b60408201516001600160a01b0316156106465783516001600160a01b0316156106465783600001516001600160a01b031682604001516001600160a01b0316146106465760405162461bcd60e51b8152600401610f8490614de4565b60a08101511580611b1d5750428160a00151105b611b6e576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c08101511580611b825750428160c00151115b61157b576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b6080820151611c585781516001600160a01b031615611c535781516001600160a01b0316611bff6118b1565b6001600160a01b031614611c53576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b611275565b81516001600160a01b0316611c6b6118b1565b6001600160a01b031614611275576000611c8483612438565b9050611c9c83600001516001600160a01b0316612308565b15611dd8578251630b135d3f60e11b906001600160a01b0316631626ba7e611cc384612528565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611d16578181015183820152602001611cfe565b50505050905090810190601f168015611d435780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611d6157600080fd5b505afa158015611d75573d6000803e3d6000fd5b505050506040513d6020811015611d8b57600080fd5b50516001600160e01b03191614611dd35760405162461bcd60e51b815260040180806020018281038252602b8152602001806151f0602b913960400191505060405180910390fd5b610d9f565b82516001600160a01b0316611df683611df084612528565b90612574565b6001600160a01b031614611e3b5760405162461bcd60e51b81526004018080602001828103825260228152602001806151ce6022913960400191505060405180910390fd5b82516001600160a01b0316610d9f576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b611e8a6140b3565b611e926140b3565b602084015151606084015151611ea891906125f4565b80519092506001600160e01b031916611ed35760405162461bcd60e51b8152600401610f8490614f49565b606084015151602084015151611ee991906125f4565b80519091506001600160e01b031916611f145760405162461bcd60e51b8152600401610f8490614f49565b9250929050565b611f236140cb565b611f2b6140cb565b611f336140ee565b6000611f3e866118b5565b90506000611f4b866118b5565b90506000611f576118b1565b88519091506001600160a01b0316611f76576001600160a01b03811688525b86516001600160a01b0316611f92576001600160a01b03811687525b611f9b88612634565b9550611fa687612634565b9450611fbe888885858a604001518a6040015161272d565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b1415611fed57506001612096565b6001600160e01b031982166355575f5d60e11b141561200e57506002612096565b6001600160e01b031983166322ba176160e21b141561202f57506001612096565b6001600160e01b031982166322ba176160e21b141561205057506002612096565b6001600160e01b0319831663025ceed960e61b141561207157506001612096565b6001600160e01b0319821663025ceed960e61b141561209257506002612096565b5060005b92915050565b825160209081015183519091015160018360028111156120b857fe5b141561213a5760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b909104169181019190915261210a90869086906128e8565b9150612135846000015160000151856000015160200151866080015188602001518860600151612b62565b61220b565b600283600281111561214857fe5b14156121c55760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b909104169181019190915261219a90859087906128e8565b9050612135856000015160000151866000015160200151876080015187602001518960600151612b62565b8451805160209182015160808801519287015160608901516121e8949190612b62565b83518051602091820151608087015192880151606088015161220b949190612b62565b935093915050565b60008282111561226a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146122bb576040519150601f19603f3d011682016040523d82523d6000602084013e6122c0565b606091505b5050905080610d9f576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff168061232757506123276114cb565b80612335575060005460ff16155b6123705760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff1615801561239b576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca558015610d9f576000805461ff0019169055505050565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d826000015161246d8460200151612ce6565b846040015161247f8660600151612ce6565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b6000612532612d56565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b600081516041146125cc576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6125ea86828585612d96565b9695505050505050565b6125fc6140b3565b60006126088484612fec565b80519091506001600160e01b03191661262d576126258385612fec565b915050612096565b9050612096565b61263c6140cb565b60e08201516001600160e01b031916632611a13360e11b14156126885760008261010001518060200190518101906126749190614933565b805183526020908101519083015250612714565b60e08201516001600160e01b0319166323d235ef60e01b14156126e05760008261010001518060200190518101906126c091906149bf565b805183526020808201519084015260409081015115159083015250612714565b60e08201516001600160e01b031990811614156126fc57612714565b60405162461bcd60e51b8152600401610f8490614edb565b80515161125d57815161272690613208565b8152919050565b6127356140ee565b60006127458860800151876132a3565b905060006127578860800151876132a3565b905060006127698a8a85858a8a6132c8565b9050896020015160200151600014158061278a575060608901516020015115155b156127ad5780516127ad5760405162461bcd60e51b8152600401610f8490614e54565b60608a0151602001511515806127c957506020808a0151015115155b156127f25760008160200151116127f25760405162461bcd60e51b8152600401610f8490614e54565b60808a01511561284557851561282457805161280f908490613361565b600089815261012f6020526040902055612845565b6020810151612834908490613361565b600089815261012f60205260409020555b60808901511561289857841561287a576020810151612865908390613361565b600088815261012f6020526040902055612898565b8051612887908390613361565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c450926128d3928c928c929190614c7c565b60405180910390a19998505050505050505050565b60006129018460000151602001518386604001516133c2565b9050600061292b828660000151602001518760800151868960000151600001518a60600151613464565b8551805186515160208089015193015160808a015160608b01519596506129599593949293879291906134c1565b9050846040015151600114801561297557508360400151516001145b80156129ca5750846040015160008151811061298d57fe5b6020026020010151600001516001600160a01b031684604001516000815181106129b357fe5b6020026020010151600001516001600160a01b0316145b15612ae057604080516001808252818301909252600091816020015b6129ee614108565b8152602001906001900390816129e65790505090508460400151600081518110612a1457fe5b60200260200101516000015181600081518110612a2d57fe5b60209081029190910101516001600160a01b03909116905260408601518051600090612a5557fe5b6020026020010151602001518560400151600081518110612a7257fe5b6020026020010151602001510181600081518110612a8c57fe5b6020026020010151602001906001600160601b031690816001600160601b031681525050612ad686600001516000015183886000015160200151848a608001518b606001516135c6565b509150612b399050565b612b0a85600001516000015182876000015160200151886040015189608001518a606001516135c6565b50855180516020909101516040870151608089015160608a0151949550612b359486939291906135c6565b5090505b612b5a85600001516000015182876080015187602001518960600151612b62565b509392505050565b6000825111612b835760405162461bcd60e51b8152600401610f8490614da0565b600084815b6001855103811015612c52576000612bc9868381518110612ba557fe5b6020026020010151602001516001600160601b03168961367b90919063ffffffff16565b9050612bfe868381518110612bda57fe5b6020026020010151602001516001600160601b03168561336190919063ffffffff16565b93508015612c4957612c108382612213565b9250612c4960405180604001604052808b81526020018381525088888581518110612c3757fe5b60200260200101516000015188613693565b50600101612b88565b50600084600186510381518110612c6557fe5b60200260200101519050612c8f81602001516001600160601b03168461336190919063ffffffff16565b92508261271014612cb25760405162461bcd60e51b8152600401610f8490614f12565b8115612cdc57612cdc60405180604001604052808a81526020018481525087836000015187613693565b5050505050505050565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b08612d1683600001516123ce565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b6000612d917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612d84613a9b565b612d8c613aa1565b613aa7565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612df75760405162461bcd60e51b81526004018080602001828103825260228152602001806151ac6022913960400191505060405180910390fd5b6000601e8560ff161115612ed1576004850360ff16601b1480612e2057506004850360ff16601c145b612e5b5760405162461bcd60e51b81526004018080602001828103825260228152602001806152496022913960400191505060405180910390fd5b6001612e6687613b09565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612ec0573d6000803e3d6000fd5b505050602060405103519050612f88565b8460ff16601b1480612ee657508460ff16601c145b612f215760405162461bcd60e51b81526004018080602001828103825260228152602001806152496022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612f7b573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116612fe3576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b612ff46140b3565b825182516001600160e01b031982166355575f5d60e11b141561305f576001600160e01b031981166355575f5d60e11b1415613034578492505050612096565b5050604080518082018252600080825282516020818101909452908152918101919091529050612096565b6001600160e01b031982166322ba176160e21b14156130a4576001600160e01b031981166322ba176160e21b14156130345761309b8585613b5a565b92505050612096565b6001600160e01b031982166339d690a360e11b14156130e0576001600160e01b031981166339d690a360e11b14156130345761309b8585613b5a565b6001600160e01b0319821663025ceed960e61b141561311c576001600160e01b0319811663025ceed960e61b14156130345761309b8585613b5a565b6001600160e01b031982166000908152606560205260409020546001600160a01b031680156131d1576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb0906131739089908990600401615005565b60006040518083038186803b15801561318b57600080fd5b505afa15801561319f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131c791908101906148a8565b9350505050612096565b6001600160e01b031983811690831614156131f0576131c78686613b5a565b60405162461bcd60e51b8152600401610f8490614d04565b60408051600180825281830190925260609160009190816020015b61322b614108565b815260200190600190039081613223579050509050828160008151811061324e57fe5b6020026020010151600001906001600160a01b031690816001600160a01b0316815250506127108160008151811061328257fe5b6020908102919091018101516001600160601b039092169101529050919050565b6000826132b257506000612096565b50600090815261012f6020526040902054919050565b6132d06140ee565b6000806132de898887613bb7565b915091506000806132f08a8988613bb7565b915091508381118061330a5750838114801561330a575083155b156133365761332b84848c60200151602001518d6060015160200151613c30565b9450505050506125ea565b6133528b60200151602001518c60600151602001518484613cb5565b9b9a5050505050505050505050565b6000828201838110156133bb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b602082015160009065ffffffffffff16815b835181101561344f576127108482815181106133ec57fe5b6020026020010151602001516001600160601b0316111561341f5760405162461bcd60e51b8152600401610f8490614eac565b83818151811061342b57fe5b6020026020010151602001516001600160601b0316820191508060010190506133d4565b50612fe361345d868361367b565b8690613361565b60008060006134868989886040015189602001510165ffffffffffff16613d3b565b909250905080156134b5576134b560405180604001604052808781526020018381525088886000015187613693565b50979650505050505050565b6000806134cd88613d5d565b9050805160011480156134e1575086516001145b801561352e5750866000815181106134f557fe5b6020026020010151600001516001600160a01b03168160008151811061351757fe5b6020026020010151600001516001600160a01b0316145b1561357f576113888160008151811061354357fe5b6020026020010151602001516001600160601b031611156135765760405162461bcd60e51b8152600401610f8490614d3b565b859150506135bb565b6000806135908b8989868a8a6135c6565b915091506113888111156135b65760405162461bcd60e51b8152600401610f8490614d3b565b509150505b979650505050505050565b846000805b855181101561366f576136078682815181106135e357fe5b6020026020010151602001516001600160601b03168361336190919063ffffffff16565b91506000613636848989858151811061361c57fe5b6020026020010151602001516001600160601b0316613d3b565b909450905080156136665761366660405180604001604052808c81526020018381525087898581518110612c3757fe5b506001016135cb565b50965096945050505050565b60006133bb61271061368d8585613ed2565b90613f2b565b8351516001600160e01b0319166339d690a360e11b14156137d9576000808560000151602001518060200190518101906136cd91906146e6565b9150915085602001516001146136f55760405162461bcd60e51b8152600401610f8490614e28565b6001600160a01b03851630141561376d57604051632142170760e11b81526001600160a01b038316906342842e0e9061373690309088908690600401614bd5565b600060405180830381600087803b15801561375057600080fd5b505af1158015613764573d6000803e3d6000fd5b505050506137d2565b604051637b84dc8360e11b81526001600160a01b0384169063f709b9069061379f908590899089908790600401614cda565b600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050505b5050610646565b8351516001600160e01b0319166322ba176160e21b141561393757600084600001516020015180602001905181019061381291906144da565b90506001600160a01b0384163014156138c957602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb91613856918791600401614c31565b602060405180830381600087803b15801561387057600080fd5b505af1158015613884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a891906147f0565b6138c45760405162461bcd60e51b8152600401610f8490614e7d565b613931565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c3916138fe91859189918991600401614cda565b600060405180830381600087803b15801561391857600080fd5b505af115801561392c573d6000803e3d6000fd5b505050505b50610646565b8351516001600160e01b03191663025ceed960e61b14156139f45760008085600001516020015180602001905181019061397191906146e6565b90925090506001600160a01b0385163014156139bc576020860151604051637921219560e11b81526001600160a01b0384169163f242432a9161373691309189918791600401614bf9565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee99161379f9186918a918a91889190600401614c97565b8351516001600160e01b0319166355575f5d60e11b1415613a3d576001600160a01b0382163014613a38576020840151613a38906001600160a01b03841690612270565b610646565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf190613a6d9087908790879060040161502a565b600060405180830381600087803b158015613a8757600080fd5b505af1158015612cdc573d6000803e3d6000fd5b60c95490565b60ca5490565b6000838383613ab4613f92565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b613b626140b3565b60208084015180519082012083820151805192019190912080821415613b8c578492505050612096565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b6000808215613bf6576020808601510151613bd29085612213565b9150613bef85606001516020015186602001516020015184613f96565b905061220b565b606085015160200151613c099085612213565b9050613c2685602001516020015186606001516020015183613f96565b9150935093915050565b613c386140ee565b6000613c45858585613f96565b905085811115613c9c576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b613cbd6140ee565b6000613cca838787613f96565b905083811115613d21576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b600080613d5185613d4c868661367b565b613ffc565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480613d91575081516001600160e01b0319166339d690a360e11b145b15613e47576000808360200151806020019051810190613db191906146e6565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a90613de89085908590600401614c31565b600060405180830381600087803b158015613e0257600080fd5b505af1158015613e16573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e3e91908101906147be565b9250505061125d565b81516001600160e01b03191662737ea960e61b1415613e885760008260200151806020019051810190613e7a91906144f6565b60800151925061125d915050565b81516001600160e01b03191663d8f960c160e01b1415613eca5760008260200151806020019051810190613ebc91906145f3565b60600151925061125d915050565b506060919050565b600082613ee157506000612096565b82820282848281613eee57fe5b04146133bb5760405162461bcd60e51b815260040180806020018281038252602181526020018061526b6021913960400191505060405180910390fd5b6000808211613f81576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381613f8a57fe5b049392505050565b4690565b6000613fa3848484614024565b15613fe6576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b613ff48361368d8685613ed2565b949350505050565b6000808284111561401b576140118484612213565b9150829050611f14565b50600093915050565b60008261406b576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b811580614076575083155b15614083575060006133bb565b6000838061408d57fe5b858409905061409c8584613ed2565b6140a8826103e8613ed2565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b803561125d8161515a565b600082601f83011261413a578081fd5b8151602061414f61414a836150f0565b6150cd565b82815281810190858301855b8581101561418457614172898684518b01016142b3565b8452928401929084019060010161415b565b5090979650505050505050565b600082601f8301126141a1578081fd5b815160206141b161414a836150f0565b828152818101908583016040808602880185018910156141cf578687fd5b865b8681101561423e5781838b0312156141e7578788fd5b81518281018181106001600160401b038211171561420157fe5b8352835161420e8161515a565b8152838701516001600160601b038116811461422857898afd5b81880152855293850193918101916001016141d1565b509198975050505050505050565b8051801515811461125d57600080fd5b803561125d8161516f565b600082601f830112614277578081fd5b813561428561414a8261510d565b818152846020838601011115614299578283fd5b816020850160208301379081016020019190915292915050565b600082601f8301126142c3578081fd5b81516142d161414a8261510d565b8181528460208386010111156142e5578283fd5b613ff482602083016020870161512e565b60006101e08284031215614308578081fd5b50919050565b60006040808385031215614320578182fd5b80518181016001600160401b03828210818311171561433b57fe5b81845282945085358181111561435057600080fd5b860180880385131561436157600080fd5b60808401838110838211171561437357fe5b9094528335936143828561516f565b9382526020840135938185111561439857600080fd5b6143a488868301614267565b60608501525050815260209384013593019290925292915050565b60006101208083850312156143d2578182fd5b6143db816150cd565b9150506143e78261411f565b815260208201356001600160401b038082111561440357600080fd5b61440f8583860161430e565b60208401526144206040850161411f565b6040840152606084013591508082111561443957600080fd5b6144458583860161430e565b60608401526080840135608084015260a084013560a084015260c084013560c084015261447460e0850161425c565b60e08401526101009150818401358181111561448f57600080fd5b61449b86828701614267565b8385015250505092915050565b803565ffffffffffff8116811461125d57600080fd5b6000602082840312156144cf578081fd5b81356133bb8161515a565b6000602082840312156144eb578081fd5b81516133bb8161515a565b60008060408385031215614508578081fd5b82516145138161515a565b60208401519092506001600160401b038082111561452f578283fd5b9084019060c08287031215614542578283fd5b61454c60c06150cd565b82518152602083015182811115614561578485fd5b61456d888286016142b3565b6020830152506040830151604082015260608301518281111561458e578485fd5b61459a88828601614191565b6060830152506080830151828111156145b1578485fd5b6145bd88828601614191565b60808301525060a0830151828111156145d4578485fd5b6145e08882860161412a565b60a0830152508093505050509250929050565b60008060408385031215614605578182fd5b82516146108161515a565b60208401519092506001600160401b038082111561462c578283fd5b9084019060a0828703121561463f578283fd5b61464960a06150cd565b8251815260208301518281111561465e578485fd5b61466a888286016142b3565b602083015250604083015182811115614681578485fd5b61468d88828601614191565b6040830152506060830151828111156146a4578485fd5b6146b088828601614191565b6060830152506080830151828111156146c7578485fd5b6146d38882860161412a565b6080830152508093505050509250929050565b600080604083850312156146f8578182fd5b82516147038161515a565b6020939093015192949293505050565b600080600080600060a0868803121561472a578081fd5b85356147358161515a565b945060208601356147458161515a565b935060408601359250606086013561475c8161515a565b9150608086013561476c8161515a565b809150509295509295909350565b60008060006060848603121561478e578081fd5b83356147998161515a565b92506147a7602085016144a8565b91506147b5604085016144a8565b90509250925092565b6000602082840312156147cf578081fd5b81516001600160401b038111156147e4578182fd5b613ff484828501614191565b600060208284031215614801578081fd5b6133bb8261424c565b60006020828403121561481b578081fd5b5035919050565b600060208284031215614833578081fd5b81356133bb8161516f565b60008060408385031215614850578182fd5b823561485b8161516f565b9150602083013561486b8161515a565b809150509250929050565b600060208284031215614887578081fd5b81356001600160401b0381111561489c578182fd5b613ff4848285016142f6565b6000602082840312156148b9578081fd5b81516001600160401b03808211156148cf578283fd5b90830190604082860312156148e2578283fd5b6040516040810181811083821117156148f757fe5b60405282516149058161516f565b8152602083015182811115614918578485fd5b614924878286016142b3565b60208301525095945050505050565b600060208284031215614944578081fd5b81516001600160401b038082111561495a578283fd5b908301906040828603121561496d578283fd5b60405160408101818110838211171561498257fe5b604052825182811115614993578485fd5b61499f87828601614191565b8252506020830151828111156149b3578485fd5b61492487828601614191565b6000602082840312156149d0578081fd5b81516001600160401b03808211156149e6578283fd5b90830190606082860312156149f9578283fd5b604051606081018181108382111715614a0e57fe5b604052825182811115614a1f578485fd5b614a2b87828601614191565b825250602083015182811115614a3f578485fd5b614a4b87828601614191565b602083015250614a5d6040840161424c565b604082015295945050505050565b600060208284031215614a7c578081fd5b81356001600160401b03811115614a91578182fd5b613ff4848285016143bf565b60008060008060808587031215614ab2578182fd5b84356001600160401b0380821115614ac8578384fd5b614ad4888389016143bf565b95506020870135915080821115614ae9578384fd5b614af588838901614267565b94506040870135915080821115614b0a578384fd5b614b16888389016143bf565b93506060870135915080821115614b2b578283fd5b50614b3887828801614267565b91505092959194509250565b600060208284031215614b55578081fd5b6133bb826144a8565b600063ffffffff60e01b82511683526020820151604060208501528051806040860152614b9281606087016020850161512e565b601f01601f1916939093016060019392505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b6000604082526150186040830185614b5e565b8281036020840152612fe38185614b5e565b60006060825284516040606084015261504660a0840182614b5e565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e1984360301811261509f578283fd5b8301803591506001600160401b038211156150b8578283fd5b602001915036819003821315611f1457600080fd5b6040518181016001600160401b03811182821017156150e857fe5b604052919050565b60006001600160401b0382111561510357fe5b5060209081020190565b60006001600160401b0382111561512057fe5b50601f01601f191660200190565b60005b83811015615149578181015183820152602001615131565b838111156106465750506000910152565b6001600160a01b038116811461157b57600080fd5b6001600160e01b03198116811461157b57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220afb45cb0b68502f6c2ce48c7b8d3e776771b70a03d2365b57f0f0085b66e5eae64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))": { + "details": "function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction", + "params": { + "direct": "struct with parameters for accept bid operation" + } + }, + "directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))": { + "details": "function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 11510, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "matchers", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_address)" + }, + { + "astId": 11756, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 30893, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "proxies", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_bytes4,t_address)" + }, + { + "astId": 31190, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 138, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "201", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "202", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "__gap", + "offset": 0, + "slot": "203", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 12978, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "__gap", + "offset": 0, + "slot": "253", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 11910, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "fills", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 12842, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 29820, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "protocolFee", + "offset": 0, + "slot": "353", + "type": "t_struct(ProtocolFeeData)29856_storage" + }, + { + "astId": 29822, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "royaltiesRegistry", + "offset": 0, + "slot": "354", + "type": "t_contract(IRoyaltiesProvider)11479" + }, + { + "astId": 29824, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "defaultFeeReceiver", + "offset": 0, + "slot": "355", + "type": "t_address" + }, + { + "astId": 29828, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "feeReceivers", + "offset": 0, + "slot": "356", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 30869, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "__gap", + "offset": 0, + "slot": "357", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_contract(IRoyaltiesProvider)11479": { + "encoding": "inplace", + "label": "contract IRoyaltiesProvider", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_address)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_struct(ProtocolFeeData)29856_storage": { + "encoding": "inplace", + "label": "struct RaribleTransferManager.ProtocolFeeData", + "members": [ + { + "astId": 29851, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "receiver", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 29853, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "buyerAmount", + "offset": 20, + "slot": "0", + "type": "t_uint48" + }, + { + "astId": 29855, + "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", + "label": "sellerAmount", + "offset": 26, + "slot": "0", + "type": "t_uint48" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "encoding": "inplace", + "label": "uint48", + "numberOfBytes": "6" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/PermissionedContractFactory.json b/projects/hardhat-deploy/deployments/oasys/PermissionedContractFactory.json new file mode 100644 index 000000000..659e343d8 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/PermissionedContractFactory.json @@ -0,0 +1,491 @@ +{ + "address": "0x123e3ae459a8D049F27Ba62B8a5D48c68A100EBC", + "abi": [ + { + "inputs": [ + { + "internalType": "address[]", + "name": "admins", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "creators", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "bytecode", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "address", + "name": "newContract", + "type": "address" + } + ], + "name": "ContractCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "inputs": [], + "name": "CONTRACT_CREATOR_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "bytecode", + "type": "bytes" + }, + { + "internalType": "address", + "name": "expected", + "type": "address" + }, + { + "internalType": "string", + "name": "tag", + "type": "string" + }, + { + "internalType": "bytes[]", + "name": "afterCalldatas", + "type": "bytes[]" + } + ], + "internalType": "struct PermissionedContractFactory.DeployContract[]", + "name": "deployContracts", + "type": "tuple[]" + } + ], + "name": "bulkCreate", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "bytecode", + "type": "bytes" + }, + { + "internalType": "address", + "name": "expected", + "type": "address" + }, + { + "internalType": "string", + "name": "tag", + "type": "string" + }, + { + "internalType": "bytes[]", + "name": "afterCalldatas", + "type": "bytes[]" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "bytecode", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + } + ], + "name": "getDeploymentAddress", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "transactionHash": "0x139592e62fbfafba9362f29defe68c5a2289243657efec049bf5075084ccb912", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x388CA8e454599667000f974714e81928155C9c2f", + "transactionIndex": 0, + "gasUsed": "1258599", + "logsBloom": "0x00000004000000000800000000000000080000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000020000000000000000020000400000000000000800000010000000000000080000000000100000000000000000000000000000000000000000000000000040400000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000080000000000000000000100000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xbf0870ebbaf0506085df8dfb188c84107e308e0c78bda33dcc1fb26719577322", + "transactionHash": "0x139592e62fbfafba9362f29defe68c5a2289243657efec049bf5075084ccb912", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 3256660, + "transactionHash": "0x139592e62fbfafba9362f29defe68c5a2289243657efec049bf5075084ccb912", + "address": "0x388CA8e454599667000f974714e81928155C9c2f", + "topics": [ + "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xbf0870ebbaf0506085df8dfb188c84107e308e0c78bda33dcc1fb26719577322" + }, + { + "transactionIndex": 0, + "blockNumber": 3256660, + "transactionHash": "0x139592e62fbfafba9362f29defe68c5a2289243657efec049bf5075084ccb912", + "address": "0x388CA8e454599667000f974714e81928155C9c2f", + "topics": [ + "0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff", + "0x0d8b58cba732a42811e1f217ab43cccb14f1a8263ebb61afbf13838fcdae9df9", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xbf0870ebbaf0506085df8dfb188c84107e308e0c78bda33dcc1fb26719577322" + }, + { + "transactionIndex": 0, + "blockNumber": 3256660, + "transactionHash": "0x139592e62fbfafba9362f29defe68c5a2289243657efec049bf5075084ccb912", + "address": "0x388CA8e454599667000f974714e81928155C9c2f", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xbf0870ebbaf0506085df8dfb188c84107e308e0c78bda33dcc1fb26719577322" + }, + { + "transactionIndex": 0, + "blockNumber": 3256660, + "transactionHash": "0x139592e62fbfafba9362f29defe68c5a2289243657efec049bf5075084ccb912", + "address": "0x388CA8e454599667000f974714e81928155C9c2f", + "topics": [ + "0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d", + "0x0d8b58cba732a42811e1f217ab43cccb14f1a8263ebb61afbf13838fcdae9df9", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0xbf0870ebbaf0506085df8dfb188c84107e308e0c78bda33dcc1fb26719577322" + } + ], + "blockNumber": 3256660, + "cumulativeGasUsed": "1258599", + "status": 1, + "byzantium": true + }, + "args": [ + [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ] + ], + "numDeployments": 1, + "solcInputHash": "a8f7bc89d9961e2d9345e17e373af95f", + "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"admins\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"creators\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"bytecode\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newContract\",\"type\":\"address\"}],\"name\":\"ContractCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CONTRACT_CREATOR_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"bytecode\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"expected\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tag\",\"type\":\"string\"},{\"internalType\":\"bytes[]\",\"name\":\"afterCalldatas\",\"type\":\"bytes[]\"}],\"internalType\":\"struct PermissionedContractFactory.DeployContract[]\",\"name\":\"deployContracts\",\"type\":\"tuple[]\"}],\"name\":\"bulkCreate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"bytecode\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"expected\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"tag\",\"type\":\"string\"},{\"internalType\":\"bytes[]\",\"name\":\"afterCalldatas\",\"type\":\"bytes[]\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"bytecode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract that create other contracts using the `CREATE2` opcode, with calls limited to a preauthorized set of addresses. The contract creator role is managed by the default admin role. --- Who will be intended to be authorized? --- As an important note, initially, only the 'Oasys core team' is granted the permission to deploy contracts. It will take time to grant privileges to the Oasys council, so the Oasys team needs to lead them gradually, enabling them to judge which contracts should be deployed.\",\"events\":{\"ContractCreated(address,uint256,bytes32,bytes,address)\":{\"details\":\"Emitted when a contract is created.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this. _Available since v3.1._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"}},\"kind\":\"dev\",\"methods\":{\"bulkCreate((uint256,bytes32,bytes,address,string,bytes[])[])\":{\"details\":\"creates multiple contracts using the `CREATE2` opcode\"},\"create(uint256,bytes32,bytes,address,string,bytes[])\":{\"details\":\"creates a new contract using the `CREATE2` opcode. Only callers granted with the `CONTRACT_CREATOR_ROLE` are permitted to call it. The caller must send the expected new contract address for deployment. If the expected address does not match the newly created one, the execution will be reverted.\",\"params\":{\"afterCalldatas\":\"Calldata to be called after contract creation\",\"salt\":\"Optional, if not supplied, compute from bytecode\",\"tag\":\"Registerd as metadata, we intended to set it as a contract name. this can be empty string\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"details\":\"computes the address of a contract that would be created using the `CREATE2` opcode.\",\"params\":{\"salt\":\"Optional, if not supplied, compute from bytecode\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"version()\":{\"details\":\"returns the semantic version.\"}},\"title\":\"PermissionedContractFactory\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/PermissionedContractFactory.sol\":\"PermissionedContractFactory\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":1000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-sol08/access/AccessControl.sol\":{\"keccak256\":\"0x5b35d8e68aeaccc685239bd9dd79b9ba01a0357930f8a3307ab85511733d9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba8eb2d22f9321bd4660f6617c181d9611ff30a9b089408b8c6e2216d6d5cdc5\",\"dweb:/ipfs/QmTSJvhjHfnUV1j4hsqDv8PmLvGBLRs9gHLjTUXrUJ5Y9q\"]},\"@openzeppelin/contracts-sol08/access/IAccessControl.sol\":{\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb2c137c343ef0c4c7ce7b18c1d108afdc9d315a04e48307288d2d05adcbde3a\",\"dweb:/ipfs/QmUxhrAQM3MM3FF5j7AtcXLXguWCJBHJ14BRdVtuoQc8Fh\"]},\"@openzeppelin/contracts-sol08/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688\",\"dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr\"]},\"@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Proxy.sol\":{\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5\",\"dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn\"]},\"@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Upgrade.sol\":{\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8\",\"dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725\"]},\"@openzeppelin/contracts-sol08/proxy/Proxy.sol\":{\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472\",\"dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN\"]},\"@openzeppelin/contracts-sol08/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354\",\"dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce\"]},\"@openzeppelin/contracts-sol08/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"keccak256\":\"0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1\",\"dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8\"]},\"@openzeppelin/contracts-sol08/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"]},\"@openzeppelin/contracts-sol08/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"@openzeppelin/contracts-sol08/utils/Create2.sol\":{\"keccak256\":\"0x62237e1773cbf99739b7019f3772a2ff5360d56edb69751b513237f5fcd78571\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f39caaa49151a341d9c258a5b7308856d11c8cf349062314eea1e2251f0d1918\",\"dweb:/ipfs/QmcJqGdrHEdiBfB5zuA3ykY1wc2LDNtz8Y88HPEscJe71G\"]},\"@openzeppelin/contracts-sol08/utils/StorageSlot.sol\":{\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4\",\"dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B\"]},\"@openzeppelin/contracts-sol08/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]},\"@openzeppelin/contracts-sol08/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"@openzeppelin/contracts-sol08/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"src/PermissionedContractFactory.sol\":{\"keccak256\":\"0xe1e7c636512d57323c9f5b92a3a81147017a7c5e6c979167e37b0796a9267ce1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5f8c1a7247f3f44ab76d308ac8e3b7cf9d7f2b3bc9eaeb8ed2e582c3db4adb8f\",\"dweb:/ipfs/QmYmKjF58LgYaRMwMhbq3QNLXwZs4g5m62HfAi7hr8cw22\"]}},\"version\":1}", + "bytecode": "0x60806040523480156200001157600080fd5b506040516200193e3803806200193e8339810160408190526200003491620003eb565b6200004160008062000210565b6200005d6000805160206200191e833981519152600062000210565b60005b82518160ff161015620001325760006001600160a01b0316838260ff168151811062000090576200009062000455565b60200260200101516001600160a01b031603620000e95760405162461bcd60e51b81526020600482015260126024820152715043433a2061646d696e206973207a65726f60701b60448201526064015b60405180910390fd5b6200011d6000801b848360ff168151811062000109576200010962000455565b60200260200101516200025b60201b60201c565b8062000129816200046b565b91505062000060565b5060005b81518160ff161015620002075760006001600160a01b0316828260ff168151811062000166576200016662000455565b60200260200101516001600160a01b031603620001c65760405162461bcd60e51b815260206004820152601460248201527f5043433a2063726561746f72206973207a65726f0000000000000000000000006044820152606401620000e0565b620001f26000805160206200191e833981519152838360ff168151811062000109576200010962000455565b80620001fe816200046b565b91505062000136565b50505062000499565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6200026782826200026b565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000267576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002c73390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200033957600080fd5b919050565b600082601f8301126200035057600080fd5b815160206001600160401b03808311156200036f576200036f6200030b565b8260051b604051601f19603f830116810181811084821117156200039757620003976200030b565b604052938452858101830193838101925087851115620003b657600080fd5b83870191505b84821015620003e057620003d08262000321565b83529183019190830190620003bc565b979650505050505050565b60008060408385031215620003ff57600080fd5b82516001600160401b03808211156200041757600080fd5b62000425868387016200033e565b935060208501519150808211156200043c57600080fd5b506200044b858286016200033e565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff81036200049057634e487b7160e01b600052601160045260246000fd5b60010192915050565b61147580620004a96000396000f3fe6080604052600436106100c75760003560e01c806354fd4d5011610074578063a217fddf1161004e578063a217fddf14610290578063bd4a55a9146102a5578063d547741f146102b857600080fd5b806354fd4d50146101ed578063794690e41461023957806391d148541461024c57600080fd5b80632f2ff15d116100a55780632f2ff15d1461017357806336568abe1461019557806344f6fec7146101b557600080fd5b806301ffc9a7146100cc5780630b19429e14610101578063248a9ca314610143575b600080fd5b3480156100d857600080fd5b506100ec6100e7366004610f00565b6102d8565b60405190151581526020015b60405180910390f35b34801561010d57600080fd5b506101357f0d8b58cba732a42811e1f217ab43cccb14f1a8263ebb61afbf13838fcdae9df981565b6040519081526020016100f8565b34801561014f57600080fd5b5061013561015e366004610f42565b60009081526020819052604090206001015490565b34801561017f57600080fd5b5061019361018e366004610f77565b610371565b005b3480156101a157600080fd5b506101936101b0366004610f77565b61039b565b3480156101c157600080fd5b506101d56101d0366004610fec565b61042c565b6040516001600160a01b0390911681526020016100f8565b3480156101f957600080fd5b50604080518082018252600581527f302e302e32000000000000000000000000000000000000000000000000000000602082015290516100f8919061105c565b6101d56102473660046110d4565b6104ca565b34801561025857600080fd5b506100ec610267366004610f77565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561029c57600080fd5b50610135600081565b6101936102b3366004611197565b61054e565b3480156102c457600080fd5b506101936102d3366004610f77565b6107f8565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461038c8161081d565b610396838361082a565b505050565b6001600160a01b038116331461041e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61042882826108c8565b5050565b60006104c261043c858585610947565b858560405161044c9291906111d9565b604080519182900382207fff000000000000000000000000000000000000000000000000000000000000006020808501919091526bffffffffffffffffffffffff193060601b16602185015260358401949094526055808401919091528151808403909101815260759092019052805191012090565b949350505050565b600089341461051b5760405162461bcd60e51b815260206004820152601a60248201527f5043433a20696e636f727265637420616d6f756e742073656e740000000000006044820152606401610415565b6105348a61052a8a8a8d610947565b8a8a8a8a8a610999565b9050610541818484610a8b565b9998505050505050505050565b7f0d8b58cba732a42811e1f217ab43cccb14f1a8263ebb61afbf13838fcdae9df96105788161081d565b3460005b838110156107a35781858583818110610597576105976111e9565b90506020028101906105a991906111ff565b3511156105f85760405162461bcd60e51b815260206004820152601d60248201527f5043433a20696e73756666696369656e7420616d6f756e742073656e740000006044820152606401610415565b84848281811061060a5761060a6111e9565b905060200281019061061c91906111ff565b610627903583611235565b91506000610753868684818110610640576106406111e9565b905060200281019061065291906111ff565b356106b5888886818110610668576106686111e9565b905060200281019061067a91906111ff565b610688906040810190611248565b8a8a8881811061069a5761069a6111e9565b90506020028101906106ac91906111ff565b60200135610947565b8888868181106106c7576106c76111e9565b90506020028101906106d991906111ff565b6106e7906040810190611248565b8a8a888181106106f9576106f96111e9565b905060200281019061070b91906111ff565b61071c90608081019060600161128f565b8b8b8981811061072e5761072e6111e9565b905060200281019061074091906111ff565b61074e906080810190611248565b610999565b90506107908187878581811061076b5761076b6111e9565b905060200281019061077d91906111ff565b61078b9060a08101906112aa565b610a8b565b508061079b816112f4565b91505061057c565b5080156107f25760405162461bcd60e51b815260206004820152601960248201527f5043433a20746f6f206d75636820616d6f756e742073656e74000000000000006044820152606401610415565b50505050565b6000828152602081905260409020600101546108138161081d565b61039683836108c8565b6108278133610b8e565b50565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610428576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556108843390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615610428576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000816109925761098d84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c0c92505050565b6104c2565b5092915050565b60006109dc888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c1392505050565b9050836001600160a01b0316816001600160a01b031614610a3f5760405162461bcd60e51b815260206004820152601760248201527f5043433a20756e657870656374656420616464726573730000000000000000006044820152606401610415565b7f388d923fb867b31389c9da49a5a9b552bd44cde0717beb38a215d99ef09778db338989898986604051610a789695949392919061130d565b60405180910390a1979650505050505050565b60005b818110156107f257600080856001600160a01b0316858585818110610ab557610ab56111e9565b9050602002810190610ac79190611248565b604051610ad59291906111d9565b6000604051808303816000865af19150503d8060008114610b12576040519150601f19603f3d011682016040523d82523d6000602084013e610b17565b606091505b509150915081610b7957805115610b315780518082602001fd5b60405162461bcd60e51b815260206004820152601660248201527f5043433a2061667465722063616c6c206661696c6564000000000000000000006044820152606401610415565b50508080610b86906112f4565b915050610a8e565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661042857610bca816001600160a01b03166014610d18565b610bd5836020610d18565b604051602001610be6929190611367565b60408051601f198184030181529082905262461bcd60e51b82526104159160040161105c565b6020015190565b60008084471015610c665760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610415565b8251600003610cb75760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610415565b8383516020850187f590506001600160a01b0381166104c25760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610415565b60606000610d278360026113e8565b610d329060026113ff565b67ffffffffffffffff811115610d4a57610d4a611412565b6040519080825280601f01601f191660200182016040528015610d74576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610dab57610dab6111e9565b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610df657610df66111e9565b60200101906001600160f81b031916908160001a9053506000610e1a8460026113e8565b610e259060016113ff565b90505b6001811115610eaa577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110610e6657610e666111e9565b1a60f81b828281518110610e7c57610e7c6111e9565b60200101906001600160f81b031916908160001a90535060049490941c93610ea381611428565b9050610e28565b508315610ef95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610415565b9392505050565b600060208284031215610f1257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ef957600080fd5b600060208284031215610f5457600080fd5b5035919050565b80356001600160a01b0381168114610f7257600080fd5b919050565b60008060408385031215610f8a57600080fd5b82359150610f9a60208401610f5b565b90509250929050565b60008083601f840112610fb557600080fd5b50813567ffffffffffffffff811115610fcd57600080fd5b602083019150836020828501011115610fe557600080fd5b9250929050565b60008060006040848603121561100157600080fd5b833567ffffffffffffffff81111561101857600080fd5b61102486828701610fa3565b909790965060209590950135949350505050565b60005b8381101561105357818101518382015260200161103b565b50506000910152565b602081526000825180602084015261107b816040850160208701611038565b601f01601f19169190910160400192915050565b60008083601f8401126110a157600080fd5b50813567ffffffffffffffff8111156110b957600080fd5b6020830191508360208260051b8501011115610fe557600080fd5b600080600080600080600080600060c08a8c0312156110f257600080fd5b8935985060208a0135975060408a013567ffffffffffffffff8082111561111857600080fd5b6111248d838e01610fa3565b909950975087915061113860608d01610f5b565b965060808c013591508082111561114e57600080fd5b61115a8d838e01610fa3565b909650945060a08c013591508082111561117357600080fd5b506111808c828d0161108f565b915080935050809150509295985092959850929598565b600080602083850312156111aa57600080fd5b823567ffffffffffffffff8111156111c157600080fd5b6111cd8582860161108f565b90969095509350505050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b6000823560be1983360301811261121557600080fd5b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561036b5761036b61121f565b6000808335601e1984360301811261125f57600080fd5b83018035915067ffffffffffffffff82111561127a57600080fd5b602001915036819003821315610fe557600080fd5b6000602082840312156112a157600080fd5b610ef982610f5b565b6000808335601e198436030181126112c157600080fd5b83018035915067ffffffffffffffff8211156112dc57600080fd5b6020019150600581901b3603821315610fe557600080fd5b6000600182016113065761130661121f565b5060010190565b60006001600160a01b03808916835287602084015286604084015260a060608401528460a0840152848660c0850137600083860160c0908101919091529316608083015250601f909201601f191690910101949350505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161139f816017850160208801611038565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516113dc816028840160208801611038565b01602801949350505050565b808202811582820484141761036b5761036b61121f565b8082018082111561036b5761036b61121f565b634e487b7160e01b600052604160045260246000fd5b6000816114375761143761121f565b50600019019056fea2646970667358221220831d04df7affd679afe03814c5758fcd5cbb3d4b83ecfa5fd7535b9a64f7f02364736f6c634300081300330d8b58cba732a42811e1f217ab43cccb14f1a8263ebb61afbf13838fcdae9df9", + "deployedBytecode": "0x6080604052600436106100c75760003560e01c806354fd4d5011610074578063a217fddf1161004e578063a217fddf14610290578063bd4a55a9146102a5578063d547741f146102b857600080fd5b806354fd4d50146101ed578063794690e41461023957806391d148541461024c57600080fd5b80632f2ff15d116100a55780632f2ff15d1461017357806336568abe1461019557806344f6fec7146101b557600080fd5b806301ffc9a7146100cc5780630b19429e14610101578063248a9ca314610143575b600080fd5b3480156100d857600080fd5b506100ec6100e7366004610f00565b6102d8565b60405190151581526020015b60405180910390f35b34801561010d57600080fd5b506101357f0d8b58cba732a42811e1f217ab43cccb14f1a8263ebb61afbf13838fcdae9df981565b6040519081526020016100f8565b34801561014f57600080fd5b5061013561015e366004610f42565b60009081526020819052604090206001015490565b34801561017f57600080fd5b5061019361018e366004610f77565b610371565b005b3480156101a157600080fd5b506101936101b0366004610f77565b61039b565b3480156101c157600080fd5b506101d56101d0366004610fec565b61042c565b6040516001600160a01b0390911681526020016100f8565b3480156101f957600080fd5b50604080518082018252600581527f302e302e32000000000000000000000000000000000000000000000000000000602082015290516100f8919061105c565b6101d56102473660046110d4565b6104ca565b34801561025857600080fd5b506100ec610267366004610f77565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561029c57600080fd5b50610135600081565b6101936102b3366004611197565b61054e565b3480156102c457600080fd5b506101936102d3366004610f77565b6107f8565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061036b57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60008281526020819052604090206001015461038c8161081d565b610396838361082a565b505050565b6001600160a01b038116331461041e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61042882826108c8565b5050565b60006104c261043c858585610947565b858560405161044c9291906111d9565b604080519182900382207fff000000000000000000000000000000000000000000000000000000000000006020808501919091526bffffffffffffffffffffffff193060601b16602185015260358401949094526055808401919091528151808403909101815260759092019052805191012090565b949350505050565b600089341461051b5760405162461bcd60e51b815260206004820152601a60248201527f5043433a20696e636f727265637420616d6f756e742073656e740000000000006044820152606401610415565b6105348a61052a8a8a8d610947565b8a8a8a8a8a610999565b9050610541818484610a8b565b9998505050505050505050565b7f0d8b58cba732a42811e1f217ab43cccb14f1a8263ebb61afbf13838fcdae9df96105788161081d565b3460005b838110156107a35781858583818110610597576105976111e9565b90506020028101906105a991906111ff565b3511156105f85760405162461bcd60e51b815260206004820152601d60248201527f5043433a20696e73756666696369656e7420616d6f756e742073656e740000006044820152606401610415565b84848281811061060a5761060a6111e9565b905060200281019061061c91906111ff565b610627903583611235565b91506000610753868684818110610640576106406111e9565b905060200281019061065291906111ff565b356106b5888886818110610668576106686111e9565b905060200281019061067a91906111ff565b610688906040810190611248565b8a8a8881811061069a5761069a6111e9565b90506020028101906106ac91906111ff565b60200135610947565b8888868181106106c7576106c76111e9565b90506020028101906106d991906111ff565b6106e7906040810190611248565b8a8a888181106106f9576106f96111e9565b905060200281019061070b91906111ff565b61071c90608081019060600161128f565b8b8b8981811061072e5761072e6111e9565b905060200281019061074091906111ff565b61074e906080810190611248565b610999565b90506107908187878581811061076b5761076b6111e9565b905060200281019061077d91906111ff565b61078b9060a08101906112aa565b610a8b565b508061079b816112f4565b91505061057c565b5080156107f25760405162461bcd60e51b815260206004820152601960248201527f5043433a20746f6f206d75636820616d6f756e742073656e74000000000000006044820152606401610415565b50505050565b6000828152602081905260409020600101546108138161081d565b61039683836108c8565b6108278133610b8e565b50565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610428576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556108843390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615610428576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000816109925761098d84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c0c92505050565b6104c2565b5092915050565b60006109dc888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610c1392505050565b9050836001600160a01b0316816001600160a01b031614610a3f5760405162461bcd60e51b815260206004820152601760248201527f5043433a20756e657870656374656420616464726573730000000000000000006044820152606401610415565b7f388d923fb867b31389c9da49a5a9b552bd44cde0717beb38a215d99ef09778db338989898986604051610a789695949392919061130d565b60405180910390a1979650505050505050565b60005b818110156107f257600080856001600160a01b0316858585818110610ab557610ab56111e9565b9050602002810190610ac79190611248565b604051610ad59291906111d9565b6000604051808303816000865af19150503d8060008114610b12576040519150601f19603f3d011682016040523d82523d6000602084013e610b17565b606091505b509150915081610b7957805115610b315780518082602001fd5b60405162461bcd60e51b815260206004820152601660248201527f5043433a2061667465722063616c6c206661696c6564000000000000000000006044820152606401610415565b50508080610b86906112f4565b915050610a8e565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661042857610bca816001600160a01b03166014610d18565b610bd5836020610d18565b604051602001610be6929190611367565b60408051601f198184030181529082905262461bcd60e51b82526104159160040161105c565b6020015190565b60008084471015610c665760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610415565b8251600003610cb75760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610415565b8383516020850187f590506001600160a01b0381166104c25760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610415565b60606000610d278360026113e8565b610d329060026113ff565b67ffffffffffffffff811115610d4a57610d4a611412565b6040519080825280601f01601f191660200182016040528015610d74576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610dab57610dab6111e9565b60200101906001600160f81b031916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610df657610df66111e9565b60200101906001600160f81b031916908160001a9053506000610e1a8460026113e8565b610e259060016113ff565b90505b6001811115610eaa577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110610e6657610e666111e9565b1a60f81b828281518110610e7c57610e7c6111e9565b60200101906001600160f81b031916908160001a90535060049490941c93610ea381611428565b9050610e28565b508315610ef95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610415565b9392505050565b600060208284031215610f1257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ef957600080fd5b600060208284031215610f5457600080fd5b5035919050565b80356001600160a01b0381168114610f7257600080fd5b919050565b60008060408385031215610f8a57600080fd5b82359150610f9a60208401610f5b565b90509250929050565b60008083601f840112610fb557600080fd5b50813567ffffffffffffffff811115610fcd57600080fd5b602083019150836020828501011115610fe557600080fd5b9250929050565b60008060006040848603121561100157600080fd5b833567ffffffffffffffff81111561101857600080fd5b61102486828701610fa3565b909790965060209590950135949350505050565b60005b8381101561105357818101518382015260200161103b565b50506000910152565b602081526000825180602084015261107b816040850160208701611038565b601f01601f19169190910160400192915050565b60008083601f8401126110a157600080fd5b50813567ffffffffffffffff8111156110b957600080fd5b6020830191508360208260051b8501011115610fe557600080fd5b600080600080600080600080600060c08a8c0312156110f257600080fd5b8935985060208a0135975060408a013567ffffffffffffffff8082111561111857600080fd5b6111248d838e01610fa3565b909950975087915061113860608d01610f5b565b965060808c013591508082111561114e57600080fd5b61115a8d838e01610fa3565b909650945060a08c013591508082111561117357600080fd5b506111808c828d0161108f565b915080935050809150509295985092959850929598565b600080602083850312156111aa57600080fd5b823567ffffffffffffffff8111156111c157600080fd5b6111cd8582860161108f565b90969095509350505050565b8183823760009101908152919050565b634e487b7160e01b600052603260045260246000fd5b6000823560be1983360301811261121557600080fd5b9190910192915050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561036b5761036b61121f565b6000808335601e1984360301811261125f57600080fd5b83018035915067ffffffffffffffff82111561127a57600080fd5b602001915036819003821315610fe557600080fd5b6000602082840312156112a157600080fd5b610ef982610f5b565b6000808335601e198436030181126112c157600080fd5b83018035915067ffffffffffffffff8211156112dc57600080fd5b6020019150600581901b3603821315610fe557600080fd5b6000600182016113065761130661121f565b5060010190565b60006001600160a01b03808916835287602084015286604084015260a060608401528460a0840152848660c0850137600083860160c0908101919091529316608083015250601f909201601f191690910101949350505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161139f816017850160208801611038565b7f206973206d697373696e6720726f6c652000000000000000000000000000000060179184019182015283516113dc816028840160208801611038565b01602801949350505050565b808202811582820484141761036b5761036b61121f565b8082018082111561036b5761036b61121f565b634e487b7160e01b600052604160045260246000fd5b6000816114375761143761121f565b50600019019056fea2646970667358221220831d04df7affd679afe03814c5758fcd5cbb3d4b83ecfa5fd7535b9a64f7f02364736f6c63430008130033" +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/RaribleExchangeWrapper.json b/projects/hardhat-deploy/deployments/oasys/RaribleExchangeWrapper.json new file mode 100644 index 000000000..255d867a0 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/RaribleExchangeWrapper.json @@ -0,0 +1,642 @@ +{ + "address": "0xa3af07132CeA0573880B25d4f89653ab87774c4c", + "abi": [ + { + "inputs": [ + { + "internalType": "address[11]", + "name": "marketplaces", + "type": "address[11]" + }, + { + "internalType": "address", + "name": "_weth", + "type": "address" + }, + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "result", + "type": "bool" + } + ], + "name": "Execution", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "Paused", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + } + ], + "name": "approveWETH", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "blur", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapper.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapper.PurchaseDetails[]", + "name": "purchaseDetails", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowFail", + "type": "bool" + } + ], + "name": "bulkPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "exchangeV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRare", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRareV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_paused", + "type": "bool" + } + ], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_4", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_5", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_6", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapper.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapper.PurchaseDetails", + "name": "purchaseDetails", + "type": "tuple" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + } + ], + "name": "singlePurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "sudoswap", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "weth", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wyvernExchange", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "x2y2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "numDeployments": 1, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[11]\",\"name\":\"marketplaces\",\"type\":\"address[11]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_6\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":\"RaribleExchangeWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165 is IERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n constructor () internal {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Receiver.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\ncontract ERC1155Holder is ERC1155Receiver {\\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155BatchReceived.selector;\\n }\\n}\\n\",\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155Receiver.sol\\\";\\nimport \\\"../../introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\\n constructor() internal {\\n _registerInterface(\\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n}\\n\",\"keccak256\":\"0x57a0e246fb1c8f9cccf91c508eafe474e40260a31de3a39019ba8312cfdf9b2d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155Receiver is IERC165 {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC721Receiver.sol\\\";\\n\\n /**\\n * @dev Implementation of the {IERC721Receiver} interface.\\n *\\n * Accepts all token transfers. \\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\\n */\\ncontract ERC721Holder is IERC721Receiver {\\n\\n /**\\n * @dev See {IERC721Receiver-onERC721Received}.\\n *\\n * Always returns `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n}\\n\",\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3a89b0a6ff66280e8e48f9f2c862d5c0e8ab23ee306ae5b204cd588931661a93\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n}\\n\",\"keccak256\":\"0xa9d02b9e22ffb9d25f412979951822d56b05d857de1f47ce82ad7b4a8d4601f6\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\\\";\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport \\\"./interfaces/IWyvernExchange.sol\\\";\\nimport \\\"./interfaces/IExchangeV2.sol\\\";\\nimport \\\"./interfaces/ISeaPort.sol\\\";\\nimport \\\"./interfaces/Ix2y2.sol\\\";\\nimport \\\"./interfaces/ILooksRare.sol\\\";\\nimport \\\"./interfaces/IBlur.sol\\\";\\n\\nimport \\\"./libraries/IsPausable.sol\\\";\\n\\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\\n using LibTransfer for address;\\n using BpLibrary for uint;\\n using SafeMath for uint;\\n\\n //marketplaces\\n address public immutable wyvernExchange;\\n address public immutable exchangeV2;\\n address public immutable seaPort_1_1;\\n address public immutable x2y2;\\n address public immutable looksRare;\\n address public immutable sudoswap;\\n address public immutable seaPort_1_4;\\n address public immutable looksRareV2;\\n address public immutable blur;\\n address public immutable seaPort_1_5;\\n address public immutable seaPort_1_6;\\n\\n //currencties\\n address public immutable weth;\\n\\n //constants\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n event Execution(bool result);\\n\\n enum Markets {\\n ExchangeV2,//0\\n WyvernExchange,//1\\n SeaPort_1_1,//2\\n X2Y2,//3\\n LooksRareOrders,//4\\n SudoSwap,//5\\n SeaPort_1_4,//6\\n LooksRareV2,//7\\n Blur,//8\\n SeaPort_1_5,//9\\n SeaPort_1_6//10\\n }\\n\\n enum AdditionalDataTypes {\\n NoAdditionalData,\\n RoyaltiesAdditionalData\\n }\\n\\n enum Currencies {\\n ETH,\\n WETH\\n }\\n\\n /**\\n @notice struct for the purchase data\\n @param marketId - market key from Markets enum (what market to use)\\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\\n bytes (27,28) used for dataType\\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\\n @param data - data for market call\\n */\\n struct PurchaseDetails {\\n Markets marketId;\\n uint256 amount;\\n uint fees;\\n bytes data;\\n }\\n\\n /**\\n @notice struct for the data with additional Ddta\\n @param data - data for market call\\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\\n */\\n struct AdditionalData {\\n bytes data;\\n uint[] additionalRoyalties;\\n }\\n\\n constructor(\\n address[11] memory marketplaces,\\n //address _wyvernExchange, 0\\n //address _exchangeV2, 1\\n //address _seaPort_1_1, 2\\n //address _x2y2, 3\\n //address _looksRare, 4\\n //address _sudoswap, 5\\n //address _seaPort_1_4, 6\\n //address _looksRareV2, 7\\n //address _blur, 8\\n //address _seaPort_1_5, 9\\n //address _seaPort_1_6, 10\\n address _weth,\\n address[] memory transferProxies\\n ) {\\n wyvernExchange = marketplaces[0];\\n exchangeV2 = marketplaces[1];\\n seaPort_1_1 = marketplaces[2];\\n x2y2 = marketplaces[3];\\n looksRare = marketplaces[4];\\n sudoswap = marketplaces[5];\\n seaPort_1_4 = marketplaces[6];\\n looksRareV2 = marketplaces[7];\\n blur = marketplaces[8];\\n seaPort_1_5 = marketplaces[9];\\n seaPort_1_6 = marketplaces[10];\\n\\n weth = _weth;\\n\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n if (_weth != address(0)){\\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n }\\n\\n /**\\n @notice executes a single purchase\\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n */\\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\\n requireNotPaused();\\n \\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\\n \\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n Currencies currency = getCurrency(purchaseDetails.fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n emit Execution(success);\\n \\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes an array of purchases\\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\\n */\\n \\n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\\n requireNotPaused();\\n\\n uint sumFirstFeesETH = 0;\\n uint sumSecondFeesETH = 0;\\n uint sumFirstFeesWETH = 0;\\n uint sumSecondFeesWETH = 0;\\n bool result = false;\\n\\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = 0;\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\\n }\\n\\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n Currencies currency = getCurrency(purchaseDetails[i].fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n result = result || success;\\n emit Execution(success);\\n }\\n\\n require(result, \\\"no successful executions\\\");\\n\\n //pay fees in ETH \\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\\n\\n //pay fees in WETH\\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\\n\\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes one purchase in ETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n uint paymentAmount = purchaseDetails.amount;\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase wyvernExchange failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\\n\\n if (allowFail) {\\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n Ix2y2(x2y2).run{value : paymentAmount}(input);\\n }\\n\\n //for every element in input.details[] getting\\n // order = input.details[i].orderIdx\\n // and from that order getting item = input.details[i].itemId\\n for (uint i = 0; i < input.details.length; ++i) {\\n uint orderId = input.details[i].orderIdx;\\n uint itemId = input.details[i].itemIdx;\\n bytes memory data = input.orders[orderId].items[itemId].data;\\n {\\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\\n }\\n }\\n\\n // 1 = erc-721\\n if (input.orders[orderId].delegateType == 1) {\\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair721 memory p = pairs[j];\\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\\n }\\n } else if (input.orders[orderId].delegateType == 2) {\\n // 2 = erc-1155\\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair1155 memory p = pairs[j];\\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \\\"\\\");\\n }\\n } else {\\n revert(\\\"unknown delegateType x2y2\\\");\\n }\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\\n if (allowFail) {\\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase sudoswap failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase LooksRareV2 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.Blur){\\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\\n if (allowFail) {\\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId ETH\\\");\\n }\\n\\n //transferring royalties\\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\\n \\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice executes one purchase in WETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n\\n //buying\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed WETH\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId WETH\\\");\\n }\\n \\n //transfer royalties\\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\\n\\n //get fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice transfers ETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n LibTransfer.transferEth(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers WETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers change back to sender\\n */\\n function transferChange() internal {\\n uint ethAmount = address(this).balance;\\n if (ethAmount > 0) {\\n address(msg.sender).transferEth(ethAmount);\\n }\\n }\\n\\n /**\\n @notice transfers weth change back to sender\\n */\\n function transferChangeWETH() internal {\\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\\n if (wethAmount > 0) {\\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\\n }\\n }\\n\\n /**\\n @notice parses fees in base points from one uint and calculates real amount of fees\\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\\n @param amount price of the order\\n @return firstFeeAmount real amount for the first fee\\n @return secondFeeAmount real amount for the second fee\\n */\\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\\n uint firstFee = uint(uint16(fees >> 16));\\n uint secondFee = uint(uint16(fees));\\n return (amount.bp(firstFee), amount.bp(secondFee));\\n }\\n\\n /**\\n @notice parses \\\"fees\\\" field to find the currency for the purchase\\n @param fees field with encoded data\\n @return 0 if ETH, 1 if WETH ERC-20\\n */\\n function getCurrency(uint fees) internal pure returns(Currencies) {\\n return Currencies(uint16(fees >> 48));\\n }\\n\\n\\n /**\\n @notice parses _data to data for market call and additionalData\\n @param feesAndDataType 27 and 28 bytes for dataType\\n @return marketData data for market call\\n @return additionalRoyalties array uint256, (base point + address)\\n */\\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\\n uint[] memory additionalRoyalties;\\n\\n //return no royalties if wrong data type\\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\\n return (_data, additionalRoyalties);\\n }\\n\\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\\n\\n //return no royalties if market doesn't support royalties\\n if (supportsRoyalties(marketId)) {\\n return (additionalData.data, additionalData.additionalRoyalties);\\n } else {\\n return (additionalData.data, additionalRoyalties);\\n } \\n }\\n \\n revert(\\\"unknown additionalDataType\\\");\\n }\\n\\n /**\\n @notice transfer additional royalties in ETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeETH(value, account);\\n }\\n }\\n }\\n\\n /**\\n @notice transfer additional royalties in WETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeWETH(value, account);\\n }\\n }\\n }\\n\\n // modifies `src`\\n function _arrayReplace(\\n bytes memory src,\\n bytes memory replacement,\\n bytes memory mask\\n ) internal view virtual {\\n require(src.length == replacement.length);\\n require(src.length == mask.length);\\n\\n for (uint256 i = 0; i < src.length; ++i) {\\n if (mask[i] != 0) {\\n src[i] = replacement[i];\\n }\\n }\\n }\\n\\n /**\\n @notice returns true if this contract supports additional royalties for the marketplace;\\n now royalties are supported for:\\n 1. SudoSwap\\n 2. LooksRare old\\n 3. LooksRare V2\\n */\\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\\n if (\\n marketId == Markets.SudoSwap ||\\n marketId == Markets.LooksRareOrders ||\\n marketId == Markets.LooksRareV2\\n ) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\\n uint result = 0;\\n\\n Currencies currency = getCurrency(detail.fees);\\n\\n //for every purchase with WETH we sum amount, fees and royalties needed\\n if (currency == Currencies.WETH) {\\n\\n //add amount\\n result = result + detail.amount;\\n\\n //add fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\\n result = result + firstFeeAmount + secondFeeAmount;\\n\\n //add royalties\\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\\n for (uint j = 0; j < royalties.length; ++j) {\\n uint royaltyBasePoint = uint(royalties[j] >> 160);\\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\\n result = result + royaltyValue;\\n }\\n }\\n\\n return result;\\n }\\n\\n /**\\n @notice approves weth for a list of the addresses\\n @param transferProxies - array of addresses to approve WETH for\\n */\\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n receive() external payable {}\\n}\",\"keccak256\":\"0xe2bc3642e9df1b789a04dadbb81842deef698616ecc68aa2a4d89252dda77783\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\n\\ninterface IBlur {\\n enum Side { Buy, Sell }\\n enum SignatureVersion { Single, Bulk }\\n enum AssetType { ERC721, ERC1155 }\\n\\n struct Fee {\\n uint16 rate;\\n address payable recipient;\\n }\\n \\n struct Order {\\n address trader;\\n Side side;\\n address matchingPolicy;\\n address collection;\\n uint256 tokenId;\\n uint256 amount;\\n address paymentToken;\\n uint256 price;\\n uint256 listingTime;\\n /* Order expiration timestamp - 0 for oracle cancellations. */\\n uint256 expirationTime;\\n Fee[] fees;\\n uint256 salt;\\n bytes extraParams;\\n }\\n\\n struct Input {\\n Order order;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n bytes extraSignature;\\n SignatureVersion signatureVersion;\\n uint256 blockNumber;\\n }\\n\\n function execute(Input calldata sell, Input calldata buy)\\n external\\n payable;\\n}\\n\",\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-v2/contracts/ExchangeV2.sol\\\";\\n\\nimport {RoyaltiesRegistry} from \\\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\\\";\\nimport {TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\\\";\\nimport {ERC20TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\\\";\\n\\ninterface IExchangeV2 {\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable;\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable;\\n}\",\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibLooksRare.sol\\\";\\n\\ninterface ILooksRare {\\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\\n\\n /**\\n * @notice This function allows a user to execute a taker bid (against a maker ask).\\n * @param takerBid Taker bid struct\\n * @param makerAsk Maker ask struct\\n * @param makerSignature Maker signature\\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\\n * @param affiliate Affiliate address\\n */\\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\\n}\\n\",\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibSeaPort.sol\\\";\\n\\ninterface ISeaPort {\\n function fulfillAdvancedOrder(\\n LibSeaPort.AdvancedOrder calldata advancedOrder,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n bytes32 fulfillerConduitKey,\\n address recipient\\n ) external payable returns (bool fulfilled);\\n\\n function fulfillAvailableAdvancedOrders(\\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\\n bytes32 fulfillerConduitKey,\\n address recipient,\\n uint256 maximumFulfilled\\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\\n\\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\\n external\\n payable\\n returns (bool fulfilled);\\n}\",\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface IWyvernExchange {\\n function atomicMatch_(\\n address[14] memory addrs,\\n uint[18] memory uints,\\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\\n bytes memory calldataBuy,\\n bytes memory calldataSell,\\n bytes memory replacementPatternBuy,\\n bytes memory replacementPatternSell,\\n bytes memory staticExtradataBuy,\\n bytes memory staticExtradataSell,\\n uint8[2] memory vs,\\n bytes32[5] memory rssMetadata)\\n external\\n payable;\\n\\n enum Side {\\n Buy,\\n Sell\\n }\\n\\n enum SaleKind {\\n FixedPrice,\\n DutchAuction\\n }\\n\\n function calculateFinalPrice(\\n Side side,\\n SaleKind saleKind,\\n uint256 basePrice,\\n uint256 extra,\\n uint256 listingTime,\\n uint256 expirationTime\\n ) external view returns (uint256);\\n}\",\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface Ix2y2 {\\n\\n struct OrderItem {\\n uint256 price;\\n bytes data;\\n }\\n\\n struct Pair721 {\\n address token;\\n uint256 tokenId;\\n }\\n\\n struct Pair1155 {\\n address token;\\n uint256 tokenId;\\n uint256 amount;\\n }\\n\\n struct Order {\\n uint256 salt;\\n address user;\\n uint256 network;\\n uint256 intent;\\n uint256 delegateType;\\n uint256 deadline;\\n address currency;\\n bytes dataMask;\\n OrderItem[] items;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n uint8 signVersion;\\n }\\n\\n struct Fee {\\n uint256 percentage;\\n address to;\\n }\\n\\n struct SettleDetail {\\n Op op;\\n uint256 orderIdx;\\n uint256 itemIdx;\\n uint256 price;\\n bytes32 itemHash;\\n address executionDelegate;\\n bytes dataReplacement;\\n uint256 bidIncentivePct;\\n uint256 aucMinIncrementPct;\\n uint256 aucIncDurationSecs;\\n Fee[] fees;\\n }\\n\\n struct SettleShared {\\n uint256 salt;\\n uint256 deadline;\\n uint256 amountToEth;\\n uint256 amountToWeth;\\n address user;\\n bool canFail;\\n }\\n\\n struct RunInput {\\n Order[] orders;\\n SettleDetail[] details;\\n SettleShared shared;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n }\\n\\n enum Op {\\n INVALID,\\n // off-chain\\n COMPLETE_SELL_OFFER,\\n COMPLETE_BUY_OFFER,\\n CANCEL_OFFER,\\n // auction\\n BID,\\n COMPLETE_AUCTION,\\n REFUND_AUCTION,\\n REFUND_AUCTION_STUCK_ITEM\\n }\\n\\n function run(RunInput memory input) external payable;\\n}\",\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nabstract contract IsPausable is Ownable {\\n bool public paused;\\n\\n event Paused(bool paused);\\n\\n function pause(bool _paused) external onlyOwner {\\n paused = _paused;\\n emit Paused(_paused);\\n }\\n\\n function requireNotPaused() internal view {\\n require (!paused, \\\"the contract is paused\\\");\\n }\\n\\n}\\n\",\"keccak256\":\"0xd0ea1d6838dd79b8cfe64e777e4f84456928f0e3621fbb6acd00492e738b2b61\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibLooksRare {\\n struct MakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address signer; // signer of the maker order\\n address collection; // collection address\\n uint256 price; // price (used as )\\n uint256 tokenId; // id of the token\\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\\n address currency; // currency (e.g., WETH)\\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\\n uint256 startTime; // startTime in timestamp\\n uint256 endTime; // endTime in timestamp\\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // additional parameters\\n uint8 v; // v: parameter (27 or 28)\\n bytes32 r; // r: parameter\\n bytes32 s; // s: parameter\\n }\\n\\n struct TakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address taker; // msg.sender\\n uint256 price; // final price for the purchase\\n uint256 tokenId;\\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // other params (e.g., tokenId)\\n }\\n\\n /**\\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\\n */\\n enum CollectionType {\\n ERC721,\\n ERC1155\\n }\\n\\n /**\\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\\n */\\n enum QuoteType {\\n Bid,\\n Ask\\n }\\n /**\\n * 1. Maker struct\\n */\\n\\n /**\\n * @notice Maker is the struct for a maker order.\\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\\n * @param globalNonce Global user order nonce for maker orders\\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\\n * @param strategyId Strategy id\\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\\n * @param collection Collection address\\n * @param currency Currency address (@dev address(0) = ETH)\\n * @param signer Signer address\\n * @param startTime Start timestamp\\n * @param endTime End timestamp\\n * @param price Minimum price for maker ask, maximum price for maker bid\\n * @param itemIds Array of itemIds\\n * @param amounts Array of amounts\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Maker {\\n QuoteType quoteType;\\n uint256 globalNonce;\\n uint256 subsetNonce;\\n uint256 orderNonce;\\n uint256 strategyId;\\n CollectionType collectionType;\\n address collection;\\n address currency;\\n address signer;\\n uint256 startTime;\\n uint256 endTime;\\n uint256 price;\\n uint256[] itemIds;\\n uint256[] amounts;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 2. Taker struct\\n */\\n\\n /**\\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Taker {\\n address recipient;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 3. Merkle tree struct\\n */\\n\\n enum MerkleTreeNodePosition {\\n Left,\\n Right\\n }\\n\\n /**\\n * @notice MerkleTreeNode is a MerkleTree's node.\\n * @param value It can be an order hash or a proof\\n * @param position The node's position in its branch.\\n * It can be left or right or none\\n * (before the tree is sorted).\\n */\\n struct MerkleTreeNode {\\n bytes32 value;\\n MerkleTreeNodePosition position;\\n }\\n\\n /**\\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\\n * @dev A Merkle tree can be computed with order hashes.\\n * It can contain order hashes from both maker bid and maker ask structs.\\n * @param root Merkle root\\n * @param proof Array containing the merkle proof\\n */\\n struct MerkleTree {\\n bytes32 root;\\n MerkleTreeNode[] proof;\\n }\\n}\\n\",\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibSeaPort {\\n /**\\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\\n * matching, a group of six functions may be called that only requires a\\n * subset of the usual order arguments. Note the use of a \\\"basicOrderType\\\"\\n * enum; this represents both the usual order type as well as the \\\"route\\\"\\n * of the basic order (a simple derivation function for the basic order\\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\\n */\\n struct BasicOrderParameters {\\n address considerationToken; // 0x24\\n uint256 considerationIdentifier; // 0x44\\n uint256 considerationAmount; // 0x64\\n address payable offerer; // 0x84\\n address zone; // 0xa4\\n address offerToken; // 0xc4\\n uint256 offerIdentifier; // 0xe4\\n uint256 offerAmount; // 0x104\\n BasicOrderType basicOrderType; // 0x124\\n uint256 startTime; // 0x144\\n uint256 endTime; // 0x164\\n bytes32 zoneHash; // 0x184\\n uint256 salt; // 0x1a4\\n bytes32 offererConduitKey; // 0x1c4\\n bytes32 fulfillerConduitKey; // 0x1e4\\n uint256 totalOriginalAdditionalRecipients; // 0x204\\n AdditionalRecipient[] additionalRecipients; // 0x224\\n bytes signature; // 0x244\\n }\\n /**\\n * @dev Basic orders can supply any number of additional recipients, with the\\n * implied assumption that they are supplied from the offered ETH (or other\\n * native token) or ERC20 token for the order.\\n */\\n struct AdditionalRecipient {\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum BasicOrderType {\\n // 0: no partial fills, anyone can execute\\n ETH_TO_ERC721_FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n ETH_TO_ERC721_PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC721_FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 4: no partial fills, anyone can execute\\n ETH_TO_ERC1155_FULL_OPEN,\\n\\n // 5: partial fills supported, anyone can execute\\n ETH_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 6: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 7: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 8: no partial fills, anyone can execute\\n ERC20_TO_ERC721_FULL_OPEN,\\n\\n // 9: partial fills supported, anyone can execute\\n ERC20_TO_ERC721_PARTIAL_OPEN,\\n\\n // 10: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC721_FULL_RESTRICTED,\\n\\n // 11: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 12: no partial fills, anyone can execute\\n ERC20_TO_ERC1155_FULL_OPEN,\\n\\n // 13: partial fills supported, anyone can execute\\n ERC20_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 14: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 15: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 16: no partial fills, anyone can execute\\n ERC721_TO_ERC20_FULL_OPEN,\\n\\n // 17: partial fills supported, anyone can execute\\n ERC721_TO_ERC20_PARTIAL_OPEN,\\n\\n // 18: no partial fills, only offerer or zone can execute\\n ERC721_TO_ERC20_FULL_RESTRICTED,\\n\\n // 19: partial fills supported, only offerer or zone can execute\\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\\n\\n // 20: no partial fills, anyone can execute\\n ERC1155_TO_ERC20_FULL_OPEN,\\n\\n // 21: partial fills supported, anyone can execute\\n ERC1155_TO_ERC20_PARTIAL_OPEN,\\n\\n // 22: no partial fills, only offerer or zone can execute\\n ERC1155_TO_ERC20_FULL_RESTRICTED,\\n\\n // 23: partial fills supported, only offerer or zone can execute\\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\\n }\\n\\n /**\\n * @dev The full set of order components, with the exception of the counter,\\n * must be supplied when fulfilling more sophisticated orders or groups of\\n * orders. The total number of original consideration items must also be\\n * supplied, as the caller may specify additional consideration items.\\n */\\n struct OrderParameters {\\n address offerer; // 0x00\\n address zone; // 0x20\\n OfferItem[] offer; // 0x40\\n ConsiderationItem[] consideration; // 0x60\\n OrderType orderType; // 0x80\\n uint256 startTime; // 0xa0\\n uint256 endTime; // 0xc0\\n bytes32 zoneHash; // 0xe0\\n uint256 salt; // 0x100\\n bytes32 conduitKey; // 0x120\\n uint256 totalOriginalConsiderationItems; // 0x140\\n // offer.length // 0x160\\n }\\n\\n /**\\n * @dev Orders require a signature in addition to the other order parameters.\\n */\\n struct Order {\\n OrderParameters parameters;\\n bytes signature;\\n }\\n\\n struct AdvancedOrder {\\n OrderParameters parameters;\\n uint120 numerator;\\n uint120 denominator;\\n bytes signature;\\n bytes extraData;\\n }\\n\\n struct OfferItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n }\\n\\n /**\\n * @dev A consideration item has the same five components as an offer item and\\n * an additional sixth component designating the required recipient of the\\n * item.\\n */\\n struct ConsiderationItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum OrderType {\\n // 0: no partial fills, anyone can execute\\n FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n PARTIAL_RESTRICTED\\n }\\n\\n // prettier-ignore\\n enum ItemType {\\n // 0: ETH on mainnet, MATIC on polygon, etc.\\n NATIVE,\\n\\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\\n ERC20,\\n\\n // 2: ERC721 items\\n ERC721,\\n\\n // 3: ERC1155 items\\n ERC1155,\\n\\n // 4: ERC721 items where a number of tokenIds are supported\\n ERC721_WITH_CRITERIA,\\n\\n // 5: ERC1155 items where a number of ids are supported\\n ERC1155_WITH_CRITERIA\\n }\\n\\n /**\\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\\n * offer and consideration items, then generates a single execution\\n * element. A given fulfillment can be applied to as many offer and\\n * consideration items as desired, but must contain at least one offer and\\n * at least one consideration that match. The fulfillment must also remain\\n * consistent on all key parameters across all offer items (same offerer,\\n * token, type, tokenId, and conduit preference) as well as across all\\n * consideration items (token, type, tokenId, and recipient).\\n */\\n struct Fulfillment {\\n FulfillmentComponent[] offerComponents;\\n FulfillmentComponent[] considerationComponents;\\n }\\n\\n /**\\n * @dev Each fulfillment component contains one index referencing a specific\\n * order and another referencing a specific offer or consideration item.\\n */\\n struct FulfillmentComponent {\\n uint256 orderIndex;\\n uint256 itemIndex;\\n }\\n\\n /**\\n * @dev An execution is triggered once all consideration items have been zeroed\\n * out. It sends the item in question from the offerer to the item's\\n * recipient, optionally sourcing approvals from either this contract\\n * directly or from the offerer's chosen conduit if one is specified. An\\n * execution is not provided as an argument, but rather is derived via\\n * orders, criteria resolvers, and fulfillments (where the total number of\\n * executions will be less than or equal to the total number of indicated\\n * fulfillments) and returned as part of `matchOrders`.\\n */\\n struct Execution {\\n ReceivedItem item;\\n address offerer;\\n bytes32 conduitKey;\\n }\\n\\n /**\\n * @dev A received item is translated from a utilized consideration item and has\\n * the same four components as a spent item, as well as an additional fifth\\n * component designating the required recipient of the item.\\n */\\n struct ReceivedItem {\\n ItemType itemType;\\n address token;\\n uint256 identifier;\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n struct CriteriaResolver {\\n uint256 orderIndex;\\n Side side;\\n uint256 index;\\n uint256 identifier;\\n bytes32[] criteriaProof;\\n }\\n\\n // prettier-ignore\\n enum Side {\\n // 0: Items that can be spent\\n OFFER,\\n\\n // 1: Items that must be received\\n CONSIDERATION\\n }\\n}\\n\",\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x7f99c2e0828bbba57e1599d92f1368b62ef0e9cd62bda3c4091e108d1fbc35b6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x5e982ad688493d9c729757c2ebd98efecd0bf3b33992f7342edf6c349874b86c\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x363fa1f25a41aa7d7b3fb9e2d182dec04c3774d06d9eed428b3fe48140fa4b7e\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x87cd179c900495ee44c1b9c7fa57f4da0228217d78792bd6d6a6fde6c32be2b2\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6102006040523480156200001257600080fd5b5060405162004f4738038062004f47833981016040819052620000359162000352565b6000620000416200021e565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200009d6301ffc9a760e01b62000222565b620000af630271189760e51b62000222565b82516001600160601b0319606091821b811660809081526020860151831b821660a09081526040870151841b831660c090815284880151851b841660e090815292880151851b841661010090815291880151851b841661012090815290880151851b841661014090815292880151851b84166101605290870151841b831661018052860151831b82166101a052850151821b81166101c0529083901b166101e05260005b815181101562000214576001600160a01b038316156200020b57826001600160a01b031663095ea7b38383815181106200018957fe5b60200260200101516000196040518363ffffffff1660e01b8152600401620001b392919062000437565b602060405180830381600087803b158015620001ce57600080fd5b505af1158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020991906200040e565b505b60010162000153565b5050505062000474565b3390565b6001600160e01b0319808216141562000282576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b80516001600160a01b0381168114620002c257600080fd5b919050565b600082601f830112620002d8578081fd5b815160206001600160401b03821115620002ee57fe5b808202620002fe82820162000450565b83815282810190868401838801850189101562000319578687fd5b8693505b8584101562000346576200033181620002aa565b8352600193909301929184019184016200031d565b50979650505050505050565b60008060006101a0848603121562000368578283fd5b84601f85011262000377578283fd5b610160620003858162000450565b9085019080868884111562000398578687fd5b865b600b811015620003c557620003af82620002aa565b845260209384019391909101906001016200039a565b50508095505050620003d781620002aa565b61018086015190935090506001600160401b03811115620003f6578182fd5b6200040486828701620002c7565b9150509250925092565b60006020828403121562000420578081fd5b8151801515811462000430578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b03811182821017156200046c57fe5b604052919050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6149ac6200059b60003980610517528061062f528061084c52806109bf52806123e3528061249a5280612529525080610d8c5280611dee52806122ab5250806104cf5280611d1c52806121db525080610c555280611b375280611bd15250806104f35280611a2d525080610c0d528061195b528061210b525080610544528061188952508061092b528061165d52806116f7525080610db05280611204528061129a5250806103cf5280610f525280611f6052508061094f5280611101528061203b525080610c31528061102f52506149ac6000f3fe60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204ccd56ab995869fdbc4ed21f23f9fabaa9ca715a97c76cb58a753eac8de130ff64736f6c63430007060033", + "deployedBytecode": "0x60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204ccd56ab995869fdbc4ed21f23f9fabaa9ca715a97c76cb58a753eac8de130ff64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "approveWETH(address[])": { + "params": { + "transferProxies": "- array of addresses to approve WETH for" + } + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "params": { + "allowFail": "- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch", + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- array of deatails about the purchases (more info in PurchaseDetails struct)" + } + }, + "onERC721Received(address,address,uint256,bytes)": { + "details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "params": { + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- deatails about the purchase (more info in PurchaseDetails struct)" + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "approveWETH(address[])": { + "notice": "approves weth for a list of the addresses" + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "notice": "executes an array of purchases" + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "notice": "executes a single purchase" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 5578, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 16873, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "paused", + "offset": 0, + "slot": "2", + "type": "t_bool" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/RoyaltiesRegistry.json b/projects/hardhat-deploy/deployments/oasys/RoyaltiesRegistry.json new file mode 100644 index 000000000..e6000d204 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/RoyaltiesRegistry.json @@ -0,0 +1,199 @@ +{ + "address": "0x9e8fBE9eAd707e505bCE7AF04E8F323Fc4161506", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "numDeployments": 22, + "solcInputHash": "97f4234afe2a6aef4388d964e224ac4a", + "metadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"},\"BeaconUpgraded(address)\":{\"details\":\"Emitted when the beacon is upgraded.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-sol08/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-sol08/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(\\n Address.isContract(IBeacon(newBeacon).implementation()),\\n \\\"ERC1967: beacon implementation is not a contract\\\"\\n );\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overridden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"license\":\"MIT\"},\"@openzeppelin/contracts-sol08/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n /// @solidity memory-safe-assembly\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405260405162000e3338038062000e33833981016040819052620000269162000414565b828162000036828260006200004d565b50620000449050826200007f565b50505062000547565b6200005883620000f1565b600082511180620000665750805b156200007a5762000078838362000133565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000c160008051602062000dec833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000ee8162000162565b50565b620000fc8162000200565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200015b838360405180606001604052806027815260200162000e0c6027913962000297565b9392505050565b6001600160a01b038116620001cd5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b8060008051602062000dec8339815191525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b6200026f5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001c4565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc620001df565b60606001600160a01b0384163b620003015760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401620001c4565b600080856001600160a01b0316856040516200031e9190620004f4565b600060405180830381855af49150503d80600081146200035b576040519150601f19603f3d011682016040523d82523d6000602084013e62000360565b606091505b509092509050620003738282866200037d565b9695505050505050565b606083156200038e5750816200015b565b8251156200039f5782518084602001fd5b8160405162461bcd60e51b8152600401620001c4919062000512565b80516001600160a01b0381168114620003d357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200040b578181015183820152602001620003f1565b50506000910152565b6000806000606084860312156200042a57600080fd5b6200043584620003bb565b92506200044560208501620003bb565b60408501519092506001600160401b03808211156200046357600080fd5b818601915086601f8301126200047857600080fd5b8151818111156200048d576200048d620003d8565b604051601f8201601f19908116603f01168101908382118183101715620004b857620004b8620003d8565b81604052828152896020848701011115620004d257600080fd5b620004e5836020830160208801620003ee565b80955050505050509250925092565b6000825162000508818460208701620003ee565b9190910192915050565b602081526000825180602084015262000533816040850160208701620003ee565b601f01601f19169190910160400192915050565b61089580620005576000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610727565b610128565b61006b6100a3366004610742565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610727565b6101fd565b34801561010557600080fd5b506100bd61021d565b61011661023e565b6101266101216102ee565b6102f8565b565b61013061031c565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061034f565b50565b61015a61010e565b61016d61031c565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061034f915050565b505050565b6101bf61010e565b60006101d661031c565b6001600160a01b031633036101f2576101ed6102ee565b905090565b6101fa61010e565b90565b61020561031c565b6001600160a01b0316330361015d5761015a8161037a565b600061022761031c565b6001600160a01b031633036101f2576101ed61031c565b61024661031c565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6103ce565b3660008037600080366000845af43d6000803e808015610317573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610358836103f6565b6000825111806103655750805b156101bf576103748383610436565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103a361031c565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610462565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610340565b6103ff8161053a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061045b8383604051806060016040528060278152602001610839602791396105de565b9392505050565b6001600160a01b0381166104de5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102e5565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6001600160a01b0381163b6105b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016102e5565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610501565b60606001600160a01b0384163b61065d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016102e5565b600080856001600160a01b03168560405161067891906107e9565b600060405180830381855af49150503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b50915091506106c88282866106d2565b9695505050505050565b606083156106e157508161045b565b8251156106f15782518084602001fd5b8160405162461bcd60e51b81526004016102e59190610805565b80356001600160a01b038116811461072257600080fd5b919050565b60006020828403121561073957600080fd5b61045b8261070b565b60008060006040848603121561075757600080fd5b6107608461070b565b9250602084013567ffffffffffffffff8082111561077d57600080fd5b818601915086601f83011261079157600080fd5b8135818111156107a057600080fd5b8760208285010111156107b257600080fd5b6020830194508093505050509250925092565b60005b838110156107e05781810151838201526020016107c8565b50506000910152565b600082516107fb8184602087016107c5565b9190910192915050565b60208152600082518060208401526108248160408501602087016107c5565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c237d612a72e85a9456b87073b6e556b1bd4fb18a233025ebd3fcd47377bbfa364736f6c63430008130033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100d9578063f851a440146100f95761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61010e565b005b61006b61010e565b34801561008157600080fd5b5061006b610090366004610727565b610128565b61006b6100a3366004610742565b610165565b3480156100b457600080fd5b506100bd6101cc565b6040516001600160a01b03909116815260200160405180910390f35b3480156100e557600080fd5b5061006b6100f4366004610727565b6101fd565b34801561010557600080fd5b506100bd61021d565b61011661023e565b6101266101216102ee565b6102f8565b565b61013061031c565b6001600160a01b0316330361015d5761015a8160405180602001604052806000815250600061034f565b50565b61015a61010e565b61016d61031c565b6001600160a01b031633036101c4576101bf8383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061034f915050565b505050565b6101bf61010e565b60006101d661031c565b6001600160a01b031633036101f2576101ed6102ee565b905090565b6101fa61010e565b90565b61020561031c565b6001600160a01b0316330361015d5761015a8161037a565b600061022761031c565b6001600160a01b031633036101f2576101ed61031c565b61024661031c565b6001600160a01b031633036101265760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b60006101ed6103ce565b3660008037600080366000845af43d6000803e808015610317573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b610358836103f6565b6000825111806103655750805b156101bf576103748383610436565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103a361031c565b604080516001600160a01b03928316815291841660208301520160405180910390a161015a81610462565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610340565b6103ff8161053a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606061045b8383604051806060016040528060278152602001610839602791396105de565b9392505050565b6001600160a01b0381166104de5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102e5565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b6001600160a01b0381163b6105b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e74726163740000000000000000000000000000000000000060648201526084016102e5565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610501565b60606001600160a01b0384163b61065d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016102e5565b600080856001600160a01b03168560405161067891906107e9565b600060405180830381855af49150503d80600081146106b3576040519150601f19603f3d011682016040523d82523d6000602084013e6106b8565b606091505b50915091506106c88282866106d2565b9695505050505050565b606083156106e157508161045b565b8251156106f15782518084602001fd5b8160405162461bcd60e51b81526004016102e59190610805565b80356001600160a01b038116811461072257600080fd5b919050565b60006020828403121561073957600080fd5b61045b8261070b565b60008060006040848603121561075757600080fd5b6107608461070b565b9250602084013567ffffffffffffffff8082111561077d57600080fd5b818601915086601f83011261079157600080fd5b8135818111156107a057600080fd5b8760208285010111156107b257600080fd5b6020830194508093505050509250925092565b60005b838110156107e05781810151838201526020016107c8565b50506000910152565b600082516107fb8184602087016107c5565b9190910192915050565b60208152600082518060208401526108248160408501602087016107c5565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220c237d612a72e85a9456b87073b6e556b1bd4fb18a233025ebd3fcd47377bbfa364736f6c63430008130033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "events": { + "AdminChanged(address,address)": { + "details": "Emitted when the admin account has changed." + }, + "BeaconUpgraded(address)": { + "details": "Emitted when the beacon is upgraded." + }, + "Upgraded(address)": { + "details": "Emitted when the implementation is upgraded." + } + }, + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/RoyaltiesRegistry_Implementation.json b/projects/hardhat-deploy/deployments/oasys/RoyaltiesRegistry_Implementation.json new file mode 100644 index 000000000..b6532b4bc --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/RoyaltiesRegistry_Implementation.json @@ -0,0 +1,609 @@ +{ + "address": "0xA179564671E04A64fD6142C15c6ea4a75E0016dD", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForContract", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForToken", + "type": "event" + }, + { + "inputs": [], + "name": "__RoyaltiesRegistry_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "clearRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltiesType", + "type": "uint256" + } + ], + "name": "forceSetRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getProvider", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoyalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getRoyaltiesType", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesByToken", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "royaltiesByTokenAndTokenId", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesProviders", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "provider", + "type": "address" + } + ], + "name": "setProviderByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "setRoyaltiesByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "numDeployments": 23, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForToken\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__RoyaltiesRegistry_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"clearRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltiesType\",\"type\":\"uint256\"}],\"name\":\"forceSetRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getRoyalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getRoyaltiesType\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesByToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"royaltiesByTokenAndTokenId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesProviders\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"setProviderByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"setRoyaltiesByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RoyaltiesSetForContract(address,(address,uint96)[])\":{\"details\":\"emitted when royalties set for token in \"},\"RoyaltiesSetForToken(address,uint256,(address,uint96)[])\":{\"details\":\"deprecated\"}},\"kind\":\"dev\",\"methods\":{\"clearRoyaltiesType(address)\":{\"details\":\"clears royalties type for token contract\"},\"forceSetRoyaltiesType(address,uint256)\":{\"details\":\"clears and sets new royalties type for token contract\"},\"getProvider(address)\":{\"details\":\"returns provider address for token contract from royaltiesProviders mapping\"},\"getRoyalties(address,uint256)\":{\"details\":\"returns royalties for token contract and token id\"},\"getRoyaltiesType(address)\":{\"details\":\"returns royalties type for token contract\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setProviderByToken(address,address)\":{\"details\":\"sets external provider for token contract, and royalties type = 4\"},\"setRoyaltiesByToken(address,(address,uint96)[])\":{\"details\":\"sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"royaltiesByToken\":{\"details\":\"stores royalties for token contract, set in setRoyaltiesByToken() method\"},\"royaltiesByTokenAndTokenId\":{\"details\":\"deprecated\"},\"royaltiesProviders\":{\"details\":\"stores external provider and royalties type for token contract\"},\"royaltiesTypesAmount\":{\"details\":\"total amount or supported royalties types\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":\"RoyaltiesRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x7f99c2e0828bbba57e1599d92f1368b62ef0e9cd62bda3c4091e108d1fbc35b6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50611b75806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80639ca7dc7a1161008c578063d836f01311610066578063d836f013146101cb578063f2fde38b146101de578063f39cc706146101f1578063fc73be0014610204576100ea565b80639ca7dc7a14610185578063acf14efb146101a5578063d1da3cce146101b8576100ea565b806355f21eb7116100c857806355f21eb714610135578063715018a61461015557806382b19f121461015d5780638da5cb5b1461017d576100ea565b806305df952f146100ef57806327fff8ab1461011857806336eff6c214610122575b600080fd5b6101026100fd366004611449565b610217565b60405161010f91906118be565b60405180910390f35b61012061022c565b005b6101206101303660046115a9565b6102d6565b610148610143366004611449565b6102f6565b60405161010f9190611830565b610120610315565b61017061016b366004611449565b6103d3565b60405161010f9190611a5f565b6101486103fb565b6101986101933660046115a9565b61040a565b60405161010f919061185d565b6101206101b33660046114b9565b6105a8565b6101026101c6366004611818565b6107e4565b6101206101d9366004611481565b6107f9565b6101206101ec366004611449565b61080e565b6101706101ff366004611449565b610923565b610120610212366004611449565b610935565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102455750610245610966565b80610253575060005460ff16155b61028e5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b12602e913960400191505060405180910390fd5b600054610100900460ff161580156102b9576000805460ff1961ff0019909116610100171660011790555b6102c1610977565b80156102d3576000805461ff00191690555b50565b6102df82610a70565b6102f282826102ed856102f6565b610b46565b5050565b6001600160a01b0381166000908152606760205260409020545b919050565b61031d610b9d565b6001600160a01b031661032e6103fb565b6001600160a01b031614610389576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546103f590610ba1565b92915050565b6033546001600160a01b031690565b6001600160a01b038216600090815260676020526040812054606091819061043182610ba1565b90508061044f576104428683610bdf565b905061044f868284610b46565b80600114156104eb576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156104dd57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161048e565b5050505093505050506103f5565b8060021415610508576104fe8686610ded565b93505050506103f5565b806003141561051b576104fe8686610ead565b806004141561052f576104fe868684611161565b8060051415610542576104fe8686611228565b806006141561058757604080516000808252602082019092529061057c565b610569611400565b8152602001906001900390816105615790505b5093505050506103f5565b60405162461bcd60e51b815260040161059f906118de565b60405180910390fd5b6105b182610a70565b6001600160a01b03821660009081526067602052604081208190556105da908390600190610b46565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106086001830182611417565b505060005b82518110156107625760006001600160a01b031683828151811061062d57fe5b6020026020010151600001516001600160a01b031614156106605760405162461bcd60e51b815260040161059f90611915565b82818151811061066c57fe5b6020026020010151602001516001600160601b0316600014156106a15760405162461bcd60e51b815260040161059f906119e2565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106106d557fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061073e57fe5b6020026020010151602001516001600160601b03168201915080600101905061060d565b5061271081106107845760405162461bcd60e51b815260040161059f90611961565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906107d790859061185d565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b61080282610a70565b6102f282600483610b46565b610816610b9d565b6001600160a01b03166108276103fb565b6001600160a01b031614610882576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166108c75760405162461bcd60e51b8152600401808060200182810382526026815260200180611aec6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b61093e81610a70565b610947816102f6565b6001600160a01b03918216600090815260676020526040902091169055565b6000610971306112f2565b15905090565b600054610100900460ff16806109905750610990610966565b8061099e575060005460ff16155b6109d95760405162461bcd60e51b815260040180806020018281038252602e815260200180611b12602e913960400191505060405180910390fd5b600054610100900460ff16158015610a04576000805460ff1961ff0019909116610100171660011790555b6000610a0e610b9d565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d3576000805461ff001916905550565b610a78610b9d565b6001600160a01b0316610a896103fb565b6001600160a01b031614158015610b295750610aa3610b9d565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190611465565b6001600160a01b031614155b156102d35760405162461bcd60e51b815260040161059f906119ab565b600082118015610b57575060068211155b610b735760405162461bcd60e51b815260040161059f90611a32565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610bd657806101000360020a8381610bbe57fe5b0460011415610bce579050610310565b600101610ba6565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610c159063656cb66560e11b906004016118c9565b60206040518083038186803b158015610c2d57600080fd5b505afa925050508015610c5d575060408051601f3d908101601f19168201909252610c5a918101906117f8565b60015b610c6657610c78565b8015610c765760029150506103f5565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610cab90632dde656160e21b906004016118c9565b60206040518083038186803b158015610cc357600080fd5b505afa925050508015610cf3575060408051601f3d908101601f19168201909252610cf0918101906117f8565b60015b610cfc57610d0e565b8015610d0c5760039150506103f5565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d419063152a902d60e11b906004016118c9565b60206040518083038186803b158015610d5957600080fd5b505afa925050508015610d89575060408051601f3d908101601f19168201909252610d86918101906117f8565b60015b610d9257610da4565b8015610da25760059150506103f5565b505b6001600160a01b03821615610dbb575060046103f5565b6001600160a01b03831660009081526066602052604090205460ff1615610de4575060016103f5565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610e1c908590600401611a5f565b60006040518083038186803b158015610e3457600080fd5b505afa925050508015610e6957506040513d6000823e601f3d908101601f19168201604052610e66919081019061169a565b60015b610ea6576040805160008082526020820190925290610e9e565b610e8b611400565b815260200190600190039081610e835790505b5090506103f5565b90506103f5565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610ee0908790600401611a5f565b60006040518083038186803b158015610ef857600080fd5b505afa925050508015610f2d57506040513d6000823e601f3d908101601f19168201604052610f2a9190810190611601565b60015b610f6c576040805160008082526020820190925290610f62565b610f4f611400565b815260200190600190039081610f475790505b50925050506103f5565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f90610f9d908890600401611a5f565b60006040518083038186803b158015610fb557600080fd5b505afa925050508015610fea57506040513d6000823e601f3d908101601f19168201604052610fe79190810190611774565b60015b61102957604080516000808252602082019092529061057c565b61100c611400565b8152602001906001900390816110045790505093505050506103f5565b9050815181511461106f57604080516000808252602082019092529061057c565b611052611400565b81526020019060019003908161104a5790505093505050506103f5565b6000815167ffffffffffffffff8111801561108957600080fd5b506040519080825280602002602001820160405280156110c357816020015b6110b0611400565b8152602001906001900390816110a85790505b50905060005b8251811015611156578281815181106110de57fe5b60200260200101518282815181106110f257fe5b6020026020010151602001906001600160601b031690816001600160601b03168152505083818151811061112257fe5b602002602001015182828151811061113657fe5b60209081029190910101516001600160a01b0390911690526001016110c9565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906111929087908790600401611844565b600060405180830381600087803b1580156111ac57600080fd5b505af19250505080156111e157506040513d6000823e601f3d908101601f191682016040526111de919081019061169a565b60015b61121e576040805160008082526020820190925290611216565b611203611400565b8152602001906001900390816111fb5790505b509050611221565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061125c908590620f424090600401611a68565b604080518083038186803b15801561127357600080fd5b505afa9250505080156112a3575060408051601f3d908101601f191682019092526112a0918101906115d4565b60015b6112df576040805160008082526020820190925290610e9e565b6112c5611400565b8152602001906001900390816112bd5790505090506103f5565b6112e982826112f8565b925050506103f5565b3b151590565b606080826113075790506103f5565b6000620f42406127108502049050612710811061136b576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b611388611400565b81526020019060019003908161138057905050915084826000815181106113ab57fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106113dd57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906102d391905b808211156114455760008155600101611431565b5090565b60006020828403121561145a578081fd5b813561122181611ac1565b600060208284031215611476578081fd5b815161122181611ac1565b60008060408385031215611493578081fd5b823561149e81611ac1565b915060208301356114ae81611ac1565b809150509250929050565b60008060408084860312156114cc578283fd5b83356114d781611ac1565b925060208481013567ffffffffffffffff808211156114f4578485fd5b818701915087601f830112611507578485fd5b813561151a61151582611aa3565b611a7f565b81815284810190848601878402860187018c1015611536578889fd5b8895505b838610156115975787818d031215611550578889fd5b8751888101818110878211171561156357fe5b8952813561157081611ac1565b81528188013561157f81611ad6565b8189015283526001959095019491860191870161153a565b50809750505050505050509250929050565b600080604083850312156115bb578182fd5b82356115c681611ac1565b946020939093013593505050565b600080604083850312156115e6578182fd5b82516115f181611ac1565b6020939093015192949293505050565b60006020808385031215611613578182fd5b825167ffffffffffffffff811115611629578283fd5b8301601f81018513611639578283fd5b805161164761151582611aa3565b8181528381019083850185840285018601891015611663578687fd5b8694505b8385101561168e57805161167a81611ac1565b835260019490940193918501918501611667565b50979650505050505050565b600060208083850312156116ac578182fd5b825167ffffffffffffffff808211156116c3578384fd5b818501915085601f8301126116d6578384fd5b81516116e461151582611aa3565b818152848101908486016040808502870188018b1015611702578889fd5b8896505b848710156117655780828c03121561171c578889fd5b8051818101818110888211171561172f57fe5b8252825161173c81611ac1565b81528289015161174b81611ad6565b818a01528452600196909601959287019290810190611706565b50909998505050505050505050565b60006020808385031215611786578182fd5b825167ffffffffffffffff81111561179c578283fd5b8301601f810185136117ac578283fd5b80516117ba61151582611aa3565b81815283810190838501858402850186018910156117d6578687fd5b8694505b8385101561168e5780518352600194909401939185019185016117da565b600060208284031215611809578081fd5b81518015158114611221578182fd5b600060208284031215611829578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b828110156118b157815180516001600160a01b031685528601516001600160601b031686850152928401929085019060010161187a565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611a9b57fe5b604052919050565b600067ffffffffffffffff821115611ab757fe5b5060209081020190565b6001600160a01b03811681146102d357600080fd5b6001600160601b03811681146102d357600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220a8d9a95d0e54d9cd391a0298f2e795077d686930699f723af9bddda2b85bab9c64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80639ca7dc7a1161008c578063d836f01311610066578063d836f013146101cb578063f2fde38b146101de578063f39cc706146101f1578063fc73be0014610204576100ea565b80639ca7dc7a14610185578063acf14efb146101a5578063d1da3cce146101b8576100ea565b806355f21eb7116100c857806355f21eb714610135578063715018a61461015557806382b19f121461015d5780638da5cb5b1461017d576100ea565b806305df952f146100ef57806327fff8ab1461011857806336eff6c214610122575b600080fd5b6101026100fd366004611449565b610217565b60405161010f91906118be565b60405180910390f35b61012061022c565b005b6101206101303660046115a9565b6102d6565b610148610143366004611449565b6102f6565b60405161010f9190611830565b610120610315565b61017061016b366004611449565b6103d3565b60405161010f9190611a5f565b6101486103fb565b6101986101933660046115a9565b61040a565b60405161010f919061185d565b6101206101b33660046114b9565b6105a8565b6101026101c6366004611818565b6107e4565b6101206101d9366004611481565b6107f9565b6101206101ec366004611449565b61080e565b6101706101ff366004611449565b610923565b610120610212366004611449565b610935565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102455750610245610966565b80610253575060005460ff16155b61028e5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b12602e913960400191505060405180910390fd5b600054610100900460ff161580156102b9576000805460ff1961ff0019909116610100171660011790555b6102c1610977565b80156102d3576000805461ff00191690555b50565b6102df82610a70565b6102f282826102ed856102f6565b610b46565b5050565b6001600160a01b0381166000908152606760205260409020545b919050565b61031d610b9d565b6001600160a01b031661032e6103fb565b6001600160a01b031614610389576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546103f590610ba1565b92915050565b6033546001600160a01b031690565b6001600160a01b038216600090815260676020526040812054606091819061043182610ba1565b90508061044f576104428683610bdf565b905061044f868284610b46565b80600114156104eb576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156104dd57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161048e565b5050505093505050506103f5565b8060021415610508576104fe8686610ded565b93505050506103f5565b806003141561051b576104fe8686610ead565b806004141561052f576104fe868684611161565b8060051415610542576104fe8686611228565b806006141561058757604080516000808252602082019092529061057c565b610569611400565b8152602001906001900390816105615790505b5093505050506103f5565b60405162461bcd60e51b815260040161059f906118de565b60405180910390fd5b6105b182610a70565b6001600160a01b03821660009081526067602052604081208190556105da908390600190610b46565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106086001830182611417565b505060005b82518110156107625760006001600160a01b031683828151811061062d57fe5b6020026020010151600001516001600160a01b031614156106605760405162461bcd60e51b815260040161059f90611915565b82818151811061066c57fe5b6020026020010151602001516001600160601b0316600014156106a15760405162461bcd60e51b815260040161059f906119e2565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106106d557fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061073e57fe5b6020026020010151602001516001600160601b03168201915080600101905061060d565b5061271081106107845760405162461bcd60e51b815260040161059f90611961565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906107d790859061185d565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b61080282610a70565b6102f282600483610b46565b610816610b9d565b6001600160a01b03166108276103fb565b6001600160a01b031614610882576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166108c75760405162461bcd60e51b8152600401808060200182810382526026815260200180611aec6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b61093e81610a70565b610947816102f6565b6001600160a01b03918216600090815260676020526040902091169055565b6000610971306112f2565b15905090565b600054610100900460ff16806109905750610990610966565b8061099e575060005460ff16155b6109d95760405162461bcd60e51b815260040180806020018281038252602e815260200180611b12602e913960400191505060405180910390fd5b600054610100900460ff16158015610a04576000805460ff1961ff0019909116610100171660011790555b6000610a0e610b9d565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d3576000805461ff001916905550565b610a78610b9d565b6001600160a01b0316610a896103fb565b6001600160a01b031614158015610b295750610aa3610b9d565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190611465565b6001600160a01b031614155b156102d35760405162461bcd60e51b815260040161059f906119ab565b600082118015610b57575060068211155b610b735760405162461bcd60e51b815260040161059f90611a32565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610bd657806101000360020a8381610bbe57fe5b0460011415610bce579050610310565b600101610ba6565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610c159063656cb66560e11b906004016118c9565b60206040518083038186803b158015610c2d57600080fd5b505afa925050508015610c5d575060408051601f3d908101601f19168201909252610c5a918101906117f8565b60015b610c6657610c78565b8015610c765760029150506103f5565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610cab90632dde656160e21b906004016118c9565b60206040518083038186803b158015610cc357600080fd5b505afa925050508015610cf3575060408051601f3d908101601f19168201909252610cf0918101906117f8565b60015b610cfc57610d0e565b8015610d0c5760039150506103f5565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d419063152a902d60e11b906004016118c9565b60206040518083038186803b158015610d5957600080fd5b505afa925050508015610d89575060408051601f3d908101601f19168201909252610d86918101906117f8565b60015b610d9257610da4565b8015610da25760059150506103f5565b505b6001600160a01b03821615610dbb575060046103f5565b6001600160a01b03831660009081526066602052604090205460ff1615610de4575060016103f5565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610e1c908590600401611a5f565b60006040518083038186803b158015610e3457600080fd5b505afa925050508015610e6957506040513d6000823e601f3d908101601f19168201604052610e66919081019061169a565b60015b610ea6576040805160008082526020820190925290610e9e565b610e8b611400565b815260200190600190039081610e835790505b5090506103f5565b90506103f5565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610ee0908790600401611a5f565b60006040518083038186803b158015610ef857600080fd5b505afa925050508015610f2d57506040513d6000823e601f3d908101601f19168201604052610f2a9190810190611601565b60015b610f6c576040805160008082526020820190925290610f62565b610f4f611400565b815260200190600190039081610f475790505b50925050506103f5565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f90610f9d908890600401611a5f565b60006040518083038186803b158015610fb557600080fd5b505afa925050508015610fea57506040513d6000823e601f3d908101601f19168201604052610fe79190810190611774565b60015b61102957604080516000808252602082019092529061057c565b61100c611400565b8152602001906001900390816110045790505093505050506103f5565b9050815181511461106f57604080516000808252602082019092529061057c565b611052611400565b81526020019060019003908161104a5790505093505050506103f5565b6000815167ffffffffffffffff8111801561108957600080fd5b506040519080825280602002602001820160405280156110c357816020015b6110b0611400565b8152602001906001900390816110a85790505b50905060005b8251811015611156578281815181106110de57fe5b60200260200101518282815181106110f257fe5b6020026020010151602001906001600160601b031690816001600160601b03168152505083818151811061112257fe5b602002602001015182828151811061113657fe5b60209081029190910101516001600160a01b0390911690526001016110c9565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906111929087908790600401611844565b600060405180830381600087803b1580156111ac57600080fd5b505af19250505080156111e157506040513d6000823e601f3d908101601f191682016040526111de919081019061169a565b60015b61121e576040805160008082526020820190925290611216565b611203611400565b8152602001906001900390816111fb5790505b509050611221565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061125c908590620f424090600401611a68565b604080518083038186803b15801561127357600080fd5b505afa9250505080156112a3575060408051601f3d908101601f191682019092526112a0918101906115d4565b60015b6112df576040805160008082526020820190925290610e9e565b6112c5611400565b8152602001906001900390816112bd5790505090506103f5565b6112e982826112f8565b925050506103f5565b3b151590565b606080826113075790506103f5565b6000620f42406127108502049050612710811061136b576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b611388611400565b81526020019060019003908161138057905050915084826000815181106113ab57fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106113dd57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906102d391905b808211156114455760008155600101611431565b5090565b60006020828403121561145a578081fd5b813561122181611ac1565b600060208284031215611476578081fd5b815161122181611ac1565b60008060408385031215611493578081fd5b823561149e81611ac1565b915060208301356114ae81611ac1565b809150509250929050565b60008060408084860312156114cc578283fd5b83356114d781611ac1565b925060208481013567ffffffffffffffff808211156114f4578485fd5b818701915087601f830112611507578485fd5b813561151a61151582611aa3565b611a7f565b81815284810190848601878402860187018c1015611536578889fd5b8895505b838610156115975787818d031215611550578889fd5b8751888101818110878211171561156357fe5b8952813561157081611ac1565b81528188013561157f81611ad6565b8189015283526001959095019491860191870161153a565b50809750505050505050509250929050565b600080604083850312156115bb578182fd5b82356115c681611ac1565b946020939093013593505050565b600080604083850312156115e6578182fd5b82516115f181611ac1565b6020939093015192949293505050565b60006020808385031215611613578182fd5b825167ffffffffffffffff811115611629578283fd5b8301601f81018513611639578283fd5b805161164761151582611aa3565b8181528381019083850185840285018601891015611663578687fd5b8694505b8385101561168e57805161167a81611ac1565b835260019490940193918501918501611667565b50979650505050505050565b600060208083850312156116ac578182fd5b825167ffffffffffffffff808211156116c3578384fd5b818501915085601f8301126116d6578384fd5b81516116e461151582611aa3565b818152848101908486016040808502870188018b1015611702578889fd5b8896505b848710156117655780828c03121561171c578889fd5b8051818101818110888211171561172f57fe5b8252825161173c81611ac1565b81528289015161174b81611ad6565b818a01528452600196909601959287019290810190611706565b50909998505050505050505050565b60006020808385031215611786578182fd5b825167ffffffffffffffff81111561179c578283fd5b8301601f810185136117ac578283fd5b80516117ba61151582611aa3565b81815283810190838501858402850186018910156117d6578687fd5b8694505b8385101561168e5780518352600194909401939185019185016117da565b600060208284031215611809578081fd5b81518015158114611221578182fd5b600060208284031215611829578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b828110156118b157815180516001600160a01b031685528601516001600160601b031686850152928401929085019060010161187a565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611a9b57fe5b604052919050565b600067ffffffffffffffff821115611ab757fe5b5060209081020190565b6001600160a01b03811681146102d357600080fd5b6001600160601b03811681146102d357600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220a8d9a95d0e54d9cd391a0298f2e795077d686930699f723af9bddda2b85bab9c64736f6c63430007060033", + "devdoc": { + "events": { + "RoyaltiesSetForContract(address,(address,uint96)[])": { + "details": "emitted when royalties set for token in " + }, + "RoyaltiesSetForToken(address,uint256,(address,uint96)[])": { + "details": "deprecated" + } + }, + "kind": "dev", + "methods": { + "clearRoyaltiesType(address)": { + "details": "clears royalties type for token contract" + }, + "forceSetRoyaltiesType(address,uint256)": { + "details": "clears and sets new royalties type for token contract" + }, + "getProvider(address)": { + "details": "returns provider address for token contract from royaltiesProviders mapping" + }, + "getRoyalties(address,uint256)": { + "details": "returns royalties for token contract and token id" + }, + "getRoyaltiesType(address)": { + "details": "returns royalties type for token contract" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "setProviderByToken(address,address)": { + "details": "sets external provider for token contract, and royalties type = 4" + }, + "setRoyaltiesByToken(address,(address,uint96)[])": { + "details": "sets royalties for token contract in royaltiesByToken mapping and royalties type = 1" + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "stateVariables": { + "royaltiesByToken": { + "details": "stores royalties for token contract, set in setRoyaltiesByToken() method" + }, + "royaltiesByTokenAndTokenId": { + "details": "deprecated" + }, + "royaltiesProviders": { + "details": "stores external provider and royalties type for token contract" + }, + "royaltiesTypesAmount": { + "details": "total amount or supported royalties types" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19351, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesByTokenAndTokenId", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes32,t_struct(RoyaltiesSet)19346_storage)" + }, + { + "astId": 19356, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesByToken", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_struct(RoyaltiesSet)19346_storage)" + }, + { + "astId": 19361, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesProviders", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 20141, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "104", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)18638_storage)dyn_storage": { + "base": "t_struct(Part)18638_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)46_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(RoyaltiesSet)19346_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RoyaltiesRegistry.RoyaltiesSet)", + "numberOfBytes": "32", + "value": "t_struct(RoyaltiesSet)19346_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_struct(RoyaltiesSet)19346_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct RoyaltiesRegistry.RoyaltiesSet)", + "numberOfBytes": "32", + "value": "t_struct(RoyaltiesSet)19346_storage" + }, + "t_struct(Part)18638_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 18635, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 18637, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoyaltiesSet)19346_storage": { + "encoding": "inplace", + "label": "struct RoyaltiesRegistry.RoyaltiesSet", + "members": [ + { + "astId": 19342, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 19345, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royalties", + "offset": 0, + "slot": "1", + "type": "t_array(t_struct(Part)18638_storage)dyn_storage" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/TransferProxy.json b/projects/hardhat-deploy/deployments/oasys/TransferProxy.json new file mode 100644 index 000000000..b36a61da4 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/TransferProxy.json @@ -0,0 +1,276 @@ +{ + "address": "0x9ABc3Ce3a35873274dE3B8b6c15D3BD1F6F2Ec8D", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__TransferProxy_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC1155Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "erc1155safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC721Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "erc721safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "numDeployments": 21, + "solcInputHash": "6bd3e189b416974652fe89dcdf00f7eb", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"erc1155safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC721Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"erc721safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":\"TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x87cd179c900495ee44c1b9c7fa57f4da0228217d78792bd6d6a6fde6c32be2b2\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610ac8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100d65780639c1c2ee9146100fc578063ac8a584a14610199578063f2fde38b146101bf578063f709b906146101e557610093565b80632ff26a0a14610098578063495edf86146100a2578063715018a6146100aa5780638da5cb5b146100b2575b600080fd5b6100a0610221565b005b6100a06102d3565b6100a0610368565b6100ba610414565b604080516001600160a01b039092168252519081900360200190f35b6100a0600480360360208110156100ec57600080fd5b50356001600160a01b0316610423565b6100a0600480360360c081101561011257600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561015a57600080fd5b82018360208201111561016c57600080fd5b8035906020019184600183028401116401000000008311171561018e57600080fd5b5090925090506104a9565b6100a0600480360360208110156101af57600080fd5b50356001600160a01b03166105d2565b6100a0600480360360208110156101d557600080fd5b50356001600160a01b0316610655565b6100a0600480360360808110156101fb57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610758565b600054610100900460ff168061023a575061023a610842565b80610248575060005460ff16155b6102835760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102ae576000805460ff1961ff0019909116610100171660011790555b6102b6610853565b6102be6108f3565b80156102d0576000805461ff00191690555b50565b600054610100900460ff16806102ec57506102ec610842565b806102fa575060005460ff16155b6103355760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610360576000805460ff1961ff0019909116610100171660011790555b6102be610221565b6103706109ec565b6001600160a01b0316610381610414565b6001600160a01b0316146103ca576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61042b6109ec565b6001600160a01b031661043c610414565b6001600160a01b031614610485576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006104b56109ec565b6001600160a01b0316815260208101919091526040016000205460ff1661050d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156105b157600080fd5b505af11580156105c5573d6000803e3d6000fd5b5050505050505050505050565b6105da6109ec565b6001600160a01b03166105eb610414565b6001600160a01b031614610634576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61065d6109ec565b6001600160a01b031661066e610414565b6001600160a01b0316146106b7576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b0381166106fc5760405162461bcd60e51b81526004018080602001828103825260268152602001806109f76026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b606560006107646109ec565b6001600160a01b0316815260208101919091526040016000205460ff166107bc5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b5050505050505050565b600061084d306109f0565b15905090565b600054610100900460ff168061086c575061086c610842565b8061087a575060005460ff16155b6108b55760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102be576000805460ff1961ff00199091166101001716600117905580156102d0576000805461ff001916905550565b600054610100900460ff168061090c575061090c610842565b8061091a575060005460ff16155b6109555760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610980576000805460ff1961ff0019909116610100171660011790555b600061098a6109ec565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d0576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212201ac6cdd7d3dfc55f32f10d13fb14c86d97528121944756ef32d89fb364459cdf64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100d65780639c1c2ee9146100fc578063ac8a584a14610199578063f2fde38b146101bf578063f709b906146101e557610093565b80632ff26a0a14610098578063495edf86146100a2578063715018a6146100aa5780638da5cb5b146100b2575b600080fd5b6100a0610221565b005b6100a06102d3565b6100a0610368565b6100ba610414565b604080516001600160a01b039092168252519081900360200190f35b6100a0600480360360208110156100ec57600080fd5b50356001600160a01b0316610423565b6100a0600480360360c081101561011257600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561015a57600080fd5b82018360208201111561016c57600080fd5b8035906020019184600183028401116401000000008311171561018e57600080fd5b5090925090506104a9565b6100a0600480360360208110156101af57600080fd5b50356001600160a01b03166105d2565b6100a0600480360360208110156101d557600080fd5b50356001600160a01b0316610655565b6100a0600480360360808110156101fb57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610758565b600054610100900460ff168061023a575061023a610842565b80610248575060005460ff16155b6102835760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102ae576000805460ff1961ff0019909116610100171660011790555b6102b6610853565b6102be6108f3565b80156102d0576000805461ff00191690555b50565b600054610100900460ff16806102ec57506102ec610842565b806102fa575060005460ff16155b6103355760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610360576000805460ff1961ff0019909116610100171660011790555b6102be610221565b6103706109ec565b6001600160a01b0316610381610414565b6001600160a01b0316146103ca576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61042b6109ec565b6001600160a01b031661043c610414565b6001600160a01b031614610485576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006104b56109ec565b6001600160a01b0316815260208101919091526040016000205460ff1661050d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156105b157600080fd5b505af11580156105c5573d6000803e3d6000fd5b5050505050505050505050565b6105da6109ec565b6001600160a01b03166105eb610414565b6001600160a01b031614610634576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61065d6109ec565b6001600160a01b031661066e610414565b6001600160a01b0316146106b7576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b0381166106fc5760405162461bcd60e51b81526004018080602001828103825260268152602001806109f76026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b606560006107646109ec565b6001600160a01b0316815260208101919091526040016000205460ff166107bc5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b5050505050505050565b600061084d306109f0565b15905090565b600054610100900460ff168061086c575061086c610842565b8061087a575060005460ff16155b6108b55760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102be576000805460ff1961ff00199091166101001716600117905580156102d0576000805461ff001916905550565b600054610100900460ff168061090c575061090c610842565b8061091a575060005460ff16155b6109555760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610980576000805460ff1961ff0019909116610100171660011790555b600061098a6109ec565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d0576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212201ac6cdd7d3dfc55f32f10d13fb14c86d97528121944756ef32d89fb364459cdf64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19253, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/solcInputs/5d7ce4cc295dc1f452c8f0c73dceccfb.json b/projects/hardhat-deploy/deployments/oasys/solcInputs/5d7ce4cc295dc1f452c8f0c73dceccfb.json new file mode 100644 index 000000000..d88af1813 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/solcInputs/5d7ce4cc295dc1f452c8f0c73dceccfb.json @@ -0,0 +1,605 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal initializer {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712Upgradeable is Initializable {\n /* solhint-disable var-name-mixedcase */\n bytes32 private _HASHED_NAME;\n bytes32 private _HASHED_VERSION;\n bytes32 private constant _TYPE_HASH = keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n function __EIP712_init(string memory name, string memory version) internal initializer {\n __EIP712_init_unchained(name, version);\n }\n\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\n }\n\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\n return keccak256(\n abi.encode(\n typeHash,\n name,\n version,\n _getChainId(),\n address(this)\n )\n );\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n }\n\n function _getChainId() private view returns (uint256 chainId) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n\n /**\n * @dev The hash of the name parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712NameHash() internal virtual view returns (bytes32) {\n return _HASHED_NAME;\n }\n\n /**\n * @dev The hash of the version parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\n return _HASHED_VERSION;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165Upgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n function __ERC165_init() internal initializer {\n __ERC165_init_unchained();\n }\n\n function __ERC165_init_unchained() internal initializer {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165Upgradeable {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\n// solhint-disable-next-line compiler-version\npragma solidity >=0.4.24 <0.8.0;\n\nimport \"../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n */\nabstract contract Initializable {\n\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(_initializing || _isConstructor() || !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /// @dev Returns true if and only if the function is running in the constructor\n function _isConstructor() private view returns (bool) {\n return !AddressUpgradeable.isContract(address(this));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155HolderUpgradeable is Initializable, ERC1155ReceiverUpgradeable {\n function __ERC1155Holder_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ERC1155Holder_init_unchained();\n }\n\n function __ERC1155Holder_init_unchained() internal initializer {\n }\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\n function __ERC1155Receiver_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n }\n\n function __ERC1155Receiver_init_unchained() internal initializer {\n _registerInterface(\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\n );\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\nimport \"./IERC1155MetadataURIUpgradeable.sol\";\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC20Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable {\n using SafeMathUpgradeable for uint256;\n\n mapping (address => uint256) private _balances;\n\n mapping (address => mapping (address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n * a default value of 18.\n *\n * To select a different value for {decimals}, use {_setupDecimals}.\n *\n * All three of these values are immutable: they can only be set once during\n * construction.\n */\n function __ERC20_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC20_init_unchained(name_, symbol_);\n }\n\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n _decimals = 18;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n * called.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return _decimals;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * Requirements:\n *\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n * - the caller must have allowance for ``sender``'s tokens of at least\n * `amount`.\n */\n function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n /**\n * @dev Moves tokens `amount` from `sender` to `recipient`.\n *\n * This is internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: mint to the zero address\");\n\n _beforeTokenTransfer(address(0), account, amount);\n\n _totalSupply = _totalSupply.add(amount);\n _balances[account] = _balances[account].add(amount);\n emit Transfer(address(0), account, amount);\n }\n\n /**\n * @dev Destroys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: burn from the zero address\");\n\n _beforeTokenTransfer(account, address(0), amount);\n\n _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n _totalSupply = _totalSupply.sub(amount);\n emit Transfer(account, address(0), amount);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(address owner, address spender, uint256 amount) internal virtual {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Sets {decimals} to a value other than the default one of 18.\n *\n * WARNING: This function should only be called from the constructor. Most\n * applications that interact with token contracts will not expect\n * {decimals} to ever change, and may work incorrectly if it does.\n */\n function _setupDecimals(uint8 decimals_) internal virtual {\n _decimals = decimals_;\n }\n\n /**\n * @dev Hook that is called before any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * will be to transferred to `to`.\n * - when `from` is zero, `amount` tokens will be minted for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n uint256[44] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20Upgradeable {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721HolderUpgradeable is Initializable, IERC721ReceiverUpgradeable {\n function __ERC721Holder_init() internal initializer {\n __ERC721Holder_init_unchained();\n }\n\n function __ERC721Holder_init_unchained() internal initializer {\n }\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC721Upgradeable.sol\";\nimport \"./IERC721MetadataUpgradeable.sol\";\nimport \"./IERC721EnumerableUpgradeable.sol\";\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../utils/EnumerableSetUpgradeable.sol\";\nimport \"../../utils/EnumerableMapUpgradeable.sol\";\nimport \"../../utils/StringsUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) private _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap private _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits an {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[41] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721EnumerableUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the total amount of tokens stored by the contract.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);\n\n /**\n * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n * Use along with {totalSupply} to enumerate all tokens.\n */\n function tokenByIndex(uint256 index) external view returns (uint256);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721ReceiverUpgradeable {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the caller.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool _approved) external;\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal initializer {\n __Context_init_unchained();\n }\n\n function __Context_init_unchained() internal initializer {\n }\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing an enumerable variant of Solidity's\n * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]\n * type.\n *\n * Maps have the following properties:\n *\n * - Entries are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Entries are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableMap for EnumerableMap.UintToAddressMap;\n *\n * // Declare a set state variable\n * EnumerableMap.UintToAddressMap private myMap;\n * }\n * ```\n *\n * As of v3.0.0, only maps of type `uint256 -> address` (`UintToAddressMap`) are\n * supported.\n */\nlibrary EnumerableMapUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Map type with\n // bytes32 keys and values.\n // The Map implementation uses private functions, and user-facing\n // implementations (such as Uint256ToAddressMap) are just wrappers around\n // the underlying Map.\n // This means that we can only create new EnumerableMaps for types that fit\n // in bytes32.\n\n struct MapEntry {\n bytes32 _key;\n bytes32 _value;\n }\n\n struct Map {\n // Storage of map keys and values\n MapEntry[] _entries;\n\n // Position of the entry defined by a key in the `entries` array, plus 1\n // because index 0 means a key is not in the map.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex == 0) { // Equivalent to !contains(map, key)\n map._entries.push(MapEntry({ _key: key, _value: value }));\n // The entry is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n map._indexes[key] = map._entries.length;\n return true;\n } else {\n map._entries[keyIndex - 1]._value = value;\n return false;\n }\n }\n\n /**\n * @dev Removes a key-value pair from a map. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function _remove(Map storage map, bytes32 key) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex != 0) { // Equivalent to contains(map, key)\n // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one\n // in the array, and then remove the last entry (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = keyIndex - 1;\n uint256 lastIndex = map._entries.length - 1;\n\n // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n MapEntry storage lastEntry = map._entries[lastIndex];\n\n // Move the last entry to the index where the entry to delete is\n map._entries[toDeleteIndex] = lastEntry;\n // Update the index for the moved entry\n map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved entry was stored\n map._entries.pop();\n\n // Delete the index for the deleted slot\n delete map._indexes[key];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function _contains(Map storage map, bytes32 key) private view returns (bool) {\n return map._indexes[key] != 0;\n }\n\n /**\n * @dev Returns the number of key-value pairs in the map. O(1).\n */\n function _length(Map storage map) private view returns (uint256) {\n return map._entries.length;\n }\n\n /**\n * @dev Returns the key-value pair stored at position `index` in the map. O(1).\n *\n * Note that there are no guarantees on the ordering of entries inside the\n * array, and it may change when more entries are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {\n require(map._entries.length > index, \"EnumerableMap: index out of bounds\");\n\n MapEntry storage entry = map._entries[index];\n return (entry._key, entry._value);\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n */\n function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {\n uint256 keyIndex = map._indexes[key];\n if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)\n return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function _get(Map storage map, bytes32 key) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, \"EnumerableMap: nonexistent key\"); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n /**\n * @dev Same as {_get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {_tryGet}.\n */\n function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n // UintToAddressMap\n\n struct UintToAddressMap {\n Map _inner;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {\n return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {\n return _remove(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {\n return _contains(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns the number of elements in the map. O(1).\n */\n function length(UintToAddressMap storage map) internal view returns (uint256) {\n return _length(map._inner);\n }\n\n /**\n * @dev Returns the element stored at position `index` in the set. O(1).\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {\n (bytes32 key, bytes32 value) = _at(map._inner, index);\n return (uint256(key), address(uint160(uint256(value))));\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n *\n * _Available since v3.4._\n */\n function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {\n (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));\n return (success, address(uint160(uint256(value))));\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key)))));\n }\n\n /**\n * @dev Same as {get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryGet}.\n */\n function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n */\nlibrary EnumerableSetUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) { // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n bytes32 lastvalue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastvalue;\n // Update the index for the moved value\n set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n require(set._values.length > index, \"EnumerableSet: index out of bounds\");\n return set._values[index];\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuardUpgradeable is Initializable {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n function __ReentrancyGuard_init() internal initializer {\n __ReentrancyGuard_init_unchained();\n }\n\n function __ReentrancyGuard_init_unchained() internal initializer {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n // On the first call to nonReentrant, _notEntered will be true\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary StringsUpgradeable {\n /**\n * @dev Converts a `uint256` to its ASCII `string` representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n uint256 index = digits - 1;\n temp = value;\n while (temp != 0) {\n buffer[index--] = bytes1(uint8(48 + temp % 10));\n temp /= 10;\n }\n return string(buffer);\n }\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" + }, + "@openzeppelin/contracts/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165 is IERC165 {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n constructor () internal {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "@openzeppelin/contracts/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts/math/SafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\nimport \"./IBeacon.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy {\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) public payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _setBeacon(beacon, data);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address beacon) {\n bytes32 slot = _BEACON_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n beacon := sload(slot)\n }\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_beacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n require(\n Address.isContract(beacon),\n \"BeaconProxy: beacon is not a contract\"\n );\n require(\n Address.isContract(IBeacon(beacon).implementation()),\n \"BeaconProxy: beacon implementation is not a contract\"\n );\n bytes32 slot = _BEACON_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, beacon)\n }\n\n if (data.length > 0) {\n Address.functionDelegateCall(_implementation(), data, \"BeaconProxy: function call failed\");\n }\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "@openzeppelin/contracts/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../access/Ownable.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n constructor(address implementation_) public {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155.sol\";\nimport \"./IERC1155MetadataURI.sol\";\nimport \"./IERC1155Receiver.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../introspection/ERC165.sol\";\nimport \"../../math/SafeMath.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {\n using SafeMath for uint256;\n using Address for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n constructor (string memory uri_) public {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Receiver.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155Holder is ERC1155Receiver {\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Receiver.sol\";\nimport \"../../introspection/ERC165.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\n constructor() internal {\n _registerInterface(\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\n );\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155 is IERC165 {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURI is IERC1155 {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155Receiver is IERC165 {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/ERC721Holder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721Receiver.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721Holder is IERC721Receiver {\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Pausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n bool private _paused;\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n constructor () internal {\n _paused = false;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n require(!paused(), \"Pausable: paused\");\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n require(paused(), \"Pausable: not paused\");\n _;\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" + }, + "@rarible/auction/contracts/1155/AuctionHouse1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase1155.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse1155 is ERC1155HolderUpgradeable, AuctionHouseBase1155 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse1155_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse1155_init_unchained();\n }\n\n function __AuctionHouse1155_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint96 _sellTokenValue,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC1155 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(_sellTokenValue > 0, \"incorrect _sellTokenValue\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenValue,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n\n transferNFT(\n _sellToken, \n _sellTokenId, \n _sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n sender,\n address(this)\n );\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime if it's not set\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId) internal {\n emit AuctionFinished(_auctionId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n address seller = currentAuction.seller;\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n currentAuction.sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n \n deactivateAuction(_auctionId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return this.supportsInterface(interfaceId);\n }\n\n}" + }, + "@rarible/auction/contracts/1155/AuctionHouseBase1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase1155 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint96 sellTokenValue;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n\n}" + }, + "@rarible/auction/contracts/721/AuctionHouse721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase721.sol\";\nimport \"../wrapper/TokenToAuction.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse721 is ERC721HolderUpgradeable, TokenToAuction, AuctionHouseBase721 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse721_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC721Holder_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse721_init_unchained();\n }\n\n function __AuctionHouse721_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC721 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n transferNFT(\n _sellToken, \n _sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n sender,\n address(this)\n );\n setAuctionForToken(_sellToken, _sellTokenId, currentAuctionId);\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId, address token, uint tokenId) internal {\n emit AuctionFinished(_auctionId);\n deleteAuctionForToken(token, tokenId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n address seller = currentAuction.seller;\n require(_checkAuctionExistence(seller), \"there is no auction with this id\");\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n \n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n /// @dev function to call from wrapper to put bid\n function putBidWrapper(uint256 _auctionId) external payable {\n require(auctions[_auctionId].buyAsset == address(0), \"only ETH bids allowed\");\n putBid(_auctionId, Bid(msg.value, LibBidDataV1.V1, \"\"));\n }\n\n}" + }, + "@rarible/auction/contracts/721/AuctionHouseBase721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase721 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n}" + }, + "@rarible/auction/contracts/AuctionHouseBase.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libs/LibAucDataV1.sol\";\nimport \"./libs/LibBidDataV1.sol\";\nimport \"./libs/SafeMathUpgradeable96.sol\";\n\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nabstract contract AuctionHouseBase is OwnableUpgradeable, ReentrancyGuardUpgradeable, RaribleTransferManager, TransferExecutor {\n using LibTransfer for address;\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n /// @dev default minimal auction duration and also the time for that auction is extended when it's about to end (endTime - now < EXTENSION_DURATION)\n uint96 internal constant EXTENSION_DURATION = 15 minutes;\n\n /// @dev maximum auction duration\n uint128 internal constant MAX_DURATION = 1000 days;\n\n /// @dev maximum fee base point\n uint internal constant MAX_FEE_BASE_POINT = 1000;\n\n /// @dev mapping to store eth amount that is ready to be withdrawn (used for faulty eth-bids)\n mapping(address => uint) readyToWithdraw;\n\n /// @dev latest auctionId\n uint256 public auctionId;\n\n /// @dev minimal auction duration\n uint96 public minimalDuration;\n\n /// @dev minimal bid increase in base points\n uint96 public minimalStepBasePoint;\n\n /// @dev bid struct\n struct Bid {\n // the amount \n uint amount;\n // version of Bid to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Bid, can be seen in \"LibBidDataV1.sol\"\n bytes data;\n }\n\n /// @dev event that emits when auction is created\n event AuctionCreated(uint indexed auctionId, address seller);\n /// @dev event that emits when bid is placed\n event BidPlaced(uint indexed auctionId, address buyer, uint endTime);\n /// @dev event that emits when auction is finished\n event AuctionFinished(uint indexed auctionId);\n /// @dev event that emits when auction is canceled\n event AuctionCancelled(uint indexed auctionId);\n /// @dev event that emits when auction is bought out\n event AuctionBuyOut(uint indexed auctionId, address buyer);\n\n /// @dev event that's emitted when user can withdraw ETH from the AuctionHouse\n event AvailableToWithdraw(address indexed owner, uint added, uint total);\n /// @dev event that's emitted when minimal auction duration changes\n event MinimalDurationChanged(uint oldValue, uint newValue);\n\n event MinimalStepChanged(uint oldValue, uint newValue);\n\n function __AuctionHouseBase_init_unchained(\n uint96 _minimalStepBasePoint\n ) internal initializer {\n auctionId = 1;\n minimalDuration = EXTENSION_DURATION;\n minimalStepBasePoint = _minimalStepBasePoint;\n }\n\n /// @dev increments auctionId and returns new value\n function getNextAndIncrementAuctionId() internal returns (uint256) {\n return auctionId++;\n }\n\n function changeMinimalDuration(uint96 newValue) external onlyOwner {\n emit MinimalDurationChanged(minimalDuration, newValue);\n minimalDuration = newValue;\n }\n\n function changeMinimalStep(uint96 newValue) external onlyOwner {\n emit MinimalStepChanged(minimalStepBasePoint, newValue);\n minimalStepBasePoint = newValue;\n }\n\n function transferNFT (\n address token,\n uint tokenId,\n uint value,\n bytes4 assetClass,\n address from,\n address to\n ) internal {\n transfer(\n getSellAsset(\n token,\n tokenId,\n value,\n assetClass\n ),\n from,\n to,\n proxies[assetClass]\n );\n }\n\n function transferBid(\n uint value,\n address token,\n address from,\n address to,\n address proxy\n ) internal {\n transfer(\n getBuyAsset(\n token,\n value\n ),\n from,\n to,\n proxy\n );\n }\n\n function getSellAsset(address token, uint tokenId, uint value, bytes4 assetClass) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n asset.assetType.assetClass = assetClass;\n asset.assetType.data = abi.encode(token, tokenId);\n }\n\n function getBuyAsset(address token, uint value) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n\n if (token == address(0)){\n asset.assetType.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n asset.assetType.assetClass = LibAsset.ERC20_ASSET_CLASS;\n asset.assetType.data = abi.encode(token);\n }\n }\n\n function getPayouts(address maker) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(maker);\n payout[0].value = 10000;\n return payout;\n }\n\n function getOriginFee(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee = new LibPart.Part[](1);\n originFee[0].account = payable(address(data));\n originFee[0].value = uint96(getValueFromData(data));\n return originFee;\n }\n\n function _checkAuctionRangeTime(uint endTime, uint startTime) internal view returns (bool){\n uint currentTime = block.timestamp;\n if (startTime > 0 && startTime > currentTime) {\n return false;\n }\n if (endTime > 0 && endTime <= currentTime){\n return false;\n }\n\n return true;\n }\n\n /// @dev returns true if newAmount is enough for buyOut\n function buyOutVerify(LibAucDataV1.DataV1 memory aucData, uint newAmount) internal pure returns (bool) {\n if (aucData.buyOutPrice > 0 && aucData.buyOutPrice <= newAmount) {\n return true;\n }\n return false;\n }\n\n /// @dev returns true if auction exists, false otherwise\n function _checkAuctionExistence(address seller) internal pure returns (bool){\n return seller != address(0);\n }\n\n /// @dev Used to withdraw faulty bids (bids that failed to return after out-bidding)\n function withdrawFaultyBid(address _to) external {\n address sender = _msgSender();\n uint amount = readyToWithdraw[sender];\n require( amount > 0, \"nothing to withdraw\");\n readyToWithdraw[sender] = 0;\n _to.transferEth(amount);\n }\n\n function _returnBid(\n Bid memory oldBid,\n address buyAsset,\n address oldBuyer,\n address proxy\n ) internal {\n // nothing to return\n if (oldBuyer == address(0)) {\n return;\n }\n if (buyAsset == address(0)) {\n (bool success,) = oldBuyer.call{ value: oldBid.amount }(\"\");\n if (!success) {\n uint currentValueToWithdraw = readyToWithdraw[oldBuyer];\n uint newValueToWithdraw = oldBid.amount.add(currentValueToWithdraw);\n readyToWithdraw[oldBuyer] = newValueToWithdraw;\n emit AvailableToWithdraw(oldBuyer, oldBid.amount, newValueToWithdraw);\n }\n } else {\n transferBid(\n oldBid.amount,\n buyAsset,\n address(this),\n oldBuyer,\n proxy\n );\n }\n }\n\n function _getProxy(address buyAsset) internal view returns(address){\n address proxy;\n if (buyAsset != address(0)){\n proxy = proxies[LibAsset.ERC20_ASSET_CLASS];\n }\n return proxy;\n }\n\n /// @dev check that msg.value more than bid amount with fees and return change\n function checkEthReturnChange(uint totalAmount, address buyer) internal {\n uint msgValue = msg.value;\n require(msgValue >= totalAmount, \"not enough ETH\");\n uint256 change = msgValue.sub(totalAmount);\n if (change > 0) {\n buyer.transferEth(change);\n }\n }\n\n /// @dev returns true if auction in progress, false otherwise\n function checkAuctionInProgress(address seller, uint endTime, uint startTime) internal view{\n require(_checkAuctionExistence(seller) && _checkAuctionRangeTime(endTime, startTime), \"auction is inactive\");\n }\n\n /// @dev reserves new bid and returns the last one if it exists\n function reserveBid(\n address buyAsset,\n address oldBuyer,\n address newBuyer,\n Bid memory oldBid,\n address proxy,\n uint newTotalAmount\n ) internal {\n // return old bid if theres any\n _returnBid(\n oldBid,\n buyAsset,\n oldBuyer,\n proxy\n );\n \n //lock new bid\n transferBid(\n newTotalAmount,\n buyAsset,\n newBuyer,\n address(this),\n proxy\n );\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function _getMinimalNextBid(address buyer, uint96 minimalPrice, uint amount) internal view returns (uint minBid){\n if (buyer == address(0x0)) {\n minBid = minimalPrice;\n } else {\n minBid = amount.add(amount.bp(minimalStepBasePoint));\n }\n }\n\n function getValueFromData(uint data) internal pure returns(uint) {\n return (data >> 160);\n }\n\n uint256[50] private ______gap;\n}" + }, + "@rarible/auction/contracts/libs/LibAucDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Auction struct\nlibrary LibAucDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Auction data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n // auction duration\n uint96 duration;\n // auction startTime\n uint96 startTime;\n // auction buyout price\n uint96 buyOutPrice;\n }\n\n /// @dev returns parsed data field of an Auction (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n }\n } else {\n revert(\"wrong auction dataType\");\n }\n }\n}\n\n" + }, + "@rarible/auction/contracts/libs/LibBidDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Bid struct\nlibrary LibBidDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Bid data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n }\n\n /// @dev returns parsed data field of a Bid (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n } \n } else {\n revert(\"wrong bid dataType\");\n }\n }\n}\n" + }, + "@rarible/auction/contracts/libs/SafeMathUpgradeable96.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable96 {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint96 a, uint96 b) internal pure returns (uint96) {\n uint96 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint96 a, uint96 b) internal pure returns (uint96) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n}\n" + }, + "@rarible/auction/contracts/wrapper/IMarketWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/**\n * @title IMarketWrapper\n * @author Anna Carroll\n * @notice IMarketWrapper provides a common interface for\n * interacting with NFT auction markets.\n * Contracts can abstract their interactions with\n * different NFT markets using IMarketWrapper.\n * NFT markets can become compatible with any contract\n * using IMarketWrapper by deploying a MarketWrapper contract\n * that implements this interface using the logic of their Market.\n *\n * WARNING: MarketWrapper contracts should NEVER write to storage!\n * When implementing a MarketWrapper, exercise caution; a poorly implemented\n * MarketWrapper contract could permanently lose access to the NFT or user funds.\n */\ninterface IMarketWrapper {\n /**\n * @notice Given the auctionId, nftContract, and tokenId, check that:\n * 1. the auction ID matches the token\n * referred to by tokenId + nftContract\n * 2. the auctionId refers to an *ACTIVE* auction\n * (e.g. an auction that will accept bids)\n * within this market contract\n * 3. any additional validation to ensure that\n * a PartyBid can bid on this auction\n * (ex: if the market allows arbitrary bidding currencies,\n * check that the auction currency is ETH)\n * Note: This function probably should have been named \"isValidAuction\"\n * @dev Called in PartyBid.sol in `initialize` at line 174\n * @return TRUE if the auction is valid\n */\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external view returns (bool);\n\n /**\n * @notice Calculate the minimum next bid for this auction.\n * PartyBid contracts always submit the minimum possible\n * bid that will be accepted by the Market contract.\n * usually, this is either the reserve price (if there are no bids)\n * or a certain percentage increase above the current highest bid\n * @dev Called in PartyBid.sol in `bid` at line 251\n * @return minimum bid amount\n */\n function getMinimumBid(uint256 auctionId) external view returns (uint256);\n\n /**\n * @notice Query the current highest bidder for this auction\n * It is assumed that there is always 1 winning highest bidder for an auction\n * This is used to ensure that PartyBid cannot outbid itself if it is already winning\n * @dev Called in PartyBid.sol in `bid` at line 241\n * @return highest bidder\n */\n function getCurrentHighestBidder(uint256 auctionId)\n external\n view\n returns (address);\n\n /**\n * @notice Submit bid to Market contract\n * @dev Called in PartyBid.sol in `bid` at line 259\n */\n function bid(uint256 auctionId, uint256 bidAmount) external;\n\n /**\n * @notice Determine whether the auction has been finalized\n * Used to check if it is still possible to bid\n * And to determine whether the PartyBid should finalize the auction\n * @dev Called in PartyBid.sol in `bid` at line 247\n * @dev and in `finalize` at line 288\n * @return TRUE if the auction has been finalized\n */\n function isFinalized(uint256 auctionId) external view returns (bool);\n\n /**\n * @notice Finalize the results of the auction\n * on the Market contract\n * It is assumed that this operation is performed once for each auction,\n * that after it is done the auction is over and the NFT has been\n * transferred to the auction winner.\n * @dev Called in PartyBid.sol in `finalize` at line 289\n */\n function finalize(uint256 auctionId) external;\n}" + }, + "@rarible/auction/contracts/wrapper/TokenToAuction.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/// @dev contract to add tokenToAuctionId functionality to auctionHouse\ncontract TokenToAuction {\n /// @dev mapping to store auction ids for token address + token id (only stores erc-721 tokens)\n mapping(address => mapping(uint256 => uint256)) private tokenToAuctionId;\n\n /// @dev returns auction id by token address and token id\n function getAuctionByToken(address _collection, uint tokenId) external view returns(uint) {\n return tokenToAuctionId[_collection][tokenId];\n }\n\n /// @dev sets auction id for token address and token id\n function setAuctionForToken(address token, uint tokenId, uint auctionId) internal {\n tokenToAuctionId[token][tokenId] = auctionId;\n }\n\n /// @dev deletes auctionId from tokenToAuctionId\n function deleteAuctionForToken(address token, uint tokenId) internal {\n delete tokenToAuctionId[token][tokenId];\n }\n \n uint256[50] private ______gap;\n}" + }, + "@rarible/auction/contracts/wrapper/Wrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\nimport \"./IMarketWrapper.sol\";\nimport \"../721/AuctionHouse721.sol\";\n\ncontract Wrapper is IMarketWrapper{\n\n AuctionHouse721 internal immutable auction;\n\n constructor(address _auction) {\n auction = AuctionHouse721(_auction);\n }\n\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external override view returns (bool){\n return auctionId == auction. getAuctionByToken(nftContract, tokenId);\n }\n\n function getMinimumBid(uint256 auctionId) external override view returns (uint256){\n return auction.getMinimalNextBid(auctionId);\n }\n\n function getCurrentHighestBidder(uint256 auctionId)\n external\n override\n view\n returns (address){\n return auction.getCurrentBuyer(auctionId);\n }\n\n function bid(uint256 auctionId, uint256 bidAmount) external override{\n (bool success, bytes memory returnData) =\n address(auction).call{value: bidAmount}(\n abi.encodeWithSignature(\"putBidWrapper(uint256)\", auctionId)\n );\n require(success, string(returnData));\n }\n\n function isFinalized(uint256 auctionId) external override view returns (bool){\n return !auction.checkAuctionExistence(auctionId);\n }\n\n function finalize(uint256 auctionId) external override{\n auction.finishAuction(auctionId);\n }\n}" + }, + "@rarible/custom-matchers/contracts/AssetMatcherCollection.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\n/*\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\n */\ncontract AssetMatcherCollection is IAssetMatcher {\n\n bytes constant EMPTY = \"\";\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\n if (\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\n ) {\n (address leftToken) = abi.decode(leftAssetType.data, (address));\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\n if (leftToken == rightToken) {\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\n }\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n}" + }, + "@rarible/exchange-interfaces/contracts/IAssetMatcher.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface IAssetMatcher {\n function matchAssets(\n LibAsset.AssetType memory leftAssetType,\n LibAsset.AssetType memory rightAssetType\n ) external view returns (LibAsset.AssetType memory);\n}\n" + }, + "@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface ICryptoPunksMarket {\n //to get address punk owner from mapping (uint => address) public punkIndexToAddress;\n function punkIndexToAddress(uint key) external returns (address);\n\n function buyPunk(uint punkIndex) payable external;\n\n function transferPunk(address to, uint punkIndex) external;\n\n function offerPunkForSaleToAddress(uint punkIndex, uint minSalePriceInWei, address toAddress) external;\n}" + }, + "@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\ninterface IERC20TransferProxy {\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\n}\n" + }, + "@rarible/exchange-interfaces/contracts/INftTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\ninterface INftTransferProxy {\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n}\n" + }, + "@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/exchange-interfaces/contracts/ITransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" + }, + "@rarible/exchange-v2/contracts/AssetMatcher.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\n require(newFill.leftValue > 0, \"nothing to fill\");\n }\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\n require(newFill.rightValue > 0, \"nothing to fill\");\n }\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibDirectTransfer { //LibDirectTransfers\n /*All buy parameters need for create buyOrder and sellOrder*/\n struct Purchase {\n address sellOrderMaker; //\n uint256 sellOrderNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 sellOrderPaymentAmount;\n address paymentToken;\n uint256 sellOrderSalt;\n uint sellOrderStart;\n uint sellOrderEnd;\n bytes4 sellOrderDataType;\n bytes sellOrderData;\n bytes sellOrderSignature;\n\n uint256 buyOrderPaymentAmount;\n uint256 buyOrderNftAmount;\n bytes buyOrderData;\n }\n\n /*All accept bid parameters need for create buyOrder and sellOrder*/\n struct AcceptBid {\n address bidMaker; //\n uint256 bidNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 bidPaymentAmount;\n address paymentToken;\n uint256 bidSalt;\n uint bidStart;\n uint bidEnd;\n bytes4 bidDataType;\n bytes bidData;\n bytes bidSignature;\n\n uint256 sellOrderPaymentAmount;\n uint256 sellOrderNftAmount;\n bytes sellOrderData;\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibFill.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n * @return tuple representing fill of both assets\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary LibMath {\n using SafeMathUpgradeable for uint;\n\n /// @dev Calculates partial value given a numerator and denominator rounded down.\n /// Reverts if rounding error is >= 0.1%\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return partialAmount value of target rounded down.\n function safeGetPartialAmountFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorFloor(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding down.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // The absolute rounding error is the difference between the rounded\n // value and the ideal value. The relative rounding error is the\n // absolute rounding error divided by the absolute value of the\n // ideal value. This is undefined when the ideal value is zero.\n //\n // The ideal value is `numerator * target / denominator`.\n // Let's call `numerator * target % denominator` the remainder.\n // The absolute error is `remainder / denominator`.\n //\n // When the ideal value is zero, we require the absolute error to\n // be zero. Fortunately, this is always the case. The ideal value is\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\n // remainder and absolute error are also zero.\n if (target == 0 || numerator == 0) {\n return false;\n }\n\n // Otherwise, we want the relative rounding error to be strictly\n // less than 0.1%.\n // The relative error is `remainder / (numerator * target)`.\n // We want the relative error less than 1 / 1000:\n // remainder / (numerator * target) < 1 / 1000\n // or equivalently:\n // 1000 * remainder < numerator * target\n // so we have a rounding error iff:\n // 1000 * remainder >= numerator * target\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n isError = remainder.mul(1000) >= numerator.mul(target);\n }\n\n function safeGetPartialAmountCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorCeil(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding up.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // See the comments in `isRoundingError`.\n if (target == 0 || numerator == 0) {\n // When either is zero, the ideal value and rounded value are zero\n // and there is no rounding error. (Although the relative error\n // is undefined.)\n return false;\n }\n // Compute remainder as before\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n remainder = denominator.sub(remainder) % denominator;\n isError = remainder.mul(1000) >= numerator.mul(target);\n return isError;\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nimport \"./LibMath.sol\";\nimport \"./LibOrderDataV3.sol\";\nimport \"./LibOrderDataV2.sol\";\nimport \"./LibOrderDataV1.sol\";\n\nlibrary LibOrder {\n using SafeMathUpgradeable for uint;\n\n bytes32 constant ORDER_TYPEHASH = keccak256(\n \"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\n\n struct Order {\n address maker;\n LibAsset.Asset makeAsset;\n address taker;\n LibAsset.Asset takeAsset;\n uint salt;\n uint start;\n uint end;\n bytes4 dataType;\n bytes data;\n }\n\n /**\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\n * @param order initial order to calculate remaining values for\n * @param fill current fill of the left order (0 if order is unfilled)\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\n */\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\n if (isMakeFill) {\n makeValue = order.makeAsset.value.sub(fill);\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\n } else {\n takeValue = order.takeAsset.value.sub(fill);\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \n } \n }\n\n function hashKey(Order memory order) internal pure returns (bytes32) {\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt\n ));\n } else {\n //order.data is in hash for V2, V3 and all new order\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt,\n order.data\n ));\n }\n }\n\n function hash(Order memory order) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ORDER_TYPEHASH,\n order.maker,\n LibAsset.hash(order.makeAsset),\n order.taker,\n LibAsset.hash(order.takeAsset),\n order.salt,\n order.start,\n order.end,\n order.dataType,\n keccak256(order.data)\n ));\n }\n\n function validateOrderTime(LibOrder.Order memory order) internal view {\n require(order.start == 0 || order.start < block.timestamp, \"Order start validation failed\");\n require(order.end == 0 || order.end > block.timestamp, \"Order end validation failed\");\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderData.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibOrderData {\n\n struct GenericOrderData {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n } \n\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\n if (order.dataType == LibOrderDataV1.V1) {\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n } else if (order.dataType == LibOrderDataV2.V2) {\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n dataOrder.isMakeFill = data.isMakeFill;\n } else if (order.dataType == 0xffffffff) {\n } else {\n revert(\"Unknown Order data type\");\n }\n if (dataOrder.payouts.length == 0) {\n dataOrder.payouts = payoutSet(order.maker);\n }\n }\n\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(orderAddress);\n payout[0].value = 10000;\n return payout;\n }\n\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee;\n\n if (dataFirst > 0 && dataSecond > 0){\n originFee = new LibPart.Part[](2);\n\n originFee[0] = uintToLibPart(dataFirst);\n originFee[1] = uintToLibPart(dataSecond);\n }\n\n if (dataFirst > 0 && dataSecond == 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataFirst);\n }\n\n if (dataFirst == 0 && dataSecond > 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataSecond);\n }\n\n return originFee;\n }\n\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payouts;\n\n if (data > 0) {\n payouts = new LibPart.Part[](1);\n payouts[0] = uintToLibPart(data);\n }\n\n return payouts;\n }\n\n /**\n @notice converts uint to LibPart.Part\n @param data address and value encoded in uint (first 12 bytes )\n @return result LibPart.Part \n */\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\n if (data > 0){\n result.account = payable(address(data));\n result.value = uint96(data >> 160);\n }\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n struct DataV1 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV2 {\n bytes4 constant public V2 = bytes4(keccak256(\"V2\"));\n\n struct DataV2 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\n/// @dev deprecated\nlibrary LibOrderDataV3 {\n bytes4 constant public V3_SELL = bytes4(keccak256(\"V3_SELL\"));\n bytes4 constant public V3_BUY = bytes4(keccak256(\"V3_BUY\"));\n\n struct DataV3_SELL {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n uint maxFeesBasePoint;\n bytes32 marketplaceMarker;\n }\n\n struct DataV3_BUY {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n bytes32 marketplaceMarker;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/OrderValidator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./libraries/LibOrder.sol\";\n\nimport \"@rarible/lib-signature/contracts/IERC1271.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\n\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\n using LibSignature for bytes32;\n using AddressUpgradeable for address;\n \n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function __OrderValidator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Exchange\", \"2\");\n }\n\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\n if (order.salt == 0) {\n if (order.maker != address(0)) {\n require(_msgSender() == order.maker, \"maker is not tx sender\");\n }\n } else {\n if (_msgSender() != order.maker) {\n bytes32 hash = LibOrder.hash(order);\n // if maker is contract checking ERC1271 signature\n if (order.maker.isContract()) {\n require(\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\n \"contract order signature verification error\"\n );\n } else {\n // if maker is not contract then checking ECDSA signature\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\n revert(\"order signature verification error\");\n } else {\n require (order.maker != address(0), \"no maker\");\n }\n }\n }\n }\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../../contracts/ExchangeV2.sol\";\n\ncontract RaribleTestHelper {\n function encode(LibOrderDataV1.DataV1 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV2(LibOrderDataV2.DataV2 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_SELL(LibOrderDataV3.DataV3_SELL memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_BUY(LibOrderDataV3.DataV3_BUY memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value)\n external\n pure\n returns (uint256)\n {\n return (uint256(value) << 160) + uint256(account);\n }\n\n function hashKey(LibOrder.Order calldata order)\n external\n pure\n returns (bytes32)\n {\n return LibOrder.hashKey(order);\n }\n\n function hashV2(\n address maker,\n LibAsset.Asset memory makeAsset,\n LibAsset.Asset memory takeAsset,\n uint256 salt,\n bytes memory data\n ) public pure returns (bytes32) {\n return\n keccak256(\n abi.encode(\n maker,\n LibAsset.hash(makeAsset.assetType),\n LibAsset.hash(takeAsset.assetType),\n salt,\n data\n )\n );\n }\n\n function encodeLazy721(LibERC721LazyMint.Mint721Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n function encodeLazy1155(LibERC1155LazyMint.Mint1155Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n\ninterface IBlur {\n enum Side { Buy, Sell }\n enum SignatureVersion { Single, Bulk }\n enum AssetType { ERC721, ERC1155 }\n\n struct Fee {\n uint16 rate;\n address payable recipient;\n }\n \n struct Order {\n address trader;\n Side side;\n address matchingPolicy;\n address collection;\n uint256 tokenId;\n uint256 amount;\n address paymentToken;\n uint256 price;\n uint256 listingTime;\n /* Order expiration timestamp - 0 for oracle cancellations. */\n uint256 expirationTime;\n Fee[] fees;\n uint256 salt;\n bytes extraParams;\n }\n\n struct Input {\n Order order;\n uint8 v;\n bytes32 r;\n bytes32 s;\n bytes extraSignature;\n SignatureVersion signatureVersion;\n uint256 blockNumber;\n }\n\n function execute(Input calldata sell, Input calldata buy)\n external\n payable;\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\n\ninterface IExchangeV2 {\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable;\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable;\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../libraries/LibLooksRare.sol\";\n\ninterface ILooksRare {\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\n\n /**\n * @notice This function allows a user to execute a taker bid (against a maker ask).\n * @param takerBid Taker bid struct\n * @param makerAsk Maker ask struct\n * @param makerSignature Maker signature\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\n * @param affiliate Affiliate address\n */\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ILSSVMRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\ninterface ILSSVMRouter {\n struct PairSwapSpecific {\n address pair;\n uint256[] nftIds;\n }\n\n /**\n @notice Swaps ETH into specific NFTs using multiple pairs.\n @param swapList The list of pairs to trade with and the IDs of the NFTs to buy from each.\n @param ethRecipient The address that will receive the unspent ETH input\n @param nftRecipient The address that will receive the NFT output\n @param deadline The Unix timestamp (in seconds) at/after which the swap will revert\n @return remainingValue The unspent ETH amount\n */\n function swapETHForSpecificNFTs(\n PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n )\n external\n payable\n returns (uint256 remainingValue);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"../libraries/LibSeaPort.sol\";\n\ninterface ISeaPort {\n function fulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder calldata advancedOrder,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n bytes32 fulfillerConduitKey,\n address recipient\n ) external payable returns (bool fulfilled);\n\n function fulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\n bytes32 fulfillerConduitKey,\n address recipient,\n uint256 maximumFulfilled\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\n\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\n external\n payable\n returns (bool fulfilled);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface IWyvernExchange {\n function atomicMatch_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n\n enum Side {\n Buy,\n Sell\n }\n\n enum SaleKind {\n FixedPrice,\n DutchAuction\n }\n\n function calculateFinalPrice(\n Side side,\n SaleKind saleKind,\n uint256 basePrice,\n uint256 extra,\n uint256 listingTime,\n uint256 expirationTime\n ) external view returns (uint256);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface Ix2y2 {\n\n struct OrderItem {\n uint256 price;\n bytes data;\n }\n\n struct Pair721 {\n address token;\n uint256 tokenId;\n }\n\n struct Pair1155 {\n address token;\n uint256 tokenId;\n uint256 amount;\n }\n\n struct Order {\n uint256 salt;\n address user;\n uint256 network;\n uint256 intent;\n uint256 delegateType;\n uint256 deadline;\n address currency;\n bytes dataMask;\n OrderItem[] items;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n uint8 signVersion;\n }\n\n struct Fee {\n uint256 percentage;\n address to;\n }\n\n struct SettleDetail {\n Op op;\n uint256 orderIdx;\n uint256 itemIdx;\n uint256 price;\n bytes32 itemHash;\n address executionDelegate;\n bytes dataReplacement;\n uint256 bidIncentivePct;\n uint256 aucMinIncrementPct;\n uint256 aucIncDurationSecs;\n Fee[] fees;\n }\n\n struct SettleShared {\n uint256 salt;\n uint256 deadline;\n uint256 amountToEth;\n uint256 amountToWeth;\n address user;\n bool canFail;\n }\n\n struct RunInput {\n Order[] orders;\n SettleDetail[] details;\n SettleShared shared;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n }\n\n enum Op {\n INVALID,\n // off-chain\n COMPLETE_SELL_OFFER,\n COMPLETE_BUY_OFFER,\n CANCEL_OFFER,\n // auction\n BID,\n COMPLETE_AUCTION,\n REFUND_AUCTION,\n REFUND_AUCTION_STUCK_ITEM\n }\n\n function run(RunInput memory input) external payable;\n}" + }, + "@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\nabstract contract IsPausable is Ownable {\n bool public paused;\n\n event Paused(bool paused);\n\n function pause(bool _paused) external onlyOwner {\n paused = _paused;\n emit Paused(_paused);\n }\n\n function requireNotPaused() internal view {\n require (!paused, \"the contract is paused\");\n }\n\n}\n" + }, + "@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibLooksRare {\n struct MakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address signer; // signer of the maker order\n address collection; // collection address\n uint256 price; // price (used as )\n uint256 tokenId; // id of the token\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\n address currency; // currency (e.g., WETH)\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\n uint256 startTime; // startTime in timestamp\n uint256 endTime; // endTime in timestamp\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // additional parameters\n uint8 v; // v: parameter (27 or 28)\n bytes32 r; // r: parameter\n bytes32 s; // s: parameter\n }\n\n struct TakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address taker; // msg.sender\n uint256 price; // final price for the purchase\n uint256 tokenId;\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // other params (e.g., tokenId)\n }\n\n /**\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\n */\n enum CollectionType {\n ERC721,\n ERC1155\n }\n\n /**\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\n */\n enum QuoteType {\n Bid,\n Ask\n }\n /**\n * 1. Maker struct\n */\n\n /**\n * @notice Maker is the struct for a maker order.\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\n * @param globalNonce Global user order nonce for maker orders\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\n * @param strategyId Strategy id\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\n * @param collection Collection address\n * @param currency Currency address (@dev address(0) = ETH)\n * @param signer Signer address\n * @param startTime Start timestamp\n * @param endTime End timestamp\n * @param price Minimum price for maker ask, maximum price for maker bid\n * @param itemIds Array of itemIds\n * @param amounts Array of amounts\n * @param additionalParameters Extra data specific for the order\n */\n struct Maker {\n QuoteType quoteType;\n uint256 globalNonce;\n uint256 subsetNonce;\n uint256 orderNonce;\n uint256 strategyId;\n CollectionType collectionType;\n address collection;\n address currency;\n address signer;\n uint256 startTime;\n uint256 endTime;\n uint256 price;\n uint256[] itemIds;\n uint256[] amounts;\n bytes additionalParameters;\n }\n\n /**\n * 2. Taker struct\n */\n\n /**\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\n * @param additionalParameters Extra data specific for the order\n */\n struct Taker {\n address recipient;\n bytes additionalParameters;\n }\n\n /**\n * 3. Merkle tree struct\n */\n\n enum MerkleTreeNodePosition {\n Left,\n Right\n }\n\n /**\n * @notice MerkleTreeNode is a MerkleTree's node.\n * @param value It can be an order hash or a proof\n * @param position The node's position in its branch.\n * It can be left or right or none\n * (before the tree is sorted).\n */\n struct MerkleTreeNode {\n bytes32 value;\n MerkleTreeNodePosition position;\n }\n\n /**\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\n * @dev A Merkle tree can be computed with order hashes.\n * It can contain order hashes from both maker bid and maker ask structs.\n * @param root Merkle root\n * @param proof Array containing the merkle proof\n */\n struct MerkleTree {\n bytes32 root;\n MerkleTreeNode[] proof;\n }\n}\n" + }, + "@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" + }, + "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n address public immutable seaPort_1_6;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,//0\n WyvernExchange,//1\n SeaPort_1_1,//2\n X2Y2,//3\n LooksRareOrders,//4\n SudoSwap,//5\n SeaPort_1_4,//6\n LooksRareV2,//7\n Blur,//8\n SeaPort_1_5,//9\n SeaPort_1_6//10\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[11] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n //address _seaPort_1_6, 10\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n seaPort_1_6 = marketplaces[10];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" + }, + "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" + }, + "@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"./LibERC1155LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC1155LazyMint is IERC1155Upgradeable {\n\n event Supply(\n uint256 tokenId,\n uint256 value\n );\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC1155LazyMint.Mint1155Data memory data,\n address to,\n uint256 _amount\n ) external;\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) external;\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC1155LazyMint {\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC1155_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\n\n struct Mint1155Data {\n uint tokenId;\n string tokenURI;\n uint supply;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n data.supply,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"./LibERC721LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC721LazyMint is IERC721Upgradeable {\n\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external;\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external;\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC721LazyMint {\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC721_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\n\n struct Mint721Data {\n uint tokenId;\n string tokenURI;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n\n}\n" + }, + "@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/erc-721/IERC721LazyMint.sol\";\n\ncontract ERC721LazyMintTest is IERC721LazyMint, ERC721Upgradeable {\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external override {\n _mint(to, data.tokenId);\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external override {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n this.mintAndTransfer(data, to);\n }\n }\n\n function encode(LibERC721LazyMint.Mint721Data memory data)\n external\n view\n returns (bytes memory)\n {\n return abi.encode(address(this), data);\n }\n}\n" + }, + "@rarible/lib-asset/contracts/LibAsset.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibAsset {\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\"ETH\"));\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\"ERC20\"));\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\"ERC721\"));\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\"ERC1155\"));\n bytes4 constant public COLLECTION = bytes4(keccak256(\"COLLECTION\"));\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\"CRYPTO_PUNKS\"));\n\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\n \"AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes32 constant ASSET_TYPEHASH = keccak256(\n \"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n struct AssetType {\n bytes4 assetClass;\n bytes data;\n }\n\n struct Asset {\n AssetType assetType;\n uint value;\n }\n\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPE_TYPEHASH,\n assetType.assetClass,\n keccak256(assetType.data)\n ));\n }\n\n function hash(Asset memory asset) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPEHASH,\n hash(asset.assetType),\n asset.value\n ));\n }\n\n}\n" + }, + "@rarible/lib-bp/contracts/BpLibrary.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary BpLibrary {\n using SafeMathUpgradeable for uint;\n\n function bp(uint value, uint bpValue) internal pure returns (uint) {\n return value.mul(bpValue).div(10000);\n }\n}\n" + }, + "@rarible/lib-part/contracts/LibPart.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibPart {\n bytes32 public constant TYPE_HASH = keccak256(\"Part(address account,uint96 value)\");\n\n struct Part {\n address payable account;\n uint96 value;\n }\n\n function hash(Part memory part) internal pure returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\n }\n}\n" + }, + "@rarible/lib-signature/contracts/ERC1271.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nabstract contract ERC1271 {\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\n\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\n\n /**\n * @dev Function must be implemented by deriving contract\n * @param _hash Arbitrary length data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\n *\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\n\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\n }\n}" + }, + "@rarible/lib-signature/contracts/IERC1271.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ninterface IERC1271 {\n\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param _hash Hash of the data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n *\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\n}" + }, + "@rarible/lib-signature/contracts/LibSignature.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nlibrary LibSignature {\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature)\n internal\n pure\n returns (address)\n {\n // Check the signature length\n if (signature.length != 65) {\n revert(\"ECDSA: invalid signature length\");\n }\n\n // Divide the signature in r, s and v variables\n bytes32 r;\n bytes32 s;\n uint8 v;\n\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n // solhint-disable-next-line no-inline-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n\n return recover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n require(\n uint256(s) <=\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\n \"ECDSA: invalid signature 's' value\"\n );\n\n // If the signature is valid (and not malleable), return the signer address\n // v > 30 is a special case, we need to adjust hash with \"\\x19Ethereum Signed Message:\\n32\"\n // and v = v - 4\n address signer;\n if (v > 30) {\n require(\n v - 4 == 27 || v - 4 == 28,\n \"ECDSA: invalid signature 'v' value\"\n );\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\n } else {\n require(v == 27 || v == 28, \"ECDSA: invalid signature 'v' value\");\n signer = ecrecover(hash, v, r, s);\n }\n\n require(signer != address(0), \"ECDSA: invalid signature\");\n\n return signer;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * replicates the behavior of the\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n * JSON-RPC method.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash)\n internal\n pure\n returns (bytes32)\n {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return\n keccak256(\n abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash)\n );\n }\n}\n" + }, + "@rarible/meta-tx/contracts/EIP712MetaTransaction.sol": { + "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" + }, + "@rarible/role-operator/contracts/OperatorRole.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocksV2.sol\";\n\ncontract RoyaltiesProviderArtBlocksV2 is IRoyaltiesProvider {\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n RoyaltyArtBlocksV2 artBlocksV2 = RoyaltyArtBlocksV2(token);\n\n (address payable[] memory recipients, uint256[] memory bps) = artBlocksV2.getRoyalties(tokenId);\n \n uint256 len = recipients.length;\n\n LibPart.Part[] memory result = new LibPart.Part[](len);\n \n for (uint i = 0; i < len; i++) {\n result[i].account = recipients[i];\n result[i].value = uint96(bps[i]);\n }\n\n return result;\n }\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyV2Legacy.sol\";\n\ncontract RoyaltiesProviderV2Legacy is IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n return RoyaltyV2Legacy(token).getRoyalties(tokenId);\n }\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocks.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocks {\n \n function getRoyaltyData(uint256 _tokenId) external virtual view returns (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID);\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocksV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocksV2 {\n \n /**\n * @notice Gets royalty Basis Points (BPS) for token ID `_tokenId`.\n * This conforms to the IManifold interface designated in the Royalty\n * Registry's RoyaltyEngineV1.sol contract.\n * ref: https://github.com/manifoldxyz/royalty-registry-solidity\n * @param _tokenId Token ID to be queried.\n * @return recipients Array of royalty payment recipients\n * @return bps Array of Basis Points (BPS) allocated to each recipient,\n * aligned by index.\n * @dev reverts if invalid _tokenId\n * @dev only returns recipients that have a non-zero BPS allocation\n */\n function getRoyalties(uint256 _tokenId) \n external \n view\n virtual\n returns (\n address payable[] memory recipients, \n uint256[] memory bps\n );\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyV2Legacy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" + }, + "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" + }, + "@rarible/royalties/contracts/IERC2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n///\n/// @dev Interface for the NFT Royalty Standard\n///\n//interface IERC2981 is IERC165 {\ninterface IERC2981 {\n /// ERC165 bytes to add to interface array - set in parent contract\n /// implementing this standard\n ///\n /// bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n /// _registerInterface(_INTERFACE_ID_ERC2981);\n\n /// @notice Called with the sale price to determine how much royalty\n // is owed and to whom.\n /// @param _tokenId - the NFT asset queried for royalty information\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\n /// @return receiver - address of who should be sent the royalty payment\n /// @return royaltyAmount - the royalty payment amount for _salePrice\n function royaltyInfo(\n uint256 _tokenId,\n uint256 _salePrice\n ) external view returns (\n address receiver,\n uint256 royaltyAmount\n );\n}" + }, + "@rarible/royalties/contracts/impl/AbstractRoyalties.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract AbstractRoyalties {\n mapping (uint256 => LibPart.Part[]) internal royalties;\n\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\n uint256 totalValue;\n for (uint i = 0; i < _royalties.length; ++i) {\n require(_royalties[i].account != address(0x0), \"Recipient should be present\");\n require(_royalties[i].value != 0, \"Royalty value should be positive\");\n totalValue += _royalties[i].value;\n royalties[id].push(_royalties[i]);\n }\n require(totalValue < 10000, \"Royalty total value should be < 10000\");\n _onRoyaltiesSet(id, _royalties);\n }\n\n function _updateAccount(uint256 _id, address _from, address _to) internal {\n uint length = royalties[_id].length;\n for(uint i = 0; i < length; ++i) {\n if (royalties[_id][i].account == _from) {\n royalties[_id][i].account = payable(address(uint160(_to)));\n }\n }\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\n}\n" + }, + "@rarible/royalties/contracts/impl/RoyaltiesV1Impl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV1.sol\";\n\ncontract RoyaltiesV1Impl is AbstractRoyalties, RoyaltiesV1 {\n\n function getFeeRecipients(uint256 id) public override view returns (address payable[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n address payable[] memory result = new address payable[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = address(uint160(_royalties[i].account));\n }\n return result;\n }\n\n function getFeeBps(uint256 id) public override view returns (uint[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n uint[] memory result = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = _royalties[i].value;\n }\n return result;\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n address[] memory recipients = new address[](_royalties.length);\n uint[] memory bps = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n recipients[i] = _royalties[i].account;\n bps[i] = _royalties[i].value;\n }\n emit SecondarySaleFees(id, recipients, bps);\n }\n}\n" + }, + "@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV2.sol\";\nimport \"../IERC2981.sol\";\nimport \"../LibRoyalties2981.sol\";\n\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\n\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\n return royalties[id];\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n emit RoyaltiesSet(id, _royalties);\n }\n\n /*\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\n */\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\n if (royalties[id].length == 0) {\n receiver = address(0);\n royaltyAmount = 0;\n return(receiver, royaltyAmount);\n }\n LibPart.Part[] memory _royalties = royalties[id];\n receiver = _royalties[0].account;\n uint percent;\n for (uint i = 0; i < _royalties.length; ++i) {\n percent += _royalties[i].value;\n }\n //don`t need require(percent < 10000, \"Token royalty > 100%\"); here, because check later in calculateRoyalties\n royaltyAmount = percent * _salePrice / 10000;\n }\n}\n" + }, + "@rarible/royalties/contracts/LibRoyalties2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibRoyalties2981 {\n /*\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\n uint96 constant _WEIGHT_VALUE = 1000000;\n\n /*Method for converting amount to percent and forming LibPart*/\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\n LibPart.Part[] memory result;\n if (amount == 0) {\n return result;\n }\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\n require(percent < 10000, \"Royalties 2981 exceeds 100%\");\n result = new LibPart.Part[](1);\n result[0].account = payable(to);\n result[0].value = uint96(percent);\n return result;\n }\n}\n" + }, + "@rarible/royalties/contracts/LibRoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV1 {\n /*\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\n *\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\n */\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\n}\n" + }, + "@rarible/royalties/contracts/LibRoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV2 {\n /*\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\n}\n" + }, + "@rarible/royalties/contracts/RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\ninterface RoyaltiesV1 {\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\n\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\n function getFeeBps(uint256 id) external view returns (uint[] memory);\n}\n" + }, + "@rarible/royalties/contracts/RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltiesV2 {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC1155RoyaltiesV2 is RoyaltiesV2Impl, ERC1155Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, uint amount, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId, amount, \"\");\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV1Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV1.sol\";\n\ncontract TestERC721RoyaltiesV1 is RoyaltiesV1Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV1._INTERFACE_ID_FEES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC721RoyaltiesV2 is RoyaltiesV2Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/test/contracts/TestERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\n\ncontract TestERC1155 is ERC1155, Pausable {\n constructor() ERC1155(\"uri\"){\n\n }\n\n function mint(address to, uint tokenId, uint amount) external {\n _mint(to, tokenId, amount, \"\");\n }\n\n function batchSafeTransferFrom(\n address[] memory froms,\n address[] memory tos,\n uint256[] memory ids,\n uint256[] memory amounts\n ) external {\n require(froms.length == tos.length, \"wrong length 1\");\n require(tos.length == ids.length, \"wrong length 2\");\n require(ids.length == amounts.length, \"wrong length 3\");\n\n for (uint i = 0; i < froms.length; i ++) {\n safeTransferFrom(froms[i], tos[i], ids[i], amounts[i], \"\");\n }\n }\n\n function emitPauseEvent(bool paused) external {\n if (paused) {\n emit Paused(address(0));\n } else {\n emit Unpaused(address(0));\n }\n }\n}\n" + }, + "@rarible/test/contracts/TestERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\n\ncontract TestERC20 is ERC20Upgradeable {\n function mint(address to, uint amount) external {\n _mint(to, amount);\n }\n\n function init() external {\n __ERC20_init(\"TestERC20\", \"TE20\");\n }\n}\n" + }, + "@rarible/test/contracts/TestERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\n\ncontract TestERC721 is ERC721Upgradeable {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" + }, + "@rarible/tokens/contracts/access/MinterAccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" + }, + "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n\n uint256[50] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\n\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\n using StringsUpgradeable for uint256;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _clearMetadata(uint256 tokenId) internal override virtual {\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n uint256[50] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721/ERC721Base.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeable.sol\";\nimport \"./ERC721DefaultApproval.sol\";\nimport \"./ERC721Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721Base is OwnableUpgradeable, ERC721DefaultApproval, ERC721BurnableUpgradeable, ERC721Lazy, HasContractURI {\n\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721Upgradeable, ERC721DefaultApproval) view returns (bool) {\n return ERC721DefaultApproval._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApproval, ERC721Upgradeable, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApproval.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721Lazy) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function _mint(address to, uint256 tokenId) internal override(ERC721Lazy, ERC721Upgradeable) {\n super._mint(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721BurnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721Upgradeable.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeable is Initializable, ContextUpgradeable, ERC721Upgradeable {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721DefaultApproval.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721Upgradeable.sol\";\n\nabstract contract ERC721DefaultApproval is ERC721Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Lazy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\n\nabstract contract ERC721Lazy is IERC721LazyMint, ERC721Upgradeable, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _mint(address to, uint256 tokenId) internal virtual override {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burned(tokenId), \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Rarible.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Base.sol\";\n\ncontract ERC721Rarible is ERC721Base {\n\n event CreateERC721Rarible(address owner, string name, string symbol);\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external initializer {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/HasContractURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/IsPrivateCollection.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" + }, + "@rarible/tokens/contracts/LibURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibURI {\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\n function checkPrefix(string memory base, string memory _tokenURI)\n internal\n pure\n returns (string memory)\n {\n bytes memory whatBytes = bytes(base);\n bytes memory whereBytes = bytes(_tokenURI);\n\n if (whatBytes.length > whereBytes.length) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n\n for (uint256 j = 0; j < whatBytes.length; j++) {\n if (whereBytes[j] != whatBytes[j]) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n }\n\n return _tokenURI;\n }\n}\n" + }, + "@rarible/tokens/contracts/Mint721Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\n\ncontract Mint721Validator is ERC1271Validator {\n function __Mint721Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint721\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nabstract contract ITransferExecutor {\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal virtual;\n}\n" + }, + "@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../lib/LibDeal.sol\";\nimport \"./ITransferExecutor.sol\";\n\nabstract contract ITransferManager is ITransferExecutor {\n\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\n}" + }, + "@rarible/transfer-manager/contracts/lib/LibDeal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\nimport \"./LibFeeSide.sol\";\n\nlibrary LibDeal {\n struct DealSide {\n LibAsset.Asset asset;\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n address proxy;\n address from;\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/lib/LibFeeSide.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibFeeSide {\n\n enum FeeSide {NONE, LEFT, RIGHT}\n\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n return FeeSide.NONE;\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/lib/LibTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibTransfer {\n function transferEth(address to, uint value) internal {\n (bool success,) = to.call{ value: value }(\"\");\n require(success, \"transfer failed\");\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/RaribleTransferManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n ProtocolFeeData memory _protocolFee,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param _protocolFee protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n ProtocolFeeData memory _protocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = _protocolFee.buyerAmount;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" + }, + "@rarible/transfer-manager/contracts/TransferExecutor.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" + }, + "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract PunkTransferProxy is OperatorRole, ITransferProxy {\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, uint punkIndex) = abi.decode(asset.assetType.data, (address, uint));\n ICryptoPunksMarket punkToken = ICryptoPunksMarket(token);\n //check punk from real owner\n require(punkToken.punkIndexToAddress(punkIndex) == from, \"Seller not punk owner\");\n //buy punk to proxy, now proxy is owner\n punkToken.buyPunk(punkIndex);\n //Transfer ownership of a punk to buyer\n punkToken.transferPunk(to, punkIndex);\n }\n}" + }, + "src/AssetMatchersImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { AssetMatcherCollection } from \"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\";\n" + }, + "src/Auction.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {AuctionHouse1155} from \"@rarible/auction/contracts/1155/AuctionHouse1155.sol\";\nimport {AuctionHouse721} from \"@rarible/auction/contracts/721/AuctionHouse721.sol\";\nimport {Wrapper} from \"@rarible/auction/contracts/wrapper/Wrapper.sol\";" + }, + "src/ExchangeV2Import.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ExchangeV2} from \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {ExchangeMetaV2} from \"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\";" + }, + "src/ExchangeWrapperImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" + }, + "src/RaribleExchangeWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {RaribleExchangeWrapper} from \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" + }, + "src/RoyaltiesRegistryImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {RoyaltiesProviderV2Legacy} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol\";\nimport {RoyaltiesProviderArtBlocks} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol\";\nimport {RoyaltiesProviderArtBlocksV2} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol\";\n" + }, + "src/TokensImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\n//tokens 721\nimport {ERC721Rarible} from \"@rarible/tokens/contracts/erc-721/ERC721Rarible.sol\";\nimport {ERC721RaribleMinimal} from \"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport {ERC721RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\";\n\n//tokens 1155\nimport {ERC1155Rarible} from \"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\";\nimport {ERC1155RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\";\n\n//meta tokens\nimport {ERC721RaribleMeta} from \"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\";\nimport {ERC1155RaribleMeta} from \"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\";\n\n//beacons\nimport {ERC1155RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\";\nimport {ERC721RaribleMinimalBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\";\nimport {ERC721RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol\";\nimport {ERC1155RaribleBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\";\nimport {ERC721RaribleMinimalBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\";\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" + }, + "src/TransferProxiesImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ERC721LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\";\nimport {ERC1155LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\nimport {PunkTransferProxy} from \"@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol\";\n" + }, + "test/contracts/ERC721LazyMintTest.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol\";\n" + }, + "test/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" + }, + "test/contracts/TestERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155 } from \"@rarible/test/contracts/TestERC1155.sol\";\n\n" + }, + "test/contracts/TestERC1155RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol\";\n\n" + }, + "test/contracts/TestERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" + }, + "test/contracts/TestERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721 } from \"@rarible/test/contracts/TestERC721.sol\";\n" + }, + "test/contracts/TestERC721RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV1 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol\";\n" + }, + "test/contracts/TestERC721RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol\";\n\n" + }, + "test/contracts/WrapperHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport { WrapperHelper } from \"@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol\";" + }, + "test/exchange/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/solcInputs/6bd3e189b416974652fe89dcdf00f7eb.json b/projects/hardhat-deploy/deployments/oasys/solcInputs/6bd3e189b416974652fe89dcdf00f7eb.json new file mode 100644 index 000000000..d0271c5c8 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/solcInputs/6bd3e189b416974652fe89dcdf00f7eb.json @@ -0,0 +1,605 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal initializer {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712Upgradeable is Initializable {\n /* solhint-disable var-name-mixedcase */\n bytes32 private _HASHED_NAME;\n bytes32 private _HASHED_VERSION;\n bytes32 private constant _TYPE_HASH = keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n function __EIP712_init(string memory name, string memory version) internal initializer {\n __EIP712_init_unchained(name, version);\n }\n\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\n }\n\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\n return keccak256(\n abi.encode(\n typeHash,\n name,\n version,\n _getChainId(),\n address(this)\n )\n );\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n }\n\n function _getChainId() private view returns (uint256 chainId) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n\n /**\n * @dev The hash of the name parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712NameHash() internal virtual view returns (bytes32) {\n return _HASHED_NAME;\n }\n\n /**\n * @dev The hash of the version parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\n return _HASHED_VERSION;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165Upgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n function __ERC165_init() internal initializer {\n __ERC165_init_unchained();\n }\n\n function __ERC165_init_unchained() internal initializer {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165Upgradeable {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\n// solhint-disable-next-line compiler-version\npragma solidity >=0.4.24 <0.8.0;\n\nimport \"../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n */\nabstract contract Initializable {\n\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(_initializing || _isConstructor() || !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /// @dev Returns true if and only if the function is running in the constructor\n function _isConstructor() private view returns (bool) {\n return !AddressUpgradeable.isContract(address(this));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155HolderUpgradeable is Initializable, ERC1155ReceiverUpgradeable {\n function __ERC1155Holder_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ERC1155Holder_init_unchained();\n }\n\n function __ERC1155Holder_init_unchained() internal initializer {\n }\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\n function __ERC1155Receiver_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n }\n\n function __ERC1155Receiver_init_unchained() internal initializer {\n _registerInterface(\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\n );\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\nimport \"./IERC1155MetadataURIUpgradeable.sol\";\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC20Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable {\n using SafeMathUpgradeable for uint256;\n\n mapping (address => uint256) private _balances;\n\n mapping (address => mapping (address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n * a default value of 18.\n *\n * To select a different value for {decimals}, use {_setupDecimals}.\n *\n * All three of these values are immutable: they can only be set once during\n * construction.\n */\n function __ERC20_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC20_init_unchained(name_, symbol_);\n }\n\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n _decimals = 18;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n * called.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return _decimals;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * Requirements:\n *\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n * - the caller must have allowance for ``sender``'s tokens of at least\n * `amount`.\n */\n function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n /**\n * @dev Moves tokens `amount` from `sender` to `recipient`.\n *\n * This is internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: mint to the zero address\");\n\n _beforeTokenTransfer(address(0), account, amount);\n\n _totalSupply = _totalSupply.add(amount);\n _balances[account] = _balances[account].add(amount);\n emit Transfer(address(0), account, amount);\n }\n\n /**\n * @dev Destroys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: burn from the zero address\");\n\n _beforeTokenTransfer(account, address(0), amount);\n\n _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n _totalSupply = _totalSupply.sub(amount);\n emit Transfer(account, address(0), amount);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(address owner, address spender, uint256 amount) internal virtual {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Sets {decimals} to a value other than the default one of 18.\n *\n * WARNING: This function should only be called from the constructor. Most\n * applications that interact with token contracts will not expect\n * {decimals} to ever change, and may work incorrectly if it does.\n */\n function _setupDecimals(uint8 decimals_) internal virtual {\n _decimals = decimals_;\n }\n\n /**\n * @dev Hook that is called before any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * will be to transferred to `to`.\n * - when `from` is zero, `amount` tokens will be minted for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n uint256[44] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20Upgradeable {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721HolderUpgradeable is Initializable, IERC721ReceiverUpgradeable {\n function __ERC721Holder_init() internal initializer {\n __ERC721Holder_init_unchained();\n }\n\n function __ERC721Holder_init_unchained() internal initializer {\n }\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC721Upgradeable.sol\";\nimport \"./IERC721MetadataUpgradeable.sol\";\nimport \"./IERC721EnumerableUpgradeable.sol\";\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../utils/EnumerableSetUpgradeable.sol\";\nimport \"../../utils/EnumerableMapUpgradeable.sol\";\nimport \"../../utils/StringsUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) private _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap private _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits an {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[41] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721EnumerableUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the total amount of tokens stored by the contract.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);\n\n /**\n * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n * Use along with {totalSupply} to enumerate all tokens.\n */\n function tokenByIndex(uint256 index) external view returns (uint256);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721ReceiverUpgradeable {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the caller.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool _approved) external;\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal initializer {\n __Context_init_unchained();\n }\n\n function __Context_init_unchained() internal initializer {\n }\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n uint256[50] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing an enumerable variant of Solidity's\n * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]\n * type.\n *\n * Maps have the following properties:\n *\n * - Entries are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Entries are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableMap for EnumerableMap.UintToAddressMap;\n *\n * // Declare a set state variable\n * EnumerableMap.UintToAddressMap private myMap;\n * }\n * ```\n *\n * As of v3.0.0, only maps of type `uint256 -> address` (`UintToAddressMap`) are\n * supported.\n */\nlibrary EnumerableMapUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Map type with\n // bytes32 keys and values.\n // The Map implementation uses private functions, and user-facing\n // implementations (such as Uint256ToAddressMap) are just wrappers around\n // the underlying Map.\n // This means that we can only create new EnumerableMaps for types that fit\n // in bytes32.\n\n struct MapEntry {\n bytes32 _key;\n bytes32 _value;\n }\n\n struct Map {\n // Storage of map keys and values\n MapEntry[] _entries;\n\n // Position of the entry defined by a key in the `entries` array, plus 1\n // because index 0 means a key is not in the map.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex == 0) { // Equivalent to !contains(map, key)\n map._entries.push(MapEntry({ _key: key, _value: value }));\n // The entry is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n map._indexes[key] = map._entries.length;\n return true;\n } else {\n map._entries[keyIndex - 1]._value = value;\n return false;\n }\n }\n\n /**\n * @dev Removes a key-value pair from a map. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function _remove(Map storage map, bytes32 key) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex != 0) { // Equivalent to contains(map, key)\n // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one\n // in the array, and then remove the last entry (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = keyIndex - 1;\n uint256 lastIndex = map._entries.length - 1;\n\n // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n MapEntry storage lastEntry = map._entries[lastIndex];\n\n // Move the last entry to the index where the entry to delete is\n map._entries[toDeleteIndex] = lastEntry;\n // Update the index for the moved entry\n map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved entry was stored\n map._entries.pop();\n\n // Delete the index for the deleted slot\n delete map._indexes[key];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function _contains(Map storage map, bytes32 key) private view returns (bool) {\n return map._indexes[key] != 0;\n }\n\n /**\n * @dev Returns the number of key-value pairs in the map. O(1).\n */\n function _length(Map storage map) private view returns (uint256) {\n return map._entries.length;\n }\n\n /**\n * @dev Returns the key-value pair stored at position `index` in the map. O(1).\n *\n * Note that there are no guarantees on the ordering of entries inside the\n * array, and it may change when more entries are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {\n require(map._entries.length > index, \"EnumerableMap: index out of bounds\");\n\n MapEntry storage entry = map._entries[index];\n return (entry._key, entry._value);\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n */\n function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {\n uint256 keyIndex = map._indexes[key];\n if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)\n return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function _get(Map storage map, bytes32 key) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, \"EnumerableMap: nonexistent key\"); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n /**\n * @dev Same as {_get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {_tryGet}.\n */\n function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n // UintToAddressMap\n\n struct UintToAddressMap {\n Map _inner;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {\n return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {\n return _remove(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {\n return _contains(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns the number of elements in the map. O(1).\n */\n function length(UintToAddressMap storage map) internal view returns (uint256) {\n return _length(map._inner);\n }\n\n /**\n * @dev Returns the element stored at position `index` in the set. O(1).\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {\n (bytes32 key, bytes32 value) = _at(map._inner, index);\n return (uint256(key), address(uint160(uint256(value))));\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n *\n * _Available since v3.4._\n */\n function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {\n (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));\n return (success, address(uint160(uint256(value))));\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key)))));\n }\n\n /**\n * @dev Same as {get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryGet}.\n */\n function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n */\nlibrary EnumerableSetUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) { // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n bytes32 lastvalue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastvalue;\n // Update the index for the moved value\n set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n require(set._values.length > index, \"EnumerableSet: index out of bounds\");\n return set._values[index];\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuardUpgradeable is Initializable {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n function __ReentrancyGuard_init() internal initializer {\n __ReentrancyGuard_init_unchained();\n }\n\n function __ReentrancyGuard_init_unchained() internal initializer {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n // On the first call to nonReentrant, _notEntered will be true\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary StringsUpgradeable {\n /**\n * @dev Converts a `uint256` to its ASCII `string` representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n uint256 index = digits - 1;\n temp = value;\n while (temp != 0) {\n buffer[index--] = bytes1(uint8(48 + temp % 10));\n temp /= 10;\n }\n return string(buffer);\n }\n}\n" + }, + "@openzeppelin/contracts/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" + }, + "@openzeppelin/contracts/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165 is IERC165 {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n constructor () internal {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "@openzeppelin/contracts/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts/math/SafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\nimport \"./IBeacon.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy {\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) public payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _setBeacon(beacon, data);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address beacon) {\n bytes32 slot = _BEACON_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n beacon := sload(slot)\n }\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_beacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n require(\n Address.isContract(beacon),\n \"BeaconProxy: beacon is not a contract\"\n );\n require(\n Address.isContract(IBeacon(beacon).implementation()),\n \"BeaconProxy: beacon implementation is not a contract\"\n );\n bytes32 slot = _BEACON_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, beacon)\n }\n\n if (data.length > 0) {\n Address.functionDelegateCall(_implementation(), data, \"BeaconProxy: function call failed\");\n }\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "@openzeppelin/contracts/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {\n }\n}\n" + }, + "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../access/Ownable.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n constructor(address implementation_) public {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155.sol\";\nimport \"./IERC1155MetadataURI.sol\";\nimport \"./IERC1155Receiver.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../introspection/ERC165.sol\";\nimport \"../../math/SafeMath.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {\n using SafeMath for uint256;\n using Address for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n constructor (string memory uri_) public {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Receiver.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155Holder is ERC1155Receiver {\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Receiver.sol\";\nimport \"../../introspection/ERC165.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\n constructor() internal {\n _registerInterface(\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\n );\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155 is IERC165 {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURI is IERC1155 {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" + }, + "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155Receiver is IERC165 {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/ERC721Holder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721Receiver.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721Holder is IERC721Receiver {\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Pausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n bool private _paused;\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n constructor () internal {\n _paused = false;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n require(!paused(), \"Pausable: paused\");\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n require(paused(), \"Pausable: not paused\");\n _;\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" + }, + "@rarible/auction/contracts/1155/AuctionHouse1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase1155.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse1155 is ERC1155HolderUpgradeable, AuctionHouseBase1155 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse1155_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse1155_init_unchained();\n }\n\n function __AuctionHouse1155_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint96 _sellTokenValue,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC1155 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(_sellTokenValue > 0, \"incorrect _sellTokenValue\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenValue,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n\n transferNFT(\n _sellToken, \n _sellTokenId, \n _sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n sender,\n address(this)\n );\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime if it's not set\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId) internal {\n emit AuctionFinished(_auctionId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n address seller = currentAuction.seller;\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n currentAuction.sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n \n deactivateAuction(_auctionId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return this.supportsInterface(interfaceId);\n }\n\n}" + }, + "@rarible/auction/contracts/1155/AuctionHouseBase1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase1155 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint96 sellTokenValue;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n\n}" + }, + "@rarible/auction/contracts/721/AuctionHouse721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase721.sol\";\nimport \"../wrapper/TokenToAuction.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse721 is ERC721HolderUpgradeable, TokenToAuction, AuctionHouseBase721 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse721_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC721Holder_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse721_init_unchained();\n }\n\n function __AuctionHouse721_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC721 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n transferNFT(\n _sellToken, \n _sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n sender,\n address(this)\n );\n setAuctionForToken(_sellToken, _sellTokenId, currentAuctionId);\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId, address token, uint tokenId) internal {\n emit AuctionFinished(_auctionId);\n deleteAuctionForToken(token, tokenId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n address seller = currentAuction.seller;\n require(_checkAuctionExistence(seller), \"there is no auction with this id\");\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n \n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n /// @dev function to call from wrapper to put bid\n function putBidWrapper(uint256 _auctionId) external payable {\n require(auctions[_auctionId].buyAsset == address(0), \"only ETH bids allowed\");\n putBid(_auctionId, Bid(msg.value, LibBidDataV1.V1, \"\"));\n }\n\n}" + }, + "@rarible/auction/contracts/721/AuctionHouseBase721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase721 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n}" + }, + "@rarible/auction/contracts/AuctionHouseBase.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libs/LibAucDataV1.sol\";\nimport \"./libs/LibBidDataV1.sol\";\nimport \"./libs/SafeMathUpgradeable96.sol\";\n\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nabstract contract AuctionHouseBase is OwnableUpgradeable, ReentrancyGuardUpgradeable, RaribleTransferManager, TransferExecutor {\n using LibTransfer for address;\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n /// @dev default minimal auction duration and also the time for that auction is extended when it's about to end (endTime - now < EXTENSION_DURATION)\n uint96 internal constant EXTENSION_DURATION = 15 minutes;\n\n /// @dev maximum auction duration\n uint128 internal constant MAX_DURATION = 1000 days;\n\n /// @dev maximum fee base point\n uint internal constant MAX_FEE_BASE_POINT = 1000;\n\n /// @dev mapping to store eth amount that is ready to be withdrawn (used for faulty eth-bids)\n mapping(address => uint) readyToWithdraw;\n\n /// @dev latest auctionId\n uint256 public auctionId;\n\n /// @dev minimal auction duration\n uint96 public minimalDuration;\n\n /// @dev minimal bid increase in base points\n uint96 public minimalStepBasePoint;\n\n /// @dev bid struct\n struct Bid {\n // the amount \n uint amount;\n // version of Bid to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Bid, can be seen in \"LibBidDataV1.sol\"\n bytes data;\n }\n\n /// @dev event that emits when auction is created\n event AuctionCreated(uint indexed auctionId, address seller);\n /// @dev event that emits when bid is placed\n event BidPlaced(uint indexed auctionId, address buyer, uint endTime);\n /// @dev event that emits when auction is finished\n event AuctionFinished(uint indexed auctionId);\n /// @dev event that emits when auction is canceled\n event AuctionCancelled(uint indexed auctionId);\n /// @dev event that emits when auction is bought out\n event AuctionBuyOut(uint indexed auctionId, address buyer);\n\n /// @dev event that's emitted when user can withdraw ETH from the AuctionHouse\n event AvailableToWithdraw(address indexed owner, uint added, uint total);\n /// @dev event that's emitted when minimal auction duration changes\n event MinimalDurationChanged(uint oldValue, uint newValue);\n\n event MinimalStepChanged(uint oldValue, uint newValue);\n\n function __AuctionHouseBase_init_unchained(\n uint96 _minimalStepBasePoint\n ) internal initializer {\n auctionId = 1;\n minimalDuration = EXTENSION_DURATION;\n minimalStepBasePoint = _minimalStepBasePoint;\n }\n\n /// @dev increments auctionId and returns new value\n function getNextAndIncrementAuctionId() internal returns (uint256) {\n return auctionId++;\n }\n\n function changeMinimalDuration(uint96 newValue) external onlyOwner {\n emit MinimalDurationChanged(minimalDuration, newValue);\n minimalDuration = newValue;\n }\n\n function changeMinimalStep(uint96 newValue) external onlyOwner {\n emit MinimalStepChanged(minimalStepBasePoint, newValue);\n minimalStepBasePoint = newValue;\n }\n\n function transferNFT (\n address token,\n uint tokenId,\n uint value,\n bytes4 assetClass,\n address from,\n address to\n ) internal {\n transfer(\n getSellAsset(\n token,\n tokenId,\n value,\n assetClass\n ),\n from,\n to,\n proxies[assetClass]\n );\n }\n\n function transferBid(\n uint value,\n address token,\n address from,\n address to,\n address proxy\n ) internal {\n transfer(\n getBuyAsset(\n token,\n value\n ),\n from,\n to,\n proxy\n );\n }\n\n function getSellAsset(address token, uint tokenId, uint value, bytes4 assetClass) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n asset.assetType.assetClass = assetClass;\n asset.assetType.data = abi.encode(token, tokenId);\n }\n\n function getBuyAsset(address token, uint value) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n\n if (token == address(0)){\n asset.assetType.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n asset.assetType.assetClass = LibAsset.ERC20_ASSET_CLASS;\n asset.assetType.data = abi.encode(token);\n }\n }\n\n function getPayouts(address maker) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(maker);\n payout[0].value = 10000;\n return payout;\n }\n\n function getOriginFee(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee = new LibPart.Part[](1);\n originFee[0].account = payable(address(data));\n originFee[0].value = uint96(getValueFromData(data));\n return originFee;\n }\n\n function _checkAuctionRangeTime(uint endTime, uint startTime) internal view returns (bool){\n uint currentTime = block.timestamp;\n if (startTime > 0 && startTime > currentTime) {\n return false;\n }\n if (endTime > 0 && endTime <= currentTime){\n return false;\n }\n\n return true;\n }\n\n /// @dev returns true if newAmount is enough for buyOut\n function buyOutVerify(LibAucDataV1.DataV1 memory aucData, uint newAmount) internal pure returns (bool) {\n if (aucData.buyOutPrice > 0 && aucData.buyOutPrice <= newAmount) {\n return true;\n }\n return false;\n }\n\n /// @dev returns true if auction exists, false otherwise\n function _checkAuctionExistence(address seller) internal pure returns (bool){\n return seller != address(0);\n }\n\n /// @dev Used to withdraw faulty bids (bids that failed to return after out-bidding)\n function withdrawFaultyBid(address _to) external {\n address sender = _msgSender();\n uint amount = readyToWithdraw[sender];\n require( amount > 0, \"nothing to withdraw\");\n readyToWithdraw[sender] = 0;\n _to.transferEth(amount);\n }\n\n function _returnBid(\n Bid memory oldBid,\n address buyAsset,\n address oldBuyer,\n address proxy\n ) internal {\n // nothing to return\n if (oldBuyer == address(0)) {\n return;\n }\n if (buyAsset == address(0)) {\n (bool success,) = oldBuyer.call{ value: oldBid.amount }(\"\");\n if (!success) {\n uint currentValueToWithdraw = readyToWithdraw[oldBuyer];\n uint newValueToWithdraw = oldBid.amount.add(currentValueToWithdraw);\n readyToWithdraw[oldBuyer] = newValueToWithdraw;\n emit AvailableToWithdraw(oldBuyer, oldBid.amount, newValueToWithdraw);\n }\n } else {\n transferBid(\n oldBid.amount,\n buyAsset,\n address(this),\n oldBuyer,\n proxy\n );\n }\n }\n\n function _getProxy(address buyAsset) internal view returns(address){\n address proxy;\n if (buyAsset != address(0)){\n proxy = proxies[LibAsset.ERC20_ASSET_CLASS];\n }\n return proxy;\n }\n\n /// @dev check that msg.value more than bid amount with fees and return change\n function checkEthReturnChange(uint totalAmount, address buyer) internal {\n uint msgValue = msg.value;\n require(msgValue >= totalAmount, \"not enough ETH\");\n uint256 change = msgValue.sub(totalAmount);\n if (change > 0) {\n buyer.transferEth(change);\n }\n }\n\n /// @dev returns true if auction in progress, false otherwise\n function checkAuctionInProgress(address seller, uint endTime, uint startTime) internal view{\n require(_checkAuctionExistence(seller) && _checkAuctionRangeTime(endTime, startTime), \"auction is inactive\");\n }\n\n /// @dev reserves new bid and returns the last one if it exists\n function reserveBid(\n address buyAsset,\n address oldBuyer,\n address newBuyer,\n Bid memory oldBid,\n address proxy,\n uint newTotalAmount\n ) internal {\n // return old bid if theres any\n _returnBid(\n oldBid,\n buyAsset,\n oldBuyer,\n proxy\n );\n \n //lock new bid\n transferBid(\n newTotalAmount,\n buyAsset,\n newBuyer,\n address(this),\n proxy\n );\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function _getMinimalNextBid(address buyer, uint96 minimalPrice, uint amount) internal view returns (uint minBid){\n if (buyer == address(0x0)) {\n minBid = minimalPrice;\n } else {\n minBid = amount.add(amount.bp(minimalStepBasePoint));\n }\n }\n\n function getValueFromData(uint data) internal pure returns(uint) {\n return (data >> 160);\n }\n\n uint256[50] private ______gap;\n}" + }, + "@rarible/auction/contracts/libs/LibAucDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Auction struct\nlibrary LibAucDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Auction data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n // auction duration\n uint96 duration;\n // auction startTime\n uint96 startTime;\n // auction buyout price\n uint96 buyOutPrice;\n }\n\n /// @dev returns parsed data field of an Auction (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n }\n } else {\n revert(\"wrong auction dataType\");\n }\n }\n}\n\n" + }, + "@rarible/auction/contracts/libs/LibBidDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Bid struct\nlibrary LibBidDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Bid data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n }\n\n /// @dev returns parsed data field of a Bid (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n } \n } else {\n revert(\"wrong bid dataType\");\n }\n }\n}\n" + }, + "@rarible/auction/contracts/libs/SafeMathUpgradeable96.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable96 {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint96 a, uint96 b) internal pure returns (uint96) {\n uint96 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint96 a, uint96 b) internal pure returns (uint96) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n}\n" + }, + "@rarible/auction/contracts/wrapper/IMarketWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/**\n * @title IMarketWrapper\n * @author Anna Carroll\n * @notice IMarketWrapper provides a common interface for\n * interacting with NFT auction markets.\n * Contracts can abstract their interactions with\n * different NFT markets using IMarketWrapper.\n * NFT markets can become compatible with any contract\n * using IMarketWrapper by deploying a MarketWrapper contract\n * that implements this interface using the logic of their Market.\n *\n * WARNING: MarketWrapper contracts should NEVER write to storage!\n * When implementing a MarketWrapper, exercise caution; a poorly implemented\n * MarketWrapper contract could permanently lose access to the NFT or user funds.\n */\ninterface IMarketWrapper {\n /**\n * @notice Given the auctionId, nftContract, and tokenId, check that:\n * 1. the auction ID matches the token\n * referred to by tokenId + nftContract\n * 2. the auctionId refers to an *ACTIVE* auction\n * (e.g. an auction that will accept bids)\n * within this market contract\n * 3. any additional validation to ensure that\n * a PartyBid can bid on this auction\n * (ex: if the market allows arbitrary bidding currencies,\n * check that the auction currency is ETH)\n * Note: This function probably should have been named \"isValidAuction\"\n * @dev Called in PartyBid.sol in `initialize` at line 174\n * @return TRUE if the auction is valid\n */\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external view returns (bool);\n\n /**\n * @notice Calculate the minimum next bid for this auction.\n * PartyBid contracts always submit the minimum possible\n * bid that will be accepted by the Market contract.\n * usually, this is either the reserve price (if there are no bids)\n * or a certain percentage increase above the current highest bid\n * @dev Called in PartyBid.sol in `bid` at line 251\n * @return minimum bid amount\n */\n function getMinimumBid(uint256 auctionId) external view returns (uint256);\n\n /**\n * @notice Query the current highest bidder for this auction\n * It is assumed that there is always 1 winning highest bidder for an auction\n * This is used to ensure that PartyBid cannot outbid itself if it is already winning\n * @dev Called in PartyBid.sol in `bid` at line 241\n * @return highest bidder\n */\n function getCurrentHighestBidder(uint256 auctionId)\n external\n view\n returns (address);\n\n /**\n * @notice Submit bid to Market contract\n * @dev Called in PartyBid.sol in `bid` at line 259\n */\n function bid(uint256 auctionId, uint256 bidAmount) external;\n\n /**\n * @notice Determine whether the auction has been finalized\n * Used to check if it is still possible to bid\n * And to determine whether the PartyBid should finalize the auction\n * @dev Called in PartyBid.sol in `bid` at line 247\n * @dev and in `finalize` at line 288\n * @return TRUE if the auction has been finalized\n */\n function isFinalized(uint256 auctionId) external view returns (bool);\n\n /**\n * @notice Finalize the results of the auction\n * on the Market contract\n * It is assumed that this operation is performed once for each auction,\n * that after it is done the auction is over and the NFT has been\n * transferred to the auction winner.\n * @dev Called in PartyBid.sol in `finalize` at line 289\n */\n function finalize(uint256 auctionId) external;\n}" + }, + "@rarible/auction/contracts/wrapper/TokenToAuction.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/// @dev contract to add tokenToAuctionId functionality to auctionHouse\ncontract TokenToAuction {\n /// @dev mapping to store auction ids for token address + token id (only stores erc-721 tokens)\n mapping(address => mapping(uint256 => uint256)) private tokenToAuctionId;\n\n /// @dev returns auction id by token address and token id\n function getAuctionByToken(address _collection, uint tokenId) external view returns(uint) {\n return tokenToAuctionId[_collection][tokenId];\n }\n\n /// @dev sets auction id for token address and token id\n function setAuctionForToken(address token, uint tokenId, uint auctionId) internal {\n tokenToAuctionId[token][tokenId] = auctionId;\n }\n\n /// @dev deletes auctionId from tokenToAuctionId\n function deleteAuctionForToken(address token, uint tokenId) internal {\n delete tokenToAuctionId[token][tokenId];\n }\n \n uint256[50] private ______gap;\n}" + }, + "@rarible/auction/contracts/wrapper/Wrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\nimport \"./IMarketWrapper.sol\";\nimport \"../721/AuctionHouse721.sol\";\n\ncontract Wrapper is IMarketWrapper{\n\n AuctionHouse721 internal immutable auction;\n\n constructor(address _auction) {\n auction = AuctionHouse721(_auction);\n }\n\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external override view returns (bool){\n return auctionId == auction. getAuctionByToken(nftContract, tokenId);\n }\n\n function getMinimumBid(uint256 auctionId) external override view returns (uint256){\n return auction.getMinimalNextBid(auctionId);\n }\n\n function getCurrentHighestBidder(uint256 auctionId)\n external\n override\n view\n returns (address){\n return auction.getCurrentBuyer(auctionId);\n }\n\n function bid(uint256 auctionId, uint256 bidAmount) external override{\n (bool success, bytes memory returnData) =\n address(auction).call{value: bidAmount}(\n abi.encodeWithSignature(\"putBidWrapper(uint256)\", auctionId)\n );\n require(success, string(returnData));\n }\n\n function isFinalized(uint256 auctionId) external override view returns (bool){\n return !auction.checkAuctionExistence(auctionId);\n }\n\n function finalize(uint256 auctionId) external override{\n auction.finishAuction(auctionId);\n }\n}" + }, + "@rarible/custom-matchers/contracts/AssetMatcherCollection.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\n/*\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\n */\ncontract AssetMatcherCollection is IAssetMatcher {\n\n bytes constant EMPTY = \"\";\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\n if (\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\n ) {\n (address leftToken) = abi.decode(leftAssetType.data, (address));\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\n if (leftToken == rightToken) {\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\n }\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n}" + }, + "@rarible/exchange-interfaces/contracts/IAssetMatcher.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface IAssetMatcher {\n function matchAssets(\n LibAsset.AssetType memory leftAssetType,\n LibAsset.AssetType memory rightAssetType\n ) external view returns (LibAsset.AssetType memory);\n}\n" + }, + "@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface ICryptoPunksMarket {\n //to get address punk owner from mapping (uint => address) public punkIndexToAddress;\n function punkIndexToAddress(uint key) external returns (address);\n\n function buyPunk(uint punkIndex) payable external;\n\n function transferPunk(address to, uint punkIndex) external;\n\n function offerPunkForSaleToAddress(uint punkIndex, uint minSalePriceInWei, address toAddress) external;\n}" + }, + "@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\ninterface IERC20TransferProxy {\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\n}\n" + }, + "@rarible/exchange-interfaces/contracts/INftTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\ninterface INftTransferProxy {\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n}\n" + }, + "@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/exchange-interfaces/contracts/ITransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" + }, + "@rarible/exchange-v2/contracts/AssetMatcher.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\n require(newFill.leftValue > 0, \"nothing to fill\");\n }\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\n require(newFill.rightValue > 0, \"nothing to fill\");\n }\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibDirectTransfer { //LibDirectTransfers\n /*All buy parameters need for create buyOrder and sellOrder*/\n struct Purchase {\n address sellOrderMaker; //\n uint256 sellOrderNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 sellOrderPaymentAmount;\n address paymentToken;\n uint256 sellOrderSalt;\n uint sellOrderStart;\n uint sellOrderEnd;\n bytes4 sellOrderDataType;\n bytes sellOrderData;\n bytes sellOrderSignature;\n\n uint256 buyOrderPaymentAmount;\n uint256 buyOrderNftAmount;\n bytes buyOrderData;\n }\n\n /*All accept bid parameters need for create buyOrder and sellOrder*/\n struct AcceptBid {\n address bidMaker; //\n uint256 bidNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 bidPaymentAmount;\n address paymentToken;\n uint256 bidSalt;\n uint bidStart;\n uint bidEnd;\n bytes4 bidDataType;\n bytes bidData;\n bytes bidSignature;\n\n uint256 sellOrderPaymentAmount;\n uint256 sellOrderNftAmount;\n bytes sellOrderData;\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibFill.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n * @return tuple representing fill of both assets\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary LibMath {\n using SafeMathUpgradeable for uint;\n\n /// @dev Calculates partial value given a numerator and denominator rounded down.\n /// Reverts if rounding error is >= 0.1%\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return partialAmount value of target rounded down.\n function safeGetPartialAmountFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorFloor(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding down.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // The absolute rounding error is the difference between the rounded\n // value and the ideal value. The relative rounding error is the\n // absolute rounding error divided by the absolute value of the\n // ideal value. This is undefined when the ideal value is zero.\n //\n // The ideal value is `numerator * target / denominator`.\n // Let's call `numerator * target % denominator` the remainder.\n // The absolute error is `remainder / denominator`.\n //\n // When the ideal value is zero, we require the absolute error to\n // be zero. Fortunately, this is always the case. The ideal value is\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\n // remainder and absolute error are also zero.\n if (target == 0 || numerator == 0) {\n return false;\n }\n\n // Otherwise, we want the relative rounding error to be strictly\n // less than 0.1%.\n // The relative error is `remainder / (numerator * target)`.\n // We want the relative error less than 1 / 1000:\n // remainder / (numerator * target) < 1 / 1000\n // or equivalently:\n // 1000 * remainder < numerator * target\n // so we have a rounding error iff:\n // 1000 * remainder >= numerator * target\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n isError = remainder.mul(1000) >= numerator.mul(target);\n }\n\n function safeGetPartialAmountCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorCeil(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding up.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // See the comments in `isRoundingError`.\n if (target == 0 || numerator == 0) {\n // When either is zero, the ideal value and rounded value are zero\n // and there is no rounding error. (Although the relative error\n // is undefined.)\n return false;\n }\n // Compute remainder as before\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n remainder = denominator.sub(remainder) % denominator;\n isError = remainder.mul(1000) >= numerator.mul(target);\n return isError;\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrder.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nimport \"./LibMath.sol\";\nimport \"./LibOrderDataV3.sol\";\nimport \"./LibOrderDataV2.sol\";\nimport \"./LibOrderDataV1.sol\";\n\nlibrary LibOrder {\n using SafeMathUpgradeable for uint;\n\n bytes32 constant ORDER_TYPEHASH = keccak256(\n \"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\n\n struct Order {\n address maker;\n LibAsset.Asset makeAsset;\n address taker;\n LibAsset.Asset takeAsset;\n uint salt;\n uint start;\n uint end;\n bytes4 dataType;\n bytes data;\n }\n\n /**\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\n * @param order initial order to calculate remaining values for\n * @param fill current fill of the left order (0 if order is unfilled)\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\n */\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\n if (isMakeFill) {\n makeValue = order.makeAsset.value.sub(fill);\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\n } else {\n takeValue = order.takeAsset.value.sub(fill);\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \n } \n }\n\n function hashKey(Order memory order) internal pure returns (bytes32) {\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt\n ));\n } else {\n //order.data is in hash for V2, V3 and all new order\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt,\n order.data\n ));\n }\n }\n\n function hash(Order memory order) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ORDER_TYPEHASH,\n order.maker,\n LibAsset.hash(order.makeAsset),\n order.taker,\n LibAsset.hash(order.takeAsset),\n order.salt,\n order.start,\n order.end,\n order.dataType,\n keccak256(order.data)\n ));\n }\n\n function validateOrderTime(LibOrder.Order memory order) internal view {\n require(order.start == 0 || order.start < block.timestamp, \"Order start validation failed\");\n require(order.end == 0 || order.end > block.timestamp, \"Order end validation failed\");\n }\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderData.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibOrderData {\n\n struct GenericOrderData {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n } \n\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\n if (order.dataType == LibOrderDataV1.V1) {\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n } else if (order.dataType == LibOrderDataV2.V2) {\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n dataOrder.isMakeFill = data.isMakeFill;\n } else if (order.dataType == 0xffffffff) {\n } else {\n revert(\"Unknown Order data type\");\n }\n if (dataOrder.payouts.length == 0) {\n dataOrder.payouts = payoutSet(order.maker);\n }\n }\n\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(orderAddress);\n payout[0].value = 10000;\n return payout;\n }\n\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee;\n\n if (dataFirst > 0 && dataSecond > 0){\n originFee = new LibPart.Part[](2);\n\n originFee[0] = uintToLibPart(dataFirst);\n originFee[1] = uintToLibPart(dataSecond);\n }\n\n if (dataFirst > 0 && dataSecond == 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataFirst);\n }\n\n if (dataFirst == 0 && dataSecond > 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataSecond);\n }\n\n return originFee;\n }\n\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payouts;\n\n if (data > 0) {\n payouts = new LibPart.Part[](1);\n payouts[0] = uintToLibPart(data);\n }\n\n return payouts;\n }\n\n /**\n @notice converts uint to LibPart.Part\n @param data address and value encoded in uint (first 12 bytes )\n @return result LibPart.Part \n */\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\n if (data > 0){\n result.account = payable(address(data));\n result.value = uint96(data >> 160);\n }\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n struct DataV1 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV2 {\n bytes4 constant public V2 = bytes4(keccak256(\"V2\"));\n\n struct DataV2 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\n/// @dev deprecated\nlibrary LibOrderDataV3 {\n bytes4 constant public V3_SELL = bytes4(keccak256(\"V3_SELL\"));\n bytes4 constant public V3_BUY = bytes4(keccak256(\"V3_BUY\"));\n\n struct DataV3_SELL {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n uint maxFeesBasePoint;\n bytes32 marketplaceMarker;\n }\n\n struct DataV3_BUY {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n bytes32 marketplaceMarker;\n }\n\n}\n" + }, + "@rarible/exchange-v2/contracts/OrderValidator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./libraries/LibOrder.sol\";\n\nimport \"@rarible/lib-signature/contracts/IERC1271.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\n\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\n using LibSignature for bytes32;\n using AddressUpgradeable for address;\n \n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function __OrderValidator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Exchange\", \"2\");\n }\n\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\n if (order.salt == 0) {\n if (order.maker != address(0)) {\n require(_msgSender() == order.maker, \"maker is not tx sender\");\n }\n } else {\n if (_msgSender() != order.maker) {\n bytes32 hash = LibOrder.hash(order);\n // if maker is contract checking ERC1271 signature\n if (order.maker.isContract()) {\n require(\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\n \"contract order signature verification error\"\n );\n } else {\n // if maker is not contract then checking ECDSA signature\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\n revert(\"order signature verification error\");\n } else {\n require (order.maker != address(0), \"no maker\");\n }\n }\n }\n }\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../../contracts/ExchangeV2.sol\";\n\ncontract RaribleTestHelper {\n function encode(LibOrderDataV1.DataV1 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV2(LibOrderDataV2.DataV2 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_SELL(LibOrderDataV3.DataV3_SELL memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_BUY(LibOrderDataV3.DataV3_BUY memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value)\n external\n pure\n returns (uint256)\n {\n return (uint256(value) << 160) + uint256(account);\n }\n\n function hashKey(LibOrder.Order calldata order)\n external\n pure\n returns (bytes32)\n {\n return LibOrder.hashKey(order);\n }\n\n function hashV2(\n address maker,\n LibAsset.Asset memory makeAsset,\n LibAsset.Asset memory takeAsset,\n uint256 salt,\n bytes memory data\n ) public pure returns (bytes32) {\n return\n keccak256(\n abi.encode(\n maker,\n LibAsset.hash(makeAsset.assetType),\n LibAsset.hash(takeAsset.assetType),\n salt,\n data\n )\n );\n }\n\n function encodeLazy721(LibERC721LazyMint.Mint721Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n function encodeLazy1155(LibERC1155LazyMint.Mint1155Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n\ninterface IBlur {\n enum Side { Buy, Sell }\n enum SignatureVersion { Single, Bulk }\n enum AssetType { ERC721, ERC1155 }\n\n struct Fee {\n uint16 rate;\n address payable recipient;\n }\n \n struct Order {\n address trader;\n Side side;\n address matchingPolicy;\n address collection;\n uint256 tokenId;\n uint256 amount;\n address paymentToken;\n uint256 price;\n uint256 listingTime;\n /* Order expiration timestamp - 0 for oracle cancellations. */\n uint256 expirationTime;\n Fee[] fees;\n uint256 salt;\n bytes extraParams;\n }\n\n struct Input {\n Order order;\n uint8 v;\n bytes32 r;\n bytes32 s;\n bytes extraSignature;\n SignatureVersion signatureVersion;\n uint256 blockNumber;\n }\n\n function execute(Input calldata sell, Input calldata buy)\n external\n payable;\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\n\ninterface IExchangeV2 {\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable;\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable;\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../libraries/LibLooksRare.sol\";\n\ninterface ILooksRare {\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\n\n /**\n * @notice This function allows a user to execute a taker bid (against a maker ask).\n * @param takerBid Taker bid struct\n * @param makerAsk Maker ask struct\n * @param makerSignature Maker signature\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\n * @param affiliate Affiliate address\n */\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\n}\n" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ILSSVMRouter.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\ninterface ILSSVMRouter {\n struct PairSwapSpecific {\n address pair;\n uint256[] nftIds;\n }\n\n /**\n @notice Swaps ETH into specific NFTs using multiple pairs.\n @param swapList The list of pairs to trade with and the IDs of the NFTs to buy from each.\n @param ethRecipient The address that will receive the unspent ETH input\n @param nftRecipient The address that will receive the NFT output\n @param deadline The Unix timestamp (in seconds) at/after which the swap will revert\n @return remainingValue The unspent ETH amount\n */\n function swapETHForSpecificNFTs(\n PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n )\n external\n payable\n returns (uint256 remainingValue);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"../libraries/LibSeaPort.sol\";\n\ninterface ISeaPort {\n function fulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder calldata advancedOrder,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n bytes32 fulfillerConduitKey,\n address recipient\n ) external payable returns (bool fulfilled);\n\n function fulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\n bytes32 fulfillerConduitKey,\n address recipient,\n uint256 maximumFulfilled\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\n\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\n external\n payable\n returns (bool fulfilled);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface IWyvernExchange {\n function atomicMatch_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n\n enum Side {\n Buy,\n Sell\n }\n\n enum SaleKind {\n FixedPrice,\n DutchAuction\n }\n\n function calculateFinalPrice(\n Side side,\n SaleKind saleKind,\n uint256 basePrice,\n uint256 extra,\n uint256 listingTime,\n uint256 expirationTime\n ) external view returns (uint256);\n}" + }, + "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface Ix2y2 {\n\n struct OrderItem {\n uint256 price;\n bytes data;\n }\n\n struct Pair721 {\n address token;\n uint256 tokenId;\n }\n\n struct Pair1155 {\n address token;\n uint256 tokenId;\n uint256 amount;\n }\n\n struct Order {\n uint256 salt;\n address user;\n uint256 network;\n uint256 intent;\n uint256 delegateType;\n uint256 deadline;\n address currency;\n bytes dataMask;\n OrderItem[] items;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n uint8 signVersion;\n }\n\n struct Fee {\n uint256 percentage;\n address to;\n }\n\n struct SettleDetail {\n Op op;\n uint256 orderIdx;\n uint256 itemIdx;\n uint256 price;\n bytes32 itemHash;\n address executionDelegate;\n bytes dataReplacement;\n uint256 bidIncentivePct;\n uint256 aucMinIncrementPct;\n uint256 aucIncDurationSecs;\n Fee[] fees;\n }\n\n struct SettleShared {\n uint256 salt;\n uint256 deadline;\n uint256 amountToEth;\n uint256 amountToWeth;\n address user;\n bool canFail;\n }\n\n struct RunInput {\n Order[] orders;\n SettleDetail[] details;\n SettleShared shared;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n }\n\n enum Op {\n INVALID,\n // off-chain\n COMPLETE_SELL_OFFER,\n COMPLETE_BUY_OFFER,\n CANCEL_OFFER,\n // auction\n BID,\n COMPLETE_AUCTION,\n REFUND_AUCTION,\n REFUND_AUCTION_STUCK_ITEM\n }\n\n function run(RunInput memory input) external payable;\n}" + }, + "@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\nabstract contract IsPausable is Ownable {\n bool public paused;\n\n event Paused(bool paused);\n\n function pause(bool _paused) external onlyOwner {\n paused = _paused;\n emit Paused(_paused);\n }\n\n function requireNotPaused() internal view {\n require (!paused, \"the contract is paused\");\n }\n\n}\n" + }, + "@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibLooksRare {\n struct MakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address signer; // signer of the maker order\n address collection; // collection address\n uint256 price; // price (used as )\n uint256 tokenId; // id of the token\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\n address currency; // currency (e.g., WETH)\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\n uint256 startTime; // startTime in timestamp\n uint256 endTime; // endTime in timestamp\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // additional parameters\n uint8 v; // v: parameter (27 or 28)\n bytes32 r; // r: parameter\n bytes32 s; // s: parameter\n }\n\n struct TakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address taker; // msg.sender\n uint256 price; // final price for the purchase\n uint256 tokenId;\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // other params (e.g., tokenId)\n }\n\n /**\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\n */\n enum CollectionType {\n ERC721,\n ERC1155\n }\n\n /**\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\n */\n enum QuoteType {\n Bid,\n Ask\n }\n /**\n * 1. Maker struct\n */\n\n /**\n * @notice Maker is the struct for a maker order.\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\n * @param globalNonce Global user order nonce for maker orders\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\n * @param strategyId Strategy id\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\n * @param collection Collection address\n * @param currency Currency address (@dev address(0) = ETH)\n * @param signer Signer address\n * @param startTime Start timestamp\n * @param endTime End timestamp\n * @param price Minimum price for maker ask, maximum price for maker bid\n * @param itemIds Array of itemIds\n * @param amounts Array of amounts\n * @param additionalParameters Extra data specific for the order\n */\n struct Maker {\n QuoteType quoteType;\n uint256 globalNonce;\n uint256 subsetNonce;\n uint256 orderNonce;\n uint256 strategyId;\n CollectionType collectionType;\n address collection;\n address currency;\n address signer;\n uint256 startTime;\n uint256 endTime;\n uint256 price;\n uint256[] itemIds;\n uint256[] amounts;\n bytes additionalParameters;\n }\n\n /**\n * 2. Taker struct\n */\n\n /**\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\n * @param additionalParameters Extra data specific for the order\n */\n struct Taker {\n address recipient;\n bytes additionalParameters;\n }\n\n /**\n * 3. Merkle tree struct\n */\n\n enum MerkleTreeNodePosition {\n Left,\n Right\n }\n\n /**\n * @notice MerkleTreeNode is a MerkleTree's node.\n * @param value It can be an order hash or a proof\n * @param position The node's position in its branch.\n * It can be left or right or none\n * (before the tree is sorted).\n */\n struct MerkleTreeNode {\n bytes32 value;\n MerkleTreeNodePosition position;\n }\n\n /**\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\n * @dev A Merkle tree can be computed with order hashes.\n * It can contain order hashes from both maker bid and maker ask structs.\n * @param root Merkle root\n * @param proof Array containing the merkle proof\n */\n struct MerkleTree {\n bytes32 root;\n MerkleTreeNode[] proof;\n }\n}\n" + }, + "@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" + }, + "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n address public immutable seaPort_1_6;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,//0\n WyvernExchange,//1\n SeaPort_1_1,//2\n X2Y2,//3\n LooksRareOrders,//4\n SudoSwap,//5\n SeaPort_1_4,//6\n LooksRareV2,//7\n Blur,//8\n SeaPort_1_5,//9\n SeaPort_1_6//10\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[11] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n //address _seaPort_1_6, 10\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n seaPort_1_6 = marketplaces[10];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" + }, + "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" + }, + "@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"./LibERC1155LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC1155LazyMint is IERC1155Upgradeable {\n\n event Supply(\n uint256 tokenId,\n uint256 value\n );\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC1155LazyMint.Mint1155Data memory data,\n address to,\n uint256 _amount\n ) external;\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) external;\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC1155LazyMint {\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC1155_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\n\n struct Mint1155Data {\n uint tokenId;\n string tokenURI;\n uint supply;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n data.supply,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"./LibERC721LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC721LazyMint is IERC721Upgradeable {\n\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external;\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external;\n}\n" + }, + "@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC721LazyMint {\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC721_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\n\n struct Mint721Data {\n uint tokenId;\n string tokenURI;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n\n}\n" + }, + "@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/erc-721/IERC721LazyMint.sol\";\n\ncontract ERC721LazyMintTest is IERC721LazyMint, ERC721Upgradeable {\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external override {\n _mint(to, data.tokenId);\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external override {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n this.mintAndTransfer(data, to);\n }\n }\n\n function encode(LibERC721LazyMint.Mint721Data memory data)\n external\n view\n returns (bytes memory)\n {\n return abi.encode(address(this), data);\n }\n}\n" + }, + "@rarible/lib-asset/contracts/LibAsset.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibAsset {\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\"ETH\"));\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\"ERC20\"));\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\"ERC721\"));\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\"ERC1155\"));\n bytes4 constant public COLLECTION = bytes4(keccak256(\"COLLECTION\"));\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\"CRYPTO_PUNKS\"));\n\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\n \"AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes32 constant ASSET_TYPEHASH = keccak256(\n \"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n struct AssetType {\n bytes4 assetClass;\n bytes data;\n }\n\n struct Asset {\n AssetType assetType;\n uint value;\n }\n\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPE_TYPEHASH,\n assetType.assetClass,\n keccak256(assetType.data)\n ));\n }\n\n function hash(Asset memory asset) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPEHASH,\n hash(asset.assetType),\n asset.value\n ));\n }\n\n}\n" + }, + "@rarible/lib-bp/contracts/BpLibrary.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary BpLibrary {\n using SafeMathUpgradeable for uint;\n\n function bp(uint value, uint bpValue) internal pure returns (uint) {\n return value.mul(bpValue).div(10000);\n }\n}\n" + }, + "@rarible/lib-part/contracts/LibPart.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibPart {\n bytes32 public constant TYPE_HASH = keccak256(\"Part(address account,uint96 value)\");\n\n struct Part {\n address payable account;\n uint96 value;\n }\n\n function hash(Part memory part) internal pure returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\n }\n}\n" + }, + "@rarible/lib-signature/contracts/ERC1271.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nabstract contract ERC1271 {\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\n\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\n\n /**\n * @dev Function must be implemented by deriving contract\n * @param _hash Arbitrary length data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\n *\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\n\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\n }\n}" + }, + "@rarible/lib-signature/contracts/IERC1271.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ninterface IERC1271 {\n\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param _hash Hash of the data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n *\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\n}" + }, + "@rarible/lib-signature/contracts/LibSignature.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nlibrary LibSignature {\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature)\n internal\n pure\n returns (address)\n {\n // Check the signature length\n if (signature.length != 65) {\n revert(\"ECDSA: invalid signature length\");\n }\n\n // Divide the signature in r, s and v variables\n bytes32 r;\n bytes32 s;\n uint8 v;\n\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n // solhint-disable-next-line no-inline-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n\n return recover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n require(\n uint256(s) <=\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\n \"ECDSA: invalid signature 's' value\"\n );\n\n // If the signature is valid (and not malleable), return the signer address\n // v > 30 is a special case, we need to adjust hash with \"\\x19Ethereum Signed Message:\\n32\"\n // and v = v - 4\n address signer;\n if (v > 30) {\n require(\n v - 4 == 27 || v - 4 == 28,\n \"ECDSA: invalid signature 'v' value\"\n );\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\n } else {\n require(v == 27 || v == 28, \"ECDSA: invalid signature 'v' value\");\n signer = ecrecover(hash, v, r, s);\n }\n\n require(signer != address(0), \"ECDSA: invalid signature\");\n\n return signer;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * replicates the behavior of the\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n * JSON-RPC method.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash)\n internal\n pure\n returns (bytes32)\n {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return\n keccak256(\n abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash)\n );\n }\n}\n" + }, + "@rarible/meta-tx/contracts/EIP712MetaTransaction.sol": { + "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" + }, + "@rarible/role-operator/contracts/OperatorRole.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocksV2.sol\";\n\ncontract RoyaltiesProviderArtBlocksV2 is IRoyaltiesProvider {\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n RoyaltyArtBlocksV2 artBlocksV2 = RoyaltyArtBlocksV2(token);\n\n (address payable[] memory recipients, uint256[] memory bps) = artBlocksV2.getRoyalties(tokenId);\n \n uint256 len = recipients.length;\n\n LibPart.Part[] memory result = new LibPart.Part[](len);\n \n for (uint i = 0; i < len; i++) {\n result[i].account = recipients[i];\n result[i].value = uint96(bps[i]);\n }\n\n return result;\n }\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyV2Legacy.sol\";\n\ncontract RoyaltiesProviderV2Legacy is IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n return RoyaltyV2Legacy(token).getRoyalties(tokenId);\n }\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocks.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocks {\n \n function getRoyaltyData(uint256 _tokenId) external virtual view returns (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID);\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocksV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocksV2 {\n \n /**\n * @notice Gets royalty Basis Points (BPS) for token ID `_tokenId`.\n * This conforms to the IManifold interface designated in the Royalty\n * Registry's RoyaltyEngineV1.sol contract.\n * ref: https://github.com/manifoldxyz/royalty-registry-solidity\n * @param _tokenId Token ID to be queried.\n * @return recipients Array of royalty payment recipients\n * @return bps Array of Basis Points (BPS) allocated to each recipient,\n * aligned by index.\n * @dev reverts if invalid _tokenId\n * @dev only returns recipients that have a non-zero BPS allocation\n */\n function getRoyalties(uint256 _tokenId) \n external \n view\n virtual\n returns (\n address payable[] memory recipients, \n uint256[] memory bps\n );\n\n}\n" + }, + "@rarible/royalties-registry/contracts/providers/RoyaltyV2Legacy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" + }, + "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" + }, + "@rarible/royalties/contracts/IERC2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n///\n/// @dev Interface for the NFT Royalty Standard\n///\n//interface IERC2981 is IERC165 {\ninterface IERC2981 {\n /// ERC165 bytes to add to interface array - set in parent contract\n /// implementing this standard\n ///\n /// bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n /// _registerInterface(_INTERFACE_ID_ERC2981);\n\n /// @notice Called with the sale price to determine how much royalty\n // is owed and to whom.\n /// @param _tokenId - the NFT asset queried for royalty information\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\n /// @return receiver - address of who should be sent the royalty payment\n /// @return royaltyAmount - the royalty payment amount for _salePrice\n function royaltyInfo(\n uint256 _tokenId,\n uint256 _salePrice\n ) external view returns (\n address receiver,\n uint256 royaltyAmount\n );\n}" + }, + "@rarible/royalties/contracts/impl/AbstractRoyalties.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract AbstractRoyalties {\n mapping (uint256 => LibPart.Part[]) internal royalties;\n\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\n uint256 totalValue;\n for (uint i = 0; i < _royalties.length; ++i) {\n require(_royalties[i].account != address(0x0), \"Recipient should be present\");\n require(_royalties[i].value != 0, \"Royalty value should be positive\");\n totalValue += _royalties[i].value;\n royalties[id].push(_royalties[i]);\n }\n require(totalValue < 10000, \"Royalty total value should be < 10000\");\n _onRoyaltiesSet(id, _royalties);\n }\n\n function _updateAccount(uint256 _id, address _from, address _to) internal {\n uint length = royalties[_id].length;\n for(uint i = 0; i < length; ++i) {\n if (royalties[_id][i].account == _from) {\n royalties[_id][i].account = payable(address(uint160(_to)));\n }\n }\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\n}\n" + }, + "@rarible/royalties/contracts/impl/RoyaltiesV1Impl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV1.sol\";\n\ncontract RoyaltiesV1Impl is AbstractRoyalties, RoyaltiesV1 {\n\n function getFeeRecipients(uint256 id) public override view returns (address payable[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n address payable[] memory result = new address payable[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = address(uint160(_royalties[i].account));\n }\n return result;\n }\n\n function getFeeBps(uint256 id) public override view returns (uint[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n uint[] memory result = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = _royalties[i].value;\n }\n return result;\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n address[] memory recipients = new address[](_royalties.length);\n uint[] memory bps = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n recipients[i] = _royalties[i].account;\n bps[i] = _royalties[i].value;\n }\n emit SecondarySaleFees(id, recipients, bps);\n }\n}\n" + }, + "@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV2.sol\";\nimport \"../IERC2981.sol\";\nimport \"../LibRoyalties2981.sol\";\n\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\n\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\n return royalties[id];\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n emit RoyaltiesSet(id, _royalties);\n }\n\n /*\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\n */\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\n if (royalties[id].length == 0) {\n receiver = address(0);\n royaltyAmount = 0;\n return(receiver, royaltyAmount);\n }\n LibPart.Part[] memory _royalties = royalties[id];\n receiver = _royalties[0].account;\n uint percent;\n for (uint i = 0; i < _royalties.length; ++i) {\n percent += _royalties[i].value;\n }\n //don`t need require(percent < 10000, \"Token royalty > 100%\"); here, because check later in calculateRoyalties\n royaltyAmount = percent * _salePrice / 10000;\n }\n}\n" + }, + "@rarible/royalties/contracts/LibRoyalties2981.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibRoyalties2981 {\n /*\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\n uint96 constant _WEIGHT_VALUE = 1000000;\n\n /*Method for converting amount to percent and forming LibPart*/\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\n LibPart.Part[] memory result;\n if (amount == 0) {\n return result;\n }\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\n require(percent < 10000, \"Royalties 2981 exceeds 100%\");\n result = new LibPart.Part[](1);\n result[0].account = payable(to);\n result[0].value = uint96(percent);\n return result;\n }\n}\n" + }, + "@rarible/royalties/contracts/LibRoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV1 {\n /*\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\n *\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\n */\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\n}\n" + }, + "@rarible/royalties/contracts/LibRoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV2 {\n /*\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\n}\n" + }, + "@rarible/royalties/contracts/RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\ninterface RoyaltiesV1 {\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\n\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\n function getFeeBps(uint256 id) external view returns (uint[] memory);\n}\n" + }, + "@rarible/royalties/contracts/RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltiesV2 {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC1155RoyaltiesV2 is RoyaltiesV2Impl, ERC1155Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, uint amount, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId, amount, \"\");\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV1Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV1.sol\";\n\ncontract TestERC721RoyaltiesV1 is RoyaltiesV1Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV1._INTERFACE_ID_FEES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC721RoyaltiesV2 is RoyaltiesV2Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" + }, + "@rarible/test/contracts/TestERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\n\ncontract TestERC1155 is ERC1155, Pausable {\n constructor() ERC1155(\"uri\"){\n\n }\n\n function mint(address to, uint tokenId, uint amount) external {\n _mint(to, tokenId, amount, \"\");\n }\n\n function batchSafeTransferFrom(\n address[] memory froms,\n address[] memory tos,\n uint256[] memory ids,\n uint256[] memory amounts\n ) external {\n require(froms.length == tos.length, \"wrong length 1\");\n require(tos.length == ids.length, \"wrong length 2\");\n require(ids.length == amounts.length, \"wrong length 3\");\n\n for (uint i = 0; i < froms.length; i ++) {\n safeTransferFrom(froms[i], tos[i], ids[i], amounts[i], \"\");\n }\n }\n\n function emitPauseEvent(bool paused) external {\n if (paused) {\n emit Paused(address(0));\n } else {\n emit Unpaused(address(0));\n }\n }\n}\n" + }, + "@rarible/test/contracts/TestERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\n\ncontract TestERC20 is ERC20Upgradeable {\n function mint(address to, uint amount) external {\n _mint(to, amount);\n }\n\n function init() external {\n __ERC20_init(\"TestERC20\", \"TE20\");\n }\n}\n" + }, + "@rarible/test/contracts/TestERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\n\ncontract TestERC721 is ERC721Upgradeable {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" + }, + "@rarible/tokens/contracts/access/MinterAccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + }, + "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" + }, + "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n\n uint256[50] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\n\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\n using StringsUpgradeable for uint256;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _clearMetadata(uint256 tokenId) internal override virtual {\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n uint256[50] private __gap;\n}" + }, + "@rarible/tokens/contracts/erc-721/ERC721Base.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeable.sol\";\nimport \"./ERC721DefaultApproval.sol\";\nimport \"./ERC721Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721Base is OwnableUpgradeable, ERC721DefaultApproval, ERC721BurnableUpgradeable, ERC721Lazy, HasContractURI {\n\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721Upgradeable, ERC721DefaultApproval) view returns (bool) {\n return ERC721DefaultApproval._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApproval, ERC721Upgradeable, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApproval.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721Lazy) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function _mint(address to, uint256 tokenId) internal override(ERC721Lazy, ERC721Upgradeable) {\n super._mint(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721BurnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721Upgradeable.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeable is Initializable, ContextUpgradeable, ERC721Upgradeable {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721DefaultApproval.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721Upgradeable.sol\";\n\nabstract contract ERC721DefaultApproval is ERC721Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Lazy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\n\nabstract contract ERC721Lazy is IERC721LazyMint, ERC721Upgradeable, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _mint(address to, uint256 tokenId) internal virtual override {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burned(tokenId), \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Rarible.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Base.sol\";\n\ncontract ERC721Rarible is ERC721Base {\n\n event CreateERC721Rarible(address owner, string name, string symbol);\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external initializer {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n uint256[50] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/erc-721/ERC721Upgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/HasContractURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" + }, + "@rarible/tokens/contracts/IsPrivateCollection.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" + }, + "@rarible/tokens/contracts/LibURI.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibURI {\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\n function checkPrefix(string memory base, string memory _tokenURI)\n internal\n pure\n returns (string memory)\n {\n bytes memory whatBytes = bytes(base);\n bytes memory whereBytes = bytes(_tokenURI);\n\n if (whatBytes.length > whereBytes.length) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n\n for (uint256 j = 0; j < whatBytes.length; j++) {\n if (whereBytes[j] != whatBytes[j]) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n }\n\n return _tokenURI;\n }\n}\n" + }, + "@rarible/tokens/contracts/Mint721Validator.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\n\ncontract Mint721Validator is ERC1271Validator {\n function __Mint721Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint721\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + }, + "@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nabstract contract ITransferExecutor {\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal virtual;\n}\n" + }, + "@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../lib/LibDeal.sol\";\nimport \"./ITransferExecutor.sol\";\n\nabstract contract ITransferManager is ITransferExecutor {\n\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\n}" + }, + "@rarible/transfer-manager/contracts/lib/LibDeal.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\nimport \"./LibFeeSide.sol\";\n\nlibrary LibDeal {\n struct DealSide {\n LibAsset.Asset asset;\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n address proxy;\n address from;\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/lib/LibFeeSide.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibFeeSide {\n\n enum FeeSide {NONE, LEFT, RIGHT}\n\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n return FeeSide.NONE;\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/lib/LibTransfer.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibTransfer {\n function transferEth(address to, uint value) internal {\n (bool success,) = to.call{ value: value }(\"\");\n require(success, \"transfer failed\");\n }\n}\n" + }, + "@rarible/transfer-manager/contracts/RaribleTransferManager.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n ProtocolFeeData memory _protocolFee,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param _protocolFee protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n ProtocolFeeData memory _protocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = _protocolFee.buyerAmount;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" + }, + "@rarible/transfer-manager/contracts/TransferExecutor.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" + }, + "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" + }, + "@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract PunkTransferProxy is OperatorRole, ITransferProxy {\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, uint punkIndex) = abi.decode(asset.assetType.data, (address, uint));\n ICryptoPunksMarket punkToken = ICryptoPunksMarket(token);\n //check punk from real owner\n require(punkToken.punkIndexToAddress(punkIndex) == from, \"Seller not punk owner\");\n //buy punk to proxy, now proxy is owner\n punkToken.buyPunk(punkIndex);\n //Transfer ownership of a punk to buyer\n punkToken.transferPunk(to, punkIndex);\n }\n}" + }, + "src/AssetMatchersImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { AssetMatcherCollection } from \"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\";\n" + }, + "src/Auction.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {AuctionHouse1155} from \"@rarible/auction/contracts/1155/AuctionHouse1155.sol\";\nimport {AuctionHouse721} from \"@rarible/auction/contracts/721/AuctionHouse721.sol\";\nimport {Wrapper} from \"@rarible/auction/contracts/wrapper/Wrapper.sol\";" + }, + "src/ExchangeV2Import.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ExchangeV2} from \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {ExchangeMetaV2} from \"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\";" + }, + "src/ExchangeWrapperImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" + }, + "src/RaribleExchangeWrapper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {RaribleExchangeWrapper} from \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" + }, + "src/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" + }, + "src/RoyaltiesRegistryImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {RoyaltiesProviderV2Legacy} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol\";\nimport {RoyaltiesProviderArtBlocks} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol\";\nimport {RoyaltiesProviderArtBlocksV2} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol\";\n" + }, + "src/TestERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721 } from \"@rarible/test/contracts/TestERC721.sol\";\n" + }, + "src/TokensImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\n//tokens 721\nimport {ERC721Rarible} from \"@rarible/tokens/contracts/erc-721/ERC721Rarible.sol\";\nimport {ERC721RaribleMinimal} from \"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport {ERC721RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\";\n\n//tokens 1155\nimport {ERC1155Rarible} from \"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\";\nimport {ERC1155RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\";\n\n//meta tokens\nimport {ERC721RaribleMeta} from \"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\";\nimport {ERC1155RaribleMeta} from \"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\";\n\n//beacons\nimport {ERC1155RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\";\nimport {ERC721RaribleMinimalBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\";\nimport {ERC721RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol\";\nimport {ERC1155RaribleBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\";\nimport {ERC721RaribleMinimalBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\";\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" + }, + "src/TransferProxiesImport.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ERC721LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\";\nimport {ERC1155LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\nimport {PunkTransferProxy} from \"@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol\";\n" + }, + "test/contracts/ERC721LazyMintTest.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol\";\n" + }, + "test/contracts/RaribleTestHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" + }, + "test/contracts/TestERC1155.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155 } from \"@rarible/test/contracts/TestERC1155.sol\";\n\n" + }, + "test/contracts/TestERC1155RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol\";\n\n" + }, + "test/contracts/TestERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" + }, + "test/contracts/TestERC721RoyaltiesV1.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV1 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol\";\n" + }, + "test/contracts/TestERC721RoyaltiesV2.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol\";\n\n" + }, + "test/contracts/WrapperHelper.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport { WrapperHelper } from \"@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol\";" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/solcInputs/97f4234afe2a6aef4388d964e224ac4a.json b/projects/hardhat-deploy/deployments/oasys/solcInputs/97f4234afe2a6aef4388d964e224ac4a.json new file mode 100644 index 000000000..c373d6891 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/solcInputs/97f4234afe2a6aef4388d964e224ac4a.json @@ -0,0 +1,95 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-sol08/access/AccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/AccessControl.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IAccessControl.sol\";\nimport \"../utils/Context.sol\";\nimport \"../utils/Strings.sol\";\nimport \"../utils/introspection/ERC165.sol\";\n\n/**\n * @dev Contract module that allows children to implement role-based access\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\n * members except through off-chain means by accessing the contract event logs. Some\n * applications may benefit from on-chain enumerability, for those cases see\n * {AccessControlEnumerable}.\n *\n * Roles are referred to by their `bytes32` identifier. These should be exposed\n * in the external API and be unique. The best way to achieve this is by\n * using `public constant` hash digests:\n *\n * ```\n * bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n * ```\n *\n * Roles can be used to represent a set of permissions. To restrict access to a\n * function call, use {hasRole}:\n *\n * ```\n * function foo() public {\n * require(hasRole(MY_ROLE, msg.sender));\n * ...\n * }\n * ```\n *\n * Roles can be granted and revoked dynamically via the {grantRole} and\n * {revokeRole} functions. Each role has an associated admin role, and only\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n *\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n * that only accounts with this role will be able to grant or revoke other\n * roles. More complex role relationships can be created by using\n * {_setRoleAdmin}.\n *\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n * grant and revoke this role. Extra precautions should be taken to secure\n * accounts that have been granted it.\n */\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\n struct RoleData {\n mapping(address => bool) members;\n bytes32 adminRole;\n }\n\n mapping(bytes32 => RoleData) private _roles;\n\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\n\n /**\n * @dev Modifier that checks that an account has a specific role. Reverts\n * with a standardized message including the required role.\n *\n * The format of the revert reason is given by the following regular expression:\n *\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n *\n * _Available since v4.1._\n */\n modifier onlyRole(bytes32 role) {\n _checkRole(role);\n _;\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\n return _roles[role].members[account];\n }\n\n /**\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\n * Overriding this function changes the behavior of the {onlyRole} modifier.\n *\n * Format of the revert message is described in {_checkRole}.\n *\n * _Available since v4.6._\n */\n function _checkRole(bytes32 role) internal view virtual {\n _checkRole(role, _msgSender());\n }\n\n /**\n * @dev Revert with a standard message if `account` is missing `role`.\n *\n * The format of the revert reason is given by the following regular expression:\n *\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n */\n function _checkRole(bytes32 role, address account) internal view virtual {\n if (!hasRole(role, account)) {\n revert(\n string(\n abi.encodePacked(\n \"AccessControl: account \",\n Strings.toHexString(uint160(account), 20),\n \" is missing role \",\n Strings.toHexString(uint256(role), 32)\n )\n )\n );\n }\n }\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\n return _roles[role].adminRole;\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n *\n * May emit a {RoleGranted} event.\n */\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\n _grantRole(role, account);\n }\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n *\n * May emit a {RoleRevoked} event.\n */\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\n _revokeRole(role, account);\n }\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `account`.\n *\n * May emit a {RoleRevoked} event.\n */\n function renounceRole(bytes32 role, address account) public virtual override {\n require(account == _msgSender(), \"AccessControl: can only renounce roles for self\");\n\n _revokeRole(role, account);\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event. Note that unlike {grantRole}, this function doesn't perform any\n * checks on the calling account.\n *\n * May emit a {RoleGranted} event.\n *\n * [WARNING]\n * ====\n * This function should only be called from the constructor when setting\n * up the initial roles for the system.\n *\n * Using this function in any other way is effectively circumventing the admin\n * system imposed by {AccessControl}.\n * ====\n *\n * NOTE: This function is deprecated in favor of {_grantRole}.\n */\n function _setupRole(bytes32 role, address account) internal virtual {\n _grantRole(role, account);\n }\n\n /**\n * @dev Sets `adminRole` as ``role``'s admin role.\n *\n * Emits a {RoleAdminChanged} event.\n */\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\n bytes32 previousAdminRole = getRoleAdmin(role);\n _roles[role].adminRole = adminRole;\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * Internal function without access restriction.\n *\n * May emit a {RoleGranted} event.\n */\n function _grantRole(bytes32 role, address account) internal virtual {\n if (!hasRole(role, account)) {\n _roles[role].members[account] = true;\n emit RoleGranted(role, account, _msgSender());\n }\n }\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * Internal function without access restriction.\n *\n * May emit a {RoleRevoked} event.\n */\n function _revokeRole(bytes32 role, address account) internal virtual {\n if (hasRole(role, account)) {\n _roles[role].members[account] = false;\n emit RoleRevoked(role, account, _msgSender());\n }\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/access/IAccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev External interface of AccessControl declared to support ERC165 detection.\n */\ninterface IAccessControl {\n /**\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n *\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n * {RoleAdminChanged} not being emitted signaling this.\n *\n * _Available since v3.1._\n */\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\n\n /**\n * @dev Emitted when `account` is granted `role`.\n *\n * `sender` is the account that originated the contract call, an admin role\n * bearer except when using {AccessControl-_setupRole}.\n */\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Emitted when `account` is revoked `role`.\n *\n * `sender` is the account that originated the contract call:\n * - if using `revokeRole`, it is the admin role bearer\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\n */\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) external view returns (bool);\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function grantRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function revokeRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been granted `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `account`.\n */\n function renounceRole(bytes32 role, address account) external;\n}\n" + }, + "@openzeppelin/contracts-sol08/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor() {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "@openzeppelin/contracts-sol08/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(\n Address.isContract(IBeacon(newBeacon).implementation()),\n \"ERC1967: beacon implementation is not a contract\"\n );\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overridden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "@openzeppelin/contracts-sol08/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/security/ReentrancyGuard.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuard {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n constructor() {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n // On the first call to nonReentrant, _notEntered will be true\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/Create2.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Create2.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address) {\n address addr;\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n return addr;\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address) {\n bytes32 _data = keccak256(abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash));\n return address(uint160(uint256(_data)));\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/Strings.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _HEX_SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n while (value != 0) {\n digits -= 1;\n buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\n value /= 10;\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n if (value == 0) {\n return \"0x00\";\n }\n uint256 temp = value;\n uint256 length = 0;\n while (temp != 0) {\n length++;\n temp >>= 8;\n }\n return toHexString(value, length);\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _HEX_SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" + }, + "@rarible/upgrade-executor/src/actions/interfaces/ExchangeProtocolFee.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.13;\n\nimport \"@openzeppelin/contracts-sol08/access/Ownable.sol\";\n\ncontract ExchangeProtocolFee is Ownable {\n ProtocolFeeData public protocolFee;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n}\n" + }, + "@rarible/upgrade-executor/src/actions/ProxyUpgradeAction.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.13;\n\nimport \"@openzeppelin/contracts-sol08/proxy/transparent/ProxyAdmin.sol\";\n\ncontract ProxyUpgradeAction {\n function perform(address admin, address payable target, address newLogic) public {\n ProxyAdmin(admin).upgrade(TransparentUpgradeableProxy(target), newLogic);\n }\n}\n" + }, + "@rarible/upgrade-executor/src/actions/SetProtocolFeeAction.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.13;\n\nimport \"./interfaces/ExchangeProtocolFee.sol\";\n\ncontract SetProtocolFeeAction {\n ExchangeProtocolFee public immutable exchangeV2;\n\n constructor(ExchangeProtocolFee _exchangeV2) {\n exchangeV2 = _exchangeV2;\n }\n\n function perform(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) external {\n exchangeV2.setAllProtocolFeeData(_receiver, _buyerAmount, _sellerAmount);\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 1000 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/oasys/solcInputs/a8f7bc89d9961e2d9345e17e373af95f.json b/projects/hardhat-deploy/deployments/oasys/solcInputs/a8f7bc89d9961e2d9345e17e373af95f.json new file mode 100644 index 000000000..1dad45216 --- /dev/null +++ b/projects/hardhat-deploy/deployments/oasys/solcInputs/a8f7bc89d9961e2d9345e17e373af95f.json @@ -0,0 +1,73 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-sol08/access/AccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/AccessControl.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IAccessControl.sol\";\nimport \"../utils/Context.sol\";\nimport \"../utils/Strings.sol\";\nimport \"../utils/introspection/ERC165.sol\";\n\n/**\n * @dev Contract module that allows children to implement role-based access\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\n * members except through off-chain means by accessing the contract event logs. Some\n * applications may benefit from on-chain enumerability, for those cases see\n * {AccessControlEnumerable}.\n *\n * Roles are referred to by their `bytes32` identifier. These should be exposed\n * in the external API and be unique. The best way to achieve this is by\n * using `public constant` hash digests:\n *\n * ```\n * bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n * ```\n *\n * Roles can be used to represent a set of permissions. To restrict access to a\n * function call, use {hasRole}:\n *\n * ```\n * function foo() public {\n * require(hasRole(MY_ROLE, msg.sender));\n * ...\n * }\n * ```\n *\n * Roles can be granted and revoked dynamically via the {grantRole} and\n * {revokeRole} functions. Each role has an associated admin role, and only\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n *\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n * that only accounts with this role will be able to grant or revoke other\n * roles. More complex role relationships can be created by using\n * {_setRoleAdmin}.\n *\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n * grant and revoke this role. Extra precautions should be taken to secure\n * accounts that have been granted it.\n */\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\n struct RoleData {\n mapping(address => bool) members;\n bytes32 adminRole;\n }\n\n mapping(bytes32 => RoleData) private _roles;\n\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\n\n /**\n * @dev Modifier that checks that an account has a specific role. Reverts\n * with a standardized message including the required role.\n *\n * The format of the revert reason is given by the following regular expression:\n *\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n *\n * _Available since v4.1._\n */\n modifier onlyRole(bytes32 role) {\n _checkRole(role);\n _;\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\n return _roles[role].members[account];\n }\n\n /**\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\n * Overriding this function changes the behavior of the {onlyRole} modifier.\n *\n * Format of the revert message is described in {_checkRole}.\n *\n * _Available since v4.6._\n */\n function _checkRole(bytes32 role) internal view virtual {\n _checkRole(role, _msgSender());\n }\n\n /**\n * @dev Revert with a standard message if `account` is missing `role`.\n *\n * The format of the revert reason is given by the following regular expression:\n *\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n */\n function _checkRole(bytes32 role, address account) internal view virtual {\n if (!hasRole(role, account)) {\n revert(\n string(\n abi.encodePacked(\n \"AccessControl: account \",\n Strings.toHexString(uint160(account), 20),\n \" is missing role \",\n Strings.toHexString(uint256(role), 32)\n )\n )\n );\n }\n }\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\n return _roles[role].adminRole;\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n *\n * May emit a {RoleGranted} event.\n */\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\n _grantRole(role, account);\n }\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n *\n * May emit a {RoleRevoked} event.\n */\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\n _revokeRole(role, account);\n }\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `account`.\n *\n * May emit a {RoleRevoked} event.\n */\n function renounceRole(bytes32 role, address account) public virtual override {\n require(account == _msgSender(), \"AccessControl: can only renounce roles for self\");\n\n _revokeRole(role, account);\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event. Note that unlike {grantRole}, this function doesn't perform any\n * checks on the calling account.\n *\n * May emit a {RoleGranted} event.\n *\n * [WARNING]\n * ====\n * This function should only be called from the constructor when setting\n * up the initial roles for the system.\n *\n * Using this function in any other way is effectively circumventing the admin\n * system imposed by {AccessControl}.\n * ====\n *\n * NOTE: This function is deprecated in favor of {_grantRole}.\n */\n function _setupRole(bytes32 role, address account) internal virtual {\n _grantRole(role, account);\n }\n\n /**\n * @dev Sets `adminRole` as ``role``'s admin role.\n *\n * Emits a {RoleAdminChanged} event.\n */\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\n bytes32 previousAdminRole = getRoleAdmin(role);\n _roles[role].adminRole = adminRole;\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * Internal function without access restriction.\n *\n * May emit a {RoleGranted} event.\n */\n function _grantRole(bytes32 role, address account) internal virtual {\n if (!hasRole(role, account)) {\n _roles[role].members[account] = true;\n emit RoleGranted(role, account, _msgSender());\n }\n }\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * Internal function without access restriction.\n *\n * May emit a {RoleRevoked} event.\n */\n function _revokeRole(bytes32 role, address account) internal virtual {\n if (hasRole(role, account)) {\n _roles[role].members[account] = false;\n emit RoleRevoked(role, account, _msgSender());\n }\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/access/IAccessControl.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev External interface of AccessControl declared to support ERC165 detection.\n */\ninterface IAccessControl {\n /**\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n *\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n * {RoleAdminChanged} not being emitted signaling this.\n *\n * _Available since v3.1._\n */\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\n\n /**\n * @dev Emitted when `account` is granted `role`.\n *\n * `sender` is the account that originated the contract call, an admin role\n * bearer except when using {AccessControl-_setupRole}.\n */\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Emitted when `account` is revoked `role`.\n *\n * `sender` is the account that originated the contract call:\n * - if using `revokeRole`, it is the admin role bearer\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\n */\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) external view returns (bool);\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function grantRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function revokeRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been granted `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `account`.\n */\n function renounceRole(bytes32 role, address account) external;\n}\n" + }, + "@openzeppelin/contracts-sol08/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "@openzeppelin/contracts-sol08/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializing the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(\n Address.isContract(IBeacon(newBeacon).implementation()),\n \"ERC1967: beacon implementation is not a contract\"\n );\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overridden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "@openzeppelin/contracts-sol08/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/Create2.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Create2.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(\n uint256 amount,\n bytes32 salt,\n bytes memory bytecode\n ) internal returns (address) {\n address addr;\n require(address(this).balance >= amount, \"Create2: insufficient balance\");\n require(bytecode.length != 0, \"Create2: bytecode length is zero\");\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n require(addr != address(0), \"Create2: Failed on deploy\");\n return addr;\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(\n bytes32 salt,\n bytes32 bytecodeHash,\n address deployer\n ) internal pure returns (address) {\n bytes32 _data = keccak256(abi.encodePacked(bytes1(0xff), deployer, salt, bytecodeHash));\n return address(uint160(uint256(_data)));\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "@openzeppelin/contracts-sol08/utils/Strings.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _HEX_SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n while (value != 0) {\n digits -= 1;\n buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\n value /= 10;\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n if (value == 0) {\n return \"0x00\";\n }\n uint256 temp = value;\n uint256 length = 0;\n while (temp != 0) {\n length++;\n temp >>= 8;\n }\n return toHexString(value, length);\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _HEX_SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n" + }, + "src/PermissionedContractFactory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.8.0 <0.9.0;\n\nimport {AccessControl} from \"@openzeppelin/contracts-sol08/access/AccessControl.sol\";\nimport {Create2} from \"@openzeppelin/contracts-sol08/utils/Create2.sol\";\nimport {TransparentUpgradeableProxy} from \"@openzeppelin/contracts-sol08/proxy/transparent/TransparentUpgradeableProxy.sol\";\n\n/**\n * @title PermissionedContractFactory\n * @dev Contract that create other contracts using the `CREATE2` opcode,\n * with calls limited to a preauthorized set of addresses.\n * The contract creator role is managed by the default admin role.\n *\n * --- Who will be intended to be authorized? ---\n * As an important note, initially,\n * only the 'Oasys core team' is granted the permission to deploy contracts.\n *\n * It will take time to grant privileges to the Oasys council,\n * so the Oasys team needs to lead them gradually,\n * enabling them to judge which contracts should be deployed.\n */\ncontract PermissionedContractFactory is AccessControl {\n // struct used for bulk contract creation\n struct DeployContract {\n uint256 amount; // Oasys don't funcd during deployment, so practicall this is 0\n bytes32 salt;\n bytes bytecode;\n address expected;\n string tag;\n bytes[] afterCalldatas;\n }\n\n /// @notice Semantic version.\n string private constant _VERSION = \"0.0.2\";\n\n /*************\n * Variables *\n *************/\n\n // keccak256 hash of \"CONTRACT_CREATOR_ROLE\" is the role identifier\n bytes32 public constant CONTRACT_CREATOR_ROLE = keccak256(\"CONTRACT_CREATOR_ROLE\");\n\n /**********\n * Events *\n **********/\n\n /**\n * @dev Emitted when a contract is created.\n */\n event ContractCreated(address creator, uint256 amount, bytes32 salt, bytes bytecode, address newContract);\n\n constructor(\n address[] memory admins,\n address[] memory creators\n ) {\n // set the default admin role as the admin role for the contract\n _setRoleAdmin(DEFAULT_ADMIN_ROLE, DEFAULT_ADMIN_ROLE);\n\n // the contract creator role is managed by the default admin role\n _setRoleAdmin(CONTRACT_CREATOR_ROLE, DEFAULT_ADMIN_ROLE);\n\n // NOTE: overflow if admins.length >= 255(=max uint8 + 1)\n // indirectly asserting the length of admins is less than 255\n for (uint8 i = 0; i < admins.length; i++) {\n require(admins[i] != address(0), \"PCC: admin is zero\");\n _setupRole(DEFAULT_ADMIN_ROLE, admins[i]);\n }\n\n for (uint8 i = 0; i < creators.length; i++) {\n require(creators[i] != address(0), \"PCC: creator is zero\");\n _setupRole(CONTRACT_CREATOR_ROLE, creators[i]);\n }\n }\n\n /**\n * @dev returns the semantic version.\n */\n function version() external pure returns (string memory) {\n return _VERSION;\n }\n\n // slither-disable-start locked-ether\n\n /**\n * @dev creates a new contract using the `CREATE2` opcode.\n * Only callers granted with the `CONTRACT_CREATOR_ROLE` are permitted to call it.\n * The caller must send the expected new contract address for deployment.\n * If the expected address does not match the newly created one, the execution will be reverted.\n *\n * @param salt Optional, if not supplied, compute from bytecode\n * @param tag Registerd as metadata, we intended to set it as a contract name. this can be empty string\n * @param afterCalldatas Calldata to be called after contract creation\n *\n */\n function create(\n uint256 amount, // Oasys don't funcd during deployment, so practicall this is 0\n bytes32 salt,\n bytes calldata bytecode,\n address expected,\n string calldata tag,\n bytes[] calldata afterCalldatas\n ) external payable returns (address addr) {\n require(msg.value == amount, \"PCC: incorrect amount sent\");\n addr = _create2(amount, _salt(bytecode, salt), bytecode, expected, tag);\n // call the deployed contract with the provided calldata\n // intended to initialize the contract or transfer ownership\n _call(addr, afterCalldatas);\n }\n\n // slither-disable-start reentrancy-no-eth\n\n /**\n * @dev creates multiple contracts using the `CREATE2` opcode\n */\n function bulkCreate(DeployContract[] calldata deployContracts) external payable onlyRole(CONTRACT_CREATOR_ROLE) {\n uint256 remaining = msg.value;\n for (uint256 i = 0; i < deployContracts.length; i++) {\n require(deployContracts[i].amount <= remaining, \"PCC: insufficient amount sent\");\n\n // sub required amout\n remaining -= deployContracts[i].amount;\n\n address addr = _create2(\n deployContracts[i].amount,\n _salt(deployContracts[i].bytecode, deployContracts[i].salt),\n deployContracts[i].bytecode,\n deployContracts[i].expected,\n deployContracts[i].tag\n );\n _call(addr, deployContracts[i].afterCalldatas);\n }\n // assert that the sum of sent amount is equal to the total amount of bulk creation\n require(remaining == 0, \"PCC: too much amount sent\");\n }\n\n // slither-disable-end reentrancy-no-eth\n // slither-disable-end locked-ether\n\n /**\n * @dev computes the address of a contract that would be created using the `CREATE2` opcode.\n *\n * @param salt Optional, if not supplied, compute from bytecode\n */\n function getDeploymentAddress(bytes calldata bytecode, bytes32 salt) external view returns (address addr) {\n addr = Create2.computeAddress(_salt(bytecode, salt), keccak256(bytecode), address(this));\n }\n\n function _salt(bytes calldata bytecode, bytes32 salt) internal pure returns (bytes32) {\n return salt != bytes32(0) ? salt : _generateSalt(bytecode);\n }\n\n function _generateSalt(bytes memory bytecode) internal pure returns (bytes32 salt) {\n // use the first 32 bytes of bytecode as the salt\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let pointer := add(bytecode, 0x20)\n salt := mload(pointer)\n }\n }\n\n function _create2(\n uint256 amount,\n bytes32 salt,\n bytes calldata bytecode,\n address expected,\n string calldata tag\n ) internal returns (address addr) {\n // NOTE: Enables pre-funding of the address.\n // require(expected.balance == 0, \"PCC: expected is not empty\");\n\n // create the contract using the provided bytecode and salt\n // NOTE: in case of duplicate creation, the transaction will be reverted\n addr = Create2.deploy(amount, salt, bytecode);\n\n // revert if the deployed contract address does not match the expected address\n require(addr == expected, \"PCC: unexpected address\");\n\n emit ContractCreated(msg.sender, amount, salt, bytecode, addr);\n\n // register the metadata of the created contract\n //_registerMetadata(addr, msg.sender, tag);\n }\n\n function _call(address addr, bytes[] calldata datas) internal {\n for (uint256 i = 0; i < datas.length; i++) {\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = addr.call(datas[i]);\n\n if (!success) {\n if (returndata.length > 0) {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(\"PCC: after call failed\");\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 1000 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/networks/oasys.md b/projects/hardhat-deploy/networks/oasys.md new file mode 100644 index 000000000..fbd3f4ef3 --- /dev/null +++ b/projects/hardhat-deploy/networks/oasys.md @@ -0,0 +1,18 @@ + Name | Address | Url + --- | --- | --- + AssetMatcherCollection | 0xD30271264D862605B98e04E988BD50EB37F7E9C9 | https://explorer.oasys.games/address/0xD30271264D862605B98e04E988BD50EB37F7E9C9 + DefaultProxyAdmin | 0x5eC8268AeD656E9817282938f99Cf6a4c4cFBAF0 | https://explorer.oasys.games/address/0x5eC8268AeD656E9817282938f99Cf6a4c4cFBAF0 + ERC1155LazyMintTransferProxy | 0x7698983DF7cd2A57aCDF97656aebFf64398A60a7 | https://explorer.oasys.games/address/0x7698983DF7cd2A57aCDF97656aebFf64398A60a7 + ERC1155Rarible | 0x090dA3FB3917FC06f2b28F227BcB28a73f946a2E | https://explorer.oasys.games/address/0x090dA3FB3917FC06f2b28F227BcB28a73f946a2E + ERC1155RaribleBeacon | 0x6253D31110dE339a9D58d15a294C6a96F4703d93 | https://explorer.oasys.games/address/0x6253D31110dE339a9D58d15a294C6a96F4703d93 + ERC1155RaribleFactoryC2 | 0xD9Cb91C9b6Aa00e75ef856557CA86371599be3e8 | https://explorer.oasys.games/address/0xD9Cb91C9b6Aa00e75ef856557CA86371599be3e8 + ERC20TransferProxy | 0x15FCB776c6A0E050FF0e9b423a0EAD1F0dfE1196 | https://explorer.oasys.games/address/0x15FCB776c6A0E050FF0e9b423a0EAD1F0dfE1196 + ERC721LazyMintTransferProxy | 0x56b666895EFab1fb4Fa29298F390c380126d581c | https://explorer.oasys.games/address/0x56b666895EFab1fb4Fa29298F390c380126d581c + ERC721RaribleFactoryC2 | 0xEe962828d39ec46962B883bfFeBa0721499d435C | https://explorer.oasys.games/address/0xEe962828d39ec46962B883bfFeBa0721499d435C + ERC721RaribleMinimal | 0xA5C290Fce4ad37a254FCd799D986bDf24bd2Af25 | https://explorer.oasys.games/address/0xA5C290Fce4ad37a254FCd799D986bDf24bd2Af25 + ERC721RaribleMinimalBeacon | 0xd3139Dc967375637B8715aa66ad0FB5a29Fb70f6 | https://explorer.oasys.games/address/0xd3139Dc967375637B8715aa66ad0FB5a29Fb70f6 + ExchangeV2 | 0xfD79EF502b5b97E86804A9359fE5Ba48AB3658c5 | https://explorer.oasys.games/address/0xfD79EF502b5b97E86804A9359fE5Ba48AB3658c5 + PermissionedContractFactory | 0x123e3ae459a8D049F27Ba62B8a5D48c68A100EBC | https://explorer.oasys.games/address/0x123e3ae459a8D049F27Ba62B8a5D48c68A100EBC + RaribleExchangeWrapper | 0xa3af07132CeA0573880B25d4f89653ab87774c4c | https://explorer.oasys.games/address/0xa3af07132CeA0573880B25d4f89653ab87774c4c + RoyaltiesRegistry | 0x9e8fBE9eAd707e505bCE7AF04E8F323Fc4161506 | https://explorer.oasys.games/address/0x9e8fBE9eAd707e505bCE7AF04E8F323Fc4161506 + TransferProxy | 0x9ABc3Ce3a35873274dE3B8b6c15D3BD1F6F2Ec8D | https://explorer.oasys.games/address/0x9ABc3Ce3a35873274dE3B8b6c15D3BD1F6F2Ec8D From 75896ffb5f924d0de5780dd2b4e5966556d4fda2 Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Sat, 27 Apr 2024 12:13:56 +0100 Subject: [PATCH 03/25] Feature/pt 4531 create2 (#280) * feat: add create2 support * feat: add lisk, sei and camp test networks --- CHANGELOG.md | 104 + lerna.json | 2 +- projects/auction/CHANGELOG.md | 6 + projects/auction/package.json | 6 +- projects/custom-matchers/CHANGELOG.md | 4 + projects/custom-matchers/package.json | 6 +- projects/deploy-proxy/.gitignore | 2 + projects/deploy-proxy/CHANGELOG.md | 22 + .../contracts/ImmutableCreate2Factory.sol | 205 ++ .../contracts/TestDeployContract.sol | 24 + .../00-deploy-immutable-create2-factory.ts | 24 + .../deploy/01-deploy-contract-via-factory.ts | 23 + .../deployments/arbitrum_sepolia/.chainId | 1 + .../ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../deployments/astar_zkyoto_testnet/.chainId | 1 + .../ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../deployments/base_sepolia/.chainId | 1 + .../base_sepolia/ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../deployments/camp_sepolia/.chainId | 1 + .../camp_sepolia/ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../celo_alfajores_testnet/.chainId | 1 + .../ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../deployments/kroma_sepolia/.chainId | 1 + .../ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../deployments/lightlink_pegasus/.chainId | 1 + .../ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../deployments/lisk_sepolia/.chainId | 1 + .../lisk_sepolia/ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../mantle_sepolia_testnet/.chainId | 1 + .../ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../oasis_sapphire_testnet/.chainId | 1 + .../ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../oasys_testnet_saakuru/.chainId | 1 + .../ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../deployments/palm_testnet/.chainId | 1 + .../palm_testnet/ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../deployments/polygon_amoy_testnet/.chainId | 1 + .../ImmutableCreate2Factory.json | 131 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../deployments/sei_testnet/.chainId | 1 + .../sei_testnet/ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../deploy-proxy/deployments/sepolia/.chainId | 1 + .../sepolia/ImmutableCreate2Factory.json | 115 ++ .../47c9583a7ef7353685a643d84df47830.json | 29 + projects/deploy-proxy/hardhat.config.ts | 561 ++++++ projects/deploy-proxy/package.json | 89 + .../scripts/get-create2-address.ts | 24 + projects/deploy-proxy/tasks/index.ts | 0 .../ImmutableCreate2Factory.ts | 228 +++ .../typechain-types/TestDeployContract.ts | 122 ++ .../deploy-proxy/typechain-types/common.ts | 46 + .../ImmutableCreate2Factory__factory.ts | 155 ++ .../factories/TestDeployContract__factory.ts | 146 ++ .../typechain-types/factories/index.ts | 5 + .../deploy-proxy/typechain-types/hardhat.d.ts | 51 + .../deploy-proxy/typechain-types/index.ts | 8 + projects/deploy-proxy/zk.hardhat.config.ts | 101 + projects/deploy/CHANGELOG.md | 12 + projects/deploy/contracts/TokensImport.sol | 1 + projects/deploy/package.json | 14 +- projects/exchange-v2/CHANGELOG.md | 14 + .../exchange-v2/contracts/AssetMatcher.sol | 5 + .../exchange-v2/contracts/ExchangeMetaV2.sol | 25 + projects/exchange-v2/contracts/ExchangeV2.sol | 23 + projects/exchange-v2/package.json | 18 +- projects/exchange-wrapper/CHANGELOG.md | 13 + .../contracts/RaribleExchangeWrapper.sol | 5 +- projects/exchange-wrapper/package.json | 12 +- projects/gas-usage-tests/CHANGELOG.md | 7 + projects/gas-usage-tests/package.json | 10 +- projects/hardhat-deploy/CHANGELOG.md | 57 + projects/hardhat-deploy/README.md | 2 + .../deploy/001_deploy_RoyaltiesRegistry.ts | 11 +- .../deploy/002_deploy_transferProxies.ts | 26 +- ...003_deploy_ExchangeV2_CollectionMatcher.ts | 56 +- .../004_deploy_erc721_Token_and_Factory.ts | 20 +- .../005_deploy_erc1155_Token_and_Factory.ts | 20 +- .../deploy/101_update_exchangeV2.ts | 1 + ...01_update_exchangeV2_by_upgradeExecutor.ts | 1 + .../deploy/202_deploy_setProtocolFeeAction.ts | 3 +- .../deploy/905_deploy_exchangeWrapper.ts | 34 +- projects/hardhat-deploy/deploy/utils.ts | 16 + .../deployments/camp_sepolia/.chainId | 1 + .../AssetMatcherCollection.json | 21 +- .../camp_sepolia/DefaultProxyAdmin.json | 259 +++ .../ERC1155LazyMintTransferProxy.json | 293 +++ .../ERC1155RaribleBeaconMeta.json | 219 ++ .../camp_sepolia/ERC1155RaribleFactoryC2.json | 396 ++++ .../ERC1155RaribleMeta.json | 174 +- .../ERC1155RaribleMeta_Implementation.json | 1791 +++++++++++++++++ .../ERC1155RaribleMeta_Proxy.json | 301 +++ .../camp_sepolia/ERC20TransferProxy.json | 281 +++ .../ERC721LazyMintTransferProxy.json | 293 +++ .../camp_sepolia/ERC721RaribleFactoryC2.json | 396 ++++ .../ERC721RaribleMeta.json | 174 +- .../ERC721RaribleMeta_Implementation.json | 1667 +++++++++++++++ .../camp_sepolia/ERC721RaribleMeta_Proxy.json | 301 +++ .../ERC721RaribleMinimalBeaconMeta.json | 219 ++ .../ExchangeMetaV2.json | 201 +- .../ExchangeMetaV2_Implementation.json | 1387 +++++++++++++ .../camp_sepolia/ExchangeMetaV2_Proxy.json | 302 +++ .../camp_sepolia/RaribleExchangeWrapper.json | 712 +++++++ .../RoyaltiesRegistry.json | 105 +- .../RoyaltiesRegistry_Implementation.json | 639 ++++++ .../camp_sepolia/RoyaltiesRegistry_Proxy.json | 263 +++ .../camp_sepolia/TransferProxy.json | 319 +++ .../25cec8d3d0ea4b0d6c3f88e02b714495.json} | 50 +- .../38c6bf91dbc1d60a5bc376d132d458fc.json} | 107 +- .../deployments/lisk_sepolia/.chainId | 1 + .../lisk_sepolia/AssetMatcherCollection.json | 101 + .../lisk_sepolia/DefaultProxyAdmin.json | 259 +++ .../ERC1155LazyMintTransferProxy.json | 293 +++ .../ERC1155RaribleBeaconMeta.json | 219 ++ .../lisk_sepolia/ERC1155RaribleFactoryC2.json | 396 ++++ .../lisk_sepolia/ERC1155RaribleMeta.json | 1575 +++++++++++++++ .../ERC1155RaribleMeta_Implementation.json | 1791 +++++++++++++++++ .../ERC1155RaribleMeta_Proxy.json | 301 +++ .../lisk_sepolia/ERC20TransferProxy.json | 281 +++ .../ERC721LazyMintTransferProxy.json | 293 +++ .../lisk_sepolia/ERC721RaribleFactoryC2.json | 396 ++++ .../lisk_sepolia/ERC721RaribleMeta.json | 1433 +++++++++++++ .../ERC721RaribleMeta_Implementation.json | 1667 +++++++++++++++ .../lisk_sepolia/ERC721RaribleMeta_Proxy.json | 301 +++ .../ERC721RaribleMinimalBeaconMeta.json | 219 ++ .../lisk_sepolia/ExchangeMetaV2.json | 1361 +++++++++++++ .../ExchangeMetaV2_Implementation.json | 1387 +++++++++++++ .../lisk_sepolia/ExchangeMetaV2_Proxy.json | 302 +++ .../lisk_sepolia/RaribleExchangeWrapper.json | 712 +++++++ .../lisk_sepolia/RoyaltiesRegistry.json | 620 ++++++ .../RoyaltiesRegistry_Implementation.json | 639 ++++++ .../lisk_sepolia/RoyaltiesRegistry_Proxy.json | 263 +++ .../lisk_sepolia/TransferProxy.json | 319 +++ .../25cec8d3d0ea4b0d6c3f88e02b714495.json} | 50 +- .../38c6bf91dbc1d60a5bc376d132d458fc.json} | 107 +- .../deployments/polygon_mumbai/.chainId | 1 - .../polygon_mumbai/DefaultProxyAdmin.json | 214 -- .../ERC1155LazyMintTransferProxy.json | 250 --- .../polygon_mumbai/ERC1155RaribleBeacon.json | 165 -- .../ERC1155RaribleBeaconMeta.json | 165 -- .../ERC1155RaribleFactoryC2.json | 340 ---- .../ERC1155RaribleMeta_Proxy.json | 185 -- .../polygon_mumbai/ERC1155Rarible_Proxy.json | 185 -- .../polygon_mumbai/ERC20TransferProxy.json | 238 --- .../ERC721LazyMintTransferProxy.json | 250 --- .../polygon_mumbai/ERC721RaribleBeacon.json | 165 -- .../ERC721RaribleFactoryC2.json | 340 ---- .../ERC721RaribleMeta_Proxy.json | 185 -- .../ERC721RaribleMinimalBeacon.json | 165 -- .../ERC721RaribleMinimalBeaconMeta.json | 165 -- .../ERC721RaribleMinimal_Proxy.json | 185 -- .../polygon_mumbai/ERC721Rarible_Proxy.json | 185 -- .../ExchangeMetaV2_Implementation.json | 1345 ------------- .../polygon_mumbai/ExchangeMetaV2_Proxy.json | 185 -- .../RaribleExchangeWrapper.json | 629 ------ .../RoyaltiesRegistry_Proxy.json | 185 -- .../polygon_mumbai/TransferProxy.json | 276 --- .../bf917ed004d0f3f4e7ddfe1dd4d0856b.json | 617 ------ .../deployments/sei_testnet/.chainId | 1 + .../sei_testnet/AssetMatcherCollection.json | 101 + .../sei_testnet/DefaultProxyAdmin.json | 259 +++ .../ERC1155LazyMintTransferProxy.json | 293 +++ .../sei_testnet/ERC1155RaribleBeaconMeta.json | 219 ++ .../sei_testnet/ERC1155RaribleFactoryC2.json | 396 ++++ .../sei_testnet/ERC1155RaribleMeta.json | 1575 +++++++++++++++ .../ERC1155RaribleMeta_Implementation.json | 1791 +++++++++++++++++ .../sei_testnet/ERC1155RaribleMeta_Proxy.json | 301 +++ .../sei_testnet/ERC20TransferProxy.json | 281 +++ .../ERC721LazyMintTransferProxy.json | 293 +++ .../sei_testnet/ERC721RaribleFactoryC2.json | 396 ++++ .../sei_testnet/ERC721RaribleMeta.json | 1433 +++++++++++++ .../ERC721RaribleMeta_Implementation.json | 1667 +++++++++++++++ .../sei_testnet/ERC721RaribleMeta_Proxy.json | 301 +++ .../ERC721RaribleMinimalBeaconMeta.json | 219 ++ .../sei_testnet/ExchangeMetaV2.json | 1361 +++++++++++++ .../ExchangeMetaV2_Implementation.json | 1387 +++++++++++++ .../sei_testnet/ExchangeMetaV2_Proxy.json | 302 +++ .../sei_testnet/RaribleExchangeWrapper.json | 726 +++++++ .../sei_testnet/RoyaltiesRegistry.json | 620 ++++++ .../RoyaltiesRegistry_Implementation.json | 639 ++++++ .../sei_testnet/RoyaltiesRegistry_Proxy.json | 263 +++ .../sei_testnet/TransferProxy.json | 319 +++ .../25cec8d3d0ea4b0d6c3f88e02b714495.json} | 52 +- .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 ++ .../sepolia/AssetMatcherCollection.json | 22 +- .../sepolia/DefaultProxyAdmin.json | 38 +- .../sepolia/ERC1155LazyMintTransferProxy.json | 56 +- .../deployments/sepolia/ERC1155Rarible.json | 180 +- .../sepolia/ERC1155RaribleBeacon.json | 68 +- .../sepolia/ERC1155RaribleFactoryC2.json | 76 +- .../ERC1155Rarible_Implementation.json | 141 +- .../sepolia/ERC1155Rarible_Proxy.json | 128 +- .../sepolia/ERC20TransferProxy.json | 56 +- .../sepolia/ERC721LazyMintTransferProxy.json | 56 +- .../sepolia/ERC721RaribleFactoryC2.json | 76 +- .../sepolia/ERC721RaribleMinimal.json | 180 +- .../sepolia/ERC721RaribleMinimalBeacon.json | 68 +- .../ERC721RaribleMinimal_Implementation.json | 141 +- .../sepolia/ERC721RaribleMinimal_Proxy.json | 128 +- .../deployments/sepolia/ExchangeV2.json | 208 +- .../sepolia/ExchangeV2_Implementation.json | 120 +- .../deployments/sepolia/ExchangeV2_Proxy.json | 125 +- .../sepolia/RaribleExchangeWrapper.json | 88 +- .../sepolia/RoyaltiesRegistry.json | 109 +- .../RoyaltiesRegistry_Implementation.json | 81 +- .../sepolia/RoyaltiesRegistry_Proxy.json | 86 +- .../deployments/sepolia/TransferProxy.json | 56 +- .../1e83608a8d677752f3c67873d3574235.json | 605 ------ ... => 25cec8d3d0ea4b0d6c3f88e02b714495.json} | 52 +- .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 ++ .../be0df2e5fbec697d62e922ee14115fa5.json | 617 ------ .../bf917ed004d0f3f4e7ddfe1dd4d0856b.json | 617 ------ projects/hardhat-deploy/example.env | 6 + projects/hardhat-deploy/hardhat.config.ts | 66 +- .../hardhat-deploy/networks/camp_sepolia.md | 17 + .../hardhat-deploy/networks/lisk_sepolia.md | 17 + .../hardhat-deploy/networks/sei_testnet.md | 17 + projects/hardhat-deploy/networks/sepolia.md | 30 +- projects/hardhat-deploy/package.json | 20 +- .../tasks/import-truffle-deployment.ts | 2 +- .../test/ownership/owner.test.ts | 58 + projects/hardhat-deploy/tsconfig.json | 4 +- .../utils/config/camp_sepolia.json | 4 + .../utils/config/lisk_sepolia.json | 4 + .../utils/config/sei_testnet.json | 4 + .../utils/config/zksync_sepolia copy.json | 4 + projects/interfaces/CHANGELOG.md | 4 + projects/interfaces/package.json | 6 +- projects/lazy-mint/CHANGELOG.md | 4 + projects/lazy-mint/package.json | 4 +- projects/lib-asset/CHANGELOG.md | 4 + projects/lib-asset/package.json | 2 +- projects/lib-bp/CHANGELOG.md | 4 + projects/lib-bp/package.json | 2 +- projects/lib-part/CHANGELOG.md | 4 + projects/lib-part/package.json | 2 +- projects/lib-signature/CHANGELOG.md | 4 + projects/lib-signature/package.json | 2 +- projects/meta-tx/CHANGELOG.md | 6 + projects/meta-tx/package.json | 2 +- projects/role-operator/CHANGELOG.md | 6 + .../role-operator/contracts/OperatorRole.sol | 6 + projects/role-operator/package.json | 2 +- projects/royalties-registry/CHANGELOG.md | 7 + .../contracts/RoyaltiesRegistry.sol | 5 + projects/royalties-registry/package.json | 12 +- projects/royalties-upgradeable/CHANGELOG.md | 4 + projects/royalties-upgradeable/package.json | 4 +- projects/royalties/CHANGELOG.md | 4 + projects/royalties/package.json | 4 +- projects/tokens-test/CHANGELOG.md | 4 + projects/tokens-test/package.json | 2 +- projects/tokens/CHANGELOG.md | 10 + projects/tokens/contracts/HasContractURI.sol | 2 +- .../contracts/access/MinterAccessControl.sol | 4 +- .../beacons/ERC1155RaribleBeacon.sol | 4 +- .../beacons/ERC1155RaribleBeaconMeta.sol | 4 +- .../beacons/ERC721RaribleMinimalBeacon.sol | 4 +- .../ERC721RaribleMinimalBeaconMeta.sol | 4 +- .../create-2/ERC1155RaribleFactoryC2.sol | 3 +- .../create-2/ERC721RaribleFactoryC2.sol | 3 +- .../erc-1155/ERC1155BurnableUpgradeable.sol | 5 - .../contracts/erc-1155/ERC1155Rarible.sol | 12 +- .../contracts/erc-1155/Mint1155Validator.sol | 2 +- .../erc-1155-meta/ERC1155RaribleMeta.sol | 12 + .../erc-721-minimal/ERC721RaribleMinimal.sol | 10 + .../ERC721RaribleMeta.sol | 14 +- projects/tokens/package.json | 36 +- projects/transfer-manager/CHANGELOG.md | 7 + .../contracts/TransferExecutor.sol | 5 + projects/transfer-manager/package.json | 16 +- projects/transfer-proxy/CHANGELOG.md | 7 + .../erc1155/ERC1155LazyMintTransferProxy.sol | 7 + .../erc721/ERC721LazyMintTransferProxy.sol | 7 + .../contracts/proxy/ERC20TransferProxy.sol | 5 + .../contracts/proxy/TransferProxy.sol | 5 + projects/transfer-proxy/package.json | 14 +- projects/upgrade-executor/CHANGELOG.md | 6 + projects/upgrade-executor/package.json | 2 +- yarn.lock | 76 + 292 files changed, 47913 insertions(+), 9733 deletions(-) create mode 100644 projects/deploy-proxy/.gitignore create mode 100644 projects/deploy-proxy/CHANGELOG.md create mode 100644 projects/deploy-proxy/contracts/ImmutableCreate2Factory.sol create mode 100644 projects/deploy-proxy/contracts/TestDeployContract.sol create mode 100644 projects/deploy-proxy/deploy/00-deploy-immutable-create2-factory.ts create mode 100644 projects/deploy-proxy/deploy/01-deploy-contract-via-factory.ts create mode 100644 projects/deploy-proxy/deployments/arbitrum_sepolia/.chainId create mode 100644 projects/deploy-proxy/deployments/arbitrum_sepolia/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/arbitrum_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/astar_zkyoto_testnet/.chainId create mode 100644 projects/deploy-proxy/deployments/astar_zkyoto_testnet/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/astar_zkyoto_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/base_sepolia/.chainId create mode 100644 projects/deploy-proxy/deployments/base_sepolia/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/base_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/camp_sepolia/.chainId create mode 100644 projects/deploy-proxy/deployments/camp_sepolia/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/camp_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/celo_alfajores_testnet/.chainId create mode 100644 projects/deploy-proxy/deployments/celo_alfajores_testnet/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/celo_alfajores_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/kroma_sepolia/.chainId create mode 100644 projects/deploy-proxy/deployments/kroma_sepolia/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/kroma_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/lightlink_pegasus/.chainId create mode 100644 projects/deploy-proxy/deployments/lightlink_pegasus/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/lightlink_pegasus/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/lisk_sepolia/.chainId create mode 100644 projects/deploy-proxy/deployments/lisk_sepolia/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/lisk_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/mantle_sepolia_testnet/.chainId create mode 100644 projects/deploy-proxy/deployments/mantle_sepolia_testnet/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/mantle_sepolia_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/oasis_sapphire_testnet/.chainId create mode 100644 projects/deploy-proxy/deployments/oasis_sapphire_testnet/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/oasis_sapphire_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/oasys_testnet_saakuru/.chainId create mode 100644 projects/deploy-proxy/deployments/oasys_testnet_saakuru/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/oasys_testnet_saakuru/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/palm_testnet/.chainId create mode 100644 projects/deploy-proxy/deployments/palm_testnet/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/palm_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/polygon_amoy_testnet/.chainId create mode 100644 projects/deploy-proxy/deployments/polygon_amoy_testnet/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/polygon_amoy_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/sei_testnet/.chainId create mode 100644 projects/deploy-proxy/deployments/sei_testnet/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/sei_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/sepolia/.chainId create mode 100644 projects/deploy-proxy/deployments/sepolia/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/hardhat.config.ts create mode 100644 projects/deploy-proxy/package.json create mode 100644 projects/deploy-proxy/scripts/get-create2-address.ts create mode 100644 projects/deploy-proxy/tasks/index.ts create mode 100644 projects/deploy-proxy/typechain-types/ImmutableCreate2Factory.ts create mode 100644 projects/deploy-proxy/typechain-types/TestDeployContract.ts create mode 100644 projects/deploy-proxy/typechain-types/common.ts create mode 100644 projects/deploy-proxy/typechain-types/factories/ImmutableCreate2Factory__factory.ts create mode 100644 projects/deploy-proxy/typechain-types/factories/TestDeployContract__factory.ts create mode 100644 projects/deploy-proxy/typechain-types/factories/index.ts create mode 100644 projects/deploy-proxy/typechain-types/hardhat.d.ts create mode 100644 projects/deploy-proxy/typechain-types/index.ts create mode 100644 projects/deploy-proxy/zk.hardhat.config.ts create mode 100644 projects/hardhat-deploy/deploy/utils.ts create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/.chainId rename projects/hardhat-deploy/deployments/{polygon_mumbai => camp_sepolia}/AssetMatcherCollection.json (92%) create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/DefaultProxyAdmin.json create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/ERC1155LazyMintTransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleBeaconMeta.json create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleFactoryC2.json rename projects/hardhat-deploy/deployments/{polygon_mumbai => camp_sepolia}/ERC1155RaribleMeta.json (93%) create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/ERC20TransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/ERC721LazyMintTransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleFactoryC2.json rename projects/hardhat-deploy/deployments/{polygon_mumbai => camp_sepolia}/ERC721RaribleMeta.json (93%) create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMinimalBeaconMeta.json rename projects/hardhat-deploy/deployments/{polygon_mumbai => camp_sepolia}/ExchangeMetaV2.json (90%) create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/RaribleExchangeWrapper.json rename projects/hardhat-deploy/deployments/{polygon_mumbai => camp_sepolia}/RoyaltiesRegistry.json (94%) create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/camp_sepolia/TransferProxy.json rename projects/hardhat-deploy/deployments/{sepolia/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json => camp_sepolia/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json} (90%) rename projects/hardhat-deploy/deployments/{polygon_mumbai/solcInputs/0e89febeebc7444140de8e67c9067d2c.json => camp_sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json} (52%) create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/.chainId create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/AssetMatcherCollection.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/DefaultProxyAdmin.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155LazyMintTransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleBeaconMeta.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleFactoryC2.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ERC20TransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ERC721LazyMintTransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleFactoryC2.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMinimalBeaconMeta.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/RaribleExchangeWrapper.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/lisk_sepolia/TransferProxy.json rename projects/hardhat-deploy/deployments/{sepolia/solcInputs/7238d10cc6d9b157a0ebb0f70bc36233.json => lisk_sepolia/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json} (89%) rename projects/hardhat-deploy/deployments/{sepolia/solcInputs/0e89febeebc7444140de8e67c9067d2c.json => lisk_sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json} (52%) delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/.chainId delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/DefaultProxyAdmin.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155LazyMintTransferProxy.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleBeacon.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleBeaconMeta.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleFactoryC2.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleMeta_Proxy.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155Rarible_Proxy.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC20TransferProxy.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC721LazyMintTransferProxy.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleBeacon.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleFactoryC2.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMeta_Proxy.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMinimalBeacon.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMinimalBeaconMeta.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMinimal_Proxy.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ERC721Rarible_Proxy.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ExchangeMetaV2_Implementation.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/ExchangeMetaV2_Proxy.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/RaribleExchangeWrapper.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/RoyaltiesRegistry_Proxy.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/TransferProxy.json delete mode 100644 projects/hardhat-deploy/deployments/polygon_mumbai/solcInputs/bf917ed004d0f3f4e7ddfe1dd4d0856b.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/.chainId create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/AssetMatcherCollection.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/DefaultProxyAdmin.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ERC1155LazyMintTransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleBeaconMeta.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleFactoryC2.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleMeta.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleMeta_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleMeta_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ERC20TransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ERC721LazyMintTransferProxy.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleFactoryC2.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMeta.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMeta_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMeta_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMinimalBeaconMeta.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ExchangeMetaV2.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ExchangeMetaV2_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/ExchangeMetaV2_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/RaribleExchangeWrapper.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/RoyaltiesRegistry.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/RoyaltiesRegistry_Implementation.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/RoyaltiesRegistry_Proxy.json create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/TransferProxy.json rename projects/hardhat-deploy/deployments/{polygon_mumbai/solcInputs/18cf8d0003f91de2c6ccf5af55330880.json => sei_testnet/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json} (89%) create mode 100644 projects/hardhat-deploy/deployments/sei_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json delete mode 100644 projects/hardhat-deploy/deployments/sepolia/solcInputs/1e83608a8d677752f3c67873d3574235.json rename projects/hardhat-deploy/deployments/sepolia/solcInputs/{18cf8d0003f91de2c6ccf5af55330880.json => 25cec8d3d0ea4b0d6c3f88e02b714495.json} (89%) create mode 100644 projects/hardhat-deploy/deployments/sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json delete mode 100644 projects/hardhat-deploy/deployments/sepolia/solcInputs/be0df2e5fbec697d62e922ee14115fa5.json delete mode 100644 projects/hardhat-deploy/deployments/sepolia/solcInputs/bf917ed004d0f3f4e7ddfe1dd4d0856b.json create mode 100644 projects/hardhat-deploy/example.env create mode 100644 projects/hardhat-deploy/networks/camp_sepolia.md create mode 100644 projects/hardhat-deploy/networks/lisk_sepolia.md create mode 100644 projects/hardhat-deploy/networks/sei_testnet.md create mode 100644 projects/hardhat-deploy/test/ownership/owner.test.ts create mode 100644 projects/hardhat-deploy/utils/config/camp_sepolia.json create mode 100644 projects/hardhat-deploy/utils/config/lisk_sepolia.json create mode 100644 projects/hardhat-deploy/utils/config/sei_testnet.json create mode 100644 projects/hardhat-deploy/utils/config/zksync_sepolia copy.json diff --git a/CHANGELOG.md b/CHANGELOG.md index e1fb0104b..707afcf1a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,110 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Bug Fixes + +- add missing import ([ec5a4ea](https://github.com/rarible/protocol-contracts/commit/ec5a4ea5a59c98a65aad20a2b382d8eb8ec50771)) +- add parameters ([88f1d9c](https://github.com/rarible/protocol-contracts/commit/88f1d9c3a77fd61699b05d6927faad7b901733fc)) +- build and deploy ([146e65d](https://github.com/rarible/protocol-contracts/commit/146e65d789f64b6154f5b111ed403d51c7b93efb)) +- support orders with zero price ([162238d](https://github.com/rarible/protocol-contracts/commit/162238de3f6df5cfb7760dfce6dd245b85360eb3)) +- update fees.svg ([6c1e06e](https://github.com/rarible/protocol-contracts/commit/6c1e06eda5006b811c5426f19aac7da498ff0b24)) +- update fees.svg ([8b2d4d2](https://github.com/rarible/protocol-contracts/commit/8b2d4d22f9da68f7895915f11f5720fa86e379ec)) + +### Features + +- add build deps ([822c123](https://github.com/rarible/protocol-contracts/commit/822c123199ac04598b6f8ab995ee8e8a66828015)) +- add camp_sepolia ([32c30eb](https://github.com/rarible/protocol-contracts/commit/32c30eba633936bf7a7137c4a53f41dc6aee4bd3)) +- add celo alfajores ([#271](https://github.com/rarible/protocol-contracts/issues/271)) ([10a795e](https://github.com/rarible/protocol-contracts/commit/10a795e80039677193d5eeccfa14f64e0bcf0448)) +- add config for camp and sei ([983664b](https://github.com/rarible/protocol-contracts/commit/983664bc0eb0a434b166541ec5eb19044e4189e1)) +- add config for sei and camp ([9815c1a](https://github.com/rarible/protocol-contracts/commit/9815c1aa90543667549d9ed4ba183e1fc2be4e14)) +- add configs for palm, match ([cfeee8e](https://github.com/rarible/protocol-contracts/commit/cfeee8e12fdd06664fcb021a5f3efa44708c6f92)) +- add deploy ([ad072dc](https://github.com/rarible/protocol-contracts/commit/ad072dc43edd19973e7c5dc539dcdba1edf6e638)) +- add deploy operator role for proxy ([5e28f3d](https://github.com/rarible/protocol-contracts/commit/5e28f3d9532ed6823302a0cd1a1fb24e0bb12544)) +- add deploy sepolia via factory ([bfa0b5c](https://github.com/rarible/protocol-contracts/commit/bfa0b5c5b8ca1259edb1ba4cbe8f5e497e26feca)) +- add deploy support for factory ([f9a1160](https://github.com/rarible/protocol-contracts/commit/f9a11605766a943f56d004c07d6a4c32b1d26cd1)) +- add deployment for sepolia and mumbai ([84e0c50](https://github.com/rarible/protocol-contracts/commit/84e0c508bd956f3dc793b19a42e6a8e4e8482edb)) +- add docs lisk, sepolia and camp (testnets) ([135b871](https://github.com/rarible/protocol-contracts/commit/135b8710b4598eb84abc86c5ab6290caab2b549c)) +- add example .env ([a6d84c3](https://github.com/rarible/protocol-contracts/commit/a6d84c31397c7b518031c353e3306070dc8d5e5a)) +- add example hardware wallet ([1863ed2](https://github.com/rarible/protocol-contracts/commit/1863ed2e4dbbe7189970a209458cf633511d6b3a)) +- add get signer ([4263de2](https://github.com/rarible/protocol-contracts/commit/4263de2609089db7ca31df755baa23b0e6f9954d)) +- add hardhat deploy for factory ([898bb86](https://github.com/rarible/protocol-contracts/commit/898bb8641c3349baef58a5738818c0d8c101dc61)) +- add hardware signer ([9d85d69](https://github.com/rarible/protocol-contracts/commit/9d85d6935563a303047b6f5ee916324fac58819b)) +- add lisk and sepolia ([8c1e7e0](https://github.com/rarible/protocol-contracts/commit/8c1e7e0da60710d0a369cc9bff214e2b092c4720)) +- add lisk and sepolia networks ([4cacb4b](https://github.com/rarible/protocol-contracts/commit/4cacb4b10e58bff5f5028786792f2229e452a466)) +- add lisk deploy ([6c5f6ba](https://github.com/rarible/protocol-contracts/commit/6c5f6ba32a56664ee5b50dd26de3bbbb98924f36)) +- add lisk sepolia ([bf35501](https://github.com/rarible/protocol-contracts/commit/bf3550122d60d66912f411b6b180bb667c86676d)) +- add lisk_sepolia ([fc372bd](https://github.com/rarible/protocol-contracts/commit/fc372bd2694d3ee09d8f336a77f48f6f389c89ed)) +- add loading contracts ([d432688](https://github.com/rarible/protocol-contracts/commit/d432688fa078689c5e1bf8659d6b7817d3932938)) +- add migration for SetProtocolFeeAction ([f9c4aca](https://github.com/rarible/protocol-contracts/commit/f9c4aca5bd01cff077f8a15a4467fa0e3c88ca05)) +- add new ([a75d810](https://github.com/rarible/protocol-contracts/commit/a75d810e4d244a37c53eeee3b3e0b8b9b5965b91)) +- add new deploy frame config ([b518b62](https://github.com/rarible/protocol-contracts/commit/b518b6255d23c9bb15f87e6058730f8c66057ea6)) +- add new version for wrapper ([8d38eac](https://github.com/rarible/protocol-contracts/commit/8d38eacdbcd433ad9d6df32315b3aef6be9984f7)) +- add oasis testnet, xai testnet. PT-4570 deploy contracts to oasis testnet ([ed0e2ce](https://github.com/rarible/protocol-contracts/commit/ed0e2ced1269ce67e29c4795e08193324628aca4)) +- add ownership ([098e6ea](https://github.com/rarible/protocol-contracts/commit/098e6ea957640fc7aa1aa51df92c7e121d12e589)) +- add ownership tests ([01971d0](https://github.com/rarible/protocol-contracts/commit/01971d07b251975aaf8c94a8a67ef376f408d72b)) +- add package json settings ([f798e0c](https://github.com/rarible/protocol-contracts/commit/f798e0caa2bfd176cc79da7430f6a6c2b442d4df)) +- add proxy deploy support ([40270b0](https://github.com/rarible/protocol-contracts/commit/40270b07cdb2e061a3a349535f7bb9717e686eb7)) +- add rari chain mainnet config ([b1dbc48](https://github.com/rarible/protocol-contracts/commit/b1dbc48aa801a7d7add342a845dc5762736e59c2)) +- add reading owner from env ([d1db0fa](https://github.com/rarible/protocol-contracts/commit/d1db0fae222672830ad7d27f4d24df4597c30dfb)) +- add run scripts ([89d7879](https://github.com/rarible/protocol-contracts/commit/89d78798fd54791fcd76638ce4a61fa2bd7684ca)) +- add script to transfer ([b75a1ba](https://github.com/rarible/protocol-contracts/commit/b75a1ba9ef079308a27dd3f5efae05b4ea6dc189)) +- add sei deploy ([862f6a2](https://github.com/rarible/protocol-contracts/commit/862f6a2907bf6c518880b178cb8b0a034ac107ba)) +- add sepolia deploy via create2 ([3dfc3ce](https://github.com/rarible/protocol-contracts/commit/3dfc3ce449b31fccb545bcda4606165c039b5b36)) +- add support for access control ([d890391](https://github.com/rarible/protocol-contracts/commit/d890391062af14de4caceedfaf23834dd15fb68f)) +- add tests for nothing to feel, one order free the other isn't ([7b51920](https://github.com/rarible/protocol-contracts/commit/7b519201dcb9c5b3dc5e4a837698ceed3060cd5e)) +- add tests for transferring ([a1c235d](https://github.com/rarible/protocol-contracts/commit/a1c235d4e312ac346f5acbc7bb530c18c5aabe1d)) +- add todo ([d049135](https://github.com/rarible/protocol-contracts/commit/d04913559260108464a73cda81ba16ffb2d9dfc2)) +- add verify ([f3b2ff1](https://github.com/rarible/protocol-contracts/commit/f3b2ff1f797664223db5d8b9c7bbde5f88cb0449)) +- base contract addresses ([3f5336b](https://github.com/rarible/protocol-contracts/commit/3f5336b3b705516a8017c8a22ef933824d5c7e5a)) +- change token factories back, optomise ERC1155 size ([8e25ae2](https://github.com/rarible/protocol-contracts/commit/8e25ae2ae5c03166ef3524935c827f168f6d0445)) +- deploy contracts on palm_testnet ([18fccde](https://github.com/rarible/protocol-contracts/commit/18fccded3260b1aebc568ebe4f8b9b9883fd47da)) +- deploy non-meta versions of contracts for zksync (they have AA so isn't needed) ([ca3d54b](https://github.com/rarible/protocol-contracts/commit/ca3d54bfe3d3d20afe6a13c0ca9c241dbd334370)) +- deploy non-meta versions of contracts for zksync (they have AA so isn't needed) ([efce395](https://github.com/rarible/protocol-contracts/commit/efce3957d7f77ab0563950ff079df7003123e5ea)) +- deployed contracts to RARI mainnet ([90cb65b](https://github.com/rarible/protocol-contracts/commit/90cb65b9d4f94381b01463dab60a3310ffc04858)) +- deployed on chiliz (ExchangeV2Meta, 002 finished) ([131b4a8](https://github.com/rarible/protocol-contracts/commit/131b4a8b0ab6dc3a203395323f2f9b5cb4f13d10)) +- deployed on ll mainnet ([018d4a3](https://github.com/rarible/protocol-contracts/commit/018d4a3800ad9d4c7b4c8b47a0551217833024dd)) +- deployed on zksync ([cdfc62e](https://github.com/rarible/protocol-contracts/commit/cdfc62e07432ea66887ea32ce4b44340d12462f1)) +- deployed on zksync token contracts ([a2d5a74](https://github.com/rarible/protocol-contracts/commit/a2d5a7426911ff5f582c35a69c3bc3d629cf997c)) +- deployed to base ([75ded55](https://github.com/rarible/protocol-contracts/commit/75ded555e996e07d9b2e8a2245006f5523d7757b)) +- deployed UpgradeExecutor to mainnet ([c3616b0](https://github.com/rarible/protocol-contracts/commit/c3616b0d1ff5d119018976d6d9a6995465ce78e8)) +- deployed wrapper on chiliz ([1b803cd](https://github.com/rarible/protocol-contracts/commit/1b803cdb61fca7b75881bdc3e2b71f9133866747)) +- fix adminship data, migration ([dd7130f](https://github.com/rarible/protocol-contracts/commit/dd7130f263dd8919fb21612152898b6f7a889ccb)) +- fix getNetworkApiUrl() and getNetworkExplorerUrl() ([50f884b](https://github.com/rarible/protocol-contracts/commit/50f884b1d2e25f69d3d4c4dfa96a343e14ade288)) +- fix hardhat-migrations, change createToken() and getAddress() in token factories ([8930c47](https://github.com/rarible/protocol-contracts/commit/8930c47eec9da0b3bcbe5c6a467cae3e803085e2)) +- get rid of payable in actions where it's not necessary, fix .yaml data structure and related scipts ([442a124](https://github.com/rarible/protocol-contracts/commit/442a1247a684f686b3a11c76586fda21c54cd868)) +- PT-3891 add upgrade executor ([#262](https://github.com/rarible/protocol-contracts/issues/262)) ([399d30d](https://github.com/rarible/protocol-contracts/commit/399d30dbcb9d868f5678861ae179ce960962da1f)) +- PT-4132 deploy contracts on base_sepolia ([d32ef64](https://github.com/rarible/protocol-contracts/commit/d32ef64eb2bbc805a942a8dc256703751eeeaff4)) +- PT-4241 make integration test for ownership transfer ([3de8a84](https://github.com/rarible/protocol-contracts/commit/3de8a840e38abd6443ed75052101d5ba70bf1bb0)) +- PT-4321 deploy contracts on oasys testnet, prepare config for oasys mainnet ([dfd934b](https://github.com/rarible/protocol-contracts/commit/dfd934bfb2c28915fd491c04dc5d10a36418310f)) +- PT-4431 create scipt to export addresses ([4473d5b](https://github.com/rarible/protocol-contracts/commit/4473d5b86cbb8f3c4a3aee0e11217062bc274e15)) +- PT-4448 prepare exchangeV2 update migration, update exchangeV2 on goerli, polygon_mumbai ([3ff8d0a](https://github.com/rarible/protocol-contracts/commit/3ff8d0a4e0c7af6ca0b90450e8c3fbe5b3d4808d)) +- PT-4453 deploy contract on zksync_sepolia ([f0493bb](https://github.com/rarible/protocol-contracts/commit/f0493bb5d88e6e3a82e36658f3d72d77795e3c96)) +- PT-4456 fix audit issues ([c854b19](https://github.com/rarible/protocol-contracts/commit/c854b19f358ce068be4eb84e31abe75545b68364)) +- PT-4456 use migrations instead of tasks for ownership transfer, add ownership check ([12102c5](https://github.com/rarible/protocol-contracts/commit/12102c550335701b7e06190aadf274d249195231)) +- PT-4465 fix block scan addresess for all networks ([2a481c3](https://github.com/rarible/protocol-contracts/commit/2a481c30b4761b7b304c67a8c7459ac575b2b384)) +- PT-4543 deploy contracts on fief_playground_testnet ([f71e0dd](https://github.com/rarible/protocol-contracts/commit/f71e0dd84abc948290ca9c5dfac12580917b4f10)) +- PT-4639 fix network config for frame ([514629b](https://github.com/rarible/protocol-contracts/commit/514629bd6e6604092cc11077cff02ca885a5142d)) +- PT-4662 get rid of nothing to fill tests ([4059dcb](https://github.com/rarible/protocol-contracts/commit/4059dcb20c100e159643e40929392b05f90f7038)) +- PT-4671 deploy contracts on mantle sepolia ([d5033ef](https://github.com/rarible/protocol-contracts/commit/d5033efaf19222c60f900914300ee93be1069d45)) +- PT-4705 deploy contract on kroma_sepolia ([36ac439](https://github.com/rarible/protocol-contracts/commit/36ac439fef8f85b6e230b481c080bfff7ff5065b)) +- PT-4749 upgrade exchangeV2 with upgradeExecutor ([7e18442](https://github.com/rarible/protocol-contracts/commit/7e18442b90bae4ee8a18c797b9126dad2650f896)) +- PT-4844 deploy contract on match_testnet ([73aef7a](https://github.com/rarible/protocol-contracts/commit/73aef7a61c47804f8348b12c8f553c7b39a254b8)) +- PT-4914 deploy contract on zkLink testnet, prepare config for mainnet ([8796c0a](https://github.com/rarible/protocol-contracts/commit/8796c0a9ac266fdd97ff4bf0a752fbf4b607dd28)) +- PT-4962 deploy contracts on 5ire_testnet ([c752e6d](https://github.com/rarible/protocol-contracts/commit/c752e6d7b8a268006a84c1307e0ed70c88a6da3b)) +- PT-5051 deploy contracts on oasys_testnet_saakuru ([b558424](https://github.com/rarible/protocol-contracts/commit/b558424aea3de4125336e4c393cc7f76515555b9)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) +- PT-5076 deploy contracts to astar_zkyoto_testnet ([de82643](https://github.com/rarible/protocol-contracts/commit/de826431eb30ea6e11d3a74e5c5b0f3a4aa43aa9)) +- PT-5095 deploy contracts on polygon_amoy_testnet ([e89dfd7](https://github.com/rarible/protocol-contracts/commit/e89dfd7386d45e0eb31c28024354dc9f66c6008d)) +- refactoring ([c25bb0f](https://github.com/rarible/protocol-contracts/commit/c25bb0f637c51756a39dd565384f2754df8d7b63)) +- rename ([a2c6a83](https://github.com/rarible/protocol-contracts/commit/a2c6a83b94a89fc9aaddfa1e754cbf5c1280b8c7)) +- RoyaltiesRegistry migration is no longer part of "ownership-transfer" tag ([c9027ad](https://github.com/rarible/protocol-contracts/commit/c9027ad082ae1d760dcc2667f7eb9ced60c9a370)) +- test networks lisk, camp and sei ([962c022](https://github.com/rarible/protocol-contracts/commit/962c0225649a9c7c501bf4b879abdec30be1b877)) +- tidy up network configs, support frame ([82a88fc](https://github.com/rarible/protocol-contracts/commit/82a88fcd81af7638c1234aafd233742d66ecbea1)) +- update wrapper on arbitrum testnet, base testnet, polygon testnet ([572add8](https://github.com/rarible/protocol-contracts/commit/572add81b96f0ea00224f1934411b824031d0b87)) +- upgraded ExchangeV2 on mainnet ([87a3740](https://github.com/rarible/protocol-contracts/commit/87a3740903442667c72b9787ba6fc878f7ce67be)) + ## [0.8.4-beta.3](https://github.com/rarible/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) ### Bug Fixes diff --git a/lerna.json b/lerna.json index 5b99be07f..24b9a2094 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "packages": ["projects/**"], "npmClient": "yarn", - "version": "0.8.4-beta.3", + "version": "0.8.5", "command": { "version": { "allowBranch": ["master", "develop", "feature/*"] diff --git a/projects/auction/CHANGELOG.md b/projects/auction/CHANGELOG.md index bf5b4f6cb..9a8f4c04c 100644 --- a/projects/auction/CHANGELOG.md +++ b/projects/auction/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Features + +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.4-beta.3](https://github.com/rarible/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/auction diff --git a/projects/auction/package.json b/projects/auction/package.json index 0d30293e3..faa3a2926 100644 --- a/projects/auction/package.json +++ b/projects/auction/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/auction", - "version": "0.8.4-beta.3", + "version": "0.8.5", "main": "truffle.js", "directories": { "test": "test" @@ -17,8 +17,8 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-interfaces": "^0.8.4-beta.3", - "@rarible/transfer-manager": "^0.8.4-beta.3", + "@rarible/exchange-interfaces": "^0.8.5", + "@rarible/transfer-manager": "^0.8.5", "ethers": "5.7.2", "truffle-plugin-verify": "^0.6.5" }, diff --git a/projects/custom-matchers/CHANGELOG.md b/projects/custom-matchers/CHANGELOG.md index 76f628144..2635887eb 100644 --- a/projects/custom-matchers/CHANGELOG.md +++ b/projects/custom-matchers/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +**Note:** Version bump only for package @rarible/custom-matchers + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/custom-matchers diff --git a/projects/custom-matchers/package.json b/projects/custom-matchers/package.json index dd683babc..652949591 100644 --- a/projects/custom-matchers/package.json +++ b/projects/custom-matchers/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/custom-matchers", - "version": "0.8.4-beta.3", + "version": "0.8.5", "description": "Custom matchers for different asset classes", "files": [ "contracts", @@ -22,8 +22,8 @@ "url": "https://github.com/rariblecom/protocol-contracts/issues" }, "dependencies": { - "@rarible/exchange-interfaces": "^0.8.4-beta.3", - "@rarible/lazy-mint": "^0.8.4-beta.3", + "@rarible/exchange-interfaces": "^0.8.5", + "@rarible/lazy-mint": "^0.8.5", "ethers": "5.7.2", "truffle-plugin-verify": "^0.6.5" }, diff --git a/projects/deploy-proxy/.gitignore b/projects/deploy-proxy/.gitignore new file mode 100644 index 000000000..1f343a97a --- /dev/null +++ b/projects/deploy-proxy/.gitignore @@ -0,0 +1,2 @@ +artifacts +cache \ No newline at end of file diff --git a/projects/deploy-proxy/CHANGELOG.md b/projects/deploy-proxy/CHANGELOG.md new file mode 100644 index 000000000..3f8d78d55 --- /dev/null +++ b/projects/deploy-proxy/CHANGELOG.md @@ -0,0 +1,22 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Bug Fixes + +- build and deploy ([146e65d](https://github.com/rarible/protocol-contracts/commit/146e65d789f64b6154f5b111ed403d51c7b93efb)) + +### Features + +- add config for sei and camp ([9815c1a](https://github.com/rarible/protocol-contracts/commit/9815c1aa90543667549d9ed4ba183e1fc2be4e14)) +- add deploy ([ad072dc](https://github.com/rarible/protocol-contracts/commit/ad072dc43edd19973e7c5dc539dcdba1edf6e638)) +- add deploy support for factory ([f9a1160](https://github.com/rarible/protocol-contracts/commit/f9a11605766a943f56d004c07d6a4c32b1d26cd1)) +- add deployment for sepolia and mumbai ([84e0c50](https://github.com/rarible/protocol-contracts/commit/84e0c508bd956f3dc793b19a42e6a8e4e8482edb)) +- add hardhat deploy for factory ([898bb86](https://github.com/rarible/protocol-contracts/commit/898bb8641c3349baef58a5738818c0d8c101dc61)) +- add lisk_sepolia ([fc372bd](https://github.com/rarible/protocol-contracts/commit/fc372bd2694d3ee09d8f336a77f48f6f389c89ed)) +- add new ([a75d810](https://github.com/rarible/protocol-contracts/commit/a75d810e4d244a37c53eeee3b3e0b8b9b5965b91)) +- add new deploy frame config ([b518b62](https://github.com/rarible/protocol-contracts/commit/b518b6255d23c9bb15f87e6058730f8c66057ea6)) +- add verify ([f3b2ff1](https://github.com/rarible/protocol-contracts/commit/f3b2ff1f797664223db5d8b9c7bbde5f88cb0449)) diff --git a/projects/deploy-proxy/contracts/ImmutableCreate2Factory.sol b/projects/deploy-proxy/contracts/ImmutableCreate2Factory.sol new file mode 100644 index 000000000..11b74f672 --- /dev/null +++ b/projects/deploy-proxy/contracts/ImmutableCreate2Factory.sol @@ -0,0 +1,205 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg + + +/** + * @title Immutable Create2 Contract Factory + * @author 0age + * @notice This contract provides a safeCreate2 function that takes a salt value + * and a block of initialization code as arguments and passes them into inline + * assembly. The contract prevents redeploys by maintaining a mapping of all + * contracts that have already been deployed, and prevents frontrunning or other + * collisions by requiring that the first 20 bytes of the salt are equal to the + * address of the caller (this can be bypassed by setting the first 20 bytes to + * the null address). There is also a view function that computes the address of + * the contract that will be created when submitting a given salt or nonce along + * with a given block of initialization code. + * @dev This contract has not yet been fully tested or audited - proceed with + * caution and please share any exploits or optimizations you discover. + */ +contract ImmutableCreate2Factory { + // mapping to track which addresses have already been deployed. + mapping(address => bool) private _deployed; + + /** + * @dev Create a contract using CREATE2 by submitting a given salt or nonce + * along with the initialization code for the contract. Note that the first 20 + * bytes of the salt must match those of the calling address, which prevents + * contract creation events from being submitted by unintended parties. + * @param salt bytes32 The nonce that will be passed into the CREATE2 call. + * @param initializationCode bytes The initialization code that will be passed + * into the CREATE2 call. + * @return Address of the contract that will be created, or the null address + * if a contract already exists at that address. + */ + function safeCreate2( + bytes32 salt, + bytes calldata initializationCode + ) external payable containsCaller(salt) returns (address deploymentAddress) { + // move the initialization code from calldata to memory. + bytes memory initCode = initializationCode; + + // determine the target address for contract deployment. + address targetDeploymentAddress = address( + uint160( // downcast to match the address type. + uint256( // convert to uint to truncate upper digits. + keccak256( // compute the CREATE2 hash using 4 inputs. + abi.encodePacked( // pack all inputs to the hash together. + hex"ff", // start with 0xff to distinguish from RLP. + address(this), // this contract will be the caller. + salt, // pass in the supplied salt value. + keccak256( // pass in the hash of initialization code. + abi.encodePacked( + initCode + ) + ) + ) + ) + ) + ) + ); + + // ensure that a contract hasn't been previously deployed to target address. + require( + !_deployed[targetDeploymentAddress], + "Invalid contract creation - contract has already been deployed." + ); + + // using inline assembly: load data and length of data, then call CREATE2. + assembly { // solhint-disable-line + let encoded_data := add(0x20, initCode) // load initialization code. + let encoded_size := mload(initCode) // load the init code's length. + deploymentAddress := create2( // call CREATE2 with 4 arguments. + callvalue, // forward any attached value. + encoded_data, // pass in initialization code. + encoded_size, // pass in init code's length. + salt // pass in the salt value. + ) + } + + // check address against target to ensure that deployment was successful. + require( + deploymentAddress == targetDeploymentAddress, + "Failed to deploy contract using provided salt and initialization code." + ); + + // record the deployment of the contract to prevent redeploys. + _deployed[deploymentAddress] = true; + } + + /** + * @dev Compute the address of the contract that will be created when + * submitting a given salt or nonce to the contract along with the contract's + * initialization code. The CREATE2 address is computed in accordance with + * EIP-1014, and adheres to the formula therein of + * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when + * performing the computation. The computed address is then checked for any + * existing contract code - if so, the null address will be returned instead. + * @param salt bytes32 The nonce passed into the CREATE2 address calculation. + * @param initCode bytes The contract initialization code to be used. + * that will be passed into the CREATE2 address calculation. + * @return Address of the contract that will be created, or the null address + * if a contract has already been deployed to that address. + */ + function findCreate2Address( + bytes32 salt, + bytes calldata initCode + ) external view returns (address deploymentAddress) { + // determine the address where the contract will be deployed. + deploymentAddress = address( + uint160( // downcast to match the address type. + uint256( // convert to uint to truncate upper digits. + keccak256( // compute the CREATE2 hash using 4 inputs. + abi.encodePacked( // pack all inputs to the hash together. + hex"ff", // start with 0xff to distinguish from RLP. + address(this), // this contract will be the caller. + salt, // pass in the supplied salt value. + keccak256( // pass in the hash of initialization code. + abi.encodePacked( + initCode + ) + ) + ) + ) + ) + ) + ); + + // return null address to signify failure if contract has been deployed. + if (_deployed[deploymentAddress]) { + return address(0); + } + } + + /** + * @dev Compute the address of the contract that will be created when + * submitting a given salt or nonce to the contract along with the keccak256 + * hash of the contract's initialization code. The CREATE2 address is computed + * in accordance with EIP-1014, and adheres to the formula therein of + * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when + * performing the computation. The computed address is then checked for any + * existing contract code - if so, the null address will be returned instead. + * @param salt bytes32 The nonce passed into the CREATE2 address calculation. + * @param initCodeHash bytes32 The keccak256 hash of the initialization code + * that will be passed into the CREATE2 address calculation. + * @return Address of the contract that will be created, or the null address + * if a contract has already been deployed to that address. + */ + function findCreate2AddressViaHash( + bytes32 salt, + bytes32 initCodeHash + ) external view returns (address deploymentAddress) { + // determine the address where the contract will be deployed. + deploymentAddress = address( + uint160( // downcast to match the address type. + uint256( // convert to uint to truncate upper digits. + keccak256( // compute the CREATE2 hash using 4 inputs. + abi.encodePacked( // pack all inputs to the hash together. + hex"ff", // start with 0xff to distinguish from RLP. + address(this), // this contract will be the caller. + salt, // pass in the supplied salt value. + initCodeHash // pass in the hash of initialization code. + ) + ) + ) + ) + ); + + // return null address to signify failure if contract has been deployed. + if (_deployed[deploymentAddress]) { + return address(0); + } + } + + /** + * @dev Determine if a contract has already been deployed by the factory to a + * given address. + * @param deploymentAddress address The contract address to check. + * @return True if the contract has been deployed, false otherwise. + */ + function hasBeenDeployed( + address deploymentAddress + ) external view returns (bool) { + // determine if a contract has been deployed to the provided address. + return _deployed[deploymentAddress]; + } + + /** + * @dev Modifier to ensure that the first 20 bytes of a submitted salt match + * those of the calling account. This provides protection against the salt + * being stolen by frontrunners or other attackers. The protection can also be + * bypassed if desired by setting each of the first 20 bytes to zero. + * @param salt bytes32 The salt value to check against the calling address. + */ + modifier containsCaller(bytes32 salt) { + // prevent contract submissions from being stolen from tx.pool by requiring + // that the first 20 bytes of the submitted salt match msg.sender. + require( + (address(bytes20(salt)) == msg.sender) || + (bytes20(salt) == bytes20(0)), + "Invalid salt - first 20 bytes of the salt must match calling address." + ); + _; + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/contracts/TestDeployContract.sol b/projects/deploy-proxy/contracts/TestDeployContract.sol new file mode 100644 index 000000000..2b3395676 --- /dev/null +++ b/projects/deploy-proxy/contracts/TestDeployContract.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.7.6; + +contract TestDeployContract { + // State variables to store the values + uint256 public value1; + uint256 public value2; + + // Constructor with two parameters to initialize the state variables + constructor(uint256 _value1, uint256 _value2) { + value1 = _value1; + value2 = _value2; + } + + // Function to get the first value + function getValue1() public view returns (uint256) { + return value1; + } + + // Function to get the second value + function getValue2() public view returns (uint256) { + return value2; + } +} diff --git a/projects/deploy-proxy/deploy/00-deploy-immutable-create2-factory.ts b/projects/deploy-proxy/deploy/00-deploy-immutable-create2-factory.ts new file mode 100644 index 000000000..689eb6c1f --- /dev/null +++ b/projects/deploy-proxy/deploy/00-deploy-immutable-create2-factory.ts @@ -0,0 +1,24 @@ +import { DeployFunction, DeployResult } from "hardhat-deploy/dist/types"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; + +const deployLock: DeployFunction = async ( + hre: HardhatRuntimeEnvironment +) => { + const { deploy } = hre.deployments; + const { getNamedAccounts } = hre; + const na = await getNamedAccounts() + const {deployer,} = await getNamedAccounts(); + console.log('deployer', deployer, JSON.stringify(na)) + const deployResult: DeployResult = await deploy("ImmutableCreate2Factory", { + from: deployer, + log: true, + args: [], // Unlock timestamp in seconds + waitConfirmations: 1, + nonce: 0 + }); + console.log("transactionHash", deployResult.transactionHash) + +}; + +export default deployLock; +deployLock.tags = ["all", "ImmutableCreate2Factory"]; \ No newline at end of file diff --git a/projects/deploy-proxy/deploy/01-deploy-contract-via-factory.ts b/projects/deploy-proxy/deploy/01-deploy-contract-via-factory.ts new file mode 100644 index 000000000..3355e8ffc --- /dev/null +++ b/projects/deploy-proxy/deploy/01-deploy-contract-via-factory.ts @@ -0,0 +1,23 @@ +import { DeployFunction, DeployResult } from "hardhat-deploy/dist/types"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; + +const deployLock: DeployFunction = async ( + hre: HardhatRuntimeEnvironment +) => { + const { deploy } = hre.deployments; + const { getNamedAccounts } = hre; + const {deployer,} = await getNamedAccounts(); + console.log('deployer', deployer) + + const deployResult: DeployResult = await deploy("TestDeployContract", { + from: deployer, + log: true, + args: [100, 200], // Unlock timestamp in seconds + waitConfirmations: 1, + deterministicDeployment: "0x11111", + }); + console.log("transactionHash", deployResult.transactionHash) +}; + +export default deployLock; +deployLock.tags = ["all", "TestDeployContract"]; \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/arbitrum_sepolia/.chainId b/projects/deploy-proxy/deployments/arbitrum_sepolia/.chainId new file mode 100644 index 000000000..71ba4d632 --- /dev/null +++ b/projects/deploy-proxy/deployments/arbitrum_sepolia/.chainId @@ -0,0 +1 @@ +421614 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/arbitrum_sepolia/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/arbitrum_sepolia/ImmutableCreate2Factory.json new file mode 100644 index 000000000..961402881 --- /dev/null +++ b/projects/deploy-proxy/deployments/arbitrum_sepolia/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xa8ba36e5d0e535aea10ba9658b2e88a8cbafcba540ecf63af796db184b2557e9", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 1, + "gasUsed": "504221", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xce2f769ebe26975268b1ddec4b3a2f955aac1ad00b33809abe9ac5c3338e5361", + "transactionHash": "0xa8ba36e5d0e535aea10ba9658b2e88a8cbafcba540ecf63af796db184b2557e9", + "logs": [], + "blockNumber": 34231788, + "cumulativeGasUsed": "504221", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/arbitrum_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/arbitrum_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/arbitrum_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/astar_zkyoto_testnet/.chainId b/projects/deploy-proxy/deployments/astar_zkyoto_testnet/.chainId new file mode 100644 index 000000000..5f8ee0040 --- /dev/null +++ b/projects/deploy-proxy/deployments/astar_zkyoto_testnet/.chainId @@ -0,0 +1 @@ +6038361 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/astar_zkyoto_testnet/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/astar_zkyoto_testnet/ImmutableCreate2Factory.json new file mode 100644 index 000000000..04d816af2 --- /dev/null +++ b/projects/deploy-proxy/deployments/astar_zkyoto_testnet/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xea4699de1e53f13b0817661a01c5354116eafeda542e2a57918b128c26a288af", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "504087", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xac081314321482fe4dadad5f5076e3a4ff01a4e6070a22d5a976687ef4b7ceec", + "transactionHash": "0xea4699de1e53f13b0817661a01c5354116eafeda542e2a57918b128c26a288af", + "logs": [], + "blockNumber": 1517992, + "cumulativeGasUsed": "504087", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/astar_zkyoto_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/astar_zkyoto_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/astar_zkyoto_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/base_sepolia/.chainId b/projects/deploy-proxy/deployments/base_sepolia/.chainId new file mode 100644 index 000000000..667f99daf --- /dev/null +++ b/projects/deploy-proxy/deployments/base_sepolia/.chainId @@ -0,0 +1 @@ +84532 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/base_sepolia/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/base_sepolia/ImmutableCreate2Factory.json new file mode 100644 index 000000000..b2f2a3298 --- /dev/null +++ b/projects/deploy-proxy/deployments/base_sepolia/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x0040317b6e3c6b6f1f699018808847c386741836f07e48b4917cb6fbc846f34d", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 2, + "gasUsed": "504221", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x5c5c39761b3a08cb4e969fed43b5f30921ce46de1a8c17e942501884c93cc046", + "transactionHash": "0x0040317b6e3c6b6f1f699018808847c386741836f07e48b4917cb6fbc846f34d", + "logs": [], + "blockNumber": 8748564, + "cumulativeGasUsed": "577496", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/base_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/base_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/base_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/camp_sepolia/.chainId b/projects/deploy-proxy/deployments/camp_sepolia/.chainId new file mode 100644 index 000000000..c8246a637 --- /dev/null +++ b/projects/deploy-proxy/deployments/camp_sepolia/.chainId @@ -0,0 +1 @@ +90354 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/camp_sepolia/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/camp_sepolia/ImmutableCreate2Factory.json new file mode 100644 index 000000000..96092bf30 --- /dev/null +++ b/projects/deploy-proxy/deployments/camp_sepolia/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xb8888d799e12da279fe0e4b2c605ecb4b518a552668a16f47fb76a7a46cd7e0d", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 1, + "gasUsed": "504221", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x1e1c1927a305748402d47b410be6f2b4b001944caaf83d37a3b1cbde2025ec53", + "transactionHash": "0xb8888d799e12da279fe0e4b2c605ecb4b518a552668a16f47fb76a7a46cd7e0d", + "logs": [], + "blockNumber": 2243006, + "cumulativeGasUsed": "551098", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/camp_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/camp_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/camp_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/celo_alfajores_testnet/.chainId b/projects/deploy-proxy/deployments/celo_alfajores_testnet/.chainId new file mode 100644 index 000000000..38448fe1c --- /dev/null +++ b/projects/deploy-proxy/deployments/celo_alfajores_testnet/.chainId @@ -0,0 +1 @@ +44787 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/celo_alfajores_testnet/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/celo_alfajores_testnet/ImmutableCreate2Factory.json new file mode 100644 index 000000000..90b35d1fa --- /dev/null +++ b/projects/deploy-proxy/deployments/celo_alfajores_testnet/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x6c59d0eaa92e97a3429a40bfae0f63fe73de20aa4ce22ebd62a2fb1db8b7cd75", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "504087", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xbe62fd65fd1e68c0ef85cb6e97da0e601adeeadd47e7676086309a730cec319a", + "transactionHash": "0x6c59d0eaa92e97a3429a40bfae0f63fe73de20aa4ce22ebd62a2fb1db8b7cd75", + "logs": [], + "blockNumber": 23574847, + "cumulativeGasUsed": "504087", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/celo_alfajores_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/celo_alfajores_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/celo_alfajores_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/kroma_sepolia/.chainId b/projects/deploy-proxy/deployments/kroma_sepolia/.chainId new file mode 100644 index 000000000..4c50c5bea --- /dev/null +++ b/projects/deploy-proxy/deployments/kroma_sepolia/.chainId @@ -0,0 +1 @@ +2358 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/kroma_sepolia/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/kroma_sepolia/ImmutableCreate2Factory.json new file mode 100644 index 000000000..badf3602a --- /dev/null +++ b/projects/deploy-proxy/deployments/kroma_sepolia/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x3ebe65c7e7050a831bd5b591e1a2c0502780ca9ed05a4e9b0761bdadda05357e", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 1, + "gasUsed": "504221", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x71539efea6aa49aab12e41d88f79c3fbbd77b55b60dcb60a145fe0662b816fc3", + "transactionHash": "0x3ebe65c7e7050a831bd5b591e1a2c0502780ca9ed05a4e9b0761bdadda05357e", + "logs": [], + "blockNumber": 12278343, + "cumulativeGasUsed": "553610", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/kroma_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/kroma_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/kroma_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/lightlink_pegasus/.chainId b/projects/deploy-proxy/deployments/lightlink_pegasus/.chainId new file mode 100644 index 000000000..ab6a66639 --- /dev/null +++ b/projects/deploy-proxy/deployments/lightlink_pegasus/.chainId @@ -0,0 +1 @@ +1891 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/lightlink_pegasus/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/lightlink_pegasus/ImmutableCreate2Factory.json new file mode 100644 index 000000000..6fc1d2908 --- /dev/null +++ b/projects/deploy-proxy/deployments/lightlink_pegasus/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x5c43cf1dca8632803c8914b8e809ece216bb5665ff35fbe76190056567bdfed4", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "504221", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xfb574f72d949fe6dbdbe0c5b0eb81afc5129eddc44babc244db2280db9e24028", + "transactionHash": "0x5c43cf1dca8632803c8914b8e809ece216bb5665ff35fbe76190056567bdfed4", + "logs": [], + "blockNumber": 79169740, + "cumulativeGasUsed": "504221", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/lightlink_pegasus/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/lightlink_pegasus/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/lightlink_pegasus/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/lisk_sepolia/.chainId b/projects/deploy-proxy/deployments/lisk_sepolia/.chainId new file mode 100644 index 000000000..edfd6052c --- /dev/null +++ b/projects/deploy-proxy/deployments/lisk_sepolia/.chainId @@ -0,0 +1 @@ +4202 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/lisk_sepolia/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/lisk_sepolia/ImmutableCreate2Factory.json new file mode 100644 index 000000000..63a4f36d5 --- /dev/null +++ b/projects/deploy-proxy/deployments/lisk_sepolia/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x2eea5eabd9676d3974713acb47c7730cccbd83c674d6d9931ac17e0fb2dbe1b7", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 1, + "gasUsed": "504221", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x97a3c18a49b8a652d6043c99174b146f71559824915ad747068efd7a839b2b1f", + "transactionHash": "0x2eea5eabd9676d3974713acb47c7730cccbd83c674d6d9931ac17e0fb2dbe1b7", + "logs": [], + "blockNumber": 4324888, + "cumulativeGasUsed": "559272", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/lisk_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/lisk_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/lisk_sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/mantle_sepolia_testnet/.chainId b/projects/deploy-proxy/deployments/mantle_sepolia_testnet/.chainId new file mode 100644 index 000000000..d119e5e7c --- /dev/null +++ b/projects/deploy-proxy/deployments/mantle_sepolia_testnet/.chainId @@ -0,0 +1 @@ +5003 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/mantle_sepolia_testnet/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/mantle_sepolia_testnet/ImmutableCreate2Factory.json new file mode 100644 index 000000000..4912c0650 --- /dev/null +++ b/projects/deploy-proxy/deployments/mantle_sepolia_testnet/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x82ae23c9728ba9029e05c0f9ff23ecaa1ab8c15245b75c3bad290a1454149b53", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 2, + "gasUsed": "1443481915", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xad7b97204e606e90bb70da17300670c1e119090947397cddd825c6cdd2dc2e2a", + "transactionHash": "0x82ae23c9728ba9029e05c0f9ff23ecaa1ab8c15245b75c3bad290a1454149b53", + "logs": [], + "blockNumber": 5860708, + "cumulativeGasUsed": "1723894950", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/mantle_sepolia_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/mantle_sepolia_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/mantle_sepolia_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/oasis_sapphire_testnet/.chainId b/projects/deploy-proxy/deployments/oasis_sapphire_testnet/.chainId new file mode 100644 index 000000000..1eaaa9c3e --- /dev/null +++ b/projects/deploy-proxy/deployments/oasis_sapphire_testnet/.chainId @@ -0,0 +1 @@ +23295 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/oasis_sapphire_testnet/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/oasis_sapphire_testnet/ImmutableCreate2Factory.json new file mode 100644 index 000000000..2abf7c07d --- /dev/null +++ b/projects/deploy-proxy/deployments/oasis_sapphire_testnet/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x9469bec0d3b0334e84887fd9fd99f85b36a4e88b800416b37834887b6bff1c35", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "507469", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x03fe67ef4283bef70f313940ced692e80335490a32170b6638b85fa75e804bc5", + "transactionHash": "0x9469bec0d3b0334e84887fd9fd99f85b36a4e88b800416b37834887b6bff1c35", + "logs": [], + "blockNumber": 5841362, + "cumulativeGasUsed": "507469", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/oasis_sapphire_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/oasis_sapphire_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/oasis_sapphire_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/oasys_testnet_saakuru/.chainId b/projects/deploy-proxy/deployments/oasys_testnet_saakuru/.chainId new file mode 100644 index 000000000..692b09113 --- /dev/null +++ b/projects/deploy-proxy/deployments/oasys_testnet_saakuru/.chainId @@ -0,0 +1 @@ +247253 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/oasys_testnet_saakuru/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/oasys_testnet_saakuru/ImmutableCreate2Factory.json new file mode 100644 index 000000000..63429efab --- /dev/null +++ b/projects/deploy-proxy/deployments/oasys_testnet_saakuru/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x7fc28f27e80dfd89a95e74f5eb082d3c6602fc1299650686c6fa771f21155b2e", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "504087", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x652e9e96a6d8930254c23dd9f2c7400e39d67c8ded6909ffa7bb27836b05af6d", + "transactionHash": "0x7fc28f27e80dfd89a95e74f5eb082d3c6602fc1299650686c6fa771f21155b2e", + "logs": [], + "blockNumber": 26121, + "cumulativeGasUsed": "504087", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/oasys_testnet_saakuru/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/oasys_testnet_saakuru/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/oasys_testnet_saakuru/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/palm_testnet/.chainId b/projects/deploy-proxy/deployments/palm_testnet/.chainId new file mode 100644 index 000000000..64f8fe446 --- /dev/null +++ b/projects/deploy-proxy/deployments/palm_testnet/.chainId @@ -0,0 +1 @@ +11297108099 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/palm_testnet/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/palm_testnet/ImmutableCreate2Factory.json new file mode 100644 index 000000000..5f36d1de9 --- /dev/null +++ b/projects/deploy-proxy/deployments/palm_testnet/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xb35774a26128276154723cc5aff1f52301e56265cdbaf0b858666d46850c73e4", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "504087", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x50d3e59839ba0ebccab7fe90f7c008d23edbf1895a8d91f62d3b6e720bc9540f", + "transactionHash": "0xb35774a26128276154723cc5aff1f52301e56265cdbaf0b858666d46850c73e4", + "logs": [], + "blockNumber": 17526440, + "cumulativeGasUsed": "504087", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/palm_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/palm_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/palm_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/polygon_amoy_testnet/.chainId b/projects/deploy-proxy/deployments/polygon_amoy_testnet/.chainId new file mode 100644 index 000000000..b8ca3095d --- /dev/null +++ b/projects/deploy-proxy/deployments/polygon_amoy_testnet/.chainId @@ -0,0 +1 @@ +80002 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/polygon_amoy_testnet/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/polygon_amoy_testnet/ImmutableCreate2Factory.json new file mode 100644 index 000000000..73d9eb1a0 --- /dev/null +++ b/projects/deploy-proxy/deployments/polygon_amoy_testnet/ImmutableCreate2Factory.json @@ -0,0 +1,131 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x3d4364f3e1c472567d5c0c6d12725f8136aada5c610e73cf81649f64185db40f", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 2, + "gasUsed": "504221", + "logsBloom": "0x00000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000008000000000000000000040000000000000000000000000000000000000800000000000000000000100000080000000000000000000100000000000000000000000000000000080000000000000000000000000000000000000000000000000200000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000011000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "blockHash": "0x488cd3ef4c66b97e7816eb42a941cafe39251edc47465885085fd2f0ff8fd601", + "transactionHash": "0x3d4364f3e1c472567d5c0c6d12725f8136aada5c610e73cf81649f64185db40f", + "logs": [ + { + "transactionIndex": 2, + "blockNumber": 5931389, + "transactionHash": "0x3d4364f3e1c472567d5c0c6d12725f8136aada5c610e73cf81649f64185db40f", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000002cc11132c7dba4d55459c0be2792ab700b15d512", + "0x0000000000000000000000004631753190f2f5a15a7ba172bbac102b7d95fa22" + ], + "data": "0x0000000000000000000000000000000000000000000000000002afe12663d3000000000000000000000000000000000000000000000000000429d069189e00000000000000000000000000000000000000000000000000394bd4d5a58bd0c61600000000000000000000000000000000000000000000000004272087f23a2d000000000000000000000000000000000000000000000000394bd78586b2349916", + "logIndex": 4, + "blockHash": "0x488cd3ef4c66b97e7816eb42a941cafe39251edc47465885085fd2f0ff8fd601" + } + ], + "blockNumber": 5931389, + "cumulativeGasUsed": "546221", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/polygon_amoy_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/polygon_amoy_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/polygon_amoy_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/sei_testnet/.chainId b/projects/deploy-proxy/deployments/sei_testnet/.chainId new file mode 100644 index 000000000..9f1c2b165 --- /dev/null +++ b/projects/deploy-proxy/deployments/sei_testnet/.chainId @@ -0,0 +1 @@ +713715 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/sei_testnet/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/sei_testnet/ImmutableCreate2Factory.json new file mode 100644 index 000000000..b205f0c15 --- /dev/null +++ b/projects/deploy-proxy/deployments/sei_testnet/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xefdae6cefb564b88c7d015da45a9f5c2677e979bc332743a3716caadb3796139", + "receipt": { + "to": "0x0000000000000000000000000000000000000000", + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "504221", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x315716582e2b724f7c0876e93381e54ae227756825658ed4ff78df49e51d4e58", + "transactionHash": "0xefdae6cefb564b88c7d015da45a9f5c2677e979bc332743a3716caadb3796139", + "logs": [], + "blockNumber": 17732547, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/sei_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/sei_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/sei_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/sepolia/.chainId b/projects/deploy-proxy/deployments/sepolia/.chainId new file mode 100644 index 000000000..bd8d1cd44 --- /dev/null +++ b/projects/deploy-proxy/deployments/sepolia/.chainId @@ -0,0 +1 @@ +11155111 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/sepolia/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/sepolia/ImmutableCreate2Factory.json new file mode 100644 index 000000000..898e94b7c --- /dev/null +++ b/projects/deploy-proxy/deployments/sepolia/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xaf84f0df89cc6ee451b69366f56200d42e546e3e16f2e0ba247637c5fa935ad8", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 60, + "gasUsed": "504221", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc7518809bc31327a7f7cd37990dbaf11be6cf7290f68ddda6b8d82b9ef0d36a0", + "transactionHash": "0xaf84f0df89cc6ee451b69366f56200d42e546e3e16f2e0ba247637c5fa935ad8", + "logs": [], + "blockNumber": 5635335, + "cumulativeGasUsed": "13387705", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/sepolia/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/hardhat.config.ts b/projects/deploy-proxy/hardhat.config.ts new file mode 100644 index 000000000..862c03524 --- /dev/null +++ b/projects/deploy-proxy/hardhat.config.ts @@ -0,0 +1,561 @@ +import { HardhatUserConfig } from "hardhat/config"; +import "@nomicfoundation/hardhat-toolbox"; +import "hardhat-deploy-immutable-proxy"; +import "@openzeppelin/hardhat-upgrades"; +import "@nomiclabs/hardhat-truffle5"; + +import type { + HttpNetworkConfig, + HttpNetworkUserConfig, +} from "hardhat/types"; +import * as dotenv from "dotenv"; +import * as os from "os"; +import * as path from "path"; +import fs from "fs"; +import "./tasks"; + +dotenv.config(); + +function getConfigPath() { + const configPath = process.env["NETWORK_CONFIG_PATH"]; + if (configPath) { + return configPath; + } else { + return path.join(os.homedir(), ".ethereum"); + } +} + +function getNetworkApiKey(name: string): string { + const configPath = path.join(getConfigPath(), name + ".json"); + if (fs.existsSync(configPath)) { + var json = require(configPath); + if (!!json.verify) { + return json.verify.apiKey; + } + else { + return "xyz" + } + } else { + // File doesn't exist in path + return "xyz"; + } +} + +function getNetworkApiUrl(name: string): string { + let result:string = ""; + const configPath = path.join(getConfigPath(), name + ".json"); + if (fs.existsSync(configPath)) { + var json = require(configPath); + if (json.verify && json.verify.apiUrl) { + result = json.verify.apiUrl; + } + } + return result; +} + +function getNetworkExplorerUrl(name: string): string { + let result:string = ""; + const configPath = path.join(getConfigPath(), name + ".json"); + if (fs.existsSync(configPath)) { + var json = require(configPath); + if (json.verify && json.verify.explorerUrl) { + result = json.verify.explorerUrl; + } + } + return result; +} + +function createNetwork(name: string): HttpNetworkUserConfig { + const configPath = path.join(getConfigPath(), name + ".json"); + if (fs.existsSync(configPath)) { + var json = require(configPath); + if (json.verify && json.verify.apiUrl && json.verify.apiUrl.endsWith("/api")) { + json.verify.apiUrl = json.verify.apiUrl.slice(0, -4); + } + //if frame + if (!json.key) { + return { + url: json.url || "", + chainId: json.network_id, + timeout: 60000, + } as HttpNetworkConfig + } else { + // if not frame + return { + from: json.address, + gasPrice: "auto", + chainId: parseInt(json.network_id), + url: json.url || "", + accounts: [json.key], + gas: "auto", + saveDeployments: true, + verify: json.verify + ? { + etherscan: { + apiKey: json.verify.apiKey, + apiUrl: json.verify.apiUrl, + }, + } + : null, + zksync: json.zksync === true, + } as HttpNetworkUserConfig; + } + } else { + // File doesn't exist in path + return { + from: "0x0000000000000000000000000000000000000000", + gas: 0, + chainId: 0, + url: "", + accounts: [], + gasPrice: 0, + }; + } +} + +const config: HardhatUserConfig = { + solidity: { + compilers: [ + { + version: "0.7.6", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + { + version: "0.5.10", + settings: { + optimizer: { + enabled: true, + runs: 99999, + }, + evmVersion: "petersburg", + }, + }, + { + version: "0.8.16", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + ], + overrides: { + "contracts/ImmutableCreate2Factory.sol": { + version: "0.5.10", + settings: { + optimizer: { + enabled: true, + runs: 99999, + }, + evmVersion: "petersburg", + }, + } + }, + settings: { + metadata: { + // Not including the metadata hash + // https://github.com/paulrberg/hardhat-template/issues/31 + bytecodeHash: "none", + }, + // Disable the optimizer when debugging + // https://hardhat.org/hardhat-network/#solidity-optimizer-support + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + namedAccounts: { + deployer: 0, + }, + paths: { + sources: "contracts", + }, + networks: { + hardhat: {}, + mainnet: createNetwork("mainnet"), + polygon_mumbai: createNetwork("polygon_mumbai"), + polygon_mainnet: createNetwork("polygon_mainnet"), + // polygon_dev: createNetwork("polygon_dev"), + // dev: createNetwork("dev"), + goerli: createNetwork("goerli"), + sepolia: createNetwork("sepolia"), + // staging: createNetwork("staging"), + // polygon_staging: createNetwork("polygon_staging"), + optimism_mainnet: createNetwork("optimism_mainnet"), + optimism_goerli: createNetwork("optimism_goerli"), + mantle_testnet: createNetwork("mantle_testnet"), + mantle_mainnet: createNetwork("mantle_mainnet"), + arbitrum_goerli: createNetwork("arbitrum_goerli"), + arbitrum_sepolia: createNetwork("arbitrum_sepolia"), + arbitrum_mainnet: createNetwork("arbitrum_mainnet"), + zkatana_testnet: createNetwork("zkatana_testnet"), + zkatana_mainnet: createNetwork("zkatana_mainnet"), + chiliz_testnet: createNetwork("chiliz_testnet"), + chiliz_mainnet: createNetwork("chiliz_mainnet"), + zksync_testnet: createNetwork("zksync_testnet"), + lightlink: createNetwork("lightlink"), + lightlink_pegasus: createNetwork("lightlink_pegasus"), + rari_testnet: createNetwork("rari_testnet"), + rari: createNetwork("rari"), + base_sepolia: createNetwork("base_sepolia"), + base: createNetwork("base"), + zksync_sepolia: createNetwork("zksync_sepolia"), + celo_alfajores_testnet: createNetwork("celo_alfajores_testnet"), + celo: createNetwork("celo"), + mantle_sepolia_testnet: createNetwork("mantle_sepolia_testnet"), + fief_playground_testnet: createNetwork("fief_playground_testnet"), + oasis_sapphire_testnet: createNetwork("oasis_sapphire_testnet"), + oasis: createNetwork("oasis"), + xai_sepolia_testnet: createNetwork("xai_sepolia_testnet"), + xai: createNetwork("xai"), + kroma_sepolia: createNetwork("kroma_sepolia"), + kroma: createNetwork("kroma"), + astar: createNetwork("astar"), + oasys_testnet: createNetwork("oasys_testnet"), + oasys: createNetwork("oasys"), + zkLink: { + zksync: true, + ethNetwork: "mainnet", + ...createNetwork("zkLink"), + }, + astar_zkyoto_testnet: createNetwork("astar_zkyoto_testnet"), + oasys_testnet_saakuru: createNetwork("oasys_testnet_saakuru"), + saakuru: createNetwork("saakuru"), + polygon_amoy_testnet: createNetwork("polygon_amoy_testnet"), + palm_testnet: createNetwork("palm_testnet"), + match_testnet: createNetwork("match_testnet"), + "5ire_testnet": createNetwork("5ire_testnet"), + palm: createNetwork("palm"), + match: createNetwork("match"), + lisk_sepolia: createNetwork("lisk_sepolia"), + camp_sepolia: createNetwork("camp_sepolia"), + sei_testnet: createNetwork("sei_testnet"), + }, + etherscan: { + apiKey: { + mainnet: getNetworkApiKey('mainnet'), + polygon: getNetworkApiKey('polygon_mainnet'), + mumbai: getNetworkApiKey('polygon_mumbai'), + goerli: getNetworkApiKey("goerli"), + sepolia: getNetworkApiKey("sepolia"), + mantle_mainnet: getNetworkApiKey("mantle_mainnet"), + mantle_testnet: getNetworkApiKey("mantle_testnet"), + arbitrum_sepolia: getNetworkApiKey("arbitrum_sepolia"), + arbitrum_mainnet: getNetworkApiKey("arbitrum_mainnet"), + zksync_testnet: getNetworkApiKey("zksync_testnet"), + rari_testnet: getNetworkApiKey("rari_testnet"), + mantle_sepolia_testnet: getNetworkApiKey("mantle_sepolia_testnet"), + fief_playground_testnet: getNetworkApiKey("fief_playground_testnet"), + oasis_sapphire_testnet: getNetworkApiKey("oasis_sapphire_testnet"), + xai_sepolia_testnet: getNetworkApiKey("xai_sepolia_testnet"), + base: getNetworkApiKey("base"), + celo: getNetworkApiKey("celo"), + lightlink: getNetworkApiKey("lightlink"), + oasis: getNetworkApiKey("oasis"), + rari: getNetworkApiKey("rari"), + xai: getNetworkApiKey("xai"), + kroma_sepolia: getNetworkApiKey("kroma_sepolia"), + kroma: getNetworkApiKey("kroma"), + astar: getNetworkApiKey("astar"), + oasys_testnet: getNetworkApiKey("oasys_testnet"), + oasys: getNetworkApiKey("oasys"), + astar_zkyoto_testnet: getNetworkApiKey("astar_zkyoto_testnet"), + oasys_testnet_saakuru: getNetworkApiKey("oasys_testnet_saakuru"), + saakuru: getNetworkApiKey("saakuru"), + polygon_amoy_testnet: getNetworkApiKey("polygon_amoy_testnet"), + palm_testnet: getNetworkApiKey("palm_testnet"), + match_testnet: getNetworkApiKey("match_testnet"), + "5ire_testnet": getNetworkApiKey("5ire_testnet"), + palm: getNetworkApiKey("palm"), + match: getNetworkApiKey("match"), + lisk_sepolia: getNetworkApiKey("lisk_sepolia"), + camp_sepolia: getNetworkApiKey("camp_sepolia"), + sei_testnet: getNetworkApiKey("sei_testnet"), + }, + customChains: [ + { + network: "match", + chainId: createNetwork("match").chainId!, + urls: { + apiURL: getNetworkApiUrl("match"), + browserURL: getNetworkExplorerUrl("match"), + }, + }, + { + network: "palm", + chainId: createNetwork("palm").chainId!, + urls: { + apiURL: getNetworkApiUrl("palm"), + browserURL: getNetworkExplorerUrl("palm"), + }, + }, + { + network: "5ire_testnet", + chainId: createNetwork("5ire_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("5ire_testnet"), + browserURL: getNetworkExplorerUrl("5ire_testnet"), + }, + }, + { + network: "match_testnet", + chainId: createNetwork("match_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("match_testnet"), + browserURL: getNetworkExplorerUrl("match_testnet"), + }, + }, + { + network: "palm_testnet", + chainId: createNetwork("palm_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("palm_testnet"), + browserURL: getNetworkExplorerUrl("palm_testnet"), + }, + }, + { + network: "polygon_amoy_testnet", + chainId: createNetwork("polygon_amoy_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("polygon_amoy_testnet"), + browserURL: getNetworkExplorerUrl("polygon_amoy_testnet"), + }, + }, + { + network: "saakuru", + chainId: createNetwork("saakuru").chainId!, + urls: { + apiURL: getNetworkApiUrl("saakuru"), + browserURL: getNetworkExplorerUrl("saakuru"), + }, + }, + { + network: "oasys_testnet_saakuru", + chainId: createNetwork("oasys_testnet_saakuru").chainId!, + urls: { + apiURL: getNetworkApiUrl("oasys_testnet_saakuru"), + browserURL: getNetworkExplorerUrl("oasys_testnet_saakuru"), + }, + }, + { + network: "astar_zkyoto_testnet", + chainId: createNetwork("astar_zkyoto_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("astar_zkyoto_testnet"), + browserURL: getNetworkExplorerUrl("astar_zkyoto_testnet"), + }, + }, + { + network: "oasys", + chainId: createNetwork("oasys").chainId!, + urls: { + apiURL: getNetworkApiUrl("oasys"), + browserURL: getNetworkExplorerUrl("oasys"), + }, + }, + { + network: "oasys_testnet", + chainId: createNetwork("oasys_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("oasys_testnet"), + browserURL: getNetworkExplorerUrl("oasys_testnet"), + }, + }, + { + network: "astar", + chainId: createNetwork("astar").chainId!, + urls: { + apiURL: getNetworkApiUrl("astar"), + browserURL: getNetworkExplorerUrl("astar"), + }, + }, + { + network: "kroma", + chainId: createNetwork("kroma").chainId!, + urls: { + apiURL: getNetworkApiUrl("kroma"), + browserURL: getNetworkExplorerUrl("kroma"), + }, + }, + { + network: "base", + chainId: createNetwork("base").chainId!, + urls: { + apiURL: getNetworkApiUrl("base"), + browserURL: getNetworkExplorerUrl("base"), + }, + }, + { + network: "celo", + chainId: createNetwork("celo").chainId!, + urls: { + apiURL: getNetworkApiUrl("celo"), + browserURL: getNetworkExplorerUrl("celo"), + }, + }, + { + network: "lightlink", + chainId: createNetwork("lightlink").chainId!, + urls: { + apiURL: getNetworkApiUrl("lightlink"), + browserURL: getNetworkExplorerUrl("lightlink"), + }, + }, + { + network: "oasis", + chainId: createNetwork("oasis").chainId!, + urls: { + apiURL: getNetworkApiUrl("oasis"), + browserURL: getNetworkExplorerUrl("oasis"), + }, + }, + { + network: "rari", + chainId: createNetwork("rari").chainId!, + urls: { + apiURL: getNetworkApiUrl("rari"), + browserURL: getNetworkExplorerUrl("rari"), + }, + }, + { + network: "xai", + chainId: createNetwork("xai").chainId!, + urls: { + apiURL: getNetworkApiUrl("xai"), + browserURL: getNetworkExplorerUrl("xai"), + }, + }, + { + network: "kroma_sepolia", + chainId: createNetwork("kroma_sepolia").chainId!, + urls: { + apiURL: getNetworkApiUrl("kroma_sepolia"), + browserURL: getNetworkExplorerUrl("kroma_sepolia"), + }, + }, + { + network: "xai_sepolia_testnet", + chainId: createNetwork("xai_sepolia_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("xai_sepolia_testnet"), + browserURL: getNetworkExplorerUrl("xai_sepolia_testnet"), + }, + }, + { + network: "oasis_sapphire_testnet", + chainId: createNetwork("oasis_sapphire_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("oasis_sapphire_testnet"), + browserURL: getNetworkExplorerUrl("oasis_sapphire_testnet"), + }, + }, + { + network: "fief_playground_testnet", + chainId: createNetwork("fief_playground_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("fief_playground_testnet"), + browserURL: getNetworkExplorerUrl("fief_playground_testnet"), + }, + }, + { + network: "base_sepolia", + chainId: createNetwork("base_sepolia").chainId!, + urls: { + apiURL: getNetworkApiUrl("base_sepolia"), + browserURL: getNetworkExplorerUrl("base_sepolia"), + }, + }, + { + network: "rari_testnet", + chainId: createNetwork("rari_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("rari_testnet"), + browserURL: getNetworkExplorerUrl("rari_testnet"), + }, + }, + { + network: "mantle_sepolia_testnet", + chainId: createNetwork("mantle_sepolia_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("mantle_sepolia_testnet"), + browserURL: getNetworkExplorerUrl("mantle_sepolia_testnet"), + }, + }, + { + network: "mantle_mainnet", + chainId: createNetwork("mantle_mainnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("mantle_mainnet"), + browserURL: getNetworkExplorerUrl("mantle_mainnet"), + }, + }, + { + network: "mantle_testnet", + chainId: createNetwork("mantle_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("mantle_testnet"), + browserURL: getNetworkExplorerUrl("mantle_testnet"), + }, + }, + { + network: "arbitrum_sepolia", + chainId: createNetwork("arbitrum_sepolia").chainId!, + urls: { + apiURL: getNetworkApiUrl("arbitrum_sepolia"), + browserURL: getNetworkExplorerUrl("arbitrum_sepolia"), + }, + }, + { + network: "arbitrum_mainnet", + chainId: createNetwork("arbitrum_mainnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("arbitrum_mainnet"), + browserURL: getNetworkExplorerUrl("arbitrum_mainnet"), + }, + }, + { + network: "zksync_testnet", + chainId: createNetwork("zksync_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("zksync_testnet"), + browserURL: getNetworkExplorerUrl("zksync_testnet"), + }, + }, + { + network: "lisk_sepolia", + chainId: createNetwork("lisk_sepolia").chainId!, + urls: { + apiURL: getNetworkApiUrl("lisk_sepolia"), + browserURL: getNetworkExplorerUrl("lisk_sepolia"), + }, + }, + { + network: "camp_sepolia", + chainId: createNetwork("camp_sepolia").chainId!, + urls: { + apiURL: getNetworkApiUrl("camp_sepolia"), + browserURL: getNetworkExplorerUrl("camp_sepolia"), + }, + }, + { + network: "sei_testnet", + chainId: createNetwork("sei_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("sei_testnet"), + browserURL: getNetworkExplorerUrl("sei_testnet"), + }, + }, + ], + } +}; + + + +export default config; \ No newline at end of file diff --git a/projects/deploy-proxy/package.json b/projects/deploy-proxy/package.json new file mode 100644 index 000000000..60c5d7e04 --- /dev/null +++ b/projects/deploy-proxy/package.json @@ -0,0 +1,89 @@ +{ + "name": "@rarible/deploy-proxy", + "version": "0.8.5", + "main": "truffle.js", + "directories": { + "test": "test" + }, + "files": [ + "contracts", + "readme.md", + "dist" + ], + "scripts": { + "test": "truffle test", + "build": "hardhat compile && tsc -skipLibCheck", + "deploy": "hardhat deploy --tags ImmutableCreate2Factory --network sepolia", + "deploy-test-contract": "hardhat deploy --tags TestDeployContract --network polygon_mainnet", + "compile-zk": "npx hardhat --config zk.hardhat.config.ts compile", + "deploy-zk": "npx hardhat run --config zk.hardhat.config.ts scripts/zk-deploy-721-factory.ts", + "verify-zk": "npx hardhat verify --config zk.hardhat.config.ts 0x5F577Dd877b0136ab7ed8A4d7b303aD38348a1Ea", + "verify": "npx hardhat verify 0x1bf0973f710Ea3EBaA7b34D5F3733c82585f5252 --network sepolia" + }, + "dependencies": { + "@matterlabs/hardhat-zksync-chai-matchers": "1.2.1", + "@matterlabs/hardhat-zksync-deploy": "^0.6.3", + "@matterlabs/hardhat-zksync-ethers": "^0.0.1-beta.2", + "@matterlabs/hardhat-zksync-solc": "^0.3.15", + "@matterlabs/hardhat-zksync-toolbox": "^0.2.0", + "@matterlabs/hardhat-zksync-upgradable": "^0.2.0", + "@matterlabs/hardhat-zksync-verify": "0.2.1", + "@nomicfoundation/hardhat-verify": "2.0.5", + "@openzeppelin/contracts": "3.4.0", + "@openzeppelin/contracts-upgradeable": "3.4.0", + "@openzeppelin/hardhat-upgrades": "^1.22.1", + "@openzeppelin/upgrades-core": "~1.31.1", + "eth-sig-util": "^3.0.1", + "truffle-plugin-verify": "^0.6.5", + "zksync-ethers": "^5.0.0" + }, + "devDependencies": { + "@daonomic/tests-common": "0.2.2", + "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", + "@nomicfoundation/hardhat-foundry": "^1.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox": "^2.0.2", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@nomiclabs/hardhat-etherscan": "^3.1.7", + "@nomiclabs/hardhat-truffle5": "^2.0.7", + "@nomiclabs/hardhat-waffle": "^2.0.5", + "@nomiclabs/hardhat-web3": "^2.0.0", + "@nxqbao/eth-signer-trezor": "^1.0.1", + "@openzeppelin/contracts-upgradeable": "^3.4.0", + "@openzeppelin/hardhat-upgrades": "^1.22.1", + "@openzeppelin/truffle-upgrades": "^1.8.1", + "@tenderly/hardhat-tenderly": "^1.6.1", + "@trezor/connect": "^9.1.4", + "@trezor/connect-plugin-ethereum": "^9.0.2", + "@truffle/hdwallet-provider": "1.4.0", + "@typechain/ethers-v5": "^10.2.0", + "@typechain/hardhat": "^6.1.5", + "@types/chai": "^4.3.4", + "@types/hdkey": "^2.0.2", + "@types/mocha": "^10.0.1", + "@types/node": "^18.14.2", + "chai": "^4.3.7", + "ethereumjs-util": "6.1.0", + "ethers": "^5.7.2", + "hardhat": "^2.18.1", + "hardhat-abi-exporter": "^2.10.1", + "hardhat-deploy": "^0.12.2", + "hardhat-gas-reporter": "^1.0.9", + "hardhat-truffle5": "^1.0.1", + "hdkey": "^2.1.0", + "keccak256": "^1.0.6", + "sol-merger": "^3.1.0", + "solidity-coverage": "^0.8.2", + "truffle-plugin-verify": "^0.5.7", + "ts-node": "^10.9.1", + "tslib": "^2.5.0", + "typechain": "^8.2.0", + "typescript": "^5.0.4", + "web3": "^1.8.2", + "zksync-web3": "^0.17.1" + }, + "publishConfig": { + "access": "public" + }, + "gitHead": "5e5176f5a50882881620a90e1b3c1e5fb3f9dfcb" +} diff --git a/projects/deploy-proxy/scripts/get-create2-address.ts b/projects/deploy-proxy/scripts/get-create2-address.ts new file mode 100644 index 000000000..a3d0fe3ad --- /dev/null +++ b/projects/deploy-proxy/scripts/get-create2-address.ts @@ -0,0 +1,24 @@ +import { BytesLike, ethers, utils } from 'ethers'; +// Function to calculate CREATE2 address + +export function calculateCreate2Address(sender: string, salt: string, initCodeHash: BytesLike): string { + + // Ensure inputs are 0x-prefixed hex strings + const senderAddressHex = ethers.utils.getAddress(sender); + const saltHex = ethers.utils.hexZeroPad(ethers.utils.hexlify(salt), 32); + const initCodeHashHex = ethers.utils.hexlify(initCodeHash); + + // Calculate CREATE2 address + const create2AddressBytes = ethers.utils.keccak256( + '0x' + + 'ff' + + senderAddressHex.slice(2) + + saltHex.slice(2) + + initCodeHashHex.slice(2) + ); + + // Take the last 20 bytes of the hash, then encode as an address + const address = ethers.utils.getAddress('0x' + create2AddressBytes.slice(-40)); + return address; + } + diff --git a/projects/deploy-proxy/tasks/index.ts b/projects/deploy-proxy/tasks/index.ts new file mode 100644 index 000000000..e69de29bb diff --git a/projects/deploy-proxy/typechain-types/ImmutableCreate2Factory.ts b/projects/deploy-proxy/typechain-types/ImmutableCreate2Factory.ts new file mode 100644 index 000000000..1b144aba5 --- /dev/null +++ b/projects/deploy-proxy/typechain-types/ImmutableCreate2Factory.ts @@ -0,0 +1,228 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + ContractTransaction, + PayableOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, + PromiseOrValue, +} from "./common"; + +export interface ImmutableCreate2FactoryInterface extends utils.Interface { + functions: { + "hasBeenDeployed(address)": FunctionFragment; + "safeCreate2(bytes32,bytes)": FunctionFragment; + "findCreate2Address(bytes32,bytes)": FunctionFragment; + "findCreate2AddressViaHash(bytes32,bytes32)": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: + | "hasBeenDeployed" + | "safeCreate2" + | "findCreate2Address" + | "findCreate2AddressViaHash" + ): FunctionFragment; + + encodeFunctionData( + functionFragment: "hasBeenDeployed", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "safeCreate2", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "findCreate2Address", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "findCreate2AddressViaHash", + values: [PromiseOrValue, PromiseOrValue] + ): string; + + decodeFunctionResult( + functionFragment: "hasBeenDeployed", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "safeCreate2", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "findCreate2Address", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "findCreate2AddressViaHash", + data: BytesLike + ): Result; + + events: {}; +} + +export interface ImmutableCreate2Factory extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: ImmutableCreate2FactoryInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + hasBeenDeployed( + deploymentAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[boolean]>; + + safeCreate2( + salt: PromiseOrValue, + initializationCode: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + findCreate2Address( + salt: PromiseOrValue, + initCode: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string] & { deploymentAddress: string }>; + + findCreate2AddressViaHash( + salt: PromiseOrValue, + initCodeHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise<[string] & { deploymentAddress: string }>; + }; + + hasBeenDeployed( + deploymentAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + safeCreate2( + salt: PromiseOrValue, + initializationCode: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + findCreate2Address( + salt: PromiseOrValue, + initCode: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + findCreate2AddressViaHash( + salt: PromiseOrValue, + initCodeHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + callStatic: { + hasBeenDeployed( + deploymentAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + safeCreate2( + salt: PromiseOrValue, + initializationCode: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + findCreate2Address( + salt: PromiseOrValue, + initCode: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + findCreate2AddressViaHash( + salt: PromiseOrValue, + initCodeHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + filters: {}; + + estimateGas: { + hasBeenDeployed( + deploymentAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + safeCreate2( + salt: PromiseOrValue, + initializationCode: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + findCreate2Address( + salt: PromiseOrValue, + initCode: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + findCreate2AddressViaHash( + salt: PromiseOrValue, + initCodeHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; + + populateTransaction: { + hasBeenDeployed( + deploymentAddress: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + safeCreate2( + salt: PromiseOrValue, + initializationCode: PromiseOrValue, + overrides?: PayableOverrides & { from?: PromiseOrValue } + ): Promise; + + findCreate2Address( + salt: PromiseOrValue, + initCode: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + findCreate2AddressViaHash( + salt: PromiseOrValue, + initCodeHash: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + }; +} diff --git a/projects/deploy-proxy/typechain-types/TestDeployContract.ts b/projects/deploy-proxy/typechain-types/TestDeployContract.ts new file mode 100644 index 000000000..a6e74beec --- /dev/null +++ b/projects/deploy-proxy/typechain-types/TestDeployContract.ts @@ -0,0 +1,122 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { + BaseContract, + BigNumber, + BytesLike, + CallOverrides, + PopulatedTransaction, + Signer, + utils, +} from "ethers"; +import type { FunctionFragment, Result } from "@ethersproject/abi"; +import type { Listener, Provider } from "@ethersproject/providers"; +import type { + TypedEventFilter, + TypedEvent, + TypedListener, + OnEvent, +} from "./common"; + +export interface TestDeployContractInterface extends utils.Interface { + functions: { + "getValue1()": FunctionFragment; + "getValue2()": FunctionFragment; + "value1()": FunctionFragment; + "value2()": FunctionFragment; + }; + + getFunction( + nameOrSignatureOrTopic: "getValue1" | "getValue2" | "value1" | "value2" + ): FunctionFragment; + + encodeFunctionData(functionFragment: "getValue1", values?: undefined): string; + encodeFunctionData(functionFragment: "getValue2", values?: undefined): string; + encodeFunctionData(functionFragment: "value1", values?: undefined): string; + encodeFunctionData(functionFragment: "value2", values?: undefined): string; + + decodeFunctionResult(functionFragment: "getValue1", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "getValue2", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "value1", data: BytesLike): Result; + decodeFunctionResult(functionFragment: "value2", data: BytesLike): Result; + + events: {}; +} + +export interface TestDeployContract extends BaseContract { + connect(signerOrProvider: Signer | Provider | string): this; + attach(addressOrName: string): this; + deployed(): Promise; + + interface: TestDeployContractInterface; + + queryFilter( + event: TypedEventFilter, + fromBlockOrBlockhash?: string | number | undefined, + toBlock?: string | number | undefined + ): Promise>; + + listeners( + eventFilter?: TypedEventFilter + ): Array>; + listeners(eventName?: string): Array; + removeAllListeners( + eventFilter: TypedEventFilter + ): this; + removeAllListeners(eventName?: string): this; + off: OnEvent; + on: OnEvent; + once: OnEvent; + removeListener: OnEvent; + + functions: { + getValue1(overrides?: CallOverrides): Promise<[BigNumber]>; + + getValue2(overrides?: CallOverrides): Promise<[BigNumber]>; + + value1(overrides?: CallOverrides): Promise<[BigNumber]>; + + value2(overrides?: CallOverrides): Promise<[BigNumber]>; + }; + + getValue1(overrides?: CallOverrides): Promise; + + getValue2(overrides?: CallOverrides): Promise; + + value1(overrides?: CallOverrides): Promise; + + value2(overrides?: CallOverrides): Promise; + + callStatic: { + getValue1(overrides?: CallOverrides): Promise; + + getValue2(overrides?: CallOverrides): Promise; + + value1(overrides?: CallOverrides): Promise; + + value2(overrides?: CallOverrides): Promise; + }; + + filters: {}; + + estimateGas: { + getValue1(overrides?: CallOverrides): Promise; + + getValue2(overrides?: CallOverrides): Promise; + + value1(overrides?: CallOverrides): Promise; + + value2(overrides?: CallOverrides): Promise; + }; + + populateTransaction: { + getValue1(overrides?: CallOverrides): Promise; + + getValue2(overrides?: CallOverrides): Promise; + + value1(overrides?: CallOverrides): Promise; + + value2(overrides?: CallOverrides): Promise; + }; +} diff --git a/projects/deploy-proxy/typechain-types/common.ts b/projects/deploy-proxy/typechain-types/common.ts new file mode 100644 index 000000000..4c90b08bb --- /dev/null +++ b/projects/deploy-proxy/typechain-types/common.ts @@ -0,0 +1,46 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import type { Listener } from "@ethersproject/providers"; +import type { Event, EventFilter } from "ethers"; + +export interface TypedEvent< + TArgsArray extends Array = any, + TArgsObject = any +> extends Event { + args: TArgsArray & TArgsObject; +} + +export interface TypedEventFilter<_TEvent extends TypedEvent> + extends EventFilter {} + +export interface TypedListener { + (...listenerArg: [...__TypechainArgsArray, TEvent]): void; +} + +type __TypechainArgsArray = T extends TypedEvent ? U : never; + +export interface OnEvent { + ( + eventFilter: TypedEventFilter, + listener: TypedListener + ): TRes; + (eventName: string, listener: Listener): TRes; +} + +export type MinEthersFactory = { + deploy(...a: ARGS[]): Promise; +}; + +export type GetContractTypeFromFactory = F extends MinEthersFactory< + infer C, + any +> + ? C + : never; + +export type GetARGsTypeFromFactory = F extends MinEthersFactory + ? Parameters + : never; + +export type PromiseOrValue = T | Promise; diff --git a/projects/deploy-proxy/typechain-types/factories/ImmutableCreate2Factory__factory.ts b/projects/deploy-proxy/typechain-types/factories/ImmutableCreate2Factory__factory.ts new file mode 100644 index 000000000..033ad51db --- /dev/null +++ b/projects/deploy-proxy/typechain-types/factories/ImmutableCreate2Factory__factory.ts @@ -0,0 +1,155 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { Signer, utils, Contract, ContractFactory, Overrides } from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../common"; +import type { + ImmutableCreate2Factory, + ImmutableCreate2FactoryInterface, +} from "../ImmutableCreate2Factory"; + +const _abi = [ + { + constant: true, + inputs: [ + { + name: "deploymentAddress", + type: "address", + }, + ], + name: "hasBeenDeployed", + outputs: [ + { + name: "", + type: "bool", + }, + ], + payable: false, + stateMutability: "view", + type: "function", + }, + { + constant: false, + inputs: [ + { + name: "salt", + type: "bytes32", + }, + { + name: "initializationCode", + type: "bytes", + }, + ], + name: "safeCreate2", + outputs: [ + { + name: "deploymentAddress", + type: "address", + }, + ], + payable: true, + stateMutability: "payable", + type: "function", + }, + { + constant: true, + inputs: [ + { + name: "salt", + type: "bytes32", + }, + { + name: "initCode", + type: "bytes", + }, + ], + name: "findCreate2Address", + outputs: [ + { + name: "deploymentAddress", + type: "address", + }, + ], + payable: false, + stateMutability: "view", + type: "function", + }, + { + constant: true, + inputs: [ + { + name: "salt", + type: "bytes32", + }, + { + name: "initCodeHash", + type: "bytes32", + }, + ], + name: "findCreate2AddressViaHash", + outputs: [ + { + name: "deploymentAddress", + type: "address", + }, + ], + payable: false, + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032"; + +type ImmutableCreate2FactoryConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: ImmutableCreate2FactoryConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class ImmutableCreate2Factory__factory extends ContractFactory { + constructor(...args: ImmutableCreate2FactoryConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy(overrides || {}) as Promise; + } + override getDeployTransaction( + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(overrides || {}); + } + override attach(address: string): ImmutableCreate2Factory { + return super.attach(address) as ImmutableCreate2Factory; + } + override connect(signer: Signer): ImmutableCreate2Factory__factory { + return super.connect(signer) as ImmutableCreate2Factory__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): ImmutableCreate2FactoryInterface { + return new utils.Interface(_abi) as ImmutableCreate2FactoryInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): ImmutableCreate2Factory { + return new Contract( + address, + _abi, + signerOrProvider + ) as ImmutableCreate2Factory; + } +} diff --git a/projects/deploy-proxy/typechain-types/factories/TestDeployContract__factory.ts b/projects/deploy-proxy/typechain-types/factories/TestDeployContract__factory.ts new file mode 100644 index 000000000..b8df9ea3d --- /dev/null +++ b/projects/deploy-proxy/typechain-types/factories/TestDeployContract__factory.ts @@ -0,0 +1,146 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +import { + Signer, + utils, + Contract, + ContractFactory, + BigNumberish, + Overrides, +} from "ethers"; +import type { Provider, TransactionRequest } from "@ethersproject/providers"; +import type { PromiseOrValue } from "../common"; +import type { + TestDeployContract, + TestDeployContractInterface, +} from "../TestDeployContract"; + +const _abi = [ + { + inputs: [ + { + internalType: "uint256", + name: "_value1", + type: "uint256", + }, + { + internalType: "uint256", + name: "_value2", + type: "uint256", + }, + ], + stateMutability: "nonpayable", + type: "constructor", + }, + { + inputs: [], + name: "getValue1", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "getValue2", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "value1", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, + { + inputs: [], + name: "value2", + outputs: [ + { + internalType: "uint256", + name: "", + type: "uint256", + }, + ], + stateMutability: "view", + type: "function", + }, +] as const; + +const _bytecode = + "0x608060405234801561001057600080fd5b506040516101163803806101168339818101604052604081101561003357600080fd5b50805160209091015160009190915560015560c3806100536000396000f3fe6080604052348015600f57600080fd5b506004361060465760003560e01c80633033413b14604b5780635d33a27f14606357806360d586f8146069578063c515205d14606f575b600080fd5b60516075565b60408051918252519081900360200190f35b6051607b565b60516081565b60516087565b60005481565b60015481565b60005490565b6001549056fea264697066735822122084259bdfca1e2a6f343107902e211a3844e8d43d88318f7344ca4c31ba6286c464736f6c63430007060033"; + +type TestDeployContractConstructorParams = + | [signer?: Signer] + | ConstructorParameters; + +const isSuperArgs = ( + xs: TestDeployContractConstructorParams +): xs is ConstructorParameters => xs.length > 1; + +export class TestDeployContract__factory extends ContractFactory { + constructor(...args: TestDeployContractConstructorParams) { + if (isSuperArgs(args)) { + super(...args); + } else { + super(_abi, _bytecode, args[0]); + } + } + + override deploy( + _value1: PromiseOrValue, + _value2: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise { + return super.deploy( + _value1, + _value2, + overrides || {} + ) as Promise; + } + override getDeployTransaction( + _value1: PromiseOrValue, + _value2: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): TransactionRequest { + return super.getDeployTransaction(_value1, _value2, overrides || {}); + } + override attach(address: string): TestDeployContract { + return super.attach(address) as TestDeployContract; + } + override connect(signer: Signer): TestDeployContract__factory { + return super.connect(signer) as TestDeployContract__factory; + } + + static readonly bytecode = _bytecode; + static readonly abi = _abi; + static createInterface(): TestDeployContractInterface { + return new utils.Interface(_abi) as TestDeployContractInterface; + } + static connect( + address: string, + signerOrProvider: Signer | Provider + ): TestDeployContract { + return new Contract(address, _abi, signerOrProvider) as TestDeployContract; + } +} diff --git a/projects/deploy-proxy/typechain-types/factories/index.ts b/projects/deploy-proxy/typechain-types/factories/index.ts new file mode 100644 index 000000000..7c9b77797 --- /dev/null +++ b/projects/deploy-proxy/typechain-types/factories/index.ts @@ -0,0 +1,5 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export { ImmutableCreate2Factory__factory } from "./ImmutableCreate2Factory__factory"; +export { TestDeployContract__factory } from "./TestDeployContract__factory"; diff --git a/projects/deploy-proxy/typechain-types/hardhat.d.ts b/projects/deploy-proxy/typechain-types/hardhat.d.ts new file mode 100644 index 000000000..200b8eaf7 --- /dev/null +++ b/projects/deploy-proxy/typechain-types/hardhat.d.ts @@ -0,0 +1,51 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ + +import { ethers } from "ethers"; +import { + FactoryOptions, + HardhatEthersHelpers as HardhatEthersHelpersBase, +} from "@nomiclabs/hardhat-ethers/types"; + +import * as Contracts from "."; + +declare module "hardhat/types/runtime" { + interface HardhatEthersHelpers extends HardhatEthersHelpersBase { + getContractFactory( + name: "ImmutableCreate2Factory", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + name: "TestDeployContract", + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + + getContractAt( + name: "ImmutableCreate2Factory", + address: string, + signer?: ethers.Signer + ): Promise; + getContractAt( + name: "TestDeployContract", + address: string, + signer?: ethers.Signer + ): Promise; + + // default types + getContractFactory( + name: string, + signerOrOptions?: ethers.Signer | FactoryOptions + ): Promise; + getContractFactory( + abi: any[], + bytecode: ethers.utils.BytesLike, + signer?: ethers.Signer + ): Promise; + getContractAt( + nameOrAbi: string | any[], + address: string, + signer?: ethers.Signer + ): Promise; + } +} diff --git a/projects/deploy-proxy/typechain-types/index.ts b/projects/deploy-proxy/typechain-types/index.ts new file mode 100644 index 000000000..33cbcef06 --- /dev/null +++ b/projects/deploy-proxy/typechain-types/index.ts @@ -0,0 +1,8 @@ +/* Autogenerated file. Do not edit manually. */ +/* tslint:disable */ +/* eslint-disable */ +export type { ImmutableCreate2Factory } from "./ImmutableCreate2Factory"; +export type { TestDeployContract } from "./TestDeployContract"; +export * as factories from "./factories"; +export { ImmutableCreate2Factory__factory } from "./factories/ImmutableCreate2Factory__factory"; +export { TestDeployContract__factory } from "./factories/TestDeployContract__factory"; diff --git a/projects/deploy-proxy/zk.hardhat.config.ts b/projects/deploy-proxy/zk.hardhat.config.ts new file mode 100644 index 000000000..19e5008a8 --- /dev/null +++ b/projects/deploy-proxy/zk.hardhat.config.ts @@ -0,0 +1,101 @@ +import "@matterlabs/hardhat-zksync-solc"; +import "@matterlabs/hardhat-zksync-deploy"; +// import "@matterlabs/hardhat-zksync-upgradable"; +import "@nomiclabs/hardhat-truffle5"; +import "@matterlabs/hardhat-zksync-toolbox"; +import "@matterlabs/hardhat-zksync-verify"; +import "@matterlabs/hardhat-zksync-ethers"; +import "zksync-ethers"; + +// upgradable plugin + +import type { + HttpNetworkUserConfig, HardhatUserConfig +} from "hardhat/types"; +import * as dotenv from "dotenv"; +import * as os from "os"; +import * as path from "path"; +import fs from "fs"; +import "./tasks"; + +function getConfigPath() { + const configPath = process.env["NETWORK_CONFIG_PATH"]; + if (configPath) { + return configPath; + } else { + return path.join(os.homedir(), ".ethereum"); + } +} + +function createNetwork(name: string): HttpNetworkUserConfig { + const configPath = path.join(getConfigPath(), name + ".json"); + if (fs.existsSync(configPath)) { + var json = require(configPath); + if (json.verify && json.verify.apiUrl && json.verify.apiUrl.endsWith("/api")) { + json.verify.apiUrl = json.verify.apiUrl.slice(0, -4); + } + return { + from: json.address, + gasPrice: "auto", + chainId: parseInt(json.network_id), + url: json.url, + accounts: [json.key], + gas: "auto", + saveDeployments: true, + verify: json.verify + ? { + etherscan: { + apiKey: "4BX5JGM9IBFRHSDBMRCS4R66TX123T9E22", + apiUrl: json.verify.apiUrl, + }, + } + : null, + zksync: json.zksync === true, + } as HttpNetworkUserConfig; + } else { + // File doesn't exist in path + return { + from: "0x0000000000000000000000000000000000000000", + gas: 0, + chainId: 0, + url: "", + accounts: [], + gasPrice: 0, + }; + } + } + +const config: HardhatUserConfig = { + zksolc: { + version: "1.3.22", + settings: { + isSystem: false, // optional. Enables Yul instructions available only for zkSync system contracts and libraries + forceEvmla: false, // optional. Falls back to EVM legacy assembly if there is a bug with Yul + optimizer: { + enabled: true, // optional. True by default + mode: 'z' // optional. 3 by default, z to optimize bytecode size + }, + } + }, + defaultNetwork: "zksync_sepolia", + networks: { + sepolia: { + zksync: false, + url: "http://localhost:8545", + }, + zksync_sepolia: { + zksync: true, + ethNetwork: "sepolia", + ...createNetwork("zksync_sepolia"), + verifyURL: 'https://explorer.sepolia.era.zksync.dev/contract_verification' + }, + }, + solidity: { + version: "0.7.6", + }, + etherscan: { + apiKey: "P78HUI9K9SAM5QKD6ABU91G3CPDS98MZW2" + } +}; + +export default config; diff --git a/projects/deploy/CHANGELOG.md b/projects/deploy/CHANGELOG.md index 3087852c8..8a24588b9 100644 --- a/projects/deploy/CHANGELOG.md +++ b/projects/deploy/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Bug Fixes + +- add missing import ([ec5a4ea](https://github.com/rariblecom/protocol-contracts/commit/ec5a4ea5a59c98a65aad20a2b382d8eb8ec50771)) + +### Features + +- add build deps ([822c123](https://github.com/rariblecom/protocol-contracts/commit/822c123199ac04598b6f8ab995ee8e8a66828015)) +- PT-4662 get rid of nothing to fill tests ([4059dcb](https://github.com/rariblecom/protocol-contracts/commit/4059dcb20c100e159643e40929392b05f90f7038)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rariblecom/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/deploy diff --git a/projects/deploy/contracts/TokensImport.sol b/projects/deploy/contracts/TokensImport.sol index c58f7cf1c..44000df3c 100644 --- a/projects/deploy/contracts/TokensImport.sol +++ b/projects/deploy/contracts/TokensImport.sol @@ -10,6 +10,7 @@ import {ERC721RaribleFactoryC2} from "@rarible/tokens/contracts/create-2/ERC721R //tokens 1155 import {ERC1155Rarible} from "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol"; import {ERC1155RaribleFactoryC2} from "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol"; +import {ERC1155RaribleFactoryC2OwnedManaged} from "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2OwnedManaged.sol"; //meta tokens import {ERC721RaribleMeta} from "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol"; diff --git a/projects/deploy/package.json b/projects/deploy/package.json index 44e067f4f..592c6ae95 100644 --- a/projects/deploy/package.json +++ b/projects/deploy/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/deploy", - "version": "0.8.4-beta.3", + "version": "0.8.5", "description": "package with all migrations to deploy other packages", "access": "public", "private": false, @@ -20,12 +20,12 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/auction": "^0.8.4-beta.3", - "@rarible/exchange-v2": "^0.8.4-beta.3", - "@rarible/royalties-registry": "^0.8.4-beta.3", - "@rarible/test": "^0.8.4-beta.3", - "@rarible/tokens": "^0.8.4-beta.3", - "@rarible/transfer-proxy": "^0.8.4-beta.3", + "@rarible/auction": "^0.8.5", + "@rarible/exchange-v2": "^0.8.5", + "@rarible/royalties-registry": "^0.8.5", + "@rarible/test": "^0.8.5", + "@rarible/tokens": "^0.8.5", + "@rarible/transfer-proxy": "^0.8.5", "@typechain/truffle-v5": "^8.0.6", "ethers": "5.7.2" }, diff --git a/projects/exchange-v2/CHANGELOG.md b/projects/exchange-v2/CHANGELOG.md index 7b1f104b5..d64844eaa 100644 --- a/projects/exchange-v2/CHANGELOG.md +++ b/projects/exchange-v2/CHANGELOG.md @@ -3,6 +3,20 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Bug Fixes + +- support orders with zero price ([162238d](https://github.com/rarible/protocol-contracts/commit/162238de3f6df5cfb7760dfce6dd245b85360eb3)) + +### Features + +- add deploy support for factory ([f9a1160](https://github.com/rarible/protocol-contracts/commit/f9a11605766a943f56d004c07d6a4c32b1d26cd1)) +- add lisk deploy ([6c5f6ba](https://github.com/rarible/protocol-contracts/commit/6c5f6ba32a56664ee5b50dd26de3bbbb98924f36)) +- add tests for nothing to feel, one order free the other isn't ([7b51920](https://github.com/rarible/protocol-contracts/commit/7b519201dcb9c5b3dc5e4a837698ceed3060cd5e)) +- PT-4662 get rid of nothing to fill tests ([4059dcb](https://github.com/rarible/protocol-contracts/commit/4059dcb20c100e159643e40929392b05f90f7038)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.4-beta.3](https://github.com/rarible/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/exchange-v2 diff --git a/projects/exchange-v2/contracts/AssetMatcher.sol b/projects/exchange-v2/contracts/AssetMatcher.sol index af8e3606e..d1646dc3d 100644 --- a/projects/exchange-v2/contracts/AssetMatcher.sol +++ b/projects/exchange-v2/contracts/AssetMatcher.sol @@ -19,6 +19,11 @@ abstract contract AssetMatcher is Initializable, OwnableUpgradeable { emit MatcherChange(assetType, matcher); } + function _setAssetMatcher(bytes4 assetType, address matcher) internal { + matchers[assetType] = matcher; + emit MatcherChange(assetType, matcher); + } + function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) { LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType); if (result.assetClass == 0) { diff --git a/projects/exchange-v2/contracts/ExchangeMetaV2.sol b/projects/exchange-v2/contracts/ExchangeMetaV2.sol index 97751d8a3..613ae1779 100644 --- a/projects/exchange-v2/contracts/ExchangeMetaV2.sol +++ b/projects/exchange-v2/contracts/ExchangeMetaV2.sol @@ -23,6 +23,31 @@ contract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTra __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); } + function __ExchangeV2_init_proxy( + address _transferProxy, + address _erc20TransferProxy, + uint newProtocolFee, + address newDefaultFeeReceiver, + IRoyaltiesProvider newRoyaltiesProvider, + address _initialOwner, + bytes4[] memory assetTypes, + address[] memory proxies, + bytes4 assetMatcherType, + address assetMatcher + ) external initializer { + __Context_init_unchained(); + __Ownable_init_unchained(); + __OrderValidator_init_unchained(); + __MetaTransaction_init_unchained("ExchangeMetaV2", "1"); + __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy); + __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); + for (uint i = 0; i < assetTypes.length; i++) { + _setTransferProxy(assetTypes[i], proxies[i]); + } + _setAssetMatcher(assetMatcherType, assetMatcher); + transferOwnership(_initialOwner); + } + function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) { return super._msgSender(); } diff --git a/projects/exchange-v2/contracts/ExchangeV2.sol b/projects/exchange-v2/contracts/ExchangeV2.sol index 51a23c1d0..fdcfdd868 100644 --- a/projects/exchange-v2/contracts/ExchangeV2.sol +++ b/projects/exchange-v2/contracts/ExchangeV2.sol @@ -21,4 +21,27 @@ contract ExchangeV2 is ExchangeV2Core, RaribleTransferManager { __OrderValidator_init_unchained(); } + function __ExchangeV2_init_proxy( + address _transferProxy, + address _erc20TransferProxy, + uint newProtocolFee, + address newDefaultFeeReceiver, + IRoyaltiesProvider newRoyaltiesProvider, + address _initialOwner, + bytes4[] memory assetTypes, + address[] memory proxies, + bytes4 assetMatcherType, + address assetMatcher + ) external initializer { + __Context_init_unchained(); + __Ownable_init_unchained(); + __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy); + __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); + __OrderValidator_init_unchained(); + for (uint i = 0; i < assetTypes.length; i++) { + _setTransferProxy(assetTypes[i], proxies[i]); + } + _setAssetMatcher(assetMatcherType, assetMatcher); + transferOwnership(_initialOwner); + } } diff --git a/projects/exchange-v2/package.json b/projects/exchange-v2/package.json index 0074e40bf..8542c9cdf 100644 --- a/projects/exchange-v2/package.json +++ b/projects/exchange-v2/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/exchange-v2", - "version": "0.8.4-beta.3", + "version": "0.8.5", "main": "truffle.js", "directories": { "test": "test" @@ -16,14 +16,14 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-interfaces": "^0.8.4-beta.3", - "@rarible/lib-asset": "^0.8.4-beta.3", - "@rarible/lib-part": "^0.8.4-beta.3", - "@rarible/lib-signature": "^0.8.4-beta.3", - "@rarible/meta-tx": "^0.8.4-beta.3", - "@rarible/royalties": "^0.8.4-beta.3", - "@rarible/royalties-upgradeable": "^0.8.4-beta.3", - "@rarible/transfer-manager": "^0.8.4-beta.3", + "@rarible/exchange-interfaces": "^0.8.5", + "@rarible/lib-asset": "^0.8.5", + "@rarible/lib-part": "^0.8.5", + "@rarible/lib-signature": "^0.8.5", + "@rarible/meta-tx": "^0.8.5", + "@rarible/royalties": "^0.8.5", + "@rarible/royalties-upgradeable": "^0.8.5", + "@rarible/transfer-manager": "^0.8.5", "eth-sig-util": "^3.0.1", "ethers": "5.7.2", "truffle-plugin-verify": "^0.6.5" diff --git a/projects/exchange-wrapper/CHANGELOG.md b/projects/exchange-wrapper/CHANGELOG.md index cc458c1f3..042b492b0 100644 --- a/projects/exchange-wrapper/CHANGELOG.md +++ b/projects/exchange-wrapper/CHANGELOG.md @@ -3,6 +3,19 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Bug Fixes + +- add missing import ([ec5a4ea](https://github.com/rarible/protocol-contracts/commit/ec5a4ea5a59c98a65aad20a2b382d8eb8ec50771)) + +### Features + +- add build deps ([822c123](https://github.com/rarible/protocol-contracts/commit/822c123199ac04598b6f8ab995ee8e8a66828015)) +- add new version for wrapper ([8d38eac](https://github.com/rarible/protocol-contracts/commit/8d38eacdbcd433ad9d6df32315b3aef6be9984f7)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) +- rename ([a2c6a83](https://github.com/rarible/protocol-contracts/commit/a2c6a83b94a89fc9aaddfa1e754cbf5c1280b8c7)) + ## [0.8.4-beta.3](https://github.com/rarible/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/exchange-wrapper diff --git a/projects/exchange-wrapper/contracts/RaribleExchangeWrapper.sol b/projects/exchange-wrapper/contracts/RaribleExchangeWrapper.sol index d6f8b1d75..ff5699e8a 100644 --- a/projects/exchange-wrapper/contracts/RaribleExchangeWrapper.sol +++ b/projects/exchange-wrapper/contracts/RaribleExchangeWrapper.sol @@ -114,7 +114,8 @@ contract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausa //address _seaPort_1_5, 9 //address _seaPort_1_6, 10 address _weth, - address[] memory transferProxies + address[] memory transferProxies, + address initialOwner ) { wyvernExchange = marketplaces[0]; exchangeV2 = marketplaces[1]; @@ -135,6 +136,8 @@ contract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausa IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX); } } + + transferOwnership(initialOwner); } /** diff --git a/projects/exchange-wrapper/package.json b/projects/exchange-wrapper/package.json index f2e5de72c..f2edc9f18 100644 --- a/projects/exchange-wrapper/package.json +++ b/projects/exchange-wrapper/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/exchange-wrapper", - "version": "0.8.4-beta.3", + "version": "0.8.5", "main": "truffle.js", "directories": { "test": "test" @@ -17,11 +17,11 @@ "dependencies": { "@openzeppelin/contracts": "3.4.0", "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-v2": "^0.8.4-beta.3", - "@rarible/lib-bp": "^0.8.4-beta.3", - "@rarible/lib-part": "^0.8.4-beta.3", - "@rarible/royalties-registry": "^0.8.4-beta.3", - "@rarible/transfer-manager": "^0.8.4-beta.3", + "@rarible/exchange-v2": "^0.8.5", + "@rarible/lib-bp": "^0.8.5", + "@rarible/lib-part": "^0.8.5", + "@rarible/royalties-registry": "^0.8.5", + "@rarible/transfer-manager": "^0.8.5", "eth-sig-util": "^3.0.1", "truffle-plugin-verify": "^0.6.5" }, diff --git a/projects/gas-usage-tests/CHANGELOG.md b/projects/gas-usage-tests/CHANGELOG.md index a0616b16a..103d2bf91 100644 --- a/projects/gas-usage-tests/CHANGELOG.md +++ b/projects/gas-usage-tests/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Features + +- add build deps ([822c123](https://github.com/rarible/protocol-contracts/commit/822c123199ac04598b6f8ab995ee8e8a66828015)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.4-beta.3](https://github.com/rarible/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/gas-usage-tests diff --git a/projects/gas-usage-tests/package.json b/projects/gas-usage-tests/package.json index 165d2809e..cd1829294 100644 --- a/projects/gas-usage-tests/package.json +++ b/projects/gas-usage-tests/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/gas-usage-tests", - "version": "0.8.4-beta.3", + "version": "0.8.5", "main": "truffle.js", "directories": { "test": "test" @@ -11,10 +11,10 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-v2": "^0.8.4-beta.3", - "@rarible/royalties-registry": "^0.8.4-beta.3", - "@rarible/tokens": "^0.8.4-beta.3", - "@rarible/transfer-proxy": "^0.8.4-beta.3", + "@rarible/exchange-v2": "^0.8.5", + "@rarible/royalties-registry": "^0.8.5", + "@rarible/tokens": "^0.8.5", + "@rarible/transfer-proxy": "^0.8.5", "ethers": "5.7.2", "truffle-plugin-verify": "^0.6.5" }, diff --git a/projects/hardhat-deploy/CHANGELOG.md b/projects/hardhat-deploy/CHANGELOG.md index 75bccfb03..c82474b69 100644 --- a/projects/hardhat-deploy/CHANGELOG.md +++ b/projects/hardhat-deploy/CHANGELOG.md @@ -3,6 +3,63 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Bug Fixes + +- add parameters ([88f1d9c](https://github.com/rariblecom/protocol-contracts/commit/88f1d9c3a77fd61699b05d6927faad7b901733fc)) +- support orders with zero price ([162238d](https://github.com/rariblecom/protocol-contracts/commit/162238de3f6df5cfb7760dfce6dd245b85360eb3)) + +### Features + +- add camp_sepolia ([32c30eb](https://github.com/rariblecom/protocol-contracts/commit/32c30eba633936bf7a7137c4a53f41dc6aee4bd3)) +- add celo alfajores ([#271](https://github.com/rariblecom/protocol-contracts/issues/271)) ([10a795e](https://github.com/rariblecom/protocol-contracts/commit/10a795e80039677193d5eeccfa14f64e0bcf0448)) +- add config for camp and sei ([983664b](https://github.com/rariblecom/protocol-contracts/commit/983664bc0eb0a434b166541ec5eb19044e4189e1)) +- add config for sei and camp ([9815c1a](https://github.com/rariblecom/protocol-contracts/commit/9815c1aa90543667549d9ed4ba183e1fc2be4e14)) +- add configs for palm, match ([cfeee8e](https://github.com/rariblecom/protocol-contracts/commit/cfeee8e12fdd06664fcb021a5f3efa44708c6f92)) +- add deploy operator role for proxy ([5e28f3d](https://github.com/rariblecom/protocol-contracts/commit/5e28f3d9532ed6823302a0cd1a1fb24e0bb12544)) +- add deploy sepolia via factory ([bfa0b5c](https://github.com/rariblecom/protocol-contracts/commit/bfa0b5c5b8ca1259edb1ba4cbe8f5e497e26feca)) +- add deploy support for factory ([f9a1160](https://github.com/rariblecom/protocol-contracts/commit/f9a11605766a943f56d004c07d6a4c32b1d26cd1)) +- add docs lisk, sepolia and camp (testnets) ([135b871](https://github.com/rariblecom/protocol-contracts/commit/135b8710b4598eb84abc86c5ab6290caab2b549c)) +- add example .env ([a6d84c3](https://github.com/rariblecom/protocol-contracts/commit/a6d84c31397c7b518031c353e3306070dc8d5e5a)) +- add lisk and sepolia ([8c1e7e0](https://github.com/rariblecom/protocol-contracts/commit/8c1e7e0da60710d0a369cc9bff214e2b092c4720)) +- add lisk and sepolia networks ([4cacb4b](https://github.com/rariblecom/protocol-contracts/commit/4cacb4b10e58bff5f5028786792f2229e452a466)) +- add lisk deploy ([6c5f6ba](https://github.com/rariblecom/protocol-contracts/commit/6c5f6ba32a56664ee5b50dd26de3bbbb98924f36)) +- add lisk sepolia ([bf35501](https://github.com/rariblecom/protocol-contracts/commit/bf3550122d60d66912f411b6b180bb667c86676d)) +- add loading contracts ([d432688](https://github.com/rariblecom/protocol-contracts/commit/d432688fa078689c5e1bf8659d6b7817d3932938)) +- add migration for SetProtocolFeeAction ([f9c4aca](https://github.com/rariblecom/protocol-contracts/commit/f9c4aca5bd01cff077f8a15a4467fa0e3c88ca05)) +- add new ([a75d810](https://github.com/rariblecom/protocol-contracts/commit/a75d810e4d244a37c53eeee3b3e0b8b9b5965b91)) +- add oasis testnet, xai testnet. PT-4570 deploy contracts to oasis testnet ([ed0e2ce](https://github.com/rariblecom/protocol-contracts/commit/ed0e2ced1269ce67e29c4795e08193324628aca4)) +- add ownership ([098e6ea](https://github.com/rariblecom/protocol-contracts/commit/098e6ea957640fc7aa1aa51df92c7e121d12e589)) +- add ownership tests ([01971d0](https://github.com/rariblecom/protocol-contracts/commit/01971d07b251975aaf8c94a8a67ef376f408d72b)) +- add proxy deploy support ([40270b0](https://github.com/rariblecom/protocol-contracts/commit/40270b07cdb2e061a3a349535f7bb9717e686eb7)) +- add reading owner from env ([d1db0fa](https://github.com/rariblecom/protocol-contracts/commit/d1db0fae222672830ad7d27f4d24df4597c30dfb)) +- add sei deploy ([862f6a2](https://github.com/rariblecom/protocol-contracts/commit/862f6a2907bf6c518880b178cb8b0a034ac107ba)) +- add sepolia deploy via create2 ([3dfc3ce](https://github.com/rariblecom/protocol-contracts/commit/3dfc3ce449b31fccb545bcda4606165c039b5b36)) +- add tests for nothing to feel, one order free the other isn't ([7b51920](https://github.com/rariblecom/protocol-contracts/commit/7b519201dcb9c5b3dc5e4a837698ceed3060cd5e)) +- change token factories back, optomise ERC1155 size ([8e25ae2](https://github.com/rariblecom/protocol-contracts/commit/8e25ae2ae5c03166ef3524935c827f168f6d0445)) +- deploy contracts on palm_testnet ([18fccde](https://github.com/rariblecom/protocol-contracts/commit/18fccded3260b1aebc568ebe4f8b9b9883fd47da)) +- fix getNetworkApiUrl() and getNetworkExplorerUrl() ([50f884b](https://github.com/rariblecom/protocol-contracts/commit/50f884b1d2e25f69d3d4c4dfa96a343e14ade288)) +- fix hardhat-migrations, change createToken() and getAddress() in token factories ([8930c47](https://github.com/rariblecom/protocol-contracts/commit/8930c47eec9da0b3bcbe5c6a467cae3e803085e2)) +- PT-4321 deploy contracts on oasys testnet, prepare config for oasys mainnet ([dfd934b](https://github.com/rariblecom/protocol-contracts/commit/dfd934bfb2c28915fd491c04dc5d10a36418310f)) +- PT-4543 deploy contracts on fief_playground_testnet ([f71e0dd](https://github.com/rariblecom/protocol-contracts/commit/f71e0dd84abc948290ca9c5dfac12580917b4f10)) +- PT-4639 fix network config for frame ([514629b](https://github.com/rariblecom/protocol-contracts/commit/514629bd6e6604092cc11077cff02ca885a5142d)) +- PT-4662 get rid of nothing to fill tests ([4059dcb](https://github.com/rariblecom/protocol-contracts/commit/4059dcb20c100e159643e40929392b05f90f7038)) +- PT-4671 deploy contracts on mantle sepolia ([d5033ef](https://github.com/rariblecom/protocol-contracts/commit/d5033efaf19222c60f900914300ee93be1069d45)) +- PT-4705 deploy contract on kroma_sepolia ([36ac439](https://github.com/rariblecom/protocol-contracts/commit/36ac439fef8f85b6e230b481c080bfff7ff5065b)) +- PT-4749 upgrade exchangeV2 with upgradeExecutor ([7e18442](https://github.com/rariblecom/protocol-contracts/commit/7e18442b90bae4ee8a18c797b9126dad2650f896)) +- PT-4844 deploy contract on match_testnet ([73aef7a](https://github.com/rariblecom/protocol-contracts/commit/73aef7a61c47804f8348b12c8f553c7b39a254b8)) +- PT-4914 deploy contract on zkLink testnet, prepare config for mainnet ([8796c0a](https://github.com/rariblecom/protocol-contracts/commit/8796c0a9ac266fdd97ff4bf0a752fbf4b607dd28)) +- PT-4962 deploy contracts on 5ire_testnet ([c752e6d](https://github.com/rariblecom/protocol-contracts/commit/c752e6d7b8a268006a84c1307e0ed70c88a6da3b)) +- PT-5051 deploy contracts on oasys_testnet_saakuru ([b558424](https://github.com/rariblecom/protocol-contracts/commit/b558424aea3de4125336e4c393cc7f76515555b9)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rariblecom/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) +- PT-5076 deploy contracts to astar_zkyoto_testnet ([de82643](https://github.com/rariblecom/protocol-contracts/commit/de826431eb30ea6e11d3a74e5c5b0f3a4aa43aa9)) +- PT-5095 deploy contracts on polygon_amoy_testnet ([e89dfd7](https://github.com/rariblecom/protocol-contracts/commit/e89dfd7386d45e0eb31c28024354dc9f66c6008d)) +- rename ([a2c6a83](https://github.com/rariblecom/protocol-contracts/commit/a2c6a83b94a89fc9aaddfa1e754cbf5c1280b8c7)) +- test networks lisk, camp and sei ([962c022](https://github.com/rariblecom/protocol-contracts/commit/962c0225649a9c7c501bf4b879abdec30be1b877)) +- tidy up network configs, support frame ([82a88fc](https://github.com/rariblecom/protocol-contracts/commit/82a88fcd81af7638c1234aafd233742d66ecbea1)) +- update wrapper on arbitrum testnet, base testnet, polygon testnet ([572add8](https://github.com/rariblecom/protocol-contracts/commit/572add81b96f0ea00224f1934411b824031d0b87)) + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/hardhat-deploy diff --git a/projects/hardhat-deploy/README.md b/projects/hardhat-deploy/README.md index 97f35a0bf..ef34ada39 100644 --- a/projects/hardhat-deploy/README.md +++ b/projects/hardhat-deploy/README.md @@ -16,3 +16,5 @@ to do integration tests of contracts to deploy: ```shell npx hardhat test ``` + +salt used DETERMENISTIC_DEPLOYMENT_SALT=0x1115 \ No newline at end of file diff --git a/projects/hardhat-deploy/deploy/001_deploy_RoyaltiesRegistry.ts b/projects/hardhat-deploy/deploy/001_deploy_RoyaltiesRegistry.ts index c42aaf1d1..a6768617d 100644 --- a/projects/hardhat-deploy/deploy/001_deploy_RoyaltiesRegistry.ts +++ b/projects/hardhat-deploy/deploy/001_deploy_RoyaltiesRegistry.ts @@ -1,5 +1,6 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; +import { getOwner } from './utils'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { @@ -7,7 +8,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { deploy } = hre.deployments; const { deployer } = await hre.getNamedAccounts(); - + const owner = await getOwner(hre); console.log("deploying contracts with the account:", deployer); await deploy('RoyaltiesRegistry', { @@ -15,16 +16,18 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { proxy: { execute: { init: { - methodName: "__RoyaltiesRegistry_init", - args: [], + methodName: "__RoyaltiesRegistry_init_proxy", + args: [owner], }, }, proxyContract: "OpenZeppelinTransparentProxy", }, log: true, autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, }); }; export default func; -func.tags = ['all', 'all-no-tokens', 'deploy-rr']; +func.tags = ['all', 'all-no-tokens', 'deploy-rr', "001"]; diff --git a/projects/hardhat-deploy/deploy/002_deploy_transferProxies.ts b/projects/hardhat-deploy/deploy/002_deploy_transferProxies.ts index 59016bdfb..919b73f7d 100644 --- a/projects/hardhat-deploy/deploy/002_deploy_transferProxies.ts +++ b/projects/hardhat-deploy/deploy/002_deploy_transferProxies.ts @@ -1,5 +1,8 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; +import { getOwner } from './utils'; +import { Ownable } from '../typechain-types'; +import { ethers } from 'ethers'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { //deploy and initialise 4 transfer proxies @@ -13,24 +16,31 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { }; +// TODO put back initialize async function deployAndInitProxy(hre: HardhatRuntimeEnvironment, contractName: string) { const { deploy } = hre.deployments; const { deployer } = await hre.getNamedAccounts(); - + const owner = await getOwner(hre); const transferProxyReceipt = await deploy(contractName, { from: deployer, log: true, autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, }); - const Proxy = await hre.ethers.getContractFactory(contractName); - const proxy = await Proxy.attach(transferProxyReceipt.address); - - const initTx = await proxy.__OperatorRole_init(); - await initTx.wait() - + const proxy = Proxy.attach(transferProxyReceipt.address); + const ownable = proxy as Ownable; + const currentOwner = await ownable.owner() + if(currentOwner == ethers.constants.AddressZero) { + const initTx = await proxy.__OperatorRole_init_proxy(deployer); + await initTx.wait() + } else if(currentOwner != owner && currentOwner != deployer) { + throw new Error("TransferProxy owner is not deployer or owner") + } + return proxy; } export default func; -func.tags = ['all', 'all-no-tokens', 'deploy-transfer-proxies']; +func.tags = ['all', 'all-no-tokens', 'deploy-transfer-proxies', "002"]; diff --git a/projects/hardhat-deploy/deploy/003_deploy_ExchangeV2_CollectionMatcher.ts b/projects/hardhat-deploy/deploy/003_deploy_ExchangeV2_CollectionMatcher.ts index f69528715..31bd6dabb 100644 --- a/projects/hardhat-deploy/deploy/003_deploy_ExchangeV2_CollectionMatcher.ts +++ b/projects/hardhat-deploy/deploy/003_deploy_ExchangeV2_CollectionMatcher.ts @@ -2,6 +2,7 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; import { ERC721_LAZY, ERC1155_LAZY, COLLECTION, getConfig } from '../utils/utils' +import { getOwner } from './utils'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { //deploy and initialise 4 transfer proxies @@ -28,46 +29,65 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { async function deployAndSetupExchange(hre: HardhatRuntimeEnvironment, contractName: string, transferProxy: any, erc20TransferProxy: any, erc721LazyMintTransferProxy: any, erc1155LazyMintTransferProxy: any) { const { deploy } = hre.deployments; const { deployer } = await hre.getNamedAccounts(); - + const owner = await getOwner(hre); const royaltiesRegistryAddress = (await hre.deployments.get("RoyaltiesRegistry")).address; + //deploy and setup collection matcher + const assetMatcherCollectionReceipt = await deploy("AssetMatcherCollection", { + from: deployer, + log: true, + autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, + }); + // deploy ExchangeV2 and initialise contract const exchangeV2Receipt = await deploy(contractName, { from: deployer, proxy: { execute: { init: { - methodName: "__ExchangeV2_init", - args: [transferProxy.address, erc20TransferProxy.address, 0, hre.ethers.constants.AddressZero, royaltiesRegistryAddress], + methodName: "__ExchangeV2_init_proxy", + args: [transferProxy.address, erc20TransferProxy.address, 0, hre.ethers.constants.AddressZero, royaltiesRegistryAddress, + owner, + [ERC721_LAZY, ERC1155_LAZY], + [erc721LazyMintTransferProxy.address, erc1155LazyMintTransferProxy.address], + COLLECTION, + assetMatcherCollectionReceipt.address] }, }, proxyContract: "OpenZeppelinTransparentProxy", }, log: true, autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, }); const ExchangeV2 = await hre.ethers.getContractFactory(contractName); const exchangeV2 = await ExchangeV2.attach(exchangeV2Receipt.address); //add exchangeV2 as operator to all 4 transfer proxies - await (await transferProxy.addOperator(exchangeV2.address)).wait() - await (await erc20TransferProxy.addOperator(exchangeV2.address)).wait() - await (await erc721LazyMintTransferProxy.addOperator(exchangeV2.address)).wait() - await (await erc1155LazyMintTransferProxy.addOperator(exchangeV2.address)).wait() + if(await transferProxy.owner() == deployer) { + await (await transferProxy.addOperator(exchangeV2.address)).wait() + await (await transferProxy.transferOwnership(owner)).wait() + } + + if(await erc20TransferProxy.owner() == deployer) { + await (await erc20TransferProxy.addOperator(exchangeV2.address)).wait() + await (await erc20TransferProxy.transferOwnership(owner)).wait() + } - //set 2 lazy transfer proxies in exchangeV2 contract (other 2 are set in initialiser) - await (await exchangeV2.setTransferProxy(ERC721_LAZY, erc721LazyMintTransferProxy.address)).wait() - await (await exchangeV2.setTransferProxy(ERC1155_LAZY, erc1155LazyMintTransferProxy.address)).wait() + if(await erc721LazyMintTransferProxy.owner() == deployer) { + await (await erc721LazyMintTransferProxy.addOperator(exchangeV2.address)).wait() + await (await erc721LazyMintTransferProxy.transferOwnership(owner)).wait() + } - //deploy and setup collection matcher - const assetMatcherCollectionReceipt = await deploy("AssetMatcherCollection", { - from: deployer, - log: true, - autoMine: true, - }); + if(await erc1155LazyMintTransferProxy.owner() == deployer) { + await (await erc1155LazyMintTransferProxy.addOperator(exchangeV2.address)).wait() + await (await erc1155LazyMintTransferProxy.transferOwnership(owner)).wait() + } - await (await exchangeV2.setAssetMatcher(COLLECTION, assetMatcherCollectionReceipt.address)).wait() } async function getTransferProxy(hre: HardhatRuntimeEnvironment, contractName: string) { @@ -76,4 +96,4 @@ async function getTransferProxy(hre: HardhatRuntimeEnvironment, contractName: st } export default func; -func.tags = ['all', 'all-no-tokens', 'deploy-exchange']; +func.tags = ['all', 'all-no-tokens', 'deploy-exchange', "003"]; diff --git a/projects/hardhat-deploy/deploy/004_deploy_erc721_Token_and_Factory.ts b/projects/hardhat-deploy/deploy/004_deploy_erc721_Token_and_Factory.ts index fe5ad2355..74c40ef71 100644 --- a/projects/hardhat-deploy/deploy/004_deploy_erc721_Token_and_Factory.ts +++ b/projects/hardhat-deploy/deploy/004_deploy_erc721_Token_and_Factory.ts @@ -2,6 +2,7 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; import { getConfig } from '../utils/utils' +import { getOwner } from './utils'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { deploy_meta, deploy_non_meta } = getConfig(hre.network.name); @@ -20,7 +21,8 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { async function deployERC721TokenAndFactory(hre: HardhatRuntimeEnvironment, contractName: string, beaconName: string) { const { deploy } = hre.deployments; const { deployer } = await hre.getNamedAccounts(); - + const owner = await getOwner(hre); + const transferProxyyAddress = (await hre.deployments.get("TransferProxy")).address; const erc721LazyMintTransferProxyAddress = (await hre.deployments.get("ERC721LazyMintTransferProxy")).address; @@ -30,32 +32,38 @@ async function deployERC721TokenAndFactory(hre: HardhatRuntimeEnvironment, contr proxy: { execute: { init: { - methodName: "__ERC721Rarible_init", - args: ["Rarible", "RARI", "ipfs:/", "", transferProxyyAddress, erc721LazyMintTransferProxyAddress], + methodName: "__ERC721Rarible_init_proxy", + args: ["Rarible", "RARI", "ipfs:/", "", transferProxyyAddress, erc721LazyMintTransferProxyAddress, owner], }, }, proxyContract: "OpenZeppelinTransparentProxy", }, log: true, autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, }); //deploy beacon const erc721BeaconReceipt = await deploy(beaconName, { from: deployer, - args: [erc721Receipt.implementation], + args: [erc721Receipt.implementation, owner], log: true, autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, }); //deploy factory const factory721Receipt = await deploy("ERC721RaribleFactoryC2", { from: deployer, - args: [erc721BeaconReceipt.address, transferProxyyAddress, erc721LazyMintTransferProxyAddress], + args: [erc721BeaconReceipt.address, transferProxyyAddress, erc721LazyMintTransferProxyAddress, owner], log: true, autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, }); } export default func; -func.tags = ['all', 'tokens', 'erc721']; +func.tags = ['all', 'tokens', 'erc721', "004"]; diff --git a/projects/hardhat-deploy/deploy/005_deploy_erc1155_Token_and_Factory.ts b/projects/hardhat-deploy/deploy/005_deploy_erc1155_Token_and_Factory.ts index 834bb4123..2030b891e 100644 --- a/projects/hardhat-deploy/deploy/005_deploy_erc1155_Token_and_Factory.ts +++ b/projects/hardhat-deploy/deploy/005_deploy_erc1155_Token_and_Factory.ts @@ -2,6 +2,7 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; import { getConfig } from '../utils/utils' +import { getOwner } from './utils'; const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { deploy_meta, deploy_non_meta } = getConfig(hre.network.name); @@ -20,7 +21,8 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { async function deployERC1155TokenAndFactory(hre: HardhatRuntimeEnvironment, contractName: string, beaconName: string) { const { deploy } = hre.deployments; const { deployer } = await hre.getNamedAccounts(); - + const owner = await getOwner(hre); + const transferProxyyAddress = (await hre.deployments.get("TransferProxy")).address; const erc1155LazyMintTransferProxyAddress = (await hre.deployments.get("ERC1155LazyMintTransferProxy")).address; @@ -30,33 +32,39 @@ async function deployERC1155TokenAndFactory(hre: HardhatRuntimeEnvironment, cont proxy: { execute: { init: { - methodName: "__ERC1155Rarible_init", - args: ["Rarible", "RARI", "ipfs:/", "", transferProxyyAddress, erc1155LazyMintTransferProxyAddress], + methodName: "__ERC1155Rarible_init_proxy", + args: ["Rarible", "RARI", "ipfs:/", "", transferProxyyAddress, erc1155LazyMintTransferProxyAddress, owner], }, }, proxyContract: "OpenZeppelinTransparentProxy", }, log: true, autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, }); //deploy beacon const erc1155BeaconReceipt = await deploy(beaconName, { from: deployer, - args: [erc1155Receipt.implementation], + args: [erc1155Receipt.implementation, owner], log: true, autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, }); //deploy factory const factory1155Receipt = await deploy("ERC1155RaribleFactoryC2", { from: deployer, - args: [erc1155BeaconReceipt.address, transferProxyyAddress, erc1155LazyMintTransferProxyAddress], + args: [erc1155BeaconReceipt.address, transferProxyyAddress, erc1155LazyMintTransferProxyAddress, owner], log: true, autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, }); } export default func; -func.tags = ['all', 'tokens', 'erc1155']; +func.tags = ['all', 'tokens', 'erc1155', "005"]; diff --git a/projects/hardhat-deploy/deploy/101_update_exchangeV2.ts b/projects/hardhat-deploy/deploy/101_update_exchangeV2.ts index da3d74928..2ad53e3ad 100644 --- a/projects/hardhat-deploy/deploy/101_update_exchangeV2.ts +++ b/projects/hardhat-deploy/deploy/101_update_exchangeV2.ts @@ -26,6 +26,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { }, log: true, autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, }); }; diff --git a/projects/hardhat-deploy/deploy/201_update_exchangeV2_by_upgradeExecutor.ts b/projects/hardhat-deploy/deploy/201_update_exchangeV2_by_upgradeExecutor.ts index 2f6a10d54..41337b361 100644 --- a/projects/hardhat-deploy/deploy/201_update_exchangeV2_by_upgradeExecutor.ts +++ b/projects/hardhat-deploy/deploy/201_update_exchangeV2_by_upgradeExecutor.ts @@ -45,6 +45,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { from: deployer, log: true, autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, }); const ProxyUpgradeAction = await hre.ethers.getContractFactory("ProxyUpgradeAction"); diff --git a/projects/hardhat-deploy/deploy/202_deploy_setProtocolFeeAction.ts b/projects/hardhat-deploy/deploy/202_deploy_setProtocolFeeAction.ts index bdd6e086a..925955307 100644 --- a/projects/hardhat-deploy/deploy/202_deploy_setProtocolFeeAction.ts +++ b/projects/hardhat-deploy/deploy/202_deploy_setProtocolFeeAction.ts @@ -27,7 +27,8 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { from: deployer, log: true, autoMine: true, - args: [exchangeV2Address] + args: [exchangeV2Address], + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, }); }; diff --git a/projects/hardhat-deploy/deploy/905_deploy_exchangeWrapper.ts b/projects/hardhat-deploy/deploy/905_deploy_exchangeWrapper.ts index b5c2e14e1..f7c23d816 100644 --- a/projects/hardhat-deploy/deploy/905_deploy_exchangeWrapper.ts +++ b/projects/hardhat-deploy/deploy/905_deploy_exchangeWrapper.ts @@ -2,6 +2,7 @@ import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeployFunction } from 'hardhat-deploy/types'; import { getConfig } from '../utils/utils' +import { getOwner } from './utils'; const zeroAddress = "0x0000000000000000000000000000000000000000" const mainnet = { @@ -172,6 +173,25 @@ const sepolia = { transferProxies: [], } +const sei_testnet = { + marketplaces: [ + zeroAddress, // wyvernExchange + "", //rarible exchangeV2 palceholder + zeroAddress, // seaPort_1_1 + zeroAddress, // x2y2 + zeroAddress, // looksRare + zeroAddress, // sudoSwap + zeroAddress, // seaport_1_4 + zeroAddress, // looksRareV2 + zeroAddress, // blur + zeroAddress, // seaport_1_5 + zeroAddress, // seaport_1_6 + ], + + weth: "0x63600a899ad94ae1bc638504fa56d8a6144df2fe", + transferProxies: [], +} + let settings: any = { "default": def, "mainnet": mainnet, @@ -182,8 +202,9 @@ let settings: any = { "staging": staging, "polygon_staging": polygon_staging, "polygon_mumbai": polygon_mumbai, - "polygon_mainnet": polygon_mainnet -}; + "polygon_mainnet": polygon_mainnet, + "sei_testnet": sei_testnet +} function getWrapperSettings(network: string) { if (settings[network] !== undefined) { @@ -197,7 +218,8 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { deploy_meta, deploy_non_meta } = getConfig(hre.network.name); const { deploy } = hre.deployments; const { deployer } = await hre.getNamedAccounts(); - + const owner = await getOwner(hre); + let exchangeV2; if (!!deploy_meta) { exchangeV2 = (await hre.deployments.get("ExchangeMetaV2")).address; @@ -221,9 +243,11 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { from: deployer, log: true, autoMine: true, - args: [settings.marketplaces, settings.weth, settings.transferProxies] + args: [settings.marketplaces, settings.weth, settings.transferProxies, owner], + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, }); }; export default func; -func.tags = ['all', 'all-zk', 'wrapper', 'all-no-tokens', 'all-zk-no-tokens']; +func.tags = ['all', 'all-zk', 'wrapper', 'all-no-tokens', 'all-zk-no-tokens', '905']; diff --git a/projects/hardhat-deploy/deploy/utils.ts b/projects/hardhat-deploy/deploy/utils.ts new file mode 100644 index 000000000..ef2ea8cea --- /dev/null +++ b/projects/hardhat-deploy/deploy/utils.ts @@ -0,0 +1,16 @@ +import { HardhatRuntimeEnvironment } from "hardhat/types"; + +export async function getOwner(hre: HardhatRuntimeEnvironment): Promise { + const { deployer } = await hre.getNamedAccounts(); + //if it's local tests + if (hre.network.name === "hardhat") { + return deployer; + } + // if there is an owner set in .env and it's not local tests + if(process.env.INITIAL_OWNER) { + return process.env.INITIAL_OWNER; + } + + //if owner is not set + return deployer; +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/.chainId b/projects/hardhat-deploy/deployments/camp_sepolia/.chainId new file mode 100644 index 000000000..c8246a637 --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/.chainId @@ -0,0 +1 @@ +90354 \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/AssetMatcherCollection.json b/projects/hardhat-deploy/deployments/camp_sepolia/AssetMatcherCollection.json similarity index 92% rename from projects/hardhat-deploy/deployments/polygon_mumbai/AssetMatcherCollection.json rename to projects/hardhat-deploy/deployments/camp_sepolia/AssetMatcherCollection.json index 2a24b736d..d890e4972 100644 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/AssetMatcherCollection.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/AssetMatcherCollection.json @@ -1,5 +1,5 @@ { - "address": "0x3f1f638fceEB68785e7985938B0F5CF69393C9e6", + "address": "0xc4F5FCD96e3b37A31f871F0968206F47294a4471", "abi": [ { "inputs": [ @@ -62,8 +62,25 @@ "type": "function" } ], + "transactionHash": "0x216e3c1813dab03b674fa361fd63e35391fa5f53f98f40674da259a52630056d", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "302853", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x4b11def1d358ccba795e22005dc6afd7db8e74f580bfe97d9a93fa99b5b9b35e", + "transactionHash": "0x216e3c1813dab03b674fa361fd63e35391fa5f53f98f40674da259a52630056d", + "logs": [], + "blockNumber": 2308739, + "cumulativeGasUsed": "349754", + "status": 1, + "byzantium": true + }, + "args": [], "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"leftAssetType\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"rightAssetType\",\"type\":\"tuple\"}],\"name\":\"matchAssets\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\":\"AssetMatcherCollection\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\n/*\\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\\n */\\ncontract AssetMatcherCollection is IAssetMatcher {\\n\\n bytes constant EMPTY = \\\"\\\";\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\\n if (\\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \\n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \\n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\\n ) {\\n (address leftToken) = abi.decode(leftAssetType.data, (address));\\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\\n if (leftToken == rightToken) {\\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\\n }\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n}\",\"keccak256\":\"0x115e3e94c7b3df6de5c8adf15c42bc737876212e37bd0d0ebe446494d57c94e9\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x608060405234801561001057600080fd5b50610403806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d3f7cb014610030575b600080fd5b61004361003e3660046102da565b610059565b604051610050919061033b565b60405180910390f35b610061610195565b81516001600160e01b0319166339d690a360e11b1480610092575081516001600160e01b03191663d8f960c160e01b145b806100ae575081516001600160e01b03191663025ceed960e61b145b806100c9575081516001600160e01b03191662737ea960e61b145b806100e5575081516001600160e01b031916630f9ae27560e21b145b1561016b5760008360200151806020019051810190610104919061028e565b90506000836020015180602001905181019061012091906102af565b509050806001600160a01b0316826001600160a01b031614156101685750506040805180820190915282516001600160e01b031916815260208084015190820152905061018f565b50505b50604080518082018252600080825282516020818101909452908152918101919091525b92915050565b60408051808201909152600081526060602082015290565b80516001600160a01b03811681146101c457600080fd5b919050565b6000604082840312156101da578081fd5b6040516040810167ffffffffffffffff82821081831117156101f857fe5b816040528293508435915063ffffffff60e01b8216821461021857600080fd5b908252602090848201358181111561022f57600080fd5b8501601f8101871361024057600080fd5b80358281111561024c57fe5b61025e601f8201601f191685016103a9565b9250808352878482840101111561027457600080fd5b808483018585013760009083018401525091015292915050565b60006020828403121561029f578081fd5b6102a8826101ad565b9392505050565b600080604083850312156102c1578081fd5b6102ca836101ad565b9150602083015190509250929050565b600080604083850312156102ec578182fd5b823567ffffffffffffffff80821115610303578384fd5b61030f868387016101c9565b93506020850135915080821115610324578283fd5b50610331858286016101c9565b9150509250929050565b6000602080835263ffffffff60e01b84511681840152808401516040808501528051806060860152835b8181101561038157828101840151868201608001528301610365565b818111156103925784608083880101525b50601f01601f191693909301608001949350505050565b60405181810167ffffffffffffffff811182821017156103c557fe5b60405291905056fea2646970667358221220fe8f50b49531504ff963dc9b719db80c3131b9d5b69661a49edd957769dee45764736f6c63430007060033", "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d3f7cb014610030575b600080fd5b61004361003e3660046102da565b610059565b604051610050919061033b565b60405180910390f35b610061610195565b81516001600160e01b0319166339d690a360e11b1480610092575081516001600160e01b03191663d8f960c160e01b145b806100ae575081516001600160e01b03191663025ceed960e61b145b806100c9575081516001600160e01b03191662737ea960e61b145b806100e5575081516001600160e01b031916630f9ae27560e21b145b1561016b5760008360200151806020019051810190610104919061028e565b90506000836020015180602001905181019061012091906102af565b509050806001600160a01b0316826001600160a01b031614156101685750506040805180820190915282516001600160e01b031916815260208084015190820152905061018f565b50505b50604080518082018252600080825282516020818101909452908152918101919091525b92915050565b60408051808201909152600081526060602082015290565b80516001600160a01b03811681146101c457600080fd5b919050565b6000604082840312156101da578081fd5b6040516040810167ffffffffffffffff82821081831117156101f857fe5b816040528293508435915063ffffffff60e01b8216821461021857600080fd5b908252602090848201358181111561022f57600080fd5b8501601f8101871361024057600080fd5b80358281111561024c57fe5b61025e601f8201601f191685016103a9565b9250808352878482840101111561027457600080fd5b808483018585013760009083018401525091015292915050565b60006020828403121561029f578081fd5b6102a8826101ad565b9392505050565b600080604083850312156102c1578081fd5b6102ca836101ad565b9150602083015190509250929050565b600080604083850312156102ec578182fd5b823567ffffffffffffffff80821115610303578384fd5b61030f868387016101c9565b93506020850135915080821115610324578283fd5b50610331858286016101c9565b9150509250929050565b6000602080835263ffffffff60e01b84511681840152808401516040808501528051806060860152835b8181101561038157828101840151868201608001528301610365565b818111156103925784608083880101525b50601f01601f191693909301608001949350505050565b60405181810167ffffffffffffffff811182821017156103c557fe5b60405291905056fea2646970667358221220fe8f50b49531504ff963dc9b719db80c3131b9d5b69661a49edd957769dee45764736f6c63430007060033", diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/DefaultProxyAdmin.json b/projects/hardhat-deploy/deployments/camp_sepolia/DefaultProxyAdmin.json new file mode 100644 index 000000000..25352bc97 --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/DefaultProxyAdmin.json @@ -0,0 +1,259 @@ +{ + "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0x23e5a9e8f3502029331a3c5ac857e67a52f80839c580a14b79a07befd38de535", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "677380", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000001000000000000020000000000000000000800000000000000000000000000000000500200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x46ed599086fa5ca3ab2b8560e1bb08c15cdcf1f5c89adac3370d198ee57a07f3", + "transactionHash": "0x23e5a9e8f3502029331a3c5ac857e67a52f80839c580a14b79a07befd38de535", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2308694, + "transactionHash": "0x23e5a9e8f3502029331a3c5ac857e67a52f80839c580a14b79a07befd38de535", + "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x46ed599086fa5ca3ab2b8560e1bb08c15cdcf1f5c89adac3370d198ee57a07f3" + } + ], + "blockNumber": 2308694, + "cumulativeGasUsed": "724281", + "status": 1, + "byzantium": true + }, + "args": [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155LazyMintTransferProxy.json new file mode 100644 index 000000000..94ddac9d7 --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155LazyMintTransferProxy.json @@ -0,0 +1,293 @@ +{ + "address": "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ERC1155LazyMintTransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "asset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x70b690122df6d4fb008b37efecd0bdb2e781d0036c0030bd6cfd8334bd498b5b", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "923250", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x67fc7f1fc0dfdb8927ed26382c794336bbfc99d39be0c4b9aecc6912a7a0f02c", + "transactionHash": "0x70b690122df6d4fb008b37efecd0bdb2e781d0036c0030bd6cfd8334bd498b5b", + "logs": [], + "blockNumber": 2308732, + "cumulativeGasUsed": "970151", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC1155LazyMintTransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":\"ERC1155LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n\\n function __ERC1155LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\\n }\\n}\\n\",\"keccak256\":\"0x5750ad43c269486bb6256eaf27ed2cf2c7ed3964aa0e55871c6b9bb0e96b3e3f\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610f13806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100db578063ac8a584a146100ee578063ccf4fad214610101578063e814f46d14610101578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b55780638da5cb5b146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ac2565b6101d9565b6100a06102cf565b6100c561037b565b6040516100d29190610c8b565b60405180910390f35b6100a06100e93660046109a8565b61038a565b6100a06100fc3660046109a8565b610410565b6100a061010f3660046109a8565b610493565b6100a06101223660046109a8565b61054f565b600054610100900460ff16806101405750610140610652565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc610663565b6101c4610703565b80156101d6576000805461ff00191690555b50565b606560006101e56107fc565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eb66028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061025c91906109c4565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b81526004016102969493929190610c9f565b600060405180830381600087803b1580156102b057600080fd5b505af11580156102c4573d6000803e3d6000fd5b505050505050505050565b6102d76107fc565b6001600160a01b03166102e861037b565b6001600160a01b031614610331576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b6103926107fc565b6001600160a01b03166103a361037b565b6001600160a01b0316146103ec576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104186107fc565b6001600160a01b031661042961037b565b6001600160a01b031614610472576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806104ac57506104ac610652565b806104ba575060005460ff16155b6104f55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610520576000805460ff1961ff0019909116610100171660011790555b610528610663565b610530610703565b6105398261054f565b801561054b576000805461ff00191690555b5050565b6105576107fc565b6001600160a01b031661056861037b565b6001600160a01b0316146105b1576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b0381166105f65760405162461bcd60e51b8152600401808060200182810382526026815260200180610e426026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061065d30610800565b15905090565b600054610100900460ff168061067c575061067c610652565b8061068a575060005460ff16155b6106c55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff168061071c575061071c610652565b8061072a575060005460ff16155b6107655760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610790576000805460ff1961ff0019909116610100171660011790555b600061079a6107fc565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061081d61081884610dda565b610d98565b905082815283838301111561083157600080fd5b61083f836020830184610dfc565b9392505050565b803561080581610e2c565b600082601f830112610861578081fd5b8151602061087161081883610dbc565b82815281810190858301855b858110156108bb578151880189603f820112610897578788fd5b6108a88a878301516040840161080a565b855250928401929084019060010161087d565b5090979650505050505050565b600082601f8301126108d8578081fd5b815160206108e861081883610dbc565b82815281810190858301604080860288018501891015610906578687fd5b865b8681101561097b5781838b03121561091e578788fd5b815182810181811067ffffffffffffffff8211171561093957fe5b8352835161094681610e2c565b8152838701516bffffffffffffffffffffffff8116811461096557898afd5b8188015285529385019391810191600101610908565b509198975050505050505050565b600082601f830112610999578081fd5b61083f8383516020850161080a565b6000602082840312156109b9578081fd5b813561083f81610e2c565b600080604083850312156109d6578081fd5b82516109e181610e2c565b602084015190925067ffffffffffffffff808211156109fe578283fd5b9084019060c08287031215610a11578283fd5b610a1b60c0610d98565b82518152602083015182811115610a30578485fd5b610a3c88828601610989565b60208301525060408301516040820152606083015182811115610a5d578485fd5b610a69888286016108c8565b606083015250608083015182811115610a80578485fd5b610a8c888286016108c8565b60808301525060a083015182811115610aa3578485fd5b610aaf88828601610851565b60a0830152508093505050509250929050565b600080600060608486031215610ad6578081fd5b833567ffffffffffffffff80821115610aed578283fd5b81860191506040808389031215610b02578384fd5b80518181018181108482111715610b1557fe5b808352843584811115610b26578687fd5b8501808b03841315610b36578687fd5b608083018281108682111715610b4857fe5b845280356001600160e01b031981168114610b61578788fd5b825260208181013586811115610b75578889fd5b82019550601f86018c13610b87578788fd5b85359150610b9761081883610dda565b8281528c82848901011115610baa578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bd9818c01610846565b985050505050610bea818801610846565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c5457815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c16565b509495945050505050565b60008151808452610c77816020860160208601610dfc565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610cc7610140850182610c5f565b9050604088015160c08501526060880151607f19808684030160e0870152610cef8383610c03565b925060808a015191508086840301610100870152610d0d8383610c03565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610d6657601f19868303018452610d54828651610c5f565b94870194938701939150600101610d38565b508096505050505050610d7b81840187610bf6565b50610d896040830185610bf6565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610db457fe5b604052919050565b600067ffffffffffffffff821115610dd057fe5b5060209081020190565b600067ffffffffffffffff821115610dee57fe5b50601f01601f191660200190565b60005b83811015610e17578181015183820152602001610dff565b83811115610e26576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a2e24b24412817b3e18dda67abff2b746539ae76571c1e638821050d4f94e66e64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100db578063ac8a584a146100ee578063ccf4fad214610101578063e814f46d14610101578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b55780638da5cb5b146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ac2565b6101d9565b6100a06102cf565b6100c561037b565b6040516100d29190610c8b565b60405180910390f35b6100a06100e93660046109a8565b61038a565b6100a06100fc3660046109a8565b610410565b6100a061010f3660046109a8565b610493565b6100a06101223660046109a8565b61054f565b600054610100900460ff16806101405750610140610652565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc610663565b6101c4610703565b80156101d6576000805461ff00191690555b50565b606560006101e56107fc565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eb66028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061025c91906109c4565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b81526004016102969493929190610c9f565b600060405180830381600087803b1580156102b057600080fd5b505af11580156102c4573d6000803e3d6000fd5b505050505050505050565b6102d76107fc565b6001600160a01b03166102e861037b565b6001600160a01b031614610331576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b6103926107fc565b6001600160a01b03166103a361037b565b6001600160a01b0316146103ec576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104186107fc565b6001600160a01b031661042961037b565b6001600160a01b031614610472576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806104ac57506104ac610652565b806104ba575060005460ff16155b6104f55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610520576000805460ff1961ff0019909116610100171660011790555b610528610663565b610530610703565b6105398261054f565b801561054b576000805461ff00191690555b5050565b6105576107fc565b6001600160a01b031661056861037b565b6001600160a01b0316146105b1576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b0381166105f65760405162461bcd60e51b8152600401808060200182810382526026815260200180610e426026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061065d30610800565b15905090565b600054610100900460ff168061067c575061067c610652565b8061068a575060005460ff16155b6106c55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff168061071c575061071c610652565b8061072a575060005460ff16155b6107655760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610790576000805460ff1961ff0019909116610100171660011790555b600061079a6107fc565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061081d61081884610dda565b610d98565b905082815283838301111561083157600080fd5b61083f836020830184610dfc565b9392505050565b803561080581610e2c565b600082601f830112610861578081fd5b8151602061087161081883610dbc565b82815281810190858301855b858110156108bb578151880189603f820112610897578788fd5b6108a88a878301516040840161080a565b855250928401929084019060010161087d565b5090979650505050505050565b600082601f8301126108d8578081fd5b815160206108e861081883610dbc565b82815281810190858301604080860288018501891015610906578687fd5b865b8681101561097b5781838b03121561091e578788fd5b815182810181811067ffffffffffffffff8211171561093957fe5b8352835161094681610e2c565b8152838701516bffffffffffffffffffffffff8116811461096557898afd5b8188015285529385019391810191600101610908565b509198975050505050505050565b600082601f830112610999578081fd5b61083f8383516020850161080a565b6000602082840312156109b9578081fd5b813561083f81610e2c565b600080604083850312156109d6578081fd5b82516109e181610e2c565b602084015190925067ffffffffffffffff808211156109fe578283fd5b9084019060c08287031215610a11578283fd5b610a1b60c0610d98565b82518152602083015182811115610a30578485fd5b610a3c88828601610989565b60208301525060408301516040820152606083015182811115610a5d578485fd5b610a69888286016108c8565b606083015250608083015182811115610a80578485fd5b610a8c888286016108c8565b60808301525060a083015182811115610aa3578485fd5b610aaf88828601610851565b60a0830152508093505050509250929050565b600080600060608486031215610ad6578081fd5b833567ffffffffffffffff80821115610aed578283fd5b81860191506040808389031215610b02578384fd5b80518181018181108482111715610b1557fe5b808352843584811115610b26578687fd5b8501808b03841315610b36578687fd5b608083018281108682111715610b4857fe5b845280356001600160e01b031981168114610b61578788fd5b825260208181013586811115610b75578889fd5b82019550601f86018c13610b87578788fd5b85359150610b9761081883610dda565b8281528c82848901011115610baa578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bd9818c01610846565b985050505050610bea818801610846565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c5457815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c16565b509495945050505050565b60008151808452610c77816020860160208601610dfc565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610cc7610140850182610c5f565b9050604088015160c08501526060880151607f19808684030160e0870152610cef8383610c03565b925060808a015191508086840301610100870152610d0d8383610c03565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610d6657601f19868303018452610d54828651610c5f565b94870194938701939150600101610d38565b508096505050505050610d7b81840187610bf6565b50610d896040830185610bf6565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610db457fe5b604052919050565b600067ffffffffffffffff821115610dd057fe5b5060209081020190565b600067ffffffffffffffff821115610dee57fe5b50601f01601f191660200190565b60005b83811015610e17578181015183820152602001610dff565b83811115610e26576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a2e24b24412817b3e18dda67abff2b746539ae76571c1e638821050d4f94e66e64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19884, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleBeaconMeta.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleBeaconMeta.json new file mode 100644 index 000000000..dab29db24 --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleBeaconMeta.json @@ -0,0 +1,219 @@ +{ + "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xdc6bc7f37a6dbd2326afe24bdc47d4d61f1b22edbcb6a1424eac3b272052bc37", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "394703", + "logsBloom": "0x00000000000000000000000000000000000000000400800004800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xa82e4c22c9e673f8621528e9d8912aa281b03e6e8098d84222b6a14c55c58254", + "transactionHash": "0xdc6bc7f37a6dbd2326afe24bdc47d4d61f1b22edbcb6a1424eac3b272052bc37", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2308807, + "transactionHash": "0xdc6bc7f37a6dbd2326afe24bdc47d4d61f1b22edbcb6a1424eac3b272052bc37", + "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xa82e4c22c9e673f8621528e9d8912aa281b03e6e8098d84222b6a14c55c58254" + }, + { + "transactionIndex": 1, + "blockNumber": 2308807, + "transactionHash": "0xdc6bc7f37a6dbd2326afe24bdc47d4d61f1b22edbcb6a1424eac3b272052bc37", + "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xa82e4c22c9e673f8621528e9d8912aa281b03e6e8098d84222b6a14c55c58254" + } + ], + "blockNumber": 2308807, + "cumulativeGasUsed": "447180", + "status": 1, + "byzantium": true + }, + "args": [ + "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\":\"ERC1155RaribleBeaconMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\\n transferOwnership(initialOwner);\\n }\\n}\\n\",\"keccak256\":\"0xf0f5306033288bc22598ae47368ae7d66273c924401c123259a8fc467459965b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405161072d38038061072d8339818101604052604081101561003357600080fd5b508051602090910151816000610047610099565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602061070d833981519152908290a3506100888161009d565b506100928161010d565b5050610224565b3390565b6100b08161020f60201b6103821760201c565b6100eb5760405162461bcd60e51b81526004018080602001828103825260338152602001806106da6033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610115610099565b6001600160a01b0316610126610215565b6001600160a01b031614610181576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166101c65760405162461bcd60e51b81526004018080602001828103825260268152602001806106b46026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061070d83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b6000546001600160a01b031690565b610481806102336000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a264697066735822122097d1fd4fefddd34270259a2d6721a4f9af66abf30b6e34916f1ca191250e72b564736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163748be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a264697066735822122097d1fd4fefddd34270259a2d6721a4f9af66abf30b6e34916f1ca191250e72b564736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "implementation()": { + "details": "Returns the current implementation address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeTo(address)": { + "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol:ERC1155RaribleBeaconMeta", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6517, + "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol:ERC1155RaribleBeaconMeta", + "label": "_implementation", + "offset": 0, + "slot": "1", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleFactoryC2.json new file mode 100644 index 000000000..3801b37e5 --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleFactoryC2.json @@ -0,0 +1,396 @@ +{ + "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_beacon", + "type": "address" + }, + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create1155RaribleProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create1155RaribleUserProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "beacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x6d56efa73be8833eab961574b056930be997d4aaa300578e604f5064fbd46e97", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1374604", + "logsBloom": "0x00000000000000000000000000000000008000000400800000800000000000000000000000000000000000000000000000000000000040000000004000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010", + "blockHash": "0x42472ab2210bfe514cb56ddaca1c74ad2313baeb8ca85b7d260260469c1054d5", + "transactionHash": "0x6d56efa73be8833eab961574b056930be997d4aaa300578e604f5064fbd46e97", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2308812, + "transactionHash": "0x6d56efa73be8833eab961574b056930be997d4aaa300578e604f5064fbd46e97", + "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x42472ab2210bfe514cb56ddaca1c74ad2313baeb8ca85b7d260260469c1054d5" + }, + { + "transactionIndex": 1, + "blockNumber": 2308812, + "transactionHash": "0x6d56efa73be8833eab961574b056930be997d4aaa300578e604f5064fbd46e97", + "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x42472ab2210bfe514cb56ddaca1c74ad2313baeb8ca85b7d260260469c1054d5" + } + ], + "blockNumber": 2308812, + "cumulativeGasUsed": "1421505", + "status": 1, + "byzantium": true + }, + "args": [ + "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":\"ERC1155RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-1155/ERC1155Rarible.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\\n *\\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC1155RaribleFactoryC2 is Ownable{\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create1155RaribleProxy(address proxy);\\n event Create1155RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n transferOwnership(initialOwner);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleProxy(beaconProxy);\\n }\\n \\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n\\n}\\n\",\"keccak256\":\"0xafc4d548d88843b0e3642d55d28bf07415ad50950c9fbb22f8eeadd5a9774478\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x80b6ec138d4689d2e842777e9d61ff3a32a872ac61c91deebf3af5210517eb02\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Base.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n \\n isPrivate = true;\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC1155Rarible(initialOwner, _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0x9f9ce1325409a069ad166fa51ce4402e854f9da274e047a763a4f4e193925967\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7d305157d1d52073aa03b9bc8d8efae9ad010f32160a8eedbc19ca9549c9a7a6\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620017f7380380620017f7833981016040819052620000349162000205565b600062000040620000cb565b600080546001600160a01b0319166001600160a01b038316908117825560405192935091600080516020620017d7833981519152908290a350600180546001600160a01b038087166001600160a01b031992831617909255600280548684169083161790556003805492851692909116919091179055620000c181620000cf565b5050505062000261565b3390565b620000d9620000cb565b6001600160a01b0316620000ec620001d9565b6001600160a01b03161462000148576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166200018f5760405162461bcd60e51b8152600401808060200182810382526026815260200180620017b16026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020620017d783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b80516001600160a01b03811681146200020057600080fd5b919050565b600080600080608085870312156200021b578384fd5b6200022685620001e8565b93506200023660208601620001e8565b92506200024660408601620001e8565b91506200025660608601620001e8565b905092959194509250565b61154080620002716000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220d72849794df566f801d9145066ca8915bdfb2399d632f29f7ac136b4c6a377dd64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220d72849794df566f801d9145066ca8915bdfb2399d632f29f7ac136b4c6a377dd64736f6c63430007060033", + "devdoc": { + "details": "This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.", + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 22716, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "beacon", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 22718, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "transferProxy", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 22720, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "lazyTransferProxy", + "offset": 0, + "slot": "3", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleMeta.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta.json similarity index 93% rename from projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleMeta.json rename to projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta.json index 8ce0f3e96..2faad0290 100644 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleMeta.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta.json @@ -1,5 +1,5 @@ { - "address": "0x67A8fE17Db4d441f96f26094677763a2213a3B5f", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", "abi": [ { "anonymous": false, @@ -611,6 +611,49 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1364,122 +1407,137 @@ "type": "constructor" } ], - "transactionHash": "0x7a36c96f7f22b19823e33d5b4336fa46123dd36bfc0ad52c0d7fe9b5496e2713", + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", "receipt": { - "to": null, - "from": "0xC66D094eD928f7840A6B0d373c1cd825C97e3C7c", - "contractAddress": "0x663a6887d319dc54F94271FABAedD3630aFD6BCa", - "transactionIndex": 0, - "gasUsed": "1081940", - "logsBloom": "0x00000000000000000000000000000000404000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000002000001000000000800000000010000000000000000020000004000001010000800000000802000000000000000000001400000001000000000000200400000000000000000000000000000000001800000000000000000000000000000000000000002000000000000000000000000000000000020000000000000000000000000000002000400000000000000000020008000000000000010000000000000000000000000000000009000000001001000", - "blockHash": "0x58afd3a9b81813f7dbb8839a4210685bdac4e506f550432ae696906f9c1242b6", - "transactionHash": "0x7a36c96f7f22b19823e33d5b4336fa46123dd36bfc0ad52c0d7fe9b5496e2713", + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1124696", + "logsBloom": "0x00000400000000000000000000000020400000000400800000800000000000000000000000000000000000000000000000000000000040000100000000000000000000000000008000000000000002000001000000000800004000000000000000004000020000000000001080000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000100004000000000000000000000000000000000020000200000000010001000000000080000400000000000000000020000001000000000010000000000000800000000000000000001000000001000000", + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f", + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", "logs": [ { - "transactionIndex": 0, - "blockNumber": 17742687, - "transactionHash": "0x7a36c96f7f22b19823e33d5b4336fa46123dd36bfc0ad52c0d7fe9b5496e2713", - "address": "0x663a6887d319dc54F94271FABAedD3630aFD6BCa", + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x000000000000000000000000d19b589c034e7f5e8033ad2778ee0cf98aaf46bb" + "0x000000000000000000000000a36e6ee8c5eebfb1738fb78ce3d09562869f58a4" ], "data": "0x", "logIndex": 0, - "blockHash": "0x58afd3a9b81813f7dbb8839a4210685bdac4e506f550432ae696906f9c1242b6" + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" }, { - "transactionIndex": 0, - "blockNumber": 17742687, - "transactionHash": "0x7a36c96f7f22b19823e33d5b4336fa46123dd36bfc0ad52c0d7fe9b5496e2713", - "address": "0x663a6887d319dc54F94271FABAedD3630aFD6BCa", + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000c66d094ed928f7840a6b0d373c1cd825c97e3c7c" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", "logIndex": 1, - "blockHash": "0x58afd3a9b81813f7dbb8839a4210685bdac4e506f550432ae696906f9c1242b6" + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" }, { - "transactionIndex": 0, - "blockNumber": 17742687, - "transactionHash": "0x7a36c96f7f22b19823e33d5b4336fa46123dd36bfc0ad52c0d7fe9b5496e2713", - "address": "0x663a6887d319dc54F94271FABAedD3630aFD6BCa", + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000b1f7e606d3e0668ee1ac3f5b22eb761a9c8ab26b" + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 2, - "blockHash": "0x58afd3a9b81813f7dbb8839a4210685bdac4e506f550432ae696906f9c1242b6" + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" }, { - "transactionIndex": 0, - "blockNumber": 17742687, - "transactionHash": "0x7a36c96f7f22b19823e33d5b4336fa46123dd36bfc0ad52c0d7fe9b5496e2713", - "address": "0x663a6887d319dc54F94271FABAedD3630aFD6BCa", + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x0000000000000000000000004d55dd84329d92d66a52a374c7e3030c62c08885" + "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 3, - "blockHash": "0x58afd3a9b81813f7dbb8839a4210685bdac4e506f550432ae696906f9c1242b6" + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" }, { - "transactionIndex": 0, - "blockNumber": 17742687, - "transactionHash": "0x7a36c96f7f22b19823e33d5b4336fa46123dd36bfc0ad52c0d7fe9b5496e2713", - "address": "0x663a6887d319dc54F94271FABAedD3630aFD6BCa", + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", "topics": [ - "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], - "data": "0x000000000000000000000000c66d094ed928f7840a6b0d373c1cd825c97e3c7c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "data": "0x", "logIndex": 4, - "blockHash": "0x58afd3a9b81813f7dbb8839a4210685bdac4e506f550432ae696906f9c1242b6" + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" }, { - "transactionIndex": 0, - "blockNumber": 17742687, - "transactionHash": "0x7a36c96f7f22b19823e33d5b4336fa46123dd36bfc0ad52c0d7fe9b5496e2713", - "address": "0x663a6887d319dc54F94271FABAedD3630aFD6BCa", + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", "topics": [ - "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca65f6f4affc1f321d6b31dfb7122b143fab4545", + "data": "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", "logIndex": 5, - "blockHash": "0x58afd3a9b81813f7dbb8839a4210685bdac4e506f550432ae696906f9c1242b6" + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + }, + { + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" } ], - "blockNumber": 17742687, - "cumulativeGasUsed": "1081940", + "blockNumber": 2308803, + "cumulativeGasUsed": "1171597", "status": 1, "byzantium": true }, "args": [ - "0xD19B589C034e7F5e8033AD2778ee0cF98aAf46bB", - "0xcA65f6F4AfFC1F321D6B31DFB7122B143FAB4545", - "0x173c43d200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000b1f7e606d3e0668ee1ac3f5b22eb761a9c8ab26b0000000000000000000000004d55dd84329d92d66a52a374c7e3030c62c08885000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", "execute": { - "methodName": "__ERC1155Rarible_init", + "methodName": "__ERC1155Rarible_init_proxy", "args": [ "Rarible", "RARI", "ipfs:/", "", - "0xB1F7E606D3e0668Ee1Ac3f5B22eB761a9C8AB26b", - "0x4D55dD84329d92d66a52a374c7e3030C62C08885" + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ] }, - "implementation": "0xD19B589C034e7F5e8033AD2778ee0cF98aAf46bB", + "implementation": "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Implementation.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Implementation.json new file mode 100644 index 000000000..301dac503 --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Implementation.json @@ -0,0 +1,1791 @@ +{ + "address": "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BurnLazy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "BurnLazyBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Supply", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "TransferBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferSingle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "URI", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "burnBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x05fba2d7598a236f16ec4d56a6da0dc8ae7a65f75de37cbf062eacb545db39e8", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "5465741", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xd52b0929b57cc36ea145eb6048fc752f6bdb734f039034d0a1c64d8b7913f671", + "transactionHash": "0x05fba2d7598a236f16ec4d56a6da0dc8ae7a65f75de37cbf062eacb545db39e8", + "logs": [], + "blockNumber": 2308799, + "cumulativeGasUsed": "5512642", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnLazy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"BurnLazyBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC1155Rarible_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"balanceOf(address,uint256)\":{\"details\":\"See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"See {IERC1155-safeBatchTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"See {IERC1155-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC1155-setApprovalForAll}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\":\"ERC1155RaribleMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\\n using SafeMath for uint256;\\n\\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\\\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\\\"));\\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\\\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\\\");\\n\\n mapping(address => uint256) private nonces;\\n bytes32 internal domainSeparator;\\n\\n /*\\n * Meta transaction structure.\\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\\n * He should call the desired function directly in that case.\\n */\\n struct MetaTransaction {\\n uint256 nonce;\\n address from;\\n bytes functionSignature;\\n }\\n\\n /*\\n * Domain structure.\\n * Data(information to for making metaTransaction method uniq.) about method and contract\\n */\\n struct EIP712Domain {\\n string name;\\n string version;\\n address verifyingContract;\\n bytes32 salt;\\n }\\n\\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\\n\\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\\n domainSeparator = keccak256(abi.encode(\\n EIP712_DOMAIN_TYPEHASH,\\n keccak256(bytes(name)),\\n keccak256(bytes(version)),\\n address(this),\\n getSalt()\\n ));\\n }\\n\\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\\n if (inBytes.length == 0) {\\n return 0x0;\\n }\\n\\n assembly {\\n outBytes4 := mload(add(inBytes, 32))\\n }\\n }\\n\\n function executeMetaTransaction(address userAddress,\\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\\n require(destinationFunctionSig != msg.sig, \\\"Wrong functionSignature\\\");\\n MetaTransaction memory metaTx = MetaTransaction({\\n nonce : nonces[userAddress],\\n from : userAddress,\\n functionSignature : functionSignature\\n });\\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \\\"Signer and signature do not match\\\");\\n nonces[userAddress] = nonces[userAddress].add(1);\\n // Append userAddress at the end to extract it from calling context\\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\\n\\n require(success, \\\"Function call not successful\\\");\\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\\n return returnData;\\n }\\n\\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n META_TRANSACTION_TYPEHASH,\\n metaTx.nonce,\\n metaTx.from,\\n keccak256(metaTx.functionSignature)\\n ));\\n }\\n\\n function getNonce(address user) external view returns (uint256 nonce) {\\n nonce = nonces[user];\\n }\\n\\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\\n require(signer != address(0), \\\"Invalid signature\\\");\\n return signer == user;\\n }\\n\\n function _msgSender() internal view virtual override returns (address payable sender) {\\n if (msg.sender == address(this)) {\\n bytes memory array = msg.data;\\n uint256 index = msg.data.length;\\n assembly {\\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\\n }\\n } else {\\n sender = msg.sender;\\n }\\n return sender;\\n }\\n\\n function getSalt() internal pure returns (bytes32) {\\n return bytes32(getChainID());\\n }\\n\\n function getChainID() internal pure returns (uint256 id) {\\n assembly {\\n id := chainid()\\n }\\n }\\n\\n function getDomainSeparator() private view returns (bytes32) {\\n return domainSeparator;\\n }\\n\\n /**\\n * Accept message hash and returns hash message in EIP712 compatible form\\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\\n * https://eips.ethereum.org/EIPS/eip-712\\n * \\\"\\\\\\\\x19\\\" makes the encoding deterministic\\n * \\\"\\\\\\\\x01\\\" is the version byte to make it compatible to EIP-191\\n */\\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", getDomainSeparator(), messageHash));\\n }\\n\\n /**\\n * @dev verifies the call result and bubbles up revert reason for failed calls\\n *\\n * @param success : outcome of forwarded call\\n * @param returndata : returned data from the frowarded call\\n * @param errorMessage : fallback error message to show\\n */\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\\n if (!success) {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x58924a44eea8720bdcfb32f12d3374deac9605a3b75cb8872907856d526bde10\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x80b6ec138d4689d2e842777e9d61ff3a32a872ac61c91deebf3af5210517eb02\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7d305157d1d52073aa03b9bc8d8efae9ad010f32160a8eedbc19ca9549c9a7a6\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\\\";\\nimport \\\"../ERC1155Base.sol\\\";\\nimport \\\"../../IsPrivateCollection.sol\\\";\\nimport \\\"../../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC1155RaribleUserMeta\\\", \\\"1\\\");\\n \\n isPrivate = true;\\n\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n \\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC1155RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC1155RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\\n return super._msgSender();\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0x4213a9625423e8bec14757bd2d16a9586b0d6848ed806d14d078de2f291a856f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50615ff280620000216000396000f3fe6080604052600436106101ed5760003560e01c80636c0360eb1161010d578063aa271e1a116100a0578063e985e9c51161006f578063e985e9c51461058a578063f242432a146105aa578063f2fde38b146105ca578063f5298aca146105ea578063ffc4e0a71461060a576101ed565b8063aa271e1a14610515578063cad96cca14610535578063e07f231914610555578063e8a3d48514610575576101ed565b80638da5cb5b116100dc5780638da5cb5b1461049e57806395d89b41146104c0578063983b2d56146104d5578063a22cb465146104f5576101ed565b80636c0360eb14610427578063715018a61461043c57806371e2a65714610451578063891be97414610471576101ed565b80632a55205a116101855780634e1273f4116101545780634e1273f41461039a57806355f804b3146103c757806361e05459146103e75780636b20c45414610407576101ed565b80632a55205a1461030c5780632d0335ab1461033a5780632eb2c2d61461035a5780633092afd51461037a576101ed565b80630e89341c116101c15780630e89341c1461028a5780630eaead67146102aa578063173c43d2146102cc578063220e4d73146102ec576101ed565b8062fdd58e146101f257806301ffc9a71461022857806306fdde03146102555780630c53c51c14610277575b600080fd5b3480156101fe57600080fd5b5061021261020d366004615211565b61062a565b60405161021f9190615b3a565b60405180910390f35b34801561023457600080fd5b5061024861024336600461530a565b61069c565b60405161021f919061588b565b34801561026157600080fd5b5061026a6106af565b60405161021f9190615896565b61026a610285366004615197565b61073e565b34801561029657600080fd5b5061026a6102a5366004615692565b610ab7565b3480156102b657600080fd5b506102ca6102c536600461563b565b610ac2565b005b3480156102d857600080fd5b506102ca6102e7366004615364565b610b66565b3480156102f857600080fd5b506102ca61030736600461542b565b610c16565b34801561031857600080fd5b5061032c6103273660046156eb565b610cd0565b60405161021f929190615827565b34801561034657600080fd5b50610212610355366004614f91565b610dde565b34801561036657600080fd5b506102ca610375366004614fe5565b610dfa565b34801561038657600080fd5b506102ca610395366004614f91565b6110f8565b3480156103a657600080fd5b506103ba6103b53660046152aa565b6111a8565b60405161021f9190615853565b3480156103d357600080fd5b506102ca6103e2366004615332565b611293565b3480156103f357600080fd5b506102ca610402366004615504565b611338565b34801561041357600080fd5b506102ca6104223660046150f4565b6113ce565b34801561043357600080fd5b5061026a611554565b34801561044857600080fd5b506102ca6115ec565b34801561045d57600080fd5b506102ca61046c366004615270565b611698565b34801561047d57600080fd5b5061049161048c366004615692565b611781565b60405161021f9190615840565b3480156104aa57600080fd5b506104b3611811565b60405161021f91906157dd565b3480156104cc57600080fd5b5061026a611820565b3480156104e157600080fd5b506102ca6104f0366004614f91565b61187c565b34801561050157600080fd5b506102ca610510366004615166565b611931565b34801561052157600080fd5b50610248610530366004614f91565b611a20565b34801561054157600080fd5b50610491610550366004615692565b611a3f565b34801561056157600080fd5b506102ca6105703660046156aa565b611aba565b34801561058157600080fd5b5061026a611afd565b34801561059657600080fd5b506102486105a5366004614fad565b611b59565b3480156105b657600080fd5b506102ca6105c536600461508e565b611b6c565b3480156105d657600080fd5b506102ca6105e5366004614f91565b611d25565b3480156105f657600080fd5b506102ca61060536600461523c565b611e28565b34801561061657600080fd5b506102ca6106253660046155d4565b611ea4565b60006001600160a01b0383166106715760405162461bcd60e51b815260040180806020018281038252602b815260200180615ce6602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b60006106a782611f4c565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b820191906000526020600020905b81548152906001019060200180831161071957829003601f168201915b505050505081565b6060600061074b86611feb565b90506000356001600160e01b031990811690821614156107b2576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102fb6020908152908490205483528201529081018790526107f08882888888612007565b61082b5760405162461bcd60e51b8152600401808060200182810382526021815260200180615efd6021913960400191505060405180910390fd5b6001600160a01b03881660009081526102fb60205260409020546108509060016120f1565b6102fb60008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106108bb5780518252601f19909201916020918201910161089c565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106109315780518252601f199092019160209182019101610912565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610993576040519150601f19603f3d011682016040523d82523d6000602084013e610998565b606091505b5091509150816109ef576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a6e578181015183820152602001610a56565b50505050905090810190601f168015610a9b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b60606106a78261214b565b6102965460ff1615610b56578260600151600081518110610adf57fe5b6020026020010151600001516001600160a01b0316610afc611811565b6001600160a01b03161480610b315750610b318360600151600081518110610b2057fe5b602002602001015160000151611a20565b610b565760405162461bcd60e51b8152600401610b4d906158d4565b60405180910390fd5b610b618383836122e1565b505050565b610b748686868686866125dd565b610bc1604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610bf561279f565b8787604051610c06939291906157f1565b60405180910390a1505050505050565b610c248787878787876125dd565b610c71604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff19169055610c8581611d25565b7fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610cae61279f565b8888604051610cbf939291906157f1565b60405180910390a150505050505050565b60008281526101fa60205260408120548190610cf157506000905080610dd7565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d6d57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610d1e565b50505050905080600081518110610d8057fe5b60209081029190910101515192506000805b8251811015610dcb57828181518110610da757fe5b6020026020010151602001516001600160601b031682019150806001019050610d92565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102fb602052604090205490565b8151835114610e3a5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f956028913960400191505060405180910390fd5b6001600160a01b038416610e7f5760405162461bcd60e51b8152600401808060200182810382526025815260200180615de96025913960400191505060405180910390fd5b610e8761279f565b6001600160a01b0316856001600160a01b03161480610ead5750610ead856105a561279f565b610ee85760405162461bcd60e51b8152600401808060200182810382526032815260200180615e0e6032913960400191505060405180910390fd5b6000610ef261279f565b9050610f028187878787876110f0565b60005b8451811015611008576000858281518110610f1c57fe5b602002602001015190506000858381518110610f3457fe5b60200260200101519050610fa1816040518060600160405280602a8152602001615eb3602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546127ae9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a1681522054610fd890826120f1565b60009283526097602090815260408085206001600160a01b038c1686529091529092209190915550600101610f05565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561108e578181015183820152602001611076565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156110cd5781810151838201526020016110b5565b5050505090500194505050505060405180910390a46110f0818787878787612845565b505050505050565b61110061279f565b6001600160a01b0316611111611811565b6001600160a01b03161461115a576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b606081518351146111ea5760405162461bcd60e51b8152600401808060200182810382526029815260200180615f6c6029913960400191505060405180910390fd5b600083516001600160401b038111801561120357600080fd5b5060405190808252806020026020018201604052801561122d578160200160208202803683370190505b50905060005b845181101561128b5761126c85828151811061124b57fe5b602002602001015185838151811061125f57fe5b602002602001015161062a565b82828151811061127857fe5b6020908102919091010152600101611233565b509392505050565b61129b61279f565b6001600160a01b03166112ac611811565b6001600160a01b0316146112f5576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6112fe81612abb565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d68160405161132d9190615896565b60405180910390a150565b6113468787878786866125dd565b611397604051806040016040528060168152602001754552433131353552617269626c65557365724d65746160501b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc610cae61279f565b80518251146113ef5760405162461bcd60e51b8152600401610b4d90615a83565b600082516001600160401b038111801561140857600080fd5b50604051908082528060200260200182016040528015611432578160200160208202803683370190505b509050600083516001600160401b038111801561144e57600080fd5b50604051908082528060200260200182016040528015611478578160200160208202803683370190505b50905060005b84518110156114ed576114b785828151811061149657fe5b60200260200101518583815181106114aa57fe5b6020026020010151612acf565b8483815181106114c357fe5b602002602001018484815181106114d657fe5b60209081029190910101919091525260010161147e565b506114f9858584612b44565b846001600160a01b031661150b61279f565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051611545929190615866565b60405180910390a35050505050565b61012f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b505050505090505b90565b6115f461279f565b6001600160a01b0316611605611811565b6001600160a01b03161461164e576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6116a061279f565b6001600160a01b03166116b1611811565b6001600160a01b0316146116fa576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b60005b815181101561177d57600082828151811061171457fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016116fd565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561180657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016117b7565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b61188461279f565b6001600160a01b0316611895611811565b6001600160a01b0316146118de576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b031661194361279f565b6001600160a01b031614156119895760405162461bcd60e51b8152600401808060200182810382526029815260200180615f436029913960400191505060405180910390fd5b806098600061199661279f565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556119da61279f565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa6020908152604080832080548251818502810185019093528083526060949293919290918401821561180657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016117b7565b816001600160a01b0316611acc61279f565b6001600160a01b031614611af25760405162461bcd60e51b8152600401610b4d9061598b565b610b61838383612bb8565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b6000611b658383612c64565b9392505050565b6001600160a01b038416611bb15760405162461bcd60e51b8152600401808060200182810382526025815260200180615de96025913960400191505060405180910390fd5b611bb961279f565b6001600160a01b0316856001600160a01b03161480611bdf5750611bdf856105a561279f565b611c1a5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b6000611c2461279f565b9050611c44818787611c3588612c90565b611c3e88612c90565b876110f0565b611c8b836040518060600160405280602a8152602001615eb3602a913960008781526097602090815260408083206001600160a01b038d16845290915290205491906127ae565b60008581526097602090815260408083206001600160a01b038b81168552925280832093909355871681522054611cc290846120f1565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a841693861692600080516020615cc683398151915292908290030190a46110f0818787878787612cd5565b611d2d61279f565b6001600160a01b0316611d3e611811565b6001600160a01b031614611d87576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b038116611dcc5760405162461bcd60e51b8152600401808060200182810382526026815260200180615d546026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600080611e358484612acf565b90925090508115611e4b57611e4b858584612e46565b8015611e9d57846001600160a01b0316611e6361279f565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051611545929190615b5c565b5050505050565b6000611eb484866000015161062a565b9050818115611eee578280831015611ec95750815b611ee9868689600001518460405180602001604052806000815250611b6c565b830390505b80156110f0578560600151600081518110611f0557fe5b6020026020010151600001516001600160a01b0316856001600160a01b031614611f415760405162461bcd60e51b8152600401610b4d906158a9565b6110f0868583610ac2565b60006001600160e01b03198216636db15a0f60e01b1480611f7d57506001600160e01b0319821663656cb66560e11b145b80611f9857506001600160e01b0319821663152a902d60e11b145b80611fb357506001600160e01b031982166301ffc9a760e01b145b80611fce57506001600160e01b03198216636cdb3d1360e11b145b806106a75750506001600160e01b0319166303a24d0760e21b1490565b6000815160001415611fff575060006106aa565b506020015190565b600080600161201d61201888612eba565b612f3d565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612074573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120d0576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611b65576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081815261012e6020908152604080832080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352606094938301828280156121e05780601f106121b5576101008083540402835291602001916121e0565b820191906000526020600020905b8154815290600101906020018083116121c357829003601f168201915b5050505050905060006121f1611554565b9050805160001415612205575090506106aa565b81511561221f576122168183612f89565b925050506106aa565b806122298561316e565b6040516020018083805190602001908083835b6020831061225b5780518252601f19909201916020918201910161223c565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106122a35780518252601f199092019160209182019101612284565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c60006122f061279f565b9050806001600160a01b0316826001600160a01b0316148061231757506123178282611b59565b6123335760405162461bcd60e51b8152600401610b4d906159da565b600083116123535760405162461bcd60e51b8152600401610b4d906159b0565b845160009081526101fc60205260409020546124bc57846060015160008151811061237a57fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146123b65760405162461bcd60e51b8152600401610b4d90615960565b60008560400151116123da5760405162461bcd60e51b8152600401610b4d90615901565b8460a0015151856060015151146123f057600080fd5b60006123fb86613248565b905060005b8660600151518110156124715760008760600151828151811061241f57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b0316146124685761246881848a60a00151858151811061245b57fe5b602002602001015161349b565b50600101612400565b50612484866000015187604001516134a6565b61249686600001518760800151613510565b6124a8866000015187606001516136ff565b6124ba866000015187602001516138ae565b505b6124db8486600001518560405180602001604052806000815250613972565b836001600160a01b0316826001600160a01b03161461258c57816001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615cc6833981519152886000015187604051612536929190615b5c565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b0316600080516020615cc683398151915288600001518760405161257f929190615b5c565b60405180910390a4611e9d565b836001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615cc68339815191528860000151876040516125ce929190615b5c565b60405180910390a45050505050565b600054610100900460ff16806125f657506125f6613984565b80612604575060005460ff16155b61263f5760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff1615801561266a576000805460ff1961ff0019909116610100171660011790555b612672613995565b61267a613a8f565b612682613a91565b61268a613b42565b612692613be2565b6126aa60405180602001604052806000815250613c25565b6126b384613cf0565b6126bb613a8f565b6126c3613d15565b6126cd8787613db2565b6126d5613a8f565b6126de85612abb565b6126e9836001613ddb565b6126f4826001613ddb565b8015612706576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030612749613e3b565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102fc819055505050565b60006127a9613e45565b905090565b6000818484111561283d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128025781810151838201526020016127ea565b50505050905090810190601f16801561282f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b612857846001600160a01b0316613ea1565b156110f057836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156128e55781810151838201526020016128cd565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561292457818101518382015260200161290c565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612960578181015183820152602001612948565b50505050905090810190601f16801561298d5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1580156129b257600080fd5b505af19250505080156129d757506040513d60208110156129d257600080fd5b505160015b612a6c576129e3615bb0565b806129ee5750612a35565b60405162461bcd60e51b81526020600482018181528351602484015283518493919283926044019190850190808383600083156128025781810151838201526020016127ea565b60405162461bcd60e51b8152600401808060200182810382526034815260200180615c6a6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146127065760405162461bcd60e51b8152600401808060200182810382526028815260200180615c9e6028913960400191505060405180910390fd5b805161177d9061012f906020840190614bd5565b806000606084901c612adf61279f565b6001600160a01b0316816001600160a01b03161415612b3c578391506000612b0686613ea7565b90508015612b2b576000612b1987613eba565b8203905080861115612b29578093505b505b612b358684613ecd565b8285039350505b509250929050565b612b4c61279f565b6001600160a01b0316836001600160a01b03161480612b725750612b72836105a561279f565b612bad5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b610b61838383613ee6565b60008381526101fa6020526040812054905b81811015611e9d5760008581526101fa6020526040902080546001600160a01b038616919083908110612bf957fe5b6000918252602090912001546001600160a01b03161415612c5c5760008581526101fa60205260409020805484919083908110612c3257fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612bca565b6001600160a01b038116600090815260c9602052604081205460ff1680611b655750611b658383614154565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612cc457fe5b602090810291909101015292915050565b612ce7846001600160a01b0316613ea1565b156110f057836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612d76578181015183820152602001612d5e565b50505050905090810190601f168015612da35780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612dc657600080fd5b505af1925050508015612deb57506040513d6020811015612de657600080fd5b505160015b612df7576129e3615bb0565b6001600160e01b0319811663f23a6e6160e01b146127065760405162461bcd60e51b8152600401808060200182810382526028815260200180615c9e6028913960400191505060405180910390fd5b612e4e61279f565b6001600160a01b0316836001600160a01b03161480612e745750612e74836105a561279f565b612eaf5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b610b61838383614182565b6000604051806080016040528060438152602001615d1160439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612f476142a3565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b805182516060918491849110156130545784846040516020018083805190602001908083835b60208310612fce5780518252601f199092019160209182019101612faf565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106130165780518252601f199092019160209182019101612ff7565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610696565b60005b82518110156131645782818151811061306c57fe5b602001015160f81c60f81b6001600160f81b03191682828151811061308d57fe5b01602001516001600160f81b0319161461315c5785856040516020018083805190602001908083835b602083106130d55780518252601f1990920191602091820191016130b6565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061311d5780518252601f1990920191602091820191016130fe565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350505050610696565b600101613057565b5092949350505050565b60608161319357506040805180820190915260018152600360fc1b60208201526106aa565b8160005b81156131ab57600101600a82049150613197565b6000816001600160401b03811180156131c357600080fd5b506040519080825280601f01601f1916602001820160405280156131ee576020820181803683370190505b50859350905060001982015b831561323f57600a840660300160f81b8282806001900393508151811061321d57fe5b60200101906001600160f81b031916908160001a905350600a840493506131fa565b50949350505050565b6000808260800151516001600160401b038111801561326657600080fd5b50604051908082528060200260200182016040528015613290578160200160208202803683370190505b50905060005b8360800151518110156132e2576132c3846080015182815181106132b657fe5b60200260200101516142aa565b8282815181106132cf57fe5b6020908102919091010152600101613296565b5060008360600151516001600160401b038111801561330057600080fd5b5060405190808252806020026020018201604052801561332a578160200160208202803683370190505b50905060005b84606001515181101561336f57613350856060015182815181106132b657fe5b82828151811061335c57fe5b6020908102919091010152600101613330565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b838110156133d85781810151838201526020016133c0565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b83811015613429578181015183820152602001613411565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b610b61838383614317565b60008281526101fc6020526040902054156134c057600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c906135049084908490615b5c565b60405180910390a15050565b6000805b82518110156136b45760006001600160a01b031683828151811061353457fe5b6020026020010151600001516001600160a01b0316141561359c576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b8281815181106135a857fe5b6020026020010151602001516001600160601b031660001415613612576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b82818151811061361e57fe5b6020026020010151602001516001600160601b0316820191506101fa600085815260200190815260200160002083828151811061365757fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501613514565b5061271081106136f55760405162461bcd60e51b8152600401808060200182810382526025815260200180615f1e6025913960400191505060405180910390fd5b610b618383614559565b60008281526101fb6020526040812090805b835181101561384d5760006001600160a01b031684828151811061373157fe5b6020026020010151600001516001600160a01b031614156137645760405162461bcd60e51b8152600401610b4d90615a4c565b83818151811061377057fe5b6020026020010151602001516001600160601b0316600014156137a55760405162461bcd60e51b8152600401610b4d9061592b565b828482815181106137b257fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b03199092169190911790921691909117905583516138439085908390811061381f57fe5b6020026020010151602001516001600160601b0316836120f190919063ffffffff16565b9150600101613711565b50806127101461386f5760405162461bcd60e51b8152600401610b4d90615aec565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f84846040516138a0929190615b43565b60405180910390a150505050565b600082815261012e6020908152604090912082516138ce92840190614bd5565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6138fa8461214b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561393457818101518382015260200161391c565b50505050905090810190601f1680156139615780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b61397e8484848461458a565b50505050565b600061398f30613ea1565b15905090565b600054610100900460ff16806139ae57506139ae613984565b806139bc575060005460ff16155b6139f75760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613a22576000805460ff1961ff0019909116610100171660011790555b6000613a2c61279f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015613a8c576000805461ff00191690555b50565b565b600054610100900460ff1680613aaa5750613aaa613984565b80613ab8575060005460ff16155b613af35760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613b1e576000805460ff1961ff0019909116610100171660011790555b613b2e6301ffc9a760e01b61469c565b8015613a8c576000805461ff001916905550565b600054610100900460ff1680613b5b5750613b5b613984565b80613b69575060005460ff16155b613ba45760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613b2e576000805460ff1961ff0019909116610100171660011790558015613a8c576000805461ff001916905550565b613a8f604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250614720565b600054610100900460ff1680613c3e5750613c3e613984565b80613c4c575060005460ff16155b613c875760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613cb2576000805460ff1961ff0019909116610100171660011790555b613cbb826147e2565b613ccb636cdb3d1360e11b61469c565b613cdb6303a24d0760e21b61469c565b801561177d576000805461ff00191690555050565b8051613d0490610230906020840190614bd5565b50613a8c63e8a3d48560e01b61469c565b600054610100900460ff1680613d2e5750613d2e613984565b80613d3c575060005460ff16155b613d775760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613da2576000805460ff1961ff0019909116610100171660011790555b613b2e63656cb66560e11b61469c565b8151613dc690610262906020850190614bd5565b508051610b6190610263906020840190614bd5565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b60006127a96147f5565b600033301415613e9c57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506115e99050565b503390565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b038316613f2b5760405162461bcd60e51b8152600401808060200182810382526023815260200180615e906023913960400191505060405180910390fd5b8051825114613f6b5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f956028913960400191505060405180910390fd5b6000613f7561279f565b9050613f95818560008686604051806020016040528060008152506110f0565b60005b83518110156140735761402a838281518110613fb057fe5b6020026020010151604051806060016040528060248152602001615d7a6024913960976000888681518110613fe157fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020546127ae9092919063ffffffff16565b6097600086848151811061403a57fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101613f98565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156140fa5781810151838201526020016140e2565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015614139578181015183820152602001614121565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b0383166141c75760405162461bcd60e51b8152600401808060200182810382526023815260200180615e906023913960400191505060405180910390fd5b60006141d161279f565b9050614201818560006141e387612c90565b6141ec87612c90565b604051806020016040528060008152506110f0565b61424882604051806060016040528060248152602001615d7a6024913960008681526097602090815260408083206001600160a01b038b16845290915290205491906127ae565b60008481526097602090815260408083206001600160a01b03808a1680865291845282852095909555815188815292830187905281519394909390861692600080516020615cc683398151915292908290030190a450505050565b6102fc5490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000614322836147f9565b9050600082516041141561433d5761433a8284614803565b90505b846001600160a01b0316816001600160a01b031614611e9d57614368856001600160a01b0316613ea1565b156144e15760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156143d75781810151838201526020016143bf565b50505050905090810190601f1680156144045780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561442257600080fd5b505afa158015614436573d6000803e3d6000fd5b505050506040513d602081101561444c57600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146144db5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156128025781810151838201526020016127ea565b50611e9d565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b815260048101938452825160248201528251929392839260449092019190808383600083156128025781810151838201526020016127ea565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613504929190615b43565b60008381526101fd60205260408120546145a59084906120f1565b60008581526101fc60205260409020549091508111156145d75760405162461bcd60e51b8152600401610b4d90615a22565b60008481526101fd602052604090208190556001600160a01b03851661460f5760405162461bcd60e51b8152600401610b4d90615aab565b600061461961279f565b905061463a8160008861462b89612c90565b61463489612c90565b886110f0565b60008581526097602090815260408083206001600160a01b038a16845290915290205461466790856120f1565b60008681526097602090815260408083206001600160a01b038b1684529091528120919091556110f090829088888888612cd5565b6001600160e01b031980821614156146fb576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806147395750614739613984565b80614747575060005460ff16155b6147825760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff161580156147ad576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912061016291909155610163558015610b61576000805461ff0019169055505050565b805161177d906099906020840190614bd5565b4690565b6000612f47614883565b6000815160411461485b576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a614879868285856148be565b9695505050505050565b60006127a97f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6148b1614b14565b6148b9614b1b565b614b22565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561491f5760405162461bcd60e51b8152600401808060200182810382526022815260200180615dc76022913960400191505060405180910390fd5b6000601e8560ff1611156149f9576004850360ff16601b148061494857506004850360ff16601c145b6149835760405162461bcd60e51b8152600401808060200182810382526022815260200180615e6e6022913960400191505060405180910390fd5b600161498e87614b84565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156149e8573d6000803e3d6000fd5b505050602060405103519050614ab0565b8460ff16601b1480614a0e57508460ff16601c145b614a495760405162461bcd60e51b8152600401808060200182810382526022815260200180615e6e6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614aa3573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116614b0b576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b6000838383614b2f6147f5565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614c0b5760008555614c51565b82601f10614c2457805160ff1916838001178555614c51565b82800160010185558215614c51579182015b82811115614c51578251825591602001919060010190614c36565b50614c5d929150614c61565b5090565b5b80821115614c5d5760008155600101614c62565b80356106aa81615c54565b600082601f830112614c91578081fd5b81356020614ca6614ca183615b8d565b615b6a565b8281528181019085830183850287018401881015614cc2578586fd5b855b85811015614ce9578135614cd781615c54565b84529284019290840190600101614cc4565b5090979650505050505050565b600082601f830112614d06578081fd5b81356020614d16614ca183615b8d565b82815281810190858301855b85811015614ce957614d39898684358b0101614e60565b84529284019290840190600101614d22565b600082601f830112614d5b578081fd5b81356020614d6b614ca183615b8d565b82815281810190858301604080860288018501891015614d89578687fd5b865b86811015614df85781838b031215614da1578788fd5b81518281018181106001600160401b0382111715614dbb57fe5b83528335614dc881615c54565b8152838701356001600160601b0381168114614de257898afd5b8188015285529385019391810191600101614d8b565b509198975050505050505050565b600082601f830112614e16578081fd5b81356020614e26614ca183615b8d565b8281528181019085830183850287018401881015614e42578586fd5b855b85811015614ce957813584529284019290840190600101614e44565b600082601f830112614e70578081fd5b81356001600160401b03811115614e8357fe5b614e96601f8201601f1916602001615b6a565b818152846020838601011115614eaa578283fd5b816020850160208301379081016020019190915292915050565b600060c08284031215614ed5578081fd5b614edf60c0615b6a565b90508135815260208201356001600160401b0380821115614eff57600080fd5b614f0b85838601614e60565b6020840152604084013560408401526060840135915080821115614f2e57600080fd5b614f3a85838601614d4b565b60608401526080840135915080821115614f5357600080fd5b614f5f85838601614d4b565b608084015260a0840135915080821115614f7857600080fd5b50614f8584828501614cf6565b60a08301525092915050565b600060208284031215614fa2578081fd5b8135611b6581615c54565b60008060408385031215614fbf578081fd5b8235614fca81615c54565b91506020830135614fda81615c54565b809150509250929050565b600080600080600060a08688031215614ffc578081fd5b853561500781615c54565b9450602086013561501781615c54565b935060408601356001600160401b0380821115615032578283fd5b61503e89838a01614e06565b94506060880135915080821115615053578283fd5b61505f89838a01614e06565b93506080880135915080821115615074578283fd5b5061508188828901614e60565b9150509295509295909350565b600080600080600060a086880312156150a5578283fd5b85356150b081615c54565b945060208601356150c081615c54565b9350604086013592506060860135915060808601356001600160401b038111156150e8578182fd5b61508188828901614e60565b600080600060608486031215615108578081fd5b833561511381615c54565b925060208401356001600160401b038082111561512e578283fd5b61513a87838801614e06565b9350604086013591508082111561514f578283fd5b5061515c86828701614e06565b9150509250925092565b60008060408385031215615178578182fd5b823561518381615c54565b915060208301358015158114614fda578182fd5b600080600080600060a086880312156151ae578283fd5b85356151b981615c54565b945060208601356001600160401b038111156151d3578384fd5b6151df88828901614e60565b9450506040860135925060608601359150608086013560ff81168114615203578182fd5b809150509295509295909350565b60008060408385031215615223578182fd5b823561522e81615c54565b946020939093013593505050565b600080600060608486031215615250578081fd5b833561525b81615c54565b95602085013595506040909401359392505050565b600060208284031215615281578081fd5b81356001600160401b03811115615296578182fd5b6152a284828501614c81565b949350505050565b600080604083850312156152bc578182fd5b82356001600160401b03808211156152d2578384fd5b6152de86838701614c81565b935060208501359150808211156152f3578283fd5b5061530085828601614e06565b9150509250929050565b60006020828403121561531b578081fd5b81356001600160e01b031981168114611b65578182fd5b600060208284031215615343578081fd5b81356001600160401b03811115615358578182fd5b6152a284828501614e60565b60008060008060008060c0878903121561537c578384fd5b86356001600160401b0380821115615392578586fd5b61539e8a838b01614e60565b975060208901359150808211156153b3578586fd5b6153bf8a838b01614e60565b965060408901359150808211156153d4578586fd5b6153e08a838b01614e60565b955060608901359150808211156153f5578283fd5b5061540289828a01614e60565b93505061541160808801614c76565b915061541f60a08801614c76565b90509295509295509295565b600080600080600080600060e0888a031215615445578485fd5b87356001600160401b038082111561545b578687fd5b6154678b838c01614e60565b985060208a013591508082111561547c578687fd5b6154888b838c01614e60565b975060408a013591508082111561549d578687fd5b6154a98b838c01614e60565b965060608a01359150808211156154be578283fd5b506154cb8a828b01614e60565b9450506154da60808901614c76565b92506154e860a08901614c76565b91506154f660c08901614c76565b905092959891949750929550565b600080600080600080600060e0888a03121561551e578081fd5b87356001600160401b0380821115615534578283fd5b6155408b838c01614e60565b985060208a0135915080821115615555578283fd5b6155618b838c01614e60565b975060408a0135915080821115615576578283fd5b6155828b838c01614e60565b965060608a0135915080821115615597578283fd5b6155a38b838c01614e60565b955060808a01359150808211156155b8578283fd5b506155c58a828b01614c81565b9350506154e860a08901614c76565b600080600080608085870312156155e9578182fd5b84356001600160401b038111156155fe578283fd5b61560a87828801614ec4565b945050602085013561561b81615c54565b9250604085013561562b81615c54565b9396929550929360600135925050565b60008060006060848603121561564f578081fd5b83356001600160401b03811115615664578182fd5b61567086828701614ec4565b935050602084013561568181615c54565b929592945050506040919091013590565b6000602082840312156156a3578081fd5b5035919050565b6000806000606084860312156156be578081fd5b8335925060208401356156d081615c54565b915060408401356156e081615c54565b809150509250925092565b600080604083850312156156fd578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561575857815180516001600160a01b031688528301516001600160601b0316838801526040909601959082019060010161571f565b509495945050505050565b6000815180845260208085019450808401835b8381101561575857815187529582019590820190600101615776565b60008151808452815b818110156157b75760208185018101518683018201520161579b565b818111156157c85782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038416815260606020820181905260009061581590830185615792565b82810360408401526148798185615792565b6001600160a01b03929092168252602082015260400190565b600060208252611b65602083018461570c565b600060208252611b656020830184615763565b6000604082526158796040830185615763565b8281036020840152614b0b8185615763565b901515815260200190565b600060208252611b656020830184615792565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526152a2604083018461570c565b918252602082015260400190565b6040518181016001600160401b0381118282101715615b8557fe5b604052919050565b60006001600160401b03821115615ba057fe5b5060209081020190565b60e01c90565b600060443d1015615bc0576115e9565b600481823e6308c379a0615bd48251615baa565b14615bde576115e9565b6040513d600319016004823e80513d6001600160401b038160248401118184111715615c0d57505050506115e9565b82840192508251915080821115615c2757505050506115e9565b503d83016020828401011115615c3f575050506115e9565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114613a8c57600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a2646970667358221220f540d26841c40ddd1f27954b47aaa64f7ec5519fb4b4f9b16d43c26372e6e07e64736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101ed5760003560e01c80636c0360eb1161010d578063aa271e1a116100a0578063e985e9c51161006f578063e985e9c51461058a578063f242432a146105aa578063f2fde38b146105ca578063f5298aca146105ea578063ffc4e0a71461060a576101ed565b8063aa271e1a14610515578063cad96cca14610535578063e07f231914610555578063e8a3d48514610575576101ed565b80638da5cb5b116100dc5780638da5cb5b1461049e57806395d89b41146104c0578063983b2d56146104d5578063a22cb465146104f5576101ed565b80636c0360eb14610427578063715018a61461043c57806371e2a65714610451578063891be97414610471576101ed565b80632a55205a116101855780634e1273f4116101545780634e1273f41461039a57806355f804b3146103c757806361e05459146103e75780636b20c45414610407576101ed565b80632a55205a1461030c5780632d0335ab1461033a5780632eb2c2d61461035a5780633092afd51461037a576101ed565b80630e89341c116101c15780630e89341c1461028a5780630eaead67146102aa578063173c43d2146102cc578063220e4d73146102ec576101ed565b8062fdd58e146101f257806301ffc9a71461022857806306fdde03146102555780630c53c51c14610277575b600080fd5b3480156101fe57600080fd5b5061021261020d366004615211565b61062a565b60405161021f9190615b3a565b60405180910390f35b34801561023457600080fd5b5061024861024336600461530a565b61069c565b60405161021f919061588b565b34801561026157600080fd5b5061026a6106af565b60405161021f9190615896565b61026a610285366004615197565b61073e565b34801561029657600080fd5b5061026a6102a5366004615692565b610ab7565b3480156102b657600080fd5b506102ca6102c536600461563b565b610ac2565b005b3480156102d857600080fd5b506102ca6102e7366004615364565b610b66565b3480156102f857600080fd5b506102ca61030736600461542b565b610c16565b34801561031857600080fd5b5061032c6103273660046156eb565b610cd0565b60405161021f929190615827565b34801561034657600080fd5b50610212610355366004614f91565b610dde565b34801561036657600080fd5b506102ca610375366004614fe5565b610dfa565b34801561038657600080fd5b506102ca610395366004614f91565b6110f8565b3480156103a657600080fd5b506103ba6103b53660046152aa565b6111a8565b60405161021f9190615853565b3480156103d357600080fd5b506102ca6103e2366004615332565b611293565b3480156103f357600080fd5b506102ca610402366004615504565b611338565b34801561041357600080fd5b506102ca6104223660046150f4565b6113ce565b34801561043357600080fd5b5061026a611554565b34801561044857600080fd5b506102ca6115ec565b34801561045d57600080fd5b506102ca61046c366004615270565b611698565b34801561047d57600080fd5b5061049161048c366004615692565b611781565b60405161021f9190615840565b3480156104aa57600080fd5b506104b3611811565b60405161021f91906157dd565b3480156104cc57600080fd5b5061026a611820565b3480156104e157600080fd5b506102ca6104f0366004614f91565b61187c565b34801561050157600080fd5b506102ca610510366004615166565b611931565b34801561052157600080fd5b50610248610530366004614f91565b611a20565b34801561054157600080fd5b50610491610550366004615692565b611a3f565b34801561056157600080fd5b506102ca6105703660046156aa565b611aba565b34801561058157600080fd5b5061026a611afd565b34801561059657600080fd5b506102486105a5366004614fad565b611b59565b3480156105b657600080fd5b506102ca6105c536600461508e565b611b6c565b3480156105d657600080fd5b506102ca6105e5366004614f91565b611d25565b3480156105f657600080fd5b506102ca61060536600461523c565b611e28565b34801561061657600080fd5b506102ca6106253660046155d4565b611ea4565b60006001600160a01b0383166106715760405162461bcd60e51b815260040180806020018281038252602b815260200180615ce6602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b60006106a782611f4c565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b820191906000526020600020905b81548152906001019060200180831161071957829003601f168201915b505050505081565b6060600061074b86611feb565b90506000356001600160e01b031990811690821614156107b2576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102fb6020908152908490205483528201529081018790526107f08882888888612007565b61082b5760405162461bcd60e51b8152600401808060200182810382526021815260200180615efd6021913960400191505060405180910390fd5b6001600160a01b03881660009081526102fb60205260409020546108509060016120f1565b6102fb60008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106108bb5780518252601f19909201916020918201910161089c565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106109315780518252601f199092019160209182019101610912565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610993576040519150601f19603f3d011682016040523d82523d6000602084013e610998565b606091505b5091509150816109ef576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a6e578181015183820152602001610a56565b50505050905090810190601f168015610a9b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b60606106a78261214b565b6102965460ff1615610b56578260600151600081518110610adf57fe5b6020026020010151600001516001600160a01b0316610afc611811565b6001600160a01b03161480610b315750610b318360600151600081518110610b2057fe5b602002602001015160000151611a20565b610b565760405162461bcd60e51b8152600401610b4d906158d4565b60405180910390fd5b610b618383836122e1565b505050565b610b748686868686866125dd565b610bc1604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610bf561279f565b8787604051610c06939291906157f1565b60405180910390a1505050505050565b610c248787878787876125dd565b610c71604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff19169055610c8581611d25565b7fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610cae61279f565b8888604051610cbf939291906157f1565b60405180910390a150505050505050565b60008281526101fa60205260408120548190610cf157506000905080610dd7565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d6d57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610d1e565b50505050905080600081518110610d8057fe5b60209081029190910101515192506000805b8251811015610dcb57828181518110610da757fe5b6020026020010151602001516001600160601b031682019150806001019050610d92565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102fb602052604090205490565b8151835114610e3a5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f956028913960400191505060405180910390fd5b6001600160a01b038416610e7f5760405162461bcd60e51b8152600401808060200182810382526025815260200180615de96025913960400191505060405180910390fd5b610e8761279f565b6001600160a01b0316856001600160a01b03161480610ead5750610ead856105a561279f565b610ee85760405162461bcd60e51b8152600401808060200182810382526032815260200180615e0e6032913960400191505060405180910390fd5b6000610ef261279f565b9050610f028187878787876110f0565b60005b8451811015611008576000858281518110610f1c57fe5b602002602001015190506000858381518110610f3457fe5b60200260200101519050610fa1816040518060600160405280602a8152602001615eb3602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546127ae9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a1681522054610fd890826120f1565b60009283526097602090815260408085206001600160a01b038c1686529091529092209190915550600101610f05565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561108e578181015183820152602001611076565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156110cd5781810151838201526020016110b5565b5050505090500194505050505060405180910390a46110f0818787878787612845565b505050505050565b61110061279f565b6001600160a01b0316611111611811565b6001600160a01b03161461115a576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b606081518351146111ea5760405162461bcd60e51b8152600401808060200182810382526029815260200180615f6c6029913960400191505060405180910390fd5b600083516001600160401b038111801561120357600080fd5b5060405190808252806020026020018201604052801561122d578160200160208202803683370190505b50905060005b845181101561128b5761126c85828151811061124b57fe5b602002602001015185838151811061125f57fe5b602002602001015161062a565b82828151811061127857fe5b6020908102919091010152600101611233565b509392505050565b61129b61279f565b6001600160a01b03166112ac611811565b6001600160a01b0316146112f5576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6112fe81612abb565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d68160405161132d9190615896565b60405180910390a150565b6113468787878786866125dd565b611397604051806040016040528060168152602001754552433131353552617269626c65557365724d65746160501b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc610cae61279f565b80518251146113ef5760405162461bcd60e51b8152600401610b4d90615a83565b600082516001600160401b038111801561140857600080fd5b50604051908082528060200260200182016040528015611432578160200160208202803683370190505b509050600083516001600160401b038111801561144e57600080fd5b50604051908082528060200260200182016040528015611478578160200160208202803683370190505b50905060005b84518110156114ed576114b785828151811061149657fe5b60200260200101518583815181106114aa57fe5b6020026020010151612acf565b8483815181106114c357fe5b602002602001018484815181106114d657fe5b60209081029190910101919091525260010161147e565b506114f9858584612b44565b846001600160a01b031661150b61279f565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051611545929190615866565b60405180910390a35050505050565b61012f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b505050505090505b90565b6115f461279f565b6001600160a01b0316611605611811565b6001600160a01b03161461164e576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6116a061279f565b6001600160a01b03166116b1611811565b6001600160a01b0316146116fa576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b60005b815181101561177d57600082828151811061171457fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016116fd565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561180657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016117b7565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b61188461279f565b6001600160a01b0316611895611811565b6001600160a01b0316146118de576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b031661194361279f565b6001600160a01b031614156119895760405162461bcd60e51b8152600401808060200182810382526029815260200180615f436029913960400191505060405180910390fd5b806098600061199661279f565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556119da61279f565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa6020908152604080832080548251818502810185019093528083526060949293919290918401821561180657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016117b7565b816001600160a01b0316611acc61279f565b6001600160a01b031614611af25760405162461bcd60e51b8152600401610b4d9061598b565b610b61838383612bb8565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b6000611b658383612c64565b9392505050565b6001600160a01b038416611bb15760405162461bcd60e51b8152600401808060200182810382526025815260200180615de96025913960400191505060405180910390fd5b611bb961279f565b6001600160a01b0316856001600160a01b03161480611bdf5750611bdf856105a561279f565b611c1a5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b6000611c2461279f565b9050611c44818787611c3588612c90565b611c3e88612c90565b876110f0565b611c8b836040518060600160405280602a8152602001615eb3602a913960008781526097602090815260408083206001600160a01b038d16845290915290205491906127ae565b60008581526097602090815260408083206001600160a01b038b81168552925280832093909355871681522054611cc290846120f1565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a841693861692600080516020615cc683398151915292908290030190a46110f0818787878787612cd5565b611d2d61279f565b6001600160a01b0316611d3e611811565b6001600160a01b031614611d87576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b038116611dcc5760405162461bcd60e51b8152600401808060200182810382526026815260200180615d546026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600080611e358484612acf565b90925090508115611e4b57611e4b858584612e46565b8015611e9d57846001600160a01b0316611e6361279f565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051611545929190615b5c565b5050505050565b6000611eb484866000015161062a565b9050818115611eee578280831015611ec95750815b611ee9868689600001518460405180602001604052806000815250611b6c565b830390505b80156110f0578560600151600081518110611f0557fe5b6020026020010151600001516001600160a01b0316856001600160a01b031614611f415760405162461bcd60e51b8152600401610b4d906158a9565b6110f0868583610ac2565b60006001600160e01b03198216636db15a0f60e01b1480611f7d57506001600160e01b0319821663656cb66560e11b145b80611f9857506001600160e01b0319821663152a902d60e11b145b80611fb357506001600160e01b031982166301ffc9a760e01b145b80611fce57506001600160e01b03198216636cdb3d1360e11b145b806106a75750506001600160e01b0319166303a24d0760e21b1490565b6000815160001415611fff575060006106aa565b506020015190565b600080600161201d61201888612eba565b612f3d565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612074573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120d0576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611b65576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081815261012e6020908152604080832080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352606094938301828280156121e05780601f106121b5576101008083540402835291602001916121e0565b820191906000526020600020905b8154815290600101906020018083116121c357829003601f168201915b5050505050905060006121f1611554565b9050805160001415612205575090506106aa565b81511561221f576122168183612f89565b925050506106aa565b806122298561316e565b6040516020018083805190602001908083835b6020831061225b5780518252601f19909201916020918201910161223c565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106122a35780518252601f199092019160209182019101612284565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c60006122f061279f565b9050806001600160a01b0316826001600160a01b0316148061231757506123178282611b59565b6123335760405162461bcd60e51b8152600401610b4d906159da565b600083116123535760405162461bcd60e51b8152600401610b4d906159b0565b845160009081526101fc60205260409020546124bc57846060015160008151811061237a57fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146123b65760405162461bcd60e51b8152600401610b4d90615960565b60008560400151116123da5760405162461bcd60e51b8152600401610b4d90615901565b8460a0015151856060015151146123f057600080fd5b60006123fb86613248565b905060005b8660600151518110156124715760008760600151828151811061241f57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b0316146124685761246881848a60a00151858151811061245b57fe5b602002602001015161349b565b50600101612400565b50612484866000015187604001516134a6565b61249686600001518760800151613510565b6124a8866000015187606001516136ff565b6124ba866000015187602001516138ae565b505b6124db8486600001518560405180602001604052806000815250613972565b836001600160a01b0316826001600160a01b03161461258c57816001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615cc6833981519152886000015187604051612536929190615b5c565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b0316600080516020615cc683398151915288600001518760405161257f929190615b5c565b60405180910390a4611e9d565b836001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615cc68339815191528860000151876040516125ce929190615b5c565b60405180910390a45050505050565b600054610100900460ff16806125f657506125f6613984565b80612604575060005460ff16155b61263f5760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff1615801561266a576000805460ff1961ff0019909116610100171660011790555b612672613995565b61267a613a8f565b612682613a91565b61268a613b42565b612692613be2565b6126aa60405180602001604052806000815250613c25565b6126b384613cf0565b6126bb613a8f565b6126c3613d15565b6126cd8787613db2565b6126d5613a8f565b6126de85612abb565b6126e9836001613ddb565b6126f4826001613ddb565b8015612706576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030612749613e3b565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102fc819055505050565b60006127a9613e45565b905090565b6000818484111561283d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128025781810151838201526020016127ea565b50505050905090810190601f16801561282f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b612857846001600160a01b0316613ea1565b156110f057836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156128e55781810151838201526020016128cd565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561292457818101518382015260200161290c565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612960578181015183820152602001612948565b50505050905090810190601f16801561298d5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1580156129b257600080fd5b505af19250505080156129d757506040513d60208110156129d257600080fd5b505160015b612a6c576129e3615bb0565b806129ee5750612a35565b60405162461bcd60e51b81526020600482018181528351602484015283518493919283926044019190850190808383600083156128025781810151838201526020016127ea565b60405162461bcd60e51b8152600401808060200182810382526034815260200180615c6a6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146127065760405162461bcd60e51b8152600401808060200182810382526028815260200180615c9e6028913960400191505060405180910390fd5b805161177d9061012f906020840190614bd5565b806000606084901c612adf61279f565b6001600160a01b0316816001600160a01b03161415612b3c578391506000612b0686613ea7565b90508015612b2b576000612b1987613eba565b8203905080861115612b29578093505b505b612b358684613ecd565b8285039350505b509250929050565b612b4c61279f565b6001600160a01b0316836001600160a01b03161480612b725750612b72836105a561279f565b612bad5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b610b61838383613ee6565b60008381526101fa6020526040812054905b81811015611e9d5760008581526101fa6020526040902080546001600160a01b038616919083908110612bf957fe5b6000918252602090912001546001600160a01b03161415612c5c5760008581526101fa60205260409020805484919083908110612c3257fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612bca565b6001600160a01b038116600090815260c9602052604081205460ff1680611b655750611b658383614154565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612cc457fe5b602090810291909101015292915050565b612ce7846001600160a01b0316613ea1565b156110f057836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612d76578181015183820152602001612d5e565b50505050905090810190601f168015612da35780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612dc657600080fd5b505af1925050508015612deb57506040513d6020811015612de657600080fd5b505160015b612df7576129e3615bb0565b6001600160e01b0319811663f23a6e6160e01b146127065760405162461bcd60e51b8152600401808060200182810382526028815260200180615c9e6028913960400191505060405180910390fd5b612e4e61279f565b6001600160a01b0316836001600160a01b03161480612e745750612e74836105a561279f565b612eaf5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b610b61838383614182565b6000604051806080016040528060438152602001615d1160439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612f476142a3565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b805182516060918491849110156130545784846040516020018083805190602001908083835b60208310612fce5780518252601f199092019160209182019101612faf565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106130165780518252601f199092019160209182019101612ff7565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610696565b60005b82518110156131645782818151811061306c57fe5b602001015160f81c60f81b6001600160f81b03191682828151811061308d57fe5b01602001516001600160f81b0319161461315c5785856040516020018083805190602001908083835b602083106130d55780518252601f1990920191602091820191016130b6565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061311d5780518252601f1990920191602091820191016130fe565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350505050610696565b600101613057565b5092949350505050565b60608161319357506040805180820190915260018152600360fc1b60208201526106aa565b8160005b81156131ab57600101600a82049150613197565b6000816001600160401b03811180156131c357600080fd5b506040519080825280601f01601f1916602001820160405280156131ee576020820181803683370190505b50859350905060001982015b831561323f57600a840660300160f81b8282806001900393508151811061321d57fe5b60200101906001600160f81b031916908160001a905350600a840493506131fa565b50949350505050565b6000808260800151516001600160401b038111801561326657600080fd5b50604051908082528060200260200182016040528015613290578160200160208202803683370190505b50905060005b8360800151518110156132e2576132c3846080015182815181106132b657fe5b60200260200101516142aa565b8282815181106132cf57fe5b6020908102919091010152600101613296565b5060008360600151516001600160401b038111801561330057600080fd5b5060405190808252806020026020018201604052801561332a578160200160208202803683370190505b50905060005b84606001515181101561336f57613350856060015182815181106132b657fe5b82828151811061335c57fe5b6020908102919091010152600101613330565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b838110156133d85781810151838201526020016133c0565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b83811015613429578181015183820152602001613411565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b610b61838383614317565b60008281526101fc6020526040902054156134c057600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c906135049084908490615b5c565b60405180910390a15050565b6000805b82518110156136b45760006001600160a01b031683828151811061353457fe5b6020026020010151600001516001600160a01b0316141561359c576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b8281815181106135a857fe5b6020026020010151602001516001600160601b031660001415613612576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b82818151811061361e57fe5b6020026020010151602001516001600160601b0316820191506101fa600085815260200190815260200160002083828151811061365757fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501613514565b5061271081106136f55760405162461bcd60e51b8152600401808060200182810382526025815260200180615f1e6025913960400191505060405180910390fd5b610b618383614559565b60008281526101fb6020526040812090805b835181101561384d5760006001600160a01b031684828151811061373157fe5b6020026020010151600001516001600160a01b031614156137645760405162461bcd60e51b8152600401610b4d90615a4c565b83818151811061377057fe5b6020026020010151602001516001600160601b0316600014156137a55760405162461bcd60e51b8152600401610b4d9061592b565b828482815181106137b257fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b03199092169190911790921691909117905583516138439085908390811061381f57fe5b6020026020010151602001516001600160601b0316836120f190919063ffffffff16565b9150600101613711565b50806127101461386f5760405162461bcd60e51b8152600401610b4d90615aec565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f84846040516138a0929190615b43565b60405180910390a150505050565b600082815261012e6020908152604090912082516138ce92840190614bd5565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6138fa8461214b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561393457818101518382015260200161391c565b50505050905090810190601f1680156139615780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b61397e8484848461458a565b50505050565b600061398f30613ea1565b15905090565b600054610100900460ff16806139ae57506139ae613984565b806139bc575060005460ff16155b6139f75760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613a22576000805460ff1961ff0019909116610100171660011790555b6000613a2c61279f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015613a8c576000805461ff00191690555b50565b565b600054610100900460ff1680613aaa5750613aaa613984565b80613ab8575060005460ff16155b613af35760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613b1e576000805460ff1961ff0019909116610100171660011790555b613b2e6301ffc9a760e01b61469c565b8015613a8c576000805461ff001916905550565b600054610100900460ff1680613b5b5750613b5b613984565b80613b69575060005460ff16155b613ba45760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613b2e576000805460ff1961ff0019909116610100171660011790558015613a8c576000805461ff001916905550565b613a8f604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250614720565b600054610100900460ff1680613c3e5750613c3e613984565b80613c4c575060005460ff16155b613c875760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613cb2576000805460ff1961ff0019909116610100171660011790555b613cbb826147e2565b613ccb636cdb3d1360e11b61469c565b613cdb6303a24d0760e21b61469c565b801561177d576000805461ff00191690555050565b8051613d0490610230906020840190614bd5565b50613a8c63e8a3d48560e01b61469c565b600054610100900460ff1680613d2e5750613d2e613984565b80613d3c575060005460ff16155b613d775760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613da2576000805460ff1961ff0019909116610100171660011790555b613b2e63656cb66560e11b61469c565b8151613dc690610262906020850190614bd5565b508051610b6190610263906020840190614bd5565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b60006127a96147f5565b600033301415613e9c57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506115e99050565b503390565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b038316613f2b5760405162461bcd60e51b8152600401808060200182810382526023815260200180615e906023913960400191505060405180910390fd5b8051825114613f6b5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f956028913960400191505060405180910390fd5b6000613f7561279f565b9050613f95818560008686604051806020016040528060008152506110f0565b60005b83518110156140735761402a838281518110613fb057fe5b6020026020010151604051806060016040528060248152602001615d7a6024913960976000888681518110613fe157fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020546127ae9092919063ffffffff16565b6097600086848151811061403a57fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101613f98565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156140fa5781810151838201526020016140e2565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015614139578181015183820152602001614121565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b0383166141c75760405162461bcd60e51b8152600401808060200182810382526023815260200180615e906023913960400191505060405180910390fd5b60006141d161279f565b9050614201818560006141e387612c90565b6141ec87612c90565b604051806020016040528060008152506110f0565b61424882604051806060016040528060248152602001615d7a6024913960008681526097602090815260408083206001600160a01b038b16845290915290205491906127ae565b60008481526097602090815260408083206001600160a01b03808a1680865291845282852095909555815188815292830187905281519394909390861692600080516020615cc683398151915292908290030190a450505050565b6102fc5490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000614322836147f9565b9050600082516041141561433d5761433a8284614803565b90505b846001600160a01b0316816001600160a01b031614611e9d57614368856001600160a01b0316613ea1565b156144e15760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156143d75781810151838201526020016143bf565b50505050905090810190601f1680156144045780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561442257600080fd5b505afa158015614436573d6000803e3d6000fd5b505050506040513d602081101561444c57600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146144db5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156128025781810151838201526020016127ea565b50611e9d565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b815260048101938452825160248201528251929392839260449092019190808383600083156128025781810151838201526020016127ea565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613504929190615b43565b60008381526101fd60205260408120546145a59084906120f1565b60008581526101fc60205260409020549091508111156145d75760405162461bcd60e51b8152600401610b4d90615a22565b60008481526101fd602052604090208190556001600160a01b03851661460f5760405162461bcd60e51b8152600401610b4d90615aab565b600061461961279f565b905061463a8160008861462b89612c90565b61463489612c90565b886110f0565b60008581526097602090815260408083206001600160a01b038a16845290915290205461466790856120f1565b60008681526097602090815260408083206001600160a01b038b1684529091528120919091556110f090829088888888612cd5565b6001600160e01b031980821614156146fb576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806147395750614739613984565b80614747575060005460ff16155b6147825760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff161580156147ad576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912061016291909155610163558015610b61576000805461ff0019169055505050565b805161177d906099906020840190614bd5565b4690565b6000612f47614883565b6000815160411461485b576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a614879868285856148be565b9695505050505050565b60006127a97f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6148b1614b14565b6148b9614b1b565b614b22565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561491f5760405162461bcd60e51b8152600401808060200182810382526022815260200180615dc76022913960400191505060405180910390fd5b6000601e8560ff1611156149f9576004850360ff16601b148061494857506004850360ff16601c145b6149835760405162461bcd60e51b8152600401808060200182810382526022815260200180615e6e6022913960400191505060405180910390fd5b600161498e87614b84565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156149e8573d6000803e3d6000fd5b505050602060405103519050614ab0565b8460ff16601b1480614a0e57508460ff16601c145b614a495760405162461bcd60e51b8152600401808060200182810382526022815260200180615e6e6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614aa3573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116614b0b576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b6000838383614b2f6147f5565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614c0b5760008555614c51565b82601f10614c2457805160ff1916838001178555614c51565b82800160010185558215614c51579182015b82811115614c51578251825591602001919060010190614c36565b50614c5d929150614c61565b5090565b5b80821115614c5d5760008155600101614c62565b80356106aa81615c54565b600082601f830112614c91578081fd5b81356020614ca6614ca183615b8d565b615b6a565b8281528181019085830183850287018401881015614cc2578586fd5b855b85811015614ce9578135614cd781615c54565b84529284019290840190600101614cc4565b5090979650505050505050565b600082601f830112614d06578081fd5b81356020614d16614ca183615b8d565b82815281810190858301855b85811015614ce957614d39898684358b0101614e60565b84529284019290840190600101614d22565b600082601f830112614d5b578081fd5b81356020614d6b614ca183615b8d565b82815281810190858301604080860288018501891015614d89578687fd5b865b86811015614df85781838b031215614da1578788fd5b81518281018181106001600160401b0382111715614dbb57fe5b83528335614dc881615c54565b8152838701356001600160601b0381168114614de257898afd5b8188015285529385019391810191600101614d8b565b509198975050505050505050565b600082601f830112614e16578081fd5b81356020614e26614ca183615b8d565b8281528181019085830183850287018401881015614e42578586fd5b855b85811015614ce957813584529284019290840190600101614e44565b600082601f830112614e70578081fd5b81356001600160401b03811115614e8357fe5b614e96601f8201601f1916602001615b6a565b818152846020838601011115614eaa578283fd5b816020850160208301379081016020019190915292915050565b600060c08284031215614ed5578081fd5b614edf60c0615b6a565b90508135815260208201356001600160401b0380821115614eff57600080fd5b614f0b85838601614e60565b6020840152604084013560408401526060840135915080821115614f2e57600080fd5b614f3a85838601614d4b565b60608401526080840135915080821115614f5357600080fd5b614f5f85838601614d4b565b608084015260a0840135915080821115614f7857600080fd5b50614f8584828501614cf6565b60a08301525092915050565b600060208284031215614fa2578081fd5b8135611b6581615c54565b60008060408385031215614fbf578081fd5b8235614fca81615c54565b91506020830135614fda81615c54565b809150509250929050565b600080600080600060a08688031215614ffc578081fd5b853561500781615c54565b9450602086013561501781615c54565b935060408601356001600160401b0380821115615032578283fd5b61503e89838a01614e06565b94506060880135915080821115615053578283fd5b61505f89838a01614e06565b93506080880135915080821115615074578283fd5b5061508188828901614e60565b9150509295509295909350565b600080600080600060a086880312156150a5578283fd5b85356150b081615c54565b945060208601356150c081615c54565b9350604086013592506060860135915060808601356001600160401b038111156150e8578182fd5b61508188828901614e60565b600080600060608486031215615108578081fd5b833561511381615c54565b925060208401356001600160401b038082111561512e578283fd5b61513a87838801614e06565b9350604086013591508082111561514f578283fd5b5061515c86828701614e06565b9150509250925092565b60008060408385031215615178578182fd5b823561518381615c54565b915060208301358015158114614fda578182fd5b600080600080600060a086880312156151ae578283fd5b85356151b981615c54565b945060208601356001600160401b038111156151d3578384fd5b6151df88828901614e60565b9450506040860135925060608601359150608086013560ff81168114615203578182fd5b809150509295509295909350565b60008060408385031215615223578182fd5b823561522e81615c54565b946020939093013593505050565b600080600060608486031215615250578081fd5b833561525b81615c54565b95602085013595506040909401359392505050565b600060208284031215615281578081fd5b81356001600160401b03811115615296578182fd5b6152a284828501614c81565b949350505050565b600080604083850312156152bc578182fd5b82356001600160401b03808211156152d2578384fd5b6152de86838701614c81565b935060208501359150808211156152f3578283fd5b5061530085828601614e06565b9150509250929050565b60006020828403121561531b578081fd5b81356001600160e01b031981168114611b65578182fd5b600060208284031215615343578081fd5b81356001600160401b03811115615358578182fd5b6152a284828501614e60565b60008060008060008060c0878903121561537c578384fd5b86356001600160401b0380821115615392578586fd5b61539e8a838b01614e60565b975060208901359150808211156153b3578586fd5b6153bf8a838b01614e60565b965060408901359150808211156153d4578586fd5b6153e08a838b01614e60565b955060608901359150808211156153f5578283fd5b5061540289828a01614e60565b93505061541160808801614c76565b915061541f60a08801614c76565b90509295509295509295565b600080600080600080600060e0888a031215615445578485fd5b87356001600160401b038082111561545b578687fd5b6154678b838c01614e60565b985060208a013591508082111561547c578687fd5b6154888b838c01614e60565b975060408a013591508082111561549d578687fd5b6154a98b838c01614e60565b965060608a01359150808211156154be578283fd5b506154cb8a828b01614e60565b9450506154da60808901614c76565b92506154e860a08901614c76565b91506154f660c08901614c76565b905092959891949750929550565b600080600080600080600060e0888a03121561551e578081fd5b87356001600160401b0380821115615534578283fd5b6155408b838c01614e60565b985060208a0135915080821115615555578283fd5b6155618b838c01614e60565b975060408a0135915080821115615576578283fd5b6155828b838c01614e60565b965060608a0135915080821115615597578283fd5b6155a38b838c01614e60565b955060808a01359150808211156155b8578283fd5b506155c58a828b01614c81565b9350506154e860a08901614c76565b600080600080608085870312156155e9578182fd5b84356001600160401b038111156155fe578283fd5b61560a87828801614ec4565b945050602085013561561b81615c54565b9250604085013561562b81615c54565b9396929550929360600135925050565b60008060006060848603121561564f578081fd5b83356001600160401b03811115615664578182fd5b61567086828701614ec4565b935050602084013561568181615c54565b929592945050506040919091013590565b6000602082840312156156a3578081fd5b5035919050565b6000806000606084860312156156be578081fd5b8335925060208401356156d081615c54565b915060408401356156e081615c54565b809150509250925092565b600080604083850312156156fd578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561575857815180516001600160a01b031688528301516001600160601b0316838801526040909601959082019060010161571f565b509495945050505050565b6000815180845260208085019450808401835b8381101561575857815187529582019590820190600101615776565b60008151808452815b818110156157b75760208185018101518683018201520161579b565b818111156157c85782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038416815260606020820181905260009061581590830185615792565b82810360408401526148798185615792565b6001600160a01b03929092168252602082015260400190565b600060208252611b65602083018461570c565b600060208252611b656020830184615763565b6000604082526158796040830185615763565b8281036020840152614b0b8185615763565b901515815260200190565b600060208252611b656020830184615792565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526152a2604083018461570c565b918252602082015260400190565b6040518181016001600160401b0381118282101715615b8557fe5b604052919050565b60006001600160401b03821115615ba057fe5b5060209081020190565b60e01c90565b600060443d1015615bc0576115e9565b600481823e6308c379a0615bd48251615baa565b14615bde576115e9565b6040513d600319016004823e80513d6001600160401b038160248401118184111715615c0d57505050506115e9565b82840192508251915080821115615c2757505050506115e9565b503d83016020828401011115615c3f575050506115e9565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114613a8c57600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a2646970667358221220f540d26841c40ddd1f27954b47aaa64f7ec5519fb4b4f9b16d43c26372e6e07e64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "addMinter(address)": { + "details": "Add `minter` to the list of allowed minters." + }, + "addMinters(address[])": { + "details": "Add `minters` to the list of allowed minters." + }, + "balanceOf(address,uint256)": { + "details": "See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address." + }, + "balanceOfBatch(address[],uint256[])": { + "details": "See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length." + }, + "baseURI()": { + "details": "Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID." + }, + "isMinter(address)": { + "details": "Returns `true` if `account` has been granted to minters." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "removeMinter(address)": { + "details": "Revoke `_minter` from the list of allowed minters." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": { + "details": "See {IERC1155-safeBatchTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,uint256,bytes)": { + "details": "See {IERC1155-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC1155-setApprovalForAll}." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 307, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 364, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 25039, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_balances", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))" + }, + { + "astId": 25045, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_operatorApprovals", + "offset": 0, + "slot": "152", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 25047, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_uri", + "offset": 0, + "slot": "153", + "type": "t_string_storage" + }, + { + "astId": 26040, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "154", + "type": "t_array(t_uint256)47_storage" + }, + { + "astId": 24041, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "defaultApprovals", + "offset": 0, + "slot": "201", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 24091, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 24031, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 23834, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_tokenURIs", + "offset": 0, + "slot": "302", + "type": "t_mapping(t_uint256,t_string_storage)" + }, + { + "astId": 23836, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_baseURI", + "offset": 0, + "slot": "303", + "type": "t_string_storage" + }, + { + "astId": 23951, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 138, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "354", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "355", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "356", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26448, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "406", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26076, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "456", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 21496, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "royalties", + "offset": 0, + "slot": "506", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" + }, + { + "astId": 24128, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "creators", + "offset": 0, + "slot": "507", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" + }, + { + "astId": 24132, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "supply", + "offset": 0, + "slot": "508", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 24136, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "minted", + "offset": 0, + "slot": "509", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 24749, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "510", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22321, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "contractURI", + "offset": 0, + "slot": "560", + "type": "t_string_storage" + }, + { + "astId": 22353, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "561", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 23458, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "name", + "offset": 0, + "slot": "610", + "type": "t_string_storage" + }, + { + "astId": 23460, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "symbol", + "offset": 0, + "slot": "611", + "type": "t_string_storage" + }, + { + "astId": 23819, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "612", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22359, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "isPrivate", + "offset": 0, + "slot": "662", + "type": "t_bool" + }, + { + "astId": 22363, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "663", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 22488, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_minters", + "offset": 0, + "slot": "712", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 22605, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "713", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 19515, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "nonces", + "offset": 0, + "slot": "763", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 19517, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "domainSeparator", + "offset": 0, + "slot": "764", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)19269_storage)dyn_storage": { + "base": "t_struct(Part)19269_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)47_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct LibPart.Part[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(Part)19269_storage)dyn_storage" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_uint256,t_string_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => string)", + "numberOfBytes": "32", + "value": "t_string_storage" + }, + "t_mapping(t_uint256,t_uint256)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Part)19269_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 19266, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 19268, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Proxy.json new file mode 100644 index 000000000..0d9d415d6 --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Proxy.json @@ -0,0 +1,301 @@ +{ + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1124696", + "logsBloom": "0x00000400000000000000000000000020400000000400800000800000000000000000000000000000000000000000000000000000000040000100000000000000000000000000008000000000000002000001000000000800004000000000000000004000020000000000001080000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000100004000000000000000000000000000000000020000200000000010001000000000080000400000000000000000020000001000000000010000000000000800000000000000000001000000001000000", + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f", + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000a36e6ee8c5eebfb1738fb78ce3d09562869f58a4" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + }, + { + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + }, + { + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + }, + { + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + }, + { + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + }, + { + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" + ], + "data": "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 5, + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + }, + { + "transactionIndex": 1, + "blockNumber": 2308803, + "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + } + ], + "blockNumber": 2308803, + "cumulativeGasUsed": "1171597", + "status": 1, + "byzantium": true + }, + "args": [ + "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC20TransferProxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC20TransferProxy.json new file mode 100644 index 000000000..d3275b757 --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC20TransferProxy.json @@ -0,0 +1,281 @@ +{ + "address": "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__ERC20TransferProxy_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ERC20TransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "erc20safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x93ece19b0f24320085d80805d0ba7072750226ef3261b452096db85eaa12fb14", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "697645", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x4eb4db72d127cf6129d3fb8e97588026a014965bd6a1c93317ac5456f021a6c6", + "transactionHash": "0x93ece19b0f24320085d80805d0ba7072750226ef3261b452096db85eaa12fb14", + "logs": [], + "blockNumber": 2308715, + "cumulativeGasUsed": "744546", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__ERC20TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC20TransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"erc20safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":\"ERC20TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __ERC20TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x2fce5fa6025c24a87072eed4cec6ff8e9172ec7b72ca211286904847adf4a324\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610b0f806100206000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80639870d7fe116100665780639870d7fe1461011d5780639d5c7b6b14610143578063ac8a584a14610169578063e814f46d1461018f578063f2fde38b146101b55761009e565b80632ff26a0a146100a3578063715018a6146100ad57806375978127146100b5578063776062c3146100bd5780638da5cb5b146100f9575b600080fd5b6100ab6101db565b005b6100ab61028d565b6100ab610339565b6100ab600480360360808110156100d357600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356103ce565b61010161051d565b604080516001600160a01b039092168252519081900360200190f35b6100ab6004803603602081101561013357600080fd5b50356001600160a01b031661052c565b6100ab6004803603602081101561015957600080fd5b50356001600160a01b03166105b2565b6100ab6004803603602081101561017f57600080fd5b50356001600160a01b0316610666565b6100ab600480360360208110156101a557600080fd5b50356001600160a01b03166106e9565b6100ab600480360360208110156101cb57600080fd5b50356001600160a01b0316610786565b600054610100900460ff16806101f457506101f4610889565b80610202575060005460ff16155b61023d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610268576000805460ff1961ff0019909116610100171660011790555b61027061089a565b61027861093a565b801561028a576000805461ff00191690555b50565b610295610a33565b6001600160a01b03166102a661051d565b6001600160a01b0316146102ef576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103525750610352610889565b80610360575060005460ff16155b61039b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156103c6576000805460ff1961ff0019909116610100171660011790555b6102786101db565b606560006103da610a33565b6001600160a01b0316815260208101919091526040016000205460ff166104325760405162461bcd60e51b8152600401808060200182810382526028815260200180610ab26028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561049a57600080fd5b505af11580156104ae573d6000803e3d6000fd5b505050506040513d60208110156104c457600080fd5b5051610517576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b610534610a33565b6001600160a01b031661054561051d565b6001600160a01b03161461058e576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806105cb57506105cb610889565b806105d9575060005460ff16155b6106145760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff1615801561063f576000805460ff1961ff0019909116610100171660011790555b6106476101db565b61065082610786565b8015610662576000805461ff00191690555b5050565b61066e610a33565b6001600160a01b031661067f61051d565b6001600160a01b0316146106c8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806107025750610702610889565b80610710575060005460ff16155b61074b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610776576000805460ff1961ff0019909116610100171660011790555b61077e61089a565b61064761093a565b61078e610a33565b6001600160a01b031661079f61051d565b6001600160a01b0316146107e8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03811661082d5760405162461bcd60e51b8152600401808060200182810382526026815260200180610a3e6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061089430610a37565b15905090565b600054610100900460ff16806108b357506108b3610889565b806108c1575060005460ff16155b6108fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610278576000805460ff1961ff001990911661010017166001179055801561028a576000805461ff001916905550565b600054610100900460ff16806109535750610953610889565b80610961575060005460ff16155b61099c5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156109c7576000805460ff1961ff0019909116610100171660011790555b60006109d1610a33565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561028a576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220597fa1b0869f6e9a9c201e77b523de7b663d5ce8e581f4023871dace183130a564736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80639870d7fe116100665780639870d7fe1461011d5780639d5c7b6b14610143578063ac8a584a14610169578063e814f46d1461018f578063f2fde38b146101b55761009e565b80632ff26a0a146100a3578063715018a6146100ad57806375978127146100b5578063776062c3146100bd5780638da5cb5b146100f9575b600080fd5b6100ab6101db565b005b6100ab61028d565b6100ab610339565b6100ab600480360360808110156100d357600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356103ce565b61010161051d565b604080516001600160a01b039092168252519081900360200190f35b6100ab6004803603602081101561013357600080fd5b50356001600160a01b031661052c565b6100ab6004803603602081101561015957600080fd5b50356001600160a01b03166105b2565b6100ab6004803603602081101561017f57600080fd5b50356001600160a01b0316610666565b6100ab600480360360208110156101a557600080fd5b50356001600160a01b03166106e9565b6100ab600480360360208110156101cb57600080fd5b50356001600160a01b0316610786565b600054610100900460ff16806101f457506101f4610889565b80610202575060005460ff16155b61023d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610268576000805460ff1961ff0019909116610100171660011790555b61027061089a565b61027861093a565b801561028a576000805461ff00191690555b50565b610295610a33565b6001600160a01b03166102a661051d565b6001600160a01b0316146102ef576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103525750610352610889565b80610360575060005460ff16155b61039b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156103c6576000805460ff1961ff0019909116610100171660011790555b6102786101db565b606560006103da610a33565b6001600160a01b0316815260208101919091526040016000205460ff166104325760405162461bcd60e51b8152600401808060200182810382526028815260200180610ab26028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561049a57600080fd5b505af11580156104ae573d6000803e3d6000fd5b505050506040513d60208110156104c457600080fd5b5051610517576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b610534610a33565b6001600160a01b031661054561051d565b6001600160a01b03161461058e576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806105cb57506105cb610889565b806105d9575060005460ff16155b6106145760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff1615801561063f576000805460ff1961ff0019909116610100171660011790555b6106476101db565b61065082610786565b8015610662576000805461ff00191690555b5050565b61066e610a33565b6001600160a01b031661067f61051d565b6001600160a01b0316146106c8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806107025750610702610889565b80610710575060005460ff16155b61074b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610776576000805460ff1961ff0019909116610100171660011790555b61077e61089a565b61064761093a565b61078e610a33565b6001600160a01b031661079f61051d565b6001600160a01b0316146107e8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03811661082d5760405162461bcd60e51b8152600401808060200182810382526026815260200180610a3e6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061089430610a37565b15905090565b600054610100900460ff16806108b357506108b3610889565b806108c1575060005460ff16155b6108fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610278576000805460ff1961ff001990911661010017166001179055801561028a576000805461ff001916905550565b600054610100900460ff16806109535750610953610889565b80610961575060005460ff16155b61099c5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156109c7576000805460ff1961ff0019909116610100171660011790555b60006109d1610a33565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561028a576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220597fa1b0869f6e9a9c201e77b523de7b663d5ce8e581f4023871dace183130a564736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19884, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721LazyMintTransferProxy.json new file mode 100644 index 000000000..3ffa2d5db --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721LazyMintTransferProxy.json @@ -0,0 +1,293 @@ +{ + "address": "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ERC721LazyMintTransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "asset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xd98a190be58e2f1f42ccdf8046f171bc5a091cfa4a022aec719325c60231c51b", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "935371", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x5fd552e3917ec41f339a2ee31c0b39db391c3648ca0ad5c307fcb62e0438f04c", + "transactionHash": "0xd98a190be58e2f1f42ccdf8046f171bc5a091cfa4a022aec719325c60231c51b", + "logs": [], + "blockNumber": 2308724, + "cumulativeGasUsed": "982260", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC721LazyMintTransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":\"ERC721LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n\\n function __ERC721LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\\n }\\n}\\n\",\"keccak256\":\"0x454e275be5d03f236ad96f9a2392e928d3397aad056dad7640fc1500867911a4\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610f4a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100d05780639870d7fe146100ee578063ac8a584a14610101578063e814f46d146100bd578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b5578063795c7aaa146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ae0565b6101d9565b6100a06102f7565b6100a06100cb3660046109d0565b6103a3565b6100d861045f565b6040516100e59190610ca9565b60405180910390f35b6100a06100fc3660046109d0565b61046e565b6100a061010f3660046109d0565b6104f4565b6100a06101223660046109d0565b610577565b600054610100900460ff1680610140575061014061067a565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc61068b565b6101c461072b565b80156101d6576000805461ff00191690555b50565b606560006101e5610824565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eed6028913960400191505060405180910390fd5b826020015160011461026a5760405162461bcd60e51b815260040161026190610cbd565b60405180910390fd5b60008084600001516020015180602001905181019061028991906109ec565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb29906102be90849088908890600401610ce9565b600060405180830381600087803b1580156102d857600080fd5b505af11580156102ec573d6000803e3d6000fd5b505050505050505050565b6102ff610824565b6001600160a01b031661031061045f565b6001600160a01b031614610359576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103bc57506103bc61067a565b806103ca575060005460ff16155b6104055760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff16158015610430576000805460ff1961ff0019909116610100171660011790555b61043861068b565b61044061072b565b61044982610577565b801561045b576000805461ff00191690555b5050565b6033546001600160a01b031690565b610476610824565b6001600160a01b031661048761045f565b6001600160a01b0316146104d0576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104fc610824565b6001600160a01b031661050d61045f565b6001600160a01b031614610556576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61057f610824565b6001600160a01b031661059061045f565b6001600160a01b0316146105d9576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03811661061e5760405162461bcd60e51b8152600401808060200182810382526026815260200180610e796026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061068530610828565b15905090565b600054610100900460ff16806106a457506106a461067a565b806106b2575060005460ff16155b6106ed5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff1680610744575061074461067a565b80610752575060005460ff16155b61078d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156107b8576000805460ff1961ff0019909116610100171660011790555b60006107c2610824565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061084561084084610e11565b610dcf565b905082815283838301111561085957600080fd5b610867836020830184610e33565b9392505050565b803561082d81610e63565b600082601f830112610889578081fd5b8151602061089961084083610df3565b82815281810190858301855b858110156108e3578151880189603f8201126108bf578788fd5b6108d08a8783015160408401610832565b85525092840192908401906001016108a5565b5090979650505050505050565b600082601f830112610900578081fd5b8151602061091061084083610df3565b8281528181019085830160408086028801850189101561092e578687fd5b865b868110156109a35781838b031215610946578788fd5b815182810181811067ffffffffffffffff8211171561096157fe5b8352835161096e81610e63565b8152838701516bffffffffffffffffffffffff8116811461098d57898afd5b8188015285529385019391810191600101610930565b509198975050505050505050565b600082601f8301126109c1578081fd5b61086783835160208501610832565b6000602082840312156109e1578081fd5b813561086781610e63565b600080604083850312156109fe578081fd5b8251610a0981610e63565b602084015190925067ffffffffffffffff80821115610a26578283fd5b9084019060a08287031215610a39578283fd5b610a4360a0610dcf565b82518152602083015182811115610a58578485fd5b610a64888286016109b1565b602083015250604083015182811115610a7b578485fd5b610a87888286016108f0565b604083015250606083015182811115610a9e578485fd5b610aaa888286016108f0565b606083015250608083015182811115610ac1578485fd5b610acd88828601610879565b6080830152508093505050509250929050565b600080600060608486031215610af4578081fd5b833567ffffffffffffffff80821115610b0b578283fd5b81860191506040808389031215610b20578384fd5b80518181018181108482111715610b3357fe5b808352843584811115610b44578687fd5b8501808b03841315610b54578687fd5b608083018281108682111715610b6657fe5b845280356001600160e01b031981168114610b7f578788fd5b825260208181013586811115610b93578889fd5b82019550601f86018c13610ba5578788fd5b85359150610bb561084083610e11565b8281528c82848901011115610bc8578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bf7818c0161086e565b985050505050610c0881880161086e565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c7257815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c34565b509495945050505050565b60008151808452610c95816020860160208601610e33565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610d11610100850182610c7d565b90506040870151605f19808684030160a0870152610d2f8383610c21565b925060608901519150808684030160c0870152610d4c8383610c21565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610da457601f19868303018452610d92828651610c7d565b94870194938701939150600101610d76565b508096505050505050610db981840186610c14565b50610dc76040830184610c14565b949350505050565b60405181810167ffffffffffffffff81118282101715610deb57fe5b604052919050565b600067ffffffffffffffff821115610e0757fe5b5060209081020190565b600067ffffffffffffffff821115610e2557fe5b50601f01601f191660200190565b60005b83811015610e4e578181015183820152602001610e36565b83811115610e5d576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a70ad50617bc7d86721e59644bb144857ba8df35926720d11f324896d0ef12f264736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100d05780639870d7fe146100ee578063ac8a584a14610101578063e814f46d146100bd578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b5578063795c7aaa146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ae0565b6101d9565b6100a06102f7565b6100a06100cb3660046109d0565b6103a3565b6100d861045f565b6040516100e59190610ca9565b60405180910390f35b6100a06100fc3660046109d0565b61046e565b6100a061010f3660046109d0565b6104f4565b6100a06101223660046109d0565b610577565b600054610100900460ff1680610140575061014061067a565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc61068b565b6101c461072b565b80156101d6576000805461ff00191690555b50565b606560006101e5610824565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eed6028913960400191505060405180910390fd5b826020015160011461026a5760405162461bcd60e51b815260040161026190610cbd565b60405180910390fd5b60008084600001516020015180602001905181019061028991906109ec565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb29906102be90849088908890600401610ce9565b600060405180830381600087803b1580156102d857600080fd5b505af11580156102ec573d6000803e3d6000fd5b505050505050505050565b6102ff610824565b6001600160a01b031661031061045f565b6001600160a01b031614610359576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103bc57506103bc61067a565b806103ca575060005460ff16155b6104055760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff16158015610430576000805460ff1961ff0019909116610100171660011790555b61043861068b565b61044061072b565b61044982610577565b801561045b576000805461ff00191690555b5050565b6033546001600160a01b031690565b610476610824565b6001600160a01b031661048761045f565b6001600160a01b0316146104d0576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104fc610824565b6001600160a01b031661050d61045f565b6001600160a01b031614610556576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61057f610824565b6001600160a01b031661059061045f565b6001600160a01b0316146105d9576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03811661061e5760405162461bcd60e51b8152600401808060200182810382526026815260200180610e796026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061068530610828565b15905090565b600054610100900460ff16806106a457506106a461067a565b806106b2575060005460ff16155b6106ed5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff1680610744575061074461067a565b80610752575060005460ff16155b61078d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156107b8576000805460ff1961ff0019909116610100171660011790555b60006107c2610824565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061084561084084610e11565b610dcf565b905082815283838301111561085957600080fd5b610867836020830184610e33565b9392505050565b803561082d81610e63565b600082601f830112610889578081fd5b8151602061089961084083610df3565b82815281810190858301855b858110156108e3578151880189603f8201126108bf578788fd5b6108d08a8783015160408401610832565b85525092840192908401906001016108a5565b5090979650505050505050565b600082601f830112610900578081fd5b8151602061091061084083610df3565b8281528181019085830160408086028801850189101561092e578687fd5b865b868110156109a35781838b031215610946578788fd5b815182810181811067ffffffffffffffff8211171561096157fe5b8352835161096e81610e63565b8152838701516bffffffffffffffffffffffff8116811461098d57898afd5b8188015285529385019391810191600101610930565b509198975050505050505050565b600082601f8301126109c1578081fd5b61086783835160208501610832565b6000602082840312156109e1578081fd5b813561086781610e63565b600080604083850312156109fe578081fd5b8251610a0981610e63565b602084015190925067ffffffffffffffff80821115610a26578283fd5b9084019060a08287031215610a39578283fd5b610a4360a0610dcf565b82518152602083015182811115610a58578485fd5b610a64888286016109b1565b602083015250604083015182811115610a7b578485fd5b610a87888286016108f0565b604083015250606083015182811115610a9e578485fd5b610aaa888286016108f0565b606083015250608083015182811115610ac1578485fd5b610acd88828601610879565b6080830152508093505050509250929050565b600080600060608486031215610af4578081fd5b833567ffffffffffffffff80821115610b0b578283fd5b81860191506040808389031215610b20578384fd5b80518181018181108482111715610b3357fe5b808352843584811115610b44578687fd5b8501808b03841315610b54578687fd5b608083018281108682111715610b6657fe5b845280356001600160e01b031981168114610b7f578788fd5b825260208181013586811115610b93578889fd5b82019550601f86018c13610ba5578788fd5b85359150610bb561084083610e11565b8281528c82848901011115610bc8578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bf7818c0161086e565b985050505050610c0881880161086e565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c7257815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c34565b509495945050505050565b60008151808452610c95816020860160208601610e33565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610d11610100850182610c7d565b90506040870151605f19808684030160a0870152610d2f8383610c21565b925060608901519150808684030160c0870152610d4c8383610c21565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610da457601f19868303018452610d92828651610c7d565b94870194938701939150600101610d76565b508096505050505050610db981840186610c14565b50610dc76040830184610c14565b949350505050565b60405181810167ffffffffffffffff81118282101715610deb57fe5b604052919050565b600067ffffffffffffffff821115610e0757fe5b5060209081020190565b600067ffffffffffffffff821115610e2557fe5b50601f01601f191660200190565b60005b83811015610e4e578181015183820152602001610e36565b83811115610e5d576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a70ad50617bc7d86721e59644bb144857ba8df35926720d11f324896d0ef12f264736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19884, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleFactoryC2.json new file mode 100644 index 000000000..42f02edb3 --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleFactoryC2.json @@ -0,0 +1,396 @@ +{ + "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_beacon", + "type": "address" + }, + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create721RaribleProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create721RaribleUserProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "beacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xe93796a20ba7dd7af4dcefbca7ffb2547f0cb1b35b1a662aee34a87fdc9404c2", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1374604", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000010000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000041000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x71286fb855dce6976a81d9ce3a10fa3043e6ff5c15e1a26917f773968efd52b4", + "transactionHash": "0xe93796a20ba7dd7af4dcefbca7ffb2547f0cb1b35b1a662aee34a87fdc9404c2", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2308794, + "transactionHash": "0xe93796a20ba7dd7af4dcefbca7ffb2547f0cb1b35b1a662aee34a87fdc9404c2", + "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x71286fb855dce6976a81d9ce3a10fa3043e6ff5c15e1a26917f773968efd52b4" + }, + { + "transactionIndex": 1, + "blockNumber": 2308794, + "transactionHash": "0xe93796a20ba7dd7af4dcefbca7ffb2547f0cb1b35b1a662aee34a87fdc9404c2", + "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x71286fb855dce6976a81d9ce3a10fa3043e6ff5c15e1a26917f773968efd52b4" + } + ], + "blockNumber": 2308794, + "cumulativeGasUsed": "1421505", + "status": 1, + "byzantium": true + }, + "args": [ + "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":\"ERC721RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-721-minimal/ERC721RaribleMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC721Rarible token.\\n *\\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC721RaribleFactoryC2 is Ownable {\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create721RaribleProxy(address proxy);\\n event Create721RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n transferOwnership(initialOwner);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleProxy(beaconProxy);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that private contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n}\\n\",\"keccak256\":\"0x6fd15e5905a37d0a07d5ca73e818d8a54f29b58b241c3ea82255e3ef98f83043\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721BaseMinimal.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = true;\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x6d5c6aa0e1b36eb2bde4584ff91f87a5411e4931e022b55966bda85c169008b9\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620017f7380380620017f7833981016040819052620000349162000205565b600062000040620000cb565b600080546001600160a01b0319166001600160a01b038316908117825560405192935091600080516020620017d7833981519152908290a350600180546001600160a01b038087166001600160a01b031992831617909255600280548684169083161790556003805492851692909116919091179055620000c181620000cf565b5050505062000261565b3390565b620000d9620000cb565b6001600160a01b0316620000ec620001d9565b6001600160a01b03161462000148576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166200018f5760405162461bcd60e51b8152600401808060200182810382526026815260200180620017b16026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020620017d783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b80516001600160a01b03811681146200020057600080fd5b919050565b600080600080608085870312156200021b578384fd5b6200022685620001e8565b93506200023660208601620001e8565b92506200024660408601620001e8565b91506200025660608601620001e8565b905092959194509250565b61154080620002716000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220c6da39aa047c7bcc743388596f3312d9e6c5276f87af5dbcc961f12ecaecb5ef64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220c6da39aa047c7bcc743388596f3312d9e6c5276f87af5dbcc961f12ecaecb5ef64736f6c63430007060033", + "devdoc": { + "details": "This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.", + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23081, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "beacon", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23083, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "transferProxy", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23085, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "lazyTransferProxy", + "offset": 0, + "slot": "3", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMeta.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta.json similarity index 93% rename from projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMeta.json rename to projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta.json index 3b98de69c..887042c36 100644 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMeta.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta.json @@ -1,5 +1,5 @@ { - "address": "0x5A3Ed919C18137dcC67fBEA707d7E41F3E498BEF", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", "abi": [ { "anonymous": false, @@ -487,6 +487,49 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC721Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1222,122 +1265,137 @@ "type": "constructor" } ], - "transactionHash": "0xfaf9fe66bdc377d10c2a026c66425b8947b488af8ea787813dfb61eaebe36dc7", + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", "receipt": { - "to": null, - "from": "0xC66D094eD928f7840A6B0d373c1cd825C97e3C7c", - "contractAddress": "0x4c3e9C2cCa64224803Baaa8CFd1Bc5466f604Df2", - "transactionIndex": 0, - "gasUsed": "1080029", - "logsBloom": "0x00001000000000000000000000000080404000000000000010800000000000004000000000000000000000000000000000000000000400000000000000000000000000000000000000000004000002000001000000000000000000000000000000000000028000000000001000000800002000800000000000000000000001400000001000000000000200400000000000000000000000000000000000800000000000000000000000800000000000000000000000000000000000000000000000000020000000000000000400000000000000000400000000000000000020000000100000000020000000000000000000000000000000010000000001001000", - "blockHash": "0x2d9cfa1f63a903e01f58cbcfa4431f10405ad64569f874644533062df1a836e3", - "transactionHash": "0xfaf9fe66bdc377d10c2a026c66425b8947b488af8ea787813dfb61eaebe36dc7", + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1123036", + "logsBloom": "0x00000400000800000000000000000000400000000400800010800000000000000000000000000000000000000001000000000000000440000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000408000002800000000000000000000000000000000000100004000000000000000000000000000100000020000300000000000001000000000000000400000040000000000020000000000000000060000000000000000000000000000000000000000001000000", + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371", + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", "logs": [ { - "transactionIndex": 0, - "blockNumber": 17742677, - "transactionHash": "0xfaf9fe66bdc377d10c2a026c66425b8947b488af8ea787813dfb61eaebe36dc7", - "address": "0x4c3e9C2cCa64224803Baaa8CFd1Bc5466f604Df2", + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000008c7a78155c042ed40408417787271f7ec231c609" + "0x0000000000000000000000003dc700b8bd71fcd8b80914e10b561c15816f71ac" ], "data": "0x", "logIndex": 0, - "blockHash": "0x2d9cfa1f63a903e01f58cbcfa4431f10405ad64569f874644533062df1a836e3" + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" }, { - "transactionIndex": 0, - "blockNumber": 17742677, - "transactionHash": "0xfaf9fe66bdc377d10c2a026c66425b8947b488af8ea787813dfb61eaebe36dc7", - "address": "0x4c3e9C2cCa64224803Baaa8CFd1Bc5466f604Df2", + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000c66d094ed928f7840a6b0d373c1cd825c97e3c7c" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", "logIndex": 1, - "blockHash": "0x2d9cfa1f63a903e01f58cbcfa4431f10405ad64569f874644533062df1a836e3" + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" }, { - "transactionIndex": 0, - "blockNumber": 17742677, - "transactionHash": "0xfaf9fe66bdc377d10c2a026c66425b8947b488af8ea787813dfb61eaebe36dc7", - "address": "0x4c3e9C2cCa64224803Baaa8CFd1Bc5466f604Df2", + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000b1f7e606d3e0668ee1ac3f5b22eb761a9c8ab26b" + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 2, - "blockHash": "0x2d9cfa1f63a903e01f58cbcfa4431f10405ad64569f874644533062df1a836e3" + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" }, { - "transactionIndex": 0, - "blockNumber": 17742677, - "transactionHash": "0xfaf9fe66bdc377d10c2a026c66425b8947b488af8ea787813dfb61eaebe36dc7", - "address": "0x4c3e9C2cCa64224803Baaa8CFd1Bc5466f604Df2", + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x00000000000000000000000055dd5a85d0b880ea54346bbab089cef864ec2fbc" + "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 3, - "blockHash": "0x2d9cfa1f63a903e01f58cbcfa4431f10405ad64569f874644533062df1a836e3" + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" }, { - "transactionIndex": 0, - "blockNumber": 17742677, - "transactionHash": "0xfaf9fe66bdc377d10c2a026c66425b8947b488af8ea787813dfb61eaebe36dc7", - "address": "0x4c3e9C2cCa64224803Baaa8CFd1Bc5466f604Df2", + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", "topics": [ - "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], - "data": "0x000000000000000000000000c66d094ed928f7840a6b0d373c1cd825c97e3c7c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "data": "0x", "logIndex": 4, - "blockHash": "0x2d9cfa1f63a903e01f58cbcfa4431f10405ad64569f874644533062df1a836e3" + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" }, { - "transactionIndex": 0, - "blockNumber": 17742677, - "transactionHash": "0xfaf9fe66bdc377d10c2a026c66425b8947b488af8ea787813dfb61eaebe36dc7", - "address": "0x4c3e9C2cCa64224803Baaa8CFd1Bc5466f604Df2", + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", "topics": [ - "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca65f6f4affc1f321d6b31dfb7122b143fab4545", + "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", "logIndex": 5, - "blockHash": "0x2d9cfa1f63a903e01f58cbcfa4431f10405ad64569f874644533062df1a836e3" + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + }, + { + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" } ], - "blockNumber": 17742677, - "cumulativeGasUsed": "1080029", + "blockNumber": 2308785, + "cumulativeGasUsed": "1175525", "status": 1, "byzantium": true }, "args": [ - "0x8c7A78155c042eD40408417787271f7Ec231c609", - "0xcA65f6F4AfFC1F321D6B31DFB7122B143FAB4545", - "0x3db397c600000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000b1f7e606d3e0668ee1ac3f5b22eb761a9c8ab26b00000000000000000000000055dd5a85d0b880ea54346bbab089cef864ec2fbc000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", "execute": { - "methodName": "__ERC721Rarible_init", + "methodName": "__ERC721Rarible_init_proxy", "args": [ "Rarible", "RARI", "ipfs:/", "", - "0xB1F7E606D3e0668Ee1Ac3f5B22eB761a9C8AB26b", - "0x55dD5a85D0B880EA54346BBAB089ceF864Ec2fBC" + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ] }, - "implementation": "0x8c7A78155c042eD40408417787271f7Ec231c609", + "implementation": "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Implementation.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Implementation.json new file mode 100644 index 000000000..40e5d4c0a --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Implementation.json @@ -0,0 +1,1667 @@ +{ + "address": "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC721Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x5ba431ce4c9ffed2aaaee83b7efd8e64c1e1f2ecdbaaff5ea798de007b9ccd08", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "4791813", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x38f4ce212f7115dd864a7d5ef8032c4d7c5e97be07b01f0b07fc9338c37760ce", + "transactionHash": "0x5ba431ce4c9ffed2aaaee83b7efd8e64c1e1f2ecdbaaff5ea798de007b9ccd08", + "logs": [], + "blockNumber": 2308781, + "cumulativeGasUsed": "4838714", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC721Rarible_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"burn(uint256)\":{\"details\":\"Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\":\"ERC721RaribleMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\\n using SafeMath for uint256;\\n\\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\\\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\\\"));\\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\\\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\\\");\\n\\n mapping(address => uint256) private nonces;\\n bytes32 internal domainSeparator;\\n\\n /*\\n * Meta transaction structure.\\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\\n * He should call the desired function directly in that case.\\n */\\n struct MetaTransaction {\\n uint256 nonce;\\n address from;\\n bytes functionSignature;\\n }\\n\\n /*\\n * Domain structure.\\n * Data(information to for making metaTransaction method uniq.) about method and contract\\n */\\n struct EIP712Domain {\\n string name;\\n string version;\\n address verifyingContract;\\n bytes32 salt;\\n }\\n\\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\\n\\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\\n domainSeparator = keccak256(abi.encode(\\n EIP712_DOMAIN_TYPEHASH,\\n keccak256(bytes(name)),\\n keccak256(bytes(version)),\\n address(this),\\n getSalt()\\n ));\\n }\\n\\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\\n if (inBytes.length == 0) {\\n return 0x0;\\n }\\n\\n assembly {\\n outBytes4 := mload(add(inBytes, 32))\\n }\\n }\\n\\n function executeMetaTransaction(address userAddress,\\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\\n require(destinationFunctionSig != msg.sig, \\\"Wrong functionSignature\\\");\\n MetaTransaction memory metaTx = MetaTransaction({\\n nonce : nonces[userAddress],\\n from : userAddress,\\n functionSignature : functionSignature\\n });\\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \\\"Signer and signature do not match\\\");\\n nonces[userAddress] = nonces[userAddress].add(1);\\n // Append userAddress at the end to extract it from calling context\\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\\n\\n require(success, \\\"Function call not successful\\\");\\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\\n return returnData;\\n }\\n\\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n META_TRANSACTION_TYPEHASH,\\n metaTx.nonce,\\n metaTx.from,\\n keccak256(metaTx.functionSignature)\\n ));\\n }\\n\\n function getNonce(address user) external view returns (uint256 nonce) {\\n nonce = nonces[user];\\n }\\n\\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\\n require(signer != address(0), \\\"Invalid signature\\\");\\n return signer == user;\\n }\\n\\n function _msgSender() internal view virtual override returns (address payable sender) {\\n if (msg.sender == address(this)) {\\n bytes memory array = msg.data;\\n uint256 index = msg.data.length;\\n assembly {\\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\\n }\\n } else {\\n sender = msg.sender;\\n }\\n return sender;\\n }\\n\\n function getSalt() internal pure returns (bytes32) {\\n return bytes32(getChainID());\\n }\\n\\n function getChainID() internal pure returns (uint256 id) {\\n assembly {\\n id := chainid()\\n }\\n }\\n\\n function getDomainSeparator() private view returns (bytes32) {\\n return domainSeparator;\\n }\\n\\n /**\\n * Accept message hash and returns hash message in EIP712 compatible form\\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\\n * https://eips.ethereum.org/EIPS/eip-712\\n * \\\"\\\\\\\\x19\\\" makes the encoding deterministic\\n * \\\"\\\\\\\\x01\\\" is the version byte to make it compatible to EIP-191\\n */\\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", getDomainSeparator(), messageHash));\\n }\\n\\n /**\\n * @dev verifies the call result and bubbles up revert reason for failed calls\\n *\\n * @param success : outcome of forwarded call\\n * @param returndata : returned data from the frowarded call\\n * @param errorMessage : fallback error message to show\\n */\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\\n if (!success) {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x58924a44eea8720bdcfb32f12d3374deac9605a3b75cb8872907856d526bde10\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\\\";\\nimport \\\"../ERC721BaseMinimal.sol\\\";\\nimport \\\"../../IsPrivateCollection.sol\\\";\\nimport \\\"../../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC721RaribleUserMeta\\\", \\\"1\\\");\\n\\n isPrivate = true;\\n\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC721RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC721RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\\n }\\n\\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\\n return super._msgSender();\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x8c1956eda6ce9c45b465280defb27fa3e6b8307d389334729effdb6e206e8e77\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506153f6806100206000396000f3fe6080604052600436106102045760003560e01c806370a0823111610118578063aa271e1a116100a0578063e07f23191161006f578063e07f2319146105df578063e8a3d485146105ff578063e985e9c514610614578063f2fde38b14610634578063ff14a3541461065457610204565b8063aa271e1a1461055f578063b88d4fde1461057f578063c87b56dd1461059f578063cad96cca146105bf57610204565b8063891be974116100e7578063891be974146104c85780638da5cb5b146104f557806395d89b411461050a578063983b2d561461051f578063a22cb4651461053f57610204565b806370a0823114610453578063715018a61461047357806371e2a65714610488578063832fbb29146104a857610204565b80632d0335ab1161019b57806342966c681161016a57806342966c68146103be5780634648eb9d146103de57806355f804b3146103fe5780636352211e1461041e5780636c0360eb1461043e57610204565b80632d0335ab146103315780633092afd51461035e5780633db397c61461037e57806342842e0e1461039e57610204565b80630c53c51c116101d75780630c53c51c146102b057806322a775b6146102c357806323b872dd146102e35780632a55205a1461030357610204565b806301ffc9a71461020957806306fdde031461023f578063081812fc14610261578063095ea7b31461028e575b600080fd5b34801561021557600080fd5b506102296102243660046148c5565b610674565b6040516102369190614dab565b60405180910390f35b34801561024b57600080fd5b50610254610687565b6040516102369190614db6565b34801561026d57600080fd5b5061028161027c366004614c34565b61071e565b6040516102369190614d35565b34801561029a57600080fd5b506102ae6102a9366004614868565b610781565b005b6102546102be3660046147ee565b610857565b3480156102cf57600080fd5b506102ae6102de366004614b8f565b610bd0565b3480156102ef57600080fd5b506102ae6102fe366004614714565b610c72565b34801561030f57600080fd5b5061032361031e366004614c72565b610cc9565b604051610236929190614d7f565b34801561033d57600080fd5b5061035161034c3660046146c0565b610dd7565b6040516102369190614f7c565b34801561036a57600080fd5b506102ae6103793660046146c0565b610df3565b34801561038a57600080fd5b506102ae61039936600461491f565b610ea3565b3480156103aa57600080fd5b506102ae6103b9366004614714565b610f52565b3480156103ca57600080fd5b506102ae6103d9366004614c34565b610f6d565b3480156103ea57600080fd5b506102ae6103f9366004614abf565b611037565b34801561040a57600080fd5b506102ae6104193660046148ed565b6110ee565b34801561042a57600080fd5b50610281610439366004614c34565b611193565b34801561044a57600080fd5b506102546111e7565b34801561045f57600080fd5b5061035161046e3660046146c0565b611249565b34801561047f57600080fd5b506102ae6112ad565b34801561049457600080fd5b506102ae6104a3366004614893565b611359565b3480156104b457600080fd5b506102ae6104c3366004614bd3565b61143e565b3480156104d457600080fd5b506104e86104e3366004614c34565b6114b9565b6040516102369190614d98565b34801561050157600080fd5b50610281611549565b34801561051657600080fd5b50610254611558565b34801561052b57600080fd5b506102ae61053a3660046146c0565b6115b9565b34801561054b57600080fd5b506102ae61055a3660046147bd565b61166e565b34801561056b57600080fd5b5061022961057a3660046146c0565b611774565b34801561058b57600080fd5b506102ae61059a366004614754565b611793565b3480156105ab57600080fd5b506102546105ba366004614c34565b6117f1565b3480156105cb57600080fd5b506104e86105da366004614c34565b6117fc565b3480156105eb57600080fd5b506102ae6105fa366004614c4c565b611877565b34801561060b57600080fd5b506102546118ba565b34801561062057600080fd5b5061022961062f3660046146dc565b611949565b34801561064057600080fd5b506102ae61064f3660046146c0565b61195e565b34801561066057600080fd5b506102ae61066f3660046149e6565b611a61565b600061067f82611b02565b90505b919050565b60fd8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b820191906000526020600020905b8154815290600101906020018083116106f657829003601f168201915b505050505090505b90565b600061072982611bbc565b6107645760405162461bcd60e51b815260040180806020018281038252602c815260200180615209602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b600061078c82611193565b9050806001600160a01b0316836001600160a01b031614156107df5760405162461bcd60e51b815260040180806020018281038252602181526020018061531a6021913960400191505060405180910390fd5b806001600160a01b03166107f1611bd9565b6001600160a01b0316148061080d575061080d8161062f611bd9565b6108485760405162461bcd60e51b81526004018080602001828103825260388152602001806151016038913960400191505060405180910390fd5b6108528383611be8565b505050565b6060600061086486611c57565b90506000356001600160e01b031990811690821614156108cb576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102f76020908152908490205483528201529081018790526109098882888888611c73565b6109445760405162461bcd60e51b81526004018080602001828103825260218152602001806152aa6021913960400191505060405180910390fd5b6001600160a01b03881660009081526102f76020526040902054610969906001611d5d565b6102f760008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106109d45780518252601f1990920191602091820191016109b5565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610a4a5780518252601f199092019160209182019101610a2b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610aac576040519150601f19603f3d011682016040523d82523d6000602084013e610ab1565b606091505b509150915081610b08576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b87578181015183820152602001610b6f565b50505050905090810190601f168015610bb45780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b6102925460ff1615610c64578160400151600081518110610bed57fe5b6020026020010151600001516001600160a01b0316610c0a611549565b6001600160a01b03161480610c3f5750610c3f8260400151600081518110610c2e57fe5b602002602001015160000151611774565b610c645760405162461bcd60e51b8152600401610c5b90614df4565b60405180910390fd5b610c6e8282611db7565b5050565b610c83610c7d611bd9565b82611f39565b610cbe5760405162461bcd60e51b815260040180806020018281038252603181526020018061533b6031913960400191505060405180910390fd5b610852838383611f45565b60008281526101c660205260408120548190610cea57506000905080610dd0565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d6657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610d17565b50505050905080600081518110610d7957fe5b60209081029190910101515192506000805b8251811015610dc457828181518110610da057fe5b6020026020010151602001516001600160601b031682019150806001019050610d8b565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102f7602052604090205490565b610dfb611bd9565b6001600160a01b0316610e0c611549565b6001600160a01b031614610e55576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b610eb1868686868686612064565b610efd6040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd610f31611bd9565b8787604051610f4293929190614d49565b60405180910390a1505050505050565b61085283838360405180602001604052806000815250611793565b610f7681611bbc565b610fe557606081901c610f87611bd9565b6001600160a01b0316816001600160a01b031614610fd65760405162461bcd60e51b815260040180806020018281038252602d8152602001806151dc602d913960400191505060405180910390fd5b610fdf8261220e565b50611034565b610ff0610c7d611bd9565b61102b5760405162461bcd60e51b81526004018080602001828103825260308152602001806153916030913960400191505060405180910390fd5b6110348161222a565b50565b611045878787878686612064565b6110956040518060400160405280601581526020017445524337323152617269626c65557365724d65746160581b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e99136110cc611bd9565b88886040516110dd93929190614d49565b60405180910390a150505050505050565b6110f6611bd9565b6001600160a01b0316611107611549565b6001600160a01b031614611150576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b611159816122c6565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d6816040516111889190614db6565b60405180910390a150565b600081815260ff60205260408120546001600160a01b03168061067f5760405162461bcd60e51b81526004018080602001828103825260298152602001806151636029913960400191505060405180910390fd5b6101c88054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b60006001600160a01b0382166112905760405162461bcd60e51b815260040180806020018281038252602a815260200180615139602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b6112b5611bd9565b6001600160a01b03166112c6611549565b6001600160a01b03161461130f576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b611361611bd9565b6001600160a01b0316611372611549565b6001600160a01b0316146113bb576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b60005b8151811015610c6e5760008282815181106113d557fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016113be565b825161144990611bbc565b156114625761145d82828560000151610f52565b610852565b826040015160008151811061147357fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146114af5760405162461bcd60e51b8152600401610c5b90614dc9565b6108528382610bd0565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561153e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114ef565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b6115c1611bd9565b6001600160a01b03166115d2611549565b6001600160a01b03161461161b576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b611676611bd9565b6001600160a01b0316826001600160a01b031614156116dc576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006116ea611bd9565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561172e611bd9565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b6117a461179e611bd9565b83611f39565b6117df5760405162461bcd60e51b815260040180806020018281038252603181526020018061533b6031913960400191505060405180910390fd5b6117eb848484846122da565b50505050565b606061067f8261232c565b60008181526101c66020908152604080832080548251818502810185019093528083526060949293919290918401821561153e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114ef565b816001600160a01b0316611889611bd9565b6001600160a01b0316146118af5760405162461bcd60e51b8152600401610c5b90614e81565b610852838383612337565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156119415780601f1061191657610100808354040283529160200191611941565b820191906000526020600020905b81548152906001019060200180831161192457829003601f168201915b505050505081565b600061195583836123e3565b90505b92915050565b611966611bd9565b6001600160a01b0316611977611549565b6001600160a01b0316146119c0576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b038116611a055760405162461bcd60e51b81526004018080602001828103825260268152602001806150696026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b611a6f878787878787612064565b611abb6040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff19169055611acf8161195e565b7ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd8188886040516110dd93929190614d49565b60006001600160e01b03198216638486f69f60e01b1480611b3357506001600160e01b0319821663656cb66560e11b145b80611b4e57506001600160e01b0319821663152a902d60e11b145b80611b6957506001600160e01b031982166301ffc9a760e01b145b80611b8457506001600160e01b031982166380ac58cd60e01b145b80611b9f57506001600160e01b03198216635b5e139f60e01b145b8061067f5750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b6000611be3612410565b905090565b60008181526101016020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c1e82611193565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000815160001415611c6b57506000610682565b506020015190565b6000806001611c89611c848861246c565b6124ef565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ce0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611d3c576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611955576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b815160601c6000611dc6611bd9565b90508360400151600081518110611dd957fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611e155760405162461bcd60e51b8152600401610c5b90614e56565b83608001515184604001515114611e2b57600080fd5b806001600160a01b0316826001600160a01b03161480611e505750611e508282611949565b611e6c5760405162461bcd60e51b8152600401610c5b90614edd565b6000611e778561253b565b905060005b856040015151811015611eed57600086604001518281518110611e9b57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611ee457611ee4818489608001518581518110611ed757fe5b6020026020010151612782565b50600101611e7c565b50611efc84866000015161278d565b611f0e856000015186606001516127a7565b611f2085600001518660400151612996565b611f3285600001518660200151612b45565b5050505050565b60006119558383612ba9565b826001600160a01b0316611f5882611193565b6001600160a01b031614611f9d5760405162461bcd60e51b81526004018080602001828103825260298152602001806152816029913960400191505060405180910390fd5b6001600160a01b038216611fe25760405162461bcd60e51b815260040180806020018281038252602481526020018061508f6024913960400191505060405180910390fd5b611fed838383610852565b611ff8600082611be8565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b031916821790559251849392916000805160206152fa83398151915291a4505050565b600054610100900460ff168061207d575061207d612bd6565b8061208b575060005460ff16155b6120c65760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff161580156120f1576000805460ff1961ff0019909116610100171660011790555b6120fa856122c6565b612102612be7565b61210a612c88565b612112612be7565b61211a612d25565b612122612dc2565b61212a612be7565b612132612ebb565b61213a612f8a565b61214384612f8c565b61214d8787612fb1565b61215883600161309c565b61216382600161309c565b8015612175576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab782805190602001208280519060200120306121b86130fd565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102f8819055505050565b600090815261010360205260409020805460ff19166001179055565b600061223582611193565b905061224381600084610852565b61224e600083611be8565b61225782613107565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b031916905561229c8261220e565b60405182906000906001600160a01b038416906000805160206152fa833981519152908390a45050565b8051610c6e906101c8906020840190614328565b6122e5848484611f45565b6122f184848484613110565b6117eb5760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b606061067f826132c6565b60008381526101c66020526040812054905b81811015611f325760008581526101c66020526040902080546001600160a01b03861691908390811061237857fe5b6000918252602090912001546001600160a01b031614156123db5760008581526101c6602052604090208054849190839081106123b157fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612349565b6001600160a01b038116600090815261012f602052604081205460ff1680611955575061195583836134a1565b60003330141561246757600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061071b9050565b503390565b600060405180608001604052806043815260200161502660439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60006124f96134d0565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000808260600151516001600160401b038111801561255957600080fd5b50604051908082528060200260200182016040528015612583578160200160208202803683370190505b50905060005b8360600151518110156125d5576125b6846060015182815181106125a957fe5b60200260200101516134d7565b8282815181106125c257fe5b6020908102919091010152600101612589565b5060008360400151516001600160401b03811180156125f357600080fd5b5060405190808252806020026020018201604052801561261d578160200160208202803683370190505b50905060005b84604001515181101561266257612643856040015182815181106125a957fe5b82828151811061264f57fe5b6020908102919091010152600101612623565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b838110156126c65781810151838201526020016126ae565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b838110156127175781810151838201526020016126ff565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b610852838383613544565b610c6e8282604051806020016040528060008152506137c3565b6000805b825181101561294b5760006001600160a01b03168382815181106127cb57fe5b6020026020010151600001516001600160a01b03161415612833576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b82818151811061283f57fe5b6020026020010151602001516001600160601b0316600014156128a9576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b8281815181106128b557fe5b6020026020010151602001516001600160601b0316820191506101c660008581526020019081526020016000208382815181106128ee57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b03199093169290921716179055016127ab565b50612710811061298c5760405162461bcd60e51b815260040180806020018281038252602581526020018061536c6025913960400191505060405180910390fd5b6108528383613815565b60008281526101fb6020526040812090805b8351811015612ae45760006001600160a01b03168482815181106129c857fe5b6020026020010151600001516001600160a01b031614156129fb5760405162461bcd60e51b8152600401610c5b90614ea6565b838181518110612a0757fe5b6020026020010151602001516001600160601b031660001415612a3c5760405162461bcd60e51b8152600401610c5b90614e21565b82848281518110612a4957fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612ada90859083908110612ab657fe5b6020026020010151602001516001600160601b031683611d5d90919063ffffffff16565b91506001016129a8565b508061271014612b065760405162461bcd60e51b8152600401610c5b90614f2e565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612b37929190614f85565b60405180910390a150505050565b612b4e82611bbc565b612b895760405162461bcd60e51b815260040180806020018281038252602c815260200180615235602c913960400191505060405180910390fd5b60008281526101c760209081526040909120825161085292840190614328565b6001600160a01b038216600090815261012f602052604081205460ff168061195557506119558383613852565b6000612be1306138ee565b15905090565b600054610100900460ff1680612c005750612c00612bd6565b80612c0e575060005460ff16155b612c495760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612c74576000805460ff1961ff0019909116610100171660011790555b8015611034576000805461ff001916905550565b600054610100900460ff1680612ca15750612ca1612bd6565b80612caf575060005460ff16155b612cea5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612d15576000805460ff1961ff0019909116610100171660011790555b612c7463656cb66560e11b6138f4565b600054610100900460ff1680612d3e5750612d3e612bd6565b80612d4c575060005460ff16155b612d875760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612db2576000805460ff1961ff0019909116610100171660011790555b612c746301ffc9a760e01b6138f4565b600054610100900460ff1680612ddb5750612ddb612bd6565b80612de9575060005460ff16155b612e245760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612e4f576000805460ff1961ff0019909116610100171660011790555b6000612e59611bd9565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611034576000805461ff001916905550565b600054610100900460ff1680612ed45750612ed4612bd6565b80612ee2575060005460ff16155b612f1d5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612f48576000805460ff1961ff0019909116610100171660011790555b612c74604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b815250613978565b565b8051612fa09061022e906020840190614328565b5061103463e8a3d48560e01b6138f4565b600054610100900460ff1680612fca5750612fca612bd6565b80612fd8575060005460ff16155b6130135760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff1615801561303e576000805460ff1961ff0019909116610100171660011790555b82516130519060fd906020860190614328565b5081516130659060fe906020850190614328565b506130766380ac58cd60e01b6138f4565b613086635b5e139f60e01b6138f4565b8015610852576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b6000611be3613a38565b61103481613a3c565b6000613124846001600160a01b03166138ee565b156132ba57836001600160a01b031663150b7a02613140611bd9565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156131b357818101518382015260200161319b565b50505050905090810190601f1680156131e05780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561320257600080fd5b505af192505050801561322757506040513d602081101561322257600080fd5b505160015b6132a0573d808015613255576040519150601f19603f3d011682016040523d82523d6000602084013e61325a565b606091505b5080516132985760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506132be565b5060015b949350505050565b60606132d182611bbc565b61330c5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152cb602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156133a05780601f10613375576101008083540402835291602001916133a0565b820191906000526020600020905b81548152906001019060200180831161338357829003601f168201915b5050505050905060006133b16111e7565b90508051600014156133c557509050610682565b8151156133df576133d68183613a45565b92505050610682565b806133e985613c2a565b6040516020018083805190602001908083835b6020831061341b5780518252601f1990920191602091820191016133fc565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106134635780518252601f199092019160209182019101613444565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b6102f85490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b600061354f83613d04565b9050600082516041141561356a576135678284613d0e565b90505b846001600160a01b0316816001600160a01b031614611f3257613595856001600160a01b03166138ee565b1561374b5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156136045781810151838201526020016135ec565b50505050905090810190601f1680156136315780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561364f57600080fd5b505afa158015613663573d6000803e3d6000fd5b505050506040513d602081101561367957600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146137455760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561370a5781810151838201526020016136f2565b50505050905090810190601f1680156137375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611f32565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b8152600481019384528251602482015282519293928392604490920191908083836000831561370a5781810151838201526020016136f2565b6137cd8383613d8e565b6137da6000848484613110565b6108525760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613846929190614f85565b60405180910390a15050565b600061385d82611bbc565b6138985760405162461bcd60e51b815260040180806020018281038252602c8152602001806150d5602c913960400191505060405180910390fd5b60006138a383611193565b9050806001600160a01b0316846001600160a01b031614806138de5750836001600160a01b03166138d38461071e565b6001600160a01b0316145b806132be57506132be8185611949565b3b151590565b6001600160e01b03198082161415613953576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806139915750613991612bd6565b8061399f575060005460ff16155b6139da5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015613a05576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015610852576000805461ff0019169055505050565b4690565b61103481613ef4565b80518251606091849184911015613b105784846040516020018083805190602001908083835b60208310613a8a5780518252601f199092019160209182019101613a6b565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613ad25780518252601f199092019160209182019101613ab3565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050611958565b60005b8251811015613c2057828181518110613b2857fe5b602001015160f81c60f81b6001600160f81b031916828281518110613b4957fe5b01602001516001600160f81b03191614613c185785856040516020018083805190602001908083835b60208310613b915780518252601f199092019160209182019101613b72565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613bd95780518252601f199092019160209182019101613bba565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350505050611958565b600101613b13565b5092949350505050565b606081613c4f57506040805180820190915260018152600360fc1b6020820152610682565b8160005b8115613c6757600101600a82049150613c53565b6000816001600160401b0381118015613c7f57600080fd5b506040519080825280601f01601f191660200182016040528015613caa576020820181803683370190505b50859350905060001982015b8315613cfb57600a840660300160f81b82828060019003935081518110613cd957fe5b60200101906001600160f81b031916908160001a905350600a84049350613cb6565b50949350505050565b60006124f9613f34565b60008151604114613d66576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a613d8486828585613f6f565b9695505050505050565b6001600160a01b038216613de9576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff1615613e45576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b613e4e81611bbc565b15613ea0576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613eac60008383610852565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b0319169091179055610c6e82826141c5565b60008181526101c7602052604090205460026000196101006001841615020190911604156110345760008181526101c760205260408120611034916143b4565b6000611be37f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613f626141cf565b613f6a6141d5565b6141db565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613fd05760405162461bcd60e51b81526004018080602001828103825260228152602001806150b36022913960400191505060405180910390fd5b6000601e8560ff1611156140aa576004850360ff16601b1480613ff957506004850360ff16601c145b6140345760405162461bcd60e51b81526004018080602001828103825260228152602001806151ba6022913960400191505060405180910390fd5b600161403f8761423d565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614099573d6000803e3d6000fd5b505050602060405103519050614161565b8460ff16601b14806140bf57508460ff16601c145b6140fa5760405162461bcd60e51b81526004018080602001828103825260228152602001806151ba6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614154573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166141bc576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b610c6e828261428e565b60975490565b60985490565b60008383836141e8613a38565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b03831681146142fd5760405182906001600160a01b038316906000906000805160206152fa833981519152908290a481836001600160a01b0316826001600160a01b03166000805160206152fa83398151915260405160405180910390a4610852565b60405182906001600160a01b038516906000906000805160206152fa833981519152908290a4505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261435e57600085556143a4565b82601f1061437757805160ff19168380011785556143a4565b828001600101855582156143a4579182015b828111156143a4578251825591602001919060010190614389565b506143b09291506143f4565b5090565b50805460018160011615610100020316600290046000825580601f106143da5750611034565b601f01602090049060005260206000209081019061103491905b5b808211156143b057600081556001016143f5565b803561068281614fde565b600082601f830112614424578081fd5b8135602061443961443483614fc1565b614f9e565b8281528181019085830183850287018401881015614455578586fd5b855b8581101561447c57813561446a81614fde565b84529284019290840190600101614457565b5090979650505050505050565b600082601f830112614499578081fd5b813560206144a961443483614fc1565b82815281810190858301855b8581101561447c576144cc898684358b0101614599565b845292840192908401906001016144b5565b600082601f8301126144ee578081fd5b813560206144fe61443483614fc1565b8281528181019085830160408086028801850189101561451c578687fd5b865b8681101561458b5781838b031215614534578788fd5b81518281018181106001600160401b038211171561454e57fe5b8352833561455b81614fde565b8152838701356001600160601b038116811461457557898afd5b818801528552938501939181019160010161451e565b509198975050505050505050565b600082601f8301126145a9578081fd5b81356001600160401b038111156145bc57fe5b6145cf601f8201601f1916602001614f9e565b8181528460208386010111156145e3578283fd5b816020850160208301379081016020019190915292915050565b600060a0828403121561460e578081fd5b61461860a0614f9e565b90508135815260208201356001600160401b038082111561463857600080fd5b61464485838601614599565b6020840152604084013591508082111561465d57600080fd5b614669858386016144de565b6040840152606084013591508082111561468257600080fd5b61468e858386016144de565b606084015260808401359150808211156146a757600080fd5b506146b484828501614489565b60808301525092915050565b6000602082840312156146d1578081fd5b813561195581614fde565b600080604083850312156146ee578081fd5b82356146f981614fde565b9150602083013561470981614fde565b809150509250929050565b600080600060608486031215614728578081fd5b833561473381614fde565b9250602084013561474381614fde565b929592945050506040919091013590565b60008060008060808587031215614769578182fd5b843561477481614fde565b9350602085013561478481614fde565b92506040850135915060608501356001600160401b038111156147a5578182fd5b6147b187828801614599565b91505092959194509250565b600080604083850312156147cf578182fd5b82356147da81614fde565b915060208301358015158114614709578182fd5b600080600080600060a08688031215614805578283fd5b853561481081614fde565b945060208601356001600160401b0381111561482a578384fd5b61483688828901614599565b9450506040860135925060608601359150608086013560ff8116811461485a578182fd5b809150509295509295909350565b6000806040838503121561487a578182fd5b823561488581614fde565b946020939093013593505050565b6000602082840312156148a4578081fd5b81356001600160401b038111156148b9578182fd5b6132be84828501614414565b6000602082840312156148d6578081fd5b81356001600160e01b031981168114611955578182fd5b6000602082840312156148fe578081fd5b81356001600160401b03811115614913578182fd5b6132be84828501614599565b60008060008060008060c08789031215614937578384fd5b86356001600160401b038082111561494d578586fd5b6149598a838b01614599565b9750602089013591508082111561496e578586fd5b61497a8a838b01614599565b9650604089013591508082111561498f578586fd5b61499b8a838b01614599565b955060608901359150808211156149b0578283fd5b506149bd89828a01614599565b9350506149cc60808801614409565b91506149da60a08801614409565b90509295509295509295565b600080600080600080600060e0888a031215614a00578485fd5b87356001600160401b0380821115614a16578687fd5b614a228b838c01614599565b985060208a0135915080821115614a37578687fd5b614a438b838c01614599565b975060408a0135915080821115614a58578687fd5b614a648b838c01614599565b965060608a0135915080821115614a79578283fd5b50614a868a828b01614599565b945050614a9560808901614409565b9250614aa360a08901614409565b9150614ab160c08901614409565b905092959891949750929550565b600080600080600080600060e0888a031215614ad9578081fd5b87356001600160401b0380821115614aef578283fd5b614afb8b838c01614599565b985060208a0135915080821115614b10578283fd5b614b1c8b838c01614599565b975060408a0135915080821115614b31578283fd5b614b3d8b838c01614599565b965060608a0135915080821115614b52578283fd5b614b5e8b838c01614599565b955060808a0135915080821115614b73578283fd5b50614b808a828b01614414565b935050614aa360a08901614409565b60008060408385031215614ba1578182fd5b82356001600160401b03811115614bb6578283fd5b614bc2858286016145fd565b925050602083013561470981614fde565b600080600060608486031215614be7578081fd5b83356001600160401b03811115614bfc578182fd5b614c08868287016145fd565b9350506020840135614c1981614fde565b91506040840135614c2981614fde565b809150509250925092565b600060208284031215614c45578081fd5b5035919050565b600080600060608486031215614c60578081fd5b833592506020840135614c1981614fde565b60008060408385031215614c84578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614cdf57815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614ca6565b509495945050505050565b60008151808452815b81811015614d0f57602081850181015186830182015201614cf3565b81811115614d205782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614d6d90830185614cea565b8281036040840152613d848185614cea565b6001600160a01b03929092168252602082015260400190565b6000602082526119556020830184614c93565b901515815260200190565b6000602082526119556020830184614cea565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526132be6040830184614c93565b6040518181016001600160401b0381118282101715614fb957fe5b604052919050565b60006001600160401b03821115614fd457fe5b5060209081020190565b6001600160a01b038116811461103457600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e5369676e657220616e64207369676e617475726520646f206e6f74206d617463684552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220f5990a22763c1b208eac60f3e6497209cfc0e77387e5cf0f890a08218d603c9464736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106102045760003560e01c806370a0823111610118578063aa271e1a116100a0578063e07f23191161006f578063e07f2319146105df578063e8a3d485146105ff578063e985e9c514610614578063f2fde38b14610634578063ff14a3541461065457610204565b8063aa271e1a1461055f578063b88d4fde1461057f578063c87b56dd1461059f578063cad96cca146105bf57610204565b8063891be974116100e7578063891be974146104c85780638da5cb5b146104f557806395d89b411461050a578063983b2d561461051f578063a22cb4651461053f57610204565b806370a0823114610453578063715018a61461047357806371e2a65714610488578063832fbb29146104a857610204565b80632d0335ab1161019b57806342966c681161016a57806342966c68146103be5780634648eb9d146103de57806355f804b3146103fe5780636352211e1461041e5780636c0360eb1461043e57610204565b80632d0335ab146103315780633092afd51461035e5780633db397c61461037e57806342842e0e1461039e57610204565b80630c53c51c116101d75780630c53c51c146102b057806322a775b6146102c357806323b872dd146102e35780632a55205a1461030357610204565b806301ffc9a71461020957806306fdde031461023f578063081812fc14610261578063095ea7b31461028e575b600080fd5b34801561021557600080fd5b506102296102243660046148c5565b610674565b6040516102369190614dab565b60405180910390f35b34801561024b57600080fd5b50610254610687565b6040516102369190614db6565b34801561026d57600080fd5b5061028161027c366004614c34565b61071e565b6040516102369190614d35565b34801561029a57600080fd5b506102ae6102a9366004614868565b610781565b005b6102546102be3660046147ee565b610857565b3480156102cf57600080fd5b506102ae6102de366004614b8f565b610bd0565b3480156102ef57600080fd5b506102ae6102fe366004614714565b610c72565b34801561030f57600080fd5b5061032361031e366004614c72565b610cc9565b604051610236929190614d7f565b34801561033d57600080fd5b5061035161034c3660046146c0565b610dd7565b6040516102369190614f7c565b34801561036a57600080fd5b506102ae6103793660046146c0565b610df3565b34801561038a57600080fd5b506102ae61039936600461491f565b610ea3565b3480156103aa57600080fd5b506102ae6103b9366004614714565b610f52565b3480156103ca57600080fd5b506102ae6103d9366004614c34565b610f6d565b3480156103ea57600080fd5b506102ae6103f9366004614abf565b611037565b34801561040a57600080fd5b506102ae6104193660046148ed565b6110ee565b34801561042a57600080fd5b50610281610439366004614c34565b611193565b34801561044a57600080fd5b506102546111e7565b34801561045f57600080fd5b5061035161046e3660046146c0565b611249565b34801561047f57600080fd5b506102ae6112ad565b34801561049457600080fd5b506102ae6104a3366004614893565b611359565b3480156104b457600080fd5b506102ae6104c3366004614bd3565b61143e565b3480156104d457600080fd5b506104e86104e3366004614c34565b6114b9565b6040516102369190614d98565b34801561050157600080fd5b50610281611549565b34801561051657600080fd5b50610254611558565b34801561052b57600080fd5b506102ae61053a3660046146c0565b6115b9565b34801561054b57600080fd5b506102ae61055a3660046147bd565b61166e565b34801561056b57600080fd5b5061022961057a3660046146c0565b611774565b34801561058b57600080fd5b506102ae61059a366004614754565b611793565b3480156105ab57600080fd5b506102546105ba366004614c34565b6117f1565b3480156105cb57600080fd5b506104e86105da366004614c34565b6117fc565b3480156105eb57600080fd5b506102ae6105fa366004614c4c565b611877565b34801561060b57600080fd5b506102546118ba565b34801561062057600080fd5b5061022961062f3660046146dc565b611949565b34801561064057600080fd5b506102ae61064f3660046146c0565b61195e565b34801561066057600080fd5b506102ae61066f3660046149e6565b611a61565b600061067f82611b02565b90505b919050565b60fd8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b820191906000526020600020905b8154815290600101906020018083116106f657829003601f168201915b505050505090505b90565b600061072982611bbc565b6107645760405162461bcd60e51b815260040180806020018281038252602c815260200180615209602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b600061078c82611193565b9050806001600160a01b0316836001600160a01b031614156107df5760405162461bcd60e51b815260040180806020018281038252602181526020018061531a6021913960400191505060405180910390fd5b806001600160a01b03166107f1611bd9565b6001600160a01b0316148061080d575061080d8161062f611bd9565b6108485760405162461bcd60e51b81526004018080602001828103825260388152602001806151016038913960400191505060405180910390fd5b6108528383611be8565b505050565b6060600061086486611c57565b90506000356001600160e01b031990811690821614156108cb576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102f76020908152908490205483528201529081018790526109098882888888611c73565b6109445760405162461bcd60e51b81526004018080602001828103825260218152602001806152aa6021913960400191505060405180910390fd5b6001600160a01b03881660009081526102f76020526040902054610969906001611d5d565b6102f760008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106109d45780518252601f1990920191602091820191016109b5565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610a4a5780518252601f199092019160209182019101610a2b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610aac576040519150601f19603f3d011682016040523d82523d6000602084013e610ab1565b606091505b509150915081610b08576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b87578181015183820152602001610b6f565b50505050905090810190601f168015610bb45780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b6102925460ff1615610c64578160400151600081518110610bed57fe5b6020026020010151600001516001600160a01b0316610c0a611549565b6001600160a01b03161480610c3f5750610c3f8260400151600081518110610c2e57fe5b602002602001015160000151611774565b610c645760405162461bcd60e51b8152600401610c5b90614df4565b60405180910390fd5b610c6e8282611db7565b5050565b610c83610c7d611bd9565b82611f39565b610cbe5760405162461bcd60e51b815260040180806020018281038252603181526020018061533b6031913960400191505060405180910390fd5b610852838383611f45565b60008281526101c660205260408120548190610cea57506000905080610dd0565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d6657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610d17565b50505050905080600081518110610d7957fe5b60209081029190910101515192506000805b8251811015610dc457828181518110610da057fe5b6020026020010151602001516001600160601b031682019150806001019050610d8b565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102f7602052604090205490565b610dfb611bd9565b6001600160a01b0316610e0c611549565b6001600160a01b031614610e55576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b610eb1868686868686612064565b610efd6040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd610f31611bd9565b8787604051610f4293929190614d49565b60405180910390a1505050505050565b61085283838360405180602001604052806000815250611793565b610f7681611bbc565b610fe557606081901c610f87611bd9565b6001600160a01b0316816001600160a01b031614610fd65760405162461bcd60e51b815260040180806020018281038252602d8152602001806151dc602d913960400191505060405180910390fd5b610fdf8261220e565b50611034565b610ff0610c7d611bd9565b61102b5760405162461bcd60e51b81526004018080602001828103825260308152602001806153916030913960400191505060405180910390fd5b6110348161222a565b50565b611045878787878686612064565b6110956040518060400160405280601581526020017445524337323152617269626c65557365724d65746160581b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e99136110cc611bd9565b88886040516110dd93929190614d49565b60405180910390a150505050505050565b6110f6611bd9565b6001600160a01b0316611107611549565b6001600160a01b031614611150576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b611159816122c6565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d6816040516111889190614db6565b60405180910390a150565b600081815260ff60205260408120546001600160a01b03168061067f5760405162461bcd60e51b81526004018080602001828103825260298152602001806151636029913960400191505060405180910390fd5b6101c88054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b60006001600160a01b0382166112905760405162461bcd60e51b815260040180806020018281038252602a815260200180615139602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b6112b5611bd9565b6001600160a01b03166112c6611549565b6001600160a01b03161461130f576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b611361611bd9565b6001600160a01b0316611372611549565b6001600160a01b0316146113bb576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b60005b8151811015610c6e5760008282815181106113d557fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016113be565b825161144990611bbc565b156114625761145d82828560000151610f52565b610852565b826040015160008151811061147357fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146114af5760405162461bcd60e51b8152600401610c5b90614dc9565b6108528382610bd0565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561153e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114ef565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b6115c1611bd9565b6001600160a01b03166115d2611549565b6001600160a01b03161461161b576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b611676611bd9565b6001600160a01b0316826001600160a01b031614156116dc576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006116ea611bd9565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561172e611bd9565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b6117a461179e611bd9565b83611f39565b6117df5760405162461bcd60e51b815260040180806020018281038252603181526020018061533b6031913960400191505060405180910390fd5b6117eb848484846122da565b50505050565b606061067f8261232c565b60008181526101c66020908152604080832080548251818502810185019093528083526060949293919290918401821561153e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114ef565b816001600160a01b0316611889611bd9565b6001600160a01b0316146118af5760405162461bcd60e51b8152600401610c5b90614e81565b610852838383612337565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156119415780601f1061191657610100808354040283529160200191611941565b820191906000526020600020905b81548152906001019060200180831161192457829003601f168201915b505050505081565b600061195583836123e3565b90505b92915050565b611966611bd9565b6001600160a01b0316611977611549565b6001600160a01b0316146119c0576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b038116611a055760405162461bcd60e51b81526004018080602001828103825260268152602001806150696026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b611a6f878787878787612064565b611abb6040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff19169055611acf8161195e565b7ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd8188886040516110dd93929190614d49565b60006001600160e01b03198216638486f69f60e01b1480611b3357506001600160e01b0319821663656cb66560e11b145b80611b4e57506001600160e01b0319821663152a902d60e11b145b80611b6957506001600160e01b031982166301ffc9a760e01b145b80611b8457506001600160e01b031982166380ac58cd60e01b145b80611b9f57506001600160e01b03198216635b5e139f60e01b145b8061067f5750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b6000611be3612410565b905090565b60008181526101016020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c1e82611193565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000815160001415611c6b57506000610682565b506020015190565b6000806001611c89611c848861246c565b6124ef565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ce0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611d3c576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611955576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b815160601c6000611dc6611bd9565b90508360400151600081518110611dd957fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611e155760405162461bcd60e51b8152600401610c5b90614e56565b83608001515184604001515114611e2b57600080fd5b806001600160a01b0316826001600160a01b03161480611e505750611e508282611949565b611e6c5760405162461bcd60e51b8152600401610c5b90614edd565b6000611e778561253b565b905060005b856040015151811015611eed57600086604001518281518110611e9b57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611ee457611ee4818489608001518581518110611ed757fe5b6020026020010151612782565b50600101611e7c565b50611efc84866000015161278d565b611f0e856000015186606001516127a7565b611f2085600001518660400151612996565b611f3285600001518660200151612b45565b5050505050565b60006119558383612ba9565b826001600160a01b0316611f5882611193565b6001600160a01b031614611f9d5760405162461bcd60e51b81526004018080602001828103825260298152602001806152816029913960400191505060405180910390fd5b6001600160a01b038216611fe25760405162461bcd60e51b815260040180806020018281038252602481526020018061508f6024913960400191505060405180910390fd5b611fed838383610852565b611ff8600082611be8565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b031916821790559251849392916000805160206152fa83398151915291a4505050565b600054610100900460ff168061207d575061207d612bd6565b8061208b575060005460ff16155b6120c65760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff161580156120f1576000805460ff1961ff0019909116610100171660011790555b6120fa856122c6565b612102612be7565b61210a612c88565b612112612be7565b61211a612d25565b612122612dc2565b61212a612be7565b612132612ebb565b61213a612f8a565b61214384612f8c565b61214d8787612fb1565b61215883600161309c565b61216382600161309c565b8015612175576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab782805190602001208280519060200120306121b86130fd565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102f8819055505050565b600090815261010360205260409020805460ff19166001179055565b600061223582611193565b905061224381600084610852565b61224e600083611be8565b61225782613107565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b031916905561229c8261220e565b60405182906000906001600160a01b038416906000805160206152fa833981519152908390a45050565b8051610c6e906101c8906020840190614328565b6122e5848484611f45565b6122f184848484613110565b6117eb5760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b606061067f826132c6565b60008381526101c66020526040812054905b81811015611f325760008581526101c66020526040902080546001600160a01b03861691908390811061237857fe5b6000918252602090912001546001600160a01b031614156123db5760008581526101c6602052604090208054849190839081106123b157fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612349565b6001600160a01b038116600090815261012f602052604081205460ff1680611955575061195583836134a1565b60003330141561246757600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061071b9050565b503390565b600060405180608001604052806043815260200161502660439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60006124f96134d0565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000808260600151516001600160401b038111801561255957600080fd5b50604051908082528060200260200182016040528015612583578160200160208202803683370190505b50905060005b8360600151518110156125d5576125b6846060015182815181106125a957fe5b60200260200101516134d7565b8282815181106125c257fe5b6020908102919091010152600101612589565b5060008360400151516001600160401b03811180156125f357600080fd5b5060405190808252806020026020018201604052801561261d578160200160208202803683370190505b50905060005b84604001515181101561266257612643856040015182815181106125a957fe5b82828151811061264f57fe5b6020908102919091010152600101612623565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b838110156126c65781810151838201526020016126ae565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b838110156127175781810151838201526020016126ff565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b610852838383613544565b610c6e8282604051806020016040528060008152506137c3565b6000805b825181101561294b5760006001600160a01b03168382815181106127cb57fe5b6020026020010151600001516001600160a01b03161415612833576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b82818151811061283f57fe5b6020026020010151602001516001600160601b0316600014156128a9576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b8281815181106128b557fe5b6020026020010151602001516001600160601b0316820191506101c660008581526020019081526020016000208382815181106128ee57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b03199093169290921716179055016127ab565b50612710811061298c5760405162461bcd60e51b815260040180806020018281038252602581526020018061536c6025913960400191505060405180910390fd5b6108528383613815565b60008281526101fb6020526040812090805b8351811015612ae45760006001600160a01b03168482815181106129c857fe5b6020026020010151600001516001600160a01b031614156129fb5760405162461bcd60e51b8152600401610c5b90614ea6565b838181518110612a0757fe5b6020026020010151602001516001600160601b031660001415612a3c5760405162461bcd60e51b8152600401610c5b90614e21565b82848281518110612a4957fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612ada90859083908110612ab657fe5b6020026020010151602001516001600160601b031683611d5d90919063ffffffff16565b91506001016129a8565b508061271014612b065760405162461bcd60e51b8152600401610c5b90614f2e565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612b37929190614f85565b60405180910390a150505050565b612b4e82611bbc565b612b895760405162461bcd60e51b815260040180806020018281038252602c815260200180615235602c913960400191505060405180910390fd5b60008281526101c760209081526040909120825161085292840190614328565b6001600160a01b038216600090815261012f602052604081205460ff168061195557506119558383613852565b6000612be1306138ee565b15905090565b600054610100900460ff1680612c005750612c00612bd6565b80612c0e575060005460ff16155b612c495760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612c74576000805460ff1961ff0019909116610100171660011790555b8015611034576000805461ff001916905550565b600054610100900460ff1680612ca15750612ca1612bd6565b80612caf575060005460ff16155b612cea5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612d15576000805460ff1961ff0019909116610100171660011790555b612c7463656cb66560e11b6138f4565b600054610100900460ff1680612d3e5750612d3e612bd6565b80612d4c575060005460ff16155b612d875760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612db2576000805460ff1961ff0019909116610100171660011790555b612c746301ffc9a760e01b6138f4565b600054610100900460ff1680612ddb5750612ddb612bd6565b80612de9575060005460ff16155b612e245760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612e4f576000805460ff1961ff0019909116610100171660011790555b6000612e59611bd9565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611034576000805461ff001916905550565b600054610100900460ff1680612ed45750612ed4612bd6565b80612ee2575060005460ff16155b612f1d5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612f48576000805460ff1961ff0019909116610100171660011790555b612c74604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b815250613978565b565b8051612fa09061022e906020840190614328565b5061103463e8a3d48560e01b6138f4565b600054610100900460ff1680612fca5750612fca612bd6565b80612fd8575060005460ff16155b6130135760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff1615801561303e576000805460ff1961ff0019909116610100171660011790555b82516130519060fd906020860190614328565b5081516130659060fe906020850190614328565b506130766380ac58cd60e01b6138f4565b613086635b5e139f60e01b6138f4565b8015610852576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b6000611be3613a38565b61103481613a3c565b6000613124846001600160a01b03166138ee565b156132ba57836001600160a01b031663150b7a02613140611bd9565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156131b357818101518382015260200161319b565b50505050905090810190601f1680156131e05780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561320257600080fd5b505af192505050801561322757506040513d602081101561322257600080fd5b505160015b6132a0573d808015613255576040519150601f19603f3d011682016040523d82523d6000602084013e61325a565b606091505b5080516132985760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506132be565b5060015b949350505050565b60606132d182611bbc565b61330c5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152cb602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156133a05780601f10613375576101008083540402835291602001916133a0565b820191906000526020600020905b81548152906001019060200180831161338357829003601f168201915b5050505050905060006133b16111e7565b90508051600014156133c557509050610682565b8151156133df576133d68183613a45565b92505050610682565b806133e985613c2a565b6040516020018083805190602001908083835b6020831061341b5780518252601f1990920191602091820191016133fc565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106134635780518252601f199092019160209182019101613444565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b6102f85490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b600061354f83613d04565b9050600082516041141561356a576135678284613d0e565b90505b846001600160a01b0316816001600160a01b031614611f3257613595856001600160a01b03166138ee565b1561374b5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156136045781810151838201526020016135ec565b50505050905090810190601f1680156136315780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561364f57600080fd5b505afa158015613663573d6000803e3d6000fd5b505050506040513d602081101561367957600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146137455760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561370a5781810151838201526020016136f2565b50505050905090810190601f1680156137375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611f32565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b8152600481019384528251602482015282519293928392604490920191908083836000831561370a5781810151838201526020016136f2565b6137cd8383613d8e565b6137da6000848484613110565b6108525760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613846929190614f85565b60405180910390a15050565b600061385d82611bbc565b6138985760405162461bcd60e51b815260040180806020018281038252602c8152602001806150d5602c913960400191505060405180910390fd5b60006138a383611193565b9050806001600160a01b0316846001600160a01b031614806138de5750836001600160a01b03166138d38461071e565b6001600160a01b0316145b806132be57506132be8185611949565b3b151590565b6001600160e01b03198082161415613953576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806139915750613991612bd6565b8061399f575060005460ff16155b6139da5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015613a05576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015610852576000805461ff0019169055505050565b4690565b61103481613ef4565b80518251606091849184911015613b105784846040516020018083805190602001908083835b60208310613a8a5780518252601f199092019160209182019101613a6b565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613ad25780518252601f199092019160209182019101613ab3565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050611958565b60005b8251811015613c2057828181518110613b2857fe5b602001015160f81c60f81b6001600160f81b031916828281518110613b4957fe5b01602001516001600160f81b03191614613c185785856040516020018083805190602001908083835b60208310613b915780518252601f199092019160209182019101613b72565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613bd95780518252601f199092019160209182019101613bba565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350505050611958565b600101613b13565b5092949350505050565b606081613c4f57506040805180820190915260018152600360fc1b6020820152610682565b8160005b8115613c6757600101600a82049150613c53565b6000816001600160401b0381118015613c7f57600080fd5b506040519080825280601f01601f191660200182016040528015613caa576020820181803683370190505b50859350905060001982015b8315613cfb57600a840660300160f81b82828060019003935081518110613cd957fe5b60200101906001600160f81b031916908160001a905350600a84049350613cb6565b50949350505050565b60006124f9613f34565b60008151604114613d66576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a613d8486828585613f6f565b9695505050505050565b6001600160a01b038216613de9576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff1615613e45576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b613e4e81611bbc565b15613ea0576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613eac60008383610852565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b0319169091179055610c6e82826141c5565b60008181526101c7602052604090205460026000196101006001841615020190911604156110345760008181526101c760205260408120611034916143b4565b6000611be37f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613f626141cf565b613f6a6141d5565b6141db565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613fd05760405162461bcd60e51b81526004018080602001828103825260228152602001806150b36022913960400191505060405180910390fd5b6000601e8560ff1611156140aa576004850360ff16601b1480613ff957506004850360ff16601c145b6140345760405162461bcd60e51b81526004018080602001828103825260228152602001806151ba6022913960400191505060405180910390fd5b600161403f8761423d565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614099573d6000803e3d6000fd5b505050602060405103519050614161565b8460ff16601b14806140bf57508460ff16601c145b6140fa5760405162461bcd60e51b81526004018080602001828103825260228152602001806151ba6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614154573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166141bc576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b610c6e828261428e565b60975490565b60985490565b60008383836141e8613a38565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b03831681146142fd5760405182906001600160a01b038316906000906000805160206152fa833981519152908290a481836001600160a01b0316826001600160a01b03166000805160206152fa83398151915260405160405180910390a4610852565b60405182906001600160a01b038516906000906000805160206152fa833981519152908290a4505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261435e57600085556143a4565b82601f1061437757805160ff19168380011785556143a4565b828001600101855582156143a4579182015b828111156143a4578251825591602001919060010190614389565b506143b09291506143f4565b5090565b50805460018160011615610100020316600290046000825580601f106143da5750611034565b601f01602090049060005260206000209081019061103491905b5b808211156143b057600081556001016143f5565b803561068281614fde565b600082601f830112614424578081fd5b8135602061443961443483614fc1565b614f9e565b8281528181019085830183850287018401881015614455578586fd5b855b8581101561447c57813561446a81614fde565b84529284019290840190600101614457565b5090979650505050505050565b600082601f830112614499578081fd5b813560206144a961443483614fc1565b82815281810190858301855b8581101561447c576144cc898684358b0101614599565b845292840192908401906001016144b5565b600082601f8301126144ee578081fd5b813560206144fe61443483614fc1565b8281528181019085830160408086028801850189101561451c578687fd5b865b8681101561458b5781838b031215614534578788fd5b81518281018181106001600160401b038211171561454e57fe5b8352833561455b81614fde565b8152838701356001600160601b038116811461457557898afd5b818801528552938501939181019160010161451e565b509198975050505050505050565b600082601f8301126145a9578081fd5b81356001600160401b038111156145bc57fe5b6145cf601f8201601f1916602001614f9e565b8181528460208386010111156145e3578283fd5b816020850160208301379081016020019190915292915050565b600060a0828403121561460e578081fd5b61461860a0614f9e565b90508135815260208201356001600160401b038082111561463857600080fd5b61464485838601614599565b6020840152604084013591508082111561465d57600080fd5b614669858386016144de565b6040840152606084013591508082111561468257600080fd5b61468e858386016144de565b606084015260808401359150808211156146a757600080fd5b506146b484828501614489565b60808301525092915050565b6000602082840312156146d1578081fd5b813561195581614fde565b600080604083850312156146ee578081fd5b82356146f981614fde565b9150602083013561470981614fde565b809150509250929050565b600080600060608486031215614728578081fd5b833561473381614fde565b9250602084013561474381614fde565b929592945050506040919091013590565b60008060008060808587031215614769578182fd5b843561477481614fde565b9350602085013561478481614fde565b92506040850135915060608501356001600160401b038111156147a5578182fd5b6147b187828801614599565b91505092959194509250565b600080604083850312156147cf578182fd5b82356147da81614fde565b915060208301358015158114614709578182fd5b600080600080600060a08688031215614805578283fd5b853561481081614fde565b945060208601356001600160401b0381111561482a578384fd5b61483688828901614599565b9450506040860135925060608601359150608086013560ff8116811461485a578182fd5b809150509295509295909350565b6000806040838503121561487a578182fd5b823561488581614fde565b946020939093013593505050565b6000602082840312156148a4578081fd5b81356001600160401b038111156148b9578182fd5b6132be84828501614414565b6000602082840312156148d6578081fd5b81356001600160e01b031981168114611955578182fd5b6000602082840312156148fe578081fd5b81356001600160401b03811115614913578182fd5b6132be84828501614599565b60008060008060008060c08789031215614937578384fd5b86356001600160401b038082111561494d578586fd5b6149598a838b01614599565b9750602089013591508082111561496e578586fd5b61497a8a838b01614599565b9650604089013591508082111561498f578586fd5b61499b8a838b01614599565b955060608901359150808211156149b0578283fd5b506149bd89828a01614599565b9350506149cc60808801614409565b91506149da60a08801614409565b90509295509295509295565b600080600080600080600060e0888a031215614a00578485fd5b87356001600160401b0380821115614a16578687fd5b614a228b838c01614599565b985060208a0135915080821115614a37578687fd5b614a438b838c01614599565b975060408a0135915080821115614a58578687fd5b614a648b838c01614599565b965060608a0135915080821115614a79578283fd5b50614a868a828b01614599565b945050614a9560808901614409565b9250614aa360a08901614409565b9150614ab160c08901614409565b905092959891949750929550565b600080600080600080600060e0888a031215614ad9578081fd5b87356001600160401b0380821115614aef578283fd5b614afb8b838c01614599565b985060208a0135915080821115614b10578283fd5b614b1c8b838c01614599565b975060408a0135915080821115614b31578283fd5b614b3d8b838c01614599565b965060608a0135915080821115614b52578283fd5b614b5e8b838c01614599565b955060808a0135915080821115614b73578283fd5b50614b808a828b01614414565b935050614aa360a08901614409565b60008060408385031215614ba1578182fd5b82356001600160401b03811115614bb6578283fd5b614bc2858286016145fd565b925050602083013561470981614fde565b600080600060608486031215614be7578081fd5b83356001600160401b03811115614bfc578182fd5b614c08868287016145fd565b9350506020840135614c1981614fde565b91506040840135614c2981614fde565b809150509250925092565b600060208284031215614c45578081fd5b5035919050565b600080600060608486031215614c60578081fd5b833592506020840135614c1981614fde565b60008060408385031215614c84578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614cdf57815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614ca6565b509495945050505050565b60008151808452815b81811015614d0f57602081850181015186830182015201614cf3565b81811115614d205782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614d6d90830185614cea565b8281036040840152613d848185614cea565b6001600160a01b03929092168252602082015260400190565b6000602082526119556020830184614c93565b901515815260200190565b6000602082526119556020830184614cea565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526132be6040830184614c93565b6040518181016001600160401b0381118282101715614fb957fe5b604052919050565b60006001600160401b03821115614fd457fe5b5060209081020190565b6001600160a01b038116811461103457600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e5369676e657220616e64207369676e617475726520646f206e6f74206d617463684552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220f5990a22763c1b208eac60f3e6497209cfc0e77387e5cf0f890a08218d603c9464736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "addMinter(address)": { + "details": "Add `minter` to the list of allowed minters." + }, + "addMinters(address[])": { + "details": "Add `minters` to the list of allowed minters." + }, + "approve(address,uint256)": { + "details": "See {IERC721-approve}." + }, + "balanceOf(address)": { + "details": "See {IERC721-balanceOf}." + }, + "baseURI()": { + "details": "Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID." + }, + "burn(uint256)": { + "details": "Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator." + }, + "getApproved(uint256)": { + "details": "See {IERC721-getApproved}." + }, + "isMinter(address)": { + "details": "Returns `true` if `account` has been granted to minters." + }, + "name()": { + "details": "See {IERC721Metadata-name}." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "ownerOf(uint256)": { + "details": "See {IERC721-ownerOf}." + }, + "removeMinter(address)": { + "details": "Revoke `_minter` from the list of allowed minters." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "safeTransferFrom(address,address,uint256)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,bytes)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC721-setApprovalForAll}." + }, + "symbol()": { + "details": "See {IERC721Metadata-symbol}." + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC721-transferFrom}." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 307, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 364, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 138, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "151", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "152", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "153", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26448, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "203", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 27665, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_name", + "offset": 0, + "slot": "253", + "type": "t_string_storage" + }, + { + "astId": 27667, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_symbol", + "offset": 0, + "slot": "254", + "type": "t_string_storage" + }, + { + "astId": 27671, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_owners", + "offset": 0, + "slot": "255", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 27675, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_balances", + "offset": 0, + "slot": "256", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 27679, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_tokenApprovals", + "offset": 0, + "slot": "257", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 27685, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_operatorApprovals", + "offset": 0, + "slot": "258", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 27695, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_burnedTokens", + "offset": 0, + "slot": "259", + "type": "t_mapping(t_uint256,t_bool)" + }, + { + "astId": 28474, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "260", + "type": "t_array(t_uint256)43_storage" + }, + { + "astId": 26691, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "defaultApprovals", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 26762, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26681, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "354", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22478, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "404", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 21496, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "royalties", + "offset": 0, + "slot": "454", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" + }, + { + "astId": 27499, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_tokenURIs", + "offset": 0, + "slot": "455", + "type": "t_mapping(t_uint256,t_string_storage)" + }, + { + "astId": 27501, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_baseURI", + "offset": 0, + "slot": "456", + "type": "t_string_storage" + }, + { + "astId": 27636, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "457", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26805, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "creators", + "offset": 0, + "slot": "507", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" + }, + { + "astId": 27230, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "508", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22321, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "contractURI", + "offset": 0, + "slot": "558", + "type": "t_string_storage" + }, + { + "astId": 22353, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "559", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 26595, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "608", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22359, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "isPrivate", + "offset": 0, + "slot": "658", + "type": "t_bool" + }, + { + "astId": 22363, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "659", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 22488, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_minters", + "offset": 0, + "slot": "708", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 22605, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "709", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 19515, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "nonces", + "offset": 0, + "slot": "759", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 19517, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "domainSeparator", + "offset": 0, + "slot": "760", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)19269_storage)dyn_storage": { + "base": "t_struct(Part)19269_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)43_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[43]", + "numberOfBytes": "1376" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_address)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct LibPart.Part[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(Part)19269_storage)dyn_storage" + }, + "t_mapping(t_uint256,t_bool)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_string_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => string)", + "numberOfBytes": "32", + "value": "t_string_storage" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Part)19269_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 19266, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 19268, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Proxy.json new file mode 100644 index 000000000..3b4ed4179 --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Proxy.json @@ -0,0 +1,301 @@ +{ + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1123036", + "logsBloom": "0x00000400000800000000000000000000400000000400800010800000000000000000000000000000000000000001000000000000000440000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000408000002800000000000000000000000000000000000100004000000000000000000000000000100000020000300000000000001000000000000000400000040000000000020000000000000000060000000000000000000000000000000000000000001000000", + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371", + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000003dc700b8bd71fcd8b80914e10b561c15816f71ac" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + }, + { + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + }, + { + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + }, + { + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + }, + { + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + }, + { + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" + ], + "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 5, + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + }, + { + "transactionIndex": 1, + "blockNumber": 2308785, + "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + } + ], + "blockNumber": 2308785, + "cumulativeGasUsed": "1175525", + "status": 1, + "byzantium": true + }, + "args": [ + "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMinimalBeaconMeta.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMinimalBeaconMeta.json new file mode 100644 index 000000000..465709b4c --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMinimalBeaconMeta.json @@ -0,0 +1,219 @@ +{ + "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xae01b1ab882d5289879a2812874eebb8d661fec1c2328c2ec387b9a4de09efc5", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "394691", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000004001000000000000004000004000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000200000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x1cc6f4c3e5bb22d6cf641699aa4eef82d46010f1b67e07f5d3dc8097afd3a86c", + "transactionHash": "0xae01b1ab882d5289879a2812874eebb8d661fec1c2328c2ec387b9a4de09efc5", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2308789, + "transactionHash": "0xae01b1ab882d5289879a2812874eebb8d661fec1c2328c2ec387b9a4de09efc5", + "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x1cc6f4c3e5bb22d6cf641699aa4eef82d46010f1b67e07f5d3dc8097afd3a86c" + }, + { + "transactionIndex": 1, + "blockNumber": 2308789, + "transactionHash": "0xae01b1ab882d5289879a2812874eebb8d661fec1c2328c2ec387b9a4de09efc5", + "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x1cc6f4c3e5bb22d6cf641699aa4eef82d46010f1b67e07f5d3dc8097afd3a86c" + } + ], + "blockNumber": 2308789, + "cumulativeGasUsed": "441592", + "status": 1, + "byzantium": true + }, + "args": [ + "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\":\"ERC721RaribleMinimalBeaconMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\\n transferOwnership(initialOwner);\\n }\\n}\\n\",\"keccak256\":\"0xca4a880219e74fc2d13c800e9917a3a7d0b05e3843410e379bc1ce7c86bc3de4\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405161072d38038061072d8339818101604052604081101561003357600080fd5b508051602090910151816000610047610099565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602061070d833981519152908290a3506100888161009d565b506100928161010d565b5050610224565b3390565b6100b08161020f60201b6103821760201c565b6100eb5760405162461bcd60e51b81526004018080602001828103825260338152602001806106da6033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610115610099565b6001600160a01b0316610126610215565b6001600160a01b031614610181576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166101c65760405162461bcd60e51b81526004018080602001828103825260268152602001806106b46026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061070d83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b6000546001600160a01b031690565b610481806102336000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212208dfb6c9a3280e9711a17e61af949448fbab9f4b715e50bfe015711eabdbf2fcd64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163748be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212208dfb6c9a3280e9711a17e61af949448fbab9f4b715e50bfe015711eabdbf2fcd64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "implementation()": { + "details": "Returns the current implementation address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeTo(address)": { + "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol:ERC721RaribleMinimalBeaconMeta", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6517, + "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol:ERC721RaribleMinimalBeaconMeta", + "label": "_implementation", + "offset": 0, + "slot": "1", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ExchangeMetaV2.json b/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2.json similarity index 90% rename from projects/hardhat-deploy/deployments/polygon_mumbai/ExchangeMetaV2.json rename to projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2.json index 6072cc4fd..0fe96344f 100644 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ExchangeMetaV2.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2.json @@ -1,5 +1,5 @@ { - "address": "0x2Fc743F5419637B93dDAC159715B902186300041", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", "abi": [ { "anonymous": false, @@ -340,6 +340,64 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "assetTypes", + "type": "bytes4[]" + }, + { + "internalType": "address[]", + "name": "proxies", + "type": "address[]" + }, + { + "internalType": "bytes4", + "name": "assetMatcherType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "assetMatcher", + "type": "address" + } + ], + "name": "__ExchangeV2_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1125,12 +1183,147 @@ "type": "constructor" } ], - "numDeployments": 3, - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1049680", + "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000000000000000000000000000400000000000000000000000800000000000000010000000020000010000000000000042004000000000000000000200020000000000000008004002008000000000000000000000004000000000010001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000002000000004000000000000000a0000008000000000001000000000000000400000000000000000020000000000000000000000000000000000000020000000000000000300000000200", + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010", + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000006c619e55e9947051e98570a36044c31c4eb0736d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + }, + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + }, + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0xd8f960c100000000000000000000000000000000000000000000000000000000" + ], + "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", + "logIndex": 2, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + }, + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", + "logIndex": 3, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + }, + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", + "0xf63c282500000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", + "logIndex": 4, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + }, + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 5, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + }, + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + } + ], + "blockNumber": 2308749, + "cumulativeGasUsed": "1096581", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", - "implementation": "0xAFA4fE011f874C79D9bC083806105760F17e8f0c", + "execute": { + "methodName": "__ExchangeV2_init_proxy", + "args": [ + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", + 0, + "0x0000000000000000000000000000000000000000", + "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893", + [ + "0xd8f960c1", + "0x1cdfaa40" + ], + [ + "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2" + ], + "0xf63c2825", + "0xc4F5FCD96e3b37A31f871F0968206F47294a4471" + ] + }, + "implementation": "0x6c619E55E9947051e98570a36044C31C4eB0736d", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Implementation.json b/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Implementation.json new file mode 100644 index 000000000..a8fdc87ad --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Implementation.json @@ -0,0 +1,1387 @@ +{ + "address": "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "BuyerFeeAmountChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "Cancel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldValue", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newValue", + "type": "address" + } + ], + "name": "FeeReceiverChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "leftHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "rightHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newLeftFill", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newRightFill", + "type": "uint256" + } + ], + "name": "Match", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "MatcherChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "ProxyChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "SellerFeeAmountChanged", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + } + ], + "name": "__ExchangeV2_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "assetTypes", + "type": "bytes4[]" + }, + { + "internalType": "address[]", + "name": "proxies", + "type": "address[]" + }, + { + "internalType": "bytes4", + "name": "assetMatcherType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "assetMatcher", + "type": "address" + } + ], + "name": "__ExchangeV2_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "order", + "type": "tuple" + } + ], + "name": "cancel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "bidMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "bidPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "bidDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "bidData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "bidSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.AcceptBid", + "name": "direct", + "type": "tuple" + } + ], + "name": "directAcceptBid", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sellOrderMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "sellOrderDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sellOrderSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "buyOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "buyOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "buyOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.Purchase", + "name": "direct", + "type": "tuple" + } + ], + "name": "directPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "fills", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderLeft", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureLeft", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderRight", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureRight", + "type": "bytes" + } + ], + "name": "matchOrders", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFee", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "sellerAmount", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "royaltiesRegistry", + "outputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setAllProtocolFeeData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "setAssetMatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeBuyerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + } + ], + "name": "setPrtocolFeeReceiver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeSellerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesRegistry", + "type": "address" + } + ], + "name": "setRoyaltiesRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "setTransferProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x8e1907dcb354ea634192361d245d17e202759be614e120205a60a099e66d61b2", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "5353145", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x5130988f3b7125b9d8dd95fbcd35fe315ea18b748f713b55db10406d2fcbd367", + "transactionHash": "0x8e1907dcb354ea634192361d245d17e202759be614e120205a60a099e66d61b2", + "logs": [], + "blockNumber": 2308744, + "cumulativeGasUsed": "5400046", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"BuyerFeeAmountChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"Cancel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"}],\"name\":\"FeeReceiverChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leftHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"rightHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLeftFill\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRightFill\",\"type\":\"uint256\"}],\"name\":\"Match\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"MatcherChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"SellerFeeAmountChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_erc20TransferProxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newDefaultFeeReceiver\",\"type\":\"address\"},{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesProvider\",\"type\":\"address\"}],\"name\":\"__ExchangeV2_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_erc20TransferProxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newDefaultFeeReceiver\",\"type\":\"address\"},{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"assetTypes\",\"type\":\"bytes4[]\"},{\"internalType\":\"address[]\",\"name\":\"proxies\",\"type\":\"address[]\"},{\"internalType\":\"bytes4\",\"name\":\"assetMatcherType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"assetMatcher\",\"type\":\"address\"}],\"name\":\"__ExchangeV2_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"bidMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"bidPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"bidDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"bidData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bidSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.AcceptBid\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directAcceptBid\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sellOrderMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"sellOrderDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"buyOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.Purchase\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"fills\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderLeft\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureLeft\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderRight\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureRight\",\"type\":\"bytes\"}],\"name\":\"matchOrders\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"sellerAmount\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"royaltiesRegistry\",\"outputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setAllProtocolFeeData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"setAssetMatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeBuyerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"setPrtocolFeeReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeSellerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesRegistry\",\"type\":\"address\"}],\"name\":\"setRoyaltiesRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"setTransferProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\",\"params\":{\"direct\":\"struct with parameters for accept bid operation\"}},\"directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\":\"ExchangeMetaV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function _setAssetMatcher(bytes4 assetType, address matcher) internal {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x8fceb04eec1c1b32bea097a019b57e9422c31fa2e020e9957db91d5b03edb1bb\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __OrderValidator_init_unchained();\\n __MetaTransaction_init_unchained(\\\"ExchangeMetaV2\\\", \\\"1\\\");\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n }\\n\\n function __ExchangeV2_init_proxy(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider,\\n address _initialOwner,\\n bytes4[] memory assetTypes, \\n address[] memory proxies,\\n bytes4 assetMatcherType,\\n address assetMatcher\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __OrderValidator_init_unchained();\\n __MetaTransaction_init_unchained(\\\"ExchangeMetaV2\\\", \\\"1\\\");\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n for (uint i = 0; i < assetTypes.length; i++) {\\n _setTransferProxy(assetTypes[i], proxies[i]);\\n }\\n _setAssetMatcher(assetMatcherType, assetMatcher);\\n transferOwnership(_initialOwner);\\n }\\n\\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\\n return super._msgSender();\\n }\\n\\n}\\n\",\"keccak256\":\"0xe555b85b81c8f5d3aed6aeb629444a9a0794b6da5c28c5d58252e68d71f20282\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\\n using SafeMath for uint256;\\n\\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\\\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\\\"));\\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\\\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\\\");\\n\\n mapping(address => uint256) private nonces;\\n bytes32 internal domainSeparator;\\n\\n /*\\n * Meta transaction structure.\\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\\n * He should call the desired function directly in that case.\\n */\\n struct MetaTransaction {\\n uint256 nonce;\\n address from;\\n bytes functionSignature;\\n }\\n\\n /*\\n * Domain structure.\\n * Data(information to for making metaTransaction method uniq.) about method and contract\\n */\\n struct EIP712Domain {\\n string name;\\n string version;\\n address verifyingContract;\\n bytes32 salt;\\n }\\n\\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\\n\\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\\n domainSeparator = keccak256(abi.encode(\\n EIP712_DOMAIN_TYPEHASH,\\n keccak256(bytes(name)),\\n keccak256(bytes(version)),\\n address(this),\\n getSalt()\\n ));\\n }\\n\\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\\n if (inBytes.length == 0) {\\n return 0x0;\\n }\\n\\n assembly {\\n outBytes4 := mload(add(inBytes, 32))\\n }\\n }\\n\\n function executeMetaTransaction(address userAddress,\\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\\n require(destinationFunctionSig != msg.sig, \\\"Wrong functionSignature\\\");\\n MetaTransaction memory metaTx = MetaTransaction({\\n nonce : nonces[userAddress],\\n from : userAddress,\\n functionSignature : functionSignature\\n });\\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \\\"Signer and signature do not match\\\");\\n nonces[userAddress] = nonces[userAddress].add(1);\\n // Append userAddress at the end to extract it from calling context\\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\\n\\n require(success, \\\"Function call not successful\\\");\\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\\n return returnData;\\n }\\n\\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n META_TRANSACTION_TYPEHASH,\\n metaTx.nonce,\\n metaTx.from,\\n keccak256(metaTx.functionSignature)\\n ));\\n }\\n\\n function getNonce(address user) external view returns (uint256 nonce) {\\n nonce = nonces[user];\\n }\\n\\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\\n require(signer != address(0), \\\"Invalid signature\\\");\\n return signer == user;\\n }\\n\\n function _msgSender() internal view virtual override returns (address payable sender) {\\n if (msg.sender == address(this)) {\\n bytes memory array = msg.data;\\n uint256 index = msg.data.length;\\n assembly {\\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\\n }\\n } else {\\n sender = msg.sender;\\n }\\n return sender;\\n }\\n\\n function getSalt() internal pure returns (bytes32) {\\n return bytes32(getChainID());\\n }\\n\\n function getChainID() internal pure returns (uint256 id) {\\n assembly {\\n id := chainid()\\n }\\n }\\n\\n function getDomainSeparator() private view returns (bytes32) {\\n return domainSeparator;\\n }\\n\\n /**\\n * Accept message hash and returns hash message in EIP712 compatible form\\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\\n * https://eips.ethereum.org/EIPS/eip-712\\n * \\\"\\\\\\\\x19\\\" makes the encoding deterministic\\n * \\\"\\\\\\\\x01\\\" is the version byte to make it compatible to EIP-191\\n */\\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", getDomainSeparator(), messageHash));\\n }\\n\\n /**\\n * @dev verifies the call result and bubbles up revert reason for failed calls\\n *\\n * @param success : outcome of forwarded call\\n * @param returndata : returned data from the frowarded call\\n * @param errorMessage : fallback error message to show\\n */\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\\n if (!success) {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x58924a44eea8720bdcfb32f12d3374deac9605a3b75cb8872907856d526bde10\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function _setTransferProxy(bytes4 assetType, address proxy) internal {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xea639616c66696b5ae9b278d3c6c9a85839bb5e815a4db046b4fd0225cd86625\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50615df280620000216000396000f3fe60806040526004361061012a5760003560e01c8063715018a6116100ab578063bc158c2d1161006f578063bc158c2d146102fd578063d6ca6ab71461031d578063e2864fe31461033d578063e99a3f801461035d578063eae3ad6f14610370578063f2fde38b146103905761012a565b8063715018a61461026f5780638da5cb5b14610284578063b0e21e8a14610299578063b39deb46146102bd578063b74c8e9a146102dd5761012a565b80632d0335ab116100f25780632d0335ab146101da57806330c642f1146101fa5780633be899221461021a57806367d49a3b1461023a5780636d8f06941461024d5761012a565b80630c53c51c1461012f5780630d5f7d35146101585780631372a6251461016d57806320158c441461018d5780632bed54d6146101ba575b600080fd5b61014261013d36600461519d565b6103b0565b60405161014f9190615731565b60405180910390f35b61016b610166366004615305565b610729565b005b34801561017957600080fd5b5061016b610188366004615056565b610a46565b34801561019957600080fd5b506101ad6101a8366004615299565b610b63565b60405161014f919061570d565b3480156101c657600080fd5b5061016b6101d53660046150bd565b610b76565b3480156101e657600080fd5b506101ad6101f5366004614e01565b610cf0565b34801561020657600080fd5b5061016b6102153660046152cd565b610d0c565b34801561022657600080fd5b5061016b610235366004614e01565b610ddc565b61016b610248366004615305565b610e61565b34801561025957600080fd5b50610262611141565b60405161014f9190615641565b34801561027b57600080fd5b5061016b611151565b34801561029057600080fd5b506102626111fd565b3480156102a557600080fd5b506102ae61120d565b60405161014f939291906156e4565b3480156102c957600080fd5b5061016b6102d83660046152cd565b611238565b3480156102e957600080fd5b5061016b6102f8366004615209565b6112fc565b34801561030957600080fd5b5061016b610318366004614e01565b61137e565b34801561032957600080fd5b5061016b6103383660046155d3565b61144b565b34801561034957600080fd5b5061016b6103583660046154fa565b611525565b61016b61036b36600461552c565b6115e6565b34801561037c57600080fd5b5061016b61038b3660046155d3565b6115fc565b34801561039c57600080fd5b5061016b6103ab366004614e01565b6116d3565b606060006103bd866117d6565b90506000356001600160e01b03199081169082161415610424576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b038916600081815261019360209081529084902054835282015290810187905261046288828888886117f6565b61049d5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d9c6021913960400191505060405180910390fd5b6001600160a01b038816600090815261019360205260409020546104c29060016118e0565b61019360008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b6020831061052d5780518252601f19909201916020918201910161050e565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106105a35780518252601f199092019160209182019101610584565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610605576040519150601f19603f3d011682016040523d82523d6000602084013e61060a565b606091505b509150915081610661576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106e05781810151838201526020016106c8565b50505050905090810190601f16801561070d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b600061074361073e60c0840160a08501614e01565b611943565b604080516101208101909152909150600090806107636020860186614e01565b6001600160a01b031681526020016040518060400160405280604051806040016040528088604001602081019061079a91906152b1565b6001600160e01b03191681526020016107b660608a018a615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a083015201610859610140860161012087016152b1565b6001600160e01b0319168152602001610876610140860186615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815180830183528781526101808901356020828101919091528201528082018390528151608081018352949550919391925060608084019291829182820191829161090a91908c01908c016152b1565b6001600160e01b031916815260200161092660608b018b615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528201819052604082018190526060820152608001610995610140870161012088016152b1565b6001600160e01b03191681526020016109b26101c0870187615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610a36826109fc610160870187615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119a692505050565b610a4082826119bd565b50505050565b600054610100900460ff1680610a5f5750610a5f611c0f565b80610a6d575060005460ff16155b610aa85760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad3576000805460ff1961ff0019909116610100171660011790555b610adb611c20565b610ae3611cc2565b610aeb611dbb565b610b346040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611e8b565b610b3e8686611f1b565b610b49848484611fc5565b8015610b5b576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b600054610100900460ff1680610b8f5750610b8f611c0f565b80610b9d575060005460ff16155b610bd85760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015610c03576000805460ff1961ff0019909116610100171660011790555b610c0b611c20565b610c13611cc2565b610c1b611dbb565b610c646040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611e8b565b610c6e8b8b611f1b565b610c79898989611fc5565b60005b8551811015610cbd57610cb5868281518110610c9457fe5b6020026020010151868381518110610ca857fe5b6020026020010151610d6e565b600101610c7c565b50610cc8838361129a565b610cd1866116d3565b8015610ce3576000805461ff00191690555b5050505050505050505050565b6001600160a01b03166000908152610193602052604090205490565b610d14612085565b6001600160a01b0316610d256111fd565b6001600160a01b031614610d6e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c315359390610dd0908490615641565b60405180910390a25050565b610de4612085565b6001600160a01b0316610df56111fd565b6001600160a01b031614610e3e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e7661073e60c0840160a08501614e01565b60408051610120810190915290915060009080610e966020860186614e01565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b0316815260200160405180604001604052806040518060400160405280886040016020810190610efb91906152b1565b6001600160e01b0319168152602001610f1760608a018a615b36565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e085013560408201526101008501356060820152608001610f92610140860161012087016152b1565b6001600160e01b0319168152602001610faf610140860186615b36565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505060408051610120810182528281528151608081018352949550919391925060208301919081908181019081906110219060608c01908c016152b1565b6001600160e01b031916815260200161103d60608b018b615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c0016110d0610140870161012088016152b1565b6001600160e01b03191681526020016110ed6101c0870187615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050611137826109fc610160870187615b36565b610a4081836119bd565b610162546001600160a01b031681565b611159612085565b6001600160a01b031661116a6111fd565b6001600160a01b0316146111b3576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b03165b90565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b611240612085565b6001600160a01b03166112516111fd565b6001600160a01b03161461129a576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f90610dd0908490615641565b611304612085565b6001600160a01b03166113156111fd565b6001600160a01b03161461135e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6113678361137e565b6113708261144b565b611379816115fc565b505050565b611386612085565b6001600160a01b03166113976111fd565b6001600160a01b0316146113e0576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd0391611420916001600160a01b03909116908490615655565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b611453612085565b6001600160a01b03166114646111fd565b6001600160a01b0316146114ad576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e916114f291600160a01b90910465ffffffffffff16908490615b1d565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316611538612085565b6001600160a01b0316146115675760405162461bcd60e51b815260040161155e90615a8d565b60405180910390fd5b60808101516115885760405162461bcd60e51b815260040161155e9061581f565b600061159382612094565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a906115da90839061570d565b60405180910390a15050565b6115f28484848461221c565b610a4084836119bd565b611604612085565b6001600160a01b03166116156111fd565b6001600160a01b03161461165e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916116a391600160d01b90910465ffffffffffff16908490615b1d565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b6116db612085565b6001600160a01b03166116ec6111fd565b6001600160a01b031614611735576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160a01b03811661177a5760405162461bcd60e51b8152600401808060200182810382526026815260200180615c766026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008151600014156117ea575060006117f1565b5060208101515b919050565b600080600161180c611807886122e8565b61236b565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611863573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118bf576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b60008282018381101561193a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b61194b614930565b611953614930565b6001600160a01b038316611970576355575f5d60e11b815261193d565b6322ba176160e21b815260405161198b908490602001615641565b60408051601f19818403018152919052602082015292915050565b6119af826123b7565b6119b98282612481565b5050565b6000806119ca8484612730565b9150915060008060006119dd87876127c9565b925092509250600080611b366040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b0316815250611b318a600001518a60000151612878565b612949565b885191935091506001600160e01b0319166355575f5d60e11b1415611bb55785516001600160e01b0319166355575f5d60e11b1415611b7457600080fd5b81341015611b945760405162461bcd60e51b815260040161155e90615a65565b81341115611bb057611bb0611ba93484612ac0565b3390612b1d565b611c04565b85516001600160e01b0319166355575f5d60e11b1415611c045780341015611bef5760405162461bcd60e51b815260040161155e90615a65565b80341115611c0457611c04611ba93483612ac0565b505050505050505050565b6000611c1a30612bb5565b15905090565b600054610100900460ff1680611c395750611c39611c0f565b80611c47575060005460ff16155b611c825760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611cad576000805460ff1961ff0019909116610100171660011790555b8015611cbf576000805461ff00191690555b50565b600054610100900460ff1680611cdb5750611cdb611c0f565b80611ce9575060005460ff16155b611d245760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611d4f576000805460ff1961ff0019909116610100171660011790555b6000611d59612085565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611cbf576000805461ff001916905550565b600054610100900460ff1680611dd45750611dd4611c0f565b80611de2575060005460ff16155b611e1d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611e48576000805460ff1961ff0019909116610100171660011790555b611cad6040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b815250612bbb565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030611ec5612c7b565b60405160200180868152602001858152602001848152602001836001600160a01b031681526020018281526020019550505050505060405160208183030381529060405280519060200120610194819055505050565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff1680611fde5750611fde611c0f565b80611fec575060005460ff16155b6120275760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015612052576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610a40576000805461ff001916905550505050565b600061208f612c85565b905090565b60e08101516000906001600160e01b031916632611a13360e11b14806120c8575060e08201516001600160e01b0319908116145b1561213d5781516020830151516120de90612ce1565b6060840151516120ed90612ce1565b846080015160405160200180856001600160a01b031681526020018481526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506117f1565b815160208301515161214e90612ce1565b60608401515161215d90612ce1565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121c95781810151838201526020016121b1565b50505050905090810190601f1680156121f65780820380516001836020036101000a031916815260200191505b5096505050505050506040516020818303038152906040528051906020012090506117f1565b61222684846119a6565b61223082826119a6565b60408401516001600160a01b03161561228c5781516001600160a01b03161561228c5783604001516001600160a01b031682600001516001600160a01b03161461228c5760405162461bcd60e51b815260040161155e90615a22565b60408201516001600160a01b031615610a405783516001600160a01b031615610a405783600001516001600160a01b031682604001516001600160a01b031614610a405760405162461bcd60e51b815260040161155e90615891565b6000604051806080016040528060438152602001615c3360439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612375612d4b565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60a081015115806123cb5750428160a00151105b61241c576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c081015115806124305750428160c00151115b611cbf576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b60808201516125065781516001600160a01b0316156125015781516001600160a01b03166124ad612085565b6001600160a01b031614612501576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b6119b9565b81516001600160a01b0316612519612085565b6001600160a01b0316146119b957600061253283612d52565b905061254a83600001516001600160a01b0316612bb5565b15612686578251630b135d3f60e11b906001600160a01b0316631626ba7e61257184612e42565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156125c45781810151838201526020016125ac565b50505050905090810190601f1680156125f15780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561260f57600080fd5b505afa158015612623573d6000803e3d6000fd5b505050506040513d602081101561263957600080fd5b50516001600160e01b031916146126815760405162461bcd60e51b815260040180806020018281038252602b815260200180615ce0602b913960400191505060405180910390fd5b611379565b82516001600160a01b03166126a48361269e84612e42565b90612e4c565b6001600160a01b0316146126e95760405162461bcd60e51b8152600401808060200182810382526022815260200180615cbe6022913960400191505060405180910390fd5b82516001600160a01b0316611379576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b612738614930565b612740614930565b6020840151516060840151516127569190612ecc565b80519092506001600160e01b0319166127815760405162461bcd60e51b815260040161155e906159f6565b6060840151516020840151516127979190612ecc565b80519091506001600160e01b0319166127c25760405162461bcd60e51b815260040161155e906159f6565b9250929050565b6127d1614948565b6127d9614948565b6127e161496b565b60006127ec86612094565b905060006127f986612094565b90506000612805612085565b88519091506001600160a01b0316612824576001600160a01b03811688525b86516001600160a01b0316612840576001600160a01b03811687525b61284988612f0c565b955061285487612f0c565b945061286c888885858a604001518a60400151613005565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b141561289b5750600161193d565b6001600160e01b031982166355575f5d60e11b14156128bc5750600261193d565b6001600160e01b031983166322ba176160e21b14156128dd5750600161193d565b6001600160e01b031982166322ba176160e21b14156128fe5750600261193d565b6001600160e01b0319831663025ceed960e61b141561291f5750600161193d565b6001600160e01b0319821663025ceed960e61b14156129405750600261193d565b50600092915050565b8251602090810151835190910151600183600281111561296557fe5b14156129e75760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526129b790869086906131c0565b91506129e284600001516000015185600001516020015186608001518860200151886060015161343a565b612ab8565b60028360028111156129f557fe5b1415612a725760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b9091041691810191909152612a4790859087906131c0565b90506129e285600001516000015186600001516020015187608001518760200151896060015161343a565b845180516020918201516080880151928701516060890151612a9594919061343a565b835180516020918201516080870151928801516060880151612ab894919061343a565b935093915050565b600082821115612b17576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612b68576040519150601f19603f3d011682016040523d82523d6000602084013e612b6d565b606091505b5050905080611379576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff1680612bd45750612bd4611c0f565b80612be2575060005460ff16155b612c1d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015612c48576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca558015611379576000805461ff0019169055505050565b600061208f6135be565b600033301415612cdc57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061120a9050565b503390565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b6101945490565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d8260000151612d8784602001516135c2565b8460400151612d9986606001516135c2565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b6000612375613632565b60008151604114612ea4576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612ec28682858561366d565b9695505050505050565b612ed4614930565b6000612ee084846138c3565b80519091506001600160e01b031916612f0557612efd83856138c3565b91505061193d565b905061193d565b612f14614948565b60e08201516001600160e01b031916632611a13360e11b1415612f60576000826101000151806020019051810190612f4c91906153c2565b805183526020908101519083015250612fec565b60e08201516001600160e01b0319166323d235ef60e01b1415612fb8576000826101000151806020019051810190612f98919061544e565b805183526020808201519084015260409081015115159083015250612fec565b60e08201516001600160e01b03199081161415612fd457612fec565b60405162461bcd60e51b815260040161155e90615988565b8051516117f1578151612ffe90613adf565b8152919050565b61300d61496b565b600061301d886080015187613b7a565b9050600061302f886080015187613b7a565b905060006130418a8a85858a8a613b9f565b90508960200151602001516000141580613062575060608901516020015115155b156130855780516130855760405162461bcd60e51b815260040161155e90615901565b60608a0151602001511515806130a157506020808a0151015115155b156130ca5760008160200151116130ca5760405162461bcd60e51b815260040161155e90615901565b60808a01511561311d5785156130fc5780516130e79084906118e0565b600089815261012f602052604090205561311d565b602081015161310c9084906118e0565b600089815261012f60205260409020555b60808901511561317057841561315257602081015161313d9083906118e0565b600088815261012f6020526040902055613170565b805161315f9083906118e0565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c450926131ab928c928c929190615716565b60405180910390a19998505050505050505050565b60006131d9846000015160200151838660400151613c38565b90506000613203828660000151602001518760800151868960000151600001518a60600151613ce5565b8551805186515160208089015193015160808a015160608b0151959650613231959394929387929190613d42565b9050846040015151600114801561324d57508360400151516001145b80156132a25750846040015160008151811061326557fe5b6020026020010151600001516001600160a01b0316846040015160008151811061328b57fe5b6020026020010151600001516001600160a01b0316145b156133b857604080516001808252818301909252600091816020015b6132c6614985565b8152602001906001900390816132be57905050905084604001516000815181106132ec57fe5b6020026020010151600001518160008151811061330557fe5b60209081029190910101516001600160a01b0390911690526040860151805160009061332d57fe5b602002602001015160200151856040015160008151811061334a57fe5b602002602001015160200151018160008151811061336457fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250506133ae86600001516000015183886000015160200151848a608001518b60600151613e47565b5091506134119050565b6133e285600001516000015182876000015160200151886040015189608001518a60600151613e47565b50855180516020909101516040870151608089015160608a015194955061340d948693929190613e47565b5090505b6134328560000151600001518287608001518760200151896060015161343a565b509392505050565b600082511161345b5760405162461bcd60e51b815260040161155e9061584d565b600084815b600185510381101561352a5760006134a186838151811061347d57fe5b6020026020010151602001516001600160601b031689613efc90919063ffffffff16565b90506134d68683815181106134b257fe5b6020026020010151602001516001600160601b0316856118e090919063ffffffff16565b93508015613521576134e88382612ac0565b925061352160405180604001604052808b8152602001838152508888858151811061350f57fe5b60200260200101516000015188613f14565b50600101613460565b5060008460018651038151811061353d57fe5b6020026020010151905061356781602001516001600160601b0316846118e090919063ffffffff16565b9250826127101461358a5760405162461bcd60e51b815260040161155e906159bf565b81156135b4576135b460405180604001604052808a81526020018481525087836000015187613f14565b5050505050505050565b4690565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b086135f28360000151612ce1565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b600061208f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61366061431c565b613668614322565b614328565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156136ce5760405162461bcd60e51b8152600401808060200182810382526022815260200180615c9c6022913960400191505060405180910390fd5b6000601e8560ff1611156137a8576004850360ff16601b14806136f757506004850360ff16601c145b6137325760405162461bcd60e51b8152600401808060200182810382526022815260200180615d396022913960400191505060405180910390fd5b600161373d8761438a565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613797573d6000803e3d6000fd5b50505060206040510351905061385f565b8460ff16601b14806137bd57508460ff16601c145b6137f85760405162461bcd60e51b8152600401808060200182810382526022815260200180615d396022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613852573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166138ba576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6138cb614930565b825182516001600160e01b031982166355575f5d60e11b1415613936576001600160e01b031981166355575f5d60e11b141561390b57849250505061193d565b505060408051808201825260008082528251602081810190945290815291810191909152905061193d565b6001600160e01b031982166322ba176160e21b141561397b576001600160e01b031981166322ba176160e21b141561390b5761397285856143db565b9250505061193d565b6001600160e01b031982166339d690a360e11b14156139b7576001600160e01b031981166339d690a360e11b141561390b5761397285856143db565b6001600160e01b0319821663025ceed960e61b14156139f3576001600160e01b0319811663025ceed960e61b141561390b5761397285856143db565b6001600160e01b031982166000908152606560205260409020546001600160a01b03168015613aa8576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb090613a4a9089908990600401615ab2565b60006040518083038186803b158015613a6257600080fd5b505afa158015613a76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a9e9190810190615337565b935050505061193d565b6001600160e01b03198381169083161415613ac757613a9e86866143db565b60405162461bcd60e51b815260040161155e906157b1565b60408051600180825281830190925260609160009190816020015b613b02614985565b815260200190600190039081613afa5790505090508281600081518110613b2557fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505061271081600081518110613b5957fe5b6020908102919091018101516001600160601b039092169101529050919050565b600082613b895750600061193d565b50600090815261012f6020526040902054919050565b613ba761496b565b600080613bb5898887614438565b91509150600080613bc78a8988614438565b9150915083811180613be157508381148015613be1575083155b15613c0d57613c0284848c60200151602001518d60600151602001516144b1565b945050505050612ec2565b613c298b60200151602001518c60600151602001518484614536565b9b9a5050505050505050505050565b602082015160009065ffffffffffff16815b8351811015613cc557612710848281518110613c6257fe5b6020026020010151602001516001600160601b03161115613c955760405162461bcd60e51b815260040161155e90615959565b838181518110613ca157fe5b6020026020010151602001516001600160601b031682019150806001019050613c4a565b50613cda613cd38683613efc565b86906118e0565b9150505b9392505050565b6000806000613d078989886040015189602001510165ffffffffffff166145bc565b90925090508015613d3657613d3660405180604001604052808781526020018381525088886000015187613f14565b50979650505050505050565b600080613d4e886145de565b905080516001148015613d62575086516001145b8015613daf575086600081518110613d7657fe5b6020026020010151600001516001600160a01b031681600081518110613d9857fe5b6020026020010151600001516001600160a01b0316145b15613e005761138881600081518110613dc457fe5b6020026020010151602001516001600160601b03161115613df75760405162461bcd60e51b815260040161155e906157e8565b85915050613e3c565b600080613e118b8989868a8a613e47565b91509150611388811115613e375760405162461bcd60e51b815260040161155e906157e8565b509150505b979650505050505050565b846000805b8551811015613ef057613e88868281518110613e6457fe5b6020026020010151602001516001600160601b0316836118e090919063ffffffff16565b91506000613eb78489898581518110613e9d57fe5b6020026020010151602001516001600160601b03166145bc565b90945090508015613ee757613ee760405180604001604052808c8152602001838152508789858151811061350f57fe5b50600101613e4c565b50965096945050505050565b600061193a612710613f0e8585614753565b906147ac565b8351516001600160e01b0319166339d690a360e11b141561405a57600080856000015160200151806020019051810190613f4e9190615029565b915091508560200151600114613f765760405162461bcd60e51b815260040161155e906158d5565b6001600160a01b038516301415613fee57604051632142170760e11b81526001600160a01b038316906342842e0e90613fb79030908890869060040161566f565b600060405180830381600087803b158015613fd157600080fd5b505af1158015613fe5573d6000803e3d6000fd5b50505050614053565b604051637b84dc8360e11b81526001600160a01b0384169063f709b90690614020908590899089908790600401615787565b600060405180830381600087803b15801561403a57600080fd5b505af115801561404e573d6000803e3d6000fd5b505050505b5050610a40565b8351516001600160e01b0319166322ba176160e21b14156141b85760008460000151602001518060200190518101906140939190614e1d565b90506001600160a01b03841630141561414a57602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb916140d79187916004016156cb565b602060405180830381600087803b1580156140f157600080fd5b505af1158015614105573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614129919061527f565b6141455760405162461bcd60e51b815260040161155e9061592a565b6141b2565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c39161417f91859189918991600401615787565b600060405180830381600087803b15801561419957600080fd5b505af11580156141ad573d6000803e3d6000fd5b505050505b50610a40565b8351516001600160e01b03191663025ceed960e61b1415614275576000808560000151602001518060200190518101906141f29190615029565b90925090506001600160a01b03851630141561423d576020860151604051637921219560e11b81526001600160a01b0384169163f242432a91613fb791309189918791600401615693565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee9916140209186918a918a91889190600401615744565b8351516001600160e01b0319166355575f5d60e11b14156142be576001600160a01b03821630146142b95760208401516142b9906001600160a01b03841690612b1d565b610a40565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf1906142ee90879087908790600401615ad7565b600060405180830381600087803b15801561430857600080fd5b505af11580156135b4573d6000803e3d6000fd5b60c95490565b60ca5490565b60008383836143356135be565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6143e3614930565b6020808401518051908201208382015180519201919091208082141561440d57849250505061193d565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b60008082156144775760208086015101516144539085612ac0565b915061447085606001516020015186602001516020015184614813565b9050612ab8565b60608501516020015161448a9085612ac0565b90506144a785602001516020015186606001516020015183614813565b9150935093915050565b6144b961496b565b60006144c6858585614813565b90508581111561451d576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b61453e61496b565b600061454b838787614813565b9050838111156145a2576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b6000806145d2856145cd8686613efc565b614879565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480614612575081516001600160e01b0319166339d690a360e11b145b156146c85760008083602001518060200190518101906146329190615029565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a9061466990859085906004016156cb565b600060405180830381600087803b15801561468357600080fd5b505af1158015614697573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146bf919081019061524d565b925050506117f1565b81516001600160e01b03191662737ea960e61b141561470957600082602001518060200190518101906146fb9190614e39565b6080015192506117f1915050565b81516001600160e01b03191663d8f960c160e01b141561474b576000826020015180602001905181019061473d9190614f36565b6060015192506117f1915050565b506060919050565b6000826147625750600061193d565b8282028284828161476f57fe5b041461193a5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d5b6021913960400191505060405180910390fd5b6000808211614802576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161480b57fe5b049392505050565b60006148208484846148a1565b15614863576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b61487183613f0e8685614753565b949350505050565b600080828411156148985761488e8484612ac0565b91508290506127c2565b50600093915050565b6000826148e8576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8115806148f3575083155b1561490057506000613cde565b6000838061490a57fe5b85840990506149198584614753565b614925826103e8614753565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b80356117f181615c07565b600082601f8301126149b7578081fd5b813560206149cc6149c783615b9d565b615b7a565b82815281810190858301838502870184018810156149e8578586fd5b855b85811015614a0f5781356149fd81615c07565b845292840192908401906001016149ea565b5090979650505050505050565b600082601f830112614a2c578081fd5b81356020614a3c6149c783615b9d565b8281528181019085830183850287018401881015614a58578586fd5b855b85811015614a0f578135614a6d81615c1c565b84529284019290840190600101614a5a565b600082601f830112614a8f578081fd5b81516020614a9f6149c783615b9d565b82815281810190858301855b85811015614a0f57614ac2898684518b0101614bf6565b84529284019290840190600101614aab565b600082601f830112614ae4578081fd5b81516020614af46149c783615b9d565b82815281810190858301604080860288018501891015614b12578687fd5b865b86811015614b815781838b031215614b2a578788fd5b81518281018181106001600160401b0382111715614b4457fe5b83528351614b5181615c07565b8152838701516001600160601b0381168114614b6b57898afd5b8188015285529385019391810191600101614b14565b509198975050505050505050565b805180151581146117f157600080fd5b80356117f181615c1c565b600082601f830112614bba578081fd5b8135614bc86149c782615bba565b818152846020838601011115614bdc578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112614c06578081fd5b8151614c146149c782615bba565b818152846020838601011115614c28578283fd5b614871826020830160208701615bdb565b60006101e08284031215614c4b578081fd5b50919050565b60006040808385031215614c63578182fd5b80518181016001600160401b038282108183111715614c7e57fe5b818452829450853581811115614c9357600080fd5b8601808803851315614ca457600080fd5b608084018381108382111715614cb657fe5b909452833593614cc585615c1c565b93825260208401359381851115614cdb57600080fd5b614ce788868301614baa565b60608501525050815260209384013593019290925292915050565b6000610120808385031215614d15578182fd5b614d1e81615b7a565b915050614d2a8261499c565b815260208201356001600160401b0380821115614d4657600080fd5b614d5285838601614c51565b6020840152614d636040850161499c565b60408401526060840135915080821115614d7c57600080fd5b614d8885838601614c51565b60608401526080840135608084015260a084013560a084015260c084013560c0840152614db760e08501614b9f565b60e084015261010091508184013581811115614dd257600080fd5b614dde86828701614baa565b8385015250505092915050565b803565ffffffffffff811681146117f157600080fd5b600060208284031215614e12578081fd5b813561193a81615c07565b600060208284031215614e2e578081fd5b815161193a81615c07565b60008060408385031215614e4b578081fd5b8251614e5681615c07565b60208401519092506001600160401b0380821115614e72578283fd5b9084019060c08287031215614e85578283fd5b614e8f60c0615b7a565b82518152602083015182811115614ea4578485fd5b614eb088828601614bf6565b60208301525060408301516040820152606083015182811115614ed1578485fd5b614edd88828601614ad4565b606083015250608083015182811115614ef4578485fd5b614f0088828601614ad4565b60808301525060a083015182811115614f17578485fd5b614f2388828601614a7f565b60a0830152508093505050509250929050565b60008060408385031215614f48578182fd5b8251614f5381615c07565b60208401519092506001600160401b0380821115614f6f578283fd5b9084019060a08287031215614f82578283fd5b614f8c60a0615b7a565b82518152602083015182811115614fa1578485fd5b614fad88828601614bf6565b602083015250604083015182811115614fc4578485fd5b614fd088828601614ad4565b604083015250606083015182811115614fe7578485fd5b614ff388828601614ad4565b60608301525060808301518281111561500a578485fd5b61501688828601614a7f565b6080830152508093505050509250929050565b6000806040838503121561503b578182fd5b825161504681615c07565b6020939093015192949293505050565b600080600080600060a0868803121561506d578081fd5b853561507881615c07565b9450602086013561508881615c07565b935060408601359250606086013561509f81615c07565b915060808601356150af81615c07565b809150509295509295909350565b6000806000806000806000806000806101408b8d0312156150dc578788fd5b6150e58b61499c565b99506150f360208c0161499c565b985060408b0135975061510860608c0161499c565b965061511660808c0161499c565b955061512460a08c0161499c565b945060c08b01356001600160401b038082111561513f578586fd5b61514b8e838f01614a1c565b955060e08d0135915080821115615160578485fd5b5061516d8d828e016149a7565b93505061517d6101008c01614b9f565b915061518c6101208c0161499c565b90509295989b9194979a5092959850565b600080600080600060a086880312156151b4578283fd5b85356151bf81615c07565b945060208601356001600160401b038111156151d9578384fd5b6151e588828901614baa565b9450506040860135925060608601359150608086013560ff811681146150af578182fd5b60008060006060848603121561521d578081fd5b833561522881615c07565b925061523660208501614deb565b915061524460408501614deb565b90509250925092565b60006020828403121561525e578081fd5b81516001600160401b03811115615273578182fd5b61487184828501614ad4565b600060208284031215615290578081fd5b61193a82614b8f565b6000602082840312156152aa578081fd5b5035919050565b6000602082840312156152c2578081fd5b813561193a81615c1c565b600080604083850312156152df578182fd5b82356152ea81615c1c565b915060208301356152fa81615c07565b809150509250929050565b600060208284031215615316578081fd5b81356001600160401b0381111561532b578182fd5b61487184828501614c39565b600060208284031215615348578081fd5b81516001600160401b038082111561535e578283fd5b9083019060408286031215615371578283fd5b60405160408101818110838211171561538657fe5b604052825161539481615c1c565b81526020830151828111156153a7578485fd5b6153b387828601614bf6565b60208301525095945050505050565b6000602082840312156153d3578081fd5b81516001600160401b03808211156153e9578283fd5b90830190604082860312156153fc578283fd5b60405160408101818110838211171561541157fe5b604052825182811115615422578485fd5b61542e87828601614ad4565b825250602083015182811115615442578485fd5b6153b387828601614ad4565b60006020828403121561545f578081fd5b81516001600160401b0380821115615475578283fd5b9083019060608286031215615488578283fd5b60405160608101818110838211171561549d57fe5b6040528251828111156154ae578485fd5b6154ba87828601614ad4565b8252506020830151828111156154ce578485fd5b6154da87828601614ad4565b6020830152506154ec60408401614b8f565b604082015295945050505050565b60006020828403121561550b578081fd5b81356001600160401b03811115615520578182fd5b61487184828501614d02565b60008060008060808587031215615541578182fd5b84356001600160401b0380821115615557578384fd5b61556388838901614d02565b95506020870135915080821115615578578384fd5b61558488838901614baa565b94506040870135915080821115615599578384fd5b6155a588838901614d02565b935060608701359150808211156155ba578283fd5b506155c787828801614baa565b91505092959194509250565b6000602082840312156155e4578081fd5b61193a82614deb565b60008151808452615605816020860160208601615bdb565b601f01601f19169290920160200192915050565b600063ffffffff60e01b825116835260208201516040602085015261487160408501826155ed565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b60006020825261193a60208301846155ed565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b600060408252615ac56040830185615619565b8281036020840152613cda8185615619565b600060608252845160406060840152615af360a0840182615619565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e19843603018112615b4c578283fd5b8301803591506001600160401b03821115615b65578283fd5b6020019150368190038213156127c257600080fd5b6040518181016001600160401b0381118282101715615b9557fe5b604052919050565b60006001600160401b03821115615bb057fe5b5060209081020190565b60006001600160401b03821115615bcd57fe5b50601f01601f191660200190565b60005b83811015615bf6578181015183820152602001615bde565b83811115610a405750506000910152565b6001600160a01b0381168114611cbf57600080fd5b6001600160e01b031981168114611cbf57600080fdfe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368a2646970667358221220853fb7961aafe6e2183b94b8e1ed04009e1c58f763f151673e596f036a33a5d064736f6c63430007060033", + "deployedBytecode": "0x60806040526004361061012a5760003560e01c8063715018a6116100ab578063bc158c2d1161006f578063bc158c2d146102fd578063d6ca6ab71461031d578063e2864fe31461033d578063e99a3f801461035d578063eae3ad6f14610370578063f2fde38b146103905761012a565b8063715018a61461026f5780638da5cb5b14610284578063b0e21e8a14610299578063b39deb46146102bd578063b74c8e9a146102dd5761012a565b80632d0335ab116100f25780632d0335ab146101da57806330c642f1146101fa5780633be899221461021a57806367d49a3b1461023a5780636d8f06941461024d5761012a565b80630c53c51c1461012f5780630d5f7d35146101585780631372a6251461016d57806320158c441461018d5780632bed54d6146101ba575b600080fd5b61014261013d36600461519d565b6103b0565b60405161014f9190615731565b60405180910390f35b61016b610166366004615305565b610729565b005b34801561017957600080fd5b5061016b610188366004615056565b610a46565b34801561019957600080fd5b506101ad6101a8366004615299565b610b63565b60405161014f919061570d565b3480156101c657600080fd5b5061016b6101d53660046150bd565b610b76565b3480156101e657600080fd5b506101ad6101f5366004614e01565b610cf0565b34801561020657600080fd5b5061016b6102153660046152cd565b610d0c565b34801561022657600080fd5b5061016b610235366004614e01565b610ddc565b61016b610248366004615305565b610e61565b34801561025957600080fd5b50610262611141565b60405161014f9190615641565b34801561027b57600080fd5b5061016b611151565b34801561029057600080fd5b506102626111fd565b3480156102a557600080fd5b506102ae61120d565b60405161014f939291906156e4565b3480156102c957600080fd5b5061016b6102d83660046152cd565b611238565b3480156102e957600080fd5b5061016b6102f8366004615209565b6112fc565b34801561030957600080fd5b5061016b610318366004614e01565b61137e565b34801561032957600080fd5b5061016b6103383660046155d3565b61144b565b34801561034957600080fd5b5061016b6103583660046154fa565b611525565b61016b61036b36600461552c565b6115e6565b34801561037c57600080fd5b5061016b61038b3660046155d3565b6115fc565b34801561039c57600080fd5b5061016b6103ab366004614e01565b6116d3565b606060006103bd866117d6565b90506000356001600160e01b03199081169082161415610424576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b038916600081815261019360209081529084902054835282015290810187905261046288828888886117f6565b61049d5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d9c6021913960400191505060405180910390fd5b6001600160a01b038816600090815261019360205260409020546104c29060016118e0565b61019360008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b6020831061052d5780518252601f19909201916020918201910161050e565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106105a35780518252601f199092019160209182019101610584565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610605576040519150601f19603f3d011682016040523d82523d6000602084013e61060a565b606091505b509150915081610661576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106e05781810151838201526020016106c8565b50505050905090810190601f16801561070d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b600061074361073e60c0840160a08501614e01565b611943565b604080516101208101909152909150600090806107636020860186614e01565b6001600160a01b031681526020016040518060400160405280604051806040016040528088604001602081019061079a91906152b1565b6001600160e01b03191681526020016107b660608a018a615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a083015201610859610140860161012087016152b1565b6001600160e01b0319168152602001610876610140860186615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815180830183528781526101808901356020828101919091528201528082018390528151608081018352949550919391925060608084019291829182820191829161090a91908c01908c016152b1565b6001600160e01b031916815260200161092660608b018b615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528201819052604082018190526060820152608001610995610140870161012088016152b1565b6001600160e01b03191681526020016109b26101c0870187615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610a36826109fc610160870187615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119a692505050565b610a4082826119bd565b50505050565b600054610100900460ff1680610a5f5750610a5f611c0f565b80610a6d575060005460ff16155b610aa85760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad3576000805460ff1961ff0019909116610100171660011790555b610adb611c20565b610ae3611cc2565b610aeb611dbb565b610b346040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611e8b565b610b3e8686611f1b565b610b49848484611fc5565b8015610b5b576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b600054610100900460ff1680610b8f5750610b8f611c0f565b80610b9d575060005460ff16155b610bd85760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015610c03576000805460ff1961ff0019909116610100171660011790555b610c0b611c20565b610c13611cc2565b610c1b611dbb565b610c646040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611e8b565b610c6e8b8b611f1b565b610c79898989611fc5565b60005b8551811015610cbd57610cb5868281518110610c9457fe5b6020026020010151868381518110610ca857fe5b6020026020010151610d6e565b600101610c7c565b50610cc8838361129a565b610cd1866116d3565b8015610ce3576000805461ff00191690555b5050505050505050505050565b6001600160a01b03166000908152610193602052604090205490565b610d14612085565b6001600160a01b0316610d256111fd565b6001600160a01b031614610d6e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c315359390610dd0908490615641565b60405180910390a25050565b610de4612085565b6001600160a01b0316610df56111fd565b6001600160a01b031614610e3e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e7661073e60c0840160a08501614e01565b60408051610120810190915290915060009080610e966020860186614e01565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b0316815260200160405180604001604052806040518060400160405280886040016020810190610efb91906152b1565b6001600160e01b0319168152602001610f1760608a018a615b36565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e085013560408201526101008501356060820152608001610f92610140860161012087016152b1565b6001600160e01b0319168152602001610faf610140860186615b36565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505060408051610120810182528281528151608081018352949550919391925060208301919081908181019081906110219060608c01908c016152b1565b6001600160e01b031916815260200161103d60608b018b615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c0016110d0610140870161012088016152b1565b6001600160e01b03191681526020016110ed6101c0870187615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050611137826109fc610160870187615b36565b610a4081836119bd565b610162546001600160a01b031681565b611159612085565b6001600160a01b031661116a6111fd565b6001600160a01b0316146111b3576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b03165b90565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b611240612085565b6001600160a01b03166112516111fd565b6001600160a01b03161461129a576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f90610dd0908490615641565b611304612085565b6001600160a01b03166113156111fd565b6001600160a01b03161461135e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6113678361137e565b6113708261144b565b611379816115fc565b505050565b611386612085565b6001600160a01b03166113976111fd565b6001600160a01b0316146113e0576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd0391611420916001600160a01b03909116908490615655565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b611453612085565b6001600160a01b03166114646111fd565b6001600160a01b0316146114ad576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e916114f291600160a01b90910465ffffffffffff16908490615b1d565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316611538612085565b6001600160a01b0316146115675760405162461bcd60e51b815260040161155e90615a8d565b60405180910390fd5b60808101516115885760405162461bcd60e51b815260040161155e9061581f565b600061159382612094565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a906115da90839061570d565b60405180910390a15050565b6115f28484848461221c565b610a4084836119bd565b611604612085565b6001600160a01b03166116156111fd565b6001600160a01b03161461165e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916116a391600160d01b90910465ffffffffffff16908490615b1d565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b6116db612085565b6001600160a01b03166116ec6111fd565b6001600160a01b031614611735576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160a01b03811661177a5760405162461bcd60e51b8152600401808060200182810382526026815260200180615c766026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008151600014156117ea575060006117f1565b5060208101515b919050565b600080600161180c611807886122e8565b61236b565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611863573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118bf576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b60008282018381101561193a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b61194b614930565b611953614930565b6001600160a01b038316611970576355575f5d60e11b815261193d565b6322ba176160e21b815260405161198b908490602001615641565b60408051601f19818403018152919052602082015292915050565b6119af826123b7565b6119b98282612481565b5050565b6000806119ca8484612730565b9150915060008060006119dd87876127c9565b925092509250600080611b366040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b0316815250611b318a600001518a60000151612878565b612949565b885191935091506001600160e01b0319166355575f5d60e11b1415611bb55785516001600160e01b0319166355575f5d60e11b1415611b7457600080fd5b81341015611b945760405162461bcd60e51b815260040161155e90615a65565b81341115611bb057611bb0611ba93484612ac0565b3390612b1d565b611c04565b85516001600160e01b0319166355575f5d60e11b1415611c045780341015611bef5760405162461bcd60e51b815260040161155e90615a65565b80341115611c0457611c04611ba93483612ac0565b505050505050505050565b6000611c1a30612bb5565b15905090565b600054610100900460ff1680611c395750611c39611c0f565b80611c47575060005460ff16155b611c825760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611cad576000805460ff1961ff0019909116610100171660011790555b8015611cbf576000805461ff00191690555b50565b600054610100900460ff1680611cdb5750611cdb611c0f565b80611ce9575060005460ff16155b611d245760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611d4f576000805460ff1961ff0019909116610100171660011790555b6000611d59612085565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611cbf576000805461ff001916905550565b600054610100900460ff1680611dd45750611dd4611c0f565b80611de2575060005460ff16155b611e1d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611e48576000805460ff1961ff0019909116610100171660011790555b611cad6040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b815250612bbb565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030611ec5612c7b565b60405160200180868152602001858152602001848152602001836001600160a01b031681526020018281526020019550505050505060405160208183030381529060405280519060200120610194819055505050565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff1680611fde5750611fde611c0f565b80611fec575060005460ff16155b6120275760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015612052576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610a40576000805461ff001916905550505050565b600061208f612c85565b905090565b60e08101516000906001600160e01b031916632611a13360e11b14806120c8575060e08201516001600160e01b0319908116145b1561213d5781516020830151516120de90612ce1565b6060840151516120ed90612ce1565b846080015160405160200180856001600160a01b031681526020018481526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506117f1565b815160208301515161214e90612ce1565b60608401515161215d90612ce1565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121c95781810151838201526020016121b1565b50505050905090810190601f1680156121f65780820380516001836020036101000a031916815260200191505b5096505050505050506040516020818303038152906040528051906020012090506117f1565b61222684846119a6565b61223082826119a6565b60408401516001600160a01b03161561228c5781516001600160a01b03161561228c5783604001516001600160a01b031682600001516001600160a01b03161461228c5760405162461bcd60e51b815260040161155e90615a22565b60408201516001600160a01b031615610a405783516001600160a01b031615610a405783600001516001600160a01b031682604001516001600160a01b031614610a405760405162461bcd60e51b815260040161155e90615891565b6000604051806080016040528060438152602001615c3360439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612375612d4b565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60a081015115806123cb5750428160a00151105b61241c576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c081015115806124305750428160c00151115b611cbf576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b60808201516125065781516001600160a01b0316156125015781516001600160a01b03166124ad612085565b6001600160a01b031614612501576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b6119b9565b81516001600160a01b0316612519612085565b6001600160a01b0316146119b957600061253283612d52565b905061254a83600001516001600160a01b0316612bb5565b15612686578251630b135d3f60e11b906001600160a01b0316631626ba7e61257184612e42565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156125c45781810151838201526020016125ac565b50505050905090810190601f1680156125f15780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561260f57600080fd5b505afa158015612623573d6000803e3d6000fd5b505050506040513d602081101561263957600080fd5b50516001600160e01b031916146126815760405162461bcd60e51b815260040180806020018281038252602b815260200180615ce0602b913960400191505060405180910390fd5b611379565b82516001600160a01b03166126a48361269e84612e42565b90612e4c565b6001600160a01b0316146126e95760405162461bcd60e51b8152600401808060200182810382526022815260200180615cbe6022913960400191505060405180910390fd5b82516001600160a01b0316611379576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b612738614930565b612740614930565b6020840151516060840151516127569190612ecc565b80519092506001600160e01b0319166127815760405162461bcd60e51b815260040161155e906159f6565b6060840151516020840151516127979190612ecc565b80519091506001600160e01b0319166127c25760405162461bcd60e51b815260040161155e906159f6565b9250929050565b6127d1614948565b6127d9614948565b6127e161496b565b60006127ec86612094565b905060006127f986612094565b90506000612805612085565b88519091506001600160a01b0316612824576001600160a01b03811688525b86516001600160a01b0316612840576001600160a01b03811687525b61284988612f0c565b955061285487612f0c565b945061286c888885858a604001518a60400151613005565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b141561289b5750600161193d565b6001600160e01b031982166355575f5d60e11b14156128bc5750600261193d565b6001600160e01b031983166322ba176160e21b14156128dd5750600161193d565b6001600160e01b031982166322ba176160e21b14156128fe5750600261193d565b6001600160e01b0319831663025ceed960e61b141561291f5750600161193d565b6001600160e01b0319821663025ceed960e61b14156129405750600261193d565b50600092915050565b8251602090810151835190910151600183600281111561296557fe5b14156129e75760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526129b790869086906131c0565b91506129e284600001516000015185600001516020015186608001518860200151886060015161343a565b612ab8565b60028360028111156129f557fe5b1415612a725760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b9091041691810191909152612a4790859087906131c0565b90506129e285600001516000015186600001516020015187608001518760200151896060015161343a565b845180516020918201516080880151928701516060890151612a9594919061343a565b835180516020918201516080870151928801516060880151612ab894919061343a565b935093915050565b600082821115612b17576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612b68576040519150601f19603f3d011682016040523d82523d6000602084013e612b6d565b606091505b5050905080611379576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff1680612bd45750612bd4611c0f565b80612be2575060005460ff16155b612c1d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015612c48576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca558015611379576000805461ff0019169055505050565b600061208f6135be565b600033301415612cdc57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061120a9050565b503390565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b6101945490565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d8260000151612d8784602001516135c2565b8460400151612d9986606001516135c2565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b6000612375613632565b60008151604114612ea4576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612ec28682858561366d565b9695505050505050565b612ed4614930565b6000612ee084846138c3565b80519091506001600160e01b031916612f0557612efd83856138c3565b91505061193d565b905061193d565b612f14614948565b60e08201516001600160e01b031916632611a13360e11b1415612f60576000826101000151806020019051810190612f4c91906153c2565b805183526020908101519083015250612fec565b60e08201516001600160e01b0319166323d235ef60e01b1415612fb8576000826101000151806020019051810190612f98919061544e565b805183526020808201519084015260409081015115159083015250612fec565b60e08201516001600160e01b03199081161415612fd457612fec565b60405162461bcd60e51b815260040161155e90615988565b8051516117f1578151612ffe90613adf565b8152919050565b61300d61496b565b600061301d886080015187613b7a565b9050600061302f886080015187613b7a565b905060006130418a8a85858a8a613b9f565b90508960200151602001516000141580613062575060608901516020015115155b156130855780516130855760405162461bcd60e51b815260040161155e90615901565b60608a0151602001511515806130a157506020808a0151015115155b156130ca5760008160200151116130ca5760405162461bcd60e51b815260040161155e90615901565b60808a01511561311d5785156130fc5780516130e79084906118e0565b600089815261012f602052604090205561311d565b602081015161310c9084906118e0565b600089815261012f60205260409020555b60808901511561317057841561315257602081015161313d9083906118e0565b600088815261012f6020526040902055613170565b805161315f9083906118e0565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c450926131ab928c928c929190615716565b60405180910390a19998505050505050505050565b60006131d9846000015160200151838660400151613c38565b90506000613203828660000151602001518760800151868960000151600001518a60600151613ce5565b8551805186515160208089015193015160808a015160608b0151959650613231959394929387929190613d42565b9050846040015151600114801561324d57508360400151516001145b80156132a25750846040015160008151811061326557fe5b6020026020010151600001516001600160a01b0316846040015160008151811061328b57fe5b6020026020010151600001516001600160a01b0316145b156133b857604080516001808252818301909252600091816020015b6132c6614985565b8152602001906001900390816132be57905050905084604001516000815181106132ec57fe5b6020026020010151600001518160008151811061330557fe5b60209081029190910101516001600160a01b0390911690526040860151805160009061332d57fe5b602002602001015160200151856040015160008151811061334a57fe5b602002602001015160200151018160008151811061336457fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250506133ae86600001516000015183886000015160200151848a608001518b60600151613e47565b5091506134119050565b6133e285600001516000015182876000015160200151886040015189608001518a60600151613e47565b50855180516020909101516040870151608089015160608a015194955061340d948693929190613e47565b5090505b6134328560000151600001518287608001518760200151896060015161343a565b509392505050565b600082511161345b5760405162461bcd60e51b815260040161155e9061584d565b600084815b600185510381101561352a5760006134a186838151811061347d57fe5b6020026020010151602001516001600160601b031689613efc90919063ffffffff16565b90506134d68683815181106134b257fe5b6020026020010151602001516001600160601b0316856118e090919063ffffffff16565b93508015613521576134e88382612ac0565b925061352160405180604001604052808b8152602001838152508888858151811061350f57fe5b60200260200101516000015188613f14565b50600101613460565b5060008460018651038151811061353d57fe5b6020026020010151905061356781602001516001600160601b0316846118e090919063ffffffff16565b9250826127101461358a5760405162461bcd60e51b815260040161155e906159bf565b81156135b4576135b460405180604001604052808a81526020018481525087836000015187613f14565b5050505050505050565b4690565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b086135f28360000151612ce1565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b600061208f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61366061431c565b613668614322565b614328565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156136ce5760405162461bcd60e51b8152600401808060200182810382526022815260200180615c9c6022913960400191505060405180910390fd5b6000601e8560ff1611156137a8576004850360ff16601b14806136f757506004850360ff16601c145b6137325760405162461bcd60e51b8152600401808060200182810382526022815260200180615d396022913960400191505060405180910390fd5b600161373d8761438a565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613797573d6000803e3d6000fd5b50505060206040510351905061385f565b8460ff16601b14806137bd57508460ff16601c145b6137f85760405162461bcd60e51b8152600401808060200182810382526022815260200180615d396022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613852573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166138ba576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6138cb614930565b825182516001600160e01b031982166355575f5d60e11b1415613936576001600160e01b031981166355575f5d60e11b141561390b57849250505061193d565b505060408051808201825260008082528251602081810190945290815291810191909152905061193d565b6001600160e01b031982166322ba176160e21b141561397b576001600160e01b031981166322ba176160e21b141561390b5761397285856143db565b9250505061193d565b6001600160e01b031982166339d690a360e11b14156139b7576001600160e01b031981166339d690a360e11b141561390b5761397285856143db565b6001600160e01b0319821663025ceed960e61b14156139f3576001600160e01b0319811663025ceed960e61b141561390b5761397285856143db565b6001600160e01b031982166000908152606560205260409020546001600160a01b03168015613aa8576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb090613a4a9089908990600401615ab2565b60006040518083038186803b158015613a6257600080fd5b505afa158015613a76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a9e9190810190615337565b935050505061193d565b6001600160e01b03198381169083161415613ac757613a9e86866143db565b60405162461bcd60e51b815260040161155e906157b1565b60408051600180825281830190925260609160009190816020015b613b02614985565b815260200190600190039081613afa5790505090508281600081518110613b2557fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505061271081600081518110613b5957fe5b6020908102919091018101516001600160601b039092169101529050919050565b600082613b895750600061193d565b50600090815261012f6020526040902054919050565b613ba761496b565b600080613bb5898887614438565b91509150600080613bc78a8988614438565b9150915083811180613be157508381148015613be1575083155b15613c0d57613c0284848c60200151602001518d60600151602001516144b1565b945050505050612ec2565b613c298b60200151602001518c60600151602001518484614536565b9b9a5050505050505050505050565b602082015160009065ffffffffffff16815b8351811015613cc557612710848281518110613c6257fe5b6020026020010151602001516001600160601b03161115613c955760405162461bcd60e51b815260040161155e90615959565b838181518110613ca157fe5b6020026020010151602001516001600160601b031682019150806001019050613c4a565b50613cda613cd38683613efc565b86906118e0565b9150505b9392505050565b6000806000613d078989886040015189602001510165ffffffffffff166145bc565b90925090508015613d3657613d3660405180604001604052808781526020018381525088886000015187613f14565b50979650505050505050565b600080613d4e886145de565b905080516001148015613d62575086516001145b8015613daf575086600081518110613d7657fe5b6020026020010151600001516001600160a01b031681600081518110613d9857fe5b6020026020010151600001516001600160a01b0316145b15613e005761138881600081518110613dc457fe5b6020026020010151602001516001600160601b03161115613df75760405162461bcd60e51b815260040161155e906157e8565b85915050613e3c565b600080613e118b8989868a8a613e47565b91509150611388811115613e375760405162461bcd60e51b815260040161155e906157e8565b509150505b979650505050505050565b846000805b8551811015613ef057613e88868281518110613e6457fe5b6020026020010151602001516001600160601b0316836118e090919063ffffffff16565b91506000613eb78489898581518110613e9d57fe5b6020026020010151602001516001600160601b03166145bc565b90945090508015613ee757613ee760405180604001604052808c8152602001838152508789858151811061350f57fe5b50600101613e4c565b50965096945050505050565b600061193a612710613f0e8585614753565b906147ac565b8351516001600160e01b0319166339d690a360e11b141561405a57600080856000015160200151806020019051810190613f4e9190615029565b915091508560200151600114613f765760405162461bcd60e51b815260040161155e906158d5565b6001600160a01b038516301415613fee57604051632142170760e11b81526001600160a01b038316906342842e0e90613fb79030908890869060040161566f565b600060405180830381600087803b158015613fd157600080fd5b505af1158015613fe5573d6000803e3d6000fd5b50505050614053565b604051637b84dc8360e11b81526001600160a01b0384169063f709b90690614020908590899089908790600401615787565b600060405180830381600087803b15801561403a57600080fd5b505af115801561404e573d6000803e3d6000fd5b505050505b5050610a40565b8351516001600160e01b0319166322ba176160e21b14156141b85760008460000151602001518060200190518101906140939190614e1d565b90506001600160a01b03841630141561414a57602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb916140d79187916004016156cb565b602060405180830381600087803b1580156140f157600080fd5b505af1158015614105573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614129919061527f565b6141455760405162461bcd60e51b815260040161155e9061592a565b6141b2565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c39161417f91859189918991600401615787565b600060405180830381600087803b15801561419957600080fd5b505af11580156141ad573d6000803e3d6000fd5b505050505b50610a40565b8351516001600160e01b03191663025ceed960e61b1415614275576000808560000151602001518060200190518101906141f29190615029565b90925090506001600160a01b03851630141561423d576020860151604051637921219560e11b81526001600160a01b0384169163f242432a91613fb791309189918791600401615693565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee9916140209186918a918a91889190600401615744565b8351516001600160e01b0319166355575f5d60e11b14156142be576001600160a01b03821630146142b95760208401516142b9906001600160a01b03841690612b1d565b610a40565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf1906142ee90879087908790600401615ad7565b600060405180830381600087803b15801561430857600080fd5b505af11580156135b4573d6000803e3d6000fd5b60c95490565b60ca5490565b60008383836143356135be565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6143e3614930565b6020808401518051908201208382015180519201919091208082141561440d57849250505061193d565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b60008082156144775760208086015101516144539085612ac0565b915061447085606001516020015186602001516020015184614813565b9050612ab8565b60608501516020015161448a9085612ac0565b90506144a785602001516020015186606001516020015183614813565b9150935093915050565b6144b961496b565b60006144c6858585614813565b90508581111561451d576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b61453e61496b565b600061454b838787614813565b9050838111156145a2576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b6000806145d2856145cd8686613efc565b614879565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480614612575081516001600160e01b0319166339d690a360e11b145b156146c85760008083602001518060200190518101906146329190615029565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a9061466990859085906004016156cb565b600060405180830381600087803b15801561468357600080fd5b505af1158015614697573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146bf919081019061524d565b925050506117f1565b81516001600160e01b03191662737ea960e61b141561470957600082602001518060200190518101906146fb9190614e39565b6080015192506117f1915050565b81516001600160e01b03191663d8f960c160e01b141561474b576000826020015180602001905181019061473d9190614f36565b6060015192506117f1915050565b506060919050565b6000826147625750600061193d565b8282028284828161476f57fe5b041461193a5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d5b6021913960400191505060405180910390fd5b6000808211614802576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161480b57fe5b049392505050565b60006148208484846148a1565b15614863576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b61487183613f0e8685614753565b949350505050565b600080828411156148985761488e8484612ac0565b91508290506127c2565b50600093915050565b6000826148e8576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8115806148f3575083155b1561490057506000613cde565b6000838061490a57fe5b85840990506149198584614753565b614925826103e8614753565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b80356117f181615c07565b600082601f8301126149b7578081fd5b813560206149cc6149c783615b9d565b615b7a565b82815281810190858301838502870184018810156149e8578586fd5b855b85811015614a0f5781356149fd81615c07565b845292840192908401906001016149ea565b5090979650505050505050565b600082601f830112614a2c578081fd5b81356020614a3c6149c783615b9d565b8281528181019085830183850287018401881015614a58578586fd5b855b85811015614a0f578135614a6d81615c1c565b84529284019290840190600101614a5a565b600082601f830112614a8f578081fd5b81516020614a9f6149c783615b9d565b82815281810190858301855b85811015614a0f57614ac2898684518b0101614bf6565b84529284019290840190600101614aab565b600082601f830112614ae4578081fd5b81516020614af46149c783615b9d565b82815281810190858301604080860288018501891015614b12578687fd5b865b86811015614b815781838b031215614b2a578788fd5b81518281018181106001600160401b0382111715614b4457fe5b83528351614b5181615c07565b8152838701516001600160601b0381168114614b6b57898afd5b8188015285529385019391810191600101614b14565b509198975050505050505050565b805180151581146117f157600080fd5b80356117f181615c1c565b600082601f830112614bba578081fd5b8135614bc86149c782615bba565b818152846020838601011115614bdc578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112614c06578081fd5b8151614c146149c782615bba565b818152846020838601011115614c28578283fd5b614871826020830160208701615bdb565b60006101e08284031215614c4b578081fd5b50919050565b60006040808385031215614c63578182fd5b80518181016001600160401b038282108183111715614c7e57fe5b818452829450853581811115614c9357600080fd5b8601808803851315614ca457600080fd5b608084018381108382111715614cb657fe5b909452833593614cc585615c1c565b93825260208401359381851115614cdb57600080fd5b614ce788868301614baa565b60608501525050815260209384013593019290925292915050565b6000610120808385031215614d15578182fd5b614d1e81615b7a565b915050614d2a8261499c565b815260208201356001600160401b0380821115614d4657600080fd5b614d5285838601614c51565b6020840152614d636040850161499c565b60408401526060840135915080821115614d7c57600080fd5b614d8885838601614c51565b60608401526080840135608084015260a084013560a084015260c084013560c0840152614db760e08501614b9f565b60e084015261010091508184013581811115614dd257600080fd5b614dde86828701614baa565b8385015250505092915050565b803565ffffffffffff811681146117f157600080fd5b600060208284031215614e12578081fd5b813561193a81615c07565b600060208284031215614e2e578081fd5b815161193a81615c07565b60008060408385031215614e4b578081fd5b8251614e5681615c07565b60208401519092506001600160401b0380821115614e72578283fd5b9084019060c08287031215614e85578283fd5b614e8f60c0615b7a565b82518152602083015182811115614ea4578485fd5b614eb088828601614bf6565b60208301525060408301516040820152606083015182811115614ed1578485fd5b614edd88828601614ad4565b606083015250608083015182811115614ef4578485fd5b614f0088828601614ad4565b60808301525060a083015182811115614f17578485fd5b614f2388828601614a7f565b60a0830152508093505050509250929050565b60008060408385031215614f48578182fd5b8251614f5381615c07565b60208401519092506001600160401b0380821115614f6f578283fd5b9084019060a08287031215614f82578283fd5b614f8c60a0615b7a565b82518152602083015182811115614fa1578485fd5b614fad88828601614bf6565b602083015250604083015182811115614fc4578485fd5b614fd088828601614ad4565b604083015250606083015182811115614fe7578485fd5b614ff388828601614ad4565b60608301525060808301518281111561500a578485fd5b61501688828601614a7f565b6080830152508093505050509250929050565b6000806040838503121561503b578182fd5b825161504681615c07565b6020939093015192949293505050565b600080600080600060a0868803121561506d578081fd5b853561507881615c07565b9450602086013561508881615c07565b935060408601359250606086013561509f81615c07565b915060808601356150af81615c07565b809150509295509295909350565b6000806000806000806000806000806101408b8d0312156150dc578788fd5b6150e58b61499c565b99506150f360208c0161499c565b985060408b0135975061510860608c0161499c565b965061511660808c0161499c565b955061512460a08c0161499c565b945060c08b01356001600160401b038082111561513f578586fd5b61514b8e838f01614a1c565b955060e08d0135915080821115615160578485fd5b5061516d8d828e016149a7565b93505061517d6101008c01614b9f565b915061518c6101208c0161499c565b90509295989b9194979a5092959850565b600080600080600060a086880312156151b4578283fd5b85356151bf81615c07565b945060208601356001600160401b038111156151d9578384fd5b6151e588828901614baa565b9450506040860135925060608601359150608086013560ff811681146150af578182fd5b60008060006060848603121561521d578081fd5b833561522881615c07565b925061523660208501614deb565b915061524460408501614deb565b90509250925092565b60006020828403121561525e578081fd5b81516001600160401b03811115615273578182fd5b61487184828501614ad4565b600060208284031215615290578081fd5b61193a82614b8f565b6000602082840312156152aa578081fd5b5035919050565b6000602082840312156152c2578081fd5b813561193a81615c1c565b600080604083850312156152df578182fd5b82356152ea81615c1c565b915060208301356152fa81615c07565b809150509250929050565b600060208284031215615316578081fd5b81356001600160401b0381111561532b578182fd5b61487184828501614c39565b600060208284031215615348578081fd5b81516001600160401b038082111561535e578283fd5b9083019060408286031215615371578283fd5b60405160408101818110838211171561538657fe5b604052825161539481615c1c565b81526020830151828111156153a7578485fd5b6153b387828601614bf6565b60208301525095945050505050565b6000602082840312156153d3578081fd5b81516001600160401b03808211156153e9578283fd5b90830190604082860312156153fc578283fd5b60405160408101818110838211171561541157fe5b604052825182811115615422578485fd5b61542e87828601614ad4565b825250602083015182811115615442578485fd5b6153b387828601614ad4565b60006020828403121561545f578081fd5b81516001600160401b0380821115615475578283fd5b9083019060608286031215615488578283fd5b60405160608101818110838211171561549d57fe5b6040528251828111156154ae578485fd5b6154ba87828601614ad4565b8252506020830151828111156154ce578485fd5b6154da87828601614ad4565b6020830152506154ec60408401614b8f565b604082015295945050505050565b60006020828403121561550b578081fd5b81356001600160401b03811115615520578182fd5b61487184828501614d02565b60008060008060808587031215615541578182fd5b84356001600160401b0380821115615557578384fd5b61556388838901614d02565b95506020870135915080821115615578578384fd5b61558488838901614baa565b94506040870135915080821115615599578384fd5b6155a588838901614d02565b935060608701359150808211156155ba578283fd5b506155c787828801614baa565b91505092959194509250565b6000602082840312156155e4578081fd5b61193a82614deb565b60008151808452615605816020860160208601615bdb565b601f01601f19169290920160200192915050565b600063ffffffff60e01b825116835260208201516040602085015261487160408501826155ed565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b60006020825261193a60208301846155ed565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b600060408252615ac56040830185615619565b8281036020840152613cda8185615619565b600060608252845160406060840152615af360a0840182615619565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e19843603018112615b4c578283fd5b8301803591506001600160401b03821115615b65578283fd5b6020019150368190038213156127c257600080fd5b6040518181016001600160401b0381118282101715615b9557fe5b604052919050565b60006001600160401b03821115615bb057fe5b5060209081020190565b60006001600160401b03821115615bcd57fe5b50601f01601f191660200190565b60005b83811015615bf6578181015183820152602001615bde565b83811115610a405750506000910152565b6001600160a01b0381168114611cbf57600080fd5b6001600160e01b031981168114611cbf57600080fdfe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368a2646970667358221220853fb7961aafe6e2183b94b8e1ed04009e1c58f763f151673e596f036a33a5d064736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))": { + "details": "function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction", + "params": { + "direct": "struct with parameters for accept bid operation" + } + }, + "directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))": { + "details": "function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 11953, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "matchers", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_address)" + }, + { + "astId": 12218, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 31747, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "proxies", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_bytes4,t_address)" + }, + { + "astId": 32063, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 138, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "201", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "202", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "203", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 13603, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "253", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 12535, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "fills", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 13467, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 30674, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "protocolFee", + "offset": 0, + "slot": "353", + "type": "t_struct(ProtocolFeeData)30710_storage" + }, + { + "astId": 30676, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "royaltiesRegistry", + "offset": 0, + "slot": "354", + "type": "t_contract(IRoyaltiesProvider)11922" + }, + { + "astId": 30678, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "defaultFeeReceiver", + "offset": 0, + "slot": "355", + "type": "t_address" + }, + { + "astId": 30682, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "feeReceivers", + "offset": 0, + "slot": "356", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 31723, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "357", + "type": "t_array(t_uint256)46_storage" + }, + { + "astId": 19515, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "nonces", + "offset": 0, + "slot": "403", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 19517, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "domainSeparator", + "offset": 0, + "slot": "404", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_contract(IRoyaltiesProvider)11922": { + "encoding": "inplace", + "label": "contract IRoyaltiesProvider", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_address)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_struct(ProtocolFeeData)30710_storage": { + "encoding": "inplace", + "label": "struct RaribleTransferManager.ProtocolFeeData", + "members": [ + { + "astId": 30705, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "receiver", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 30707, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "buyerAmount", + "offset": 20, + "slot": "0", + "type": "t_uint48" + }, + { + "astId": 30709, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "sellerAmount", + "offset": 26, + "slot": "0", + "type": "t_uint48" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "encoding": "inplace", + "label": "uint48", + "numberOfBytes": "6" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Proxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Proxy.json new file mode 100644 index 000000000..34df6ce6f --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Proxy.json @@ -0,0 +1,302 @@ +{ + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1049680", + "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000000000000000000000000000400000000000000000000000800000000000000010000000020000010000000000000042004000000000000000000200020000000000000008004002008000000000000000000000004000000000010001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000002000000004000000000000000a0000008000000000001000000000000000400000000000000000020000000000000000000000000000000000000020000000000000000300000000200", + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010", + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000006c619e55e9947051e98570a36044c31c4eb0736d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + }, + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + }, + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0xd8f960c100000000000000000000000000000000000000000000000000000000" + ], + "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", + "logIndex": 2, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + }, + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", + "logIndex": 3, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + }, + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", + "0xf63c282500000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", + "logIndex": 4, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + }, + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 5, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + }, + { + "transactionIndex": 1, + "blockNumber": 2308749, + "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + } + ], + "blockNumber": 2308749, + "cumulativeGasUsed": "1096581", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/RaribleExchangeWrapper.json b/projects/hardhat-deploy/deployments/camp_sepolia/RaribleExchangeWrapper.json new file mode 100644 index 000000000..0c7ba5ffc --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/RaribleExchangeWrapper.json @@ -0,0 +1,712 @@ +{ + "address": "0x689bFf422807f39c9A927bb78c34FE8D63529e28", + "abi": [ + { + "inputs": [ + { + "internalType": "address[11]", + "name": "marketplaces", + "type": "address[11]" + }, + { + "internalType": "address", + "name": "_weth", + "type": "address" + }, + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "result", + "type": "bool" + } + ], + "name": "Execution", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "Paused", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + } + ], + "name": "approveWETH", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "blur", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapper.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapper.PurchaseDetails[]", + "name": "purchaseDetails", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowFail", + "type": "bool" + } + ], + "name": "bulkPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "exchangeV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRare", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRareV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_paused", + "type": "bool" + } + ], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_4", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_5", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_6", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapper.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapper.PurchaseDetails", + "name": "purchaseDetails", + "type": "tuple" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + } + ], + "name": "singlePurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "sudoswap", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "weth", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wyvernExchange", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "x2y2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xa9a53a3c0b62e9837c7d05cf1ada484feb8e4924da20c3efc970c50b67e3bf22", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "4312361", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001001000000000004000000000000000000000020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000004000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xa67e95b68c1bf0e8a4e3b4db9f6d5abbb300d2d5baeba76df1fa133fef32e2ed", + "transactionHash": "0xa9a53a3c0b62e9837c7d05cf1ada484feb8e4924da20c3efc970c50b67e3bf22", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2308816, + "transactionHash": "0xa9a53a3c0b62e9837c7d05cf1ada484feb8e4924da20c3efc970c50b67e3bf22", + "address": "0x689bFf422807f39c9A927bb78c34FE8D63529e28", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xa67e95b68c1bf0e8a4e3b4db9f6d5abbb300d2d5baeba76df1fa133fef32e2ed" + }, + { + "transactionIndex": 1, + "blockNumber": 2308816, + "transactionHash": "0xa9a53a3c0b62e9837c7d05cf1ada484feb8e4924da20c3efc970c50b67e3bf22", + "address": "0x689bFf422807f39c9A927bb78c34FE8D63529e28", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xa67e95b68c1bf0e8a4e3b4db9f6d5abbb300d2d5baeba76df1fa133fef32e2ed" + } + ], + "blockNumber": 2308816, + "cumulativeGasUsed": "4359262", + "status": 1, + "byzantium": true + }, + "args": [ + [ + "0x0000000000000000000000000000000000000000", + "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "0x00000000006c3852cbEf3e08E8dF289169EdE581", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x00000000000001ad428e4906aE43D8F9852d0dD6", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", + "0x0000000000000068F116a894984e2DB1123eB395" + ], + "0x0000000000000000000000000000000000000000", + [ + "0xA3d49c7e2c845b792e422696FE0D9ef17a509731" + ], + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[11]\",\"name\":\"marketplaces\",\"type\":\"address[11]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_6\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":\"RaribleExchangeWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165 is IERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n constructor () internal {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Receiver.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\ncontract ERC1155Holder is ERC1155Receiver {\\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155BatchReceived.selector;\\n }\\n}\\n\",\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155Receiver.sol\\\";\\nimport \\\"../../introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\\n constructor() internal {\\n _registerInterface(\\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n}\\n\",\"keccak256\":\"0x57a0e246fb1c8f9cccf91c508eafe474e40260a31de3a39019ba8312cfdf9b2d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155Receiver is IERC165 {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC721Receiver.sol\\\";\\n\\n /**\\n * @dev Implementation of the {IERC721Receiver} interface.\\n *\\n * Accepts all token transfers. \\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\\n */\\ncontract ERC721Holder is IERC721Receiver {\\n\\n /**\\n * @dev See {IERC721Receiver-onERC721Received}.\\n *\\n * Always returns `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n}\\n\",\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function _setAssetMatcher(bytes4 assetType, address matcher) internal {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x8fceb04eec1c1b32bea097a019b57e9422c31fa2e020e9957db91d5b03edb1bb\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n function __ExchangeV2_init_proxy(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider,\\n address _initialOwner,\\n bytes4[] memory assetTypes, \\n address[] memory proxies,\\n bytes4 assetMatcherType,\\n address assetMatcher\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n for (uint i = 0; i < assetTypes.length; i++) {\\n _setTransferProxy(assetTypes[i], proxies[i]);\\n }\\n _setAssetMatcher(assetMatcherType, assetMatcher);\\n transferOwnership(_initialOwner);\\n }\\n}\\n\",\"keccak256\":\"0x8b5d108d1e027792fd3494dda7feb79937b5bb68cec82109f3ce69fe1f01c59a\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\\\";\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport \\\"./interfaces/IWyvernExchange.sol\\\";\\nimport \\\"./interfaces/IExchangeV2.sol\\\";\\nimport \\\"./interfaces/ISeaPort.sol\\\";\\nimport \\\"./interfaces/Ix2y2.sol\\\";\\nimport \\\"./interfaces/ILooksRare.sol\\\";\\nimport \\\"./interfaces/IBlur.sol\\\";\\n\\nimport \\\"./libraries/IsPausable.sol\\\";\\n\\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\\n using LibTransfer for address;\\n using BpLibrary for uint;\\n using SafeMath for uint;\\n\\n //marketplaces\\n address public immutable wyvernExchange;\\n address public immutable exchangeV2;\\n address public immutable seaPort_1_1;\\n address public immutable x2y2;\\n address public immutable looksRare;\\n address public immutable sudoswap;\\n address public immutable seaPort_1_4;\\n address public immutable looksRareV2;\\n address public immutable blur;\\n address public immutable seaPort_1_5;\\n address public immutable seaPort_1_6;\\n\\n //currencties\\n address public immutable weth;\\n\\n //constants\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n event Execution(bool result);\\n\\n enum Markets {\\n ExchangeV2,//0\\n WyvernExchange,//1\\n SeaPort_1_1,//2\\n X2Y2,//3\\n LooksRareOrders,//4\\n SudoSwap,//5\\n SeaPort_1_4,//6\\n LooksRareV2,//7\\n Blur,//8\\n SeaPort_1_5,//9\\n SeaPort_1_6//10\\n }\\n\\n enum AdditionalDataTypes {\\n NoAdditionalData,\\n RoyaltiesAdditionalData\\n }\\n\\n enum Currencies {\\n ETH,\\n WETH\\n }\\n\\n /**\\n @notice struct for the purchase data\\n @param marketId - market key from Markets enum (what market to use)\\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\\n bytes (27,28) used for dataType\\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\\n @param data - data for market call\\n */\\n struct PurchaseDetails {\\n Markets marketId;\\n uint256 amount;\\n uint fees;\\n bytes data;\\n }\\n\\n /**\\n @notice struct for the data with additional Ddta\\n @param data - data for market call\\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\\n */\\n struct AdditionalData {\\n bytes data;\\n uint[] additionalRoyalties;\\n }\\n\\n constructor(\\n address[11] memory marketplaces,\\n //address _wyvernExchange, 0\\n //address _exchangeV2, 1\\n //address _seaPort_1_1, 2\\n //address _x2y2, 3\\n //address _looksRare, 4\\n //address _sudoswap, 5\\n //address _seaPort_1_4, 6\\n //address _looksRareV2, 7\\n //address _blur, 8\\n //address _seaPort_1_5, 9\\n //address _seaPort_1_6, 10\\n address _weth,\\n address[] memory transferProxies,\\n address initialOwner\\n ) {\\n wyvernExchange = marketplaces[0];\\n exchangeV2 = marketplaces[1];\\n seaPort_1_1 = marketplaces[2];\\n x2y2 = marketplaces[3];\\n looksRare = marketplaces[4];\\n sudoswap = marketplaces[5];\\n seaPort_1_4 = marketplaces[6];\\n looksRareV2 = marketplaces[7];\\n blur = marketplaces[8];\\n seaPort_1_5 = marketplaces[9];\\n seaPort_1_6 = marketplaces[10];\\n\\n weth = _weth;\\n\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n if (_weth != address(0)){\\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n transferOwnership(initialOwner);\\n }\\n\\n /**\\n @notice executes a single purchase\\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n */\\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\\n requireNotPaused();\\n \\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\\n \\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n Currencies currency = getCurrency(purchaseDetails.fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n emit Execution(success);\\n \\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes an array of purchases\\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\\n */\\n \\n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\\n requireNotPaused();\\n\\n uint sumFirstFeesETH = 0;\\n uint sumSecondFeesETH = 0;\\n uint sumFirstFeesWETH = 0;\\n uint sumSecondFeesWETH = 0;\\n bool result = false;\\n\\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = 0;\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\\n }\\n\\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n Currencies currency = getCurrency(purchaseDetails[i].fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n result = result || success;\\n emit Execution(success);\\n }\\n\\n require(result, \\\"no successful executions\\\");\\n\\n //pay fees in ETH \\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\\n\\n //pay fees in WETH\\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\\n\\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes one purchase in ETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n uint paymentAmount = purchaseDetails.amount;\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase wyvernExchange failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\\n\\n if (allowFail) {\\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n Ix2y2(x2y2).run{value : paymentAmount}(input);\\n }\\n\\n //for every element in input.details[] getting\\n // order = input.details[i].orderIdx\\n // and from that order getting item = input.details[i].itemId\\n for (uint i = 0; i < input.details.length; ++i) {\\n uint orderId = input.details[i].orderIdx;\\n uint itemId = input.details[i].itemIdx;\\n bytes memory data = input.orders[orderId].items[itemId].data;\\n {\\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\\n }\\n }\\n\\n // 1 = erc-721\\n if (input.orders[orderId].delegateType == 1) {\\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair721 memory p = pairs[j];\\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\\n }\\n } else if (input.orders[orderId].delegateType == 2) {\\n // 2 = erc-1155\\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair1155 memory p = pairs[j];\\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \\\"\\\");\\n }\\n } else {\\n revert(\\\"unknown delegateType x2y2\\\");\\n }\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\\n if (allowFail) {\\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase sudoswap failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase LooksRareV2 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.Blur){\\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\\n if (allowFail) {\\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId ETH\\\");\\n }\\n\\n //transferring royalties\\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\\n \\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice executes one purchase in WETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n\\n //buying\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed WETH\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId WETH\\\");\\n }\\n \\n //transfer royalties\\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\\n\\n //get fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice transfers ETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n LibTransfer.transferEth(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers WETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers change back to sender\\n */\\n function transferChange() internal {\\n uint ethAmount = address(this).balance;\\n if (ethAmount > 0) {\\n address(msg.sender).transferEth(ethAmount);\\n }\\n }\\n\\n /**\\n @notice transfers weth change back to sender\\n */\\n function transferChangeWETH() internal {\\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\\n if (wethAmount > 0) {\\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\\n }\\n }\\n\\n /**\\n @notice parses fees in base points from one uint and calculates real amount of fees\\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\\n @param amount price of the order\\n @return firstFeeAmount real amount for the first fee\\n @return secondFeeAmount real amount for the second fee\\n */\\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\\n uint firstFee = uint(uint16(fees >> 16));\\n uint secondFee = uint(uint16(fees));\\n return (amount.bp(firstFee), amount.bp(secondFee));\\n }\\n\\n /**\\n @notice parses \\\"fees\\\" field to find the currency for the purchase\\n @param fees field with encoded data\\n @return 0 if ETH, 1 if WETH ERC-20\\n */\\n function getCurrency(uint fees) internal pure returns(Currencies) {\\n return Currencies(uint16(fees >> 48));\\n }\\n\\n\\n /**\\n @notice parses _data to data for market call and additionalData\\n @param feesAndDataType 27 and 28 bytes for dataType\\n @return marketData data for market call\\n @return additionalRoyalties array uint256, (base point + address)\\n */\\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\\n uint[] memory additionalRoyalties;\\n\\n //return no royalties if wrong data type\\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\\n return (_data, additionalRoyalties);\\n }\\n\\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\\n\\n //return no royalties if market doesn't support royalties\\n if (supportsRoyalties(marketId)) {\\n return (additionalData.data, additionalData.additionalRoyalties);\\n } else {\\n return (additionalData.data, additionalRoyalties);\\n } \\n }\\n \\n revert(\\\"unknown additionalDataType\\\");\\n }\\n\\n /**\\n @notice transfer additional royalties in ETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeETH(value, account);\\n }\\n }\\n }\\n\\n /**\\n @notice transfer additional royalties in WETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeWETH(value, account);\\n }\\n }\\n }\\n\\n // modifies `src`\\n function _arrayReplace(\\n bytes memory src,\\n bytes memory replacement,\\n bytes memory mask\\n ) internal view virtual {\\n require(src.length == replacement.length);\\n require(src.length == mask.length);\\n\\n for (uint256 i = 0; i < src.length; ++i) {\\n if (mask[i] != 0) {\\n src[i] = replacement[i];\\n }\\n }\\n }\\n\\n /**\\n @notice returns true if this contract supports additional royalties for the marketplace;\\n now royalties are supported for:\\n 1. SudoSwap\\n 2. LooksRare old\\n 3. LooksRare V2\\n */\\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\\n if (\\n marketId == Markets.SudoSwap ||\\n marketId == Markets.LooksRareOrders ||\\n marketId == Markets.LooksRareV2\\n ) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\\n uint result = 0;\\n\\n Currencies currency = getCurrency(detail.fees);\\n\\n //for every purchase with WETH we sum amount, fees and royalties needed\\n if (currency == Currencies.WETH) {\\n\\n //add amount\\n result = result + detail.amount;\\n\\n //add fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\\n result = result + firstFeeAmount + secondFeeAmount;\\n\\n //add royalties\\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\\n for (uint j = 0; j < royalties.length; ++j) {\\n uint royaltyBasePoint = uint(royalties[j] >> 160);\\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\\n result = result + royaltyValue;\\n }\\n }\\n\\n return result;\\n }\\n\\n /**\\n @notice approves weth for a list of the addresses\\n @param transferProxies - array of addresses to approve WETH for\\n */\\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n receive() external payable {}\\n}\",\"keccak256\":\"0xef372314c49c4a4c44c2956a8d3e875e4c1016963969f5a867cd9d6162a920c2\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\n\\ninterface IBlur {\\n enum Side { Buy, Sell }\\n enum SignatureVersion { Single, Bulk }\\n enum AssetType { ERC721, ERC1155 }\\n\\n struct Fee {\\n uint16 rate;\\n address payable recipient;\\n }\\n \\n struct Order {\\n address trader;\\n Side side;\\n address matchingPolicy;\\n address collection;\\n uint256 tokenId;\\n uint256 amount;\\n address paymentToken;\\n uint256 price;\\n uint256 listingTime;\\n /* Order expiration timestamp - 0 for oracle cancellations. */\\n uint256 expirationTime;\\n Fee[] fees;\\n uint256 salt;\\n bytes extraParams;\\n }\\n\\n struct Input {\\n Order order;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n bytes extraSignature;\\n SignatureVersion signatureVersion;\\n uint256 blockNumber;\\n }\\n\\n function execute(Input calldata sell, Input calldata buy)\\n external\\n payable;\\n}\\n\",\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-v2/contracts/ExchangeV2.sol\\\";\\n\\nimport {RoyaltiesRegistry} from \\\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\\\";\\nimport {TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\\\";\\nimport {ERC20TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\\\";\\n\\ninterface IExchangeV2 {\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable;\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable;\\n}\",\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibLooksRare.sol\\\";\\n\\ninterface ILooksRare {\\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\\n\\n /**\\n * @notice This function allows a user to execute a taker bid (against a maker ask).\\n * @param takerBid Taker bid struct\\n * @param makerAsk Maker ask struct\\n * @param makerSignature Maker signature\\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\\n * @param affiliate Affiliate address\\n */\\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\\n}\\n\",\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibSeaPort.sol\\\";\\n\\ninterface ISeaPort {\\n function fulfillAdvancedOrder(\\n LibSeaPort.AdvancedOrder calldata advancedOrder,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n bytes32 fulfillerConduitKey,\\n address recipient\\n ) external payable returns (bool fulfilled);\\n\\n function fulfillAvailableAdvancedOrders(\\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\\n bytes32 fulfillerConduitKey,\\n address recipient,\\n uint256 maximumFulfilled\\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\\n\\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\\n external\\n payable\\n returns (bool fulfilled);\\n}\",\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface IWyvernExchange {\\n function atomicMatch_(\\n address[14] memory addrs,\\n uint[18] memory uints,\\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\\n bytes memory calldataBuy,\\n bytes memory calldataSell,\\n bytes memory replacementPatternBuy,\\n bytes memory replacementPatternSell,\\n bytes memory staticExtradataBuy,\\n bytes memory staticExtradataSell,\\n uint8[2] memory vs,\\n bytes32[5] memory rssMetadata)\\n external\\n payable;\\n\\n enum Side {\\n Buy,\\n Sell\\n }\\n\\n enum SaleKind {\\n FixedPrice,\\n DutchAuction\\n }\\n\\n function calculateFinalPrice(\\n Side side,\\n SaleKind saleKind,\\n uint256 basePrice,\\n uint256 extra,\\n uint256 listingTime,\\n uint256 expirationTime\\n ) external view returns (uint256);\\n}\",\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface Ix2y2 {\\n\\n struct OrderItem {\\n uint256 price;\\n bytes data;\\n }\\n\\n struct Pair721 {\\n address token;\\n uint256 tokenId;\\n }\\n\\n struct Pair1155 {\\n address token;\\n uint256 tokenId;\\n uint256 amount;\\n }\\n\\n struct Order {\\n uint256 salt;\\n address user;\\n uint256 network;\\n uint256 intent;\\n uint256 delegateType;\\n uint256 deadline;\\n address currency;\\n bytes dataMask;\\n OrderItem[] items;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n uint8 signVersion;\\n }\\n\\n struct Fee {\\n uint256 percentage;\\n address to;\\n }\\n\\n struct SettleDetail {\\n Op op;\\n uint256 orderIdx;\\n uint256 itemIdx;\\n uint256 price;\\n bytes32 itemHash;\\n address executionDelegate;\\n bytes dataReplacement;\\n uint256 bidIncentivePct;\\n uint256 aucMinIncrementPct;\\n uint256 aucIncDurationSecs;\\n Fee[] fees;\\n }\\n\\n struct SettleShared {\\n uint256 salt;\\n uint256 deadline;\\n uint256 amountToEth;\\n uint256 amountToWeth;\\n address user;\\n bool canFail;\\n }\\n\\n struct RunInput {\\n Order[] orders;\\n SettleDetail[] details;\\n SettleShared shared;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n }\\n\\n enum Op {\\n INVALID,\\n // off-chain\\n COMPLETE_SELL_OFFER,\\n COMPLETE_BUY_OFFER,\\n CANCEL_OFFER,\\n // auction\\n BID,\\n COMPLETE_AUCTION,\\n REFUND_AUCTION,\\n REFUND_AUCTION_STUCK_ITEM\\n }\\n\\n function run(RunInput memory input) external payable;\\n}\",\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nabstract contract IsPausable is Ownable {\\n bool public paused;\\n\\n event Paused(bool paused);\\n\\n function pause(bool _paused) external onlyOwner {\\n paused = _paused;\\n emit Paused(_paused);\\n }\\n\\n function requireNotPaused() internal view {\\n require (!paused, \\\"the contract is paused\\\");\\n }\\n\\n}\\n\",\"keccak256\":\"0xd0ea1d6838dd79b8cfe64e777e4f84456928f0e3621fbb6acd00492e738b2b61\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibLooksRare {\\n struct MakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address signer; // signer of the maker order\\n address collection; // collection address\\n uint256 price; // price (used as )\\n uint256 tokenId; // id of the token\\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\\n address currency; // currency (e.g., WETH)\\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\\n uint256 startTime; // startTime in timestamp\\n uint256 endTime; // endTime in timestamp\\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // additional parameters\\n uint8 v; // v: parameter (27 or 28)\\n bytes32 r; // r: parameter\\n bytes32 s; // s: parameter\\n }\\n\\n struct TakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address taker; // msg.sender\\n uint256 price; // final price for the purchase\\n uint256 tokenId;\\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // other params (e.g., tokenId)\\n }\\n\\n /**\\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\\n */\\n enum CollectionType {\\n ERC721,\\n ERC1155\\n }\\n\\n /**\\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\\n */\\n enum QuoteType {\\n Bid,\\n Ask\\n }\\n /**\\n * 1. Maker struct\\n */\\n\\n /**\\n * @notice Maker is the struct for a maker order.\\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\\n * @param globalNonce Global user order nonce for maker orders\\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\\n * @param strategyId Strategy id\\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\\n * @param collection Collection address\\n * @param currency Currency address (@dev address(0) = ETH)\\n * @param signer Signer address\\n * @param startTime Start timestamp\\n * @param endTime End timestamp\\n * @param price Minimum price for maker ask, maximum price for maker bid\\n * @param itemIds Array of itemIds\\n * @param amounts Array of amounts\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Maker {\\n QuoteType quoteType;\\n uint256 globalNonce;\\n uint256 subsetNonce;\\n uint256 orderNonce;\\n uint256 strategyId;\\n CollectionType collectionType;\\n address collection;\\n address currency;\\n address signer;\\n uint256 startTime;\\n uint256 endTime;\\n uint256 price;\\n uint256[] itemIds;\\n uint256[] amounts;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 2. Taker struct\\n */\\n\\n /**\\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Taker {\\n address recipient;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 3. Merkle tree struct\\n */\\n\\n enum MerkleTreeNodePosition {\\n Left,\\n Right\\n }\\n\\n /**\\n * @notice MerkleTreeNode is a MerkleTree's node.\\n * @param value It can be an order hash or a proof\\n * @param position The node's position in its branch.\\n * It can be left or right or none\\n * (before the tree is sorted).\\n */\\n struct MerkleTreeNode {\\n bytes32 value;\\n MerkleTreeNodePosition position;\\n }\\n\\n /**\\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\\n * @dev A Merkle tree can be computed with order hashes.\\n * It can contain order hashes from both maker bid and maker ask structs.\\n * @param root Merkle root\\n * @param proof Array containing the merkle proof\\n */\\n struct MerkleTree {\\n bytes32 root;\\n MerkleTreeNode[] proof;\\n }\\n}\\n\",\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibSeaPort {\\n /**\\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\\n * matching, a group of six functions may be called that only requires a\\n * subset of the usual order arguments. Note the use of a \\\"basicOrderType\\\"\\n * enum; this represents both the usual order type as well as the \\\"route\\\"\\n * of the basic order (a simple derivation function for the basic order\\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\\n */\\n struct BasicOrderParameters {\\n address considerationToken; // 0x24\\n uint256 considerationIdentifier; // 0x44\\n uint256 considerationAmount; // 0x64\\n address payable offerer; // 0x84\\n address zone; // 0xa4\\n address offerToken; // 0xc4\\n uint256 offerIdentifier; // 0xe4\\n uint256 offerAmount; // 0x104\\n BasicOrderType basicOrderType; // 0x124\\n uint256 startTime; // 0x144\\n uint256 endTime; // 0x164\\n bytes32 zoneHash; // 0x184\\n uint256 salt; // 0x1a4\\n bytes32 offererConduitKey; // 0x1c4\\n bytes32 fulfillerConduitKey; // 0x1e4\\n uint256 totalOriginalAdditionalRecipients; // 0x204\\n AdditionalRecipient[] additionalRecipients; // 0x224\\n bytes signature; // 0x244\\n }\\n /**\\n * @dev Basic orders can supply any number of additional recipients, with the\\n * implied assumption that they are supplied from the offered ETH (or other\\n * native token) or ERC20 token for the order.\\n */\\n struct AdditionalRecipient {\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum BasicOrderType {\\n // 0: no partial fills, anyone can execute\\n ETH_TO_ERC721_FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n ETH_TO_ERC721_PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC721_FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 4: no partial fills, anyone can execute\\n ETH_TO_ERC1155_FULL_OPEN,\\n\\n // 5: partial fills supported, anyone can execute\\n ETH_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 6: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 7: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 8: no partial fills, anyone can execute\\n ERC20_TO_ERC721_FULL_OPEN,\\n\\n // 9: partial fills supported, anyone can execute\\n ERC20_TO_ERC721_PARTIAL_OPEN,\\n\\n // 10: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC721_FULL_RESTRICTED,\\n\\n // 11: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 12: no partial fills, anyone can execute\\n ERC20_TO_ERC1155_FULL_OPEN,\\n\\n // 13: partial fills supported, anyone can execute\\n ERC20_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 14: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 15: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 16: no partial fills, anyone can execute\\n ERC721_TO_ERC20_FULL_OPEN,\\n\\n // 17: partial fills supported, anyone can execute\\n ERC721_TO_ERC20_PARTIAL_OPEN,\\n\\n // 18: no partial fills, only offerer or zone can execute\\n ERC721_TO_ERC20_FULL_RESTRICTED,\\n\\n // 19: partial fills supported, only offerer or zone can execute\\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\\n\\n // 20: no partial fills, anyone can execute\\n ERC1155_TO_ERC20_FULL_OPEN,\\n\\n // 21: partial fills supported, anyone can execute\\n ERC1155_TO_ERC20_PARTIAL_OPEN,\\n\\n // 22: no partial fills, only offerer or zone can execute\\n ERC1155_TO_ERC20_FULL_RESTRICTED,\\n\\n // 23: partial fills supported, only offerer or zone can execute\\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\\n }\\n\\n /**\\n * @dev The full set of order components, with the exception of the counter,\\n * must be supplied when fulfilling more sophisticated orders or groups of\\n * orders. The total number of original consideration items must also be\\n * supplied, as the caller may specify additional consideration items.\\n */\\n struct OrderParameters {\\n address offerer; // 0x00\\n address zone; // 0x20\\n OfferItem[] offer; // 0x40\\n ConsiderationItem[] consideration; // 0x60\\n OrderType orderType; // 0x80\\n uint256 startTime; // 0xa0\\n uint256 endTime; // 0xc0\\n bytes32 zoneHash; // 0xe0\\n uint256 salt; // 0x100\\n bytes32 conduitKey; // 0x120\\n uint256 totalOriginalConsiderationItems; // 0x140\\n // offer.length // 0x160\\n }\\n\\n /**\\n * @dev Orders require a signature in addition to the other order parameters.\\n */\\n struct Order {\\n OrderParameters parameters;\\n bytes signature;\\n }\\n\\n struct AdvancedOrder {\\n OrderParameters parameters;\\n uint120 numerator;\\n uint120 denominator;\\n bytes signature;\\n bytes extraData;\\n }\\n\\n struct OfferItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n }\\n\\n /**\\n * @dev A consideration item has the same five components as an offer item and\\n * an additional sixth component designating the required recipient of the\\n * item.\\n */\\n struct ConsiderationItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum OrderType {\\n // 0: no partial fills, anyone can execute\\n FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n PARTIAL_RESTRICTED\\n }\\n\\n // prettier-ignore\\n enum ItemType {\\n // 0: ETH on mainnet, MATIC on polygon, etc.\\n NATIVE,\\n\\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\\n ERC20,\\n\\n // 2: ERC721 items\\n ERC721,\\n\\n // 3: ERC1155 items\\n ERC1155,\\n\\n // 4: ERC721 items where a number of tokenIds are supported\\n ERC721_WITH_CRITERIA,\\n\\n // 5: ERC1155 items where a number of ids are supported\\n ERC1155_WITH_CRITERIA\\n }\\n\\n /**\\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\\n * offer and consideration items, then generates a single execution\\n * element. A given fulfillment can be applied to as many offer and\\n * consideration items as desired, but must contain at least one offer and\\n * at least one consideration that match. The fulfillment must also remain\\n * consistent on all key parameters across all offer items (same offerer,\\n * token, type, tokenId, and conduit preference) as well as across all\\n * consideration items (token, type, tokenId, and recipient).\\n */\\n struct Fulfillment {\\n FulfillmentComponent[] offerComponents;\\n FulfillmentComponent[] considerationComponents;\\n }\\n\\n /**\\n * @dev Each fulfillment component contains one index referencing a specific\\n * order and another referencing a specific offer or consideration item.\\n */\\n struct FulfillmentComponent {\\n uint256 orderIndex;\\n uint256 itemIndex;\\n }\\n\\n /**\\n * @dev An execution is triggered once all consideration items have been zeroed\\n * out. It sends the item in question from the offerer to the item's\\n * recipient, optionally sourcing approvals from either this contract\\n * directly or from the offerer's chosen conduit if one is specified. An\\n * execution is not provided as an argument, but rather is derived via\\n * orders, criteria resolvers, and fulfillments (where the total number of\\n * executions will be less than or equal to the total number of indicated\\n * fulfillments) and returned as part of `matchOrders`.\\n */\\n struct Execution {\\n ReceivedItem item;\\n address offerer;\\n bytes32 conduitKey;\\n }\\n\\n /**\\n * @dev A received item is translated from a utilized consideration item and has\\n * the same four components as a spent item, as well as an additional fifth\\n * component designating the required recipient of the item.\\n */\\n struct ReceivedItem {\\n ItemType itemType;\\n address token;\\n uint256 identifier;\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n struct CriteriaResolver {\\n uint256 orderIndex;\\n Side side;\\n uint256 index;\\n uint256 identifier;\\n bytes32[] criteriaProof;\\n }\\n\\n // prettier-ignore\\n enum Side {\\n // 0: Items that can be spent\\n OFFER,\\n\\n // 1: Items that must be received\\n CONSIDERATION\\n }\\n}\\n\",\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n function __RoyaltiesRegistry_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0xe0ea605e62d7b65dae93684b5102383b3b9fec0ade21efca0f2831d468738f50\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function _setTransferProxy(bytes4 assetType, address proxy) internal {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xea639616c66696b5ae9b278d3c6c9a85839bb5e815a4db046b4fd0225cd86625\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __ERC20TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x2fce5fa6025c24a87072eed4cec6ff8e9172ec7b72ca211286904847adf4a324\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x23a035508922fbe29dfb91796175b391943f830eead313134142a01bd776f848\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6102006040523480156200001257600080fd5b50604051620050b5380380620050b5833981016040819052620000359162000466565b60006200004162000219565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602062005095833981519152908290a3506200008c6301ffc9a760e01b6200021d565b6200009e630271189760e51b6200021d565b83516001600160601b0319606091821b811660809081526020870151831b821660a09081526040880151841b831660c090815284890151851b841660e090815292890151851b841661010090815291890151851b841661012090815290890151851b841661014090815292890151851b84166101605290880151841b831661018052870151831b82166101a052860151821b81166101c0529084901b166101e05260005b825181101562000203576001600160a01b03841615620001fa57836001600160a01b031663095ea7b38483815181106200017857fe5b60200260200101516000196040518363ffffffff1660e01b8152600401620001a29291906200055f565b602060405180830381600087803b158015620001bd57600080fd5b505af1158015620001d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f8919062000536565b505b60010162000142565b506200020f81620002a5565b505050506200059c565b3390565b6001600160e01b031980821614156200027d576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b620002af62000219565b6001600160a01b0316620002c2620003af565b6001600160a01b0316146200031e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620003655760405162461bcd60e51b81526004018080602001828103825260268152602001806200506f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216916000805160206200509583398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b80516001600160a01b0381168114620003d657600080fd5b919050565b600082601f830112620003ec578081fd5b815160206001600160401b038211156200040257fe5b8082026200041282820162000578565b8381528281019086840183880185018910156200042d578687fd5b8693505b858410156200045a576200044581620003be565b83526001939093019291840191840162000431565b50979650505050505050565b6000806000806101c085870312156200047d578384fd5b85601f8601126200048c578384fd5b6101606200049a8162000578565b90860190808789841115620004ad578788fd5b875b600b811015620004da57620004c482620003be565b84526020938401939190910190600101620004af565b50508096505050620004ec81620003be565b61018087015190945090506001600160401b038111156200050b578283fd5b6200051987828801620003db565b9250506200052b6101a08601620003be565b905092959194509250565b60006020828403121562000548578081fd5b8151801515811462000558578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b03811182821017156200059457fe5b604052919050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6149ac620006c360003980610517528061062f528061084c52806109bf52806123e3528061249a5280612529525080610d8c5280611dee52806122ab5250806104cf5280611d1c52806121db525080610c555280611b375280611bd15250806104f35280611a2d525080610c0d528061195b528061210b525080610544528061188952508061092b528061165d52806116f7525080610db05280611204528061129a5250806103cf5280610f525280611f6052508061094f5280611101528061203b525080610c31528061102f52506149ac6000f3fe60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200c805bd259b6e7fc099e514b3de13443a4ec4de2e14c673f7017d1283feec1a764736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200c805bd259b6e7fc099e514b3de13443a4ec4de2e14c673f7017d1283feec1a764736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "approveWETH(address[])": { + "params": { + "transferProxies": "- array of addresses to approve WETH for" + } + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "params": { + "allowFail": "- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch", + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- array of deatails about the purchases (more info in PurchaseDetails struct)" + } + }, + "onERC721Received(address,address,uint256,bytes)": { + "details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "params": { + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- deatails about the purchase (more info in PurchaseDetails struct)" + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "approveWETH(address[])": { + "notice": "approves weth for a list of the addresses" + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "notice": "executes an array of purchases" + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "notice": "executes a single purchase" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 5578, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 17504, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "paused", + "offset": 0, + "slot": "2", + "type": "t_bool" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/RoyaltiesRegistry.json b/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry.json similarity index 94% rename from projects/hardhat-deploy/deployments/polygon_mumbai/RoyaltiesRegistry.json rename to projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry.json index 57236c8bb..7520350e6 100644 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/RoyaltiesRegistry.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry.json @@ -1,5 +1,5 @@ { - "address": "0xC61627D0b68018242CB983bB244c9B299b9Cce05", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", "abi": [ { "anonymous": false, @@ -218,6 +218,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__RoyaltiesRegistry_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -483,77 +496,93 @@ "type": "constructor" } ], - "transactionHash": "0x61c1abdd9ed05386629c9bfc9e2b817573c2026a2091f4b0454c1f6d84ea5147", + "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", "receipt": { - "to": null, - "from": "0xC66D094eD928f7840A6B0d373c1cd825C97e3C7c", - "contractAddress": "0xC4A02D97d5Dff695d839c949F9cf0870254CFAAE", - "transactionIndex": 0, - "gasUsed": "768689", - "logsBloom": "0x00000000000000000000000000000000400000000002000000800000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000004020002000001000000000000000000000000000000000000020000000000000000000800000000800000000000000000000000400000001000000000000200000000000000000000000000000000400000800000000000000000000000000000000000000008000000000000000000000000000000000020000000000000000000000000000000000400008000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x3665173e67c6c3be484cb026b0f1875341ecdd0e2890844aafdf5321bebba1d8", - "transactionHash": "0x61c1abdd9ed05386629c9bfc9e2b817573c2026a2091f4b0454c1f6d84ea5147", + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "811009", + "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", + "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede", + "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", "logs": [ { - "transactionIndex": 0, - "blockNumber": 17742626, - "transactionHash": "0x61c1abdd9ed05386629c9bfc9e2b817573c2026a2091f4b0454c1f6d84ea5147", - "address": "0xC4A02D97d5Dff695d839c949F9cf0870254CFAAE", + "transactionIndex": 1, + "blockNumber": 2308703, + "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x000000000000000000000000e4e941a2a30b307645e842ce5afdefaccce1ab14" + "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" ], "data": "0x", "logIndex": 0, - "blockHash": "0x3665173e67c6c3be484cb026b0f1875341ecdd0e2890844aafdf5321bebba1d8" + "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" }, { - "transactionIndex": 0, - "blockNumber": 17742626, - "transactionHash": "0x61c1abdd9ed05386629c9bfc9e2b817573c2026a2091f4b0454c1f6d84ea5147", - "address": "0xC4A02D97d5Dff695d839c949F9cf0870254CFAAE", + "transactionIndex": 1, + "blockNumber": 2308703, + "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000c66d094ed928f7840a6b0d373c1cd825c97e3c7c" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", "logIndex": 1, - "blockHash": "0x3665173e67c6c3be484cb026b0f1875341ecdd0e2890844aafdf5321bebba1d8" + "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" }, { - "transactionIndex": 0, - "blockNumber": 17742626, - "transactionHash": "0x61c1abdd9ed05386629c9bfc9e2b817573c2026a2091f4b0454c1f6d84ea5147", - "address": "0xC4A02D97d5Dff695d839c949F9cf0870254CFAAE", + "transactionIndex": 1, + "blockNumber": 2308703, + "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", "topics": [ - "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca65f6f4affc1f321d6b31dfb7122b143fab4545", + "data": "0x", "logIndex": 2, - "blockHash": "0x3665173e67c6c3be484cb026b0f1875341ecdd0e2890844aafdf5321bebba1d8" + "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" + }, + { + "transactionIndex": 1, + "blockNumber": 2308703, + "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 3, + "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" } ], - "blockNumber": 17742626, - "cumulativeGasUsed": "768689", + "blockNumber": 2308703, + "cumulativeGasUsed": "857910", "status": 1, "byzantium": true }, "args": [ - "0xE4E941a2A30B307645e842CE5aFDeFacCce1aB14", - "0xcA65f6F4AfFC1F321D6B31DFB7122B143FAB4545", - "0x27fff8ab" + "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "numDeployments": 1, - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", "execute": { - "methodName": "__RoyaltiesRegistry_init", - "args": [] + "methodName": "__RoyaltiesRegistry_init_proxy", + "args": [ + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ] }, - "implementation": "0xE4E941a2A30B307645e842CE5aFDeFacCce1aB14", + "implementation": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Implementation.json b/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Implementation.json new file mode 100644 index 000000000..d2fc789e1 --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Implementation.json @@ -0,0 +1,639 @@ +{ + "address": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForContract", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForToken", + "type": "event" + }, + { + "inputs": [], + "name": "__RoyaltiesRegistry_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__RoyaltiesRegistry_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "clearRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltiesType", + "type": "uint256" + } + ], + "name": "forceSetRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getProvider", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoyalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getRoyaltiesType", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesByToken", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "royaltiesByTokenAndTokenId", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesProviders", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "provider", + "type": "address" + } + ], + "name": "setProviderByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "setRoyaltiesByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xda2f564a58cd4133d18a51befae45b0c99f6cadaedf30cea845645abf4ac14dd", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1663864", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x3230524ca2b4638fbe15e77c3ead10282e6b874b4d491e2f1fe5767e5e870025", + "transactionHash": "0xda2f564a58cd4133d18a51befae45b0c99f6cadaedf30cea845645abf4ac14dd", + "logs": [], + "blockNumber": 2308699, + "cumulativeGasUsed": "1727865", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForToken\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__RoyaltiesRegistry_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__RoyaltiesRegistry_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"clearRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltiesType\",\"type\":\"uint256\"}],\"name\":\"forceSetRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getRoyalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getRoyaltiesType\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesByToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"royaltiesByTokenAndTokenId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesProviders\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"setProviderByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"setRoyaltiesByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RoyaltiesSetForContract(address,(address,uint96)[])\":{\"details\":\"emitted when royalties set for token in \"},\"RoyaltiesSetForToken(address,uint256,(address,uint96)[])\":{\"details\":\"deprecated\"}},\"kind\":\"dev\",\"methods\":{\"clearRoyaltiesType(address)\":{\"details\":\"clears royalties type for token contract\"},\"forceSetRoyaltiesType(address,uint256)\":{\"details\":\"clears and sets new royalties type for token contract\"},\"getProvider(address)\":{\"details\":\"returns provider address for token contract from royaltiesProviders mapping\"},\"getRoyalties(address,uint256)\":{\"details\":\"returns royalties for token contract and token id\"},\"getRoyaltiesType(address)\":{\"details\":\"returns royalties type for token contract\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setProviderByToken(address,address)\":{\"details\":\"sets external provider for token contract, and royalties type = 4\"},\"setRoyaltiesByToken(address,(address,uint96)[])\":{\"details\":\"sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"royaltiesByToken\":{\"details\":\"stores royalties for token contract, set in setRoyaltiesByToken() method\"},\"royaltiesByTokenAndTokenId\":{\"details\":\"deprecated\"},\"royaltiesProviders\":{\"details\":\"stores external provider and royalties type for token contract\"},\"royaltiesTypesAmount\":{\"details\":\"total amount or supported royalties types\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":\"RoyaltiesRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n function __RoyaltiesRegistry_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0xe0ea605e62d7b65dae93684b5102383b3b9fec0ade21efca0f2831d468738f50\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50611c43806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063d836f01311610066578063d836f013146101e9578063f2fde38b146101fc578063f39cc7061461020f578063fc73be0014610222576100f5565b80638da5cb5b1461019b5780639ca7dc7a146101a3578063acf14efb146101c3578063d1da3cce146101d6576100f5565b806336eff6c2116100d357806336eff6c21461014057806355f21eb714610153578063715018a61461017357806382b19f121461017b576100f5565b806305df952f146100fa57806317c44b171461012357806327fff8ab14610138575b600080fd5b61010d610108366004611517565b610235565b60405161011a919061198c565b60405180910390f35b610136610131366004611517565b61024a565b005b6101366102fe565b61013661014e366004611677565b6103a8565b610166610161366004611517565b6103c4565b60405161011a91906118fe565b6101366103e3565b61018e610189366004611517565b6104a1565b60405161011a9190611b2d565b6101666104c9565b6101b66101b1366004611677565b6104d8565b60405161011a919061192b565b6101366101d1366004611587565b610676565b61010d6101e43660046118e6565b6108b2565b6101366101f736600461154f565b6108c7565b61013661020a366004611517565b6108dc565b61018e61021d366004611517565b6109f1565b610136610230366004611517565b610a03565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102635750610263610a34565b80610271575060005460ff16155b6102ac5760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff161580156102d7576000805460ff1961ff0019909116610100171660011790555b6102df610a45565b6102e8826108dc565b80156102fa576000805461ff00191690555b5050565b600054610100900460ff16806103175750610317610a34565b80610325575060005460ff16155b6103605760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff1615801561038b576000805460ff1961ff0019909116610100171660011790555b610393610a45565b80156103a5576000805461ff00191690555b50565b6103b182610b3e565b6102fa82826103bf856103c4565b610c14565b6001600160a01b0381166000908152606760205260409020545b919050565b6103eb610c6b565b6001600160a01b03166103fc6104c9565b6001600160a01b031614610457576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546104c390610c6f565b92915050565b6033546001600160a01b031690565b6001600160a01b03821660009081526067602052604081205460609181906104ff82610c6f565b90508061051d576105108683610cad565b905061051d868284610c14565b80600114156105b9576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156105ab57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161055c565b5050505093505050506104c3565b80600214156105d6576105cc8686610ebb565b93505050506104c3565b80600314156105e9576105cc8686610f7b565b80600414156105fd576105cc86868461122f565b8060051415610610576105cc86866112f6565b806006141561065557604080516000808252602082019092529061064a565b6106376114ce565b81526020019060019003908161062f5790505b5093505050506104c3565b60405162461bcd60e51b815260040161066d906119ac565b60405180910390fd5b61067f82610b3e565b6001600160a01b03821660009081526067602052604081208190556106a8908390600190610c14565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106d660018301826114e5565b505060005b82518110156108305760006001600160a01b03168382815181106106fb57fe5b6020026020010151600001516001600160a01b0316141561072e5760405162461bcd60e51b815260040161066d906119e3565b82818151811061073a57fe5b6020026020010151602001516001600160601b03166000141561076f5760405162461bcd60e51b815260040161066d90611ab0565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106107a357fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061080c57fe5b6020026020010151602001516001600160601b0316820191508060010190506106db565b5061271081106108525760405162461bcd60e51b815260040161066d90611a2f565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906108a590859061192b565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b6108d082610b3e565b6102fa82600483610c14565b6108e4610c6b565b6001600160a01b03166108f56104c9565b6001600160a01b031614610950576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166109955760405162461bcd60e51b8152600401808060200182810382526026815260200180611bba6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b610a0c81610b3e565b610a15816103c4565b6001600160a01b03918216600090815260676020526040902091169055565b6000610a3f306113c0565b15905090565b600054610100900460ff1680610a5e5750610a5e610a34565b80610a6c575060005460ff16155b610aa75760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad2576000805460ff1961ff0019909116610100171660011790555b6000610adc610c6b565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156103a5576000805461ff001916905550565b610b46610c6b565b6001600160a01b0316610b576104c9565b6001600160a01b031614158015610bf75750610b71610c6b565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb357600080fd5b505afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190611533565b6001600160a01b031614155b156103a55760405162461bcd60e51b815260040161066d90611a79565b600082118015610c25575060068211155b610c415760405162461bcd60e51b815260040161066d90611b00565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610ca457806101000360020a8381610c8c57fe5b0460011415610c9c5790506103de565b600101610c74565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610ce39063656cb66560e11b90600401611997565b60206040518083038186803b158015610cfb57600080fd5b505afa925050508015610d2b575060408051601f3d908101601f19168201909252610d28918101906118c6565b60015b610d3457610d46565b8015610d445760029150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d7990632dde656160e21b90600401611997565b60206040518083038186803b158015610d9157600080fd5b505afa925050508015610dc1575060408051601f3d908101601f19168201909252610dbe918101906118c6565b60015b610dca57610ddc565b8015610dda5760039150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610e0f9063152a902d60e11b90600401611997565b60206040518083038186803b158015610e2757600080fd5b505afa925050508015610e57575060408051601f3d908101601f19168201909252610e54918101906118c6565b60015b610e6057610e72565b8015610e705760059150506104c3565b505b6001600160a01b03821615610e89575060046104c3565b6001600160a01b03831660009081526066602052604090205460ff1615610eb2575060016104c3565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610eea908590600401611b2d565b60006040518083038186803b158015610f0257600080fd5b505afa925050508015610f3757506040513d6000823e601f3d908101601f19168201604052610f349190810190611768565b60015b610f74576040805160008082526020820190925290610f6c565b610f596114ce565b815260200190600190039081610f515790505b5090506104c3565b90506104c3565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610fae908790600401611b2d565b60006040518083038186803b158015610fc657600080fd5b505afa925050508015610ffb57506040513d6000823e601f3d908101601f19168201604052610ff891908101906116cf565b60015b61103a576040805160008082526020820190925290611030565b61101d6114ce565b8152602001906001900390816110155790505b50925050506104c3565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f9061106b908890600401611b2d565b60006040518083038186803b15801561108357600080fd5b505afa9250505080156110b857506040513d6000823e601f3d908101601f191682016040526110b59190810190611842565b60015b6110f757604080516000808252602082019092529061064a565b6110da6114ce565b8152602001906001900390816110d25790505093505050506104c3565b9050815181511461113d57604080516000808252602082019092529061064a565b6111206114ce565b8152602001906001900390816111185790505093505050506104c3565b6000815167ffffffffffffffff8111801561115757600080fd5b5060405190808252806020026020018201604052801561119157816020015b61117e6114ce565b8152602001906001900390816111765790505b50905060005b8251811015611224578281815181106111ac57fe5b60200260200101518282815181106111c057fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250508381815181106111f057fe5b602002602001015182828151811061120457fe5b60209081029190910101516001600160a01b039091169052600101611197565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906112609087908790600401611912565b600060405180830381600087803b15801561127a57600080fd5b505af19250505080156112af57506040513d6000823e601f3d908101601f191682016040526112ac9190810190611768565b60015b6112ec5760408051600080825260208201909252906112e4565b6112d16114ce565b8152602001906001900390816112c95790505b5090506112ef565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061132a908590620f424090600401611b36565b604080518083038186803b15801561134157600080fd5b505afa925050508015611371575060408051601f3d908101601f1916820190925261136e918101906116a2565b60015b6113ad576040805160008082526020820190925290610f6c565b6113936114ce565b81526020019060019003908161138b5790505090506104c3565b6113b782826113c6565b925050506104c3565b3b151590565b606080826113d55790506104c3565b6000620f424061271085020490506127108110611439576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b6114566114ce565b81526020019060019003908161144e579050509150848260008151811061147957fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106114ab57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906103a591905b8082111561151357600081556001016114ff565b5090565b600060208284031215611528578081fd5b81356112ef81611b8f565b600060208284031215611544578081fd5b81516112ef81611b8f565b60008060408385031215611561578081fd5b823561156c81611b8f565b9150602083013561157c81611b8f565b809150509250929050565b600080604080848603121561159a578283fd5b83356115a581611b8f565b925060208481013567ffffffffffffffff808211156115c2578485fd5b818701915087601f8301126115d5578485fd5b81356115e86115e382611b71565b611b4d565b81815284810190848601878402860187018c1015611604578889fd5b8895505b838610156116655787818d03121561161e578889fd5b8751888101818110878211171561163157fe5b8952813561163e81611b8f565b81528188013561164d81611ba4565b81890152835260019590950194918601918701611608565b50809750505050505050509250929050565b60008060408385031215611689578182fd5b823561169481611b8f565b946020939093013593505050565b600080604083850312156116b4578182fd5b82516116bf81611b8f565b6020939093015192949293505050565b600060208083850312156116e1578182fd5b825167ffffffffffffffff8111156116f7578283fd5b8301601f81018513611707578283fd5b80516117156115e382611b71565b8181528381019083850185840285018601891015611731578687fd5b8694505b8385101561175c57805161174881611b8f565b835260019490940193918501918501611735565b50979650505050505050565b6000602080838503121561177a578182fd5b825167ffffffffffffffff80821115611791578384fd5b818501915085601f8301126117a4578384fd5b81516117b26115e382611b71565b818152848101908486016040808502870188018b10156117d0578889fd5b8896505b848710156118335780828c0312156117ea578889fd5b805181810181811088821117156117fd57fe5b8252825161180a81611b8f565b81528289015161181981611ba4565b818a015284526001969096019592870192908101906117d4565b50909998505050505050505050565b60006020808385031215611854578182fd5b825167ffffffffffffffff81111561186a578283fd5b8301601f8101851361187a578283fd5b80516118886115e382611b71565b81815283810190838501858402850186018910156118a4578687fd5b8694505b8385101561175c5780518352600194909401939185019185016118a8565b6000602082840312156118d7578081fd5b815180151581146112ef578182fd5b6000602082840312156118f7578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b8281101561197f57815180516001600160a01b031685528601516001600160601b0316868501529284019290850190600101611948565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611b6957fe5b604052919050565b600067ffffffffffffffff821115611b8557fe5b5060209081020190565b6001600160a01b03811681146103a557600080fd5b6001600160601b03811681146103a557600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a26469706673582212206011445674d35ef28e96f7be2c7e18367ccbf39ba213446ab0ff8093543dc49764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063d836f01311610066578063d836f013146101e9578063f2fde38b146101fc578063f39cc7061461020f578063fc73be0014610222576100f5565b80638da5cb5b1461019b5780639ca7dc7a146101a3578063acf14efb146101c3578063d1da3cce146101d6576100f5565b806336eff6c2116100d357806336eff6c21461014057806355f21eb714610153578063715018a61461017357806382b19f121461017b576100f5565b806305df952f146100fa57806317c44b171461012357806327fff8ab14610138575b600080fd5b61010d610108366004611517565b610235565b60405161011a919061198c565b60405180910390f35b610136610131366004611517565b61024a565b005b6101366102fe565b61013661014e366004611677565b6103a8565b610166610161366004611517565b6103c4565b60405161011a91906118fe565b6101366103e3565b61018e610189366004611517565b6104a1565b60405161011a9190611b2d565b6101666104c9565b6101b66101b1366004611677565b6104d8565b60405161011a919061192b565b6101366101d1366004611587565b610676565b61010d6101e43660046118e6565b6108b2565b6101366101f736600461154f565b6108c7565b61013661020a366004611517565b6108dc565b61018e61021d366004611517565b6109f1565b610136610230366004611517565b610a03565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102635750610263610a34565b80610271575060005460ff16155b6102ac5760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff161580156102d7576000805460ff1961ff0019909116610100171660011790555b6102df610a45565b6102e8826108dc565b80156102fa576000805461ff00191690555b5050565b600054610100900460ff16806103175750610317610a34565b80610325575060005460ff16155b6103605760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff1615801561038b576000805460ff1961ff0019909116610100171660011790555b610393610a45565b80156103a5576000805461ff00191690555b50565b6103b182610b3e565b6102fa82826103bf856103c4565b610c14565b6001600160a01b0381166000908152606760205260409020545b919050565b6103eb610c6b565b6001600160a01b03166103fc6104c9565b6001600160a01b031614610457576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546104c390610c6f565b92915050565b6033546001600160a01b031690565b6001600160a01b03821660009081526067602052604081205460609181906104ff82610c6f565b90508061051d576105108683610cad565b905061051d868284610c14565b80600114156105b9576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156105ab57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161055c565b5050505093505050506104c3565b80600214156105d6576105cc8686610ebb565b93505050506104c3565b80600314156105e9576105cc8686610f7b565b80600414156105fd576105cc86868461122f565b8060051415610610576105cc86866112f6565b806006141561065557604080516000808252602082019092529061064a565b6106376114ce565b81526020019060019003908161062f5790505b5093505050506104c3565b60405162461bcd60e51b815260040161066d906119ac565b60405180910390fd5b61067f82610b3e565b6001600160a01b03821660009081526067602052604081208190556106a8908390600190610c14565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106d660018301826114e5565b505060005b82518110156108305760006001600160a01b03168382815181106106fb57fe5b6020026020010151600001516001600160a01b0316141561072e5760405162461bcd60e51b815260040161066d906119e3565b82818151811061073a57fe5b6020026020010151602001516001600160601b03166000141561076f5760405162461bcd60e51b815260040161066d90611ab0565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106107a357fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061080c57fe5b6020026020010151602001516001600160601b0316820191508060010190506106db565b5061271081106108525760405162461bcd60e51b815260040161066d90611a2f565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906108a590859061192b565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b6108d082610b3e565b6102fa82600483610c14565b6108e4610c6b565b6001600160a01b03166108f56104c9565b6001600160a01b031614610950576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166109955760405162461bcd60e51b8152600401808060200182810382526026815260200180611bba6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b610a0c81610b3e565b610a15816103c4565b6001600160a01b03918216600090815260676020526040902091169055565b6000610a3f306113c0565b15905090565b600054610100900460ff1680610a5e5750610a5e610a34565b80610a6c575060005460ff16155b610aa75760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad2576000805460ff1961ff0019909116610100171660011790555b6000610adc610c6b565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156103a5576000805461ff001916905550565b610b46610c6b565b6001600160a01b0316610b576104c9565b6001600160a01b031614158015610bf75750610b71610c6b565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb357600080fd5b505afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190611533565b6001600160a01b031614155b156103a55760405162461bcd60e51b815260040161066d90611a79565b600082118015610c25575060068211155b610c415760405162461bcd60e51b815260040161066d90611b00565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610ca457806101000360020a8381610c8c57fe5b0460011415610c9c5790506103de565b600101610c74565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610ce39063656cb66560e11b90600401611997565b60206040518083038186803b158015610cfb57600080fd5b505afa925050508015610d2b575060408051601f3d908101601f19168201909252610d28918101906118c6565b60015b610d3457610d46565b8015610d445760029150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d7990632dde656160e21b90600401611997565b60206040518083038186803b158015610d9157600080fd5b505afa925050508015610dc1575060408051601f3d908101601f19168201909252610dbe918101906118c6565b60015b610dca57610ddc565b8015610dda5760039150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610e0f9063152a902d60e11b90600401611997565b60206040518083038186803b158015610e2757600080fd5b505afa925050508015610e57575060408051601f3d908101601f19168201909252610e54918101906118c6565b60015b610e6057610e72565b8015610e705760059150506104c3565b505b6001600160a01b03821615610e89575060046104c3565b6001600160a01b03831660009081526066602052604090205460ff1615610eb2575060016104c3565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610eea908590600401611b2d565b60006040518083038186803b158015610f0257600080fd5b505afa925050508015610f3757506040513d6000823e601f3d908101601f19168201604052610f349190810190611768565b60015b610f74576040805160008082526020820190925290610f6c565b610f596114ce565b815260200190600190039081610f515790505b5090506104c3565b90506104c3565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610fae908790600401611b2d565b60006040518083038186803b158015610fc657600080fd5b505afa925050508015610ffb57506040513d6000823e601f3d908101601f19168201604052610ff891908101906116cf565b60015b61103a576040805160008082526020820190925290611030565b61101d6114ce565b8152602001906001900390816110155790505b50925050506104c3565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f9061106b908890600401611b2d565b60006040518083038186803b15801561108357600080fd5b505afa9250505080156110b857506040513d6000823e601f3d908101601f191682016040526110b59190810190611842565b60015b6110f757604080516000808252602082019092529061064a565b6110da6114ce565b8152602001906001900390816110d25790505093505050506104c3565b9050815181511461113d57604080516000808252602082019092529061064a565b6111206114ce565b8152602001906001900390816111185790505093505050506104c3565b6000815167ffffffffffffffff8111801561115757600080fd5b5060405190808252806020026020018201604052801561119157816020015b61117e6114ce565b8152602001906001900390816111765790505b50905060005b8251811015611224578281815181106111ac57fe5b60200260200101518282815181106111c057fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250508381815181106111f057fe5b602002602001015182828151811061120457fe5b60209081029190910101516001600160a01b039091169052600101611197565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906112609087908790600401611912565b600060405180830381600087803b15801561127a57600080fd5b505af19250505080156112af57506040513d6000823e601f3d908101601f191682016040526112ac9190810190611768565b60015b6112ec5760408051600080825260208201909252906112e4565b6112d16114ce565b8152602001906001900390816112c95790505b5090506112ef565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061132a908590620f424090600401611b36565b604080518083038186803b15801561134157600080fd5b505afa925050508015611371575060408051601f3d908101601f1916820190925261136e918101906116a2565b60015b6113ad576040805160008082526020820190925290610f6c565b6113936114ce565b81526020019060019003908161138b5790505090506104c3565b6113b782826113c6565b925050506104c3565b3b151590565b606080826113d55790506104c3565b6000620f424061271085020490506127108110611439576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b6114566114ce565b81526020019060019003908161144e579050509150848260008151811061147957fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106114ab57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906103a591905b8082111561151357600081556001016114ff565b5090565b600060208284031215611528578081fd5b81356112ef81611b8f565b600060208284031215611544578081fd5b81516112ef81611b8f565b60008060408385031215611561578081fd5b823561156c81611b8f565b9150602083013561157c81611b8f565b809150509250929050565b600080604080848603121561159a578283fd5b83356115a581611b8f565b925060208481013567ffffffffffffffff808211156115c2578485fd5b818701915087601f8301126115d5578485fd5b81356115e86115e382611b71565b611b4d565b81815284810190848601878402860187018c1015611604578889fd5b8895505b838610156116655787818d03121561161e578889fd5b8751888101818110878211171561163157fe5b8952813561163e81611b8f565b81528188013561164d81611ba4565b81890152835260019590950194918601918701611608565b50809750505050505050509250929050565b60008060408385031215611689578182fd5b823561169481611b8f565b946020939093013593505050565b600080604083850312156116b4578182fd5b82516116bf81611b8f565b6020939093015192949293505050565b600060208083850312156116e1578182fd5b825167ffffffffffffffff8111156116f7578283fd5b8301601f81018513611707578283fd5b80516117156115e382611b71565b8181528381019083850185840285018601891015611731578687fd5b8694505b8385101561175c57805161174881611b8f565b835260019490940193918501918501611735565b50979650505050505050565b6000602080838503121561177a578182fd5b825167ffffffffffffffff80821115611791578384fd5b818501915085601f8301126117a4578384fd5b81516117b26115e382611b71565b818152848101908486016040808502870188018b10156117d0578889fd5b8896505b848710156118335780828c0312156117ea578889fd5b805181810181811088821117156117fd57fe5b8252825161180a81611b8f565b81528289015161181981611ba4565b818a015284526001969096019592870192908101906117d4565b50909998505050505050505050565b60006020808385031215611854578182fd5b825167ffffffffffffffff81111561186a578283fd5b8301601f8101851361187a578283fd5b80516118886115e382611b71565b81815283810190838501858402850186018910156118a4578687fd5b8694505b8385101561175c5780518352600194909401939185019185016118a8565b6000602082840312156118d7578081fd5b815180151581146112ef578182fd5b6000602082840312156118f7578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b8281101561197f57815180516001600160a01b031685528601516001600160601b0316868501529284019290850190600101611948565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611b6957fe5b604052919050565b600067ffffffffffffffff821115611b8557fe5b5060209081020190565b6001600160a01b03811681146103a557600080fd5b6001600160601b03811681146103a557600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a26469706673582212206011445674d35ef28e96f7be2c7e18367ccbf39ba213446ab0ff8093543dc49764736f6c63430007060033", + "devdoc": { + "events": { + "RoyaltiesSetForContract(address,(address,uint96)[])": { + "details": "emitted when royalties set for token in " + }, + "RoyaltiesSetForToken(address,uint256,(address,uint96)[])": { + "details": "deprecated" + } + }, + "kind": "dev", + "methods": { + "clearRoyaltiesType(address)": { + "details": "clears royalties type for token contract" + }, + "forceSetRoyaltiesType(address,uint256)": { + "details": "clears and sets new royalties type for token contract" + }, + "getProvider(address)": { + "details": "returns provider address for token contract from royaltiesProviders mapping" + }, + "getRoyalties(address,uint256)": { + "details": "returns royalties for token contract and token id" + }, + "getRoyaltiesType(address)": { + "details": "returns royalties type for token contract" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "setProviderByToken(address,address)": { + "details": "sets external provider for token contract, and royalties type = 4" + }, + "setRoyaltiesByToken(address,(address,uint96)[])": { + "details": "sets royalties for token contract in royaltiesByToken mapping and royalties type = 1" + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "stateVariables": { + "royaltiesByToken": { + "details": "stores royalties for token contract, set in setRoyaltiesByToken() method" + }, + "royaltiesByTokenAndTokenId": { + "details": "deprecated" + }, + "royaltiesProviders": { + "details": "stores external provider and royalties type for token contract" + }, + "royaltiesTypesAmount": { + "details": "total amount or supported royalties types" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 20000, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesByTokenAndTokenId", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes32,t_struct(RoyaltiesSet)19995_storage)" + }, + { + "astId": 20005, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesByToken", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_struct(RoyaltiesSet)19995_storage)" + }, + { + "astId": 20010, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesProviders", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 20805, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "104", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)19269_storage)dyn_storage": { + "base": "t_struct(Part)19269_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)46_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(RoyaltiesSet)19995_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RoyaltiesRegistry.RoyaltiesSet)", + "numberOfBytes": "32", + "value": "t_struct(RoyaltiesSet)19995_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_struct(RoyaltiesSet)19995_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct RoyaltiesRegistry.RoyaltiesSet)", + "numberOfBytes": "32", + "value": "t_struct(RoyaltiesSet)19995_storage" + }, + "t_struct(Part)19269_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 19266, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 19268, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoyaltiesSet)19995_storage": { + "encoding": "inplace", + "label": "struct RoyaltiesRegistry.RoyaltiesSet", + "members": [ + { + "astId": 19991, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 19994, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royalties", + "offset": 0, + "slot": "1", + "type": "t_array(t_struct(Part)19269_storage)dyn_storage" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Proxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Proxy.json new file mode 100644 index 000000000..ef1e10356 --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Proxy.json @@ -0,0 +1,263 @@ +{ + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "811009", + "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", + "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede", + "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 2308703, + "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" + }, + { + "transactionIndex": 1, + "blockNumber": 2308703, + "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" + }, + { + "transactionIndex": 1, + "blockNumber": 2308703, + "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" + }, + { + "transactionIndex": 1, + "blockNumber": 2308703, + "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 3, + "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" + } + ], + "blockNumber": 2308703, + "cumulativeGasUsed": "857910", + "status": 1, + "byzantium": true + }, + "args": [ + "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/TransferProxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/TransferProxy.json new file mode 100644 index 000000000..15133fb81 --- /dev/null +++ b/projects/hardhat-deploy/deployments/camp_sepolia/TransferProxy.json @@ -0,0 +1,319 @@ +{ + "address": "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__TransferProxy_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__TransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC1155Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "erc1155safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC721Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "erc721safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xec7f9e84f1512677c0999d66619af558b3cb3596143251a3446633e3a7886e5f", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "777214", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xfde2af10cd8359cb8f8254f826eddac3aca9c4cfb2f9e7c6fd428fedabf4a889", + "transactionHash": "0xec7f9e84f1512677c0999d66619af558b3cb3596143251a3446633e3a7886e5f", + "logs": [], + "blockNumber": 2308708, + "cumulativeGasUsed": "824115", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__TransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"erc1155safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC721Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"erc721safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":\"TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x23a035508922fbe29dfb91796175b391943f830eead313134142a01bd776f848\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610c7b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80639870d7fe116100715780639870d7fe146101125780639c1c2ee914610138578063ac8a584a146101d5578063e814f46d146101fb578063f2fde38b14610221578063f709b90614610247576100a9565b80632ff26a0a146100ae578063495edf86146100b8578063715018a6146100c057806374dc542b146100c85780638da5cb5b146100ee575b600080fd5b6100b6610283565b005b6100b6610335565b6100b66103ca565b6100b6600480360360208110156100de57600080fd5b50356001600160a01b0316610476565b6100f661052a565b604080516001600160a01b039092168252519081900360200190f35b6100b66004803603602081101561012857600080fd5b50356001600160a01b0316610539565b6100b6600480360360c081101561014e57600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561019657600080fd5b8201836020820111156101a857600080fd5b803590602001918460018302840111640100000000831117156101ca57600080fd5b5090925090506105bf565b6100b6600480360360208110156101eb57600080fd5b50356001600160a01b03166106e8565b6100b66004803603602081101561021157600080fd5b50356001600160a01b031661076b565b6100b66004803603602081101561023757600080fd5b50356001600160a01b0316610808565b6100b66004803603608081101561025d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561090b565b600054610100900460ff168061029c575061029c6109f5565b806102aa575060005460ff16155b6102e55760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610310576000805460ff1961ff0019909116610100171660011790555b610318610a06565b610320610aa6565b8015610332576000805461ff00191690555b50565b600054610100900460ff168061034e575061034e6109f5565b8061035c575060005460ff16155b6103975760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156103c2576000805460ff1961ff0019909116610100171660011790555b610320610283565b6103d2610b9f565b6001600160a01b03166103e361052a565b6001600160a01b03161461042c576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff168061048f575061048f6109f5565b8061049d575060005460ff16155b6104d85760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610503576000805460ff1961ff0019909116610100171660011790555b61050b610283565b61051482610808565b8015610526576000805461ff00191690555b5050565b6033546001600160a01b031690565b610541610b9f565b6001600160a01b031661055261052a565b6001600160a01b03161461059b576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006105cb610b9f565b6001600160a01b0316815260208101919091526040016000205460ff166106235760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156106c757600080fd5b505af11580156106db573d6000803e3d6000fd5b5050505050505050505050565b6106f0610b9f565b6001600160a01b031661070161052a565b6001600160a01b03161461074a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff168061078457506107846109f5565b80610792575060005460ff16155b6107cd5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156107f8576000805460ff1961ff0019909116610100171660011790555b610800610a06565b61050b610aa6565b610810610b9f565b6001600160a01b031661082161052a565b6001600160a01b03161461086a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b0381166108af5760405162461bcd60e51b8152600401808060200182810382526026815260200180610baa6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60656000610917610b9f565b6001600160a01b0316815260208101919091526040016000205460ff1661096f5760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156109d757600080fd5b505af11580156109eb573d6000803e3d6000fd5b5050505050505050565b6000610a0030610ba3565b15905090565b600054610100900460ff1680610a1f5750610a1f6109f5565b80610a2d575060005460ff16155b610a685760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610320576000805460ff1961ff0019909116610100171660011790558015610332576000805461ff001916905550565b600054610100900460ff1680610abf5750610abf6109f5565b80610acd575060005460ff16155b610b085760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610b33576000805460ff1961ff0019909116610100171660011790555b6000610b3d610b9f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610332576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220747ec40a8b785524508be701dc7a3088a8e915dd61c7a4cdc61564ce75450d3464736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80639870d7fe116100715780639870d7fe146101125780639c1c2ee914610138578063ac8a584a146101d5578063e814f46d146101fb578063f2fde38b14610221578063f709b90614610247576100a9565b80632ff26a0a146100ae578063495edf86146100b8578063715018a6146100c057806374dc542b146100c85780638da5cb5b146100ee575b600080fd5b6100b6610283565b005b6100b6610335565b6100b66103ca565b6100b6600480360360208110156100de57600080fd5b50356001600160a01b0316610476565b6100f661052a565b604080516001600160a01b039092168252519081900360200190f35b6100b66004803603602081101561012857600080fd5b50356001600160a01b0316610539565b6100b6600480360360c081101561014e57600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561019657600080fd5b8201836020820111156101a857600080fd5b803590602001918460018302840111640100000000831117156101ca57600080fd5b5090925090506105bf565b6100b6600480360360208110156101eb57600080fd5b50356001600160a01b03166106e8565b6100b66004803603602081101561021157600080fd5b50356001600160a01b031661076b565b6100b66004803603602081101561023757600080fd5b50356001600160a01b0316610808565b6100b66004803603608081101561025d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561090b565b600054610100900460ff168061029c575061029c6109f5565b806102aa575060005460ff16155b6102e55760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610310576000805460ff1961ff0019909116610100171660011790555b610318610a06565b610320610aa6565b8015610332576000805461ff00191690555b50565b600054610100900460ff168061034e575061034e6109f5565b8061035c575060005460ff16155b6103975760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156103c2576000805460ff1961ff0019909116610100171660011790555b610320610283565b6103d2610b9f565b6001600160a01b03166103e361052a565b6001600160a01b03161461042c576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff168061048f575061048f6109f5565b8061049d575060005460ff16155b6104d85760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610503576000805460ff1961ff0019909116610100171660011790555b61050b610283565b61051482610808565b8015610526576000805461ff00191690555b5050565b6033546001600160a01b031690565b610541610b9f565b6001600160a01b031661055261052a565b6001600160a01b03161461059b576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006105cb610b9f565b6001600160a01b0316815260208101919091526040016000205460ff166106235760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156106c757600080fd5b505af11580156106db573d6000803e3d6000fd5b5050505050505050505050565b6106f0610b9f565b6001600160a01b031661070161052a565b6001600160a01b03161461074a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff168061078457506107846109f5565b80610792575060005460ff16155b6107cd5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156107f8576000805460ff1961ff0019909116610100171660011790555b610800610a06565b61050b610aa6565b610810610b9f565b6001600160a01b031661082161052a565b6001600160a01b03161461086a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b0381166108af5760405162461bcd60e51b8152600401808060200182810382526026815260200180610baa6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60656000610917610b9f565b6001600160a01b0316815260208101919091526040016000205460ff1661096f5760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156109d757600080fd5b505af11580156109eb573d6000803e3d6000fd5b5050505050505050565b6000610a0030610ba3565b15905090565b600054610100900460ff1680610a1f5750610a1f6109f5565b80610a2d575060005460ff16155b610a685760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610320576000805460ff1961ff0019909116610100171660011790558015610332576000805461ff001916905550565b600054610100900460ff1680610abf5750610abf6109f5565b80610acd575060005460ff16155b610b085760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610b33576000805460ff1961ff0019909116610100171660011790555b6000610b3d610b9f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610332576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220747ec40a8b785524508be701dc7a3088a8e915dd61c7a4cdc61564ce75450d3464736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19884, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sepolia/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json b/projects/hardhat-deploy/deployments/camp_sepolia/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json similarity index 90% rename from projects/hardhat-deploy/deployments/sepolia/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json rename to projects/hardhat-deploy/deployments/camp_sepolia/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json index ce8ca1d7b..cd67d7888 100644 --- a/projects/hardhat-deploy/deployments/sepolia/solcInputs/5fd82e04a71dd28dcf06afe03af2d381.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json @@ -200,13 +200,13 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" }, "@rarible/exchange-v2/contracts/AssetMatcher.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function _setAssetMatcher(bytes4 assetType, address matcher) internal {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" }, "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function __ExchangeV2_init_proxy(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _initialOwner,\n bytes4[] memory assetTypes, \n address[] memory proxies,\n bytes4 assetMatcherType,\n address assetMatcher\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n for (uint i = 0; i < assetTypes.length; i++) {\n _setTransferProxy(assetTypes[i], proxies[i]);\n }\n _setAssetMatcher(assetMatcherType, assetMatcher);\n transferOwnership(_initialOwner);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" }, "@rarible/exchange-v2/contracts/ExchangeV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n function __ExchangeV2_init_proxy(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _initialOwner,\n bytes4[] memory assetTypes, \n address[] memory proxies,\n bytes4 assetMatcherType,\n address assetMatcher\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n for (uint i = 0; i < assetTypes.length; i++) {\n _setTransferProxy(assetTypes[i], proxies[i]);\n }\n _setAssetMatcher(assetMatcherType, assetMatcher);\n transferOwnership(_initialOwner);\n }\n}\n" }, "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\n require(newFill.leftValue > 0, \"nothing to fill\");\n }\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\n require(newFill.rightValue > 0, \"nothing to fill\");\n }\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" @@ -272,7 +272,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" }, "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n address public immutable seaPort_1_6;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,//0\n WyvernExchange,//1\n SeaPort_1_1,//2\n X2Y2,//3\n LooksRareOrders,//4\n SudoSwap,//5\n SeaPort_1_4,//6\n LooksRareV2,//7\n Blur,//8\n SeaPort_1_5,//9\n SeaPort_1_6//10\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[11] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n //address _seaPort_1_6, 10\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n seaPort_1_6 = marketplaces[10];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n address public immutable seaPort_1_6;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,//0\n WyvernExchange,//1\n SeaPort_1_1,//2\n X2Y2,//3\n LooksRareOrders,//4\n SudoSwap,//5\n SeaPort_1_4,//6\n LooksRareV2,//7\n Blur,//8\n SeaPort_1_5,//9\n SeaPort_1_6//10\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[11] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n //address _seaPort_1_6, 10\n address _weth,\n address[] memory transferProxies,\n address initialOwner\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n seaPort_1_6 = marketplaces[10];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n transferOwnership(initialOwner);\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" }, "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" @@ -314,7 +314,7 @@ "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" }, "@rarible/role-operator/contracts/OperatorRole.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n transferOwnership(initialOwner);\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" }, "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" @@ -335,7 +335,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" }, "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n function __RoyaltiesRegistry_init_proxy(address _initialOwner) external initializer {\n __Ownable_init_unchained();\n transferOwnership(_initialOwner);\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" }, "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" @@ -386,31 +386,31 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\n\ncontract TestERC721 is ERC721Upgradeable {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" }, "@rarible/tokens/contracts/access/MinterAccessControl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n transferOwnership(initialOwner);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" }, "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n transferOwnership(initialOwner);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" }, "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" @@ -419,7 +419,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" @@ -428,19 +428,19 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC1155Rarible(initialOwner, _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" @@ -455,7 +455,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" @@ -482,7 +482,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" }, "@rarible/tokens/contracts/HasContractURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" }, "@rarible/tokens/contracts/IsPrivateCollection.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" @@ -512,19 +512,19 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n ProtocolFeeData memory _protocolFee,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param _protocolFee protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n ProtocolFeeData memory _protocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = _protocolFee.buyerAmount;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" }, "@rarible/transfer-manager/contracts/TransferExecutor.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function _setTransferProxy(bytes4 assetType, address proxy) internal {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" }, "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n\n function __ERC1155LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n transferOwnership(_initialOwner);\n }\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" }, "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n\n function __ERC721LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n transferOwnership(_initialOwner);\n }\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" }, "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function __ERC20TransferProxy_init_proxy(address _initialOwner) external initializer {\n __Ownable_init();\n transferOwnership(_initialOwner);\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" }, "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function __TransferProxy_init_proxy(address _initialOwner) external initializer {\n __Ownable_init();\n transferOwnership(_initialOwner);\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" }, "@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract PunkTransferProxy is OperatorRole, ITransferProxy {\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, uint punkIndex) = abi.decode(asset.assetType.data, (address, uint));\n ICryptoPunksMarket punkToken = ICryptoPunksMarket(token);\n //check punk from real owner\n require(punkToken.punkIndexToAddress(punkIndex) == from, \"Seller not punk owner\");\n //buy punk to proxy, now proxy is owner\n punkToken.buyPunk(punkIndex);\n //Transfer ownership of a punk to buyer\n punkToken.transferPunk(to, punkIndex);\n }\n}" diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/projects/hardhat-deploy/deployments/camp_sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json similarity index 52% rename from projects/hardhat-deploy/deployments/polygon_mumbai/solcInputs/0e89febeebc7444140de8e67c9067d2c.json rename to projects/hardhat-deploy/deployments/camp_sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json index 6eb5ed905..d314de77e 100644 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -1,53 +1,116 @@ { "language": "Solidity", "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, "solc_0.8/openzeppelin/access/Ownable.sol": { "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" }, - "solc_0.8/openzeppelin/utils/Context.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" }, - "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" }, - "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" }, "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, "solc_0.8/openzeppelin/proxy/Proxy.sol": { "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" }, - "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" }, - "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" }, - "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" }, "solc_0.8/openzeppelin/utils/Address.sol": { "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, "solc_0.8/openzeppelin/utils/StorageSlot.sol": { "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" }, - "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" }, - "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" }, - "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" }, - "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" }, - "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" } }, "settings": { diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/.chainId b/projects/hardhat-deploy/deployments/lisk_sepolia/.chainId new file mode 100644 index 000000000..edfd6052c --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/.chainId @@ -0,0 +1 @@ +4202 \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/AssetMatcherCollection.json b/projects/hardhat-deploy/deployments/lisk_sepolia/AssetMatcherCollection.json new file mode 100644 index 000000000..b13d3d77b --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/AssetMatcherCollection.json @@ -0,0 +1,101 @@ +{ + "address": "0xc4F5FCD96e3b37A31f871F0968206F47294a4471", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "leftAssetType", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "rightAssetType", + "type": "tuple" + } + ], + "name": "matchAssets", + "outputs": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xf1e5b752fe800a7e590dfa39c405f1c872241f62739ee6583378b421e90bb1f1", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "302853", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x7d1b3ea2655cccfcb241ba17edace455bf11f3791e2a2d88a32cf4c62d5665fa", + "transactionHash": "0xf1e5b752fe800a7e590dfa39c405f1c872241f62739ee6583378b421e90bb1f1", + "logs": [], + "blockNumber": 4426283, + "cumulativeGasUsed": "346728", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"leftAssetType\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"rightAssetType\",\"type\":\"tuple\"}],\"name\":\"matchAssets\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\":\"AssetMatcherCollection\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\n/*\\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\\n */\\ncontract AssetMatcherCollection is IAssetMatcher {\\n\\n bytes constant EMPTY = \\\"\\\";\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\\n if (\\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \\n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \\n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\\n ) {\\n (address leftToken) = abi.decode(leftAssetType.data, (address));\\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\\n if (leftToken == rightToken) {\\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\\n }\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n}\",\"keccak256\":\"0x115e3e94c7b3df6de5c8adf15c42bc737876212e37bd0d0ebe446494d57c94e9\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610403806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d3f7cb014610030575b600080fd5b61004361003e3660046102da565b610059565b604051610050919061033b565b60405180910390f35b610061610195565b81516001600160e01b0319166339d690a360e11b1480610092575081516001600160e01b03191663d8f960c160e01b145b806100ae575081516001600160e01b03191663025ceed960e61b145b806100c9575081516001600160e01b03191662737ea960e61b145b806100e5575081516001600160e01b031916630f9ae27560e21b145b1561016b5760008360200151806020019051810190610104919061028e565b90506000836020015180602001905181019061012091906102af565b509050806001600160a01b0316826001600160a01b031614156101685750506040805180820190915282516001600160e01b031916815260208084015190820152905061018f565b50505b50604080518082018252600080825282516020818101909452908152918101919091525b92915050565b60408051808201909152600081526060602082015290565b80516001600160a01b03811681146101c457600080fd5b919050565b6000604082840312156101da578081fd5b6040516040810167ffffffffffffffff82821081831117156101f857fe5b816040528293508435915063ffffffff60e01b8216821461021857600080fd5b908252602090848201358181111561022f57600080fd5b8501601f8101871361024057600080fd5b80358281111561024c57fe5b61025e601f8201601f191685016103a9565b9250808352878482840101111561027457600080fd5b808483018585013760009083018401525091015292915050565b60006020828403121561029f578081fd5b6102a8826101ad565b9392505050565b600080604083850312156102c1578081fd5b6102ca836101ad565b9150602083015190509250929050565b600080604083850312156102ec578182fd5b823567ffffffffffffffff80821115610303578384fd5b61030f868387016101c9565b93506020850135915080821115610324578283fd5b50610331858286016101c9565b9150509250929050565b6000602080835263ffffffff60e01b84511681840152808401516040808501528051806060860152835b8181101561038157828101840151868201608001528301610365565b818111156103925784608083880101525b50601f01601f191693909301608001949350505050565b60405181810167ffffffffffffffff811182821017156103c557fe5b60405291905056fea2646970667358221220fe8f50b49531504ff963dc9b719db80c3131b9d5b69661a49edd957769dee45764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d3f7cb014610030575b600080fd5b61004361003e3660046102da565b610059565b604051610050919061033b565b60405180910390f35b610061610195565b81516001600160e01b0319166339d690a360e11b1480610092575081516001600160e01b03191663d8f960c160e01b145b806100ae575081516001600160e01b03191663025ceed960e61b145b806100c9575081516001600160e01b03191662737ea960e61b145b806100e5575081516001600160e01b031916630f9ae27560e21b145b1561016b5760008360200151806020019051810190610104919061028e565b90506000836020015180602001905181019061012091906102af565b509050806001600160a01b0316826001600160a01b031614156101685750506040805180820190915282516001600160e01b031916815260208084015190820152905061018f565b50505b50604080518082018252600080825282516020818101909452908152918101919091525b92915050565b60408051808201909152600081526060602082015290565b80516001600160a01b03811681146101c457600080fd5b919050565b6000604082840312156101da578081fd5b6040516040810167ffffffffffffffff82821081831117156101f857fe5b816040528293508435915063ffffffff60e01b8216821461021857600080fd5b908252602090848201358181111561022f57600080fd5b8501601f8101871361024057600080fd5b80358281111561024c57fe5b61025e601f8201601f191685016103a9565b9250808352878482840101111561027457600080fd5b808483018585013760009083018401525091015292915050565b60006020828403121561029f578081fd5b6102a8826101ad565b9392505050565b600080604083850312156102c1578081fd5b6102ca836101ad565b9150602083015190509250929050565b600080604083850312156102ec578182fd5b823567ffffffffffffffff80821115610303578384fd5b61030f868387016101c9565b93506020850135915080821115610324578283fd5b50610331858286016101c9565b9150509250929050565b6000602080835263ffffffff60e01b84511681840152808401516040808501528051806060860152835b8181101561038157828101840151868201608001528301610365565b818111156103925784608083880101525b50601f01601f191693909301608001949350505050565b60405181810167ffffffffffffffff811182821017156103c557fe5b60405291905056fea2646970667358221220fe8f50b49531504ff963dc9b719db80c3131b9d5b69661a49edd957769dee45764736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/DefaultProxyAdmin.json b/projects/hardhat-deploy/deployments/lisk_sepolia/DefaultProxyAdmin.json new file mode 100644 index 000000000..7b446c630 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/DefaultProxyAdmin.json @@ -0,0 +1,259 @@ +{ + "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0x1024ae405db9075372b8a8388596be465e4a4cc472b864788aeac275ba57d547", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "677380", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000001000000000000020000000000000000000800000000000000000000000000000000500200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x6296c49640d0e8de0594803daad11db8e663f28941cf66533b48082e833cd76d", + "transactionHash": "0x1024ae405db9075372b8a8388596be465e4a4cc472b864788aeac275ba57d547", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426255, + "transactionHash": "0x1024ae405db9075372b8a8388596be465e4a4cc472b864788aeac275ba57d547", + "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x6296c49640d0e8de0594803daad11db8e663f28941cf66533b48082e833cd76d" + } + ], + "blockNumber": 4426255, + "cumulativeGasUsed": "721243", + "status": 1, + "byzantium": true + }, + "args": [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155LazyMintTransferProxy.json new file mode 100644 index 000000000..ba635e0b3 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155LazyMintTransferProxy.json @@ -0,0 +1,293 @@ +{ + "address": "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ERC1155LazyMintTransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "asset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x3a6e12cadae99a3de4d68bd5d5185a8f4de4459be4cdfedf68b0a5788661aa7f", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "923250", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x65e0c7337683ea7a65de6c2d2a87211fa410bfb104039fee907c62a40e3249ff", + "transactionHash": "0x3a6e12cadae99a3de4d68bd5d5185a8f4de4459be4cdfedf68b0a5788661aa7f", + "logs": [], + "blockNumber": 4426278, + "cumulativeGasUsed": "967125", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC1155LazyMintTransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":\"ERC1155LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n\\n function __ERC1155LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\\n }\\n}\\n\",\"keccak256\":\"0x5750ad43c269486bb6256eaf27ed2cf2c7ed3964aa0e55871c6b9bb0e96b3e3f\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610f13806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100db578063ac8a584a146100ee578063ccf4fad214610101578063e814f46d14610101578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b55780638da5cb5b146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ac2565b6101d9565b6100a06102cf565b6100c561037b565b6040516100d29190610c8b565b60405180910390f35b6100a06100e93660046109a8565b61038a565b6100a06100fc3660046109a8565b610410565b6100a061010f3660046109a8565b610493565b6100a06101223660046109a8565b61054f565b600054610100900460ff16806101405750610140610652565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc610663565b6101c4610703565b80156101d6576000805461ff00191690555b50565b606560006101e56107fc565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eb66028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061025c91906109c4565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b81526004016102969493929190610c9f565b600060405180830381600087803b1580156102b057600080fd5b505af11580156102c4573d6000803e3d6000fd5b505050505050505050565b6102d76107fc565b6001600160a01b03166102e861037b565b6001600160a01b031614610331576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b6103926107fc565b6001600160a01b03166103a361037b565b6001600160a01b0316146103ec576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104186107fc565b6001600160a01b031661042961037b565b6001600160a01b031614610472576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806104ac57506104ac610652565b806104ba575060005460ff16155b6104f55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610520576000805460ff1961ff0019909116610100171660011790555b610528610663565b610530610703565b6105398261054f565b801561054b576000805461ff00191690555b5050565b6105576107fc565b6001600160a01b031661056861037b565b6001600160a01b0316146105b1576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b0381166105f65760405162461bcd60e51b8152600401808060200182810382526026815260200180610e426026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061065d30610800565b15905090565b600054610100900460ff168061067c575061067c610652565b8061068a575060005460ff16155b6106c55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff168061071c575061071c610652565b8061072a575060005460ff16155b6107655760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610790576000805460ff1961ff0019909116610100171660011790555b600061079a6107fc565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061081d61081884610dda565b610d98565b905082815283838301111561083157600080fd5b61083f836020830184610dfc565b9392505050565b803561080581610e2c565b600082601f830112610861578081fd5b8151602061087161081883610dbc565b82815281810190858301855b858110156108bb578151880189603f820112610897578788fd5b6108a88a878301516040840161080a565b855250928401929084019060010161087d565b5090979650505050505050565b600082601f8301126108d8578081fd5b815160206108e861081883610dbc565b82815281810190858301604080860288018501891015610906578687fd5b865b8681101561097b5781838b03121561091e578788fd5b815182810181811067ffffffffffffffff8211171561093957fe5b8352835161094681610e2c565b8152838701516bffffffffffffffffffffffff8116811461096557898afd5b8188015285529385019391810191600101610908565b509198975050505050505050565b600082601f830112610999578081fd5b61083f8383516020850161080a565b6000602082840312156109b9578081fd5b813561083f81610e2c565b600080604083850312156109d6578081fd5b82516109e181610e2c565b602084015190925067ffffffffffffffff808211156109fe578283fd5b9084019060c08287031215610a11578283fd5b610a1b60c0610d98565b82518152602083015182811115610a30578485fd5b610a3c88828601610989565b60208301525060408301516040820152606083015182811115610a5d578485fd5b610a69888286016108c8565b606083015250608083015182811115610a80578485fd5b610a8c888286016108c8565b60808301525060a083015182811115610aa3578485fd5b610aaf88828601610851565b60a0830152508093505050509250929050565b600080600060608486031215610ad6578081fd5b833567ffffffffffffffff80821115610aed578283fd5b81860191506040808389031215610b02578384fd5b80518181018181108482111715610b1557fe5b808352843584811115610b26578687fd5b8501808b03841315610b36578687fd5b608083018281108682111715610b4857fe5b845280356001600160e01b031981168114610b61578788fd5b825260208181013586811115610b75578889fd5b82019550601f86018c13610b87578788fd5b85359150610b9761081883610dda565b8281528c82848901011115610baa578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bd9818c01610846565b985050505050610bea818801610846565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c5457815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c16565b509495945050505050565b60008151808452610c77816020860160208601610dfc565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610cc7610140850182610c5f565b9050604088015160c08501526060880151607f19808684030160e0870152610cef8383610c03565b925060808a015191508086840301610100870152610d0d8383610c03565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610d6657601f19868303018452610d54828651610c5f565b94870194938701939150600101610d38565b508096505050505050610d7b81840187610bf6565b50610d896040830185610bf6565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610db457fe5b604052919050565b600067ffffffffffffffff821115610dd057fe5b5060209081020190565b600067ffffffffffffffff821115610dee57fe5b50601f01601f191660200190565b60005b83811015610e17578181015183820152602001610dff565b83811115610e26576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a2e24b24412817b3e18dda67abff2b746539ae76571c1e638821050d4f94e66e64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100db578063ac8a584a146100ee578063ccf4fad214610101578063e814f46d14610101578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b55780638da5cb5b146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ac2565b6101d9565b6100a06102cf565b6100c561037b565b6040516100d29190610c8b565b60405180910390f35b6100a06100e93660046109a8565b61038a565b6100a06100fc3660046109a8565b610410565b6100a061010f3660046109a8565b610493565b6100a06101223660046109a8565b61054f565b600054610100900460ff16806101405750610140610652565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc610663565b6101c4610703565b80156101d6576000805461ff00191690555b50565b606560006101e56107fc565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eb66028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061025c91906109c4565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b81526004016102969493929190610c9f565b600060405180830381600087803b1580156102b057600080fd5b505af11580156102c4573d6000803e3d6000fd5b505050505050505050565b6102d76107fc565b6001600160a01b03166102e861037b565b6001600160a01b031614610331576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b6103926107fc565b6001600160a01b03166103a361037b565b6001600160a01b0316146103ec576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104186107fc565b6001600160a01b031661042961037b565b6001600160a01b031614610472576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806104ac57506104ac610652565b806104ba575060005460ff16155b6104f55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610520576000805460ff1961ff0019909116610100171660011790555b610528610663565b610530610703565b6105398261054f565b801561054b576000805461ff00191690555b5050565b6105576107fc565b6001600160a01b031661056861037b565b6001600160a01b0316146105b1576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b0381166105f65760405162461bcd60e51b8152600401808060200182810382526026815260200180610e426026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061065d30610800565b15905090565b600054610100900460ff168061067c575061067c610652565b8061068a575060005460ff16155b6106c55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff168061071c575061071c610652565b8061072a575060005460ff16155b6107655760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610790576000805460ff1961ff0019909116610100171660011790555b600061079a6107fc565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061081d61081884610dda565b610d98565b905082815283838301111561083157600080fd5b61083f836020830184610dfc565b9392505050565b803561080581610e2c565b600082601f830112610861578081fd5b8151602061087161081883610dbc565b82815281810190858301855b858110156108bb578151880189603f820112610897578788fd5b6108a88a878301516040840161080a565b855250928401929084019060010161087d565b5090979650505050505050565b600082601f8301126108d8578081fd5b815160206108e861081883610dbc565b82815281810190858301604080860288018501891015610906578687fd5b865b8681101561097b5781838b03121561091e578788fd5b815182810181811067ffffffffffffffff8211171561093957fe5b8352835161094681610e2c565b8152838701516bffffffffffffffffffffffff8116811461096557898afd5b8188015285529385019391810191600101610908565b509198975050505050505050565b600082601f830112610999578081fd5b61083f8383516020850161080a565b6000602082840312156109b9578081fd5b813561083f81610e2c565b600080604083850312156109d6578081fd5b82516109e181610e2c565b602084015190925067ffffffffffffffff808211156109fe578283fd5b9084019060c08287031215610a11578283fd5b610a1b60c0610d98565b82518152602083015182811115610a30578485fd5b610a3c88828601610989565b60208301525060408301516040820152606083015182811115610a5d578485fd5b610a69888286016108c8565b606083015250608083015182811115610a80578485fd5b610a8c888286016108c8565b60808301525060a083015182811115610aa3578485fd5b610aaf88828601610851565b60a0830152508093505050509250929050565b600080600060608486031215610ad6578081fd5b833567ffffffffffffffff80821115610aed578283fd5b81860191506040808389031215610b02578384fd5b80518181018181108482111715610b1557fe5b808352843584811115610b26578687fd5b8501808b03841315610b36578687fd5b608083018281108682111715610b4857fe5b845280356001600160e01b031981168114610b61578788fd5b825260208181013586811115610b75578889fd5b82019550601f86018c13610b87578788fd5b85359150610b9761081883610dda565b8281528c82848901011115610baa578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bd9818c01610846565b985050505050610bea818801610846565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c5457815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c16565b509495945050505050565b60008151808452610c77816020860160208601610dfc565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610cc7610140850182610c5f565b9050604088015160c08501526060880151607f19808684030160e0870152610cef8383610c03565b925060808a015191508086840301610100870152610d0d8383610c03565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610d6657601f19868303018452610d54828651610c5f565b94870194938701939150600101610d38565b508096505050505050610d7b81840187610bf6565b50610d896040830185610bf6565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610db457fe5b604052919050565b600067ffffffffffffffff821115610dd057fe5b5060209081020190565b600067ffffffffffffffff821115610dee57fe5b50601f01601f191660200190565b60005b83811015610e17578181015183820152602001610dff565b83811115610e26576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a2e24b24412817b3e18dda67abff2b746539ae76571c1e638821050d4f94e66e64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19884, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleBeaconMeta.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleBeaconMeta.json new file mode 100644 index 000000000..737d02c52 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleBeaconMeta.json @@ -0,0 +1,219 @@ +{ + "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xe382be530466d6cfbe0c7e1909e7c160c439de2bc67b73e387e907d867d5ab2d", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "394703", + "logsBloom": "0x00000000000000000000000000000000000000000400800004800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc03c0957e49fdbf231151ee863e82dbae9678e1d481e990e1ef525e09ecdbc05", + "transactionHash": "0xe382be530466d6cfbe0c7e1909e7c160c439de2bc67b73e387e907d867d5ab2d", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426325, + "transactionHash": "0xe382be530466d6cfbe0c7e1909e7c160c439de2bc67b73e387e907d867d5ab2d", + "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xc03c0957e49fdbf231151ee863e82dbae9678e1d481e990e1ef525e09ecdbc05" + }, + { + "transactionIndex": 1, + "blockNumber": 4426325, + "transactionHash": "0xe382be530466d6cfbe0c7e1909e7c160c439de2bc67b73e387e907d867d5ab2d", + "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xc03c0957e49fdbf231151ee863e82dbae9678e1d481e990e1ef525e09ecdbc05" + } + ], + "blockNumber": 4426325, + "cumulativeGasUsed": "438578", + "status": 1, + "byzantium": true + }, + "args": [ + "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\":\"ERC1155RaribleBeaconMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\\n transferOwnership(initialOwner);\\n }\\n}\\n\",\"keccak256\":\"0xf0f5306033288bc22598ae47368ae7d66273c924401c123259a8fc467459965b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405161072d38038061072d8339818101604052604081101561003357600080fd5b508051602090910151816000610047610099565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602061070d833981519152908290a3506100888161009d565b506100928161010d565b5050610224565b3390565b6100b08161020f60201b6103821760201c565b6100eb5760405162461bcd60e51b81526004018080602001828103825260338152602001806106da6033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610115610099565b6001600160a01b0316610126610215565b6001600160a01b031614610181576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166101c65760405162461bcd60e51b81526004018080602001828103825260268152602001806106b46026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061070d83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b6000546001600160a01b031690565b610481806102336000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a264697066735822122097d1fd4fefddd34270259a2d6721a4f9af66abf30b6e34916f1ca191250e72b564736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163748be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a264697066735822122097d1fd4fefddd34270259a2d6721a4f9af66abf30b6e34916f1ca191250e72b564736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "implementation()": { + "details": "Returns the current implementation address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeTo(address)": { + "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol:ERC1155RaribleBeaconMeta", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6517, + "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol:ERC1155RaribleBeaconMeta", + "label": "_implementation", + "offset": 0, + "slot": "1", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleFactoryC2.json new file mode 100644 index 000000000..bff1fcf6f --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleFactoryC2.json @@ -0,0 +1,396 @@ +{ + "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_beacon", + "type": "address" + }, + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create1155RaribleProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create1155RaribleUserProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "beacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xb0acdd013244276e94be01e0238faa6baa913844033575dec28a90b10c29659e", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1374604", + "logsBloom": "0x00000000000000000000000000000000008000000400800000800000000000000000000000000000000000000000000000000000000040000000004000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010", + "blockHash": "0x98758cdcab89ee247b22fc84fc5a4a083efa2e8d85d6466e91c0fbdca62f3e04", + "transactionHash": "0xb0acdd013244276e94be01e0238faa6baa913844033575dec28a90b10c29659e", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426328, + "transactionHash": "0xb0acdd013244276e94be01e0238faa6baa913844033575dec28a90b10c29659e", + "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x98758cdcab89ee247b22fc84fc5a4a083efa2e8d85d6466e91c0fbdca62f3e04" + }, + { + "transactionIndex": 1, + "blockNumber": 4426328, + "transactionHash": "0xb0acdd013244276e94be01e0238faa6baa913844033575dec28a90b10c29659e", + "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x98758cdcab89ee247b22fc84fc5a4a083efa2e8d85d6466e91c0fbdca62f3e04" + } + ], + "blockNumber": 4426328, + "cumulativeGasUsed": "1418479", + "status": 1, + "byzantium": true + }, + "args": [ + "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":\"ERC1155RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-1155/ERC1155Rarible.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\\n *\\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC1155RaribleFactoryC2 is Ownable{\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create1155RaribleProxy(address proxy);\\n event Create1155RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n transferOwnership(initialOwner);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleProxy(beaconProxy);\\n }\\n \\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n\\n}\\n\",\"keccak256\":\"0xafc4d548d88843b0e3642d55d28bf07415ad50950c9fbb22f8eeadd5a9774478\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x80b6ec138d4689d2e842777e9d61ff3a32a872ac61c91deebf3af5210517eb02\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Base.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n \\n isPrivate = true;\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC1155Rarible(initialOwner, _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0x9f9ce1325409a069ad166fa51ce4402e854f9da274e047a763a4f4e193925967\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7d305157d1d52073aa03b9bc8d8efae9ad010f32160a8eedbc19ca9549c9a7a6\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620017f7380380620017f7833981016040819052620000349162000205565b600062000040620000cb565b600080546001600160a01b0319166001600160a01b038316908117825560405192935091600080516020620017d7833981519152908290a350600180546001600160a01b038087166001600160a01b031992831617909255600280548684169083161790556003805492851692909116919091179055620000c181620000cf565b5050505062000261565b3390565b620000d9620000cb565b6001600160a01b0316620000ec620001d9565b6001600160a01b03161462000148576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166200018f5760405162461bcd60e51b8152600401808060200182810382526026815260200180620017b16026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020620017d783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b80516001600160a01b03811681146200020057600080fd5b919050565b600080600080608085870312156200021b578384fd5b6200022685620001e8565b93506200023660208601620001e8565b92506200024660408601620001e8565b91506200025660608601620001e8565b905092959194509250565b61154080620002716000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220d72849794df566f801d9145066ca8915bdfb2399d632f29f7ac136b4c6a377dd64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220d72849794df566f801d9145066ca8915bdfb2399d632f29f7ac136b4c6a377dd64736f6c63430007060033", + "devdoc": { + "details": "This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.", + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 22716, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "beacon", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 22718, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "transferProxy", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 22720, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "lazyTransferProxy", + "offset": 0, + "slot": "3", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta.json new file mode 100644 index 000000000..c9759f780 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta.json @@ -0,0 +1,1575 @@ +{ + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BurnLazy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "BurnLazyBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Supply", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "TransferBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferSingle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "URI", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "burnBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1124696", + "logsBloom": "0x00000400000000000000000000000020400000000400800000800000000000000000000000000000000000000000000000000000000040000100000000000000000000000000008000000000000002000001000000000800004000000000000000004000020000000000001080000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000100004000000000000000000000000000000000020000200000000010001000000000080000400000000000000000020000001000000000010000000000000800000000000000000001000000001000000", + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087", + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000a36e6ee8c5eebfb1738fb78ce3d09562869f58a4" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + }, + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + }, + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + }, + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + }, + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + }, + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" + ], + "data": "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 5, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + }, + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + } + ], + "blockNumber": 4426323, + "cumulativeGasUsed": "1168571", + "status": 1, + "byzantium": true + }, + "args": [ + "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "__ERC1155Rarible_init_proxy", + "args": [ + "Rarible", + "RARI", + "ipfs:/", + "", + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ] + }, + "implementation": "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Implementation.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Implementation.json new file mode 100644 index 000000000..f4a5e1e95 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Implementation.json @@ -0,0 +1,1791 @@ +{ + "address": "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BurnLazy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "BurnLazyBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Supply", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "TransferBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferSingle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "URI", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "burnBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x8042a9557876244ff937429c77fc566be8486164d40fd965ee69c558cefff89f", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "5465741", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x5bec628b1b187637307923c23240609cf3be2ada536f1b6729def276f68b5a27", + "transactionHash": "0x8042a9557876244ff937429c77fc566be8486164d40fd965ee69c558cefff89f", + "logs": [], + "blockNumber": 4426320, + "cumulativeGasUsed": "5509616", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnLazy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"BurnLazyBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC1155Rarible_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"balanceOf(address,uint256)\":{\"details\":\"See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"See {IERC1155-safeBatchTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"See {IERC1155-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC1155-setApprovalForAll}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\":\"ERC1155RaribleMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\\n using SafeMath for uint256;\\n\\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\\\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\\\"));\\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\\\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\\\");\\n\\n mapping(address => uint256) private nonces;\\n bytes32 internal domainSeparator;\\n\\n /*\\n * Meta transaction structure.\\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\\n * He should call the desired function directly in that case.\\n */\\n struct MetaTransaction {\\n uint256 nonce;\\n address from;\\n bytes functionSignature;\\n }\\n\\n /*\\n * Domain structure.\\n * Data(information to for making metaTransaction method uniq.) about method and contract\\n */\\n struct EIP712Domain {\\n string name;\\n string version;\\n address verifyingContract;\\n bytes32 salt;\\n }\\n\\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\\n\\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\\n domainSeparator = keccak256(abi.encode(\\n EIP712_DOMAIN_TYPEHASH,\\n keccak256(bytes(name)),\\n keccak256(bytes(version)),\\n address(this),\\n getSalt()\\n ));\\n }\\n\\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\\n if (inBytes.length == 0) {\\n return 0x0;\\n }\\n\\n assembly {\\n outBytes4 := mload(add(inBytes, 32))\\n }\\n }\\n\\n function executeMetaTransaction(address userAddress,\\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\\n require(destinationFunctionSig != msg.sig, \\\"Wrong functionSignature\\\");\\n MetaTransaction memory metaTx = MetaTransaction({\\n nonce : nonces[userAddress],\\n from : userAddress,\\n functionSignature : functionSignature\\n });\\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \\\"Signer and signature do not match\\\");\\n nonces[userAddress] = nonces[userAddress].add(1);\\n // Append userAddress at the end to extract it from calling context\\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\\n\\n require(success, \\\"Function call not successful\\\");\\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\\n return returnData;\\n }\\n\\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n META_TRANSACTION_TYPEHASH,\\n metaTx.nonce,\\n metaTx.from,\\n keccak256(metaTx.functionSignature)\\n ));\\n }\\n\\n function getNonce(address user) external view returns (uint256 nonce) {\\n nonce = nonces[user];\\n }\\n\\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\\n require(signer != address(0), \\\"Invalid signature\\\");\\n return signer == user;\\n }\\n\\n function _msgSender() internal view virtual override returns (address payable sender) {\\n if (msg.sender == address(this)) {\\n bytes memory array = msg.data;\\n uint256 index = msg.data.length;\\n assembly {\\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\\n }\\n } else {\\n sender = msg.sender;\\n }\\n return sender;\\n }\\n\\n function getSalt() internal pure returns (bytes32) {\\n return bytes32(getChainID());\\n }\\n\\n function getChainID() internal pure returns (uint256 id) {\\n assembly {\\n id := chainid()\\n }\\n }\\n\\n function getDomainSeparator() private view returns (bytes32) {\\n return domainSeparator;\\n }\\n\\n /**\\n * Accept message hash and returns hash message in EIP712 compatible form\\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\\n * https://eips.ethereum.org/EIPS/eip-712\\n * \\\"\\\\\\\\x19\\\" makes the encoding deterministic\\n * \\\"\\\\\\\\x01\\\" is the version byte to make it compatible to EIP-191\\n */\\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", getDomainSeparator(), messageHash));\\n }\\n\\n /**\\n * @dev verifies the call result and bubbles up revert reason for failed calls\\n *\\n * @param success : outcome of forwarded call\\n * @param returndata : returned data from the frowarded call\\n * @param errorMessage : fallback error message to show\\n */\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\\n if (!success) {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x58924a44eea8720bdcfb32f12d3374deac9605a3b75cb8872907856d526bde10\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x80b6ec138d4689d2e842777e9d61ff3a32a872ac61c91deebf3af5210517eb02\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7d305157d1d52073aa03b9bc8d8efae9ad010f32160a8eedbc19ca9549c9a7a6\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\\\";\\nimport \\\"../ERC1155Base.sol\\\";\\nimport \\\"../../IsPrivateCollection.sol\\\";\\nimport \\\"../../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC1155RaribleUserMeta\\\", \\\"1\\\");\\n \\n isPrivate = true;\\n\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n \\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC1155RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC1155RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\\n return super._msgSender();\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0x4213a9625423e8bec14757bd2d16a9586b0d6848ed806d14d078de2f291a856f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50615ff280620000216000396000f3fe6080604052600436106101ed5760003560e01c80636c0360eb1161010d578063aa271e1a116100a0578063e985e9c51161006f578063e985e9c51461058a578063f242432a146105aa578063f2fde38b146105ca578063f5298aca146105ea578063ffc4e0a71461060a576101ed565b8063aa271e1a14610515578063cad96cca14610535578063e07f231914610555578063e8a3d48514610575576101ed565b80638da5cb5b116100dc5780638da5cb5b1461049e57806395d89b41146104c0578063983b2d56146104d5578063a22cb465146104f5576101ed565b80636c0360eb14610427578063715018a61461043c57806371e2a65714610451578063891be97414610471576101ed565b80632a55205a116101855780634e1273f4116101545780634e1273f41461039a57806355f804b3146103c757806361e05459146103e75780636b20c45414610407576101ed565b80632a55205a1461030c5780632d0335ab1461033a5780632eb2c2d61461035a5780633092afd51461037a576101ed565b80630e89341c116101c15780630e89341c1461028a5780630eaead67146102aa578063173c43d2146102cc578063220e4d73146102ec576101ed565b8062fdd58e146101f257806301ffc9a71461022857806306fdde03146102555780630c53c51c14610277575b600080fd5b3480156101fe57600080fd5b5061021261020d366004615211565b61062a565b60405161021f9190615b3a565b60405180910390f35b34801561023457600080fd5b5061024861024336600461530a565b61069c565b60405161021f919061588b565b34801561026157600080fd5b5061026a6106af565b60405161021f9190615896565b61026a610285366004615197565b61073e565b34801561029657600080fd5b5061026a6102a5366004615692565b610ab7565b3480156102b657600080fd5b506102ca6102c536600461563b565b610ac2565b005b3480156102d857600080fd5b506102ca6102e7366004615364565b610b66565b3480156102f857600080fd5b506102ca61030736600461542b565b610c16565b34801561031857600080fd5b5061032c6103273660046156eb565b610cd0565b60405161021f929190615827565b34801561034657600080fd5b50610212610355366004614f91565b610dde565b34801561036657600080fd5b506102ca610375366004614fe5565b610dfa565b34801561038657600080fd5b506102ca610395366004614f91565b6110f8565b3480156103a657600080fd5b506103ba6103b53660046152aa565b6111a8565b60405161021f9190615853565b3480156103d357600080fd5b506102ca6103e2366004615332565b611293565b3480156103f357600080fd5b506102ca610402366004615504565b611338565b34801561041357600080fd5b506102ca6104223660046150f4565b6113ce565b34801561043357600080fd5b5061026a611554565b34801561044857600080fd5b506102ca6115ec565b34801561045d57600080fd5b506102ca61046c366004615270565b611698565b34801561047d57600080fd5b5061049161048c366004615692565b611781565b60405161021f9190615840565b3480156104aa57600080fd5b506104b3611811565b60405161021f91906157dd565b3480156104cc57600080fd5b5061026a611820565b3480156104e157600080fd5b506102ca6104f0366004614f91565b61187c565b34801561050157600080fd5b506102ca610510366004615166565b611931565b34801561052157600080fd5b50610248610530366004614f91565b611a20565b34801561054157600080fd5b50610491610550366004615692565b611a3f565b34801561056157600080fd5b506102ca6105703660046156aa565b611aba565b34801561058157600080fd5b5061026a611afd565b34801561059657600080fd5b506102486105a5366004614fad565b611b59565b3480156105b657600080fd5b506102ca6105c536600461508e565b611b6c565b3480156105d657600080fd5b506102ca6105e5366004614f91565b611d25565b3480156105f657600080fd5b506102ca61060536600461523c565b611e28565b34801561061657600080fd5b506102ca6106253660046155d4565b611ea4565b60006001600160a01b0383166106715760405162461bcd60e51b815260040180806020018281038252602b815260200180615ce6602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b60006106a782611f4c565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b820191906000526020600020905b81548152906001019060200180831161071957829003601f168201915b505050505081565b6060600061074b86611feb565b90506000356001600160e01b031990811690821614156107b2576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102fb6020908152908490205483528201529081018790526107f08882888888612007565b61082b5760405162461bcd60e51b8152600401808060200182810382526021815260200180615efd6021913960400191505060405180910390fd5b6001600160a01b03881660009081526102fb60205260409020546108509060016120f1565b6102fb60008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106108bb5780518252601f19909201916020918201910161089c565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106109315780518252601f199092019160209182019101610912565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610993576040519150601f19603f3d011682016040523d82523d6000602084013e610998565b606091505b5091509150816109ef576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a6e578181015183820152602001610a56565b50505050905090810190601f168015610a9b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b60606106a78261214b565b6102965460ff1615610b56578260600151600081518110610adf57fe5b6020026020010151600001516001600160a01b0316610afc611811565b6001600160a01b03161480610b315750610b318360600151600081518110610b2057fe5b602002602001015160000151611a20565b610b565760405162461bcd60e51b8152600401610b4d906158d4565b60405180910390fd5b610b618383836122e1565b505050565b610b748686868686866125dd565b610bc1604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610bf561279f565b8787604051610c06939291906157f1565b60405180910390a1505050505050565b610c248787878787876125dd565b610c71604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff19169055610c8581611d25565b7fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610cae61279f565b8888604051610cbf939291906157f1565b60405180910390a150505050505050565b60008281526101fa60205260408120548190610cf157506000905080610dd7565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d6d57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610d1e565b50505050905080600081518110610d8057fe5b60209081029190910101515192506000805b8251811015610dcb57828181518110610da757fe5b6020026020010151602001516001600160601b031682019150806001019050610d92565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102fb602052604090205490565b8151835114610e3a5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f956028913960400191505060405180910390fd5b6001600160a01b038416610e7f5760405162461bcd60e51b8152600401808060200182810382526025815260200180615de96025913960400191505060405180910390fd5b610e8761279f565b6001600160a01b0316856001600160a01b03161480610ead5750610ead856105a561279f565b610ee85760405162461bcd60e51b8152600401808060200182810382526032815260200180615e0e6032913960400191505060405180910390fd5b6000610ef261279f565b9050610f028187878787876110f0565b60005b8451811015611008576000858281518110610f1c57fe5b602002602001015190506000858381518110610f3457fe5b60200260200101519050610fa1816040518060600160405280602a8152602001615eb3602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546127ae9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a1681522054610fd890826120f1565b60009283526097602090815260408085206001600160a01b038c1686529091529092209190915550600101610f05565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561108e578181015183820152602001611076565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156110cd5781810151838201526020016110b5565b5050505090500194505050505060405180910390a46110f0818787878787612845565b505050505050565b61110061279f565b6001600160a01b0316611111611811565b6001600160a01b03161461115a576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b606081518351146111ea5760405162461bcd60e51b8152600401808060200182810382526029815260200180615f6c6029913960400191505060405180910390fd5b600083516001600160401b038111801561120357600080fd5b5060405190808252806020026020018201604052801561122d578160200160208202803683370190505b50905060005b845181101561128b5761126c85828151811061124b57fe5b602002602001015185838151811061125f57fe5b602002602001015161062a565b82828151811061127857fe5b6020908102919091010152600101611233565b509392505050565b61129b61279f565b6001600160a01b03166112ac611811565b6001600160a01b0316146112f5576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6112fe81612abb565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d68160405161132d9190615896565b60405180910390a150565b6113468787878786866125dd565b611397604051806040016040528060168152602001754552433131353552617269626c65557365724d65746160501b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc610cae61279f565b80518251146113ef5760405162461bcd60e51b8152600401610b4d90615a83565b600082516001600160401b038111801561140857600080fd5b50604051908082528060200260200182016040528015611432578160200160208202803683370190505b509050600083516001600160401b038111801561144e57600080fd5b50604051908082528060200260200182016040528015611478578160200160208202803683370190505b50905060005b84518110156114ed576114b785828151811061149657fe5b60200260200101518583815181106114aa57fe5b6020026020010151612acf565b8483815181106114c357fe5b602002602001018484815181106114d657fe5b60209081029190910101919091525260010161147e565b506114f9858584612b44565b846001600160a01b031661150b61279f565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051611545929190615866565b60405180910390a35050505050565b61012f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b505050505090505b90565b6115f461279f565b6001600160a01b0316611605611811565b6001600160a01b03161461164e576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6116a061279f565b6001600160a01b03166116b1611811565b6001600160a01b0316146116fa576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b60005b815181101561177d57600082828151811061171457fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016116fd565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561180657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016117b7565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b61188461279f565b6001600160a01b0316611895611811565b6001600160a01b0316146118de576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b031661194361279f565b6001600160a01b031614156119895760405162461bcd60e51b8152600401808060200182810382526029815260200180615f436029913960400191505060405180910390fd5b806098600061199661279f565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556119da61279f565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa6020908152604080832080548251818502810185019093528083526060949293919290918401821561180657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016117b7565b816001600160a01b0316611acc61279f565b6001600160a01b031614611af25760405162461bcd60e51b8152600401610b4d9061598b565b610b61838383612bb8565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b6000611b658383612c64565b9392505050565b6001600160a01b038416611bb15760405162461bcd60e51b8152600401808060200182810382526025815260200180615de96025913960400191505060405180910390fd5b611bb961279f565b6001600160a01b0316856001600160a01b03161480611bdf5750611bdf856105a561279f565b611c1a5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b6000611c2461279f565b9050611c44818787611c3588612c90565b611c3e88612c90565b876110f0565b611c8b836040518060600160405280602a8152602001615eb3602a913960008781526097602090815260408083206001600160a01b038d16845290915290205491906127ae565b60008581526097602090815260408083206001600160a01b038b81168552925280832093909355871681522054611cc290846120f1565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a841693861692600080516020615cc683398151915292908290030190a46110f0818787878787612cd5565b611d2d61279f565b6001600160a01b0316611d3e611811565b6001600160a01b031614611d87576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b038116611dcc5760405162461bcd60e51b8152600401808060200182810382526026815260200180615d546026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600080611e358484612acf565b90925090508115611e4b57611e4b858584612e46565b8015611e9d57846001600160a01b0316611e6361279f565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051611545929190615b5c565b5050505050565b6000611eb484866000015161062a565b9050818115611eee578280831015611ec95750815b611ee9868689600001518460405180602001604052806000815250611b6c565b830390505b80156110f0578560600151600081518110611f0557fe5b6020026020010151600001516001600160a01b0316856001600160a01b031614611f415760405162461bcd60e51b8152600401610b4d906158a9565b6110f0868583610ac2565b60006001600160e01b03198216636db15a0f60e01b1480611f7d57506001600160e01b0319821663656cb66560e11b145b80611f9857506001600160e01b0319821663152a902d60e11b145b80611fb357506001600160e01b031982166301ffc9a760e01b145b80611fce57506001600160e01b03198216636cdb3d1360e11b145b806106a75750506001600160e01b0319166303a24d0760e21b1490565b6000815160001415611fff575060006106aa565b506020015190565b600080600161201d61201888612eba565b612f3d565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612074573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120d0576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611b65576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081815261012e6020908152604080832080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352606094938301828280156121e05780601f106121b5576101008083540402835291602001916121e0565b820191906000526020600020905b8154815290600101906020018083116121c357829003601f168201915b5050505050905060006121f1611554565b9050805160001415612205575090506106aa565b81511561221f576122168183612f89565b925050506106aa565b806122298561316e565b6040516020018083805190602001908083835b6020831061225b5780518252601f19909201916020918201910161223c565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106122a35780518252601f199092019160209182019101612284565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c60006122f061279f565b9050806001600160a01b0316826001600160a01b0316148061231757506123178282611b59565b6123335760405162461bcd60e51b8152600401610b4d906159da565b600083116123535760405162461bcd60e51b8152600401610b4d906159b0565b845160009081526101fc60205260409020546124bc57846060015160008151811061237a57fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146123b65760405162461bcd60e51b8152600401610b4d90615960565b60008560400151116123da5760405162461bcd60e51b8152600401610b4d90615901565b8460a0015151856060015151146123f057600080fd5b60006123fb86613248565b905060005b8660600151518110156124715760008760600151828151811061241f57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b0316146124685761246881848a60a00151858151811061245b57fe5b602002602001015161349b565b50600101612400565b50612484866000015187604001516134a6565b61249686600001518760800151613510565b6124a8866000015187606001516136ff565b6124ba866000015187602001516138ae565b505b6124db8486600001518560405180602001604052806000815250613972565b836001600160a01b0316826001600160a01b03161461258c57816001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615cc6833981519152886000015187604051612536929190615b5c565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b0316600080516020615cc683398151915288600001518760405161257f929190615b5c565b60405180910390a4611e9d565b836001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615cc68339815191528860000151876040516125ce929190615b5c565b60405180910390a45050505050565b600054610100900460ff16806125f657506125f6613984565b80612604575060005460ff16155b61263f5760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff1615801561266a576000805460ff1961ff0019909116610100171660011790555b612672613995565b61267a613a8f565b612682613a91565b61268a613b42565b612692613be2565b6126aa60405180602001604052806000815250613c25565b6126b384613cf0565b6126bb613a8f565b6126c3613d15565b6126cd8787613db2565b6126d5613a8f565b6126de85612abb565b6126e9836001613ddb565b6126f4826001613ddb565b8015612706576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030612749613e3b565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102fc819055505050565b60006127a9613e45565b905090565b6000818484111561283d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128025781810151838201526020016127ea565b50505050905090810190601f16801561282f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b612857846001600160a01b0316613ea1565b156110f057836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156128e55781810151838201526020016128cd565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561292457818101518382015260200161290c565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612960578181015183820152602001612948565b50505050905090810190601f16801561298d5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1580156129b257600080fd5b505af19250505080156129d757506040513d60208110156129d257600080fd5b505160015b612a6c576129e3615bb0565b806129ee5750612a35565b60405162461bcd60e51b81526020600482018181528351602484015283518493919283926044019190850190808383600083156128025781810151838201526020016127ea565b60405162461bcd60e51b8152600401808060200182810382526034815260200180615c6a6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146127065760405162461bcd60e51b8152600401808060200182810382526028815260200180615c9e6028913960400191505060405180910390fd5b805161177d9061012f906020840190614bd5565b806000606084901c612adf61279f565b6001600160a01b0316816001600160a01b03161415612b3c578391506000612b0686613ea7565b90508015612b2b576000612b1987613eba565b8203905080861115612b29578093505b505b612b358684613ecd565b8285039350505b509250929050565b612b4c61279f565b6001600160a01b0316836001600160a01b03161480612b725750612b72836105a561279f565b612bad5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b610b61838383613ee6565b60008381526101fa6020526040812054905b81811015611e9d5760008581526101fa6020526040902080546001600160a01b038616919083908110612bf957fe5b6000918252602090912001546001600160a01b03161415612c5c5760008581526101fa60205260409020805484919083908110612c3257fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612bca565b6001600160a01b038116600090815260c9602052604081205460ff1680611b655750611b658383614154565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612cc457fe5b602090810291909101015292915050565b612ce7846001600160a01b0316613ea1565b156110f057836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612d76578181015183820152602001612d5e565b50505050905090810190601f168015612da35780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612dc657600080fd5b505af1925050508015612deb57506040513d6020811015612de657600080fd5b505160015b612df7576129e3615bb0565b6001600160e01b0319811663f23a6e6160e01b146127065760405162461bcd60e51b8152600401808060200182810382526028815260200180615c9e6028913960400191505060405180910390fd5b612e4e61279f565b6001600160a01b0316836001600160a01b03161480612e745750612e74836105a561279f565b612eaf5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b610b61838383614182565b6000604051806080016040528060438152602001615d1160439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612f476142a3565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b805182516060918491849110156130545784846040516020018083805190602001908083835b60208310612fce5780518252601f199092019160209182019101612faf565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106130165780518252601f199092019160209182019101612ff7565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610696565b60005b82518110156131645782818151811061306c57fe5b602001015160f81c60f81b6001600160f81b03191682828151811061308d57fe5b01602001516001600160f81b0319161461315c5785856040516020018083805190602001908083835b602083106130d55780518252601f1990920191602091820191016130b6565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061311d5780518252601f1990920191602091820191016130fe565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350505050610696565b600101613057565b5092949350505050565b60608161319357506040805180820190915260018152600360fc1b60208201526106aa565b8160005b81156131ab57600101600a82049150613197565b6000816001600160401b03811180156131c357600080fd5b506040519080825280601f01601f1916602001820160405280156131ee576020820181803683370190505b50859350905060001982015b831561323f57600a840660300160f81b8282806001900393508151811061321d57fe5b60200101906001600160f81b031916908160001a905350600a840493506131fa565b50949350505050565b6000808260800151516001600160401b038111801561326657600080fd5b50604051908082528060200260200182016040528015613290578160200160208202803683370190505b50905060005b8360800151518110156132e2576132c3846080015182815181106132b657fe5b60200260200101516142aa565b8282815181106132cf57fe5b6020908102919091010152600101613296565b5060008360600151516001600160401b038111801561330057600080fd5b5060405190808252806020026020018201604052801561332a578160200160208202803683370190505b50905060005b84606001515181101561336f57613350856060015182815181106132b657fe5b82828151811061335c57fe5b6020908102919091010152600101613330565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b838110156133d85781810151838201526020016133c0565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b83811015613429578181015183820152602001613411565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b610b61838383614317565b60008281526101fc6020526040902054156134c057600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c906135049084908490615b5c565b60405180910390a15050565b6000805b82518110156136b45760006001600160a01b031683828151811061353457fe5b6020026020010151600001516001600160a01b0316141561359c576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b8281815181106135a857fe5b6020026020010151602001516001600160601b031660001415613612576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b82818151811061361e57fe5b6020026020010151602001516001600160601b0316820191506101fa600085815260200190815260200160002083828151811061365757fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501613514565b5061271081106136f55760405162461bcd60e51b8152600401808060200182810382526025815260200180615f1e6025913960400191505060405180910390fd5b610b618383614559565b60008281526101fb6020526040812090805b835181101561384d5760006001600160a01b031684828151811061373157fe5b6020026020010151600001516001600160a01b031614156137645760405162461bcd60e51b8152600401610b4d90615a4c565b83818151811061377057fe5b6020026020010151602001516001600160601b0316600014156137a55760405162461bcd60e51b8152600401610b4d9061592b565b828482815181106137b257fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b03199092169190911790921691909117905583516138439085908390811061381f57fe5b6020026020010151602001516001600160601b0316836120f190919063ffffffff16565b9150600101613711565b50806127101461386f5760405162461bcd60e51b8152600401610b4d90615aec565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f84846040516138a0929190615b43565b60405180910390a150505050565b600082815261012e6020908152604090912082516138ce92840190614bd5565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6138fa8461214b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561393457818101518382015260200161391c565b50505050905090810190601f1680156139615780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b61397e8484848461458a565b50505050565b600061398f30613ea1565b15905090565b600054610100900460ff16806139ae57506139ae613984565b806139bc575060005460ff16155b6139f75760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613a22576000805460ff1961ff0019909116610100171660011790555b6000613a2c61279f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015613a8c576000805461ff00191690555b50565b565b600054610100900460ff1680613aaa5750613aaa613984565b80613ab8575060005460ff16155b613af35760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613b1e576000805460ff1961ff0019909116610100171660011790555b613b2e6301ffc9a760e01b61469c565b8015613a8c576000805461ff001916905550565b600054610100900460ff1680613b5b5750613b5b613984565b80613b69575060005460ff16155b613ba45760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613b2e576000805460ff1961ff0019909116610100171660011790558015613a8c576000805461ff001916905550565b613a8f604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250614720565b600054610100900460ff1680613c3e5750613c3e613984565b80613c4c575060005460ff16155b613c875760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613cb2576000805460ff1961ff0019909116610100171660011790555b613cbb826147e2565b613ccb636cdb3d1360e11b61469c565b613cdb6303a24d0760e21b61469c565b801561177d576000805461ff00191690555050565b8051613d0490610230906020840190614bd5565b50613a8c63e8a3d48560e01b61469c565b600054610100900460ff1680613d2e5750613d2e613984565b80613d3c575060005460ff16155b613d775760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613da2576000805460ff1961ff0019909116610100171660011790555b613b2e63656cb66560e11b61469c565b8151613dc690610262906020850190614bd5565b508051610b6190610263906020840190614bd5565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b60006127a96147f5565b600033301415613e9c57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506115e99050565b503390565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b038316613f2b5760405162461bcd60e51b8152600401808060200182810382526023815260200180615e906023913960400191505060405180910390fd5b8051825114613f6b5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f956028913960400191505060405180910390fd5b6000613f7561279f565b9050613f95818560008686604051806020016040528060008152506110f0565b60005b83518110156140735761402a838281518110613fb057fe5b6020026020010151604051806060016040528060248152602001615d7a6024913960976000888681518110613fe157fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020546127ae9092919063ffffffff16565b6097600086848151811061403a57fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101613f98565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156140fa5781810151838201526020016140e2565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015614139578181015183820152602001614121565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b0383166141c75760405162461bcd60e51b8152600401808060200182810382526023815260200180615e906023913960400191505060405180910390fd5b60006141d161279f565b9050614201818560006141e387612c90565b6141ec87612c90565b604051806020016040528060008152506110f0565b61424882604051806060016040528060248152602001615d7a6024913960008681526097602090815260408083206001600160a01b038b16845290915290205491906127ae565b60008481526097602090815260408083206001600160a01b03808a1680865291845282852095909555815188815292830187905281519394909390861692600080516020615cc683398151915292908290030190a450505050565b6102fc5490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000614322836147f9565b9050600082516041141561433d5761433a8284614803565b90505b846001600160a01b0316816001600160a01b031614611e9d57614368856001600160a01b0316613ea1565b156144e15760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156143d75781810151838201526020016143bf565b50505050905090810190601f1680156144045780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561442257600080fd5b505afa158015614436573d6000803e3d6000fd5b505050506040513d602081101561444c57600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146144db5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156128025781810151838201526020016127ea565b50611e9d565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b815260048101938452825160248201528251929392839260449092019190808383600083156128025781810151838201526020016127ea565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613504929190615b43565b60008381526101fd60205260408120546145a59084906120f1565b60008581526101fc60205260409020549091508111156145d75760405162461bcd60e51b8152600401610b4d90615a22565b60008481526101fd602052604090208190556001600160a01b03851661460f5760405162461bcd60e51b8152600401610b4d90615aab565b600061461961279f565b905061463a8160008861462b89612c90565b61463489612c90565b886110f0565b60008581526097602090815260408083206001600160a01b038a16845290915290205461466790856120f1565b60008681526097602090815260408083206001600160a01b038b1684529091528120919091556110f090829088888888612cd5565b6001600160e01b031980821614156146fb576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806147395750614739613984565b80614747575060005460ff16155b6147825760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff161580156147ad576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912061016291909155610163558015610b61576000805461ff0019169055505050565b805161177d906099906020840190614bd5565b4690565b6000612f47614883565b6000815160411461485b576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a614879868285856148be565b9695505050505050565b60006127a97f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6148b1614b14565b6148b9614b1b565b614b22565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561491f5760405162461bcd60e51b8152600401808060200182810382526022815260200180615dc76022913960400191505060405180910390fd5b6000601e8560ff1611156149f9576004850360ff16601b148061494857506004850360ff16601c145b6149835760405162461bcd60e51b8152600401808060200182810382526022815260200180615e6e6022913960400191505060405180910390fd5b600161498e87614b84565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156149e8573d6000803e3d6000fd5b505050602060405103519050614ab0565b8460ff16601b1480614a0e57508460ff16601c145b614a495760405162461bcd60e51b8152600401808060200182810382526022815260200180615e6e6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614aa3573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116614b0b576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b6000838383614b2f6147f5565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614c0b5760008555614c51565b82601f10614c2457805160ff1916838001178555614c51565b82800160010185558215614c51579182015b82811115614c51578251825591602001919060010190614c36565b50614c5d929150614c61565b5090565b5b80821115614c5d5760008155600101614c62565b80356106aa81615c54565b600082601f830112614c91578081fd5b81356020614ca6614ca183615b8d565b615b6a565b8281528181019085830183850287018401881015614cc2578586fd5b855b85811015614ce9578135614cd781615c54565b84529284019290840190600101614cc4565b5090979650505050505050565b600082601f830112614d06578081fd5b81356020614d16614ca183615b8d565b82815281810190858301855b85811015614ce957614d39898684358b0101614e60565b84529284019290840190600101614d22565b600082601f830112614d5b578081fd5b81356020614d6b614ca183615b8d565b82815281810190858301604080860288018501891015614d89578687fd5b865b86811015614df85781838b031215614da1578788fd5b81518281018181106001600160401b0382111715614dbb57fe5b83528335614dc881615c54565b8152838701356001600160601b0381168114614de257898afd5b8188015285529385019391810191600101614d8b565b509198975050505050505050565b600082601f830112614e16578081fd5b81356020614e26614ca183615b8d565b8281528181019085830183850287018401881015614e42578586fd5b855b85811015614ce957813584529284019290840190600101614e44565b600082601f830112614e70578081fd5b81356001600160401b03811115614e8357fe5b614e96601f8201601f1916602001615b6a565b818152846020838601011115614eaa578283fd5b816020850160208301379081016020019190915292915050565b600060c08284031215614ed5578081fd5b614edf60c0615b6a565b90508135815260208201356001600160401b0380821115614eff57600080fd5b614f0b85838601614e60565b6020840152604084013560408401526060840135915080821115614f2e57600080fd5b614f3a85838601614d4b565b60608401526080840135915080821115614f5357600080fd5b614f5f85838601614d4b565b608084015260a0840135915080821115614f7857600080fd5b50614f8584828501614cf6565b60a08301525092915050565b600060208284031215614fa2578081fd5b8135611b6581615c54565b60008060408385031215614fbf578081fd5b8235614fca81615c54565b91506020830135614fda81615c54565b809150509250929050565b600080600080600060a08688031215614ffc578081fd5b853561500781615c54565b9450602086013561501781615c54565b935060408601356001600160401b0380821115615032578283fd5b61503e89838a01614e06565b94506060880135915080821115615053578283fd5b61505f89838a01614e06565b93506080880135915080821115615074578283fd5b5061508188828901614e60565b9150509295509295909350565b600080600080600060a086880312156150a5578283fd5b85356150b081615c54565b945060208601356150c081615c54565b9350604086013592506060860135915060808601356001600160401b038111156150e8578182fd5b61508188828901614e60565b600080600060608486031215615108578081fd5b833561511381615c54565b925060208401356001600160401b038082111561512e578283fd5b61513a87838801614e06565b9350604086013591508082111561514f578283fd5b5061515c86828701614e06565b9150509250925092565b60008060408385031215615178578182fd5b823561518381615c54565b915060208301358015158114614fda578182fd5b600080600080600060a086880312156151ae578283fd5b85356151b981615c54565b945060208601356001600160401b038111156151d3578384fd5b6151df88828901614e60565b9450506040860135925060608601359150608086013560ff81168114615203578182fd5b809150509295509295909350565b60008060408385031215615223578182fd5b823561522e81615c54565b946020939093013593505050565b600080600060608486031215615250578081fd5b833561525b81615c54565b95602085013595506040909401359392505050565b600060208284031215615281578081fd5b81356001600160401b03811115615296578182fd5b6152a284828501614c81565b949350505050565b600080604083850312156152bc578182fd5b82356001600160401b03808211156152d2578384fd5b6152de86838701614c81565b935060208501359150808211156152f3578283fd5b5061530085828601614e06565b9150509250929050565b60006020828403121561531b578081fd5b81356001600160e01b031981168114611b65578182fd5b600060208284031215615343578081fd5b81356001600160401b03811115615358578182fd5b6152a284828501614e60565b60008060008060008060c0878903121561537c578384fd5b86356001600160401b0380821115615392578586fd5b61539e8a838b01614e60565b975060208901359150808211156153b3578586fd5b6153bf8a838b01614e60565b965060408901359150808211156153d4578586fd5b6153e08a838b01614e60565b955060608901359150808211156153f5578283fd5b5061540289828a01614e60565b93505061541160808801614c76565b915061541f60a08801614c76565b90509295509295509295565b600080600080600080600060e0888a031215615445578485fd5b87356001600160401b038082111561545b578687fd5b6154678b838c01614e60565b985060208a013591508082111561547c578687fd5b6154888b838c01614e60565b975060408a013591508082111561549d578687fd5b6154a98b838c01614e60565b965060608a01359150808211156154be578283fd5b506154cb8a828b01614e60565b9450506154da60808901614c76565b92506154e860a08901614c76565b91506154f660c08901614c76565b905092959891949750929550565b600080600080600080600060e0888a03121561551e578081fd5b87356001600160401b0380821115615534578283fd5b6155408b838c01614e60565b985060208a0135915080821115615555578283fd5b6155618b838c01614e60565b975060408a0135915080821115615576578283fd5b6155828b838c01614e60565b965060608a0135915080821115615597578283fd5b6155a38b838c01614e60565b955060808a01359150808211156155b8578283fd5b506155c58a828b01614c81565b9350506154e860a08901614c76565b600080600080608085870312156155e9578182fd5b84356001600160401b038111156155fe578283fd5b61560a87828801614ec4565b945050602085013561561b81615c54565b9250604085013561562b81615c54565b9396929550929360600135925050565b60008060006060848603121561564f578081fd5b83356001600160401b03811115615664578182fd5b61567086828701614ec4565b935050602084013561568181615c54565b929592945050506040919091013590565b6000602082840312156156a3578081fd5b5035919050565b6000806000606084860312156156be578081fd5b8335925060208401356156d081615c54565b915060408401356156e081615c54565b809150509250925092565b600080604083850312156156fd578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561575857815180516001600160a01b031688528301516001600160601b0316838801526040909601959082019060010161571f565b509495945050505050565b6000815180845260208085019450808401835b8381101561575857815187529582019590820190600101615776565b60008151808452815b818110156157b75760208185018101518683018201520161579b565b818111156157c85782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038416815260606020820181905260009061581590830185615792565b82810360408401526148798185615792565b6001600160a01b03929092168252602082015260400190565b600060208252611b65602083018461570c565b600060208252611b656020830184615763565b6000604082526158796040830185615763565b8281036020840152614b0b8185615763565b901515815260200190565b600060208252611b656020830184615792565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526152a2604083018461570c565b918252602082015260400190565b6040518181016001600160401b0381118282101715615b8557fe5b604052919050565b60006001600160401b03821115615ba057fe5b5060209081020190565b60e01c90565b600060443d1015615bc0576115e9565b600481823e6308c379a0615bd48251615baa565b14615bde576115e9565b6040513d600319016004823e80513d6001600160401b038160248401118184111715615c0d57505050506115e9565b82840192508251915080821115615c2757505050506115e9565b503d83016020828401011115615c3f575050506115e9565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114613a8c57600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a2646970667358221220f540d26841c40ddd1f27954b47aaa64f7ec5519fb4b4f9b16d43c26372e6e07e64736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101ed5760003560e01c80636c0360eb1161010d578063aa271e1a116100a0578063e985e9c51161006f578063e985e9c51461058a578063f242432a146105aa578063f2fde38b146105ca578063f5298aca146105ea578063ffc4e0a71461060a576101ed565b8063aa271e1a14610515578063cad96cca14610535578063e07f231914610555578063e8a3d48514610575576101ed565b80638da5cb5b116100dc5780638da5cb5b1461049e57806395d89b41146104c0578063983b2d56146104d5578063a22cb465146104f5576101ed565b80636c0360eb14610427578063715018a61461043c57806371e2a65714610451578063891be97414610471576101ed565b80632a55205a116101855780634e1273f4116101545780634e1273f41461039a57806355f804b3146103c757806361e05459146103e75780636b20c45414610407576101ed565b80632a55205a1461030c5780632d0335ab1461033a5780632eb2c2d61461035a5780633092afd51461037a576101ed565b80630e89341c116101c15780630e89341c1461028a5780630eaead67146102aa578063173c43d2146102cc578063220e4d73146102ec576101ed565b8062fdd58e146101f257806301ffc9a71461022857806306fdde03146102555780630c53c51c14610277575b600080fd5b3480156101fe57600080fd5b5061021261020d366004615211565b61062a565b60405161021f9190615b3a565b60405180910390f35b34801561023457600080fd5b5061024861024336600461530a565b61069c565b60405161021f919061588b565b34801561026157600080fd5b5061026a6106af565b60405161021f9190615896565b61026a610285366004615197565b61073e565b34801561029657600080fd5b5061026a6102a5366004615692565b610ab7565b3480156102b657600080fd5b506102ca6102c536600461563b565b610ac2565b005b3480156102d857600080fd5b506102ca6102e7366004615364565b610b66565b3480156102f857600080fd5b506102ca61030736600461542b565b610c16565b34801561031857600080fd5b5061032c6103273660046156eb565b610cd0565b60405161021f929190615827565b34801561034657600080fd5b50610212610355366004614f91565b610dde565b34801561036657600080fd5b506102ca610375366004614fe5565b610dfa565b34801561038657600080fd5b506102ca610395366004614f91565b6110f8565b3480156103a657600080fd5b506103ba6103b53660046152aa565b6111a8565b60405161021f9190615853565b3480156103d357600080fd5b506102ca6103e2366004615332565b611293565b3480156103f357600080fd5b506102ca610402366004615504565b611338565b34801561041357600080fd5b506102ca6104223660046150f4565b6113ce565b34801561043357600080fd5b5061026a611554565b34801561044857600080fd5b506102ca6115ec565b34801561045d57600080fd5b506102ca61046c366004615270565b611698565b34801561047d57600080fd5b5061049161048c366004615692565b611781565b60405161021f9190615840565b3480156104aa57600080fd5b506104b3611811565b60405161021f91906157dd565b3480156104cc57600080fd5b5061026a611820565b3480156104e157600080fd5b506102ca6104f0366004614f91565b61187c565b34801561050157600080fd5b506102ca610510366004615166565b611931565b34801561052157600080fd5b50610248610530366004614f91565b611a20565b34801561054157600080fd5b50610491610550366004615692565b611a3f565b34801561056157600080fd5b506102ca6105703660046156aa565b611aba565b34801561058157600080fd5b5061026a611afd565b34801561059657600080fd5b506102486105a5366004614fad565b611b59565b3480156105b657600080fd5b506102ca6105c536600461508e565b611b6c565b3480156105d657600080fd5b506102ca6105e5366004614f91565b611d25565b3480156105f657600080fd5b506102ca61060536600461523c565b611e28565b34801561061657600080fd5b506102ca6106253660046155d4565b611ea4565b60006001600160a01b0383166106715760405162461bcd60e51b815260040180806020018281038252602b815260200180615ce6602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b60006106a782611f4c565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b820191906000526020600020905b81548152906001019060200180831161071957829003601f168201915b505050505081565b6060600061074b86611feb565b90506000356001600160e01b031990811690821614156107b2576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102fb6020908152908490205483528201529081018790526107f08882888888612007565b61082b5760405162461bcd60e51b8152600401808060200182810382526021815260200180615efd6021913960400191505060405180910390fd5b6001600160a01b03881660009081526102fb60205260409020546108509060016120f1565b6102fb60008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106108bb5780518252601f19909201916020918201910161089c565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106109315780518252601f199092019160209182019101610912565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610993576040519150601f19603f3d011682016040523d82523d6000602084013e610998565b606091505b5091509150816109ef576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a6e578181015183820152602001610a56565b50505050905090810190601f168015610a9b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b60606106a78261214b565b6102965460ff1615610b56578260600151600081518110610adf57fe5b6020026020010151600001516001600160a01b0316610afc611811565b6001600160a01b03161480610b315750610b318360600151600081518110610b2057fe5b602002602001015160000151611a20565b610b565760405162461bcd60e51b8152600401610b4d906158d4565b60405180910390fd5b610b618383836122e1565b505050565b610b748686868686866125dd565b610bc1604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610bf561279f565b8787604051610c06939291906157f1565b60405180910390a1505050505050565b610c248787878787876125dd565b610c71604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff19169055610c8581611d25565b7fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610cae61279f565b8888604051610cbf939291906157f1565b60405180910390a150505050505050565b60008281526101fa60205260408120548190610cf157506000905080610dd7565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d6d57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610d1e565b50505050905080600081518110610d8057fe5b60209081029190910101515192506000805b8251811015610dcb57828181518110610da757fe5b6020026020010151602001516001600160601b031682019150806001019050610d92565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102fb602052604090205490565b8151835114610e3a5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f956028913960400191505060405180910390fd5b6001600160a01b038416610e7f5760405162461bcd60e51b8152600401808060200182810382526025815260200180615de96025913960400191505060405180910390fd5b610e8761279f565b6001600160a01b0316856001600160a01b03161480610ead5750610ead856105a561279f565b610ee85760405162461bcd60e51b8152600401808060200182810382526032815260200180615e0e6032913960400191505060405180910390fd5b6000610ef261279f565b9050610f028187878787876110f0565b60005b8451811015611008576000858281518110610f1c57fe5b602002602001015190506000858381518110610f3457fe5b60200260200101519050610fa1816040518060600160405280602a8152602001615eb3602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546127ae9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a1681522054610fd890826120f1565b60009283526097602090815260408085206001600160a01b038c1686529091529092209190915550600101610f05565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561108e578181015183820152602001611076565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156110cd5781810151838201526020016110b5565b5050505090500194505050505060405180910390a46110f0818787878787612845565b505050505050565b61110061279f565b6001600160a01b0316611111611811565b6001600160a01b03161461115a576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b606081518351146111ea5760405162461bcd60e51b8152600401808060200182810382526029815260200180615f6c6029913960400191505060405180910390fd5b600083516001600160401b038111801561120357600080fd5b5060405190808252806020026020018201604052801561122d578160200160208202803683370190505b50905060005b845181101561128b5761126c85828151811061124b57fe5b602002602001015185838151811061125f57fe5b602002602001015161062a565b82828151811061127857fe5b6020908102919091010152600101611233565b509392505050565b61129b61279f565b6001600160a01b03166112ac611811565b6001600160a01b0316146112f5576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6112fe81612abb565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d68160405161132d9190615896565b60405180910390a150565b6113468787878786866125dd565b611397604051806040016040528060168152602001754552433131353552617269626c65557365724d65746160501b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc610cae61279f565b80518251146113ef5760405162461bcd60e51b8152600401610b4d90615a83565b600082516001600160401b038111801561140857600080fd5b50604051908082528060200260200182016040528015611432578160200160208202803683370190505b509050600083516001600160401b038111801561144e57600080fd5b50604051908082528060200260200182016040528015611478578160200160208202803683370190505b50905060005b84518110156114ed576114b785828151811061149657fe5b60200260200101518583815181106114aa57fe5b6020026020010151612acf565b8483815181106114c357fe5b602002602001018484815181106114d657fe5b60209081029190910101919091525260010161147e565b506114f9858584612b44565b846001600160a01b031661150b61279f565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051611545929190615866565b60405180910390a35050505050565b61012f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b505050505090505b90565b6115f461279f565b6001600160a01b0316611605611811565b6001600160a01b03161461164e576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6116a061279f565b6001600160a01b03166116b1611811565b6001600160a01b0316146116fa576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b60005b815181101561177d57600082828151811061171457fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016116fd565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561180657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016117b7565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b61188461279f565b6001600160a01b0316611895611811565b6001600160a01b0316146118de576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b031661194361279f565b6001600160a01b031614156119895760405162461bcd60e51b8152600401808060200182810382526029815260200180615f436029913960400191505060405180910390fd5b806098600061199661279f565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556119da61279f565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa6020908152604080832080548251818502810185019093528083526060949293919290918401821561180657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016117b7565b816001600160a01b0316611acc61279f565b6001600160a01b031614611af25760405162461bcd60e51b8152600401610b4d9061598b565b610b61838383612bb8565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b6000611b658383612c64565b9392505050565b6001600160a01b038416611bb15760405162461bcd60e51b8152600401808060200182810382526025815260200180615de96025913960400191505060405180910390fd5b611bb961279f565b6001600160a01b0316856001600160a01b03161480611bdf5750611bdf856105a561279f565b611c1a5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b6000611c2461279f565b9050611c44818787611c3588612c90565b611c3e88612c90565b876110f0565b611c8b836040518060600160405280602a8152602001615eb3602a913960008781526097602090815260408083206001600160a01b038d16845290915290205491906127ae565b60008581526097602090815260408083206001600160a01b038b81168552925280832093909355871681522054611cc290846120f1565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a841693861692600080516020615cc683398151915292908290030190a46110f0818787878787612cd5565b611d2d61279f565b6001600160a01b0316611d3e611811565b6001600160a01b031614611d87576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b038116611dcc5760405162461bcd60e51b8152600401808060200182810382526026815260200180615d546026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600080611e358484612acf565b90925090508115611e4b57611e4b858584612e46565b8015611e9d57846001600160a01b0316611e6361279f565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051611545929190615b5c565b5050505050565b6000611eb484866000015161062a565b9050818115611eee578280831015611ec95750815b611ee9868689600001518460405180602001604052806000815250611b6c565b830390505b80156110f0578560600151600081518110611f0557fe5b6020026020010151600001516001600160a01b0316856001600160a01b031614611f415760405162461bcd60e51b8152600401610b4d906158a9565b6110f0868583610ac2565b60006001600160e01b03198216636db15a0f60e01b1480611f7d57506001600160e01b0319821663656cb66560e11b145b80611f9857506001600160e01b0319821663152a902d60e11b145b80611fb357506001600160e01b031982166301ffc9a760e01b145b80611fce57506001600160e01b03198216636cdb3d1360e11b145b806106a75750506001600160e01b0319166303a24d0760e21b1490565b6000815160001415611fff575060006106aa565b506020015190565b600080600161201d61201888612eba565b612f3d565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612074573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120d0576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611b65576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081815261012e6020908152604080832080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352606094938301828280156121e05780601f106121b5576101008083540402835291602001916121e0565b820191906000526020600020905b8154815290600101906020018083116121c357829003601f168201915b5050505050905060006121f1611554565b9050805160001415612205575090506106aa565b81511561221f576122168183612f89565b925050506106aa565b806122298561316e565b6040516020018083805190602001908083835b6020831061225b5780518252601f19909201916020918201910161223c565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106122a35780518252601f199092019160209182019101612284565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c60006122f061279f565b9050806001600160a01b0316826001600160a01b0316148061231757506123178282611b59565b6123335760405162461bcd60e51b8152600401610b4d906159da565b600083116123535760405162461bcd60e51b8152600401610b4d906159b0565b845160009081526101fc60205260409020546124bc57846060015160008151811061237a57fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146123b65760405162461bcd60e51b8152600401610b4d90615960565b60008560400151116123da5760405162461bcd60e51b8152600401610b4d90615901565b8460a0015151856060015151146123f057600080fd5b60006123fb86613248565b905060005b8660600151518110156124715760008760600151828151811061241f57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b0316146124685761246881848a60a00151858151811061245b57fe5b602002602001015161349b565b50600101612400565b50612484866000015187604001516134a6565b61249686600001518760800151613510565b6124a8866000015187606001516136ff565b6124ba866000015187602001516138ae565b505b6124db8486600001518560405180602001604052806000815250613972565b836001600160a01b0316826001600160a01b03161461258c57816001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615cc6833981519152886000015187604051612536929190615b5c565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b0316600080516020615cc683398151915288600001518760405161257f929190615b5c565b60405180910390a4611e9d565b836001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615cc68339815191528860000151876040516125ce929190615b5c565b60405180910390a45050505050565b600054610100900460ff16806125f657506125f6613984565b80612604575060005460ff16155b61263f5760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff1615801561266a576000805460ff1961ff0019909116610100171660011790555b612672613995565b61267a613a8f565b612682613a91565b61268a613b42565b612692613be2565b6126aa60405180602001604052806000815250613c25565b6126b384613cf0565b6126bb613a8f565b6126c3613d15565b6126cd8787613db2565b6126d5613a8f565b6126de85612abb565b6126e9836001613ddb565b6126f4826001613ddb565b8015612706576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030612749613e3b565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102fc819055505050565b60006127a9613e45565b905090565b6000818484111561283d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128025781810151838201526020016127ea565b50505050905090810190601f16801561282f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b612857846001600160a01b0316613ea1565b156110f057836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156128e55781810151838201526020016128cd565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561292457818101518382015260200161290c565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612960578181015183820152602001612948565b50505050905090810190601f16801561298d5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1580156129b257600080fd5b505af19250505080156129d757506040513d60208110156129d257600080fd5b505160015b612a6c576129e3615bb0565b806129ee5750612a35565b60405162461bcd60e51b81526020600482018181528351602484015283518493919283926044019190850190808383600083156128025781810151838201526020016127ea565b60405162461bcd60e51b8152600401808060200182810382526034815260200180615c6a6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146127065760405162461bcd60e51b8152600401808060200182810382526028815260200180615c9e6028913960400191505060405180910390fd5b805161177d9061012f906020840190614bd5565b806000606084901c612adf61279f565b6001600160a01b0316816001600160a01b03161415612b3c578391506000612b0686613ea7565b90508015612b2b576000612b1987613eba565b8203905080861115612b29578093505b505b612b358684613ecd565b8285039350505b509250929050565b612b4c61279f565b6001600160a01b0316836001600160a01b03161480612b725750612b72836105a561279f565b612bad5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b610b61838383613ee6565b60008381526101fa6020526040812054905b81811015611e9d5760008581526101fa6020526040902080546001600160a01b038616919083908110612bf957fe5b6000918252602090912001546001600160a01b03161415612c5c5760008581526101fa60205260409020805484919083908110612c3257fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612bca565b6001600160a01b038116600090815260c9602052604081205460ff1680611b655750611b658383614154565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612cc457fe5b602090810291909101015292915050565b612ce7846001600160a01b0316613ea1565b156110f057836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612d76578181015183820152602001612d5e565b50505050905090810190601f168015612da35780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612dc657600080fd5b505af1925050508015612deb57506040513d6020811015612de657600080fd5b505160015b612df7576129e3615bb0565b6001600160e01b0319811663f23a6e6160e01b146127065760405162461bcd60e51b8152600401808060200182810382526028815260200180615c9e6028913960400191505060405180910390fd5b612e4e61279f565b6001600160a01b0316836001600160a01b03161480612e745750612e74836105a561279f565b612eaf5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b610b61838383614182565b6000604051806080016040528060438152602001615d1160439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612f476142a3565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b805182516060918491849110156130545784846040516020018083805190602001908083835b60208310612fce5780518252601f199092019160209182019101612faf565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106130165780518252601f199092019160209182019101612ff7565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610696565b60005b82518110156131645782818151811061306c57fe5b602001015160f81c60f81b6001600160f81b03191682828151811061308d57fe5b01602001516001600160f81b0319161461315c5785856040516020018083805190602001908083835b602083106130d55780518252601f1990920191602091820191016130b6565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061311d5780518252601f1990920191602091820191016130fe565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350505050610696565b600101613057565b5092949350505050565b60608161319357506040805180820190915260018152600360fc1b60208201526106aa565b8160005b81156131ab57600101600a82049150613197565b6000816001600160401b03811180156131c357600080fd5b506040519080825280601f01601f1916602001820160405280156131ee576020820181803683370190505b50859350905060001982015b831561323f57600a840660300160f81b8282806001900393508151811061321d57fe5b60200101906001600160f81b031916908160001a905350600a840493506131fa565b50949350505050565b6000808260800151516001600160401b038111801561326657600080fd5b50604051908082528060200260200182016040528015613290578160200160208202803683370190505b50905060005b8360800151518110156132e2576132c3846080015182815181106132b657fe5b60200260200101516142aa565b8282815181106132cf57fe5b6020908102919091010152600101613296565b5060008360600151516001600160401b038111801561330057600080fd5b5060405190808252806020026020018201604052801561332a578160200160208202803683370190505b50905060005b84606001515181101561336f57613350856060015182815181106132b657fe5b82828151811061335c57fe5b6020908102919091010152600101613330565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b838110156133d85781810151838201526020016133c0565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b83811015613429578181015183820152602001613411565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b610b61838383614317565b60008281526101fc6020526040902054156134c057600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c906135049084908490615b5c565b60405180910390a15050565b6000805b82518110156136b45760006001600160a01b031683828151811061353457fe5b6020026020010151600001516001600160a01b0316141561359c576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b8281815181106135a857fe5b6020026020010151602001516001600160601b031660001415613612576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b82818151811061361e57fe5b6020026020010151602001516001600160601b0316820191506101fa600085815260200190815260200160002083828151811061365757fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501613514565b5061271081106136f55760405162461bcd60e51b8152600401808060200182810382526025815260200180615f1e6025913960400191505060405180910390fd5b610b618383614559565b60008281526101fb6020526040812090805b835181101561384d5760006001600160a01b031684828151811061373157fe5b6020026020010151600001516001600160a01b031614156137645760405162461bcd60e51b8152600401610b4d90615a4c565b83818151811061377057fe5b6020026020010151602001516001600160601b0316600014156137a55760405162461bcd60e51b8152600401610b4d9061592b565b828482815181106137b257fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b03199092169190911790921691909117905583516138439085908390811061381f57fe5b6020026020010151602001516001600160601b0316836120f190919063ffffffff16565b9150600101613711565b50806127101461386f5760405162461bcd60e51b8152600401610b4d90615aec565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f84846040516138a0929190615b43565b60405180910390a150505050565b600082815261012e6020908152604090912082516138ce92840190614bd5565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6138fa8461214b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561393457818101518382015260200161391c565b50505050905090810190601f1680156139615780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b61397e8484848461458a565b50505050565b600061398f30613ea1565b15905090565b600054610100900460ff16806139ae57506139ae613984565b806139bc575060005460ff16155b6139f75760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613a22576000805460ff1961ff0019909116610100171660011790555b6000613a2c61279f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015613a8c576000805461ff00191690555b50565b565b600054610100900460ff1680613aaa5750613aaa613984565b80613ab8575060005460ff16155b613af35760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613b1e576000805460ff1961ff0019909116610100171660011790555b613b2e6301ffc9a760e01b61469c565b8015613a8c576000805461ff001916905550565b600054610100900460ff1680613b5b5750613b5b613984565b80613b69575060005460ff16155b613ba45760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613b2e576000805460ff1961ff0019909116610100171660011790558015613a8c576000805461ff001916905550565b613a8f604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250614720565b600054610100900460ff1680613c3e5750613c3e613984565b80613c4c575060005460ff16155b613c875760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613cb2576000805460ff1961ff0019909116610100171660011790555b613cbb826147e2565b613ccb636cdb3d1360e11b61469c565b613cdb6303a24d0760e21b61469c565b801561177d576000805461ff00191690555050565b8051613d0490610230906020840190614bd5565b50613a8c63e8a3d48560e01b61469c565b600054610100900460ff1680613d2e5750613d2e613984565b80613d3c575060005460ff16155b613d775760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613da2576000805460ff1961ff0019909116610100171660011790555b613b2e63656cb66560e11b61469c565b8151613dc690610262906020850190614bd5565b508051610b6190610263906020840190614bd5565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b60006127a96147f5565b600033301415613e9c57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506115e99050565b503390565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b038316613f2b5760405162461bcd60e51b8152600401808060200182810382526023815260200180615e906023913960400191505060405180910390fd5b8051825114613f6b5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f956028913960400191505060405180910390fd5b6000613f7561279f565b9050613f95818560008686604051806020016040528060008152506110f0565b60005b83518110156140735761402a838281518110613fb057fe5b6020026020010151604051806060016040528060248152602001615d7a6024913960976000888681518110613fe157fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020546127ae9092919063ffffffff16565b6097600086848151811061403a57fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101613f98565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156140fa5781810151838201526020016140e2565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015614139578181015183820152602001614121565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b0383166141c75760405162461bcd60e51b8152600401808060200182810382526023815260200180615e906023913960400191505060405180910390fd5b60006141d161279f565b9050614201818560006141e387612c90565b6141ec87612c90565b604051806020016040528060008152506110f0565b61424882604051806060016040528060248152602001615d7a6024913960008681526097602090815260408083206001600160a01b038b16845290915290205491906127ae565b60008481526097602090815260408083206001600160a01b03808a1680865291845282852095909555815188815292830187905281519394909390861692600080516020615cc683398151915292908290030190a450505050565b6102fc5490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000614322836147f9565b9050600082516041141561433d5761433a8284614803565b90505b846001600160a01b0316816001600160a01b031614611e9d57614368856001600160a01b0316613ea1565b156144e15760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156143d75781810151838201526020016143bf565b50505050905090810190601f1680156144045780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561442257600080fd5b505afa158015614436573d6000803e3d6000fd5b505050506040513d602081101561444c57600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146144db5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156128025781810151838201526020016127ea565b50611e9d565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b815260048101938452825160248201528251929392839260449092019190808383600083156128025781810151838201526020016127ea565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613504929190615b43565b60008381526101fd60205260408120546145a59084906120f1565b60008581526101fc60205260409020549091508111156145d75760405162461bcd60e51b8152600401610b4d90615a22565b60008481526101fd602052604090208190556001600160a01b03851661460f5760405162461bcd60e51b8152600401610b4d90615aab565b600061461961279f565b905061463a8160008861462b89612c90565b61463489612c90565b886110f0565b60008581526097602090815260408083206001600160a01b038a16845290915290205461466790856120f1565b60008681526097602090815260408083206001600160a01b038b1684529091528120919091556110f090829088888888612cd5565b6001600160e01b031980821614156146fb576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806147395750614739613984565b80614747575060005460ff16155b6147825760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff161580156147ad576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912061016291909155610163558015610b61576000805461ff0019169055505050565b805161177d906099906020840190614bd5565b4690565b6000612f47614883565b6000815160411461485b576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a614879868285856148be565b9695505050505050565b60006127a97f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6148b1614b14565b6148b9614b1b565b614b22565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561491f5760405162461bcd60e51b8152600401808060200182810382526022815260200180615dc76022913960400191505060405180910390fd5b6000601e8560ff1611156149f9576004850360ff16601b148061494857506004850360ff16601c145b6149835760405162461bcd60e51b8152600401808060200182810382526022815260200180615e6e6022913960400191505060405180910390fd5b600161498e87614b84565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156149e8573d6000803e3d6000fd5b505050602060405103519050614ab0565b8460ff16601b1480614a0e57508460ff16601c145b614a495760405162461bcd60e51b8152600401808060200182810382526022815260200180615e6e6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614aa3573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116614b0b576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b6000838383614b2f6147f5565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614c0b5760008555614c51565b82601f10614c2457805160ff1916838001178555614c51565b82800160010185558215614c51579182015b82811115614c51578251825591602001919060010190614c36565b50614c5d929150614c61565b5090565b5b80821115614c5d5760008155600101614c62565b80356106aa81615c54565b600082601f830112614c91578081fd5b81356020614ca6614ca183615b8d565b615b6a565b8281528181019085830183850287018401881015614cc2578586fd5b855b85811015614ce9578135614cd781615c54565b84529284019290840190600101614cc4565b5090979650505050505050565b600082601f830112614d06578081fd5b81356020614d16614ca183615b8d565b82815281810190858301855b85811015614ce957614d39898684358b0101614e60565b84529284019290840190600101614d22565b600082601f830112614d5b578081fd5b81356020614d6b614ca183615b8d565b82815281810190858301604080860288018501891015614d89578687fd5b865b86811015614df85781838b031215614da1578788fd5b81518281018181106001600160401b0382111715614dbb57fe5b83528335614dc881615c54565b8152838701356001600160601b0381168114614de257898afd5b8188015285529385019391810191600101614d8b565b509198975050505050505050565b600082601f830112614e16578081fd5b81356020614e26614ca183615b8d565b8281528181019085830183850287018401881015614e42578586fd5b855b85811015614ce957813584529284019290840190600101614e44565b600082601f830112614e70578081fd5b81356001600160401b03811115614e8357fe5b614e96601f8201601f1916602001615b6a565b818152846020838601011115614eaa578283fd5b816020850160208301379081016020019190915292915050565b600060c08284031215614ed5578081fd5b614edf60c0615b6a565b90508135815260208201356001600160401b0380821115614eff57600080fd5b614f0b85838601614e60565b6020840152604084013560408401526060840135915080821115614f2e57600080fd5b614f3a85838601614d4b565b60608401526080840135915080821115614f5357600080fd5b614f5f85838601614d4b565b608084015260a0840135915080821115614f7857600080fd5b50614f8584828501614cf6565b60a08301525092915050565b600060208284031215614fa2578081fd5b8135611b6581615c54565b60008060408385031215614fbf578081fd5b8235614fca81615c54565b91506020830135614fda81615c54565b809150509250929050565b600080600080600060a08688031215614ffc578081fd5b853561500781615c54565b9450602086013561501781615c54565b935060408601356001600160401b0380821115615032578283fd5b61503e89838a01614e06565b94506060880135915080821115615053578283fd5b61505f89838a01614e06565b93506080880135915080821115615074578283fd5b5061508188828901614e60565b9150509295509295909350565b600080600080600060a086880312156150a5578283fd5b85356150b081615c54565b945060208601356150c081615c54565b9350604086013592506060860135915060808601356001600160401b038111156150e8578182fd5b61508188828901614e60565b600080600060608486031215615108578081fd5b833561511381615c54565b925060208401356001600160401b038082111561512e578283fd5b61513a87838801614e06565b9350604086013591508082111561514f578283fd5b5061515c86828701614e06565b9150509250925092565b60008060408385031215615178578182fd5b823561518381615c54565b915060208301358015158114614fda578182fd5b600080600080600060a086880312156151ae578283fd5b85356151b981615c54565b945060208601356001600160401b038111156151d3578384fd5b6151df88828901614e60565b9450506040860135925060608601359150608086013560ff81168114615203578182fd5b809150509295509295909350565b60008060408385031215615223578182fd5b823561522e81615c54565b946020939093013593505050565b600080600060608486031215615250578081fd5b833561525b81615c54565b95602085013595506040909401359392505050565b600060208284031215615281578081fd5b81356001600160401b03811115615296578182fd5b6152a284828501614c81565b949350505050565b600080604083850312156152bc578182fd5b82356001600160401b03808211156152d2578384fd5b6152de86838701614c81565b935060208501359150808211156152f3578283fd5b5061530085828601614e06565b9150509250929050565b60006020828403121561531b578081fd5b81356001600160e01b031981168114611b65578182fd5b600060208284031215615343578081fd5b81356001600160401b03811115615358578182fd5b6152a284828501614e60565b60008060008060008060c0878903121561537c578384fd5b86356001600160401b0380821115615392578586fd5b61539e8a838b01614e60565b975060208901359150808211156153b3578586fd5b6153bf8a838b01614e60565b965060408901359150808211156153d4578586fd5b6153e08a838b01614e60565b955060608901359150808211156153f5578283fd5b5061540289828a01614e60565b93505061541160808801614c76565b915061541f60a08801614c76565b90509295509295509295565b600080600080600080600060e0888a031215615445578485fd5b87356001600160401b038082111561545b578687fd5b6154678b838c01614e60565b985060208a013591508082111561547c578687fd5b6154888b838c01614e60565b975060408a013591508082111561549d578687fd5b6154a98b838c01614e60565b965060608a01359150808211156154be578283fd5b506154cb8a828b01614e60565b9450506154da60808901614c76565b92506154e860a08901614c76565b91506154f660c08901614c76565b905092959891949750929550565b600080600080600080600060e0888a03121561551e578081fd5b87356001600160401b0380821115615534578283fd5b6155408b838c01614e60565b985060208a0135915080821115615555578283fd5b6155618b838c01614e60565b975060408a0135915080821115615576578283fd5b6155828b838c01614e60565b965060608a0135915080821115615597578283fd5b6155a38b838c01614e60565b955060808a01359150808211156155b8578283fd5b506155c58a828b01614c81565b9350506154e860a08901614c76565b600080600080608085870312156155e9578182fd5b84356001600160401b038111156155fe578283fd5b61560a87828801614ec4565b945050602085013561561b81615c54565b9250604085013561562b81615c54565b9396929550929360600135925050565b60008060006060848603121561564f578081fd5b83356001600160401b03811115615664578182fd5b61567086828701614ec4565b935050602084013561568181615c54565b929592945050506040919091013590565b6000602082840312156156a3578081fd5b5035919050565b6000806000606084860312156156be578081fd5b8335925060208401356156d081615c54565b915060408401356156e081615c54565b809150509250925092565b600080604083850312156156fd578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561575857815180516001600160a01b031688528301516001600160601b0316838801526040909601959082019060010161571f565b509495945050505050565b6000815180845260208085019450808401835b8381101561575857815187529582019590820190600101615776565b60008151808452815b818110156157b75760208185018101518683018201520161579b565b818111156157c85782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038416815260606020820181905260009061581590830185615792565b82810360408401526148798185615792565b6001600160a01b03929092168252602082015260400190565b600060208252611b65602083018461570c565b600060208252611b656020830184615763565b6000604082526158796040830185615763565b8281036020840152614b0b8185615763565b901515815260200190565b600060208252611b656020830184615792565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526152a2604083018461570c565b918252602082015260400190565b6040518181016001600160401b0381118282101715615b8557fe5b604052919050565b60006001600160401b03821115615ba057fe5b5060209081020190565b60e01c90565b600060443d1015615bc0576115e9565b600481823e6308c379a0615bd48251615baa565b14615bde576115e9565b6040513d600319016004823e80513d6001600160401b038160248401118184111715615c0d57505050506115e9565b82840192508251915080821115615c2757505050506115e9565b503d83016020828401011115615c3f575050506115e9565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114613a8c57600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a2646970667358221220f540d26841c40ddd1f27954b47aaa64f7ec5519fb4b4f9b16d43c26372e6e07e64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "addMinter(address)": { + "details": "Add `minter` to the list of allowed minters." + }, + "addMinters(address[])": { + "details": "Add `minters` to the list of allowed minters." + }, + "balanceOf(address,uint256)": { + "details": "See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address." + }, + "balanceOfBatch(address[],uint256[])": { + "details": "See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length." + }, + "baseURI()": { + "details": "Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID." + }, + "isMinter(address)": { + "details": "Returns `true` if `account` has been granted to minters." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "removeMinter(address)": { + "details": "Revoke `_minter` from the list of allowed minters." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": { + "details": "See {IERC1155-safeBatchTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,uint256,bytes)": { + "details": "See {IERC1155-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC1155-setApprovalForAll}." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 307, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 364, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 25039, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_balances", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))" + }, + { + "astId": 25045, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_operatorApprovals", + "offset": 0, + "slot": "152", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 25047, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_uri", + "offset": 0, + "slot": "153", + "type": "t_string_storage" + }, + { + "astId": 26040, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "154", + "type": "t_array(t_uint256)47_storage" + }, + { + "astId": 24041, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "defaultApprovals", + "offset": 0, + "slot": "201", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 24091, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 24031, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 23834, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_tokenURIs", + "offset": 0, + "slot": "302", + "type": "t_mapping(t_uint256,t_string_storage)" + }, + { + "astId": 23836, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_baseURI", + "offset": 0, + "slot": "303", + "type": "t_string_storage" + }, + { + "astId": 23951, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 138, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "354", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "355", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "356", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26448, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "406", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26076, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "456", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 21496, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "royalties", + "offset": 0, + "slot": "506", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" + }, + { + "astId": 24128, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "creators", + "offset": 0, + "slot": "507", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" + }, + { + "astId": 24132, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "supply", + "offset": 0, + "slot": "508", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 24136, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "minted", + "offset": 0, + "slot": "509", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 24749, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "510", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22321, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "contractURI", + "offset": 0, + "slot": "560", + "type": "t_string_storage" + }, + { + "astId": 22353, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "561", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 23458, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "name", + "offset": 0, + "slot": "610", + "type": "t_string_storage" + }, + { + "astId": 23460, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "symbol", + "offset": 0, + "slot": "611", + "type": "t_string_storage" + }, + { + "astId": 23819, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "612", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22359, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "isPrivate", + "offset": 0, + "slot": "662", + "type": "t_bool" + }, + { + "astId": 22363, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "663", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 22488, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_minters", + "offset": 0, + "slot": "712", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 22605, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "713", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 19515, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "nonces", + "offset": 0, + "slot": "763", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 19517, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "domainSeparator", + "offset": 0, + "slot": "764", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)19269_storage)dyn_storage": { + "base": "t_struct(Part)19269_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)47_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct LibPart.Part[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(Part)19269_storage)dyn_storage" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_uint256,t_string_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => string)", + "numberOfBytes": "32", + "value": "t_string_storage" + }, + "t_mapping(t_uint256,t_uint256)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Part)19269_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 19266, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 19268, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Proxy.json new file mode 100644 index 000000000..46cbade8a --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Proxy.json @@ -0,0 +1,301 @@ +{ + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1124696", + "logsBloom": "0x00000400000000000000000000000020400000000400800000800000000000000000000000000000000000000000000000000000000040000100000000000000000000000000008000000000000002000001000000000800004000000000000000004000020000000000001080000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000100004000000000000000000000000000000000020000200000000010001000000000080000400000000000000000020000001000000000010000000000000800000000000000000001000000001000000", + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087", + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000a36e6ee8c5eebfb1738fb78ce3d09562869f58a4" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + }, + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + }, + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + }, + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + }, + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + }, + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" + ], + "data": "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 5, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + }, + { + "transactionIndex": 1, + "blockNumber": 4426323, + "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + } + ], + "blockNumber": 4426323, + "cumulativeGasUsed": "1168571", + "status": 1, + "byzantium": true + }, + "args": [ + "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC20TransferProxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC20TransferProxy.json new file mode 100644 index 000000000..fc48d1ea8 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC20TransferProxy.json @@ -0,0 +1,281 @@ +{ + "address": "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__ERC20TransferProxy_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ERC20TransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "erc20safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x945c3abc76d4886aa33bd1c173e22779e3f320347ba416e5fb6efd1d832f7d4f", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "697645", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x45aef88c8151baf3dd83e5923c1afe56d504fff0fd79cfba30bcbf9b6218b195", + "transactionHash": "0x945c3abc76d4886aa33bd1c173e22779e3f320347ba416e5fb6efd1d832f7d4f", + "logs": [], + "blockNumber": 4426268, + "cumulativeGasUsed": "741508", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__ERC20TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC20TransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"erc20safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":\"ERC20TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __ERC20TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x2fce5fa6025c24a87072eed4cec6ff8e9172ec7b72ca211286904847adf4a324\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610b0f806100206000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80639870d7fe116100665780639870d7fe1461011d5780639d5c7b6b14610143578063ac8a584a14610169578063e814f46d1461018f578063f2fde38b146101b55761009e565b80632ff26a0a146100a3578063715018a6146100ad57806375978127146100b5578063776062c3146100bd5780638da5cb5b146100f9575b600080fd5b6100ab6101db565b005b6100ab61028d565b6100ab610339565b6100ab600480360360808110156100d357600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356103ce565b61010161051d565b604080516001600160a01b039092168252519081900360200190f35b6100ab6004803603602081101561013357600080fd5b50356001600160a01b031661052c565b6100ab6004803603602081101561015957600080fd5b50356001600160a01b03166105b2565b6100ab6004803603602081101561017f57600080fd5b50356001600160a01b0316610666565b6100ab600480360360208110156101a557600080fd5b50356001600160a01b03166106e9565b6100ab600480360360208110156101cb57600080fd5b50356001600160a01b0316610786565b600054610100900460ff16806101f457506101f4610889565b80610202575060005460ff16155b61023d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610268576000805460ff1961ff0019909116610100171660011790555b61027061089a565b61027861093a565b801561028a576000805461ff00191690555b50565b610295610a33565b6001600160a01b03166102a661051d565b6001600160a01b0316146102ef576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103525750610352610889565b80610360575060005460ff16155b61039b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156103c6576000805460ff1961ff0019909116610100171660011790555b6102786101db565b606560006103da610a33565b6001600160a01b0316815260208101919091526040016000205460ff166104325760405162461bcd60e51b8152600401808060200182810382526028815260200180610ab26028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561049a57600080fd5b505af11580156104ae573d6000803e3d6000fd5b505050506040513d60208110156104c457600080fd5b5051610517576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b610534610a33565b6001600160a01b031661054561051d565b6001600160a01b03161461058e576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806105cb57506105cb610889565b806105d9575060005460ff16155b6106145760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff1615801561063f576000805460ff1961ff0019909116610100171660011790555b6106476101db565b61065082610786565b8015610662576000805461ff00191690555b5050565b61066e610a33565b6001600160a01b031661067f61051d565b6001600160a01b0316146106c8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806107025750610702610889565b80610710575060005460ff16155b61074b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610776576000805460ff1961ff0019909116610100171660011790555b61077e61089a565b61064761093a565b61078e610a33565b6001600160a01b031661079f61051d565b6001600160a01b0316146107e8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03811661082d5760405162461bcd60e51b8152600401808060200182810382526026815260200180610a3e6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061089430610a37565b15905090565b600054610100900460ff16806108b357506108b3610889565b806108c1575060005460ff16155b6108fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610278576000805460ff1961ff001990911661010017166001179055801561028a576000805461ff001916905550565b600054610100900460ff16806109535750610953610889565b80610961575060005460ff16155b61099c5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156109c7576000805460ff1961ff0019909116610100171660011790555b60006109d1610a33565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561028a576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220597fa1b0869f6e9a9c201e77b523de7b663d5ce8e581f4023871dace183130a564736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80639870d7fe116100665780639870d7fe1461011d5780639d5c7b6b14610143578063ac8a584a14610169578063e814f46d1461018f578063f2fde38b146101b55761009e565b80632ff26a0a146100a3578063715018a6146100ad57806375978127146100b5578063776062c3146100bd5780638da5cb5b146100f9575b600080fd5b6100ab6101db565b005b6100ab61028d565b6100ab610339565b6100ab600480360360808110156100d357600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356103ce565b61010161051d565b604080516001600160a01b039092168252519081900360200190f35b6100ab6004803603602081101561013357600080fd5b50356001600160a01b031661052c565b6100ab6004803603602081101561015957600080fd5b50356001600160a01b03166105b2565b6100ab6004803603602081101561017f57600080fd5b50356001600160a01b0316610666565b6100ab600480360360208110156101a557600080fd5b50356001600160a01b03166106e9565b6100ab600480360360208110156101cb57600080fd5b50356001600160a01b0316610786565b600054610100900460ff16806101f457506101f4610889565b80610202575060005460ff16155b61023d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610268576000805460ff1961ff0019909116610100171660011790555b61027061089a565b61027861093a565b801561028a576000805461ff00191690555b50565b610295610a33565b6001600160a01b03166102a661051d565b6001600160a01b0316146102ef576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103525750610352610889565b80610360575060005460ff16155b61039b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156103c6576000805460ff1961ff0019909116610100171660011790555b6102786101db565b606560006103da610a33565b6001600160a01b0316815260208101919091526040016000205460ff166104325760405162461bcd60e51b8152600401808060200182810382526028815260200180610ab26028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561049a57600080fd5b505af11580156104ae573d6000803e3d6000fd5b505050506040513d60208110156104c457600080fd5b5051610517576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b610534610a33565b6001600160a01b031661054561051d565b6001600160a01b03161461058e576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806105cb57506105cb610889565b806105d9575060005460ff16155b6106145760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff1615801561063f576000805460ff1961ff0019909116610100171660011790555b6106476101db565b61065082610786565b8015610662576000805461ff00191690555b5050565b61066e610a33565b6001600160a01b031661067f61051d565b6001600160a01b0316146106c8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806107025750610702610889565b80610710575060005460ff16155b61074b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610776576000805460ff1961ff0019909116610100171660011790555b61077e61089a565b61064761093a565b61078e610a33565b6001600160a01b031661079f61051d565b6001600160a01b0316146107e8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03811661082d5760405162461bcd60e51b8152600401808060200182810382526026815260200180610a3e6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061089430610a37565b15905090565b600054610100900460ff16806108b357506108b3610889565b806108c1575060005460ff16155b6108fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610278576000805460ff1961ff001990911661010017166001179055801561028a576000805461ff001916905550565b600054610100900460ff16806109535750610953610889565b80610961575060005460ff16155b61099c5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156109c7576000805460ff1961ff0019909116610100171660011790555b60006109d1610a33565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561028a576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220597fa1b0869f6e9a9c201e77b523de7b663d5ce8e581f4023871dace183130a564736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19884, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721LazyMintTransferProxy.json new file mode 100644 index 000000000..a101d7b34 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721LazyMintTransferProxy.json @@ -0,0 +1,293 @@ +{ + "address": "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ERC721LazyMintTransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "asset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x957464ef65ecbac3b304fb64368708961ef1540153fec7008cfe817440ea8cf3", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "935371", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x9da32359206408f7c4c5874cedb6462e87282474dc61ca0a04f37496226eed4d", + "transactionHash": "0x957464ef65ecbac3b304fb64368708961ef1540153fec7008cfe817440ea8cf3", + "logs": [], + "blockNumber": 4426273, + "cumulativeGasUsed": "979246", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC721LazyMintTransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":\"ERC721LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n\\n function __ERC721LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\\n }\\n}\\n\",\"keccak256\":\"0x454e275be5d03f236ad96f9a2392e928d3397aad056dad7640fc1500867911a4\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610f4a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100d05780639870d7fe146100ee578063ac8a584a14610101578063e814f46d146100bd578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b5578063795c7aaa146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ae0565b6101d9565b6100a06102f7565b6100a06100cb3660046109d0565b6103a3565b6100d861045f565b6040516100e59190610ca9565b60405180910390f35b6100a06100fc3660046109d0565b61046e565b6100a061010f3660046109d0565b6104f4565b6100a06101223660046109d0565b610577565b600054610100900460ff1680610140575061014061067a565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc61068b565b6101c461072b565b80156101d6576000805461ff00191690555b50565b606560006101e5610824565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eed6028913960400191505060405180910390fd5b826020015160011461026a5760405162461bcd60e51b815260040161026190610cbd565b60405180910390fd5b60008084600001516020015180602001905181019061028991906109ec565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb29906102be90849088908890600401610ce9565b600060405180830381600087803b1580156102d857600080fd5b505af11580156102ec573d6000803e3d6000fd5b505050505050505050565b6102ff610824565b6001600160a01b031661031061045f565b6001600160a01b031614610359576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103bc57506103bc61067a565b806103ca575060005460ff16155b6104055760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff16158015610430576000805460ff1961ff0019909116610100171660011790555b61043861068b565b61044061072b565b61044982610577565b801561045b576000805461ff00191690555b5050565b6033546001600160a01b031690565b610476610824565b6001600160a01b031661048761045f565b6001600160a01b0316146104d0576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104fc610824565b6001600160a01b031661050d61045f565b6001600160a01b031614610556576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61057f610824565b6001600160a01b031661059061045f565b6001600160a01b0316146105d9576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03811661061e5760405162461bcd60e51b8152600401808060200182810382526026815260200180610e796026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061068530610828565b15905090565b600054610100900460ff16806106a457506106a461067a565b806106b2575060005460ff16155b6106ed5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff1680610744575061074461067a565b80610752575060005460ff16155b61078d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156107b8576000805460ff1961ff0019909116610100171660011790555b60006107c2610824565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061084561084084610e11565b610dcf565b905082815283838301111561085957600080fd5b610867836020830184610e33565b9392505050565b803561082d81610e63565b600082601f830112610889578081fd5b8151602061089961084083610df3565b82815281810190858301855b858110156108e3578151880189603f8201126108bf578788fd5b6108d08a8783015160408401610832565b85525092840192908401906001016108a5565b5090979650505050505050565b600082601f830112610900578081fd5b8151602061091061084083610df3565b8281528181019085830160408086028801850189101561092e578687fd5b865b868110156109a35781838b031215610946578788fd5b815182810181811067ffffffffffffffff8211171561096157fe5b8352835161096e81610e63565b8152838701516bffffffffffffffffffffffff8116811461098d57898afd5b8188015285529385019391810191600101610930565b509198975050505050505050565b600082601f8301126109c1578081fd5b61086783835160208501610832565b6000602082840312156109e1578081fd5b813561086781610e63565b600080604083850312156109fe578081fd5b8251610a0981610e63565b602084015190925067ffffffffffffffff80821115610a26578283fd5b9084019060a08287031215610a39578283fd5b610a4360a0610dcf565b82518152602083015182811115610a58578485fd5b610a64888286016109b1565b602083015250604083015182811115610a7b578485fd5b610a87888286016108f0565b604083015250606083015182811115610a9e578485fd5b610aaa888286016108f0565b606083015250608083015182811115610ac1578485fd5b610acd88828601610879565b6080830152508093505050509250929050565b600080600060608486031215610af4578081fd5b833567ffffffffffffffff80821115610b0b578283fd5b81860191506040808389031215610b20578384fd5b80518181018181108482111715610b3357fe5b808352843584811115610b44578687fd5b8501808b03841315610b54578687fd5b608083018281108682111715610b6657fe5b845280356001600160e01b031981168114610b7f578788fd5b825260208181013586811115610b93578889fd5b82019550601f86018c13610ba5578788fd5b85359150610bb561084083610e11565b8281528c82848901011115610bc8578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bf7818c0161086e565b985050505050610c0881880161086e565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c7257815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c34565b509495945050505050565b60008151808452610c95816020860160208601610e33565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610d11610100850182610c7d565b90506040870151605f19808684030160a0870152610d2f8383610c21565b925060608901519150808684030160c0870152610d4c8383610c21565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610da457601f19868303018452610d92828651610c7d565b94870194938701939150600101610d76565b508096505050505050610db981840186610c14565b50610dc76040830184610c14565b949350505050565b60405181810167ffffffffffffffff81118282101715610deb57fe5b604052919050565b600067ffffffffffffffff821115610e0757fe5b5060209081020190565b600067ffffffffffffffff821115610e2557fe5b50601f01601f191660200190565b60005b83811015610e4e578181015183820152602001610e36565b83811115610e5d576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a70ad50617bc7d86721e59644bb144857ba8df35926720d11f324896d0ef12f264736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100d05780639870d7fe146100ee578063ac8a584a14610101578063e814f46d146100bd578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b5578063795c7aaa146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ae0565b6101d9565b6100a06102f7565b6100a06100cb3660046109d0565b6103a3565b6100d861045f565b6040516100e59190610ca9565b60405180910390f35b6100a06100fc3660046109d0565b61046e565b6100a061010f3660046109d0565b6104f4565b6100a06101223660046109d0565b610577565b600054610100900460ff1680610140575061014061067a565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc61068b565b6101c461072b565b80156101d6576000805461ff00191690555b50565b606560006101e5610824565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eed6028913960400191505060405180910390fd5b826020015160011461026a5760405162461bcd60e51b815260040161026190610cbd565b60405180910390fd5b60008084600001516020015180602001905181019061028991906109ec565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb29906102be90849088908890600401610ce9565b600060405180830381600087803b1580156102d857600080fd5b505af11580156102ec573d6000803e3d6000fd5b505050505050505050565b6102ff610824565b6001600160a01b031661031061045f565b6001600160a01b031614610359576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103bc57506103bc61067a565b806103ca575060005460ff16155b6104055760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff16158015610430576000805460ff1961ff0019909116610100171660011790555b61043861068b565b61044061072b565b61044982610577565b801561045b576000805461ff00191690555b5050565b6033546001600160a01b031690565b610476610824565b6001600160a01b031661048761045f565b6001600160a01b0316146104d0576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104fc610824565b6001600160a01b031661050d61045f565b6001600160a01b031614610556576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61057f610824565b6001600160a01b031661059061045f565b6001600160a01b0316146105d9576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03811661061e5760405162461bcd60e51b8152600401808060200182810382526026815260200180610e796026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061068530610828565b15905090565b600054610100900460ff16806106a457506106a461067a565b806106b2575060005460ff16155b6106ed5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff1680610744575061074461067a565b80610752575060005460ff16155b61078d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156107b8576000805460ff1961ff0019909116610100171660011790555b60006107c2610824565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061084561084084610e11565b610dcf565b905082815283838301111561085957600080fd5b610867836020830184610e33565b9392505050565b803561082d81610e63565b600082601f830112610889578081fd5b8151602061089961084083610df3565b82815281810190858301855b858110156108e3578151880189603f8201126108bf578788fd5b6108d08a8783015160408401610832565b85525092840192908401906001016108a5565b5090979650505050505050565b600082601f830112610900578081fd5b8151602061091061084083610df3565b8281528181019085830160408086028801850189101561092e578687fd5b865b868110156109a35781838b031215610946578788fd5b815182810181811067ffffffffffffffff8211171561096157fe5b8352835161096e81610e63565b8152838701516bffffffffffffffffffffffff8116811461098d57898afd5b8188015285529385019391810191600101610930565b509198975050505050505050565b600082601f8301126109c1578081fd5b61086783835160208501610832565b6000602082840312156109e1578081fd5b813561086781610e63565b600080604083850312156109fe578081fd5b8251610a0981610e63565b602084015190925067ffffffffffffffff80821115610a26578283fd5b9084019060a08287031215610a39578283fd5b610a4360a0610dcf565b82518152602083015182811115610a58578485fd5b610a64888286016109b1565b602083015250604083015182811115610a7b578485fd5b610a87888286016108f0565b604083015250606083015182811115610a9e578485fd5b610aaa888286016108f0565b606083015250608083015182811115610ac1578485fd5b610acd88828601610879565b6080830152508093505050509250929050565b600080600060608486031215610af4578081fd5b833567ffffffffffffffff80821115610b0b578283fd5b81860191506040808389031215610b20578384fd5b80518181018181108482111715610b3357fe5b808352843584811115610b44578687fd5b8501808b03841315610b54578687fd5b608083018281108682111715610b6657fe5b845280356001600160e01b031981168114610b7f578788fd5b825260208181013586811115610b93578889fd5b82019550601f86018c13610ba5578788fd5b85359150610bb561084083610e11565b8281528c82848901011115610bc8578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bf7818c0161086e565b985050505050610c0881880161086e565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c7257815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c34565b509495945050505050565b60008151808452610c95816020860160208601610e33565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610d11610100850182610c7d565b90506040870151605f19808684030160a0870152610d2f8383610c21565b925060608901519150808684030160c0870152610d4c8383610c21565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610da457601f19868303018452610d92828651610c7d565b94870194938701939150600101610d76565b508096505050505050610db981840186610c14565b50610dc76040830184610c14565b949350505050565b60405181810167ffffffffffffffff81118282101715610deb57fe5b604052919050565b600067ffffffffffffffff821115610e0757fe5b5060209081020190565b600067ffffffffffffffff821115610e2557fe5b50601f01601f191660200190565b60005b83811015610e4e578181015183820152602001610e36565b83811115610e5d576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a70ad50617bc7d86721e59644bb144857ba8df35926720d11f324896d0ef12f264736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19884, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleFactoryC2.json new file mode 100644 index 000000000..f22bd88c6 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleFactoryC2.json @@ -0,0 +1,396 @@ +{ + "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_beacon", + "type": "address" + }, + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create721RaribleProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create721RaribleUserProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "beacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xda5460b464c645bd2fdfbe29d75c878844265b8495d031e54ba5aaa9a22d0b9d", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1374604", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000010000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000041000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x6432d5995b5ebf2a6fd287db57f76657e87f71b14833a3c81b75edf395f8601c", + "transactionHash": "0xda5460b464c645bd2fdfbe29d75c878844265b8495d031e54ba5aaa9a22d0b9d", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426318, + "transactionHash": "0xda5460b464c645bd2fdfbe29d75c878844265b8495d031e54ba5aaa9a22d0b9d", + "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x6432d5995b5ebf2a6fd287db57f76657e87f71b14833a3c81b75edf395f8601c" + }, + { + "transactionIndex": 1, + "blockNumber": 4426318, + "transactionHash": "0xda5460b464c645bd2fdfbe29d75c878844265b8495d031e54ba5aaa9a22d0b9d", + "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x6432d5995b5ebf2a6fd287db57f76657e87f71b14833a3c81b75edf395f8601c" + } + ], + "blockNumber": 4426318, + "cumulativeGasUsed": "1429667", + "status": 1, + "byzantium": true + }, + "args": [ + "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":\"ERC721RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-721-minimal/ERC721RaribleMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC721Rarible token.\\n *\\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC721RaribleFactoryC2 is Ownable {\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create721RaribleProxy(address proxy);\\n event Create721RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n transferOwnership(initialOwner);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleProxy(beaconProxy);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that private contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n}\\n\",\"keccak256\":\"0x6fd15e5905a37d0a07d5ca73e818d8a54f29b58b241c3ea82255e3ef98f83043\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721BaseMinimal.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = true;\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x6d5c6aa0e1b36eb2bde4584ff91f87a5411e4931e022b55966bda85c169008b9\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620017f7380380620017f7833981016040819052620000349162000205565b600062000040620000cb565b600080546001600160a01b0319166001600160a01b038316908117825560405192935091600080516020620017d7833981519152908290a350600180546001600160a01b038087166001600160a01b031992831617909255600280548684169083161790556003805492851692909116919091179055620000c181620000cf565b5050505062000261565b3390565b620000d9620000cb565b6001600160a01b0316620000ec620001d9565b6001600160a01b03161462000148576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166200018f5760405162461bcd60e51b8152600401808060200182810382526026815260200180620017b16026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020620017d783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b80516001600160a01b03811681146200020057600080fd5b919050565b600080600080608085870312156200021b578384fd5b6200022685620001e8565b93506200023660208601620001e8565b92506200024660408601620001e8565b91506200025660608601620001e8565b905092959194509250565b61154080620002716000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220c6da39aa047c7bcc743388596f3312d9e6c5276f87af5dbcc961f12ecaecb5ef64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220c6da39aa047c7bcc743388596f3312d9e6c5276f87af5dbcc961f12ecaecb5ef64736f6c63430007060033", + "devdoc": { + "details": "This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.", + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23081, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "beacon", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23083, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "transferProxy", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23085, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "lazyTransferProxy", + "offset": 0, + "slot": "3", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta.json new file mode 100644 index 000000000..d2e8d4219 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta.json @@ -0,0 +1,1433 @@ +{ + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC721Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1123036", + "logsBloom": "0x00000400000800000000000000000000400000000400800010800000000000000000000000000000000000000001000000000000000440000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000408000002800000000000000000000000000000000000100004000000000000000000000000000100000020000300000000000001000000000000000400000040000000000020000000000000000060000000000000000000000000000000000000000001000000", + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e", + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000003dc700b8bd71fcd8b80914e10b561c15816f71ac" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + }, + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + }, + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + }, + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + }, + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + }, + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" + ], + "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 5, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + }, + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + } + ], + "blockNumber": 4426312, + "cumulativeGasUsed": "1178087", + "status": 1, + "byzantium": true + }, + "args": [ + "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "__ERC721Rarible_init_proxy", + "args": [ + "Rarible", + "RARI", + "ipfs:/", + "", + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ] + }, + "implementation": "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Implementation.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Implementation.json new file mode 100644 index 000000000..394e6a41d --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Implementation.json @@ -0,0 +1,1667 @@ +{ + "address": "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC721Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xbdc98adef39402a0fce8ba811a0c7bddd73f21a5d3ae241e8f8bf0729a520488", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "4791813", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xcee3a1bdf8ec8bdd09f4432ae032eb8e4c5612c7623dde71c2bfc0d3e4c8f926", + "transactionHash": "0xbdc98adef39402a0fce8ba811a0c7bddd73f21a5d3ae241e8f8bf0729a520488", + "logs": [], + "blockNumber": 4426310, + "cumulativeGasUsed": "4835676", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC721Rarible_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"burn(uint256)\":{\"details\":\"Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\":\"ERC721RaribleMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\\n using SafeMath for uint256;\\n\\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\\\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\\\"));\\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\\\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\\\");\\n\\n mapping(address => uint256) private nonces;\\n bytes32 internal domainSeparator;\\n\\n /*\\n * Meta transaction structure.\\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\\n * He should call the desired function directly in that case.\\n */\\n struct MetaTransaction {\\n uint256 nonce;\\n address from;\\n bytes functionSignature;\\n }\\n\\n /*\\n * Domain structure.\\n * Data(information to for making metaTransaction method uniq.) about method and contract\\n */\\n struct EIP712Domain {\\n string name;\\n string version;\\n address verifyingContract;\\n bytes32 salt;\\n }\\n\\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\\n\\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\\n domainSeparator = keccak256(abi.encode(\\n EIP712_DOMAIN_TYPEHASH,\\n keccak256(bytes(name)),\\n keccak256(bytes(version)),\\n address(this),\\n getSalt()\\n ));\\n }\\n\\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\\n if (inBytes.length == 0) {\\n return 0x0;\\n }\\n\\n assembly {\\n outBytes4 := mload(add(inBytes, 32))\\n }\\n }\\n\\n function executeMetaTransaction(address userAddress,\\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\\n require(destinationFunctionSig != msg.sig, \\\"Wrong functionSignature\\\");\\n MetaTransaction memory metaTx = MetaTransaction({\\n nonce : nonces[userAddress],\\n from : userAddress,\\n functionSignature : functionSignature\\n });\\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \\\"Signer and signature do not match\\\");\\n nonces[userAddress] = nonces[userAddress].add(1);\\n // Append userAddress at the end to extract it from calling context\\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\\n\\n require(success, \\\"Function call not successful\\\");\\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\\n return returnData;\\n }\\n\\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n META_TRANSACTION_TYPEHASH,\\n metaTx.nonce,\\n metaTx.from,\\n keccak256(metaTx.functionSignature)\\n ));\\n }\\n\\n function getNonce(address user) external view returns (uint256 nonce) {\\n nonce = nonces[user];\\n }\\n\\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\\n require(signer != address(0), \\\"Invalid signature\\\");\\n return signer == user;\\n }\\n\\n function _msgSender() internal view virtual override returns (address payable sender) {\\n if (msg.sender == address(this)) {\\n bytes memory array = msg.data;\\n uint256 index = msg.data.length;\\n assembly {\\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\\n }\\n } else {\\n sender = msg.sender;\\n }\\n return sender;\\n }\\n\\n function getSalt() internal pure returns (bytes32) {\\n return bytes32(getChainID());\\n }\\n\\n function getChainID() internal pure returns (uint256 id) {\\n assembly {\\n id := chainid()\\n }\\n }\\n\\n function getDomainSeparator() private view returns (bytes32) {\\n return domainSeparator;\\n }\\n\\n /**\\n * Accept message hash and returns hash message in EIP712 compatible form\\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\\n * https://eips.ethereum.org/EIPS/eip-712\\n * \\\"\\\\\\\\x19\\\" makes the encoding deterministic\\n * \\\"\\\\\\\\x01\\\" is the version byte to make it compatible to EIP-191\\n */\\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", getDomainSeparator(), messageHash));\\n }\\n\\n /**\\n * @dev verifies the call result and bubbles up revert reason for failed calls\\n *\\n * @param success : outcome of forwarded call\\n * @param returndata : returned data from the frowarded call\\n * @param errorMessage : fallback error message to show\\n */\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\\n if (!success) {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x58924a44eea8720bdcfb32f12d3374deac9605a3b75cb8872907856d526bde10\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\\\";\\nimport \\\"../ERC721BaseMinimal.sol\\\";\\nimport \\\"../../IsPrivateCollection.sol\\\";\\nimport \\\"../../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC721RaribleUserMeta\\\", \\\"1\\\");\\n\\n isPrivate = true;\\n\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC721RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC721RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\\n }\\n\\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\\n return super._msgSender();\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x8c1956eda6ce9c45b465280defb27fa3e6b8307d389334729effdb6e206e8e77\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506153f6806100206000396000f3fe6080604052600436106102045760003560e01c806370a0823111610118578063aa271e1a116100a0578063e07f23191161006f578063e07f2319146105df578063e8a3d485146105ff578063e985e9c514610614578063f2fde38b14610634578063ff14a3541461065457610204565b8063aa271e1a1461055f578063b88d4fde1461057f578063c87b56dd1461059f578063cad96cca146105bf57610204565b8063891be974116100e7578063891be974146104c85780638da5cb5b146104f557806395d89b411461050a578063983b2d561461051f578063a22cb4651461053f57610204565b806370a0823114610453578063715018a61461047357806371e2a65714610488578063832fbb29146104a857610204565b80632d0335ab1161019b57806342966c681161016a57806342966c68146103be5780634648eb9d146103de57806355f804b3146103fe5780636352211e1461041e5780636c0360eb1461043e57610204565b80632d0335ab146103315780633092afd51461035e5780633db397c61461037e57806342842e0e1461039e57610204565b80630c53c51c116101d75780630c53c51c146102b057806322a775b6146102c357806323b872dd146102e35780632a55205a1461030357610204565b806301ffc9a71461020957806306fdde031461023f578063081812fc14610261578063095ea7b31461028e575b600080fd5b34801561021557600080fd5b506102296102243660046148c5565b610674565b6040516102369190614dab565b60405180910390f35b34801561024b57600080fd5b50610254610687565b6040516102369190614db6565b34801561026d57600080fd5b5061028161027c366004614c34565b61071e565b6040516102369190614d35565b34801561029a57600080fd5b506102ae6102a9366004614868565b610781565b005b6102546102be3660046147ee565b610857565b3480156102cf57600080fd5b506102ae6102de366004614b8f565b610bd0565b3480156102ef57600080fd5b506102ae6102fe366004614714565b610c72565b34801561030f57600080fd5b5061032361031e366004614c72565b610cc9565b604051610236929190614d7f565b34801561033d57600080fd5b5061035161034c3660046146c0565b610dd7565b6040516102369190614f7c565b34801561036a57600080fd5b506102ae6103793660046146c0565b610df3565b34801561038a57600080fd5b506102ae61039936600461491f565b610ea3565b3480156103aa57600080fd5b506102ae6103b9366004614714565b610f52565b3480156103ca57600080fd5b506102ae6103d9366004614c34565b610f6d565b3480156103ea57600080fd5b506102ae6103f9366004614abf565b611037565b34801561040a57600080fd5b506102ae6104193660046148ed565b6110ee565b34801561042a57600080fd5b50610281610439366004614c34565b611193565b34801561044a57600080fd5b506102546111e7565b34801561045f57600080fd5b5061035161046e3660046146c0565b611249565b34801561047f57600080fd5b506102ae6112ad565b34801561049457600080fd5b506102ae6104a3366004614893565b611359565b3480156104b457600080fd5b506102ae6104c3366004614bd3565b61143e565b3480156104d457600080fd5b506104e86104e3366004614c34565b6114b9565b6040516102369190614d98565b34801561050157600080fd5b50610281611549565b34801561051657600080fd5b50610254611558565b34801561052b57600080fd5b506102ae61053a3660046146c0565b6115b9565b34801561054b57600080fd5b506102ae61055a3660046147bd565b61166e565b34801561056b57600080fd5b5061022961057a3660046146c0565b611774565b34801561058b57600080fd5b506102ae61059a366004614754565b611793565b3480156105ab57600080fd5b506102546105ba366004614c34565b6117f1565b3480156105cb57600080fd5b506104e86105da366004614c34565b6117fc565b3480156105eb57600080fd5b506102ae6105fa366004614c4c565b611877565b34801561060b57600080fd5b506102546118ba565b34801561062057600080fd5b5061022961062f3660046146dc565b611949565b34801561064057600080fd5b506102ae61064f3660046146c0565b61195e565b34801561066057600080fd5b506102ae61066f3660046149e6565b611a61565b600061067f82611b02565b90505b919050565b60fd8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b820191906000526020600020905b8154815290600101906020018083116106f657829003601f168201915b505050505090505b90565b600061072982611bbc565b6107645760405162461bcd60e51b815260040180806020018281038252602c815260200180615209602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b600061078c82611193565b9050806001600160a01b0316836001600160a01b031614156107df5760405162461bcd60e51b815260040180806020018281038252602181526020018061531a6021913960400191505060405180910390fd5b806001600160a01b03166107f1611bd9565b6001600160a01b0316148061080d575061080d8161062f611bd9565b6108485760405162461bcd60e51b81526004018080602001828103825260388152602001806151016038913960400191505060405180910390fd5b6108528383611be8565b505050565b6060600061086486611c57565b90506000356001600160e01b031990811690821614156108cb576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102f76020908152908490205483528201529081018790526109098882888888611c73565b6109445760405162461bcd60e51b81526004018080602001828103825260218152602001806152aa6021913960400191505060405180910390fd5b6001600160a01b03881660009081526102f76020526040902054610969906001611d5d565b6102f760008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106109d45780518252601f1990920191602091820191016109b5565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610a4a5780518252601f199092019160209182019101610a2b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610aac576040519150601f19603f3d011682016040523d82523d6000602084013e610ab1565b606091505b509150915081610b08576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b87578181015183820152602001610b6f565b50505050905090810190601f168015610bb45780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b6102925460ff1615610c64578160400151600081518110610bed57fe5b6020026020010151600001516001600160a01b0316610c0a611549565b6001600160a01b03161480610c3f5750610c3f8260400151600081518110610c2e57fe5b602002602001015160000151611774565b610c645760405162461bcd60e51b8152600401610c5b90614df4565b60405180910390fd5b610c6e8282611db7565b5050565b610c83610c7d611bd9565b82611f39565b610cbe5760405162461bcd60e51b815260040180806020018281038252603181526020018061533b6031913960400191505060405180910390fd5b610852838383611f45565b60008281526101c660205260408120548190610cea57506000905080610dd0565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d6657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610d17565b50505050905080600081518110610d7957fe5b60209081029190910101515192506000805b8251811015610dc457828181518110610da057fe5b6020026020010151602001516001600160601b031682019150806001019050610d8b565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102f7602052604090205490565b610dfb611bd9565b6001600160a01b0316610e0c611549565b6001600160a01b031614610e55576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b610eb1868686868686612064565b610efd6040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd610f31611bd9565b8787604051610f4293929190614d49565b60405180910390a1505050505050565b61085283838360405180602001604052806000815250611793565b610f7681611bbc565b610fe557606081901c610f87611bd9565b6001600160a01b0316816001600160a01b031614610fd65760405162461bcd60e51b815260040180806020018281038252602d8152602001806151dc602d913960400191505060405180910390fd5b610fdf8261220e565b50611034565b610ff0610c7d611bd9565b61102b5760405162461bcd60e51b81526004018080602001828103825260308152602001806153916030913960400191505060405180910390fd5b6110348161222a565b50565b611045878787878686612064565b6110956040518060400160405280601581526020017445524337323152617269626c65557365724d65746160581b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e99136110cc611bd9565b88886040516110dd93929190614d49565b60405180910390a150505050505050565b6110f6611bd9565b6001600160a01b0316611107611549565b6001600160a01b031614611150576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b611159816122c6565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d6816040516111889190614db6565b60405180910390a150565b600081815260ff60205260408120546001600160a01b03168061067f5760405162461bcd60e51b81526004018080602001828103825260298152602001806151636029913960400191505060405180910390fd5b6101c88054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b60006001600160a01b0382166112905760405162461bcd60e51b815260040180806020018281038252602a815260200180615139602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b6112b5611bd9565b6001600160a01b03166112c6611549565b6001600160a01b03161461130f576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b611361611bd9565b6001600160a01b0316611372611549565b6001600160a01b0316146113bb576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b60005b8151811015610c6e5760008282815181106113d557fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016113be565b825161144990611bbc565b156114625761145d82828560000151610f52565b610852565b826040015160008151811061147357fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146114af5760405162461bcd60e51b8152600401610c5b90614dc9565b6108528382610bd0565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561153e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114ef565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b6115c1611bd9565b6001600160a01b03166115d2611549565b6001600160a01b03161461161b576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b611676611bd9565b6001600160a01b0316826001600160a01b031614156116dc576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006116ea611bd9565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561172e611bd9565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b6117a461179e611bd9565b83611f39565b6117df5760405162461bcd60e51b815260040180806020018281038252603181526020018061533b6031913960400191505060405180910390fd5b6117eb848484846122da565b50505050565b606061067f8261232c565b60008181526101c66020908152604080832080548251818502810185019093528083526060949293919290918401821561153e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114ef565b816001600160a01b0316611889611bd9565b6001600160a01b0316146118af5760405162461bcd60e51b8152600401610c5b90614e81565b610852838383612337565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156119415780601f1061191657610100808354040283529160200191611941565b820191906000526020600020905b81548152906001019060200180831161192457829003601f168201915b505050505081565b600061195583836123e3565b90505b92915050565b611966611bd9565b6001600160a01b0316611977611549565b6001600160a01b0316146119c0576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b038116611a055760405162461bcd60e51b81526004018080602001828103825260268152602001806150696026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b611a6f878787878787612064565b611abb6040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff19169055611acf8161195e565b7ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd8188886040516110dd93929190614d49565b60006001600160e01b03198216638486f69f60e01b1480611b3357506001600160e01b0319821663656cb66560e11b145b80611b4e57506001600160e01b0319821663152a902d60e11b145b80611b6957506001600160e01b031982166301ffc9a760e01b145b80611b8457506001600160e01b031982166380ac58cd60e01b145b80611b9f57506001600160e01b03198216635b5e139f60e01b145b8061067f5750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b6000611be3612410565b905090565b60008181526101016020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c1e82611193565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000815160001415611c6b57506000610682565b506020015190565b6000806001611c89611c848861246c565b6124ef565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ce0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611d3c576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611955576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b815160601c6000611dc6611bd9565b90508360400151600081518110611dd957fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611e155760405162461bcd60e51b8152600401610c5b90614e56565b83608001515184604001515114611e2b57600080fd5b806001600160a01b0316826001600160a01b03161480611e505750611e508282611949565b611e6c5760405162461bcd60e51b8152600401610c5b90614edd565b6000611e778561253b565b905060005b856040015151811015611eed57600086604001518281518110611e9b57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611ee457611ee4818489608001518581518110611ed757fe5b6020026020010151612782565b50600101611e7c565b50611efc84866000015161278d565b611f0e856000015186606001516127a7565b611f2085600001518660400151612996565b611f3285600001518660200151612b45565b5050505050565b60006119558383612ba9565b826001600160a01b0316611f5882611193565b6001600160a01b031614611f9d5760405162461bcd60e51b81526004018080602001828103825260298152602001806152816029913960400191505060405180910390fd5b6001600160a01b038216611fe25760405162461bcd60e51b815260040180806020018281038252602481526020018061508f6024913960400191505060405180910390fd5b611fed838383610852565b611ff8600082611be8565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b031916821790559251849392916000805160206152fa83398151915291a4505050565b600054610100900460ff168061207d575061207d612bd6565b8061208b575060005460ff16155b6120c65760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff161580156120f1576000805460ff1961ff0019909116610100171660011790555b6120fa856122c6565b612102612be7565b61210a612c88565b612112612be7565b61211a612d25565b612122612dc2565b61212a612be7565b612132612ebb565b61213a612f8a565b61214384612f8c565b61214d8787612fb1565b61215883600161309c565b61216382600161309c565b8015612175576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab782805190602001208280519060200120306121b86130fd565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102f8819055505050565b600090815261010360205260409020805460ff19166001179055565b600061223582611193565b905061224381600084610852565b61224e600083611be8565b61225782613107565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b031916905561229c8261220e565b60405182906000906001600160a01b038416906000805160206152fa833981519152908390a45050565b8051610c6e906101c8906020840190614328565b6122e5848484611f45565b6122f184848484613110565b6117eb5760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b606061067f826132c6565b60008381526101c66020526040812054905b81811015611f325760008581526101c66020526040902080546001600160a01b03861691908390811061237857fe5b6000918252602090912001546001600160a01b031614156123db5760008581526101c6602052604090208054849190839081106123b157fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612349565b6001600160a01b038116600090815261012f602052604081205460ff1680611955575061195583836134a1565b60003330141561246757600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061071b9050565b503390565b600060405180608001604052806043815260200161502660439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60006124f96134d0565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000808260600151516001600160401b038111801561255957600080fd5b50604051908082528060200260200182016040528015612583578160200160208202803683370190505b50905060005b8360600151518110156125d5576125b6846060015182815181106125a957fe5b60200260200101516134d7565b8282815181106125c257fe5b6020908102919091010152600101612589565b5060008360400151516001600160401b03811180156125f357600080fd5b5060405190808252806020026020018201604052801561261d578160200160208202803683370190505b50905060005b84604001515181101561266257612643856040015182815181106125a957fe5b82828151811061264f57fe5b6020908102919091010152600101612623565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b838110156126c65781810151838201526020016126ae565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b838110156127175781810151838201526020016126ff565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b610852838383613544565b610c6e8282604051806020016040528060008152506137c3565b6000805b825181101561294b5760006001600160a01b03168382815181106127cb57fe5b6020026020010151600001516001600160a01b03161415612833576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b82818151811061283f57fe5b6020026020010151602001516001600160601b0316600014156128a9576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b8281815181106128b557fe5b6020026020010151602001516001600160601b0316820191506101c660008581526020019081526020016000208382815181106128ee57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b03199093169290921716179055016127ab565b50612710811061298c5760405162461bcd60e51b815260040180806020018281038252602581526020018061536c6025913960400191505060405180910390fd5b6108528383613815565b60008281526101fb6020526040812090805b8351811015612ae45760006001600160a01b03168482815181106129c857fe5b6020026020010151600001516001600160a01b031614156129fb5760405162461bcd60e51b8152600401610c5b90614ea6565b838181518110612a0757fe5b6020026020010151602001516001600160601b031660001415612a3c5760405162461bcd60e51b8152600401610c5b90614e21565b82848281518110612a4957fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612ada90859083908110612ab657fe5b6020026020010151602001516001600160601b031683611d5d90919063ffffffff16565b91506001016129a8565b508061271014612b065760405162461bcd60e51b8152600401610c5b90614f2e565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612b37929190614f85565b60405180910390a150505050565b612b4e82611bbc565b612b895760405162461bcd60e51b815260040180806020018281038252602c815260200180615235602c913960400191505060405180910390fd5b60008281526101c760209081526040909120825161085292840190614328565b6001600160a01b038216600090815261012f602052604081205460ff168061195557506119558383613852565b6000612be1306138ee565b15905090565b600054610100900460ff1680612c005750612c00612bd6565b80612c0e575060005460ff16155b612c495760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612c74576000805460ff1961ff0019909116610100171660011790555b8015611034576000805461ff001916905550565b600054610100900460ff1680612ca15750612ca1612bd6565b80612caf575060005460ff16155b612cea5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612d15576000805460ff1961ff0019909116610100171660011790555b612c7463656cb66560e11b6138f4565b600054610100900460ff1680612d3e5750612d3e612bd6565b80612d4c575060005460ff16155b612d875760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612db2576000805460ff1961ff0019909116610100171660011790555b612c746301ffc9a760e01b6138f4565b600054610100900460ff1680612ddb5750612ddb612bd6565b80612de9575060005460ff16155b612e245760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612e4f576000805460ff1961ff0019909116610100171660011790555b6000612e59611bd9565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611034576000805461ff001916905550565b600054610100900460ff1680612ed45750612ed4612bd6565b80612ee2575060005460ff16155b612f1d5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612f48576000805460ff1961ff0019909116610100171660011790555b612c74604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b815250613978565b565b8051612fa09061022e906020840190614328565b5061103463e8a3d48560e01b6138f4565b600054610100900460ff1680612fca5750612fca612bd6565b80612fd8575060005460ff16155b6130135760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff1615801561303e576000805460ff1961ff0019909116610100171660011790555b82516130519060fd906020860190614328565b5081516130659060fe906020850190614328565b506130766380ac58cd60e01b6138f4565b613086635b5e139f60e01b6138f4565b8015610852576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b6000611be3613a38565b61103481613a3c565b6000613124846001600160a01b03166138ee565b156132ba57836001600160a01b031663150b7a02613140611bd9565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156131b357818101518382015260200161319b565b50505050905090810190601f1680156131e05780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561320257600080fd5b505af192505050801561322757506040513d602081101561322257600080fd5b505160015b6132a0573d808015613255576040519150601f19603f3d011682016040523d82523d6000602084013e61325a565b606091505b5080516132985760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506132be565b5060015b949350505050565b60606132d182611bbc565b61330c5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152cb602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156133a05780601f10613375576101008083540402835291602001916133a0565b820191906000526020600020905b81548152906001019060200180831161338357829003601f168201915b5050505050905060006133b16111e7565b90508051600014156133c557509050610682565b8151156133df576133d68183613a45565b92505050610682565b806133e985613c2a565b6040516020018083805190602001908083835b6020831061341b5780518252601f1990920191602091820191016133fc565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106134635780518252601f199092019160209182019101613444565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b6102f85490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b600061354f83613d04565b9050600082516041141561356a576135678284613d0e565b90505b846001600160a01b0316816001600160a01b031614611f3257613595856001600160a01b03166138ee565b1561374b5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156136045781810151838201526020016135ec565b50505050905090810190601f1680156136315780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561364f57600080fd5b505afa158015613663573d6000803e3d6000fd5b505050506040513d602081101561367957600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146137455760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561370a5781810151838201526020016136f2565b50505050905090810190601f1680156137375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611f32565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b8152600481019384528251602482015282519293928392604490920191908083836000831561370a5781810151838201526020016136f2565b6137cd8383613d8e565b6137da6000848484613110565b6108525760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613846929190614f85565b60405180910390a15050565b600061385d82611bbc565b6138985760405162461bcd60e51b815260040180806020018281038252602c8152602001806150d5602c913960400191505060405180910390fd5b60006138a383611193565b9050806001600160a01b0316846001600160a01b031614806138de5750836001600160a01b03166138d38461071e565b6001600160a01b0316145b806132be57506132be8185611949565b3b151590565b6001600160e01b03198082161415613953576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806139915750613991612bd6565b8061399f575060005460ff16155b6139da5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015613a05576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015610852576000805461ff0019169055505050565b4690565b61103481613ef4565b80518251606091849184911015613b105784846040516020018083805190602001908083835b60208310613a8a5780518252601f199092019160209182019101613a6b565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613ad25780518252601f199092019160209182019101613ab3565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050611958565b60005b8251811015613c2057828181518110613b2857fe5b602001015160f81c60f81b6001600160f81b031916828281518110613b4957fe5b01602001516001600160f81b03191614613c185785856040516020018083805190602001908083835b60208310613b915780518252601f199092019160209182019101613b72565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613bd95780518252601f199092019160209182019101613bba565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350505050611958565b600101613b13565b5092949350505050565b606081613c4f57506040805180820190915260018152600360fc1b6020820152610682565b8160005b8115613c6757600101600a82049150613c53565b6000816001600160401b0381118015613c7f57600080fd5b506040519080825280601f01601f191660200182016040528015613caa576020820181803683370190505b50859350905060001982015b8315613cfb57600a840660300160f81b82828060019003935081518110613cd957fe5b60200101906001600160f81b031916908160001a905350600a84049350613cb6565b50949350505050565b60006124f9613f34565b60008151604114613d66576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a613d8486828585613f6f565b9695505050505050565b6001600160a01b038216613de9576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff1615613e45576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b613e4e81611bbc565b15613ea0576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613eac60008383610852565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b0319169091179055610c6e82826141c5565b60008181526101c7602052604090205460026000196101006001841615020190911604156110345760008181526101c760205260408120611034916143b4565b6000611be37f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613f626141cf565b613f6a6141d5565b6141db565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613fd05760405162461bcd60e51b81526004018080602001828103825260228152602001806150b36022913960400191505060405180910390fd5b6000601e8560ff1611156140aa576004850360ff16601b1480613ff957506004850360ff16601c145b6140345760405162461bcd60e51b81526004018080602001828103825260228152602001806151ba6022913960400191505060405180910390fd5b600161403f8761423d565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614099573d6000803e3d6000fd5b505050602060405103519050614161565b8460ff16601b14806140bf57508460ff16601c145b6140fa5760405162461bcd60e51b81526004018080602001828103825260228152602001806151ba6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614154573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166141bc576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b610c6e828261428e565b60975490565b60985490565b60008383836141e8613a38565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b03831681146142fd5760405182906001600160a01b038316906000906000805160206152fa833981519152908290a481836001600160a01b0316826001600160a01b03166000805160206152fa83398151915260405160405180910390a4610852565b60405182906001600160a01b038516906000906000805160206152fa833981519152908290a4505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261435e57600085556143a4565b82601f1061437757805160ff19168380011785556143a4565b828001600101855582156143a4579182015b828111156143a4578251825591602001919060010190614389565b506143b09291506143f4565b5090565b50805460018160011615610100020316600290046000825580601f106143da5750611034565b601f01602090049060005260206000209081019061103491905b5b808211156143b057600081556001016143f5565b803561068281614fde565b600082601f830112614424578081fd5b8135602061443961443483614fc1565b614f9e565b8281528181019085830183850287018401881015614455578586fd5b855b8581101561447c57813561446a81614fde565b84529284019290840190600101614457565b5090979650505050505050565b600082601f830112614499578081fd5b813560206144a961443483614fc1565b82815281810190858301855b8581101561447c576144cc898684358b0101614599565b845292840192908401906001016144b5565b600082601f8301126144ee578081fd5b813560206144fe61443483614fc1565b8281528181019085830160408086028801850189101561451c578687fd5b865b8681101561458b5781838b031215614534578788fd5b81518281018181106001600160401b038211171561454e57fe5b8352833561455b81614fde565b8152838701356001600160601b038116811461457557898afd5b818801528552938501939181019160010161451e565b509198975050505050505050565b600082601f8301126145a9578081fd5b81356001600160401b038111156145bc57fe5b6145cf601f8201601f1916602001614f9e565b8181528460208386010111156145e3578283fd5b816020850160208301379081016020019190915292915050565b600060a0828403121561460e578081fd5b61461860a0614f9e565b90508135815260208201356001600160401b038082111561463857600080fd5b61464485838601614599565b6020840152604084013591508082111561465d57600080fd5b614669858386016144de565b6040840152606084013591508082111561468257600080fd5b61468e858386016144de565b606084015260808401359150808211156146a757600080fd5b506146b484828501614489565b60808301525092915050565b6000602082840312156146d1578081fd5b813561195581614fde565b600080604083850312156146ee578081fd5b82356146f981614fde565b9150602083013561470981614fde565b809150509250929050565b600080600060608486031215614728578081fd5b833561473381614fde565b9250602084013561474381614fde565b929592945050506040919091013590565b60008060008060808587031215614769578182fd5b843561477481614fde565b9350602085013561478481614fde565b92506040850135915060608501356001600160401b038111156147a5578182fd5b6147b187828801614599565b91505092959194509250565b600080604083850312156147cf578182fd5b82356147da81614fde565b915060208301358015158114614709578182fd5b600080600080600060a08688031215614805578283fd5b853561481081614fde565b945060208601356001600160401b0381111561482a578384fd5b61483688828901614599565b9450506040860135925060608601359150608086013560ff8116811461485a578182fd5b809150509295509295909350565b6000806040838503121561487a578182fd5b823561488581614fde565b946020939093013593505050565b6000602082840312156148a4578081fd5b81356001600160401b038111156148b9578182fd5b6132be84828501614414565b6000602082840312156148d6578081fd5b81356001600160e01b031981168114611955578182fd5b6000602082840312156148fe578081fd5b81356001600160401b03811115614913578182fd5b6132be84828501614599565b60008060008060008060c08789031215614937578384fd5b86356001600160401b038082111561494d578586fd5b6149598a838b01614599565b9750602089013591508082111561496e578586fd5b61497a8a838b01614599565b9650604089013591508082111561498f578586fd5b61499b8a838b01614599565b955060608901359150808211156149b0578283fd5b506149bd89828a01614599565b9350506149cc60808801614409565b91506149da60a08801614409565b90509295509295509295565b600080600080600080600060e0888a031215614a00578485fd5b87356001600160401b0380821115614a16578687fd5b614a228b838c01614599565b985060208a0135915080821115614a37578687fd5b614a438b838c01614599565b975060408a0135915080821115614a58578687fd5b614a648b838c01614599565b965060608a0135915080821115614a79578283fd5b50614a868a828b01614599565b945050614a9560808901614409565b9250614aa360a08901614409565b9150614ab160c08901614409565b905092959891949750929550565b600080600080600080600060e0888a031215614ad9578081fd5b87356001600160401b0380821115614aef578283fd5b614afb8b838c01614599565b985060208a0135915080821115614b10578283fd5b614b1c8b838c01614599565b975060408a0135915080821115614b31578283fd5b614b3d8b838c01614599565b965060608a0135915080821115614b52578283fd5b614b5e8b838c01614599565b955060808a0135915080821115614b73578283fd5b50614b808a828b01614414565b935050614aa360a08901614409565b60008060408385031215614ba1578182fd5b82356001600160401b03811115614bb6578283fd5b614bc2858286016145fd565b925050602083013561470981614fde565b600080600060608486031215614be7578081fd5b83356001600160401b03811115614bfc578182fd5b614c08868287016145fd565b9350506020840135614c1981614fde565b91506040840135614c2981614fde565b809150509250925092565b600060208284031215614c45578081fd5b5035919050565b600080600060608486031215614c60578081fd5b833592506020840135614c1981614fde565b60008060408385031215614c84578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614cdf57815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614ca6565b509495945050505050565b60008151808452815b81811015614d0f57602081850181015186830182015201614cf3565b81811115614d205782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614d6d90830185614cea565b8281036040840152613d848185614cea565b6001600160a01b03929092168252602082015260400190565b6000602082526119556020830184614c93565b901515815260200190565b6000602082526119556020830184614cea565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526132be6040830184614c93565b6040518181016001600160401b0381118282101715614fb957fe5b604052919050565b60006001600160401b03821115614fd457fe5b5060209081020190565b6001600160a01b038116811461103457600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e5369676e657220616e64207369676e617475726520646f206e6f74206d617463684552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220f5990a22763c1b208eac60f3e6497209cfc0e77387e5cf0f890a08218d603c9464736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106102045760003560e01c806370a0823111610118578063aa271e1a116100a0578063e07f23191161006f578063e07f2319146105df578063e8a3d485146105ff578063e985e9c514610614578063f2fde38b14610634578063ff14a3541461065457610204565b8063aa271e1a1461055f578063b88d4fde1461057f578063c87b56dd1461059f578063cad96cca146105bf57610204565b8063891be974116100e7578063891be974146104c85780638da5cb5b146104f557806395d89b411461050a578063983b2d561461051f578063a22cb4651461053f57610204565b806370a0823114610453578063715018a61461047357806371e2a65714610488578063832fbb29146104a857610204565b80632d0335ab1161019b57806342966c681161016a57806342966c68146103be5780634648eb9d146103de57806355f804b3146103fe5780636352211e1461041e5780636c0360eb1461043e57610204565b80632d0335ab146103315780633092afd51461035e5780633db397c61461037e57806342842e0e1461039e57610204565b80630c53c51c116101d75780630c53c51c146102b057806322a775b6146102c357806323b872dd146102e35780632a55205a1461030357610204565b806301ffc9a71461020957806306fdde031461023f578063081812fc14610261578063095ea7b31461028e575b600080fd5b34801561021557600080fd5b506102296102243660046148c5565b610674565b6040516102369190614dab565b60405180910390f35b34801561024b57600080fd5b50610254610687565b6040516102369190614db6565b34801561026d57600080fd5b5061028161027c366004614c34565b61071e565b6040516102369190614d35565b34801561029a57600080fd5b506102ae6102a9366004614868565b610781565b005b6102546102be3660046147ee565b610857565b3480156102cf57600080fd5b506102ae6102de366004614b8f565b610bd0565b3480156102ef57600080fd5b506102ae6102fe366004614714565b610c72565b34801561030f57600080fd5b5061032361031e366004614c72565b610cc9565b604051610236929190614d7f565b34801561033d57600080fd5b5061035161034c3660046146c0565b610dd7565b6040516102369190614f7c565b34801561036a57600080fd5b506102ae6103793660046146c0565b610df3565b34801561038a57600080fd5b506102ae61039936600461491f565b610ea3565b3480156103aa57600080fd5b506102ae6103b9366004614714565b610f52565b3480156103ca57600080fd5b506102ae6103d9366004614c34565b610f6d565b3480156103ea57600080fd5b506102ae6103f9366004614abf565b611037565b34801561040a57600080fd5b506102ae6104193660046148ed565b6110ee565b34801561042a57600080fd5b50610281610439366004614c34565b611193565b34801561044a57600080fd5b506102546111e7565b34801561045f57600080fd5b5061035161046e3660046146c0565b611249565b34801561047f57600080fd5b506102ae6112ad565b34801561049457600080fd5b506102ae6104a3366004614893565b611359565b3480156104b457600080fd5b506102ae6104c3366004614bd3565b61143e565b3480156104d457600080fd5b506104e86104e3366004614c34565b6114b9565b6040516102369190614d98565b34801561050157600080fd5b50610281611549565b34801561051657600080fd5b50610254611558565b34801561052b57600080fd5b506102ae61053a3660046146c0565b6115b9565b34801561054b57600080fd5b506102ae61055a3660046147bd565b61166e565b34801561056b57600080fd5b5061022961057a3660046146c0565b611774565b34801561058b57600080fd5b506102ae61059a366004614754565b611793565b3480156105ab57600080fd5b506102546105ba366004614c34565b6117f1565b3480156105cb57600080fd5b506104e86105da366004614c34565b6117fc565b3480156105eb57600080fd5b506102ae6105fa366004614c4c565b611877565b34801561060b57600080fd5b506102546118ba565b34801561062057600080fd5b5061022961062f3660046146dc565b611949565b34801561064057600080fd5b506102ae61064f3660046146c0565b61195e565b34801561066057600080fd5b506102ae61066f3660046149e6565b611a61565b600061067f82611b02565b90505b919050565b60fd8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b820191906000526020600020905b8154815290600101906020018083116106f657829003601f168201915b505050505090505b90565b600061072982611bbc565b6107645760405162461bcd60e51b815260040180806020018281038252602c815260200180615209602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b600061078c82611193565b9050806001600160a01b0316836001600160a01b031614156107df5760405162461bcd60e51b815260040180806020018281038252602181526020018061531a6021913960400191505060405180910390fd5b806001600160a01b03166107f1611bd9565b6001600160a01b0316148061080d575061080d8161062f611bd9565b6108485760405162461bcd60e51b81526004018080602001828103825260388152602001806151016038913960400191505060405180910390fd5b6108528383611be8565b505050565b6060600061086486611c57565b90506000356001600160e01b031990811690821614156108cb576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102f76020908152908490205483528201529081018790526109098882888888611c73565b6109445760405162461bcd60e51b81526004018080602001828103825260218152602001806152aa6021913960400191505060405180910390fd5b6001600160a01b03881660009081526102f76020526040902054610969906001611d5d565b6102f760008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106109d45780518252601f1990920191602091820191016109b5565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610a4a5780518252601f199092019160209182019101610a2b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610aac576040519150601f19603f3d011682016040523d82523d6000602084013e610ab1565b606091505b509150915081610b08576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b87578181015183820152602001610b6f565b50505050905090810190601f168015610bb45780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b6102925460ff1615610c64578160400151600081518110610bed57fe5b6020026020010151600001516001600160a01b0316610c0a611549565b6001600160a01b03161480610c3f5750610c3f8260400151600081518110610c2e57fe5b602002602001015160000151611774565b610c645760405162461bcd60e51b8152600401610c5b90614df4565b60405180910390fd5b610c6e8282611db7565b5050565b610c83610c7d611bd9565b82611f39565b610cbe5760405162461bcd60e51b815260040180806020018281038252603181526020018061533b6031913960400191505060405180910390fd5b610852838383611f45565b60008281526101c660205260408120548190610cea57506000905080610dd0565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d6657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610d17565b50505050905080600081518110610d7957fe5b60209081029190910101515192506000805b8251811015610dc457828181518110610da057fe5b6020026020010151602001516001600160601b031682019150806001019050610d8b565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102f7602052604090205490565b610dfb611bd9565b6001600160a01b0316610e0c611549565b6001600160a01b031614610e55576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b610eb1868686868686612064565b610efd6040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd610f31611bd9565b8787604051610f4293929190614d49565b60405180910390a1505050505050565b61085283838360405180602001604052806000815250611793565b610f7681611bbc565b610fe557606081901c610f87611bd9565b6001600160a01b0316816001600160a01b031614610fd65760405162461bcd60e51b815260040180806020018281038252602d8152602001806151dc602d913960400191505060405180910390fd5b610fdf8261220e565b50611034565b610ff0610c7d611bd9565b61102b5760405162461bcd60e51b81526004018080602001828103825260308152602001806153916030913960400191505060405180910390fd5b6110348161222a565b50565b611045878787878686612064565b6110956040518060400160405280601581526020017445524337323152617269626c65557365724d65746160581b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e99136110cc611bd9565b88886040516110dd93929190614d49565b60405180910390a150505050505050565b6110f6611bd9565b6001600160a01b0316611107611549565b6001600160a01b031614611150576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b611159816122c6565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d6816040516111889190614db6565b60405180910390a150565b600081815260ff60205260408120546001600160a01b03168061067f5760405162461bcd60e51b81526004018080602001828103825260298152602001806151636029913960400191505060405180910390fd5b6101c88054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b60006001600160a01b0382166112905760405162461bcd60e51b815260040180806020018281038252602a815260200180615139602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b6112b5611bd9565b6001600160a01b03166112c6611549565b6001600160a01b03161461130f576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b611361611bd9565b6001600160a01b0316611372611549565b6001600160a01b0316146113bb576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b60005b8151811015610c6e5760008282815181106113d557fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016113be565b825161144990611bbc565b156114625761145d82828560000151610f52565b610852565b826040015160008151811061147357fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146114af5760405162461bcd60e51b8152600401610c5b90614dc9565b6108528382610bd0565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561153e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114ef565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b6115c1611bd9565b6001600160a01b03166115d2611549565b6001600160a01b03161461161b576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b611676611bd9565b6001600160a01b0316826001600160a01b031614156116dc576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006116ea611bd9565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561172e611bd9565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b6117a461179e611bd9565b83611f39565b6117df5760405162461bcd60e51b815260040180806020018281038252603181526020018061533b6031913960400191505060405180910390fd5b6117eb848484846122da565b50505050565b606061067f8261232c565b60008181526101c66020908152604080832080548251818502810185019093528083526060949293919290918401821561153e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114ef565b816001600160a01b0316611889611bd9565b6001600160a01b0316146118af5760405162461bcd60e51b8152600401610c5b90614e81565b610852838383612337565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156119415780601f1061191657610100808354040283529160200191611941565b820191906000526020600020905b81548152906001019060200180831161192457829003601f168201915b505050505081565b600061195583836123e3565b90505b92915050565b611966611bd9565b6001600160a01b0316611977611549565b6001600160a01b0316146119c0576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b038116611a055760405162461bcd60e51b81526004018080602001828103825260268152602001806150696026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b611a6f878787878787612064565b611abb6040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff19169055611acf8161195e565b7ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd8188886040516110dd93929190614d49565b60006001600160e01b03198216638486f69f60e01b1480611b3357506001600160e01b0319821663656cb66560e11b145b80611b4e57506001600160e01b0319821663152a902d60e11b145b80611b6957506001600160e01b031982166301ffc9a760e01b145b80611b8457506001600160e01b031982166380ac58cd60e01b145b80611b9f57506001600160e01b03198216635b5e139f60e01b145b8061067f5750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b6000611be3612410565b905090565b60008181526101016020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c1e82611193565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000815160001415611c6b57506000610682565b506020015190565b6000806001611c89611c848861246c565b6124ef565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ce0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611d3c576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611955576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b815160601c6000611dc6611bd9565b90508360400151600081518110611dd957fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611e155760405162461bcd60e51b8152600401610c5b90614e56565b83608001515184604001515114611e2b57600080fd5b806001600160a01b0316826001600160a01b03161480611e505750611e508282611949565b611e6c5760405162461bcd60e51b8152600401610c5b90614edd565b6000611e778561253b565b905060005b856040015151811015611eed57600086604001518281518110611e9b57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611ee457611ee4818489608001518581518110611ed757fe5b6020026020010151612782565b50600101611e7c565b50611efc84866000015161278d565b611f0e856000015186606001516127a7565b611f2085600001518660400151612996565b611f3285600001518660200151612b45565b5050505050565b60006119558383612ba9565b826001600160a01b0316611f5882611193565b6001600160a01b031614611f9d5760405162461bcd60e51b81526004018080602001828103825260298152602001806152816029913960400191505060405180910390fd5b6001600160a01b038216611fe25760405162461bcd60e51b815260040180806020018281038252602481526020018061508f6024913960400191505060405180910390fd5b611fed838383610852565b611ff8600082611be8565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b031916821790559251849392916000805160206152fa83398151915291a4505050565b600054610100900460ff168061207d575061207d612bd6565b8061208b575060005460ff16155b6120c65760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff161580156120f1576000805460ff1961ff0019909116610100171660011790555b6120fa856122c6565b612102612be7565b61210a612c88565b612112612be7565b61211a612d25565b612122612dc2565b61212a612be7565b612132612ebb565b61213a612f8a565b61214384612f8c565b61214d8787612fb1565b61215883600161309c565b61216382600161309c565b8015612175576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab782805190602001208280519060200120306121b86130fd565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102f8819055505050565b600090815261010360205260409020805460ff19166001179055565b600061223582611193565b905061224381600084610852565b61224e600083611be8565b61225782613107565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b031916905561229c8261220e565b60405182906000906001600160a01b038416906000805160206152fa833981519152908390a45050565b8051610c6e906101c8906020840190614328565b6122e5848484611f45565b6122f184848484613110565b6117eb5760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b606061067f826132c6565b60008381526101c66020526040812054905b81811015611f325760008581526101c66020526040902080546001600160a01b03861691908390811061237857fe5b6000918252602090912001546001600160a01b031614156123db5760008581526101c6602052604090208054849190839081106123b157fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612349565b6001600160a01b038116600090815261012f602052604081205460ff1680611955575061195583836134a1565b60003330141561246757600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061071b9050565b503390565b600060405180608001604052806043815260200161502660439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60006124f96134d0565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000808260600151516001600160401b038111801561255957600080fd5b50604051908082528060200260200182016040528015612583578160200160208202803683370190505b50905060005b8360600151518110156125d5576125b6846060015182815181106125a957fe5b60200260200101516134d7565b8282815181106125c257fe5b6020908102919091010152600101612589565b5060008360400151516001600160401b03811180156125f357600080fd5b5060405190808252806020026020018201604052801561261d578160200160208202803683370190505b50905060005b84604001515181101561266257612643856040015182815181106125a957fe5b82828151811061264f57fe5b6020908102919091010152600101612623565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b838110156126c65781810151838201526020016126ae565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b838110156127175781810151838201526020016126ff565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b610852838383613544565b610c6e8282604051806020016040528060008152506137c3565b6000805b825181101561294b5760006001600160a01b03168382815181106127cb57fe5b6020026020010151600001516001600160a01b03161415612833576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b82818151811061283f57fe5b6020026020010151602001516001600160601b0316600014156128a9576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b8281815181106128b557fe5b6020026020010151602001516001600160601b0316820191506101c660008581526020019081526020016000208382815181106128ee57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b03199093169290921716179055016127ab565b50612710811061298c5760405162461bcd60e51b815260040180806020018281038252602581526020018061536c6025913960400191505060405180910390fd5b6108528383613815565b60008281526101fb6020526040812090805b8351811015612ae45760006001600160a01b03168482815181106129c857fe5b6020026020010151600001516001600160a01b031614156129fb5760405162461bcd60e51b8152600401610c5b90614ea6565b838181518110612a0757fe5b6020026020010151602001516001600160601b031660001415612a3c5760405162461bcd60e51b8152600401610c5b90614e21565b82848281518110612a4957fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612ada90859083908110612ab657fe5b6020026020010151602001516001600160601b031683611d5d90919063ffffffff16565b91506001016129a8565b508061271014612b065760405162461bcd60e51b8152600401610c5b90614f2e565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612b37929190614f85565b60405180910390a150505050565b612b4e82611bbc565b612b895760405162461bcd60e51b815260040180806020018281038252602c815260200180615235602c913960400191505060405180910390fd5b60008281526101c760209081526040909120825161085292840190614328565b6001600160a01b038216600090815261012f602052604081205460ff168061195557506119558383613852565b6000612be1306138ee565b15905090565b600054610100900460ff1680612c005750612c00612bd6565b80612c0e575060005460ff16155b612c495760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612c74576000805460ff1961ff0019909116610100171660011790555b8015611034576000805461ff001916905550565b600054610100900460ff1680612ca15750612ca1612bd6565b80612caf575060005460ff16155b612cea5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612d15576000805460ff1961ff0019909116610100171660011790555b612c7463656cb66560e11b6138f4565b600054610100900460ff1680612d3e5750612d3e612bd6565b80612d4c575060005460ff16155b612d875760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612db2576000805460ff1961ff0019909116610100171660011790555b612c746301ffc9a760e01b6138f4565b600054610100900460ff1680612ddb5750612ddb612bd6565b80612de9575060005460ff16155b612e245760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612e4f576000805460ff1961ff0019909116610100171660011790555b6000612e59611bd9565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611034576000805461ff001916905550565b600054610100900460ff1680612ed45750612ed4612bd6565b80612ee2575060005460ff16155b612f1d5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612f48576000805460ff1961ff0019909116610100171660011790555b612c74604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b815250613978565b565b8051612fa09061022e906020840190614328565b5061103463e8a3d48560e01b6138f4565b600054610100900460ff1680612fca5750612fca612bd6565b80612fd8575060005460ff16155b6130135760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff1615801561303e576000805460ff1961ff0019909116610100171660011790555b82516130519060fd906020860190614328565b5081516130659060fe906020850190614328565b506130766380ac58cd60e01b6138f4565b613086635b5e139f60e01b6138f4565b8015610852576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b6000611be3613a38565b61103481613a3c565b6000613124846001600160a01b03166138ee565b156132ba57836001600160a01b031663150b7a02613140611bd9565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156131b357818101518382015260200161319b565b50505050905090810190601f1680156131e05780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561320257600080fd5b505af192505050801561322757506040513d602081101561322257600080fd5b505160015b6132a0573d808015613255576040519150601f19603f3d011682016040523d82523d6000602084013e61325a565b606091505b5080516132985760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506132be565b5060015b949350505050565b60606132d182611bbc565b61330c5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152cb602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156133a05780601f10613375576101008083540402835291602001916133a0565b820191906000526020600020905b81548152906001019060200180831161338357829003601f168201915b5050505050905060006133b16111e7565b90508051600014156133c557509050610682565b8151156133df576133d68183613a45565b92505050610682565b806133e985613c2a565b6040516020018083805190602001908083835b6020831061341b5780518252601f1990920191602091820191016133fc565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106134635780518252601f199092019160209182019101613444565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b6102f85490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b600061354f83613d04565b9050600082516041141561356a576135678284613d0e565b90505b846001600160a01b0316816001600160a01b031614611f3257613595856001600160a01b03166138ee565b1561374b5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156136045781810151838201526020016135ec565b50505050905090810190601f1680156136315780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561364f57600080fd5b505afa158015613663573d6000803e3d6000fd5b505050506040513d602081101561367957600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146137455760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561370a5781810151838201526020016136f2565b50505050905090810190601f1680156137375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611f32565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b8152600481019384528251602482015282519293928392604490920191908083836000831561370a5781810151838201526020016136f2565b6137cd8383613d8e565b6137da6000848484613110565b6108525760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613846929190614f85565b60405180910390a15050565b600061385d82611bbc565b6138985760405162461bcd60e51b815260040180806020018281038252602c8152602001806150d5602c913960400191505060405180910390fd5b60006138a383611193565b9050806001600160a01b0316846001600160a01b031614806138de5750836001600160a01b03166138d38461071e565b6001600160a01b0316145b806132be57506132be8185611949565b3b151590565b6001600160e01b03198082161415613953576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806139915750613991612bd6565b8061399f575060005460ff16155b6139da5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015613a05576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015610852576000805461ff0019169055505050565b4690565b61103481613ef4565b80518251606091849184911015613b105784846040516020018083805190602001908083835b60208310613a8a5780518252601f199092019160209182019101613a6b565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613ad25780518252601f199092019160209182019101613ab3565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050611958565b60005b8251811015613c2057828181518110613b2857fe5b602001015160f81c60f81b6001600160f81b031916828281518110613b4957fe5b01602001516001600160f81b03191614613c185785856040516020018083805190602001908083835b60208310613b915780518252601f199092019160209182019101613b72565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613bd95780518252601f199092019160209182019101613bba565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350505050611958565b600101613b13565b5092949350505050565b606081613c4f57506040805180820190915260018152600360fc1b6020820152610682565b8160005b8115613c6757600101600a82049150613c53565b6000816001600160401b0381118015613c7f57600080fd5b506040519080825280601f01601f191660200182016040528015613caa576020820181803683370190505b50859350905060001982015b8315613cfb57600a840660300160f81b82828060019003935081518110613cd957fe5b60200101906001600160f81b031916908160001a905350600a84049350613cb6565b50949350505050565b60006124f9613f34565b60008151604114613d66576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a613d8486828585613f6f565b9695505050505050565b6001600160a01b038216613de9576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff1615613e45576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b613e4e81611bbc565b15613ea0576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613eac60008383610852565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b0319169091179055610c6e82826141c5565b60008181526101c7602052604090205460026000196101006001841615020190911604156110345760008181526101c760205260408120611034916143b4565b6000611be37f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613f626141cf565b613f6a6141d5565b6141db565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613fd05760405162461bcd60e51b81526004018080602001828103825260228152602001806150b36022913960400191505060405180910390fd5b6000601e8560ff1611156140aa576004850360ff16601b1480613ff957506004850360ff16601c145b6140345760405162461bcd60e51b81526004018080602001828103825260228152602001806151ba6022913960400191505060405180910390fd5b600161403f8761423d565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614099573d6000803e3d6000fd5b505050602060405103519050614161565b8460ff16601b14806140bf57508460ff16601c145b6140fa5760405162461bcd60e51b81526004018080602001828103825260228152602001806151ba6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614154573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166141bc576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b610c6e828261428e565b60975490565b60985490565b60008383836141e8613a38565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b03831681146142fd5760405182906001600160a01b038316906000906000805160206152fa833981519152908290a481836001600160a01b0316826001600160a01b03166000805160206152fa83398151915260405160405180910390a4610852565b60405182906001600160a01b038516906000906000805160206152fa833981519152908290a4505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261435e57600085556143a4565b82601f1061437757805160ff19168380011785556143a4565b828001600101855582156143a4579182015b828111156143a4578251825591602001919060010190614389565b506143b09291506143f4565b5090565b50805460018160011615610100020316600290046000825580601f106143da5750611034565b601f01602090049060005260206000209081019061103491905b5b808211156143b057600081556001016143f5565b803561068281614fde565b600082601f830112614424578081fd5b8135602061443961443483614fc1565b614f9e565b8281528181019085830183850287018401881015614455578586fd5b855b8581101561447c57813561446a81614fde565b84529284019290840190600101614457565b5090979650505050505050565b600082601f830112614499578081fd5b813560206144a961443483614fc1565b82815281810190858301855b8581101561447c576144cc898684358b0101614599565b845292840192908401906001016144b5565b600082601f8301126144ee578081fd5b813560206144fe61443483614fc1565b8281528181019085830160408086028801850189101561451c578687fd5b865b8681101561458b5781838b031215614534578788fd5b81518281018181106001600160401b038211171561454e57fe5b8352833561455b81614fde565b8152838701356001600160601b038116811461457557898afd5b818801528552938501939181019160010161451e565b509198975050505050505050565b600082601f8301126145a9578081fd5b81356001600160401b038111156145bc57fe5b6145cf601f8201601f1916602001614f9e565b8181528460208386010111156145e3578283fd5b816020850160208301379081016020019190915292915050565b600060a0828403121561460e578081fd5b61461860a0614f9e565b90508135815260208201356001600160401b038082111561463857600080fd5b61464485838601614599565b6020840152604084013591508082111561465d57600080fd5b614669858386016144de565b6040840152606084013591508082111561468257600080fd5b61468e858386016144de565b606084015260808401359150808211156146a757600080fd5b506146b484828501614489565b60808301525092915050565b6000602082840312156146d1578081fd5b813561195581614fde565b600080604083850312156146ee578081fd5b82356146f981614fde565b9150602083013561470981614fde565b809150509250929050565b600080600060608486031215614728578081fd5b833561473381614fde565b9250602084013561474381614fde565b929592945050506040919091013590565b60008060008060808587031215614769578182fd5b843561477481614fde565b9350602085013561478481614fde565b92506040850135915060608501356001600160401b038111156147a5578182fd5b6147b187828801614599565b91505092959194509250565b600080604083850312156147cf578182fd5b82356147da81614fde565b915060208301358015158114614709578182fd5b600080600080600060a08688031215614805578283fd5b853561481081614fde565b945060208601356001600160401b0381111561482a578384fd5b61483688828901614599565b9450506040860135925060608601359150608086013560ff8116811461485a578182fd5b809150509295509295909350565b6000806040838503121561487a578182fd5b823561488581614fde565b946020939093013593505050565b6000602082840312156148a4578081fd5b81356001600160401b038111156148b9578182fd5b6132be84828501614414565b6000602082840312156148d6578081fd5b81356001600160e01b031981168114611955578182fd5b6000602082840312156148fe578081fd5b81356001600160401b03811115614913578182fd5b6132be84828501614599565b60008060008060008060c08789031215614937578384fd5b86356001600160401b038082111561494d578586fd5b6149598a838b01614599565b9750602089013591508082111561496e578586fd5b61497a8a838b01614599565b9650604089013591508082111561498f578586fd5b61499b8a838b01614599565b955060608901359150808211156149b0578283fd5b506149bd89828a01614599565b9350506149cc60808801614409565b91506149da60a08801614409565b90509295509295509295565b600080600080600080600060e0888a031215614a00578485fd5b87356001600160401b0380821115614a16578687fd5b614a228b838c01614599565b985060208a0135915080821115614a37578687fd5b614a438b838c01614599565b975060408a0135915080821115614a58578687fd5b614a648b838c01614599565b965060608a0135915080821115614a79578283fd5b50614a868a828b01614599565b945050614a9560808901614409565b9250614aa360a08901614409565b9150614ab160c08901614409565b905092959891949750929550565b600080600080600080600060e0888a031215614ad9578081fd5b87356001600160401b0380821115614aef578283fd5b614afb8b838c01614599565b985060208a0135915080821115614b10578283fd5b614b1c8b838c01614599565b975060408a0135915080821115614b31578283fd5b614b3d8b838c01614599565b965060608a0135915080821115614b52578283fd5b614b5e8b838c01614599565b955060808a0135915080821115614b73578283fd5b50614b808a828b01614414565b935050614aa360a08901614409565b60008060408385031215614ba1578182fd5b82356001600160401b03811115614bb6578283fd5b614bc2858286016145fd565b925050602083013561470981614fde565b600080600060608486031215614be7578081fd5b83356001600160401b03811115614bfc578182fd5b614c08868287016145fd565b9350506020840135614c1981614fde565b91506040840135614c2981614fde565b809150509250925092565b600060208284031215614c45578081fd5b5035919050565b600080600060608486031215614c60578081fd5b833592506020840135614c1981614fde565b60008060408385031215614c84578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614cdf57815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614ca6565b509495945050505050565b60008151808452815b81811015614d0f57602081850181015186830182015201614cf3565b81811115614d205782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614d6d90830185614cea565b8281036040840152613d848185614cea565b6001600160a01b03929092168252602082015260400190565b6000602082526119556020830184614c93565b901515815260200190565b6000602082526119556020830184614cea565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526132be6040830184614c93565b6040518181016001600160401b0381118282101715614fb957fe5b604052919050565b60006001600160401b03821115614fd457fe5b5060209081020190565b6001600160a01b038116811461103457600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e5369676e657220616e64207369676e617475726520646f206e6f74206d617463684552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220f5990a22763c1b208eac60f3e6497209cfc0e77387e5cf0f890a08218d603c9464736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "addMinter(address)": { + "details": "Add `minter` to the list of allowed minters." + }, + "addMinters(address[])": { + "details": "Add `minters` to the list of allowed minters." + }, + "approve(address,uint256)": { + "details": "See {IERC721-approve}." + }, + "balanceOf(address)": { + "details": "See {IERC721-balanceOf}." + }, + "baseURI()": { + "details": "Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID." + }, + "burn(uint256)": { + "details": "Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator." + }, + "getApproved(uint256)": { + "details": "See {IERC721-getApproved}." + }, + "isMinter(address)": { + "details": "Returns `true` if `account` has been granted to minters." + }, + "name()": { + "details": "See {IERC721Metadata-name}." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "ownerOf(uint256)": { + "details": "See {IERC721-ownerOf}." + }, + "removeMinter(address)": { + "details": "Revoke `_minter` from the list of allowed minters." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "safeTransferFrom(address,address,uint256)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,bytes)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC721-setApprovalForAll}." + }, + "symbol()": { + "details": "See {IERC721Metadata-symbol}." + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC721-transferFrom}." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 307, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 364, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 138, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "151", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "152", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "153", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26448, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "203", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 27665, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_name", + "offset": 0, + "slot": "253", + "type": "t_string_storage" + }, + { + "astId": 27667, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_symbol", + "offset": 0, + "slot": "254", + "type": "t_string_storage" + }, + { + "astId": 27671, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_owners", + "offset": 0, + "slot": "255", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 27675, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_balances", + "offset": 0, + "slot": "256", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 27679, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_tokenApprovals", + "offset": 0, + "slot": "257", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 27685, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_operatorApprovals", + "offset": 0, + "slot": "258", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 27695, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_burnedTokens", + "offset": 0, + "slot": "259", + "type": "t_mapping(t_uint256,t_bool)" + }, + { + "astId": 28474, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "260", + "type": "t_array(t_uint256)43_storage" + }, + { + "astId": 26691, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "defaultApprovals", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 26762, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26681, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "354", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22478, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "404", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 21496, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "royalties", + "offset": 0, + "slot": "454", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" + }, + { + "astId": 27499, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_tokenURIs", + "offset": 0, + "slot": "455", + "type": "t_mapping(t_uint256,t_string_storage)" + }, + { + "astId": 27501, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_baseURI", + "offset": 0, + "slot": "456", + "type": "t_string_storage" + }, + { + "astId": 27636, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "457", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26805, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "creators", + "offset": 0, + "slot": "507", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" + }, + { + "astId": 27230, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "508", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22321, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "contractURI", + "offset": 0, + "slot": "558", + "type": "t_string_storage" + }, + { + "astId": 22353, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "559", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 26595, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "608", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22359, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "isPrivate", + "offset": 0, + "slot": "658", + "type": "t_bool" + }, + { + "astId": 22363, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "659", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 22488, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_minters", + "offset": 0, + "slot": "708", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 22605, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "709", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 19515, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "nonces", + "offset": 0, + "slot": "759", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 19517, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "domainSeparator", + "offset": 0, + "slot": "760", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)19269_storage)dyn_storage": { + "base": "t_struct(Part)19269_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)43_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[43]", + "numberOfBytes": "1376" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_address)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct LibPart.Part[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(Part)19269_storage)dyn_storage" + }, + "t_mapping(t_uint256,t_bool)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_string_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => string)", + "numberOfBytes": "32", + "value": "t_string_storage" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Part)19269_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 19266, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 19268, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Proxy.json new file mode 100644 index 000000000..b51dd411b --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Proxy.json @@ -0,0 +1,301 @@ +{ + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1123036", + "logsBloom": "0x00000400000800000000000000000000400000000400800010800000000000000000000000000000000000000001000000000000000440000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000408000002800000000000000000000000000000000000100004000000000000000000000000000100000020000300000000000001000000000000000400000040000000000020000000000000000060000000000000000000000000000000000000000001000000", + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e", + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000003dc700b8bd71fcd8b80914e10b561c15816f71ac" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + }, + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + }, + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + }, + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + }, + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + }, + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" + ], + "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 5, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + }, + { + "transactionIndex": 1, + "blockNumber": 4426312, + "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + } + ], + "blockNumber": 4426312, + "cumulativeGasUsed": "1178087", + "status": 1, + "byzantium": true + }, + "args": [ + "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMinimalBeaconMeta.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMinimalBeaconMeta.json new file mode 100644 index 000000000..1119ee7ac --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMinimalBeaconMeta.json @@ -0,0 +1,219 @@ +{ + "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x541b70be6a41d1451158e26b31d99d15e7868eefe442fa68677eb948a44508d4", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "394691", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000004001000000000000004000004000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000200000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xd37050c7b6f0ba10d0abc904859d2160dea560982b65d3db594d1068dab36388", + "transactionHash": "0x541b70be6a41d1451158e26b31d99d15e7868eefe442fa68677eb948a44508d4", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426315, + "transactionHash": "0x541b70be6a41d1451158e26b31d99d15e7868eefe442fa68677eb948a44508d4", + "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xd37050c7b6f0ba10d0abc904859d2160dea560982b65d3db594d1068dab36388" + }, + { + "transactionIndex": 1, + "blockNumber": 4426315, + "transactionHash": "0x541b70be6a41d1451158e26b31d99d15e7868eefe442fa68677eb948a44508d4", + "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xd37050c7b6f0ba10d0abc904859d2160dea560982b65d3db594d1068dab36388" + } + ], + "blockNumber": 4426315, + "cumulativeGasUsed": "438554", + "status": 1, + "byzantium": true + }, + "args": [ + "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\":\"ERC721RaribleMinimalBeaconMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\\n transferOwnership(initialOwner);\\n }\\n}\\n\",\"keccak256\":\"0xca4a880219e74fc2d13c800e9917a3a7d0b05e3843410e379bc1ce7c86bc3de4\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405161072d38038061072d8339818101604052604081101561003357600080fd5b508051602090910151816000610047610099565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602061070d833981519152908290a3506100888161009d565b506100928161010d565b5050610224565b3390565b6100b08161020f60201b6103821760201c565b6100eb5760405162461bcd60e51b81526004018080602001828103825260338152602001806106da6033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610115610099565b6001600160a01b0316610126610215565b6001600160a01b031614610181576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166101c65760405162461bcd60e51b81526004018080602001828103825260268152602001806106b46026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061070d83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b6000546001600160a01b031690565b610481806102336000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212208dfb6c9a3280e9711a17e61af949448fbab9f4b715e50bfe015711eabdbf2fcd64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163748be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212208dfb6c9a3280e9711a17e61af949448fbab9f4b715e50bfe015711eabdbf2fcd64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "implementation()": { + "details": "Returns the current implementation address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeTo(address)": { + "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol:ERC721RaribleMinimalBeaconMeta", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6517, + "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol:ERC721RaribleMinimalBeaconMeta", + "label": "_implementation", + "offset": 0, + "slot": "1", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2.json new file mode 100644 index 000000000..5a9c06761 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2.json @@ -0,0 +1,1361 @@ +{ + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "BuyerFeeAmountChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "Cancel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldValue", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newValue", + "type": "address" + } + ], + "name": "FeeReceiverChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "leftHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "rightHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newLeftFill", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newRightFill", + "type": "uint256" + } + ], + "name": "Match", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "MatcherChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "ProxyChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "SellerFeeAmountChanged", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + } + ], + "name": "__ExchangeV2_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "assetTypes", + "type": "bytes4[]" + }, + { + "internalType": "address[]", + "name": "proxies", + "type": "address[]" + }, + { + "internalType": "bytes4", + "name": "assetMatcherType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "assetMatcher", + "type": "address" + } + ], + "name": "__ExchangeV2_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "order", + "type": "tuple" + } + ], + "name": "cancel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "bidMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "bidPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "bidDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "bidData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "bidSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.AcceptBid", + "name": "direct", + "type": "tuple" + } + ], + "name": "directAcceptBid", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sellOrderMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "sellOrderDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sellOrderSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "buyOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "buyOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "buyOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.Purchase", + "name": "direct", + "type": "tuple" + } + ], + "name": "directPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "fills", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderLeft", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureLeft", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderRight", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureRight", + "type": "bytes" + } + ], + "name": "matchOrders", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFee", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "sellerAmount", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "royaltiesRegistry", + "outputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setAllProtocolFeeData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "setAssetMatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeBuyerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + } + ], + "name": "setPrtocolFeeReceiver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeSellerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesRegistry", + "type": "address" + } + ], + "name": "setRoyaltiesRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "setTransferProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1049680", + "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000000000000000000000000000400000000000000000000000800000000000000010000000020000010000000000000042004000000000000000000200020000000000000008004002008000000000000000000000004000000000010001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000002000000004000000000000000a0000008000000000001000000000000000400000000000000000020000000000000000000000000000000000000020000000000000000300000000200", + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594", + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000006c619e55e9947051e98570a36044c31c4eb0736d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + }, + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + }, + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0xd8f960c100000000000000000000000000000000000000000000000000000000" + ], + "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", + "logIndex": 2, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + }, + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", + "logIndex": 3, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + }, + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", + "0xf63c282500000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", + "logIndex": 4, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + }, + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 5, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + }, + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + } + ], + "blockNumber": 4426288, + "cumulativeGasUsed": "1101943", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "__ExchangeV2_init_proxy", + "args": [ + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", + 0, + "0x0000000000000000000000000000000000000000", + "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893", + [ + "0xd8f960c1", + "0x1cdfaa40" + ], + [ + "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2" + ], + "0xf63c2825", + "0xc4F5FCD96e3b37A31f871F0968206F47294a4471" + ] + }, + "implementation": "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Implementation.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Implementation.json new file mode 100644 index 000000000..5247abade --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Implementation.json @@ -0,0 +1,1387 @@ +{ + "address": "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "BuyerFeeAmountChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "Cancel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldValue", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newValue", + "type": "address" + } + ], + "name": "FeeReceiverChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "leftHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "rightHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newLeftFill", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newRightFill", + "type": "uint256" + } + ], + "name": "Match", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "MatcherChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "ProxyChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "SellerFeeAmountChanged", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + } + ], + "name": "__ExchangeV2_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "assetTypes", + "type": "bytes4[]" + }, + { + "internalType": "address[]", + "name": "proxies", + "type": "address[]" + }, + { + "internalType": "bytes4", + "name": "assetMatcherType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "assetMatcher", + "type": "address" + } + ], + "name": "__ExchangeV2_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "order", + "type": "tuple" + } + ], + "name": "cancel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "bidMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "bidPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "bidDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "bidData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "bidSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.AcceptBid", + "name": "direct", + "type": "tuple" + } + ], + "name": "directAcceptBid", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sellOrderMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "sellOrderDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sellOrderSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "buyOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "buyOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "buyOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.Purchase", + "name": "direct", + "type": "tuple" + } + ], + "name": "directPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "fills", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderLeft", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureLeft", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderRight", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureRight", + "type": "bytes" + } + ], + "name": "matchOrders", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFee", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "sellerAmount", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "royaltiesRegistry", + "outputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setAllProtocolFeeData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "setAssetMatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeBuyerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + } + ], + "name": "setPrtocolFeeReceiver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeSellerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesRegistry", + "type": "address" + } + ], + "name": "setRoyaltiesRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "setTransferProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x7746b5dbd81ec0122b7417521e197699c62f1761ab1554d00c5abd9b80e78137", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "5353145", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xb91bc5995218387dec46b7252aef9661f664ca9dd8c2c88d6a305a581f9311da", + "transactionHash": "0x7746b5dbd81ec0122b7417521e197699c62f1761ab1554d00c5abd9b80e78137", + "logs": [], + "blockNumber": 4426286, + "cumulativeGasUsed": "5397020", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"BuyerFeeAmountChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"Cancel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"}],\"name\":\"FeeReceiverChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leftHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"rightHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLeftFill\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRightFill\",\"type\":\"uint256\"}],\"name\":\"Match\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"MatcherChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"SellerFeeAmountChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_erc20TransferProxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newDefaultFeeReceiver\",\"type\":\"address\"},{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesProvider\",\"type\":\"address\"}],\"name\":\"__ExchangeV2_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_erc20TransferProxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newDefaultFeeReceiver\",\"type\":\"address\"},{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"assetTypes\",\"type\":\"bytes4[]\"},{\"internalType\":\"address[]\",\"name\":\"proxies\",\"type\":\"address[]\"},{\"internalType\":\"bytes4\",\"name\":\"assetMatcherType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"assetMatcher\",\"type\":\"address\"}],\"name\":\"__ExchangeV2_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"bidMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"bidPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"bidDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"bidData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bidSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.AcceptBid\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directAcceptBid\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sellOrderMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"sellOrderDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"buyOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.Purchase\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"fills\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderLeft\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureLeft\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderRight\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureRight\",\"type\":\"bytes\"}],\"name\":\"matchOrders\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"sellerAmount\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"royaltiesRegistry\",\"outputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setAllProtocolFeeData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"setAssetMatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeBuyerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"setPrtocolFeeReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeSellerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesRegistry\",\"type\":\"address\"}],\"name\":\"setRoyaltiesRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"setTransferProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\",\"params\":{\"direct\":\"struct with parameters for accept bid operation\"}},\"directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\":\"ExchangeMetaV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function _setAssetMatcher(bytes4 assetType, address matcher) internal {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x8fceb04eec1c1b32bea097a019b57e9422c31fa2e020e9957db91d5b03edb1bb\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __OrderValidator_init_unchained();\\n __MetaTransaction_init_unchained(\\\"ExchangeMetaV2\\\", \\\"1\\\");\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n }\\n\\n function __ExchangeV2_init_proxy(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider,\\n address _initialOwner,\\n bytes4[] memory assetTypes, \\n address[] memory proxies,\\n bytes4 assetMatcherType,\\n address assetMatcher\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __OrderValidator_init_unchained();\\n __MetaTransaction_init_unchained(\\\"ExchangeMetaV2\\\", \\\"1\\\");\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n for (uint i = 0; i < assetTypes.length; i++) {\\n _setTransferProxy(assetTypes[i], proxies[i]);\\n }\\n _setAssetMatcher(assetMatcherType, assetMatcher);\\n transferOwnership(_initialOwner);\\n }\\n\\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\\n return super._msgSender();\\n }\\n\\n}\\n\",\"keccak256\":\"0xe555b85b81c8f5d3aed6aeb629444a9a0794b6da5c28c5d58252e68d71f20282\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\\n using SafeMath for uint256;\\n\\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\\\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\\\"));\\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\\\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\\\");\\n\\n mapping(address => uint256) private nonces;\\n bytes32 internal domainSeparator;\\n\\n /*\\n * Meta transaction structure.\\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\\n * He should call the desired function directly in that case.\\n */\\n struct MetaTransaction {\\n uint256 nonce;\\n address from;\\n bytes functionSignature;\\n }\\n\\n /*\\n * Domain structure.\\n * Data(information to for making metaTransaction method uniq.) about method and contract\\n */\\n struct EIP712Domain {\\n string name;\\n string version;\\n address verifyingContract;\\n bytes32 salt;\\n }\\n\\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\\n\\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\\n domainSeparator = keccak256(abi.encode(\\n EIP712_DOMAIN_TYPEHASH,\\n keccak256(bytes(name)),\\n keccak256(bytes(version)),\\n address(this),\\n getSalt()\\n ));\\n }\\n\\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\\n if (inBytes.length == 0) {\\n return 0x0;\\n }\\n\\n assembly {\\n outBytes4 := mload(add(inBytes, 32))\\n }\\n }\\n\\n function executeMetaTransaction(address userAddress,\\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\\n require(destinationFunctionSig != msg.sig, \\\"Wrong functionSignature\\\");\\n MetaTransaction memory metaTx = MetaTransaction({\\n nonce : nonces[userAddress],\\n from : userAddress,\\n functionSignature : functionSignature\\n });\\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \\\"Signer and signature do not match\\\");\\n nonces[userAddress] = nonces[userAddress].add(1);\\n // Append userAddress at the end to extract it from calling context\\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\\n\\n require(success, \\\"Function call not successful\\\");\\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\\n return returnData;\\n }\\n\\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n META_TRANSACTION_TYPEHASH,\\n metaTx.nonce,\\n metaTx.from,\\n keccak256(metaTx.functionSignature)\\n ));\\n }\\n\\n function getNonce(address user) external view returns (uint256 nonce) {\\n nonce = nonces[user];\\n }\\n\\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\\n require(signer != address(0), \\\"Invalid signature\\\");\\n return signer == user;\\n }\\n\\n function _msgSender() internal view virtual override returns (address payable sender) {\\n if (msg.sender == address(this)) {\\n bytes memory array = msg.data;\\n uint256 index = msg.data.length;\\n assembly {\\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\\n }\\n } else {\\n sender = msg.sender;\\n }\\n return sender;\\n }\\n\\n function getSalt() internal pure returns (bytes32) {\\n return bytes32(getChainID());\\n }\\n\\n function getChainID() internal pure returns (uint256 id) {\\n assembly {\\n id := chainid()\\n }\\n }\\n\\n function getDomainSeparator() private view returns (bytes32) {\\n return domainSeparator;\\n }\\n\\n /**\\n * Accept message hash and returns hash message in EIP712 compatible form\\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\\n * https://eips.ethereum.org/EIPS/eip-712\\n * \\\"\\\\\\\\x19\\\" makes the encoding deterministic\\n * \\\"\\\\\\\\x01\\\" is the version byte to make it compatible to EIP-191\\n */\\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", getDomainSeparator(), messageHash));\\n }\\n\\n /**\\n * @dev verifies the call result and bubbles up revert reason for failed calls\\n *\\n * @param success : outcome of forwarded call\\n * @param returndata : returned data from the frowarded call\\n * @param errorMessage : fallback error message to show\\n */\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\\n if (!success) {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x58924a44eea8720bdcfb32f12d3374deac9605a3b75cb8872907856d526bde10\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function _setTransferProxy(bytes4 assetType, address proxy) internal {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xea639616c66696b5ae9b278d3c6c9a85839bb5e815a4db046b4fd0225cd86625\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50615df280620000216000396000f3fe60806040526004361061012a5760003560e01c8063715018a6116100ab578063bc158c2d1161006f578063bc158c2d146102fd578063d6ca6ab71461031d578063e2864fe31461033d578063e99a3f801461035d578063eae3ad6f14610370578063f2fde38b146103905761012a565b8063715018a61461026f5780638da5cb5b14610284578063b0e21e8a14610299578063b39deb46146102bd578063b74c8e9a146102dd5761012a565b80632d0335ab116100f25780632d0335ab146101da57806330c642f1146101fa5780633be899221461021a57806367d49a3b1461023a5780636d8f06941461024d5761012a565b80630c53c51c1461012f5780630d5f7d35146101585780631372a6251461016d57806320158c441461018d5780632bed54d6146101ba575b600080fd5b61014261013d36600461519d565b6103b0565b60405161014f9190615731565b60405180910390f35b61016b610166366004615305565b610729565b005b34801561017957600080fd5b5061016b610188366004615056565b610a46565b34801561019957600080fd5b506101ad6101a8366004615299565b610b63565b60405161014f919061570d565b3480156101c657600080fd5b5061016b6101d53660046150bd565b610b76565b3480156101e657600080fd5b506101ad6101f5366004614e01565b610cf0565b34801561020657600080fd5b5061016b6102153660046152cd565b610d0c565b34801561022657600080fd5b5061016b610235366004614e01565b610ddc565b61016b610248366004615305565b610e61565b34801561025957600080fd5b50610262611141565b60405161014f9190615641565b34801561027b57600080fd5b5061016b611151565b34801561029057600080fd5b506102626111fd565b3480156102a557600080fd5b506102ae61120d565b60405161014f939291906156e4565b3480156102c957600080fd5b5061016b6102d83660046152cd565b611238565b3480156102e957600080fd5b5061016b6102f8366004615209565b6112fc565b34801561030957600080fd5b5061016b610318366004614e01565b61137e565b34801561032957600080fd5b5061016b6103383660046155d3565b61144b565b34801561034957600080fd5b5061016b6103583660046154fa565b611525565b61016b61036b36600461552c565b6115e6565b34801561037c57600080fd5b5061016b61038b3660046155d3565b6115fc565b34801561039c57600080fd5b5061016b6103ab366004614e01565b6116d3565b606060006103bd866117d6565b90506000356001600160e01b03199081169082161415610424576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b038916600081815261019360209081529084902054835282015290810187905261046288828888886117f6565b61049d5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d9c6021913960400191505060405180910390fd5b6001600160a01b038816600090815261019360205260409020546104c29060016118e0565b61019360008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b6020831061052d5780518252601f19909201916020918201910161050e565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106105a35780518252601f199092019160209182019101610584565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610605576040519150601f19603f3d011682016040523d82523d6000602084013e61060a565b606091505b509150915081610661576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106e05781810151838201526020016106c8565b50505050905090810190601f16801561070d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b600061074361073e60c0840160a08501614e01565b611943565b604080516101208101909152909150600090806107636020860186614e01565b6001600160a01b031681526020016040518060400160405280604051806040016040528088604001602081019061079a91906152b1565b6001600160e01b03191681526020016107b660608a018a615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a083015201610859610140860161012087016152b1565b6001600160e01b0319168152602001610876610140860186615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815180830183528781526101808901356020828101919091528201528082018390528151608081018352949550919391925060608084019291829182820191829161090a91908c01908c016152b1565b6001600160e01b031916815260200161092660608b018b615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528201819052604082018190526060820152608001610995610140870161012088016152b1565b6001600160e01b03191681526020016109b26101c0870187615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610a36826109fc610160870187615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119a692505050565b610a4082826119bd565b50505050565b600054610100900460ff1680610a5f5750610a5f611c0f565b80610a6d575060005460ff16155b610aa85760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad3576000805460ff1961ff0019909116610100171660011790555b610adb611c20565b610ae3611cc2565b610aeb611dbb565b610b346040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611e8b565b610b3e8686611f1b565b610b49848484611fc5565b8015610b5b576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b600054610100900460ff1680610b8f5750610b8f611c0f565b80610b9d575060005460ff16155b610bd85760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015610c03576000805460ff1961ff0019909116610100171660011790555b610c0b611c20565b610c13611cc2565b610c1b611dbb565b610c646040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611e8b565b610c6e8b8b611f1b565b610c79898989611fc5565b60005b8551811015610cbd57610cb5868281518110610c9457fe5b6020026020010151868381518110610ca857fe5b6020026020010151610d6e565b600101610c7c565b50610cc8838361129a565b610cd1866116d3565b8015610ce3576000805461ff00191690555b5050505050505050505050565b6001600160a01b03166000908152610193602052604090205490565b610d14612085565b6001600160a01b0316610d256111fd565b6001600160a01b031614610d6e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c315359390610dd0908490615641565b60405180910390a25050565b610de4612085565b6001600160a01b0316610df56111fd565b6001600160a01b031614610e3e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e7661073e60c0840160a08501614e01565b60408051610120810190915290915060009080610e966020860186614e01565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b0316815260200160405180604001604052806040518060400160405280886040016020810190610efb91906152b1565b6001600160e01b0319168152602001610f1760608a018a615b36565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e085013560408201526101008501356060820152608001610f92610140860161012087016152b1565b6001600160e01b0319168152602001610faf610140860186615b36565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505060408051610120810182528281528151608081018352949550919391925060208301919081908181019081906110219060608c01908c016152b1565b6001600160e01b031916815260200161103d60608b018b615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c0016110d0610140870161012088016152b1565b6001600160e01b03191681526020016110ed6101c0870187615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050611137826109fc610160870187615b36565b610a4081836119bd565b610162546001600160a01b031681565b611159612085565b6001600160a01b031661116a6111fd565b6001600160a01b0316146111b3576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b03165b90565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b611240612085565b6001600160a01b03166112516111fd565b6001600160a01b03161461129a576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f90610dd0908490615641565b611304612085565b6001600160a01b03166113156111fd565b6001600160a01b03161461135e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6113678361137e565b6113708261144b565b611379816115fc565b505050565b611386612085565b6001600160a01b03166113976111fd565b6001600160a01b0316146113e0576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd0391611420916001600160a01b03909116908490615655565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b611453612085565b6001600160a01b03166114646111fd565b6001600160a01b0316146114ad576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e916114f291600160a01b90910465ffffffffffff16908490615b1d565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316611538612085565b6001600160a01b0316146115675760405162461bcd60e51b815260040161155e90615a8d565b60405180910390fd5b60808101516115885760405162461bcd60e51b815260040161155e9061581f565b600061159382612094565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a906115da90839061570d565b60405180910390a15050565b6115f28484848461221c565b610a4084836119bd565b611604612085565b6001600160a01b03166116156111fd565b6001600160a01b03161461165e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916116a391600160d01b90910465ffffffffffff16908490615b1d565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b6116db612085565b6001600160a01b03166116ec6111fd565b6001600160a01b031614611735576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160a01b03811661177a5760405162461bcd60e51b8152600401808060200182810382526026815260200180615c766026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008151600014156117ea575060006117f1565b5060208101515b919050565b600080600161180c611807886122e8565b61236b565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611863573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118bf576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b60008282018381101561193a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b61194b614930565b611953614930565b6001600160a01b038316611970576355575f5d60e11b815261193d565b6322ba176160e21b815260405161198b908490602001615641565b60408051601f19818403018152919052602082015292915050565b6119af826123b7565b6119b98282612481565b5050565b6000806119ca8484612730565b9150915060008060006119dd87876127c9565b925092509250600080611b366040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b0316815250611b318a600001518a60000151612878565b612949565b885191935091506001600160e01b0319166355575f5d60e11b1415611bb55785516001600160e01b0319166355575f5d60e11b1415611b7457600080fd5b81341015611b945760405162461bcd60e51b815260040161155e90615a65565b81341115611bb057611bb0611ba93484612ac0565b3390612b1d565b611c04565b85516001600160e01b0319166355575f5d60e11b1415611c045780341015611bef5760405162461bcd60e51b815260040161155e90615a65565b80341115611c0457611c04611ba93483612ac0565b505050505050505050565b6000611c1a30612bb5565b15905090565b600054610100900460ff1680611c395750611c39611c0f565b80611c47575060005460ff16155b611c825760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611cad576000805460ff1961ff0019909116610100171660011790555b8015611cbf576000805461ff00191690555b50565b600054610100900460ff1680611cdb5750611cdb611c0f565b80611ce9575060005460ff16155b611d245760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611d4f576000805460ff1961ff0019909116610100171660011790555b6000611d59612085565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611cbf576000805461ff001916905550565b600054610100900460ff1680611dd45750611dd4611c0f565b80611de2575060005460ff16155b611e1d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611e48576000805460ff1961ff0019909116610100171660011790555b611cad6040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b815250612bbb565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030611ec5612c7b565b60405160200180868152602001858152602001848152602001836001600160a01b031681526020018281526020019550505050505060405160208183030381529060405280519060200120610194819055505050565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff1680611fde5750611fde611c0f565b80611fec575060005460ff16155b6120275760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015612052576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610a40576000805461ff001916905550505050565b600061208f612c85565b905090565b60e08101516000906001600160e01b031916632611a13360e11b14806120c8575060e08201516001600160e01b0319908116145b1561213d5781516020830151516120de90612ce1565b6060840151516120ed90612ce1565b846080015160405160200180856001600160a01b031681526020018481526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506117f1565b815160208301515161214e90612ce1565b60608401515161215d90612ce1565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121c95781810151838201526020016121b1565b50505050905090810190601f1680156121f65780820380516001836020036101000a031916815260200191505b5096505050505050506040516020818303038152906040528051906020012090506117f1565b61222684846119a6565b61223082826119a6565b60408401516001600160a01b03161561228c5781516001600160a01b03161561228c5783604001516001600160a01b031682600001516001600160a01b03161461228c5760405162461bcd60e51b815260040161155e90615a22565b60408201516001600160a01b031615610a405783516001600160a01b031615610a405783600001516001600160a01b031682604001516001600160a01b031614610a405760405162461bcd60e51b815260040161155e90615891565b6000604051806080016040528060438152602001615c3360439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612375612d4b565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60a081015115806123cb5750428160a00151105b61241c576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c081015115806124305750428160c00151115b611cbf576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b60808201516125065781516001600160a01b0316156125015781516001600160a01b03166124ad612085565b6001600160a01b031614612501576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b6119b9565b81516001600160a01b0316612519612085565b6001600160a01b0316146119b957600061253283612d52565b905061254a83600001516001600160a01b0316612bb5565b15612686578251630b135d3f60e11b906001600160a01b0316631626ba7e61257184612e42565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156125c45781810151838201526020016125ac565b50505050905090810190601f1680156125f15780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561260f57600080fd5b505afa158015612623573d6000803e3d6000fd5b505050506040513d602081101561263957600080fd5b50516001600160e01b031916146126815760405162461bcd60e51b815260040180806020018281038252602b815260200180615ce0602b913960400191505060405180910390fd5b611379565b82516001600160a01b03166126a48361269e84612e42565b90612e4c565b6001600160a01b0316146126e95760405162461bcd60e51b8152600401808060200182810382526022815260200180615cbe6022913960400191505060405180910390fd5b82516001600160a01b0316611379576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b612738614930565b612740614930565b6020840151516060840151516127569190612ecc565b80519092506001600160e01b0319166127815760405162461bcd60e51b815260040161155e906159f6565b6060840151516020840151516127979190612ecc565b80519091506001600160e01b0319166127c25760405162461bcd60e51b815260040161155e906159f6565b9250929050565b6127d1614948565b6127d9614948565b6127e161496b565b60006127ec86612094565b905060006127f986612094565b90506000612805612085565b88519091506001600160a01b0316612824576001600160a01b03811688525b86516001600160a01b0316612840576001600160a01b03811687525b61284988612f0c565b955061285487612f0c565b945061286c888885858a604001518a60400151613005565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b141561289b5750600161193d565b6001600160e01b031982166355575f5d60e11b14156128bc5750600261193d565b6001600160e01b031983166322ba176160e21b14156128dd5750600161193d565b6001600160e01b031982166322ba176160e21b14156128fe5750600261193d565b6001600160e01b0319831663025ceed960e61b141561291f5750600161193d565b6001600160e01b0319821663025ceed960e61b14156129405750600261193d565b50600092915050565b8251602090810151835190910151600183600281111561296557fe5b14156129e75760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526129b790869086906131c0565b91506129e284600001516000015185600001516020015186608001518860200151886060015161343a565b612ab8565b60028360028111156129f557fe5b1415612a725760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b9091041691810191909152612a4790859087906131c0565b90506129e285600001516000015186600001516020015187608001518760200151896060015161343a565b845180516020918201516080880151928701516060890151612a9594919061343a565b835180516020918201516080870151928801516060880151612ab894919061343a565b935093915050565b600082821115612b17576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612b68576040519150601f19603f3d011682016040523d82523d6000602084013e612b6d565b606091505b5050905080611379576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff1680612bd45750612bd4611c0f565b80612be2575060005460ff16155b612c1d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015612c48576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca558015611379576000805461ff0019169055505050565b600061208f6135be565b600033301415612cdc57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061120a9050565b503390565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b6101945490565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d8260000151612d8784602001516135c2565b8460400151612d9986606001516135c2565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b6000612375613632565b60008151604114612ea4576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612ec28682858561366d565b9695505050505050565b612ed4614930565b6000612ee084846138c3565b80519091506001600160e01b031916612f0557612efd83856138c3565b91505061193d565b905061193d565b612f14614948565b60e08201516001600160e01b031916632611a13360e11b1415612f60576000826101000151806020019051810190612f4c91906153c2565b805183526020908101519083015250612fec565b60e08201516001600160e01b0319166323d235ef60e01b1415612fb8576000826101000151806020019051810190612f98919061544e565b805183526020808201519084015260409081015115159083015250612fec565b60e08201516001600160e01b03199081161415612fd457612fec565b60405162461bcd60e51b815260040161155e90615988565b8051516117f1578151612ffe90613adf565b8152919050565b61300d61496b565b600061301d886080015187613b7a565b9050600061302f886080015187613b7a565b905060006130418a8a85858a8a613b9f565b90508960200151602001516000141580613062575060608901516020015115155b156130855780516130855760405162461bcd60e51b815260040161155e90615901565b60608a0151602001511515806130a157506020808a0151015115155b156130ca5760008160200151116130ca5760405162461bcd60e51b815260040161155e90615901565b60808a01511561311d5785156130fc5780516130e79084906118e0565b600089815261012f602052604090205561311d565b602081015161310c9084906118e0565b600089815261012f60205260409020555b60808901511561317057841561315257602081015161313d9083906118e0565b600088815261012f6020526040902055613170565b805161315f9083906118e0565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c450926131ab928c928c929190615716565b60405180910390a19998505050505050505050565b60006131d9846000015160200151838660400151613c38565b90506000613203828660000151602001518760800151868960000151600001518a60600151613ce5565b8551805186515160208089015193015160808a015160608b0151959650613231959394929387929190613d42565b9050846040015151600114801561324d57508360400151516001145b80156132a25750846040015160008151811061326557fe5b6020026020010151600001516001600160a01b0316846040015160008151811061328b57fe5b6020026020010151600001516001600160a01b0316145b156133b857604080516001808252818301909252600091816020015b6132c6614985565b8152602001906001900390816132be57905050905084604001516000815181106132ec57fe5b6020026020010151600001518160008151811061330557fe5b60209081029190910101516001600160a01b0390911690526040860151805160009061332d57fe5b602002602001015160200151856040015160008151811061334a57fe5b602002602001015160200151018160008151811061336457fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250506133ae86600001516000015183886000015160200151848a608001518b60600151613e47565b5091506134119050565b6133e285600001516000015182876000015160200151886040015189608001518a60600151613e47565b50855180516020909101516040870151608089015160608a015194955061340d948693929190613e47565b5090505b6134328560000151600001518287608001518760200151896060015161343a565b509392505050565b600082511161345b5760405162461bcd60e51b815260040161155e9061584d565b600084815b600185510381101561352a5760006134a186838151811061347d57fe5b6020026020010151602001516001600160601b031689613efc90919063ffffffff16565b90506134d68683815181106134b257fe5b6020026020010151602001516001600160601b0316856118e090919063ffffffff16565b93508015613521576134e88382612ac0565b925061352160405180604001604052808b8152602001838152508888858151811061350f57fe5b60200260200101516000015188613f14565b50600101613460565b5060008460018651038151811061353d57fe5b6020026020010151905061356781602001516001600160601b0316846118e090919063ffffffff16565b9250826127101461358a5760405162461bcd60e51b815260040161155e906159bf565b81156135b4576135b460405180604001604052808a81526020018481525087836000015187613f14565b5050505050505050565b4690565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b086135f28360000151612ce1565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b600061208f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61366061431c565b613668614322565b614328565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156136ce5760405162461bcd60e51b8152600401808060200182810382526022815260200180615c9c6022913960400191505060405180910390fd5b6000601e8560ff1611156137a8576004850360ff16601b14806136f757506004850360ff16601c145b6137325760405162461bcd60e51b8152600401808060200182810382526022815260200180615d396022913960400191505060405180910390fd5b600161373d8761438a565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613797573d6000803e3d6000fd5b50505060206040510351905061385f565b8460ff16601b14806137bd57508460ff16601c145b6137f85760405162461bcd60e51b8152600401808060200182810382526022815260200180615d396022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613852573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166138ba576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6138cb614930565b825182516001600160e01b031982166355575f5d60e11b1415613936576001600160e01b031981166355575f5d60e11b141561390b57849250505061193d565b505060408051808201825260008082528251602081810190945290815291810191909152905061193d565b6001600160e01b031982166322ba176160e21b141561397b576001600160e01b031981166322ba176160e21b141561390b5761397285856143db565b9250505061193d565b6001600160e01b031982166339d690a360e11b14156139b7576001600160e01b031981166339d690a360e11b141561390b5761397285856143db565b6001600160e01b0319821663025ceed960e61b14156139f3576001600160e01b0319811663025ceed960e61b141561390b5761397285856143db565b6001600160e01b031982166000908152606560205260409020546001600160a01b03168015613aa8576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb090613a4a9089908990600401615ab2565b60006040518083038186803b158015613a6257600080fd5b505afa158015613a76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a9e9190810190615337565b935050505061193d565b6001600160e01b03198381169083161415613ac757613a9e86866143db565b60405162461bcd60e51b815260040161155e906157b1565b60408051600180825281830190925260609160009190816020015b613b02614985565b815260200190600190039081613afa5790505090508281600081518110613b2557fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505061271081600081518110613b5957fe5b6020908102919091018101516001600160601b039092169101529050919050565b600082613b895750600061193d565b50600090815261012f6020526040902054919050565b613ba761496b565b600080613bb5898887614438565b91509150600080613bc78a8988614438565b9150915083811180613be157508381148015613be1575083155b15613c0d57613c0284848c60200151602001518d60600151602001516144b1565b945050505050612ec2565b613c298b60200151602001518c60600151602001518484614536565b9b9a5050505050505050505050565b602082015160009065ffffffffffff16815b8351811015613cc557612710848281518110613c6257fe5b6020026020010151602001516001600160601b03161115613c955760405162461bcd60e51b815260040161155e90615959565b838181518110613ca157fe5b6020026020010151602001516001600160601b031682019150806001019050613c4a565b50613cda613cd38683613efc565b86906118e0565b9150505b9392505050565b6000806000613d078989886040015189602001510165ffffffffffff166145bc565b90925090508015613d3657613d3660405180604001604052808781526020018381525088886000015187613f14565b50979650505050505050565b600080613d4e886145de565b905080516001148015613d62575086516001145b8015613daf575086600081518110613d7657fe5b6020026020010151600001516001600160a01b031681600081518110613d9857fe5b6020026020010151600001516001600160a01b0316145b15613e005761138881600081518110613dc457fe5b6020026020010151602001516001600160601b03161115613df75760405162461bcd60e51b815260040161155e906157e8565b85915050613e3c565b600080613e118b8989868a8a613e47565b91509150611388811115613e375760405162461bcd60e51b815260040161155e906157e8565b509150505b979650505050505050565b846000805b8551811015613ef057613e88868281518110613e6457fe5b6020026020010151602001516001600160601b0316836118e090919063ffffffff16565b91506000613eb78489898581518110613e9d57fe5b6020026020010151602001516001600160601b03166145bc565b90945090508015613ee757613ee760405180604001604052808c8152602001838152508789858151811061350f57fe5b50600101613e4c565b50965096945050505050565b600061193a612710613f0e8585614753565b906147ac565b8351516001600160e01b0319166339d690a360e11b141561405a57600080856000015160200151806020019051810190613f4e9190615029565b915091508560200151600114613f765760405162461bcd60e51b815260040161155e906158d5565b6001600160a01b038516301415613fee57604051632142170760e11b81526001600160a01b038316906342842e0e90613fb79030908890869060040161566f565b600060405180830381600087803b158015613fd157600080fd5b505af1158015613fe5573d6000803e3d6000fd5b50505050614053565b604051637b84dc8360e11b81526001600160a01b0384169063f709b90690614020908590899089908790600401615787565b600060405180830381600087803b15801561403a57600080fd5b505af115801561404e573d6000803e3d6000fd5b505050505b5050610a40565b8351516001600160e01b0319166322ba176160e21b14156141b85760008460000151602001518060200190518101906140939190614e1d565b90506001600160a01b03841630141561414a57602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb916140d79187916004016156cb565b602060405180830381600087803b1580156140f157600080fd5b505af1158015614105573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614129919061527f565b6141455760405162461bcd60e51b815260040161155e9061592a565b6141b2565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c39161417f91859189918991600401615787565b600060405180830381600087803b15801561419957600080fd5b505af11580156141ad573d6000803e3d6000fd5b505050505b50610a40565b8351516001600160e01b03191663025ceed960e61b1415614275576000808560000151602001518060200190518101906141f29190615029565b90925090506001600160a01b03851630141561423d576020860151604051637921219560e11b81526001600160a01b0384169163f242432a91613fb791309189918791600401615693565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee9916140209186918a918a91889190600401615744565b8351516001600160e01b0319166355575f5d60e11b14156142be576001600160a01b03821630146142b95760208401516142b9906001600160a01b03841690612b1d565b610a40565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf1906142ee90879087908790600401615ad7565b600060405180830381600087803b15801561430857600080fd5b505af11580156135b4573d6000803e3d6000fd5b60c95490565b60ca5490565b60008383836143356135be565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6143e3614930565b6020808401518051908201208382015180519201919091208082141561440d57849250505061193d565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b60008082156144775760208086015101516144539085612ac0565b915061447085606001516020015186602001516020015184614813565b9050612ab8565b60608501516020015161448a9085612ac0565b90506144a785602001516020015186606001516020015183614813565b9150935093915050565b6144b961496b565b60006144c6858585614813565b90508581111561451d576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b61453e61496b565b600061454b838787614813565b9050838111156145a2576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b6000806145d2856145cd8686613efc565b614879565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480614612575081516001600160e01b0319166339d690a360e11b145b156146c85760008083602001518060200190518101906146329190615029565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a9061466990859085906004016156cb565b600060405180830381600087803b15801561468357600080fd5b505af1158015614697573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146bf919081019061524d565b925050506117f1565b81516001600160e01b03191662737ea960e61b141561470957600082602001518060200190518101906146fb9190614e39565b6080015192506117f1915050565b81516001600160e01b03191663d8f960c160e01b141561474b576000826020015180602001905181019061473d9190614f36565b6060015192506117f1915050565b506060919050565b6000826147625750600061193d565b8282028284828161476f57fe5b041461193a5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d5b6021913960400191505060405180910390fd5b6000808211614802576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161480b57fe5b049392505050565b60006148208484846148a1565b15614863576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b61487183613f0e8685614753565b949350505050565b600080828411156148985761488e8484612ac0565b91508290506127c2565b50600093915050565b6000826148e8576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8115806148f3575083155b1561490057506000613cde565b6000838061490a57fe5b85840990506149198584614753565b614925826103e8614753565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b80356117f181615c07565b600082601f8301126149b7578081fd5b813560206149cc6149c783615b9d565b615b7a565b82815281810190858301838502870184018810156149e8578586fd5b855b85811015614a0f5781356149fd81615c07565b845292840192908401906001016149ea565b5090979650505050505050565b600082601f830112614a2c578081fd5b81356020614a3c6149c783615b9d565b8281528181019085830183850287018401881015614a58578586fd5b855b85811015614a0f578135614a6d81615c1c565b84529284019290840190600101614a5a565b600082601f830112614a8f578081fd5b81516020614a9f6149c783615b9d565b82815281810190858301855b85811015614a0f57614ac2898684518b0101614bf6565b84529284019290840190600101614aab565b600082601f830112614ae4578081fd5b81516020614af46149c783615b9d565b82815281810190858301604080860288018501891015614b12578687fd5b865b86811015614b815781838b031215614b2a578788fd5b81518281018181106001600160401b0382111715614b4457fe5b83528351614b5181615c07565b8152838701516001600160601b0381168114614b6b57898afd5b8188015285529385019391810191600101614b14565b509198975050505050505050565b805180151581146117f157600080fd5b80356117f181615c1c565b600082601f830112614bba578081fd5b8135614bc86149c782615bba565b818152846020838601011115614bdc578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112614c06578081fd5b8151614c146149c782615bba565b818152846020838601011115614c28578283fd5b614871826020830160208701615bdb565b60006101e08284031215614c4b578081fd5b50919050565b60006040808385031215614c63578182fd5b80518181016001600160401b038282108183111715614c7e57fe5b818452829450853581811115614c9357600080fd5b8601808803851315614ca457600080fd5b608084018381108382111715614cb657fe5b909452833593614cc585615c1c565b93825260208401359381851115614cdb57600080fd5b614ce788868301614baa565b60608501525050815260209384013593019290925292915050565b6000610120808385031215614d15578182fd5b614d1e81615b7a565b915050614d2a8261499c565b815260208201356001600160401b0380821115614d4657600080fd5b614d5285838601614c51565b6020840152614d636040850161499c565b60408401526060840135915080821115614d7c57600080fd5b614d8885838601614c51565b60608401526080840135608084015260a084013560a084015260c084013560c0840152614db760e08501614b9f565b60e084015261010091508184013581811115614dd257600080fd5b614dde86828701614baa565b8385015250505092915050565b803565ffffffffffff811681146117f157600080fd5b600060208284031215614e12578081fd5b813561193a81615c07565b600060208284031215614e2e578081fd5b815161193a81615c07565b60008060408385031215614e4b578081fd5b8251614e5681615c07565b60208401519092506001600160401b0380821115614e72578283fd5b9084019060c08287031215614e85578283fd5b614e8f60c0615b7a565b82518152602083015182811115614ea4578485fd5b614eb088828601614bf6565b60208301525060408301516040820152606083015182811115614ed1578485fd5b614edd88828601614ad4565b606083015250608083015182811115614ef4578485fd5b614f0088828601614ad4565b60808301525060a083015182811115614f17578485fd5b614f2388828601614a7f565b60a0830152508093505050509250929050565b60008060408385031215614f48578182fd5b8251614f5381615c07565b60208401519092506001600160401b0380821115614f6f578283fd5b9084019060a08287031215614f82578283fd5b614f8c60a0615b7a565b82518152602083015182811115614fa1578485fd5b614fad88828601614bf6565b602083015250604083015182811115614fc4578485fd5b614fd088828601614ad4565b604083015250606083015182811115614fe7578485fd5b614ff388828601614ad4565b60608301525060808301518281111561500a578485fd5b61501688828601614a7f565b6080830152508093505050509250929050565b6000806040838503121561503b578182fd5b825161504681615c07565b6020939093015192949293505050565b600080600080600060a0868803121561506d578081fd5b853561507881615c07565b9450602086013561508881615c07565b935060408601359250606086013561509f81615c07565b915060808601356150af81615c07565b809150509295509295909350565b6000806000806000806000806000806101408b8d0312156150dc578788fd5b6150e58b61499c565b99506150f360208c0161499c565b985060408b0135975061510860608c0161499c565b965061511660808c0161499c565b955061512460a08c0161499c565b945060c08b01356001600160401b038082111561513f578586fd5b61514b8e838f01614a1c565b955060e08d0135915080821115615160578485fd5b5061516d8d828e016149a7565b93505061517d6101008c01614b9f565b915061518c6101208c0161499c565b90509295989b9194979a5092959850565b600080600080600060a086880312156151b4578283fd5b85356151bf81615c07565b945060208601356001600160401b038111156151d9578384fd5b6151e588828901614baa565b9450506040860135925060608601359150608086013560ff811681146150af578182fd5b60008060006060848603121561521d578081fd5b833561522881615c07565b925061523660208501614deb565b915061524460408501614deb565b90509250925092565b60006020828403121561525e578081fd5b81516001600160401b03811115615273578182fd5b61487184828501614ad4565b600060208284031215615290578081fd5b61193a82614b8f565b6000602082840312156152aa578081fd5b5035919050565b6000602082840312156152c2578081fd5b813561193a81615c1c565b600080604083850312156152df578182fd5b82356152ea81615c1c565b915060208301356152fa81615c07565b809150509250929050565b600060208284031215615316578081fd5b81356001600160401b0381111561532b578182fd5b61487184828501614c39565b600060208284031215615348578081fd5b81516001600160401b038082111561535e578283fd5b9083019060408286031215615371578283fd5b60405160408101818110838211171561538657fe5b604052825161539481615c1c565b81526020830151828111156153a7578485fd5b6153b387828601614bf6565b60208301525095945050505050565b6000602082840312156153d3578081fd5b81516001600160401b03808211156153e9578283fd5b90830190604082860312156153fc578283fd5b60405160408101818110838211171561541157fe5b604052825182811115615422578485fd5b61542e87828601614ad4565b825250602083015182811115615442578485fd5b6153b387828601614ad4565b60006020828403121561545f578081fd5b81516001600160401b0380821115615475578283fd5b9083019060608286031215615488578283fd5b60405160608101818110838211171561549d57fe5b6040528251828111156154ae578485fd5b6154ba87828601614ad4565b8252506020830151828111156154ce578485fd5b6154da87828601614ad4565b6020830152506154ec60408401614b8f565b604082015295945050505050565b60006020828403121561550b578081fd5b81356001600160401b03811115615520578182fd5b61487184828501614d02565b60008060008060808587031215615541578182fd5b84356001600160401b0380821115615557578384fd5b61556388838901614d02565b95506020870135915080821115615578578384fd5b61558488838901614baa565b94506040870135915080821115615599578384fd5b6155a588838901614d02565b935060608701359150808211156155ba578283fd5b506155c787828801614baa565b91505092959194509250565b6000602082840312156155e4578081fd5b61193a82614deb565b60008151808452615605816020860160208601615bdb565b601f01601f19169290920160200192915050565b600063ffffffff60e01b825116835260208201516040602085015261487160408501826155ed565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b60006020825261193a60208301846155ed565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b600060408252615ac56040830185615619565b8281036020840152613cda8185615619565b600060608252845160406060840152615af360a0840182615619565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e19843603018112615b4c578283fd5b8301803591506001600160401b03821115615b65578283fd5b6020019150368190038213156127c257600080fd5b6040518181016001600160401b0381118282101715615b9557fe5b604052919050565b60006001600160401b03821115615bb057fe5b5060209081020190565b60006001600160401b03821115615bcd57fe5b50601f01601f191660200190565b60005b83811015615bf6578181015183820152602001615bde565b83811115610a405750506000910152565b6001600160a01b0381168114611cbf57600080fd5b6001600160e01b031981168114611cbf57600080fdfe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368a2646970667358221220853fb7961aafe6e2183b94b8e1ed04009e1c58f763f151673e596f036a33a5d064736f6c63430007060033", + "deployedBytecode": "0x60806040526004361061012a5760003560e01c8063715018a6116100ab578063bc158c2d1161006f578063bc158c2d146102fd578063d6ca6ab71461031d578063e2864fe31461033d578063e99a3f801461035d578063eae3ad6f14610370578063f2fde38b146103905761012a565b8063715018a61461026f5780638da5cb5b14610284578063b0e21e8a14610299578063b39deb46146102bd578063b74c8e9a146102dd5761012a565b80632d0335ab116100f25780632d0335ab146101da57806330c642f1146101fa5780633be899221461021a57806367d49a3b1461023a5780636d8f06941461024d5761012a565b80630c53c51c1461012f5780630d5f7d35146101585780631372a6251461016d57806320158c441461018d5780632bed54d6146101ba575b600080fd5b61014261013d36600461519d565b6103b0565b60405161014f9190615731565b60405180910390f35b61016b610166366004615305565b610729565b005b34801561017957600080fd5b5061016b610188366004615056565b610a46565b34801561019957600080fd5b506101ad6101a8366004615299565b610b63565b60405161014f919061570d565b3480156101c657600080fd5b5061016b6101d53660046150bd565b610b76565b3480156101e657600080fd5b506101ad6101f5366004614e01565b610cf0565b34801561020657600080fd5b5061016b6102153660046152cd565b610d0c565b34801561022657600080fd5b5061016b610235366004614e01565b610ddc565b61016b610248366004615305565b610e61565b34801561025957600080fd5b50610262611141565b60405161014f9190615641565b34801561027b57600080fd5b5061016b611151565b34801561029057600080fd5b506102626111fd565b3480156102a557600080fd5b506102ae61120d565b60405161014f939291906156e4565b3480156102c957600080fd5b5061016b6102d83660046152cd565b611238565b3480156102e957600080fd5b5061016b6102f8366004615209565b6112fc565b34801561030957600080fd5b5061016b610318366004614e01565b61137e565b34801561032957600080fd5b5061016b6103383660046155d3565b61144b565b34801561034957600080fd5b5061016b6103583660046154fa565b611525565b61016b61036b36600461552c565b6115e6565b34801561037c57600080fd5b5061016b61038b3660046155d3565b6115fc565b34801561039c57600080fd5b5061016b6103ab366004614e01565b6116d3565b606060006103bd866117d6565b90506000356001600160e01b03199081169082161415610424576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b038916600081815261019360209081529084902054835282015290810187905261046288828888886117f6565b61049d5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d9c6021913960400191505060405180910390fd5b6001600160a01b038816600090815261019360205260409020546104c29060016118e0565b61019360008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b6020831061052d5780518252601f19909201916020918201910161050e565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106105a35780518252601f199092019160209182019101610584565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610605576040519150601f19603f3d011682016040523d82523d6000602084013e61060a565b606091505b509150915081610661576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106e05781810151838201526020016106c8565b50505050905090810190601f16801561070d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b600061074361073e60c0840160a08501614e01565b611943565b604080516101208101909152909150600090806107636020860186614e01565b6001600160a01b031681526020016040518060400160405280604051806040016040528088604001602081019061079a91906152b1565b6001600160e01b03191681526020016107b660608a018a615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a083015201610859610140860161012087016152b1565b6001600160e01b0319168152602001610876610140860186615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815180830183528781526101808901356020828101919091528201528082018390528151608081018352949550919391925060608084019291829182820191829161090a91908c01908c016152b1565b6001600160e01b031916815260200161092660608b018b615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528201819052604082018190526060820152608001610995610140870161012088016152b1565b6001600160e01b03191681526020016109b26101c0870187615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610a36826109fc610160870187615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119a692505050565b610a4082826119bd565b50505050565b600054610100900460ff1680610a5f5750610a5f611c0f565b80610a6d575060005460ff16155b610aa85760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad3576000805460ff1961ff0019909116610100171660011790555b610adb611c20565b610ae3611cc2565b610aeb611dbb565b610b346040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611e8b565b610b3e8686611f1b565b610b49848484611fc5565b8015610b5b576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b600054610100900460ff1680610b8f5750610b8f611c0f565b80610b9d575060005460ff16155b610bd85760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015610c03576000805460ff1961ff0019909116610100171660011790555b610c0b611c20565b610c13611cc2565b610c1b611dbb565b610c646040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611e8b565b610c6e8b8b611f1b565b610c79898989611fc5565b60005b8551811015610cbd57610cb5868281518110610c9457fe5b6020026020010151868381518110610ca857fe5b6020026020010151610d6e565b600101610c7c565b50610cc8838361129a565b610cd1866116d3565b8015610ce3576000805461ff00191690555b5050505050505050505050565b6001600160a01b03166000908152610193602052604090205490565b610d14612085565b6001600160a01b0316610d256111fd565b6001600160a01b031614610d6e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c315359390610dd0908490615641565b60405180910390a25050565b610de4612085565b6001600160a01b0316610df56111fd565b6001600160a01b031614610e3e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e7661073e60c0840160a08501614e01565b60408051610120810190915290915060009080610e966020860186614e01565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b0316815260200160405180604001604052806040518060400160405280886040016020810190610efb91906152b1565b6001600160e01b0319168152602001610f1760608a018a615b36565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e085013560408201526101008501356060820152608001610f92610140860161012087016152b1565b6001600160e01b0319168152602001610faf610140860186615b36565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505060408051610120810182528281528151608081018352949550919391925060208301919081908181019081906110219060608c01908c016152b1565b6001600160e01b031916815260200161103d60608b018b615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c0016110d0610140870161012088016152b1565b6001600160e01b03191681526020016110ed6101c0870187615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050611137826109fc610160870187615b36565b610a4081836119bd565b610162546001600160a01b031681565b611159612085565b6001600160a01b031661116a6111fd565b6001600160a01b0316146111b3576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b03165b90565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b611240612085565b6001600160a01b03166112516111fd565b6001600160a01b03161461129a576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f90610dd0908490615641565b611304612085565b6001600160a01b03166113156111fd565b6001600160a01b03161461135e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6113678361137e565b6113708261144b565b611379816115fc565b505050565b611386612085565b6001600160a01b03166113976111fd565b6001600160a01b0316146113e0576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd0391611420916001600160a01b03909116908490615655565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b611453612085565b6001600160a01b03166114646111fd565b6001600160a01b0316146114ad576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e916114f291600160a01b90910465ffffffffffff16908490615b1d565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316611538612085565b6001600160a01b0316146115675760405162461bcd60e51b815260040161155e90615a8d565b60405180910390fd5b60808101516115885760405162461bcd60e51b815260040161155e9061581f565b600061159382612094565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a906115da90839061570d565b60405180910390a15050565b6115f28484848461221c565b610a4084836119bd565b611604612085565b6001600160a01b03166116156111fd565b6001600160a01b03161461165e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916116a391600160d01b90910465ffffffffffff16908490615b1d565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b6116db612085565b6001600160a01b03166116ec6111fd565b6001600160a01b031614611735576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160a01b03811661177a5760405162461bcd60e51b8152600401808060200182810382526026815260200180615c766026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008151600014156117ea575060006117f1565b5060208101515b919050565b600080600161180c611807886122e8565b61236b565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611863573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118bf576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b60008282018381101561193a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b61194b614930565b611953614930565b6001600160a01b038316611970576355575f5d60e11b815261193d565b6322ba176160e21b815260405161198b908490602001615641565b60408051601f19818403018152919052602082015292915050565b6119af826123b7565b6119b98282612481565b5050565b6000806119ca8484612730565b9150915060008060006119dd87876127c9565b925092509250600080611b366040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b0316815250611b318a600001518a60000151612878565b612949565b885191935091506001600160e01b0319166355575f5d60e11b1415611bb55785516001600160e01b0319166355575f5d60e11b1415611b7457600080fd5b81341015611b945760405162461bcd60e51b815260040161155e90615a65565b81341115611bb057611bb0611ba93484612ac0565b3390612b1d565b611c04565b85516001600160e01b0319166355575f5d60e11b1415611c045780341015611bef5760405162461bcd60e51b815260040161155e90615a65565b80341115611c0457611c04611ba93483612ac0565b505050505050505050565b6000611c1a30612bb5565b15905090565b600054610100900460ff1680611c395750611c39611c0f565b80611c47575060005460ff16155b611c825760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611cad576000805460ff1961ff0019909116610100171660011790555b8015611cbf576000805461ff00191690555b50565b600054610100900460ff1680611cdb5750611cdb611c0f565b80611ce9575060005460ff16155b611d245760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611d4f576000805460ff1961ff0019909116610100171660011790555b6000611d59612085565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611cbf576000805461ff001916905550565b600054610100900460ff1680611dd45750611dd4611c0f565b80611de2575060005460ff16155b611e1d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611e48576000805460ff1961ff0019909116610100171660011790555b611cad6040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b815250612bbb565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030611ec5612c7b565b60405160200180868152602001858152602001848152602001836001600160a01b031681526020018281526020019550505050505060405160208183030381529060405280519060200120610194819055505050565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff1680611fde5750611fde611c0f565b80611fec575060005460ff16155b6120275760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015612052576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610a40576000805461ff001916905550505050565b600061208f612c85565b905090565b60e08101516000906001600160e01b031916632611a13360e11b14806120c8575060e08201516001600160e01b0319908116145b1561213d5781516020830151516120de90612ce1565b6060840151516120ed90612ce1565b846080015160405160200180856001600160a01b031681526020018481526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506117f1565b815160208301515161214e90612ce1565b60608401515161215d90612ce1565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121c95781810151838201526020016121b1565b50505050905090810190601f1680156121f65780820380516001836020036101000a031916815260200191505b5096505050505050506040516020818303038152906040528051906020012090506117f1565b61222684846119a6565b61223082826119a6565b60408401516001600160a01b03161561228c5781516001600160a01b03161561228c5783604001516001600160a01b031682600001516001600160a01b03161461228c5760405162461bcd60e51b815260040161155e90615a22565b60408201516001600160a01b031615610a405783516001600160a01b031615610a405783600001516001600160a01b031682604001516001600160a01b031614610a405760405162461bcd60e51b815260040161155e90615891565b6000604051806080016040528060438152602001615c3360439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612375612d4b565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60a081015115806123cb5750428160a00151105b61241c576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c081015115806124305750428160c00151115b611cbf576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b60808201516125065781516001600160a01b0316156125015781516001600160a01b03166124ad612085565b6001600160a01b031614612501576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b6119b9565b81516001600160a01b0316612519612085565b6001600160a01b0316146119b957600061253283612d52565b905061254a83600001516001600160a01b0316612bb5565b15612686578251630b135d3f60e11b906001600160a01b0316631626ba7e61257184612e42565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156125c45781810151838201526020016125ac565b50505050905090810190601f1680156125f15780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561260f57600080fd5b505afa158015612623573d6000803e3d6000fd5b505050506040513d602081101561263957600080fd5b50516001600160e01b031916146126815760405162461bcd60e51b815260040180806020018281038252602b815260200180615ce0602b913960400191505060405180910390fd5b611379565b82516001600160a01b03166126a48361269e84612e42565b90612e4c565b6001600160a01b0316146126e95760405162461bcd60e51b8152600401808060200182810382526022815260200180615cbe6022913960400191505060405180910390fd5b82516001600160a01b0316611379576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b612738614930565b612740614930565b6020840151516060840151516127569190612ecc565b80519092506001600160e01b0319166127815760405162461bcd60e51b815260040161155e906159f6565b6060840151516020840151516127979190612ecc565b80519091506001600160e01b0319166127c25760405162461bcd60e51b815260040161155e906159f6565b9250929050565b6127d1614948565b6127d9614948565b6127e161496b565b60006127ec86612094565b905060006127f986612094565b90506000612805612085565b88519091506001600160a01b0316612824576001600160a01b03811688525b86516001600160a01b0316612840576001600160a01b03811687525b61284988612f0c565b955061285487612f0c565b945061286c888885858a604001518a60400151613005565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b141561289b5750600161193d565b6001600160e01b031982166355575f5d60e11b14156128bc5750600261193d565b6001600160e01b031983166322ba176160e21b14156128dd5750600161193d565b6001600160e01b031982166322ba176160e21b14156128fe5750600261193d565b6001600160e01b0319831663025ceed960e61b141561291f5750600161193d565b6001600160e01b0319821663025ceed960e61b14156129405750600261193d565b50600092915050565b8251602090810151835190910151600183600281111561296557fe5b14156129e75760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526129b790869086906131c0565b91506129e284600001516000015185600001516020015186608001518860200151886060015161343a565b612ab8565b60028360028111156129f557fe5b1415612a725760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b9091041691810191909152612a4790859087906131c0565b90506129e285600001516000015186600001516020015187608001518760200151896060015161343a565b845180516020918201516080880151928701516060890151612a9594919061343a565b835180516020918201516080870151928801516060880151612ab894919061343a565b935093915050565b600082821115612b17576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612b68576040519150601f19603f3d011682016040523d82523d6000602084013e612b6d565b606091505b5050905080611379576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff1680612bd45750612bd4611c0f565b80612be2575060005460ff16155b612c1d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015612c48576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca558015611379576000805461ff0019169055505050565b600061208f6135be565b600033301415612cdc57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061120a9050565b503390565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b6101945490565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d8260000151612d8784602001516135c2565b8460400151612d9986606001516135c2565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b6000612375613632565b60008151604114612ea4576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612ec28682858561366d565b9695505050505050565b612ed4614930565b6000612ee084846138c3565b80519091506001600160e01b031916612f0557612efd83856138c3565b91505061193d565b905061193d565b612f14614948565b60e08201516001600160e01b031916632611a13360e11b1415612f60576000826101000151806020019051810190612f4c91906153c2565b805183526020908101519083015250612fec565b60e08201516001600160e01b0319166323d235ef60e01b1415612fb8576000826101000151806020019051810190612f98919061544e565b805183526020808201519084015260409081015115159083015250612fec565b60e08201516001600160e01b03199081161415612fd457612fec565b60405162461bcd60e51b815260040161155e90615988565b8051516117f1578151612ffe90613adf565b8152919050565b61300d61496b565b600061301d886080015187613b7a565b9050600061302f886080015187613b7a565b905060006130418a8a85858a8a613b9f565b90508960200151602001516000141580613062575060608901516020015115155b156130855780516130855760405162461bcd60e51b815260040161155e90615901565b60608a0151602001511515806130a157506020808a0151015115155b156130ca5760008160200151116130ca5760405162461bcd60e51b815260040161155e90615901565b60808a01511561311d5785156130fc5780516130e79084906118e0565b600089815261012f602052604090205561311d565b602081015161310c9084906118e0565b600089815261012f60205260409020555b60808901511561317057841561315257602081015161313d9083906118e0565b600088815261012f6020526040902055613170565b805161315f9083906118e0565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c450926131ab928c928c929190615716565b60405180910390a19998505050505050505050565b60006131d9846000015160200151838660400151613c38565b90506000613203828660000151602001518760800151868960000151600001518a60600151613ce5565b8551805186515160208089015193015160808a015160608b0151959650613231959394929387929190613d42565b9050846040015151600114801561324d57508360400151516001145b80156132a25750846040015160008151811061326557fe5b6020026020010151600001516001600160a01b0316846040015160008151811061328b57fe5b6020026020010151600001516001600160a01b0316145b156133b857604080516001808252818301909252600091816020015b6132c6614985565b8152602001906001900390816132be57905050905084604001516000815181106132ec57fe5b6020026020010151600001518160008151811061330557fe5b60209081029190910101516001600160a01b0390911690526040860151805160009061332d57fe5b602002602001015160200151856040015160008151811061334a57fe5b602002602001015160200151018160008151811061336457fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250506133ae86600001516000015183886000015160200151848a608001518b60600151613e47565b5091506134119050565b6133e285600001516000015182876000015160200151886040015189608001518a60600151613e47565b50855180516020909101516040870151608089015160608a015194955061340d948693929190613e47565b5090505b6134328560000151600001518287608001518760200151896060015161343a565b509392505050565b600082511161345b5760405162461bcd60e51b815260040161155e9061584d565b600084815b600185510381101561352a5760006134a186838151811061347d57fe5b6020026020010151602001516001600160601b031689613efc90919063ffffffff16565b90506134d68683815181106134b257fe5b6020026020010151602001516001600160601b0316856118e090919063ffffffff16565b93508015613521576134e88382612ac0565b925061352160405180604001604052808b8152602001838152508888858151811061350f57fe5b60200260200101516000015188613f14565b50600101613460565b5060008460018651038151811061353d57fe5b6020026020010151905061356781602001516001600160601b0316846118e090919063ffffffff16565b9250826127101461358a5760405162461bcd60e51b815260040161155e906159bf565b81156135b4576135b460405180604001604052808a81526020018481525087836000015187613f14565b5050505050505050565b4690565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b086135f28360000151612ce1565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b600061208f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61366061431c565b613668614322565b614328565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156136ce5760405162461bcd60e51b8152600401808060200182810382526022815260200180615c9c6022913960400191505060405180910390fd5b6000601e8560ff1611156137a8576004850360ff16601b14806136f757506004850360ff16601c145b6137325760405162461bcd60e51b8152600401808060200182810382526022815260200180615d396022913960400191505060405180910390fd5b600161373d8761438a565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613797573d6000803e3d6000fd5b50505060206040510351905061385f565b8460ff16601b14806137bd57508460ff16601c145b6137f85760405162461bcd60e51b8152600401808060200182810382526022815260200180615d396022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613852573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166138ba576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6138cb614930565b825182516001600160e01b031982166355575f5d60e11b1415613936576001600160e01b031981166355575f5d60e11b141561390b57849250505061193d565b505060408051808201825260008082528251602081810190945290815291810191909152905061193d565b6001600160e01b031982166322ba176160e21b141561397b576001600160e01b031981166322ba176160e21b141561390b5761397285856143db565b9250505061193d565b6001600160e01b031982166339d690a360e11b14156139b7576001600160e01b031981166339d690a360e11b141561390b5761397285856143db565b6001600160e01b0319821663025ceed960e61b14156139f3576001600160e01b0319811663025ceed960e61b141561390b5761397285856143db565b6001600160e01b031982166000908152606560205260409020546001600160a01b03168015613aa8576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb090613a4a9089908990600401615ab2565b60006040518083038186803b158015613a6257600080fd5b505afa158015613a76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a9e9190810190615337565b935050505061193d565b6001600160e01b03198381169083161415613ac757613a9e86866143db565b60405162461bcd60e51b815260040161155e906157b1565b60408051600180825281830190925260609160009190816020015b613b02614985565b815260200190600190039081613afa5790505090508281600081518110613b2557fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505061271081600081518110613b5957fe5b6020908102919091018101516001600160601b039092169101529050919050565b600082613b895750600061193d565b50600090815261012f6020526040902054919050565b613ba761496b565b600080613bb5898887614438565b91509150600080613bc78a8988614438565b9150915083811180613be157508381148015613be1575083155b15613c0d57613c0284848c60200151602001518d60600151602001516144b1565b945050505050612ec2565b613c298b60200151602001518c60600151602001518484614536565b9b9a5050505050505050505050565b602082015160009065ffffffffffff16815b8351811015613cc557612710848281518110613c6257fe5b6020026020010151602001516001600160601b03161115613c955760405162461bcd60e51b815260040161155e90615959565b838181518110613ca157fe5b6020026020010151602001516001600160601b031682019150806001019050613c4a565b50613cda613cd38683613efc565b86906118e0565b9150505b9392505050565b6000806000613d078989886040015189602001510165ffffffffffff166145bc565b90925090508015613d3657613d3660405180604001604052808781526020018381525088886000015187613f14565b50979650505050505050565b600080613d4e886145de565b905080516001148015613d62575086516001145b8015613daf575086600081518110613d7657fe5b6020026020010151600001516001600160a01b031681600081518110613d9857fe5b6020026020010151600001516001600160a01b0316145b15613e005761138881600081518110613dc457fe5b6020026020010151602001516001600160601b03161115613df75760405162461bcd60e51b815260040161155e906157e8565b85915050613e3c565b600080613e118b8989868a8a613e47565b91509150611388811115613e375760405162461bcd60e51b815260040161155e906157e8565b509150505b979650505050505050565b846000805b8551811015613ef057613e88868281518110613e6457fe5b6020026020010151602001516001600160601b0316836118e090919063ffffffff16565b91506000613eb78489898581518110613e9d57fe5b6020026020010151602001516001600160601b03166145bc565b90945090508015613ee757613ee760405180604001604052808c8152602001838152508789858151811061350f57fe5b50600101613e4c565b50965096945050505050565b600061193a612710613f0e8585614753565b906147ac565b8351516001600160e01b0319166339d690a360e11b141561405a57600080856000015160200151806020019051810190613f4e9190615029565b915091508560200151600114613f765760405162461bcd60e51b815260040161155e906158d5565b6001600160a01b038516301415613fee57604051632142170760e11b81526001600160a01b038316906342842e0e90613fb79030908890869060040161566f565b600060405180830381600087803b158015613fd157600080fd5b505af1158015613fe5573d6000803e3d6000fd5b50505050614053565b604051637b84dc8360e11b81526001600160a01b0384169063f709b90690614020908590899089908790600401615787565b600060405180830381600087803b15801561403a57600080fd5b505af115801561404e573d6000803e3d6000fd5b505050505b5050610a40565b8351516001600160e01b0319166322ba176160e21b14156141b85760008460000151602001518060200190518101906140939190614e1d565b90506001600160a01b03841630141561414a57602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb916140d79187916004016156cb565b602060405180830381600087803b1580156140f157600080fd5b505af1158015614105573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614129919061527f565b6141455760405162461bcd60e51b815260040161155e9061592a565b6141b2565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c39161417f91859189918991600401615787565b600060405180830381600087803b15801561419957600080fd5b505af11580156141ad573d6000803e3d6000fd5b505050505b50610a40565b8351516001600160e01b03191663025ceed960e61b1415614275576000808560000151602001518060200190518101906141f29190615029565b90925090506001600160a01b03851630141561423d576020860151604051637921219560e11b81526001600160a01b0384169163f242432a91613fb791309189918791600401615693565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee9916140209186918a918a91889190600401615744565b8351516001600160e01b0319166355575f5d60e11b14156142be576001600160a01b03821630146142b95760208401516142b9906001600160a01b03841690612b1d565b610a40565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf1906142ee90879087908790600401615ad7565b600060405180830381600087803b15801561430857600080fd5b505af11580156135b4573d6000803e3d6000fd5b60c95490565b60ca5490565b60008383836143356135be565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6143e3614930565b6020808401518051908201208382015180519201919091208082141561440d57849250505061193d565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b60008082156144775760208086015101516144539085612ac0565b915061447085606001516020015186602001516020015184614813565b9050612ab8565b60608501516020015161448a9085612ac0565b90506144a785602001516020015186606001516020015183614813565b9150935093915050565b6144b961496b565b60006144c6858585614813565b90508581111561451d576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b61453e61496b565b600061454b838787614813565b9050838111156145a2576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b6000806145d2856145cd8686613efc565b614879565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480614612575081516001600160e01b0319166339d690a360e11b145b156146c85760008083602001518060200190518101906146329190615029565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a9061466990859085906004016156cb565b600060405180830381600087803b15801561468357600080fd5b505af1158015614697573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146bf919081019061524d565b925050506117f1565b81516001600160e01b03191662737ea960e61b141561470957600082602001518060200190518101906146fb9190614e39565b6080015192506117f1915050565b81516001600160e01b03191663d8f960c160e01b141561474b576000826020015180602001905181019061473d9190614f36565b6060015192506117f1915050565b506060919050565b6000826147625750600061193d565b8282028284828161476f57fe5b041461193a5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d5b6021913960400191505060405180910390fd5b6000808211614802576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161480b57fe5b049392505050565b60006148208484846148a1565b15614863576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b61487183613f0e8685614753565b949350505050565b600080828411156148985761488e8484612ac0565b91508290506127c2565b50600093915050565b6000826148e8576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8115806148f3575083155b1561490057506000613cde565b6000838061490a57fe5b85840990506149198584614753565b614925826103e8614753565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b80356117f181615c07565b600082601f8301126149b7578081fd5b813560206149cc6149c783615b9d565b615b7a565b82815281810190858301838502870184018810156149e8578586fd5b855b85811015614a0f5781356149fd81615c07565b845292840192908401906001016149ea565b5090979650505050505050565b600082601f830112614a2c578081fd5b81356020614a3c6149c783615b9d565b8281528181019085830183850287018401881015614a58578586fd5b855b85811015614a0f578135614a6d81615c1c565b84529284019290840190600101614a5a565b600082601f830112614a8f578081fd5b81516020614a9f6149c783615b9d565b82815281810190858301855b85811015614a0f57614ac2898684518b0101614bf6565b84529284019290840190600101614aab565b600082601f830112614ae4578081fd5b81516020614af46149c783615b9d565b82815281810190858301604080860288018501891015614b12578687fd5b865b86811015614b815781838b031215614b2a578788fd5b81518281018181106001600160401b0382111715614b4457fe5b83528351614b5181615c07565b8152838701516001600160601b0381168114614b6b57898afd5b8188015285529385019391810191600101614b14565b509198975050505050505050565b805180151581146117f157600080fd5b80356117f181615c1c565b600082601f830112614bba578081fd5b8135614bc86149c782615bba565b818152846020838601011115614bdc578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112614c06578081fd5b8151614c146149c782615bba565b818152846020838601011115614c28578283fd5b614871826020830160208701615bdb565b60006101e08284031215614c4b578081fd5b50919050565b60006040808385031215614c63578182fd5b80518181016001600160401b038282108183111715614c7e57fe5b818452829450853581811115614c9357600080fd5b8601808803851315614ca457600080fd5b608084018381108382111715614cb657fe5b909452833593614cc585615c1c565b93825260208401359381851115614cdb57600080fd5b614ce788868301614baa565b60608501525050815260209384013593019290925292915050565b6000610120808385031215614d15578182fd5b614d1e81615b7a565b915050614d2a8261499c565b815260208201356001600160401b0380821115614d4657600080fd5b614d5285838601614c51565b6020840152614d636040850161499c565b60408401526060840135915080821115614d7c57600080fd5b614d8885838601614c51565b60608401526080840135608084015260a084013560a084015260c084013560c0840152614db760e08501614b9f565b60e084015261010091508184013581811115614dd257600080fd5b614dde86828701614baa565b8385015250505092915050565b803565ffffffffffff811681146117f157600080fd5b600060208284031215614e12578081fd5b813561193a81615c07565b600060208284031215614e2e578081fd5b815161193a81615c07565b60008060408385031215614e4b578081fd5b8251614e5681615c07565b60208401519092506001600160401b0380821115614e72578283fd5b9084019060c08287031215614e85578283fd5b614e8f60c0615b7a565b82518152602083015182811115614ea4578485fd5b614eb088828601614bf6565b60208301525060408301516040820152606083015182811115614ed1578485fd5b614edd88828601614ad4565b606083015250608083015182811115614ef4578485fd5b614f0088828601614ad4565b60808301525060a083015182811115614f17578485fd5b614f2388828601614a7f565b60a0830152508093505050509250929050565b60008060408385031215614f48578182fd5b8251614f5381615c07565b60208401519092506001600160401b0380821115614f6f578283fd5b9084019060a08287031215614f82578283fd5b614f8c60a0615b7a565b82518152602083015182811115614fa1578485fd5b614fad88828601614bf6565b602083015250604083015182811115614fc4578485fd5b614fd088828601614ad4565b604083015250606083015182811115614fe7578485fd5b614ff388828601614ad4565b60608301525060808301518281111561500a578485fd5b61501688828601614a7f565b6080830152508093505050509250929050565b6000806040838503121561503b578182fd5b825161504681615c07565b6020939093015192949293505050565b600080600080600060a0868803121561506d578081fd5b853561507881615c07565b9450602086013561508881615c07565b935060408601359250606086013561509f81615c07565b915060808601356150af81615c07565b809150509295509295909350565b6000806000806000806000806000806101408b8d0312156150dc578788fd5b6150e58b61499c565b99506150f360208c0161499c565b985060408b0135975061510860608c0161499c565b965061511660808c0161499c565b955061512460a08c0161499c565b945060c08b01356001600160401b038082111561513f578586fd5b61514b8e838f01614a1c565b955060e08d0135915080821115615160578485fd5b5061516d8d828e016149a7565b93505061517d6101008c01614b9f565b915061518c6101208c0161499c565b90509295989b9194979a5092959850565b600080600080600060a086880312156151b4578283fd5b85356151bf81615c07565b945060208601356001600160401b038111156151d9578384fd5b6151e588828901614baa565b9450506040860135925060608601359150608086013560ff811681146150af578182fd5b60008060006060848603121561521d578081fd5b833561522881615c07565b925061523660208501614deb565b915061524460408501614deb565b90509250925092565b60006020828403121561525e578081fd5b81516001600160401b03811115615273578182fd5b61487184828501614ad4565b600060208284031215615290578081fd5b61193a82614b8f565b6000602082840312156152aa578081fd5b5035919050565b6000602082840312156152c2578081fd5b813561193a81615c1c565b600080604083850312156152df578182fd5b82356152ea81615c1c565b915060208301356152fa81615c07565b809150509250929050565b600060208284031215615316578081fd5b81356001600160401b0381111561532b578182fd5b61487184828501614c39565b600060208284031215615348578081fd5b81516001600160401b038082111561535e578283fd5b9083019060408286031215615371578283fd5b60405160408101818110838211171561538657fe5b604052825161539481615c1c565b81526020830151828111156153a7578485fd5b6153b387828601614bf6565b60208301525095945050505050565b6000602082840312156153d3578081fd5b81516001600160401b03808211156153e9578283fd5b90830190604082860312156153fc578283fd5b60405160408101818110838211171561541157fe5b604052825182811115615422578485fd5b61542e87828601614ad4565b825250602083015182811115615442578485fd5b6153b387828601614ad4565b60006020828403121561545f578081fd5b81516001600160401b0380821115615475578283fd5b9083019060608286031215615488578283fd5b60405160608101818110838211171561549d57fe5b6040528251828111156154ae578485fd5b6154ba87828601614ad4565b8252506020830151828111156154ce578485fd5b6154da87828601614ad4565b6020830152506154ec60408401614b8f565b604082015295945050505050565b60006020828403121561550b578081fd5b81356001600160401b03811115615520578182fd5b61487184828501614d02565b60008060008060808587031215615541578182fd5b84356001600160401b0380821115615557578384fd5b61556388838901614d02565b95506020870135915080821115615578578384fd5b61558488838901614baa565b94506040870135915080821115615599578384fd5b6155a588838901614d02565b935060608701359150808211156155ba578283fd5b506155c787828801614baa565b91505092959194509250565b6000602082840312156155e4578081fd5b61193a82614deb565b60008151808452615605816020860160208601615bdb565b601f01601f19169290920160200192915050565b600063ffffffff60e01b825116835260208201516040602085015261487160408501826155ed565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b60006020825261193a60208301846155ed565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b600060408252615ac56040830185615619565b8281036020840152613cda8185615619565b600060608252845160406060840152615af360a0840182615619565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e19843603018112615b4c578283fd5b8301803591506001600160401b03821115615b65578283fd5b6020019150368190038213156127c257600080fd5b6040518181016001600160401b0381118282101715615b9557fe5b604052919050565b60006001600160401b03821115615bb057fe5b5060209081020190565b60006001600160401b03821115615bcd57fe5b50601f01601f191660200190565b60005b83811015615bf6578181015183820152602001615bde565b83811115610a405750506000910152565b6001600160a01b0381168114611cbf57600080fd5b6001600160e01b031981168114611cbf57600080fdfe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368a2646970667358221220853fb7961aafe6e2183b94b8e1ed04009e1c58f763f151673e596f036a33a5d064736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))": { + "details": "function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction", + "params": { + "direct": "struct with parameters for accept bid operation" + } + }, + "directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))": { + "details": "function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 11953, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "matchers", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_address)" + }, + { + "astId": 12218, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 31747, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "proxies", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_bytes4,t_address)" + }, + { + "astId": 32063, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 138, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "201", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "202", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "203", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 13603, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "253", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 12535, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "fills", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 13467, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 30674, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "protocolFee", + "offset": 0, + "slot": "353", + "type": "t_struct(ProtocolFeeData)30710_storage" + }, + { + "astId": 30676, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "royaltiesRegistry", + "offset": 0, + "slot": "354", + "type": "t_contract(IRoyaltiesProvider)11922" + }, + { + "astId": 30678, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "defaultFeeReceiver", + "offset": 0, + "slot": "355", + "type": "t_address" + }, + { + "astId": 30682, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "feeReceivers", + "offset": 0, + "slot": "356", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 31723, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "357", + "type": "t_array(t_uint256)46_storage" + }, + { + "astId": 19515, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "nonces", + "offset": 0, + "slot": "403", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 19517, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "domainSeparator", + "offset": 0, + "slot": "404", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_contract(IRoyaltiesProvider)11922": { + "encoding": "inplace", + "label": "contract IRoyaltiesProvider", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_address)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_struct(ProtocolFeeData)30710_storage": { + "encoding": "inplace", + "label": "struct RaribleTransferManager.ProtocolFeeData", + "members": [ + { + "astId": 30705, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "receiver", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 30707, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "buyerAmount", + "offset": 20, + "slot": "0", + "type": "t_uint48" + }, + { + "astId": 30709, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "sellerAmount", + "offset": 26, + "slot": "0", + "type": "t_uint48" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "encoding": "inplace", + "label": "uint48", + "numberOfBytes": "6" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Proxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Proxy.json new file mode 100644 index 000000000..425cc8134 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Proxy.json @@ -0,0 +1,302 @@ +{ + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1049680", + "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000000000000000000000000000400000000000000000000000800000000000000010000000020000010000000000000042004000000000000000000200020000000000000008004002008000000000000000000000004000000000010001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000002000000004000000000000000a0000008000000000001000000000000000400000000000000000020000000000000000000000000000000000000020000000000000000300000000200", + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594", + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000006c619e55e9947051e98570a36044c31c4eb0736d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + }, + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + }, + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0xd8f960c100000000000000000000000000000000000000000000000000000000" + ], + "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", + "logIndex": 2, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + }, + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", + "logIndex": 3, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + }, + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", + "0xf63c282500000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", + "logIndex": 4, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + }, + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 5, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + }, + { + "transactionIndex": 1, + "blockNumber": 4426288, + "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + } + ], + "blockNumber": 4426288, + "cumulativeGasUsed": "1101943", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/RaribleExchangeWrapper.json b/projects/hardhat-deploy/deployments/lisk_sepolia/RaribleExchangeWrapper.json new file mode 100644 index 000000000..e43de7427 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/RaribleExchangeWrapper.json @@ -0,0 +1,712 @@ +{ + "address": "0x689bFf422807f39c9A927bb78c34FE8D63529e28", + "abi": [ + { + "inputs": [ + { + "internalType": "address[11]", + "name": "marketplaces", + "type": "address[11]" + }, + { + "internalType": "address", + "name": "_weth", + "type": "address" + }, + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "result", + "type": "bool" + } + ], + "name": "Execution", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "Paused", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + } + ], + "name": "approveWETH", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "blur", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapper.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapper.PurchaseDetails[]", + "name": "purchaseDetails", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowFail", + "type": "bool" + } + ], + "name": "bulkPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "exchangeV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRare", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRareV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_paused", + "type": "bool" + } + ], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_4", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_5", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_6", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapper.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapper.PurchaseDetails", + "name": "purchaseDetails", + "type": "tuple" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + } + ], + "name": "singlePurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "sudoswap", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "weth", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wyvernExchange", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "x2y2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x807d48eea3e6b3fdedf7cd2e43adf44575245d6b638f78e6c7259063e80205ff", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "4312361", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001001000000000004000000000000000000000020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000004000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x70db9cda5d665f56a75cf925252e5a1b8a5cb70b50feaae0fd18fa8d96b05330", + "transactionHash": "0x807d48eea3e6b3fdedf7cd2e43adf44575245d6b638f78e6c7259063e80205ff", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426331, + "transactionHash": "0x807d48eea3e6b3fdedf7cd2e43adf44575245d6b638f78e6c7259063e80205ff", + "address": "0x689bFf422807f39c9A927bb78c34FE8D63529e28", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x70db9cda5d665f56a75cf925252e5a1b8a5cb70b50feaae0fd18fa8d96b05330" + }, + { + "transactionIndex": 1, + "blockNumber": 4426331, + "transactionHash": "0x807d48eea3e6b3fdedf7cd2e43adf44575245d6b638f78e6c7259063e80205ff", + "address": "0x689bFf422807f39c9A927bb78c34FE8D63529e28", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x70db9cda5d665f56a75cf925252e5a1b8a5cb70b50feaae0fd18fa8d96b05330" + } + ], + "blockNumber": 4426331, + "cumulativeGasUsed": "4356224", + "status": 1, + "byzantium": true + }, + "args": [ + [ + "0x0000000000000000000000000000000000000000", + "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "0x00000000006c3852cbEf3e08E8dF289169EdE581", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x00000000000001ad428e4906aE43D8F9852d0dD6", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", + "0x0000000000000068F116a894984e2DB1123eB395" + ], + "0x0000000000000000000000000000000000000000", + [ + "0xA3d49c7e2c845b792e422696FE0D9ef17a509731" + ], + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[11]\",\"name\":\"marketplaces\",\"type\":\"address[11]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_6\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":\"RaribleExchangeWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165 is IERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n constructor () internal {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Receiver.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\ncontract ERC1155Holder is ERC1155Receiver {\\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155BatchReceived.selector;\\n }\\n}\\n\",\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155Receiver.sol\\\";\\nimport \\\"../../introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\\n constructor() internal {\\n _registerInterface(\\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n}\\n\",\"keccak256\":\"0x57a0e246fb1c8f9cccf91c508eafe474e40260a31de3a39019ba8312cfdf9b2d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155Receiver is IERC165 {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC721Receiver.sol\\\";\\n\\n /**\\n * @dev Implementation of the {IERC721Receiver} interface.\\n *\\n * Accepts all token transfers. \\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\\n */\\ncontract ERC721Holder is IERC721Receiver {\\n\\n /**\\n * @dev See {IERC721Receiver-onERC721Received}.\\n *\\n * Always returns `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n}\\n\",\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function _setAssetMatcher(bytes4 assetType, address matcher) internal {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x8fceb04eec1c1b32bea097a019b57e9422c31fa2e020e9957db91d5b03edb1bb\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n function __ExchangeV2_init_proxy(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider,\\n address _initialOwner,\\n bytes4[] memory assetTypes, \\n address[] memory proxies,\\n bytes4 assetMatcherType,\\n address assetMatcher\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n for (uint i = 0; i < assetTypes.length; i++) {\\n _setTransferProxy(assetTypes[i], proxies[i]);\\n }\\n _setAssetMatcher(assetMatcherType, assetMatcher);\\n transferOwnership(_initialOwner);\\n }\\n}\\n\",\"keccak256\":\"0x8b5d108d1e027792fd3494dda7feb79937b5bb68cec82109f3ce69fe1f01c59a\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\\\";\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport \\\"./interfaces/IWyvernExchange.sol\\\";\\nimport \\\"./interfaces/IExchangeV2.sol\\\";\\nimport \\\"./interfaces/ISeaPort.sol\\\";\\nimport \\\"./interfaces/Ix2y2.sol\\\";\\nimport \\\"./interfaces/ILooksRare.sol\\\";\\nimport \\\"./interfaces/IBlur.sol\\\";\\n\\nimport \\\"./libraries/IsPausable.sol\\\";\\n\\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\\n using LibTransfer for address;\\n using BpLibrary for uint;\\n using SafeMath for uint;\\n\\n //marketplaces\\n address public immutable wyvernExchange;\\n address public immutable exchangeV2;\\n address public immutable seaPort_1_1;\\n address public immutable x2y2;\\n address public immutable looksRare;\\n address public immutable sudoswap;\\n address public immutable seaPort_1_4;\\n address public immutable looksRareV2;\\n address public immutable blur;\\n address public immutable seaPort_1_5;\\n address public immutable seaPort_1_6;\\n\\n //currencties\\n address public immutable weth;\\n\\n //constants\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n event Execution(bool result);\\n\\n enum Markets {\\n ExchangeV2,//0\\n WyvernExchange,//1\\n SeaPort_1_1,//2\\n X2Y2,//3\\n LooksRareOrders,//4\\n SudoSwap,//5\\n SeaPort_1_4,//6\\n LooksRareV2,//7\\n Blur,//8\\n SeaPort_1_5,//9\\n SeaPort_1_6//10\\n }\\n\\n enum AdditionalDataTypes {\\n NoAdditionalData,\\n RoyaltiesAdditionalData\\n }\\n\\n enum Currencies {\\n ETH,\\n WETH\\n }\\n\\n /**\\n @notice struct for the purchase data\\n @param marketId - market key from Markets enum (what market to use)\\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\\n bytes (27,28) used for dataType\\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\\n @param data - data for market call\\n */\\n struct PurchaseDetails {\\n Markets marketId;\\n uint256 amount;\\n uint fees;\\n bytes data;\\n }\\n\\n /**\\n @notice struct for the data with additional Ddta\\n @param data - data for market call\\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\\n */\\n struct AdditionalData {\\n bytes data;\\n uint[] additionalRoyalties;\\n }\\n\\n constructor(\\n address[11] memory marketplaces,\\n //address _wyvernExchange, 0\\n //address _exchangeV2, 1\\n //address _seaPort_1_1, 2\\n //address _x2y2, 3\\n //address _looksRare, 4\\n //address _sudoswap, 5\\n //address _seaPort_1_4, 6\\n //address _looksRareV2, 7\\n //address _blur, 8\\n //address _seaPort_1_5, 9\\n //address _seaPort_1_6, 10\\n address _weth,\\n address[] memory transferProxies,\\n address initialOwner\\n ) {\\n wyvernExchange = marketplaces[0];\\n exchangeV2 = marketplaces[1];\\n seaPort_1_1 = marketplaces[2];\\n x2y2 = marketplaces[3];\\n looksRare = marketplaces[4];\\n sudoswap = marketplaces[5];\\n seaPort_1_4 = marketplaces[6];\\n looksRareV2 = marketplaces[7];\\n blur = marketplaces[8];\\n seaPort_1_5 = marketplaces[9];\\n seaPort_1_6 = marketplaces[10];\\n\\n weth = _weth;\\n\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n if (_weth != address(0)){\\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n transferOwnership(initialOwner);\\n }\\n\\n /**\\n @notice executes a single purchase\\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n */\\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\\n requireNotPaused();\\n \\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\\n \\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n Currencies currency = getCurrency(purchaseDetails.fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n emit Execution(success);\\n \\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes an array of purchases\\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\\n */\\n \\n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\\n requireNotPaused();\\n\\n uint sumFirstFeesETH = 0;\\n uint sumSecondFeesETH = 0;\\n uint sumFirstFeesWETH = 0;\\n uint sumSecondFeesWETH = 0;\\n bool result = false;\\n\\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = 0;\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\\n }\\n\\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n Currencies currency = getCurrency(purchaseDetails[i].fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n result = result || success;\\n emit Execution(success);\\n }\\n\\n require(result, \\\"no successful executions\\\");\\n\\n //pay fees in ETH \\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\\n\\n //pay fees in WETH\\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\\n\\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes one purchase in ETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n uint paymentAmount = purchaseDetails.amount;\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase wyvernExchange failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\\n\\n if (allowFail) {\\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n Ix2y2(x2y2).run{value : paymentAmount}(input);\\n }\\n\\n //for every element in input.details[] getting\\n // order = input.details[i].orderIdx\\n // and from that order getting item = input.details[i].itemId\\n for (uint i = 0; i < input.details.length; ++i) {\\n uint orderId = input.details[i].orderIdx;\\n uint itemId = input.details[i].itemIdx;\\n bytes memory data = input.orders[orderId].items[itemId].data;\\n {\\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\\n }\\n }\\n\\n // 1 = erc-721\\n if (input.orders[orderId].delegateType == 1) {\\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair721 memory p = pairs[j];\\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\\n }\\n } else if (input.orders[orderId].delegateType == 2) {\\n // 2 = erc-1155\\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair1155 memory p = pairs[j];\\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \\\"\\\");\\n }\\n } else {\\n revert(\\\"unknown delegateType x2y2\\\");\\n }\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\\n if (allowFail) {\\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase sudoswap failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase LooksRareV2 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.Blur){\\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\\n if (allowFail) {\\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId ETH\\\");\\n }\\n\\n //transferring royalties\\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\\n \\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice executes one purchase in WETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n\\n //buying\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed WETH\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId WETH\\\");\\n }\\n \\n //transfer royalties\\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\\n\\n //get fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice transfers ETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n LibTransfer.transferEth(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers WETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers change back to sender\\n */\\n function transferChange() internal {\\n uint ethAmount = address(this).balance;\\n if (ethAmount > 0) {\\n address(msg.sender).transferEth(ethAmount);\\n }\\n }\\n\\n /**\\n @notice transfers weth change back to sender\\n */\\n function transferChangeWETH() internal {\\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\\n if (wethAmount > 0) {\\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\\n }\\n }\\n\\n /**\\n @notice parses fees in base points from one uint and calculates real amount of fees\\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\\n @param amount price of the order\\n @return firstFeeAmount real amount for the first fee\\n @return secondFeeAmount real amount for the second fee\\n */\\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\\n uint firstFee = uint(uint16(fees >> 16));\\n uint secondFee = uint(uint16(fees));\\n return (amount.bp(firstFee), amount.bp(secondFee));\\n }\\n\\n /**\\n @notice parses \\\"fees\\\" field to find the currency for the purchase\\n @param fees field with encoded data\\n @return 0 if ETH, 1 if WETH ERC-20\\n */\\n function getCurrency(uint fees) internal pure returns(Currencies) {\\n return Currencies(uint16(fees >> 48));\\n }\\n\\n\\n /**\\n @notice parses _data to data for market call and additionalData\\n @param feesAndDataType 27 and 28 bytes for dataType\\n @return marketData data for market call\\n @return additionalRoyalties array uint256, (base point + address)\\n */\\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\\n uint[] memory additionalRoyalties;\\n\\n //return no royalties if wrong data type\\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\\n return (_data, additionalRoyalties);\\n }\\n\\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\\n\\n //return no royalties if market doesn't support royalties\\n if (supportsRoyalties(marketId)) {\\n return (additionalData.data, additionalData.additionalRoyalties);\\n } else {\\n return (additionalData.data, additionalRoyalties);\\n } \\n }\\n \\n revert(\\\"unknown additionalDataType\\\");\\n }\\n\\n /**\\n @notice transfer additional royalties in ETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeETH(value, account);\\n }\\n }\\n }\\n\\n /**\\n @notice transfer additional royalties in WETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeWETH(value, account);\\n }\\n }\\n }\\n\\n // modifies `src`\\n function _arrayReplace(\\n bytes memory src,\\n bytes memory replacement,\\n bytes memory mask\\n ) internal view virtual {\\n require(src.length == replacement.length);\\n require(src.length == mask.length);\\n\\n for (uint256 i = 0; i < src.length; ++i) {\\n if (mask[i] != 0) {\\n src[i] = replacement[i];\\n }\\n }\\n }\\n\\n /**\\n @notice returns true if this contract supports additional royalties for the marketplace;\\n now royalties are supported for:\\n 1. SudoSwap\\n 2. LooksRare old\\n 3. LooksRare V2\\n */\\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\\n if (\\n marketId == Markets.SudoSwap ||\\n marketId == Markets.LooksRareOrders ||\\n marketId == Markets.LooksRareV2\\n ) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\\n uint result = 0;\\n\\n Currencies currency = getCurrency(detail.fees);\\n\\n //for every purchase with WETH we sum amount, fees and royalties needed\\n if (currency == Currencies.WETH) {\\n\\n //add amount\\n result = result + detail.amount;\\n\\n //add fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\\n result = result + firstFeeAmount + secondFeeAmount;\\n\\n //add royalties\\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\\n for (uint j = 0; j < royalties.length; ++j) {\\n uint royaltyBasePoint = uint(royalties[j] >> 160);\\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\\n result = result + royaltyValue;\\n }\\n }\\n\\n return result;\\n }\\n\\n /**\\n @notice approves weth for a list of the addresses\\n @param transferProxies - array of addresses to approve WETH for\\n */\\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n receive() external payable {}\\n}\",\"keccak256\":\"0xef372314c49c4a4c44c2956a8d3e875e4c1016963969f5a867cd9d6162a920c2\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\n\\ninterface IBlur {\\n enum Side { Buy, Sell }\\n enum SignatureVersion { Single, Bulk }\\n enum AssetType { ERC721, ERC1155 }\\n\\n struct Fee {\\n uint16 rate;\\n address payable recipient;\\n }\\n \\n struct Order {\\n address trader;\\n Side side;\\n address matchingPolicy;\\n address collection;\\n uint256 tokenId;\\n uint256 amount;\\n address paymentToken;\\n uint256 price;\\n uint256 listingTime;\\n /* Order expiration timestamp - 0 for oracle cancellations. */\\n uint256 expirationTime;\\n Fee[] fees;\\n uint256 salt;\\n bytes extraParams;\\n }\\n\\n struct Input {\\n Order order;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n bytes extraSignature;\\n SignatureVersion signatureVersion;\\n uint256 blockNumber;\\n }\\n\\n function execute(Input calldata sell, Input calldata buy)\\n external\\n payable;\\n}\\n\",\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-v2/contracts/ExchangeV2.sol\\\";\\n\\nimport {RoyaltiesRegistry} from \\\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\\\";\\nimport {TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\\\";\\nimport {ERC20TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\\\";\\n\\ninterface IExchangeV2 {\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable;\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable;\\n}\",\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibLooksRare.sol\\\";\\n\\ninterface ILooksRare {\\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\\n\\n /**\\n * @notice This function allows a user to execute a taker bid (against a maker ask).\\n * @param takerBid Taker bid struct\\n * @param makerAsk Maker ask struct\\n * @param makerSignature Maker signature\\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\\n * @param affiliate Affiliate address\\n */\\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\\n}\\n\",\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibSeaPort.sol\\\";\\n\\ninterface ISeaPort {\\n function fulfillAdvancedOrder(\\n LibSeaPort.AdvancedOrder calldata advancedOrder,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n bytes32 fulfillerConduitKey,\\n address recipient\\n ) external payable returns (bool fulfilled);\\n\\n function fulfillAvailableAdvancedOrders(\\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\\n bytes32 fulfillerConduitKey,\\n address recipient,\\n uint256 maximumFulfilled\\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\\n\\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\\n external\\n payable\\n returns (bool fulfilled);\\n}\",\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface IWyvernExchange {\\n function atomicMatch_(\\n address[14] memory addrs,\\n uint[18] memory uints,\\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\\n bytes memory calldataBuy,\\n bytes memory calldataSell,\\n bytes memory replacementPatternBuy,\\n bytes memory replacementPatternSell,\\n bytes memory staticExtradataBuy,\\n bytes memory staticExtradataSell,\\n uint8[2] memory vs,\\n bytes32[5] memory rssMetadata)\\n external\\n payable;\\n\\n enum Side {\\n Buy,\\n Sell\\n }\\n\\n enum SaleKind {\\n FixedPrice,\\n DutchAuction\\n }\\n\\n function calculateFinalPrice(\\n Side side,\\n SaleKind saleKind,\\n uint256 basePrice,\\n uint256 extra,\\n uint256 listingTime,\\n uint256 expirationTime\\n ) external view returns (uint256);\\n}\",\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface Ix2y2 {\\n\\n struct OrderItem {\\n uint256 price;\\n bytes data;\\n }\\n\\n struct Pair721 {\\n address token;\\n uint256 tokenId;\\n }\\n\\n struct Pair1155 {\\n address token;\\n uint256 tokenId;\\n uint256 amount;\\n }\\n\\n struct Order {\\n uint256 salt;\\n address user;\\n uint256 network;\\n uint256 intent;\\n uint256 delegateType;\\n uint256 deadline;\\n address currency;\\n bytes dataMask;\\n OrderItem[] items;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n uint8 signVersion;\\n }\\n\\n struct Fee {\\n uint256 percentage;\\n address to;\\n }\\n\\n struct SettleDetail {\\n Op op;\\n uint256 orderIdx;\\n uint256 itemIdx;\\n uint256 price;\\n bytes32 itemHash;\\n address executionDelegate;\\n bytes dataReplacement;\\n uint256 bidIncentivePct;\\n uint256 aucMinIncrementPct;\\n uint256 aucIncDurationSecs;\\n Fee[] fees;\\n }\\n\\n struct SettleShared {\\n uint256 salt;\\n uint256 deadline;\\n uint256 amountToEth;\\n uint256 amountToWeth;\\n address user;\\n bool canFail;\\n }\\n\\n struct RunInput {\\n Order[] orders;\\n SettleDetail[] details;\\n SettleShared shared;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n }\\n\\n enum Op {\\n INVALID,\\n // off-chain\\n COMPLETE_SELL_OFFER,\\n COMPLETE_BUY_OFFER,\\n CANCEL_OFFER,\\n // auction\\n BID,\\n COMPLETE_AUCTION,\\n REFUND_AUCTION,\\n REFUND_AUCTION_STUCK_ITEM\\n }\\n\\n function run(RunInput memory input) external payable;\\n}\",\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nabstract contract IsPausable is Ownable {\\n bool public paused;\\n\\n event Paused(bool paused);\\n\\n function pause(bool _paused) external onlyOwner {\\n paused = _paused;\\n emit Paused(_paused);\\n }\\n\\n function requireNotPaused() internal view {\\n require (!paused, \\\"the contract is paused\\\");\\n }\\n\\n}\\n\",\"keccak256\":\"0xd0ea1d6838dd79b8cfe64e777e4f84456928f0e3621fbb6acd00492e738b2b61\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibLooksRare {\\n struct MakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address signer; // signer of the maker order\\n address collection; // collection address\\n uint256 price; // price (used as )\\n uint256 tokenId; // id of the token\\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\\n address currency; // currency (e.g., WETH)\\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\\n uint256 startTime; // startTime in timestamp\\n uint256 endTime; // endTime in timestamp\\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // additional parameters\\n uint8 v; // v: parameter (27 or 28)\\n bytes32 r; // r: parameter\\n bytes32 s; // s: parameter\\n }\\n\\n struct TakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address taker; // msg.sender\\n uint256 price; // final price for the purchase\\n uint256 tokenId;\\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // other params (e.g., tokenId)\\n }\\n\\n /**\\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\\n */\\n enum CollectionType {\\n ERC721,\\n ERC1155\\n }\\n\\n /**\\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\\n */\\n enum QuoteType {\\n Bid,\\n Ask\\n }\\n /**\\n * 1. Maker struct\\n */\\n\\n /**\\n * @notice Maker is the struct for a maker order.\\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\\n * @param globalNonce Global user order nonce for maker orders\\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\\n * @param strategyId Strategy id\\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\\n * @param collection Collection address\\n * @param currency Currency address (@dev address(0) = ETH)\\n * @param signer Signer address\\n * @param startTime Start timestamp\\n * @param endTime End timestamp\\n * @param price Minimum price for maker ask, maximum price for maker bid\\n * @param itemIds Array of itemIds\\n * @param amounts Array of amounts\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Maker {\\n QuoteType quoteType;\\n uint256 globalNonce;\\n uint256 subsetNonce;\\n uint256 orderNonce;\\n uint256 strategyId;\\n CollectionType collectionType;\\n address collection;\\n address currency;\\n address signer;\\n uint256 startTime;\\n uint256 endTime;\\n uint256 price;\\n uint256[] itemIds;\\n uint256[] amounts;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 2. Taker struct\\n */\\n\\n /**\\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Taker {\\n address recipient;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 3. Merkle tree struct\\n */\\n\\n enum MerkleTreeNodePosition {\\n Left,\\n Right\\n }\\n\\n /**\\n * @notice MerkleTreeNode is a MerkleTree's node.\\n * @param value It can be an order hash or a proof\\n * @param position The node's position in its branch.\\n * It can be left or right or none\\n * (before the tree is sorted).\\n */\\n struct MerkleTreeNode {\\n bytes32 value;\\n MerkleTreeNodePosition position;\\n }\\n\\n /**\\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\\n * @dev A Merkle tree can be computed with order hashes.\\n * It can contain order hashes from both maker bid and maker ask structs.\\n * @param root Merkle root\\n * @param proof Array containing the merkle proof\\n */\\n struct MerkleTree {\\n bytes32 root;\\n MerkleTreeNode[] proof;\\n }\\n}\\n\",\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibSeaPort {\\n /**\\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\\n * matching, a group of six functions may be called that only requires a\\n * subset of the usual order arguments. Note the use of a \\\"basicOrderType\\\"\\n * enum; this represents both the usual order type as well as the \\\"route\\\"\\n * of the basic order (a simple derivation function for the basic order\\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\\n */\\n struct BasicOrderParameters {\\n address considerationToken; // 0x24\\n uint256 considerationIdentifier; // 0x44\\n uint256 considerationAmount; // 0x64\\n address payable offerer; // 0x84\\n address zone; // 0xa4\\n address offerToken; // 0xc4\\n uint256 offerIdentifier; // 0xe4\\n uint256 offerAmount; // 0x104\\n BasicOrderType basicOrderType; // 0x124\\n uint256 startTime; // 0x144\\n uint256 endTime; // 0x164\\n bytes32 zoneHash; // 0x184\\n uint256 salt; // 0x1a4\\n bytes32 offererConduitKey; // 0x1c4\\n bytes32 fulfillerConduitKey; // 0x1e4\\n uint256 totalOriginalAdditionalRecipients; // 0x204\\n AdditionalRecipient[] additionalRecipients; // 0x224\\n bytes signature; // 0x244\\n }\\n /**\\n * @dev Basic orders can supply any number of additional recipients, with the\\n * implied assumption that they are supplied from the offered ETH (or other\\n * native token) or ERC20 token for the order.\\n */\\n struct AdditionalRecipient {\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum BasicOrderType {\\n // 0: no partial fills, anyone can execute\\n ETH_TO_ERC721_FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n ETH_TO_ERC721_PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC721_FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 4: no partial fills, anyone can execute\\n ETH_TO_ERC1155_FULL_OPEN,\\n\\n // 5: partial fills supported, anyone can execute\\n ETH_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 6: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 7: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 8: no partial fills, anyone can execute\\n ERC20_TO_ERC721_FULL_OPEN,\\n\\n // 9: partial fills supported, anyone can execute\\n ERC20_TO_ERC721_PARTIAL_OPEN,\\n\\n // 10: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC721_FULL_RESTRICTED,\\n\\n // 11: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 12: no partial fills, anyone can execute\\n ERC20_TO_ERC1155_FULL_OPEN,\\n\\n // 13: partial fills supported, anyone can execute\\n ERC20_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 14: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 15: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 16: no partial fills, anyone can execute\\n ERC721_TO_ERC20_FULL_OPEN,\\n\\n // 17: partial fills supported, anyone can execute\\n ERC721_TO_ERC20_PARTIAL_OPEN,\\n\\n // 18: no partial fills, only offerer or zone can execute\\n ERC721_TO_ERC20_FULL_RESTRICTED,\\n\\n // 19: partial fills supported, only offerer or zone can execute\\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\\n\\n // 20: no partial fills, anyone can execute\\n ERC1155_TO_ERC20_FULL_OPEN,\\n\\n // 21: partial fills supported, anyone can execute\\n ERC1155_TO_ERC20_PARTIAL_OPEN,\\n\\n // 22: no partial fills, only offerer or zone can execute\\n ERC1155_TO_ERC20_FULL_RESTRICTED,\\n\\n // 23: partial fills supported, only offerer or zone can execute\\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\\n }\\n\\n /**\\n * @dev The full set of order components, with the exception of the counter,\\n * must be supplied when fulfilling more sophisticated orders or groups of\\n * orders. The total number of original consideration items must also be\\n * supplied, as the caller may specify additional consideration items.\\n */\\n struct OrderParameters {\\n address offerer; // 0x00\\n address zone; // 0x20\\n OfferItem[] offer; // 0x40\\n ConsiderationItem[] consideration; // 0x60\\n OrderType orderType; // 0x80\\n uint256 startTime; // 0xa0\\n uint256 endTime; // 0xc0\\n bytes32 zoneHash; // 0xe0\\n uint256 salt; // 0x100\\n bytes32 conduitKey; // 0x120\\n uint256 totalOriginalConsiderationItems; // 0x140\\n // offer.length // 0x160\\n }\\n\\n /**\\n * @dev Orders require a signature in addition to the other order parameters.\\n */\\n struct Order {\\n OrderParameters parameters;\\n bytes signature;\\n }\\n\\n struct AdvancedOrder {\\n OrderParameters parameters;\\n uint120 numerator;\\n uint120 denominator;\\n bytes signature;\\n bytes extraData;\\n }\\n\\n struct OfferItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n }\\n\\n /**\\n * @dev A consideration item has the same five components as an offer item and\\n * an additional sixth component designating the required recipient of the\\n * item.\\n */\\n struct ConsiderationItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum OrderType {\\n // 0: no partial fills, anyone can execute\\n FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n PARTIAL_RESTRICTED\\n }\\n\\n // prettier-ignore\\n enum ItemType {\\n // 0: ETH on mainnet, MATIC on polygon, etc.\\n NATIVE,\\n\\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\\n ERC20,\\n\\n // 2: ERC721 items\\n ERC721,\\n\\n // 3: ERC1155 items\\n ERC1155,\\n\\n // 4: ERC721 items where a number of tokenIds are supported\\n ERC721_WITH_CRITERIA,\\n\\n // 5: ERC1155 items where a number of ids are supported\\n ERC1155_WITH_CRITERIA\\n }\\n\\n /**\\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\\n * offer and consideration items, then generates a single execution\\n * element. A given fulfillment can be applied to as many offer and\\n * consideration items as desired, but must contain at least one offer and\\n * at least one consideration that match. The fulfillment must also remain\\n * consistent on all key parameters across all offer items (same offerer,\\n * token, type, tokenId, and conduit preference) as well as across all\\n * consideration items (token, type, tokenId, and recipient).\\n */\\n struct Fulfillment {\\n FulfillmentComponent[] offerComponents;\\n FulfillmentComponent[] considerationComponents;\\n }\\n\\n /**\\n * @dev Each fulfillment component contains one index referencing a specific\\n * order and another referencing a specific offer or consideration item.\\n */\\n struct FulfillmentComponent {\\n uint256 orderIndex;\\n uint256 itemIndex;\\n }\\n\\n /**\\n * @dev An execution is triggered once all consideration items have been zeroed\\n * out. It sends the item in question from the offerer to the item's\\n * recipient, optionally sourcing approvals from either this contract\\n * directly or from the offerer's chosen conduit if one is specified. An\\n * execution is not provided as an argument, but rather is derived via\\n * orders, criteria resolvers, and fulfillments (where the total number of\\n * executions will be less than or equal to the total number of indicated\\n * fulfillments) and returned as part of `matchOrders`.\\n */\\n struct Execution {\\n ReceivedItem item;\\n address offerer;\\n bytes32 conduitKey;\\n }\\n\\n /**\\n * @dev A received item is translated from a utilized consideration item and has\\n * the same four components as a spent item, as well as an additional fifth\\n * component designating the required recipient of the item.\\n */\\n struct ReceivedItem {\\n ItemType itemType;\\n address token;\\n uint256 identifier;\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n struct CriteriaResolver {\\n uint256 orderIndex;\\n Side side;\\n uint256 index;\\n uint256 identifier;\\n bytes32[] criteriaProof;\\n }\\n\\n // prettier-ignore\\n enum Side {\\n // 0: Items that can be spent\\n OFFER,\\n\\n // 1: Items that must be received\\n CONSIDERATION\\n }\\n}\\n\",\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n function __RoyaltiesRegistry_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0xe0ea605e62d7b65dae93684b5102383b3b9fec0ade21efca0f2831d468738f50\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function _setTransferProxy(bytes4 assetType, address proxy) internal {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xea639616c66696b5ae9b278d3c6c9a85839bb5e815a4db046b4fd0225cd86625\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __ERC20TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x2fce5fa6025c24a87072eed4cec6ff8e9172ec7b72ca211286904847adf4a324\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x23a035508922fbe29dfb91796175b391943f830eead313134142a01bd776f848\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6102006040523480156200001257600080fd5b50604051620050b5380380620050b5833981016040819052620000359162000466565b60006200004162000219565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602062005095833981519152908290a3506200008c6301ffc9a760e01b6200021d565b6200009e630271189760e51b6200021d565b83516001600160601b0319606091821b811660809081526020870151831b821660a09081526040880151841b831660c090815284890151851b841660e090815292890151851b841661010090815291890151851b841661012090815290890151851b841661014090815292890151851b84166101605290880151841b831661018052870151831b82166101a052860151821b81166101c0529084901b166101e05260005b825181101562000203576001600160a01b03841615620001fa57836001600160a01b031663095ea7b38483815181106200017857fe5b60200260200101516000196040518363ffffffff1660e01b8152600401620001a29291906200055f565b602060405180830381600087803b158015620001bd57600080fd5b505af1158015620001d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f8919062000536565b505b60010162000142565b506200020f81620002a5565b505050506200059c565b3390565b6001600160e01b031980821614156200027d576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b620002af62000219565b6001600160a01b0316620002c2620003af565b6001600160a01b0316146200031e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620003655760405162461bcd60e51b81526004018080602001828103825260268152602001806200506f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216916000805160206200509583398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b80516001600160a01b0381168114620003d657600080fd5b919050565b600082601f830112620003ec578081fd5b815160206001600160401b038211156200040257fe5b8082026200041282820162000578565b8381528281019086840183880185018910156200042d578687fd5b8693505b858410156200045a576200044581620003be565b83526001939093019291840191840162000431565b50979650505050505050565b6000806000806101c085870312156200047d578384fd5b85601f8601126200048c578384fd5b6101606200049a8162000578565b90860190808789841115620004ad578788fd5b875b600b811015620004da57620004c482620003be565b84526020938401939190910190600101620004af565b50508096505050620004ec81620003be565b61018087015190945090506001600160401b038111156200050b578283fd5b6200051987828801620003db565b9250506200052b6101a08601620003be565b905092959194509250565b60006020828403121562000548578081fd5b8151801515811462000558578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b03811182821017156200059457fe5b604052919050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6149ac620006c360003980610517528061062f528061084c52806109bf52806123e3528061249a5280612529525080610d8c5280611dee52806122ab5250806104cf5280611d1c52806121db525080610c555280611b375280611bd15250806104f35280611a2d525080610c0d528061195b528061210b525080610544528061188952508061092b528061165d52806116f7525080610db05280611204528061129a5250806103cf5280610f525280611f6052508061094f5280611101528061203b525080610c31528061102f52506149ac6000f3fe60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200c805bd259b6e7fc099e514b3de13443a4ec4de2e14c673f7017d1283feec1a764736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200c805bd259b6e7fc099e514b3de13443a4ec4de2e14c673f7017d1283feec1a764736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "approveWETH(address[])": { + "params": { + "transferProxies": "- array of addresses to approve WETH for" + } + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "params": { + "allowFail": "- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch", + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- array of deatails about the purchases (more info in PurchaseDetails struct)" + } + }, + "onERC721Received(address,address,uint256,bytes)": { + "details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "params": { + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- deatails about the purchase (more info in PurchaseDetails struct)" + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "approveWETH(address[])": { + "notice": "approves weth for a list of the addresses" + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "notice": "executes an array of purchases" + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "notice": "executes a single purchase" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 5578, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 17504, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "paused", + "offset": 0, + "slot": "2", + "type": "t_bool" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry.json b/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry.json new file mode 100644 index 000000000..cee52a573 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry.json @@ -0,0 +1,620 @@ +{ + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForContract", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForToken", + "type": "event" + }, + { + "inputs": [], + "name": "__RoyaltiesRegistry_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__RoyaltiesRegistry_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "clearRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltiesType", + "type": "uint256" + } + ], + "name": "forceSetRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getProvider", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoyalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getRoyaltiesType", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesByToken", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "royaltiesByTokenAndTokenId", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesProviders", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "provider", + "type": "address" + } + ], + "name": "setProviderByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "setRoyaltiesByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "811009", + "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", + "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3", + "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426261, + "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + }, + { + "transactionIndex": 1, + "blockNumber": 4426261, + "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + }, + { + "transactionIndex": 1, + "blockNumber": 4426261, + "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + }, + { + "transactionIndex": 1, + "blockNumber": 4426261, + "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 3, + "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + } + ], + "blockNumber": 4426261, + "cumulativeGasUsed": "854884", + "status": 1, + "byzantium": true + }, + "args": [ + "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "__RoyaltiesRegistry_init_proxy", + "args": [ + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ] + }, + "implementation": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Implementation.json b/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Implementation.json new file mode 100644 index 000000000..7e52a9666 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Implementation.json @@ -0,0 +1,639 @@ +{ + "address": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForContract", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForToken", + "type": "event" + }, + { + "inputs": [], + "name": "__RoyaltiesRegistry_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__RoyaltiesRegistry_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "clearRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltiesType", + "type": "uint256" + } + ], + "name": "forceSetRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getProvider", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoyalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getRoyaltiesType", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesByToken", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "royaltiesByTokenAndTokenId", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesProviders", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "provider", + "type": "address" + } + ], + "name": "setProviderByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "setRoyaltiesByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x00d92ccf6e81ca6109a5ea14e85d5fa7a4928e4f51821fddfce9089947fc6aa4", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1663864", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x9c87fd165ef0a771b46756b8e507288d19b8383a6d63c65df842cbc6673746cc", + "transactionHash": "0x00d92ccf6e81ca6109a5ea14e85d5fa7a4928e4f51821fddfce9089947fc6aa4", + "logs": [], + "blockNumber": 4426258, + "cumulativeGasUsed": "1718927", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForToken\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__RoyaltiesRegistry_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__RoyaltiesRegistry_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"clearRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltiesType\",\"type\":\"uint256\"}],\"name\":\"forceSetRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getRoyalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getRoyaltiesType\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesByToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"royaltiesByTokenAndTokenId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesProviders\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"setProviderByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"setRoyaltiesByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RoyaltiesSetForContract(address,(address,uint96)[])\":{\"details\":\"emitted when royalties set for token in \"},\"RoyaltiesSetForToken(address,uint256,(address,uint96)[])\":{\"details\":\"deprecated\"}},\"kind\":\"dev\",\"methods\":{\"clearRoyaltiesType(address)\":{\"details\":\"clears royalties type for token contract\"},\"forceSetRoyaltiesType(address,uint256)\":{\"details\":\"clears and sets new royalties type for token contract\"},\"getProvider(address)\":{\"details\":\"returns provider address for token contract from royaltiesProviders mapping\"},\"getRoyalties(address,uint256)\":{\"details\":\"returns royalties for token contract and token id\"},\"getRoyaltiesType(address)\":{\"details\":\"returns royalties type for token contract\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setProviderByToken(address,address)\":{\"details\":\"sets external provider for token contract, and royalties type = 4\"},\"setRoyaltiesByToken(address,(address,uint96)[])\":{\"details\":\"sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"royaltiesByToken\":{\"details\":\"stores royalties for token contract, set in setRoyaltiesByToken() method\"},\"royaltiesByTokenAndTokenId\":{\"details\":\"deprecated\"},\"royaltiesProviders\":{\"details\":\"stores external provider and royalties type for token contract\"},\"royaltiesTypesAmount\":{\"details\":\"total amount or supported royalties types\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":\"RoyaltiesRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n function __RoyaltiesRegistry_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0xe0ea605e62d7b65dae93684b5102383b3b9fec0ade21efca0f2831d468738f50\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50611c43806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063d836f01311610066578063d836f013146101e9578063f2fde38b146101fc578063f39cc7061461020f578063fc73be0014610222576100f5565b80638da5cb5b1461019b5780639ca7dc7a146101a3578063acf14efb146101c3578063d1da3cce146101d6576100f5565b806336eff6c2116100d357806336eff6c21461014057806355f21eb714610153578063715018a61461017357806382b19f121461017b576100f5565b806305df952f146100fa57806317c44b171461012357806327fff8ab14610138575b600080fd5b61010d610108366004611517565b610235565b60405161011a919061198c565b60405180910390f35b610136610131366004611517565b61024a565b005b6101366102fe565b61013661014e366004611677565b6103a8565b610166610161366004611517565b6103c4565b60405161011a91906118fe565b6101366103e3565b61018e610189366004611517565b6104a1565b60405161011a9190611b2d565b6101666104c9565b6101b66101b1366004611677565b6104d8565b60405161011a919061192b565b6101366101d1366004611587565b610676565b61010d6101e43660046118e6565b6108b2565b6101366101f736600461154f565b6108c7565b61013661020a366004611517565b6108dc565b61018e61021d366004611517565b6109f1565b610136610230366004611517565b610a03565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102635750610263610a34565b80610271575060005460ff16155b6102ac5760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff161580156102d7576000805460ff1961ff0019909116610100171660011790555b6102df610a45565b6102e8826108dc565b80156102fa576000805461ff00191690555b5050565b600054610100900460ff16806103175750610317610a34565b80610325575060005460ff16155b6103605760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff1615801561038b576000805460ff1961ff0019909116610100171660011790555b610393610a45565b80156103a5576000805461ff00191690555b50565b6103b182610b3e565b6102fa82826103bf856103c4565b610c14565b6001600160a01b0381166000908152606760205260409020545b919050565b6103eb610c6b565b6001600160a01b03166103fc6104c9565b6001600160a01b031614610457576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546104c390610c6f565b92915050565b6033546001600160a01b031690565b6001600160a01b03821660009081526067602052604081205460609181906104ff82610c6f565b90508061051d576105108683610cad565b905061051d868284610c14565b80600114156105b9576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156105ab57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161055c565b5050505093505050506104c3565b80600214156105d6576105cc8686610ebb565b93505050506104c3565b80600314156105e9576105cc8686610f7b565b80600414156105fd576105cc86868461122f565b8060051415610610576105cc86866112f6565b806006141561065557604080516000808252602082019092529061064a565b6106376114ce565b81526020019060019003908161062f5790505b5093505050506104c3565b60405162461bcd60e51b815260040161066d906119ac565b60405180910390fd5b61067f82610b3e565b6001600160a01b03821660009081526067602052604081208190556106a8908390600190610c14565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106d660018301826114e5565b505060005b82518110156108305760006001600160a01b03168382815181106106fb57fe5b6020026020010151600001516001600160a01b0316141561072e5760405162461bcd60e51b815260040161066d906119e3565b82818151811061073a57fe5b6020026020010151602001516001600160601b03166000141561076f5760405162461bcd60e51b815260040161066d90611ab0565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106107a357fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061080c57fe5b6020026020010151602001516001600160601b0316820191508060010190506106db565b5061271081106108525760405162461bcd60e51b815260040161066d90611a2f565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906108a590859061192b565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b6108d082610b3e565b6102fa82600483610c14565b6108e4610c6b565b6001600160a01b03166108f56104c9565b6001600160a01b031614610950576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166109955760405162461bcd60e51b8152600401808060200182810382526026815260200180611bba6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b610a0c81610b3e565b610a15816103c4565b6001600160a01b03918216600090815260676020526040902091169055565b6000610a3f306113c0565b15905090565b600054610100900460ff1680610a5e5750610a5e610a34565b80610a6c575060005460ff16155b610aa75760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad2576000805460ff1961ff0019909116610100171660011790555b6000610adc610c6b565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156103a5576000805461ff001916905550565b610b46610c6b565b6001600160a01b0316610b576104c9565b6001600160a01b031614158015610bf75750610b71610c6b565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb357600080fd5b505afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190611533565b6001600160a01b031614155b156103a55760405162461bcd60e51b815260040161066d90611a79565b600082118015610c25575060068211155b610c415760405162461bcd60e51b815260040161066d90611b00565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610ca457806101000360020a8381610c8c57fe5b0460011415610c9c5790506103de565b600101610c74565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610ce39063656cb66560e11b90600401611997565b60206040518083038186803b158015610cfb57600080fd5b505afa925050508015610d2b575060408051601f3d908101601f19168201909252610d28918101906118c6565b60015b610d3457610d46565b8015610d445760029150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d7990632dde656160e21b90600401611997565b60206040518083038186803b158015610d9157600080fd5b505afa925050508015610dc1575060408051601f3d908101601f19168201909252610dbe918101906118c6565b60015b610dca57610ddc565b8015610dda5760039150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610e0f9063152a902d60e11b90600401611997565b60206040518083038186803b158015610e2757600080fd5b505afa925050508015610e57575060408051601f3d908101601f19168201909252610e54918101906118c6565b60015b610e6057610e72565b8015610e705760059150506104c3565b505b6001600160a01b03821615610e89575060046104c3565b6001600160a01b03831660009081526066602052604090205460ff1615610eb2575060016104c3565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610eea908590600401611b2d565b60006040518083038186803b158015610f0257600080fd5b505afa925050508015610f3757506040513d6000823e601f3d908101601f19168201604052610f349190810190611768565b60015b610f74576040805160008082526020820190925290610f6c565b610f596114ce565b815260200190600190039081610f515790505b5090506104c3565b90506104c3565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610fae908790600401611b2d565b60006040518083038186803b158015610fc657600080fd5b505afa925050508015610ffb57506040513d6000823e601f3d908101601f19168201604052610ff891908101906116cf565b60015b61103a576040805160008082526020820190925290611030565b61101d6114ce565b8152602001906001900390816110155790505b50925050506104c3565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f9061106b908890600401611b2d565b60006040518083038186803b15801561108357600080fd5b505afa9250505080156110b857506040513d6000823e601f3d908101601f191682016040526110b59190810190611842565b60015b6110f757604080516000808252602082019092529061064a565b6110da6114ce565b8152602001906001900390816110d25790505093505050506104c3565b9050815181511461113d57604080516000808252602082019092529061064a565b6111206114ce565b8152602001906001900390816111185790505093505050506104c3565b6000815167ffffffffffffffff8111801561115757600080fd5b5060405190808252806020026020018201604052801561119157816020015b61117e6114ce565b8152602001906001900390816111765790505b50905060005b8251811015611224578281815181106111ac57fe5b60200260200101518282815181106111c057fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250508381815181106111f057fe5b602002602001015182828151811061120457fe5b60209081029190910101516001600160a01b039091169052600101611197565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906112609087908790600401611912565b600060405180830381600087803b15801561127a57600080fd5b505af19250505080156112af57506040513d6000823e601f3d908101601f191682016040526112ac9190810190611768565b60015b6112ec5760408051600080825260208201909252906112e4565b6112d16114ce565b8152602001906001900390816112c95790505b5090506112ef565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061132a908590620f424090600401611b36565b604080518083038186803b15801561134157600080fd5b505afa925050508015611371575060408051601f3d908101601f1916820190925261136e918101906116a2565b60015b6113ad576040805160008082526020820190925290610f6c565b6113936114ce565b81526020019060019003908161138b5790505090506104c3565b6113b782826113c6565b925050506104c3565b3b151590565b606080826113d55790506104c3565b6000620f424061271085020490506127108110611439576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b6114566114ce565b81526020019060019003908161144e579050509150848260008151811061147957fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106114ab57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906103a591905b8082111561151357600081556001016114ff565b5090565b600060208284031215611528578081fd5b81356112ef81611b8f565b600060208284031215611544578081fd5b81516112ef81611b8f565b60008060408385031215611561578081fd5b823561156c81611b8f565b9150602083013561157c81611b8f565b809150509250929050565b600080604080848603121561159a578283fd5b83356115a581611b8f565b925060208481013567ffffffffffffffff808211156115c2578485fd5b818701915087601f8301126115d5578485fd5b81356115e86115e382611b71565b611b4d565b81815284810190848601878402860187018c1015611604578889fd5b8895505b838610156116655787818d03121561161e578889fd5b8751888101818110878211171561163157fe5b8952813561163e81611b8f565b81528188013561164d81611ba4565b81890152835260019590950194918601918701611608565b50809750505050505050509250929050565b60008060408385031215611689578182fd5b823561169481611b8f565b946020939093013593505050565b600080604083850312156116b4578182fd5b82516116bf81611b8f565b6020939093015192949293505050565b600060208083850312156116e1578182fd5b825167ffffffffffffffff8111156116f7578283fd5b8301601f81018513611707578283fd5b80516117156115e382611b71565b8181528381019083850185840285018601891015611731578687fd5b8694505b8385101561175c57805161174881611b8f565b835260019490940193918501918501611735565b50979650505050505050565b6000602080838503121561177a578182fd5b825167ffffffffffffffff80821115611791578384fd5b818501915085601f8301126117a4578384fd5b81516117b26115e382611b71565b818152848101908486016040808502870188018b10156117d0578889fd5b8896505b848710156118335780828c0312156117ea578889fd5b805181810181811088821117156117fd57fe5b8252825161180a81611b8f565b81528289015161181981611ba4565b818a015284526001969096019592870192908101906117d4565b50909998505050505050505050565b60006020808385031215611854578182fd5b825167ffffffffffffffff81111561186a578283fd5b8301601f8101851361187a578283fd5b80516118886115e382611b71565b81815283810190838501858402850186018910156118a4578687fd5b8694505b8385101561175c5780518352600194909401939185019185016118a8565b6000602082840312156118d7578081fd5b815180151581146112ef578182fd5b6000602082840312156118f7578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b8281101561197f57815180516001600160a01b031685528601516001600160601b0316868501529284019290850190600101611948565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611b6957fe5b604052919050565b600067ffffffffffffffff821115611b8557fe5b5060209081020190565b6001600160a01b03811681146103a557600080fd5b6001600160601b03811681146103a557600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a26469706673582212206011445674d35ef28e96f7be2c7e18367ccbf39ba213446ab0ff8093543dc49764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063d836f01311610066578063d836f013146101e9578063f2fde38b146101fc578063f39cc7061461020f578063fc73be0014610222576100f5565b80638da5cb5b1461019b5780639ca7dc7a146101a3578063acf14efb146101c3578063d1da3cce146101d6576100f5565b806336eff6c2116100d357806336eff6c21461014057806355f21eb714610153578063715018a61461017357806382b19f121461017b576100f5565b806305df952f146100fa57806317c44b171461012357806327fff8ab14610138575b600080fd5b61010d610108366004611517565b610235565b60405161011a919061198c565b60405180910390f35b610136610131366004611517565b61024a565b005b6101366102fe565b61013661014e366004611677565b6103a8565b610166610161366004611517565b6103c4565b60405161011a91906118fe565b6101366103e3565b61018e610189366004611517565b6104a1565b60405161011a9190611b2d565b6101666104c9565b6101b66101b1366004611677565b6104d8565b60405161011a919061192b565b6101366101d1366004611587565b610676565b61010d6101e43660046118e6565b6108b2565b6101366101f736600461154f565b6108c7565b61013661020a366004611517565b6108dc565b61018e61021d366004611517565b6109f1565b610136610230366004611517565b610a03565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102635750610263610a34565b80610271575060005460ff16155b6102ac5760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff161580156102d7576000805460ff1961ff0019909116610100171660011790555b6102df610a45565b6102e8826108dc565b80156102fa576000805461ff00191690555b5050565b600054610100900460ff16806103175750610317610a34565b80610325575060005460ff16155b6103605760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff1615801561038b576000805460ff1961ff0019909116610100171660011790555b610393610a45565b80156103a5576000805461ff00191690555b50565b6103b182610b3e565b6102fa82826103bf856103c4565b610c14565b6001600160a01b0381166000908152606760205260409020545b919050565b6103eb610c6b565b6001600160a01b03166103fc6104c9565b6001600160a01b031614610457576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546104c390610c6f565b92915050565b6033546001600160a01b031690565b6001600160a01b03821660009081526067602052604081205460609181906104ff82610c6f565b90508061051d576105108683610cad565b905061051d868284610c14565b80600114156105b9576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156105ab57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161055c565b5050505093505050506104c3565b80600214156105d6576105cc8686610ebb565b93505050506104c3565b80600314156105e9576105cc8686610f7b565b80600414156105fd576105cc86868461122f565b8060051415610610576105cc86866112f6565b806006141561065557604080516000808252602082019092529061064a565b6106376114ce565b81526020019060019003908161062f5790505b5093505050506104c3565b60405162461bcd60e51b815260040161066d906119ac565b60405180910390fd5b61067f82610b3e565b6001600160a01b03821660009081526067602052604081208190556106a8908390600190610c14565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106d660018301826114e5565b505060005b82518110156108305760006001600160a01b03168382815181106106fb57fe5b6020026020010151600001516001600160a01b0316141561072e5760405162461bcd60e51b815260040161066d906119e3565b82818151811061073a57fe5b6020026020010151602001516001600160601b03166000141561076f5760405162461bcd60e51b815260040161066d90611ab0565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106107a357fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061080c57fe5b6020026020010151602001516001600160601b0316820191508060010190506106db565b5061271081106108525760405162461bcd60e51b815260040161066d90611a2f565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906108a590859061192b565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b6108d082610b3e565b6102fa82600483610c14565b6108e4610c6b565b6001600160a01b03166108f56104c9565b6001600160a01b031614610950576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166109955760405162461bcd60e51b8152600401808060200182810382526026815260200180611bba6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b610a0c81610b3e565b610a15816103c4565b6001600160a01b03918216600090815260676020526040902091169055565b6000610a3f306113c0565b15905090565b600054610100900460ff1680610a5e5750610a5e610a34565b80610a6c575060005460ff16155b610aa75760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad2576000805460ff1961ff0019909116610100171660011790555b6000610adc610c6b565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156103a5576000805461ff001916905550565b610b46610c6b565b6001600160a01b0316610b576104c9565b6001600160a01b031614158015610bf75750610b71610c6b565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb357600080fd5b505afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190611533565b6001600160a01b031614155b156103a55760405162461bcd60e51b815260040161066d90611a79565b600082118015610c25575060068211155b610c415760405162461bcd60e51b815260040161066d90611b00565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610ca457806101000360020a8381610c8c57fe5b0460011415610c9c5790506103de565b600101610c74565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610ce39063656cb66560e11b90600401611997565b60206040518083038186803b158015610cfb57600080fd5b505afa925050508015610d2b575060408051601f3d908101601f19168201909252610d28918101906118c6565b60015b610d3457610d46565b8015610d445760029150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d7990632dde656160e21b90600401611997565b60206040518083038186803b158015610d9157600080fd5b505afa925050508015610dc1575060408051601f3d908101601f19168201909252610dbe918101906118c6565b60015b610dca57610ddc565b8015610dda5760039150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610e0f9063152a902d60e11b90600401611997565b60206040518083038186803b158015610e2757600080fd5b505afa925050508015610e57575060408051601f3d908101601f19168201909252610e54918101906118c6565b60015b610e6057610e72565b8015610e705760059150506104c3565b505b6001600160a01b03821615610e89575060046104c3565b6001600160a01b03831660009081526066602052604090205460ff1615610eb2575060016104c3565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610eea908590600401611b2d565b60006040518083038186803b158015610f0257600080fd5b505afa925050508015610f3757506040513d6000823e601f3d908101601f19168201604052610f349190810190611768565b60015b610f74576040805160008082526020820190925290610f6c565b610f596114ce565b815260200190600190039081610f515790505b5090506104c3565b90506104c3565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610fae908790600401611b2d565b60006040518083038186803b158015610fc657600080fd5b505afa925050508015610ffb57506040513d6000823e601f3d908101601f19168201604052610ff891908101906116cf565b60015b61103a576040805160008082526020820190925290611030565b61101d6114ce565b8152602001906001900390816110155790505b50925050506104c3565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f9061106b908890600401611b2d565b60006040518083038186803b15801561108357600080fd5b505afa9250505080156110b857506040513d6000823e601f3d908101601f191682016040526110b59190810190611842565b60015b6110f757604080516000808252602082019092529061064a565b6110da6114ce565b8152602001906001900390816110d25790505093505050506104c3565b9050815181511461113d57604080516000808252602082019092529061064a565b6111206114ce565b8152602001906001900390816111185790505093505050506104c3565b6000815167ffffffffffffffff8111801561115757600080fd5b5060405190808252806020026020018201604052801561119157816020015b61117e6114ce565b8152602001906001900390816111765790505b50905060005b8251811015611224578281815181106111ac57fe5b60200260200101518282815181106111c057fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250508381815181106111f057fe5b602002602001015182828151811061120457fe5b60209081029190910101516001600160a01b039091169052600101611197565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906112609087908790600401611912565b600060405180830381600087803b15801561127a57600080fd5b505af19250505080156112af57506040513d6000823e601f3d908101601f191682016040526112ac9190810190611768565b60015b6112ec5760408051600080825260208201909252906112e4565b6112d16114ce565b8152602001906001900390816112c95790505b5090506112ef565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061132a908590620f424090600401611b36565b604080518083038186803b15801561134157600080fd5b505afa925050508015611371575060408051601f3d908101601f1916820190925261136e918101906116a2565b60015b6113ad576040805160008082526020820190925290610f6c565b6113936114ce565b81526020019060019003908161138b5790505090506104c3565b6113b782826113c6565b925050506104c3565b3b151590565b606080826113d55790506104c3565b6000620f424061271085020490506127108110611439576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b6114566114ce565b81526020019060019003908161144e579050509150848260008151811061147957fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106114ab57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906103a591905b8082111561151357600081556001016114ff565b5090565b600060208284031215611528578081fd5b81356112ef81611b8f565b600060208284031215611544578081fd5b81516112ef81611b8f565b60008060408385031215611561578081fd5b823561156c81611b8f565b9150602083013561157c81611b8f565b809150509250929050565b600080604080848603121561159a578283fd5b83356115a581611b8f565b925060208481013567ffffffffffffffff808211156115c2578485fd5b818701915087601f8301126115d5578485fd5b81356115e86115e382611b71565b611b4d565b81815284810190848601878402860187018c1015611604578889fd5b8895505b838610156116655787818d03121561161e578889fd5b8751888101818110878211171561163157fe5b8952813561163e81611b8f565b81528188013561164d81611ba4565b81890152835260019590950194918601918701611608565b50809750505050505050509250929050565b60008060408385031215611689578182fd5b823561169481611b8f565b946020939093013593505050565b600080604083850312156116b4578182fd5b82516116bf81611b8f565b6020939093015192949293505050565b600060208083850312156116e1578182fd5b825167ffffffffffffffff8111156116f7578283fd5b8301601f81018513611707578283fd5b80516117156115e382611b71565b8181528381019083850185840285018601891015611731578687fd5b8694505b8385101561175c57805161174881611b8f565b835260019490940193918501918501611735565b50979650505050505050565b6000602080838503121561177a578182fd5b825167ffffffffffffffff80821115611791578384fd5b818501915085601f8301126117a4578384fd5b81516117b26115e382611b71565b818152848101908486016040808502870188018b10156117d0578889fd5b8896505b848710156118335780828c0312156117ea578889fd5b805181810181811088821117156117fd57fe5b8252825161180a81611b8f565b81528289015161181981611ba4565b818a015284526001969096019592870192908101906117d4565b50909998505050505050505050565b60006020808385031215611854578182fd5b825167ffffffffffffffff81111561186a578283fd5b8301601f8101851361187a578283fd5b80516118886115e382611b71565b81815283810190838501858402850186018910156118a4578687fd5b8694505b8385101561175c5780518352600194909401939185019185016118a8565b6000602082840312156118d7578081fd5b815180151581146112ef578182fd5b6000602082840312156118f7578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b8281101561197f57815180516001600160a01b031685528601516001600160601b0316868501529284019290850190600101611948565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611b6957fe5b604052919050565b600067ffffffffffffffff821115611b8557fe5b5060209081020190565b6001600160a01b03811681146103a557600080fd5b6001600160601b03811681146103a557600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a26469706673582212206011445674d35ef28e96f7be2c7e18367ccbf39ba213446ab0ff8093543dc49764736f6c63430007060033", + "devdoc": { + "events": { + "RoyaltiesSetForContract(address,(address,uint96)[])": { + "details": "emitted when royalties set for token in " + }, + "RoyaltiesSetForToken(address,uint256,(address,uint96)[])": { + "details": "deprecated" + } + }, + "kind": "dev", + "methods": { + "clearRoyaltiesType(address)": { + "details": "clears royalties type for token contract" + }, + "forceSetRoyaltiesType(address,uint256)": { + "details": "clears and sets new royalties type for token contract" + }, + "getProvider(address)": { + "details": "returns provider address for token contract from royaltiesProviders mapping" + }, + "getRoyalties(address,uint256)": { + "details": "returns royalties for token contract and token id" + }, + "getRoyaltiesType(address)": { + "details": "returns royalties type for token contract" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "setProviderByToken(address,address)": { + "details": "sets external provider for token contract, and royalties type = 4" + }, + "setRoyaltiesByToken(address,(address,uint96)[])": { + "details": "sets royalties for token contract in royaltiesByToken mapping and royalties type = 1" + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "stateVariables": { + "royaltiesByToken": { + "details": "stores royalties for token contract, set in setRoyaltiesByToken() method" + }, + "royaltiesByTokenAndTokenId": { + "details": "deprecated" + }, + "royaltiesProviders": { + "details": "stores external provider and royalties type for token contract" + }, + "royaltiesTypesAmount": { + "details": "total amount or supported royalties types" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 20000, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesByTokenAndTokenId", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes32,t_struct(RoyaltiesSet)19995_storage)" + }, + { + "astId": 20005, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesByToken", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_struct(RoyaltiesSet)19995_storage)" + }, + { + "astId": 20010, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesProviders", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 20805, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "104", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)19269_storage)dyn_storage": { + "base": "t_struct(Part)19269_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)46_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(RoyaltiesSet)19995_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RoyaltiesRegistry.RoyaltiesSet)", + "numberOfBytes": "32", + "value": "t_struct(RoyaltiesSet)19995_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_struct(RoyaltiesSet)19995_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct RoyaltiesRegistry.RoyaltiesSet)", + "numberOfBytes": "32", + "value": "t_struct(RoyaltiesSet)19995_storage" + }, + "t_struct(Part)19269_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 19266, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 19268, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoyaltiesSet)19995_storage": { + "encoding": "inplace", + "label": "struct RoyaltiesRegistry.RoyaltiesSet", + "members": [ + { + "astId": 19991, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 19994, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royalties", + "offset": 0, + "slot": "1", + "type": "t_array(t_struct(Part)19269_storage)dyn_storage" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Proxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Proxy.json new file mode 100644 index 000000000..e011c51f2 --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Proxy.json @@ -0,0 +1,263 @@ +{ + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "811009", + "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", + "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3", + "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 4426261, + "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + }, + { + "transactionIndex": 1, + "blockNumber": 4426261, + "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + }, + { + "transactionIndex": 1, + "blockNumber": 4426261, + "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + }, + { + "transactionIndex": 1, + "blockNumber": 4426261, + "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 3, + "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + } + ], + "blockNumber": 4426261, + "cumulativeGasUsed": "854884", + "status": 1, + "byzantium": true + }, + "args": [ + "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/TransferProxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/TransferProxy.json new file mode 100644 index 000000000..5580026ed --- /dev/null +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/TransferProxy.json @@ -0,0 +1,319 @@ +{ + "address": "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__TransferProxy_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__TransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC1155Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "erc1155safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC721Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "erc721safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xadc0d858f7fffab8c52ffbd1451b3df084bf858ea09e2c707fe544f6cb8a9025", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "777214", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x765e210d32d6bace1a17a55994ca824b97f75e93190336b03f4ded0c0f87791f", + "transactionHash": "0xadc0d858f7fffab8c52ffbd1451b3df084bf858ea09e2c707fe544f6cb8a9025", + "logs": [], + "blockNumber": 4426263, + "cumulativeGasUsed": "821089", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__TransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"erc1155safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC721Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"erc721safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":\"TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x23a035508922fbe29dfb91796175b391943f830eead313134142a01bd776f848\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610c7b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80639870d7fe116100715780639870d7fe146101125780639c1c2ee914610138578063ac8a584a146101d5578063e814f46d146101fb578063f2fde38b14610221578063f709b90614610247576100a9565b80632ff26a0a146100ae578063495edf86146100b8578063715018a6146100c057806374dc542b146100c85780638da5cb5b146100ee575b600080fd5b6100b6610283565b005b6100b6610335565b6100b66103ca565b6100b6600480360360208110156100de57600080fd5b50356001600160a01b0316610476565b6100f661052a565b604080516001600160a01b039092168252519081900360200190f35b6100b66004803603602081101561012857600080fd5b50356001600160a01b0316610539565b6100b6600480360360c081101561014e57600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561019657600080fd5b8201836020820111156101a857600080fd5b803590602001918460018302840111640100000000831117156101ca57600080fd5b5090925090506105bf565b6100b6600480360360208110156101eb57600080fd5b50356001600160a01b03166106e8565b6100b66004803603602081101561021157600080fd5b50356001600160a01b031661076b565b6100b66004803603602081101561023757600080fd5b50356001600160a01b0316610808565b6100b66004803603608081101561025d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561090b565b600054610100900460ff168061029c575061029c6109f5565b806102aa575060005460ff16155b6102e55760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610310576000805460ff1961ff0019909116610100171660011790555b610318610a06565b610320610aa6565b8015610332576000805461ff00191690555b50565b600054610100900460ff168061034e575061034e6109f5565b8061035c575060005460ff16155b6103975760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156103c2576000805460ff1961ff0019909116610100171660011790555b610320610283565b6103d2610b9f565b6001600160a01b03166103e361052a565b6001600160a01b03161461042c576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff168061048f575061048f6109f5565b8061049d575060005460ff16155b6104d85760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610503576000805460ff1961ff0019909116610100171660011790555b61050b610283565b61051482610808565b8015610526576000805461ff00191690555b5050565b6033546001600160a01b031690565b610541610b9f565b6001600160a01b031661055261052a565b6001600160a01b03161461059b576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006105cb610b9f565b6001600160a01b0316815260208101919091526040016000205460ff166106235760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156106c757600080fd5b505af11580156106db573d6000803e3d6000fd5b5050505050505050505050565b6106f0610b9f565b6001600160a01b031661070161052a565b6001600160a01b03161461074a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff168061078457506107846109f5565b80610792575060005460ff16155b6107cd5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156107f8576000805460ff1961ff0019909116610100171660011790555b610800610a06565b61050b610aa6565b610810610b9f565b6001600160a01b031661082161052a565b6001600160a01b03161461086a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b0381166108af5760405162461bcd60e51b8152600401808060200182810382526026815260200180610baa6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60656000610917610b9f565b6001600160a01b0316815260208101919091526040016000205460ff1661096f5760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156109d757600080fd5b505af11580156109eb573d6000803e3d6000fd5b5050505050505050565b6000610a0030610ba3565b15905090565b600054610100900460ff1680610a1f5750610a1f6109f5565b80610a2d575060005460ff16155b610a685760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610320576000805460ff1961ff0019909116610100171660011790558015610332576000805461ff001916905550565b600054610100900460ff1680610abf5750610abf6109f5565b80610acd575060005460ff16155b610b085760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610b33576000805460ff1961ff0019909116610100171660011790555b6000610b3d610b9f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610332576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220747ec40a8b785524508be701dc7a3088a8e915dd61c7a4cdc61564ce75450d3464736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80639870d7fe116100715780639870d7fe146101125780639c1c2ee914610138578063ac8a584a146101d5578063e814f46d146101fb578063f2fde38b14610221578063f709b90614610247576100a9565b80632ff26a0a146100ae578063495edf86146100b8578063715018a6146100c057806374dc542b146100c85780638da5cb5b146100ee575b600080fd5b6100b6610283565b005b6100b6610335565b6100b66103ca565b6100b6600480360360208110156100de57600080fd5b50356001600160a01b0316610476565b6100f661052a565b604080516001600160a01b039092168252519081900360200190f35b6100b66004803603602081101561012857600080fd5b50356001600160a01b0316610539565b6100b6600480360360c081101561014e57600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561019657600080fd5b8201836020820111156101a857600080fd5b803590602001918460018302840111640100000000831117156101ca57600080fd5b5090925090506105bf565b6100b6600480360360208110156101eb57600080fd5b50356001600160a01b03166106e8565b6100b66004803603602081101561021157600080fd5b50356001600160a01b031661076b565b6100b66004803603602081101561023757600080fd5b50356001600160a01b0316610808565b6100b66004803603608081101561025d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561090b565b600054610100900460ff168061029c575061029c6109f5565b806102aa575060005460ff16155b6102e55760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610310576000805460ff1961ff0019909116610100171660011790555b610318610a06565b610320610aa6565b8015610332576000805461ff00191690555b50565b600054610100900460ff168061034e575061034e6109f5565b8061035c575060005460ff16155b6103975760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156103c2576000805460ff1961ff0019909116610100171660011790555b610320610283565b6103d2610b9f565b6001600160a01b03166103e361052a565b6001600160a01b03161461042c576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff168061048f575061048f6109f5565b8061049d575060005460ff16155b6104d85760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610503576000805460ff1961ff0019909116610100171660011790555b61050b610283565b61051482610808565b8015610526576000805461ff00191690555b5050565b6033546001600160a01b031690565b610541610b9f565b6001600160a01b031661055261052a565b6001600160a01b03161461059b576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006105cb610b9f565b6001600160a01b0316815260208101919091526040016000205460ff166106235760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156106c757600080fd5b505af11580156106db573d6000803e3d6000fd5b5050505050505050505050565b6106f0610b9f565b6001600160a01b031661070161052a565b6001600160a01b03161461074a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff168061078457506107846109f5565b80610792575060005460ff16155b6107cd5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156107f8576000805460ff1961ff0019909116610100171660011790555b610800610a06565b61050b610aa6565b610810610b9f565b6001600160a01b031661082161052a565b6001600160a01b03161461086a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b0381166108af5760405162461bcd60e51b8152600401808060200182810382526026815260200180610baa6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60656000610917610b9f565b6001600160a01b0316815260208101919091526040016000205460ff1661096f5760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156109d757600080fd5b505af11580156109eb573d6000803e3d6000fd5b5050505050505050565b6000610a0030610ba3565b15905090565b600054610100900460ff1680610a1f5750610a1f6109f5565b80610a2d575060005460ff16155b610a685760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610320576000805460ff1961ff0019909116610100171660011790558015610332576000805461ff001916905550565b600054610100900460ff1680610abf5750610abf6109f5565b80610acd575060005460ff16155b610b085760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610b33576000805460ff1961ff0019909116610100171660011790555b6000610b3d610b9f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610332576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220747ec40a8b785524508be701dc7a3088a8e915dd61c7a4cdc61564ce75450d3464736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19884, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sepolia/solcInputs/7238d10cc6d9b157a0ebb0f70bc36233.json b/projects/hardhat-deploy/deployments/lisk_sepolia/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json similarity index 89% rename from projects/hardhat-deploy/deployments/sepolia/solcInputs/7238d10cc6d9b157a0ebb0f70bc36233.json rename to projects/hardhat-deploy/deployments/lisk_sepolia/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json index 3a6032497..cd67d7888 100644 --- a/projects/hardhat-deploy/deployments/sepolia/solcInputs/7238d10cc6d9b157a0ebb0f70bc36233.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json @@ -200,13 +200,13 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" }, "@rarible/exchange-v2/contracts/AssetMatcher.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function _setAssetMatcher(bytes4 assetType, address matcher) internal {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" }, "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function __ExchangeV2_init_proxy(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _initialOwner,\n bytes4[] memory assetTypes, \n address[] memory proxies,\n bytes4 assetMatcherType,\n address assetMatcher\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n for (uint i = 0; i < assetTypes.length; i++) {\n _setTransferProxy(assetTypes[i], proxies[i]);\n }\n _setAssetMatcher(assetMatcherType, assetMatcher);\n transferOwnership(_initialOwner);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" }, "@rarible/exchange-v2/contracts/ExchangeV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n function __ExchangeV2_init_proxy(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _initialOwner,\n bytes4[] memory assetTypes, \n address[] memory proxies,\n bytes4 assetMatcherType,\n address assetMatcher\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n for (uint i = 0; i < assetTypes.length; i++) {\n _setTransferProxy(assetTypes[i], proxies[i]);\n }\n _setAssetMatcher(assetMatcherType, assetMatcher);\n transferOwnership(_initialOwner);\n }\n}\n" }, "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\n require(newFill.leftValue > 0, \"nothing to fill\");\n }\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\n require(newFill.rightValue > 0, \"nothing to fill\");\n }\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" @@ -272,7 +272,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" }, "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,\n WyvernExchange,\n SeaPort_1_1,\n X2Y2,\n LooksRareOrders,\n SudoSwap,\n SeaPort_1_4,\n LooksRareV2,\n Blur,\n SeaPort_1_5\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[10] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n address public immutable seaPort_1_6;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,//0\n WyvernExchange,//1\n SeaPort_1_1,//2\n X2Y2,//3\n LooksRareOrders,//4\n SudoSwap,//5\n SeaPort_1_4,//6\n LooksRareV2,//7\n Blur,//8\n SeaPort_1_5,//9\n SeaPort_1_6//10\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[11] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n //address _seaPort_1_6, 10\n address _weth,\n address[] memory transferProxies,\n address initialOwner\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n seaPort_1_6 = marketplaces[10];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n transferOwnership(initialOwner);\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" }, "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" @@ -314,7 +314,7 @@ "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" }, "@rarible/role-operator/contracts/OperatorRole.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n transferOwnership(initialOwner);\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" }, "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" @@ -335,7 +335,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" }, "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n function __RoyaltiesRegistry_init_proxy(address _initialOwner) external initializer {\n __Ownable_init_unchained();\n transferOwnership(_initialOwner);\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" }, "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" @@ -386,31 +386,31 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\n\ncontract TestERC721 is ERC721Upgradeable {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" }, "@rarible/tokens/contracts/access/MinterAccessControl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n transferOwnership(initialOwner);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" }, "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n transferOwnership(initialOwner);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" }, "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" @@ -419,7 +419,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" @@ -428,19 +428,19 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC1155Rarible(initialOwner, _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" @@ -455,7 +455,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" @@ -482,7 +482,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" }, "@rarible/tokens/contracts/HasContractURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" }, "@rarible/tokens/contracts/IsPrivateCollection.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" @@ -512,19 +512,19 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n ProtocolFeeData memory _protocolFee,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param _protocolFee protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n ProtocolFeeData memory _protocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = _protocolFee.buyerAmount;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" }, "@rarible/transfer-manager/contracts/TransferExecutor.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function _setTransferProxy(bytes4 assetType, address proxy) internal {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" }, "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n\n function __ERC1155LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n transferOwnership(_initialOwner);\n }\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" }, "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n\n function __ERC721LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n transferOwnership(_initialOwner);\n }\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" }, "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function __ERC20TransferProxy_init_proxy(address _initialOwner) external initializer {\n __Ownable_init();\n transferOwnership(_initialOwner);\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" }, "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function __TransferProxy_init_proxy(address _initialOwner) external initializer {\n __Ownable_init();\n transferOwnership(_initialOwner);\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" }, "@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract PunkTransferProxy is OperatorRole, ITransferProxy {\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, uint punkIndex) = abi.decode(asset.assetType.data, (address, uint));\n ICryptoPunksMarket punkToken = ICryptoPunksMarket(token);\n //check punk from real owner\n require(punkToken.punkIndexToAddress(punkIndex) == from, \"Seller not punk owner\");\n //buy punk to proxy, now proxy is owner\n punkToken.buyPunk(punkIndex);\n //Transfer ownership of a punk to buyer\n punkToken.transferPunk(to, punkIndex);\n }\n}" diff --git a/projects/hardhat-deploy/deployments/sepolia/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/projects/hardhat-deploy/deployments/lisk_sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json similarity index 52% rename from projects/hardhat-deploy/deployments/sepolia/solcInputs/0e89febeebc7444140de8e67c9067d2c.json rename to projects/hardhat-deploy/deployments/lisk_sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json index 6eb5ed905..d314de77e 100644 --- a/projects/hardhat-deploy/deployments/sepolia/solcInputs/0e89febeebc7444140de8e67c9067d2c.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -1,53 +1,116 @@ { "language": "Solidity", "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, "solc_0.8/openzeppelin/access/Ownable.sol": { "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" }, - "solc_0.8/openzeppelin/utils/Context.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" }, - "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" }, - "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" }, "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, "solc_0.8/openzeppelin/proxy/Proxy.sol": { "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" }, - "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" }, - "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" }, - "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" }, "solc_0.8/openzeppelin/utils/Address.sol": { "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, "solc_0.8/openzeppelin/utils/StorageSlot.sol": { "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" }, - "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" }, - "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" }, - "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" }, - "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" }, - "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" } }, "settings": { diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/.chainId b/projects/hardhat-deploy/deployments/polygon_mumbai/.chainId deleted file mode 100644 index d7e2f72ce..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/.chainId +++ /dev/null @@ -1 +0,0 @@ -80001 \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/DefaultProxyAdmin.json b/projects/hardhat-deploy/deployments/polygon_mumbai/DefaultProxyAdmin.json deleted file mode 100644 index daf0de3df..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/DefaultProxyAdmin.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - "address": "0x4D575330Ac1892880316D5C912DCd0f0D7aAF7f6", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeProxyAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - } - ], - "name": "getProxyAdmin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - } - ], - "name": "getProxyImplementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract TransparentUpgradeableProxy", - "name": "proxy", - "type": "address" - }, - { - "internalType": "address", - "name": "implementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(TransparentUpgradeableProxy proxy, address implementation, bytes memory data) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x36cc024d326dd48b4ec20983ec4b9335b8edf44ae45ebdd5a2ea8217f872f9f8\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./UpgradeableProxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _setAdmin(admin_);\\n }\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _admin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _admin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n require(newAdmin != address(0), \\\"TransparentUpgradeableProxy: new admin is the zero address\\\");\\n emit AdminChanged(_admin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address adm) {\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n adm := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n bytes32 slot = _ADMIN_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newAdmin)\\n }\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _admin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0xf852214ea286716082f3ba480ff70bda2cbe2d11238091d2a440767d0ed49e61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n *\\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\\n * {TransparentUpgradeableProxy}.\\n */\\ncontract UpgradeableProxy is Proxy {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) public payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _setImplementation(_logic);\\n if(_data.length > 0) {\\n Address.functionDelegateCall(_logic, _data);\\n }\\n }\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Upgrades the proxy to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal virtual {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableProxy: new implementation is not a contract\\\");\\n\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newImplementation)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x81af1059a5bd5fb25cb0351499e1d4110416f5b0000ffad6427cbf6088b193a4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50600061001b61006a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35061006e565b3390565b61087b8061007d6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103d4565b34801561012d57600080fd5b506100b36104a1565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104b0945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105e9565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661069a565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b031661079c565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107fb565b6001600160a01b03166103416104a1565b6001600160a01b03161461038a576040805162461bcd60e51b81526020600482018190526024820152600080516020610826833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103dc6107fb565b6001600160a01b03166103ed6104a1565b6001600160a01b031614610436576040805162461bcd60e51b81526020600482018190526024820152600080516020610826833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561048557600080fd5b505af1158015610499573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104b86107fb565b6001600160a01b03166104c96104a1565b6001600160a01b031614610512576040805162461bcd60e51b81526020600482018190526024820152600080516020610826833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057f578181015183820152602001610567565b50505050905090810190601f1680156105ac5780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105cb57600080fd5b505af11580156105df573d6000803e3d6000fd5b5050505050505050565b6105f16107fb565b6001600160a01b03166106026104a1565b6001600160a01b03161461064b576040805162461bcd60e51b81526020600482018190526024820152600080516020610826833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561048557600080fd5b6106a26107fb565b6001600160a01b03166106b36104a1565b6001600160a01b0316146106fc576040805162461bcd60e51b81526020600482018190526024820152600080516020610826833981519152604482015290519081900360640190fd5b6001600160a01b0381166107415760405162461bcd60e51b81526004018080602001828103825260268152602001806108006026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122090ef1c46b0c1e942059cf9a092a08ef4f4a5fa5f06d85bf63e5062b0fcc95ab964736f6c63430007060033", - "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461013657806399a88ec4146101f5578063f2fde38b14610230578063f3b7dead146102635761007b565b8063204e1c7a14610080578063715018a6146100cf5780637eff275e146100e65780638da5cb5b14610121575b600080fd5b34801561008c57600080fd5b506100b3600480360360208110156100a357600080fd5b50356001600160a01b0316610296565b604080516001600160a01b039092168252519081900360200190f35b3480156100db57600080fd5b506100e4610328565b005b3480156100f257600080fd5b506100e46004803603604081101561010957600080fd5b506001600160a01b03813581169160200135166103d4565b34801561012d57600080fd5b506100b36104a1565b6100e46004803603606081101561014c57600080fd5b6001600160a01b03823581169260208101359091169181019060608101604082013564010000000081111561018057600080fd5b82018360208201111561019257600080fd5b803590602001918460018302840111640100000000831117156101b457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104b0945050505050565b34801561020157600080fd5b506100e46004803603604081101561021857600080fd5b506001600160a01b03813581169160200135166105e9565b34801561023c57600080fd5b506100e46004803603602081101561025357600080fd5b50356001600160a01b031661069a565b34801561026f57600080fd5b506100b36004803603602081101561028657600080fd5b50356001600160a01b031661079c565b6000806000836001600160a01b03166040518080635c60da1b60e01b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b606091505b50915091508161030957600080fd5b80806020019051602081101561031e57600080fd5b5051949350505050565b6103306107fb565b6001600160a01b03166103416104a1565b6001600160a01b03161461038a576040805162461bcd60e51b81526020600482018190526024820152600080516020610826833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6103dc6107fb565b6001600160a01b03166103ed6104a1565b6001600160a01b031614610436576040805162461bcd60e51b81526020600482018190526024820152600080516020610826833981519152604482015290519081900360640190fd5b816001600160a01b0316638f283970826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561048557600080fd5b505af1158015610499573d6000803e3d6000fd5b505050505050565b6000546001600160a01b031690565b6104b86107fb565b6001600160a01b03166104c96104a1565b6001600160a01b031614610512576040805162461bcd60e51b81526020600482018190526024820152600080516020610826833981519152604482015290519081900360640190fd5b826001600160a01b0316634f1ef2863484846040518463ffffffff1660e01b815260040180836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561057f578181015183820152602001610567565b50505050905090810190601f1680156105ac5780820380516001836020036101000a031916815260200191505b5093505050506000604051808303818588803b1580156105cb57600080fd5b505af11580156105df573d6000803e3d6000fd5b5050505050505050565b6105f16107fb565b6001600160a01b03166106026104a1565b6001600160a01b03161461064b576040805162461bcd60e51b81526020600482018190526024820152600080516020610826833981519152604482015290519081900360640190fd5b816001600160a01b0316633659cfe6826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801561048557600080fd5b6106a26107fb565b6001600160a01b03166106b36104a1565b6001600160a01b0316146106fc576040805162461bcd60e51b81526020600482018190526024820152600080516020610826833981519152604482015290519081900360640190fd5b6001600160a01b0381166107415760405162461bcd60e51b81526004018080602001828103825260268152602001806108006026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000836001600160a01b031660405180806303e1469160e61b8152506004019050600060405180830381855afa9150503d80600081146102f5576040519150601f19603f3d011682016040523d82523d6000602084013e6102fa565b339056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122090ef1c46b0c1e942059cf9a092a08ef4f4a5fa5f06d85bf63e5062b0fcc95ab964736f6c63430007060033", - "devdoc": { - "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", - "kind": "dev", - "methods": { - "changeProxyAdmin(address,address)": { - "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." - }, - "getProxyAdmin(address)": { - "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." - }, - "getProxyImplementation(address)": { - "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "upgrade(address,address)": { - "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." - }, - "upgradeAndCall(address,address,bytes)": { - "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 5462, - "contract": "@openzeppelin/contracts/proxy/ProxyAdmin.sol:ProxyAdmin", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155LazyMintTransferProxy.json deleted file mode 100644 index cfb0db275..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155LazyMintTransferProxy.json +++ /dev/null @@ -1,250 +0,0 @@ -{ - "address": "0x8fd27f771bf72C1F8c8b78FCdcf323C0C34f030b", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "__OperatorRole_init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "addOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "removeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "bytes4", - "name": "assetClass", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct LibAsset.AssetType", - "name": "assetType", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "internalType": "struct LibAsset.Asset", - "name": "asset", - "type": "tuple" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "transfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":\"ERC1155LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\\n }\\n}\\n\",\"keccak256\":\"0x246520e6a1b1b2a82d45b69e7f62b9a13a989b4cf274554b380f05eeca530edc\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50610e2e806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109dd565b6101b0565b61008a6102a6565b6100af610352565b6040516100bc9190610ba6565b60405180910390f35b61008a6100d33660046108c3565b610361565b61008a6100e63660046108c3565b6103e7565b61008a6100f93660046108c3565b61046a565b600054610100900460ff1680610117575061011761056d565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b61019361057e565b61019b61061e565b80156101ad576000805461ff00191690555b50565b606560006101bc610717565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610dd16028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061023391906108df565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b815260040161026d9493929190610bba565b600060405180830381600087803b15801561028757600080fd5b505af115801561029b573d6000803e3d6000fd5b505050505050505050565b6102ae610717565b6001600160a01b03166102bf610352565b6001600160a01b031614610308576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610369610717565b6001600160a01b031661037a610352565b6001600160a01b0316146103c3576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6103ef610717565b6001600160a01b0316610400610352565b6001600160a01b031614610449576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b610472610717565b6001600160a01b0316610483610352565b6001600160a01b0316146104cc576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b0381166105115760405162461bcd60e51b8152600401808060200182810382526026815260200180610d5d6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105783061071b565b15905090565b600054610100900460ff1680610597575061059761056d565b806105a5575060005460ff16155b6105e05760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff1680610637575061063761056d565b80610645575060005460ff16155b6106805760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff161580156106ab576000805460ff1961ff0019909116610100171660011790555b60006106b5610717565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061073861073384610cf5565b610cb3565b905082815283838301111561074c57600080fd5b61075a836020830184610d17565b9392505050565b803561072081610d47565b600082601f83011261077c578081fd5b8151602061078c61073383610cd7565b82815281810190858301855b858110156107d6578151880189603f8201126107b2578788fd5b6107c38a8783015160408401610725565b8552509284019290840190600101610798565b5090979650505050505050565b600082601f8301126107f3578081fd5b8151602061080361073383610cd7565b82815281810190858301604080860288018501891015610821578687fd5b865b868110156108965781838b031215610839578788fd5b815182810181811067ffffffffffffffff8211171561085457fe5b8352835161086181610d47565b8152838701516bffffffffffffffffffffffff8116811461088057898afd5b8188015285529385019391810191600101610823565b509198975050505050505050565b600082601f8301126108b4578081fd5b61075a83835160208501610725565b6000602082840312156108d4578081fd5b813561075a81610d47565b600080604083850312156108f1578081fd5b82516108fc81610d47565b602084015190925067ffffffffffffffff80821115610919578283fd5b9084019060c0828703121561092c578283fd5b61093660c0610cb3565b8251815260208301518281111561094b578485fd5b610957888286016108a4565b60208301525060408301516040820152606083015182811115610978578485fd5b610984888286016107e3565b60608301525060808301518281111561099b578485fd5b6109a7888286016107e3565b60808301525060a0830151828111156109be578485fd5b6109ca8882860161076c565b60a0830152508093505050509250929050565b6000806000606084860312156109f1578081fd5b833567ffffffffffffffff80821115610a08578283fd5b81860191506040808389031215610a1d578384fd5b80518181018181108482111715610a3057fe5b808352843584811115610a41578687fd5b8501808b03841315610a51578687fd5b608083018281108682111715610a6357fe5b845280356001600160e01b031981168114610a7c578788fd5b825260208181013586811115610a90578889fd5b82019550601f86018c13610aa2578788fd5b85359150610ab261073383610cf5565b8281528c82848901011115610ac5578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610af4818c01610761565b985050505050610b05818801610761565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b6f57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b31565b509495945050505050565b60008151808452610b92816020860160208601610d17565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610be2610140850182610b7a565b9050604088015160c08501526060880151607f19808684030160e0870152610c0a8383610b1e565b925060808a015191508086840301610100870152610c288383610b1e565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610c8157601f19868303018452610c6f828651610b7a565b94870194938701939150600101610c53565b508096505050505050610c9681840187610b11565b50610ca46040830185610b11565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610ccf57fe5b604052919050565b600067ffffffffffffffff821115610ceb57fe5b5060209081020190565b600067ffffffffffffffff821115610d0957fe5b50601f01601f191660200190565b60005b83811015610d32578181015183820152602001610d1a565b83811115610d41576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a28019e3a9ffc83e27b05dd4ff150123e74358301a86a8729d2441ab31507f4664736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109dd565b6101b0565b61008a6102a6565b6100af610352565b6040516100bc9190610ba6565b60405180910390f35b61008a6100d33660046108c3565b610361565b61008a6100e63660046108c3565b6103e7565b61008a6100f93660046108c3565b61046a565b600054610100900460ff1680610117575061011761056d565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b61019361057e565b61019b61061e565b80156101ad576000805461ff00191690555b50565b606560006101bc610717565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610dd16028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061023391906108df565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b815260040161026d9493929190610bba565b600060405180830381600087803b15801561028757600080fd5b505af115801561029b573d6000803e3d6000fd5b505050505050505050565b6102ae610717565b6001600160a01b03166102bf610352565b6001600160a01b031614610308576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610369610717565b6001600160a01b031661037a610352565b6001600160a01b0316146103c3576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6103ef610717565b6001600160a01b0316610400610352565b6001600160a01b031614610449576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b610472610717565b6001600160a01b0316610483610352565b6001600160a01b0316146104cc576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b0381166105115760405162461bcd60e51b8152600401808060200182810382526026815260200180610d5d6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105783061071b565b15905090565b600054610100900460ff1680610597575061059761056d565b806105a5575060005460ff16155b6105e05760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff1680610637575061063761056d565b80610645575060005460ff16155b6106805760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff161580156106ab576000805460ff1961ff0019909116610100171660011790555b60006106b5610717565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061073861073384610cf5565b610cb3565b905082815283838301111561074c57600080fd5b61075a836020830184610d17565b9392505050565b803561072081610d47565b600082601f83011261077c578081fd5b8151602061078c61073383610cd7565b82815281810190858301855b858110156107d6578151880189603f8201126107b2578788fd5b6107c38a8783015160408401610725565b8552509284019290840190600101610798565b5090979650505050505050565b600082601f8301126107f3578081fd5b8151602061080361073383610cd7565b82815281810190858301604080860288018501891015610821578687fd5b865b868110156108965781838b031215610839578788fd5b815182810181811067ffffffffffffffff8211171561085457fe5b8352835161086181610d47565b8152838701516bffffffffffffffffffffffff8116811461088057898afd5b8188015285529385019391810191600101610823565b509198975050505050505050565b600082601f8301126108b4578081fd5b61075a83835160208501610725565b6000602082840312156108d4578081fd5b813561075a81610d47565b600080604083850312156108f1578081fd5b82516108fc81610d47565b602084015190925067ffffffffffffffff80821115610919578283fd5b9084019060c0828703121561092c578283fd5b61093660c0610cb3565b8251815260208301518281111561094b578485fd5b610957888286016108a4565b60208301525060408301516040820152606083015182811115610978578485fd5b610984888286016107e3565b60608301525060808301518281111561099b578485fd5b6109a7888286016107e3565b60808301525060a0830151828111156109be578485fd5b6109ca8882860161076c565b60a0830152508093505050509250929050565b6000806000606084860312156109f1578081fd5b833567ffffffffffffffff80821115610a08578283fd5b81860191506040808389031215610a1d578384fd5b80518181018181108482111715610a3057fe5b808352843584811115610a41578687fd5b8501808b03841315610a51578687fd5b608083018281108682111715610a6357fe5b845280356001600160e01b031981168114610a7c578788fd5b825260208181013586811115610a90578889fd5b82019550601f86018c13610aa2578788fd5b85359150610ab261073383610cf5565b8281528c82848901011115610ac5578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610af4818c01610761565b985050505050610b05818801610761565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b6f57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b31565b509495945050505050565b60008151808452610b92816020860160208601610d17565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610be2610140850182610b7a565b9050604088015160c08501526060880151607f19808684030160e0870152610c0a8383610b1e565b925060808a015191508086840301610100870152610c288383610b1e565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610c8157601f19868303018452610c6f828651610b7a565b94870194938701939150600101610c53565b508096505050505050610c9681840187610b11565b50610ca46040830185610b11565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610ccf57fe5b604052919050565b600067ffffffffffffffff821115610ceb57fe5b5060209081020190565b600067ffffffffffffffff821115610d0957fe5b50601f01601f191660200190565b60005b83811015610d32578181015183820152602001610d1a565b83811115610d41576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a28019e3a9ffc83e27b05dd4ff150123e74358301a86a8729d2441ab31507f4664736f6c63430007060033", - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 739, - "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 742, - "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 4256, - "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 10, - "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address" - }, - { - "astId": 129, - "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage" - }, - { - "astId": 19576, - "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", - "label": "operators", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_address,t_bool)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)49_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleBeacon.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleBeacon.json deleted file mode 100644 index 9bcb4bf6f..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleBeacon.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "address": "0xc76E23b62294c4a6f92a86470cbD4897D9AaB356", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\":\"ERC1155RaribleBeacon\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\\n constructor(address impl) UpgradeableBeacon(impl) {\\n\\n }\\n}\\n\",\"keccak256\":\"0xeac97cea9e8e27a1a405f493d56456e845c2a3e6058e48d931f0f692865d3f9f\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506040516105d73803806105d78339818101604052602081101561003357600080fd5b505180600061004061009a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100938161009e565b5050610114565b3390565b6100b18161010e60201b6103821760201c565b6100ec5760405162461bcd60e51b81526004018080602001828103825260338152602001806105a46033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b610481806101236000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220e9d7f6e22783cbcada5463072ff2ae001e3cc27936a59d613ef9b7d47e56193964736f6c634300070600335570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220e9d7f6e22783cbcada5463072ff2ae001e3cc27936a59d613ef9b7d47e56193964736f6c63430007060033", - "devdoc": { - "kind": "dev", - "methods": { - "implementation()": { - "details": "Returns the current implementation address." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "upgradeTo(address)": { - "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 5462, - "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol:ERC1155RaribleBeacon", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6517, - "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol:ERC1155RaribleBeacon", - "label": "_implementation", - "offset": 0, - "slot": "1", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleBeaconMeta.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleBeaconMeta.json deleted file mode 100644 index 16cc8667e..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleBeaconMeta.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "address": "0xc76E23b62294c4a6f92a86470cbD4897D9AaB356", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\":\"ERC1155RaribleBeaconMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\\n constructor(address impl) UpgradeableBeacon(impl) {\\n\\n }\\n}\\n\",\"keccak256\":\"0x57542843e45d104f4bba423476cdc9e39f7ef6ebd3dda73e760e6961e6e66c33\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506040516105d73803806105d78339818101604052602081101561003357600080fd5b505180600061004061009a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100938161009e565b5050610114565b3390565b6100b18161010e60201b6103821760201c565b6100ec5760405162461bcd60e51b81526004018080602001828103825260338152602001806105a46033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b610481806101236000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220b8a4d47218d4878de05172b369b07dfc1e4154b02bf44bfe334636245d8dcff364736f6c634300070600335570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220b8a4d47218d4878de05172b369b07dfc1e4154b02bf44bfe334636245d8dcff364736f6c63430007060033", - "devdoc": { - "kind": "dev", - "methods": { - "implementation()": { - "details": "Returns the current implementation address." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "upgradeTo(address)": { - "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 5462, - "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol:ERC1155RaribleBeaconMeta", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6517, - "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol:ERC1155RaribleBeaconMeta", - "label": "_implementation", - "offset": 0, - "slot": "1", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleFactoryC2.json deleted file mode 100644 index b2eb09ecf..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleFactoryC2.json +++ /dev/null @@ -1,340 +0,0 @@ -{ - "address": "0xAa9CD5834E0009902EeAA3FEfAc6A160e9A096b4", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_beacon", - "type": "address" - }, - { - "internalType": "address", - "name": "_transferProxy", - "type": "address" - }, - { - "internalType": "address", - "name": "_lazyTransferProxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "name": "Create1155RaribleProxy", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "name": "Create1155RaribleUserProxy", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "beacon", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "baseURI", - "type": "string" - }, - { - "internalType": "string", - "name": "contractURI", - "type": "string" - }, - { - "internalType": "address[]", - "name": "operators", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "salt", - "type": "uint256" - } - ], - "name": "createToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "baseURI", - "type": "string" - }, - { - "internalType": "string", - "name": "contractURI", - "type": "string" - }, - { - "internalType": "uint256", - "name": "salt", - "type": "uint256" - } - ], - "name": "createToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "baseURI", - "type": "string" - }, - { - "internalType": "string", - "name": "contractURI", - "type": "string" - }, - { - "internalType": "address[]", - "name": "operators", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - } - ], - "name": "getAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "baseURI", - "type": "string" - }, - { - "internalType": "string", - "name": "contractURI", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - } - ], - "name": "getAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":\"ERC1155RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-1155/ERC1155Rarible.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\\n *\\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC1155RaribleFactoryC2 is Ownable{\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create1155RaribleProxy(address proxy);\\n event Create1155RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleProxy(beaconProxy);\\n }\\n \\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n\\n}\\n\",\"keccak256\":\"0xf2c0efef181a15847820a0eafa6c85af2502d48586283d1404fb10ab06388949\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n function __ERC1155Burnable_init() internal {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155Burnable_init_unchained();\\n }\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x04026ec0775a9613c66bf515f9454e3025214af3fbefbc5cf0bf639f05653cd0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Base.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n \\n isPrivate = true;\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n \\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0xf3d502238807629731e84e509bd669962e01492f857c1f1670d87a91c2a11921\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa4b84593337391e99f4106494088a16eadb94b68afee9d1f63dd23b042f62e31\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161167638038061167683398101604081905261002f916100e5565b60006100396100c5565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039485166001600160a01b031991821617909155600280549385169382169390931790925560038054919093169116179055610127565b3390565b80516001600160a01b03811681146100e057600080fd5b919050565b6000806000606084860312156100f9578283fd5b610102846100c9565b9250610110602085016100c9565b915061011e604085016100c9565b90509250925092565b611540806101366000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212206c5e5108127247c039b7978e7531eff2e8c38bd974b35df0d871707b6dbe041164736f6c63430007060033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212206c5e5108127247c039b7978e7531eff2e8c38bd974b35df0d871707b6dbe041164736f6c63430007060033", - "devdoc": { - "details": "This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.", - "kind": "dev", - "methods": { - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 5462, - "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 22357, - "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", - "label": "beacon", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 22359, - "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", - "label": "transferProxy", - "offset": 0, - "slot": "2", - "type": "t_address" - }, - { - "astId": 22361, - "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", - "label": "lazyTransferProxy", - "offset": 0, - "slot": "3", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleMeta_Proxy.json deleted file mode 100644 index e72a0f7b7..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155RaribleMeta_Proxy.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "address": "0x67A8fE17Db4d441f96f26094677763a2213a3B5f", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "admin_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./UpgradeableProxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _setAdmin(admin_);\\n }\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _admin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _admin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n require(newAdmin != address(0), \\\"TransparentUpgradeableProxy: new admin is the zero address\\\");\\n emit AdminChanged(_admin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address adm) {\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n adm := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n bytes32 slot = _ADMIN_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newAdmin)\\n }\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _admin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0xf852214ea286716082f3ba480ff70bda2cbe2d11238091d2a440767d0ed49e61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n *\\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\\n * {TransparentUpgradeableProxy}.\\n */\\ncontract UpgradeableProxy is Proxy {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) public payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _setImplementation(_logic);\\n if(_data.length > 0) {\\n Address.functionDelegateCall(_logic, _data);\\n }\\n }\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Upgrades the proxy to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal virtual {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableProxy: new implementation is not a contract\\\");\\n\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newImplementation)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x81af1059a5bd5fb25cb0351499e1d4110416f5b0000ffad6427cbf6088b193a4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405260405162000c7c38038062000c7c833981810160405260608110156200002957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200005557600080fd5b9083019060208201858111156200006b57600080fd5b82516401000000008111828201881017156200008657600080fd5b82525081516020918201929091019080838360005b83811015620000b55781810151838201526020016200009b565b50505050905090810190601f168015620000e35780820380516001836020036101000a031916815260200191505b5060405250849150829050620000f98262000137565b8051156200011a57620001188282620001ae60201b620003841760201c565b505b50620001239050565b6200012e82620001dd565b505050620003be565b6200014d816200020160201b620003b01760201c565b6200018a5760405162461bcd60e51b815260040180806020018281038252603681526020018062000c206036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6060620001d6838360405180606001604052806027815260200162000bf96027913962000207565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b6060620002148462000201565b620002515760405162461bcd60e51b815260040180806020018281038252602681526020018062000c566026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b60208310620002905780518252601f1990920191602091820191016200026f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620002f2576040519150601f19603f3d011682016040523d82523d6000602084013e620002f7565b606091505b5090925090506200030a82828662000314565b9695505050505050565b6060831562000325575081620001d6565b825115620003365782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200038257818101518382015260200162000368565b50505050905090810190601f168015620003b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b61082b80620003ce6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374", - "deployedBytecode": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033", - "devdoc": { - "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", - "events": { - "AdminChanged(address,address)": { - "details": "Emitted when the admin account has changed." - } - }, - "kind": "dev", - "methods": { - "admin()": { - "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" - }, - "changeAdmin(address)": { - "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." - }, - "constructor": { - "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}." - }, - "implementation()": { - "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" - }, - "upgradeTo(address)": { - "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." - } - }, - "stateVariables": { - "_ADMIN_SLOT": { - "details": "Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155Rarible_Proxy.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155Rarible_Proxy.json deleted file mode 100644 index f27c73484..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC1155Rarible_Proxy.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "address": "0x950Da42EFF23F726e75E3d991CfeD0c5D4e9E8d6", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "admin_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./UpgradeableProxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _setAdmin(admin_);\\n }\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _admin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _admin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n require(newAdmin != address(0), \\\"TransparentUpgradeableProxy: new admin is the zero address\\\");\\n emit AdminChanged(_admin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address adm) {\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n adm := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n bytes32 slot = _ADMIN_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newAdmin)\\n }\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _admin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0xf852214ea286716082f3ba480ff70bda2cbe2d11238091d2a440767d0ed49e61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n *\\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\\n * {TransparentUpgradeableProxy}.\\n */\\ncontract UpgradeableProxy is Proxy {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) public payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _setImplementation(_logic);\\n if(_data.length > 0) {\\n Address.functionDelegateCall(_logic, _data);\\n }\\n }\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Upgrades the proxy to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal virtual {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableProxy: new implementation is not a contract\\\");\\n\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newImplementation)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x81af1059a5bd5fb25cb0351499e1d4110416f5b0000ffad6427cbf6088b193a4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405260405162000c7c38038062000c7c833981810160405260608110156200002957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200005557600080fd5b9083019060208201858111156200006b57600080fd5b82516401000000008111828201881017156200008657600080fd5b82525081516020918201929091019080838360005b83811015620000b55781810151838201526020016200009b565b50505050905090810190601f168015620000e35780820380516001836020036101000a031916815260200191505b5060405250849150829050620000f98262000137565b8051156200011a57620001188282620001ae60201b620003841760201c565b505b50620001239050565b6200012e82620001dd565b505050620003be565b6200014d816200020160201b620003b01760201c565b6200018a5760405162461bcd60e51b815260040180806020018281038252603681526020018062000c206036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6060620001d6838360405180606001604052806027815260200162000bf96027913962000207565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b6060620002148462000201565b620002515760405162461bcd60e51b815260040180806020018281038252602681526020018062000c566026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b60208310620002905780518252601f1990920191602091820191016200026f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620002f2576040519150601f19603f3d011682016040523d82523d6000602084013e620002f7565b606091505b5090925090506200030a82828662000314565b9695505050505050565b6060831562000325575081620001d6565b825115620003365782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200038257818101518382015260200162000368565b50505050905090810190601f168015620003b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b61082b80620003ce6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374", - "deployedBytecode": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033", - "devdoc": { - "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", - "events": { - "AdminChanged(address,address)": { - "details": "Emitted when the admin account has changed." - } - }, - "kind": "dev", - "methods": { - "admin()": { - "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" - }, - "changeAdmin(address)": { - "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." - }, - "constructor": { - "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}." - }, - "implementation()": { - "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" - }, - "upgradeTo(address)": { - "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." - } - }, - "stateVariables": { - "_ADMIN_SLOT": { - "details": "Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC20TransferProxy.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC20TransferProxy.json deleted file mode 100644 index dad586468..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC20TransferProxy.json +++ /dev/null @@ -1,238 +0,0 @@ -{ - "address": "0xCA90c2E7d3c41EF220888B0038849BA1e67688bC", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "__ERC20TransferProxy_init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "__OperatorRole_init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "addOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20Upgradeable", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "erc20safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "removeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__ERC20TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"erc20safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":\"ERC20TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x363fa1f25a41aa7d7b3fb9e2d182dec04c3774d06d9eed428b3fe48140fa4b7e\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5061095c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100e35780639870d7fe14610107578063ac8a584a1461012d578063f2fde38b1461015357610088565b80632ff26a0a1461008d578063715018a614610097578063759781271461009f578063776062c3146100a7575b600080fd5b610095610179565b005b61009561022b565b6100956102d7565b610095600480360360808110156100bd57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561036c565b6100eb6104bb565b604080516001600160a01b039092168252519081900360200190f35b6100956004803603602081101561011d57600080fd5b50356001600160a01b03166104ca565b6100956004803603602081101561014357600080fd5b50356001600160a01b0316610550565b6100956004803603602081101561016957600080fd5b50356001600160a01b03166105d3565b600054610100900460ff168061019257506101926106d6565b806101a0575060005460ff16155b6101db5760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610206576000805460ff1961ff0019909116610100171660011790555b61020e6106e7565b610216610787565b8015610228576000805461ff00191690555b50565b610233610880565b6001600160a01b03166102446104bb565b6001600160a01b03161461028d576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806102f057506102f06106d6565b806102fe575060005460ff16155b6103395760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610364576000805460ff1961ff0019909116610100171660011790555b610216610179565b60656000610378610880565b6001600160a01b0316815260208101919091526040016000205460ff166103d05760405162461bcd60e51b81526004018080602001828103825260288152602001806108ff6028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561043857600080fd5b505af115801561044c573d6000803e3d6000fd5b505050506040513d602081101561046257600080fd5b50516104b5576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b6104d2610880565b6001600160a01b03166104e36104bb565b6001600160a01b03161461052c576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b610558610880565b6001600160a01b03166105696104bb565b6001600160a01b0316146105b2576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b6105db610880565b6001600160a01b03166105ec6104bb565b6001600160a01b031614610635576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03811661067a5760405162461bcd60e51b815260040180806020018281038252602681526020018061088b6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006106e130610884565b15905090565b600054610100900460ff168061070057506107006106d6565b8061070e575060005460ff16155b6107495760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610216576000805460ff1961ff0019909116610100171660011790558015610228576000805461ff001916905550565b600054610100900460ff16806107a057506107a06106d6565b806107ae575060005460ff16155b6107e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610814576000805460ff1961ff0019909116610100171660011790555b600061081e610880565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610228576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212202973a98c7cda54d291a78bc2c1e7767938d5273d121da56e402b35febf3f882c64736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100e35780639870d7fe14610107578063ac8a584a1461012d578063f2fde38b1461015357610088565b80632ff26a0a1461008d578063715018a614610097578063759781271461009f578063776062c3146100a7575b600080fd5b610095610179565b005b61009561022b565b6100956102d7565b610095600480360360808110156100bd57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561036c565b6100eb6104bb565b604080516001600160a01b039092168252519081900360200190f35b6100956004803603602081101561011d57600080fd5b50356001600160a01b03166104ca565b6100956004803603602081101561014357600080fd5b50356001600160a01b0316610550565b6100956004803603602081101561016957600080fd5b50356001600160a01b03166105d3565b600054610100900460ff168061019257506101926106d6565b806101a0575060005460ff16155b6101db5760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610206576000805460ff1961ff0019909116610100171660011790555b61020e6106e7565b610216610787565b8015610228576000805461ff00191690555b50565b610233610880565b6001600160a01b03166102446104bb565b6001600160a01b03161461028d576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806102f057506102f06106d6565b806102fe575060005460ff16155b6103395760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610364576000805460ff1961ff0019909116610100171660011790555b610216610179565b60656000610378610880565b6001600160a01b0316815260208101919091526040016000205460ff166103d05760405162461bcd60e51b81526004018080602001828103825260288152602001806108ff6028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561043857600080fd5b505af115801561044c573d6000803e3d6000fd5b505050506040513d602081101561046257600080fd5b50516104b5576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b6104d2610880565b6001600160a01b03166104e36104bb565b6001600160a01b03161461052c576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b610558610880565b6001600160a01b03166105696104bb565b6001600160a01b0316146105b2576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b6105db610880565b6001600160a01b03166105ec6104bb565b6001600160a01b031614610635576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03811661067a5760405162461bcd60e51b815260040180806020018281038252602681526020018061088b6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006106e130610884565b15905090565b600054610100900460ff168061070057506107006106d6565b8061070e575060005460ff16155b6107495760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610216576000805460ff1961ff0019909116610100171660011790558015610228576000805461ff001916905550565b600054610100900460ff16806107a057506107a06106d6565b806107ae575060005460ff16155b6107e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610814576000805460ff1961ff0019909116610100171660011790555b600061081e610880565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610228576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212202973a98c7cda54d291a78bc2c1e7767938d5273d121da56e402b35febf3f882c64736f6c63430007060033", - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 739, - "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 742, - "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 4256, - "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 10, - "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address" - }, - { - "astId": 129, - "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage" - }, - { - "astId": 19576, - "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", - "label": "operators", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_address,t_bool)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)49_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721LazyMintTransferProxy.json deleted file mode 100644 index d76b9cb51..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721LazyMintTransferProxy.json +++ /dev/null @@ -1,250 +0,0 @@ -{ - "address": "0xA8628124C255171cF356F0E0204E2D19CA89F636", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "__OperatorRole_init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "addOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "removeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "bytes4", - "name": "assetClass", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct LibAsset.AssetType", - "name": "assetType", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "internalType": "struct LibAsset.Asset", - "name": "asset", - "type": "tuple" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - } - ], - "name": "transfer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":\"ERC721LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\\n }\\n}\\n\",\"keccak256\":\"0x39f9db52acb6155394c2e91f3ef71c9027fcd4b7ec0f48bb4307cc115aa715f5\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50610e65806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109fb565b6101b0565b61008a6102ce565b6100af61037a565b6040516100bc9190610bc4565b60405180910390f35b61008a6100d33660046108eb565b610389565b61008a6100e63660046108eb565b61040f565b61008a6100f93660046108eb565b610492565b600054610100900460ff16806101175750610117610595565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b6101936105a6565b61019b610646565b80156101ad576000805461ff00191690555b50565b606560006101bc61073f565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610e086028913960400191505060405180910390fd5b82602001516001146102415760405162461bcd60e51b815260040161023890610bd8565b60405180910390fd5b6000808460000151602001518060200190518101906102609190610907565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb299061029590849088908890600401610c04565b600060405180830381600087803b1580156102af57600080fd5b505af11580156102c3573d6000803e3d6000fd5b505050505050505050565b6102d661073f565b6001600160a01b03166102e761037a565b6001600160a01b031614610330576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61039161073f565b6001600160a01b03166103a261037a565b6001600160a01b0316146103eb576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b61041761073f565b6001600160a01b031661042861037a565b6001600160a01b031614610471576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61049a61073f565b6001600160a01b03166104ab61037a565b6001600160a01b0316146104f4576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b0381166105395760405162461bcd60e51b8152600401808060200182810382526026815260200180610d946026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105a030610743565b15905090565b600054610100900460ff16806105bf57506105bf610595565b806105cd575060005460ff16155b6106085760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff168061065f575061065f610595565b8061066d575060005460ff16155b6106a85760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff161580156106d3576000805460ff1961ff0019909116610100171660011790555b60006106dd61073f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061076061075b84610d2c565b610cea565b905082815283838301111561077457600080fd5b610782836020830184610d4e565b9392505050565b803561074881610d7e565b600082601f8301126107a4578081fd5b815160206107b461075b83610d0e565b82815281810190858301855b858110156107fe578151880189603f8201126107da578788fd5b6107eb8a878301516040840161074d565b85525092840192908401906001016107c0565b5090979650505050505050565b600082601f83011261081b578081fd5b8151602061082b61075b83610d0e565b82815281810190858301604080860288018501891015610849578687fd5b865b868110156108be5781838b031215610861578788fd5b815182810181811067ffffffffffffffff8211171561087c57fe5b8352835161088981610d7e565b8152838701516bffffffffffffffffffffffff811681146108a857898afd5b818801528552938501939181019160010161084b565b509198975050505050505050565b600082601f8301126108dc578081fd5b6107828383516020850161074d565b6000602082840312156108fc578081fd5b813561078281610d7e565b60008060408385031215610919578081fd5b825161092481610d7e565b602084015190925067ffffffffffffffff80821115610941578283fd5b9084019060a08287031215610954578283fd5b61095e60a0610cea565b82518152602083015182811115610973578485fd5b61097f888286016108cc565b602083015250604083015182811115610996578485fd5b6109a28882860161080b565b6040830152506060830151828111156109b9578485fd5b6109c58882860161080b565b6060830152506080830151828111156109dc578485fd5b6109e888828601610794565b6080830152508093505050509250929050565b600080600060608486031215610a0f578081fd5b833567ffffffffffffffff80821115610a26578283fd5b81860191506040808389031215610a3b578384fd5b80518181018181108482111715610a4e57fe5b808352843584811115610a5f578687fd5b8501808b03841315610a6f578687fd5b608083018281108682111715610a8157fe5b845280356001600160e01b031981168114610a9a578788fd5b825260208181013586811115610aae578889fd5b82019550601f86018c13610ac0578788fd5b85359150610ad061075b83610d2c565b8281528c82848901011115610ae3578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610b12818c01610789565b985050505050610b23818801610789565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b8d57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b4f565b509495945050505050565b60008151808452610bb0816020860160208601610d4e565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610c2c610100850182610b98565b90506040870151605f19808684030160a0870152610c4a8383610b3c565b925060608901519150808684030160c0870152610c678383610b3c565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610cbf57601f19868303018452610cad828651610b98565b94870194938701939150600101610c91565b508096505050505050610cd481840186610b2f565b50610ce26040830184610b2f565b949350505050565b60405181810167ffffffffffffffff81118282101715610d0657fe5b604052919050565b600067ffffffffffffffff821115610d2257fe5b5060209081020190565b600067ffffffffffffffff821115610d4057fe5b50601f01601f191660200190565b60005b83811015610d69578181015183820152602001610d51565b83811115610d78576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a264697066735822122022780bcbc2a56161a6a3722e0e0c474492ff0b09629887f64b03fb1768e170fe64736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109fb565b6101b0565b61008a6102ce565b6100af61037a565b6040516100bc9190610bc4565b60405180910390f35b61008a6100d33660046108eb565b610389565b61008a6100e63660046108eb565b61040f565b61008a6100f93660046108eb565b610492565b600054610100900460ff16806101175750610117610595565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b6101936105a6565b61019b610646565b80156101ad576000805461ff00191690555b50565b606560006101bc61073f565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610e086028913960400191505060405180910390fd5b82602001516001146102415760405162461bcd60e51b815260040161023890610bd8565b60405180910390fd5b6000808460000151602001518060200190518101906102609190610907565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb299061029590849088908890600401610c04565b600060405180830381600087803b1580156102af57600080fd5b505af11580156102c3573d6000803e3d6000fd5b505050505050505050565b6102d661073f565b6001600160a01b03166102e761037a565b6001600160a01b031614610330576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61039161073f565b6001600160a01b03166103a261037a565b6001600160a01b0316146103eb576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b61041761073f565b6001600160a01b031661042861037a565b6001600160a01b031614610471576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61049a61073f565b6001600160a01b03166104ab61037a565b6001600160a01b0316146104f4576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b0381166105395760405162461bcd60e51b8152600401808060200182810382526026815260200180610d946026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105a030610743565b15905090565b600054610100900460ff16806105bf57506105bf610595565b806105cd575060005460ff16155b6106085760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff168061065f575061065f610595565b8061066d575060005460ff16155b6106a85760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff161580156106d3576000805460ff1961ff0019909116610100171660011790555b60006106dd61073f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061076061075b84610d2c565b610cea565b905082815283838301111561077457600080fd5b610782836020830184610d4e565b9392505050565b803561074881610d7e565b600082601f8301126107a4578081fd5b815160206107b461075b83610d0e565b82815281810190858301855b858110156107fe578151880189603f8201126107da578788fd5b6107eb8a878301516040840161074d565b85525092840192908401906001016107c0565b5090979650505050505050565b600082601f83011261081b578081fd5b8151602061082b61075b83610d0e565b82815281810190858301604080860288018501891015610849578687fd5b865b868110156108be5781838b031215610861578788fd5b815182810181811067ffffffffffffffff8211171561087c57fe5b8352835161088981610d7e565b8152838701516bffffffffffffffffffffffff811681146108a857898afd5b818801528552938501939181019160010161084b565b509198975050505050505050565b600082601f8301126108dc578081fd5b6107828383516020850161074d565b6000602082840312156108fc578081fd5b813561078281610d7e565b60008060408385031215610919578081fd5b825161092481610d7e565b602084015190925067ffffffffffffffff80821115610941578283fd5b9084019060a08287031215610954578283fd5b61095e60a0610cea565b82518152602083015182811115610973578485fd5b61097f888286016108cc565b602083015250604083015182811115610996578485fd5b6109a28882860161080b565b6040830152506060830151828111156109b9578485fd5b6109c58882860161080b565b6060830152506080830151828111156109dc578485fd5b6109e888828601610794565b6080830152508093505050509250929050565b600080600060608486031215610a0f578081fd5b833567ffffffffffffffff80821115610a26578283fd5b81860191506040808389031215610a3b578384fd5b80518181018181108482111715610a4e57fe5b808352843584811115610a5f578687fd5b8501808b03841315610a6f578687fd5b608083018281108682111715610a8157fe5b845280356001600160e01b031981168114610a9a578788fd5b825260208181013586811115610aae578889fd5b82019550601f86018c13610ac0578788fd5b85359150610ad061075b83610d2c565b8281528c82848901011115610ae3578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610b12818c01610789565b985050505050610b23818801610789565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b8d57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b4f565b509495945050505050565b60008151808452610bb0816020860160208601610d4e565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610c2c610100850182610b98565b90506040870151605f19808684030160a0870152610c4a8383610b3c565b925060608901519150808684030160c0870152610c678383610b3c565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610cbf57601f19868303018452610cad828651610b98565b94870194938701939150600101610c91565b508096505050505050610cd481840186610b2f565b50610ce26040830184610b2f565b949350505050565b60405181810167ffffffffffffffff81118282101715610d0657fe5b604052919050565b600067ffffffffffffffff821115610d2257fe5b5060209081020190565b600067ffffffffffffffff821115610d4057fe5b50601f01601f191660200190565b60005b83811015610d69578181015183820152602001610d51565b83811115610d78576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a264697066735822122022780bcbc2a56161a6a3722e0e0c474492ff0b09629887f64b03fb1768e170fe64736f6c63430007060033", - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 739, - "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 742, - "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 4256, - "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 10, - "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address" - }, - { - "astId": 129, - "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage" - }, - { - "astId": 19576, - "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", - "label": "operators", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_address,t_bool)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)49_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleBeacon.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleBeacon.json deleted file mode 100644 index 7f77d63c4..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleBeacon.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "address": "0x3aCe604B19ae9b4FFf75bfd64fA493a70b4FF808", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol\":\"ERC721RaribleBeacon\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\\n constructor(address impl) UpgradeableBeacon(impl) {\\n\\n }\\n}\\n\",\"keccak256\":\"0x8fdad4931f6054aef9a6ea740d7fc969a2d8427d64e2272049792225b8cccb67\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506040516105d73803806105d78339818101604052602081101561003357600080fd5b505180600061004061009a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100938161009e565b5050610114565b3390565b6100b18161010e60201b6103821760201c565b6100ec5760405162461bcd60e51b81526004018080602001828103825260338152602001806105a46033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b610481806101236000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220c422a50f491d521cee967895d8de2922145a04206d894681eb9a8411f8ad8fd064736f6c634300070600335570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220c422a50f491d521cee967895d8de2922145a04206d894681eb9a8411f8ad8fd064736f6c63430007060033", - "devdoc": { - "kind": "dev", - "methods": { - "implementation()": { - "details": "Returns the current implementation address." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "upgradeTo(address)": { - "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 5462, - "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol:ERC721RaribleBeacon", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6517, - "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol:ERC721RaribleBeacon", - "label": "_implementation", - "offset": 0, - "slot": "1", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleFactoryC2.json deleted file mode 100644 index 849634b0a..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleFactoryC2.json +++ /dev/null @@ -1,340 +0,0 @@ -{ - "address": "0xa85180a21786bA65b0778bE1cb5CBA5E5c6cD21d", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_beacon", - "type": "address" - }, - { - "internalType": "address", - "name": "_transferProxy", - "type": "address" - }, - { - "internalType": "address", - "name": "_lazyTransferProxy", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "name": "Create721RaribleProxy", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "name": "Create721RaribleUserProxy", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "beacon", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "baseURI", - "type": "string" - }, - { - "internalType": "string", - "name": "contractURI", - "type": "string" - }, - { - "internalType": "address[]", - "name": "operators", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "salt", - "type": "uint256" - } - ], - "name": "createToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "baseURI", - "type": "string" - }, - { - "internalType": "string", - "name": "contractURI", - "type": "string" - }, - { - "internalType": "uint256", - "name": "salt", - "type": "uint256" - } - ], - "name": "createToken", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "baseURI", - "type": "string" - }, - { - "internalType": "string", - "name": "contractURI", - "type": "string" - }, - { - "internalType": "address[]", - "name": "operators", - "type": "address[]" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - } - ], - "name": "getAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - }, - { - "internalType": "string", - "name": "_symbol", - "type": "string" - }, - { - "internalType": "string", - "name": "baseURI", - "type": "string" - }, - { - "internalType": "string", - "name": "contractURI", - "type": "string" - }, - { - "internalType": "uint256", - "name": "_salt", - "type": "uint256" - } - ], - "name": "getAddress", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":\"ERC721RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-721-minimal/ERC721RaribleMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC721Rarible token.\\n *\\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC721RaribleFactoryC2 is Ownable {\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create721RaribleProxy(address proxy);\\n event Create721RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleProxy(beaconProxy);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that private contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n}\\n\",\"keccak256\":\"0x4f3333862394062fca2a044f5dda27e9520739988f72127f95a6ad911248cc25\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721BaseMinimal.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = true;\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x189d72b3e2bae68029d2341c9a6f7e98dcbd94cc47703b3ae4e25f89facb9f29\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161167638038061167683398101604081905261002f916100e5565b60006100396100c5565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039485166001600160a01b031991821617909155600280549385169382169390931790925560038054919093169116179055610127565b3390565b80516001600160a01b03811681146100e057600080fd5b919050565b6000806000606084860312156100f9578283fd5b610102846100c9565b9250610110602085016100c9565b915061011e604085016100c9565b90509250925092565b611540806101366000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220eddea18042d9f39d17b0a1fd61e2ed79324248e73c5a11bf15501760c458070264736f6c63430007060033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220eddea18042d9f39d17b0a1fd61e2ed79324248e73c5a11bf15501760c458070264736f6c63430007060033", - "devdoc": { - "details": "This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.", - "kind": "dev", - "methods": { - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 5462, - "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 22716, - "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", - "label": "beacon", - "offset": 0, - "slot": "1", - "type": "t_address" - }, - { - "astId": 22718, - "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", - "label": "transferProxy", - "offset": 0, - "slot": "2", - "type": "t_address" - }, - { - "astId": 22720, - "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", - "label": "lazyTransferProxy", - "offset": 0, - "slot": "3", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMeta_Proxy.json deleted file mode 100644 index 60e6a72bd..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMeta_Proxy.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "address": "0x5A3Ed919C18137dcC67fBEA707d7E41F3E498BEF", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "admin_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./UpgradeableProxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _setAdmin(admin_);\\n }\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _admin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _admin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n require(newAdmin != address(0), \\\"TransparentUpgradeableProxy: new admin is the zero address\\\");\\n emit AdminChanged(_admin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address adm) {\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n adm := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n bytes32 slot = _ADMIN_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newAdmin)\\n }\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _admin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0xf852214ea286716082f3ba480ff70bda2cbe2d11238091d2a440767d0ed49e61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n *\\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\\n * {TransparentUpgradeableProxy}.\\n */\\ncontract UpgradeableProxy is Proxy {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) public payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _setImplementation(_logic);\\n if(_data.length > 0) {\\n Address.functionDelegateCall(_logic, _data);\\n }\\n }\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Upgrades the proxy to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal virtual {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableProxy: new implementation is not a contract\\\");\\n\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newImplementation)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x81af1059a5bd5fb25cb0351499e1d4110416f5b0000ffad6427cbf6088b193a4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405260405162000c7c38038062000c7c833981810160405260608110156200002957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200005557600080fd5b9083019060208201858111156200006b57600080fd5b82516401000000008111828201881017156200008657600080fd5b82525081516020918201929091019080838360005b83811015620000b55781810151838201526020016200009b565b50505050905090810190601f168015620000e35780820380516001836020036101000a031916815260200191505b5060405250849150829050620000f98262000137565b8051156200011a57620001188282620001ae60201b620003841760201c565b505b50620001239050565b6200012e82620001dd565b505050620003be565b6200014d816200020160201b620003b01760201c565b6200018a5760405162461bcd60e51b815260040180806020018281038252603681526020018062000c206036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6060620001d6838360405180606001604052806027815260200162000bf96027913962000207565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b6060620002148462000201565b620002515760405162461bcd60e51b815260040180806020018281038252602681526020018062000c566026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b60208310620002905780518252601f1990920191602091820191016200026f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620002f2576040519150601f19603f3d011682016040523d82523d6000602084013e620002f7565b606091505b5090925090506200030a82828662000314565b9695505050505050565b6060831562000325575081620001d6565b825115620003365782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200038257818101518382015260200162000368565b50505050905090810190601f168015620003b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b61082b80620003ce6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374", - "deployedBytecode": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033", - "devdoc": { - "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", - "events": { - "AdminChanged(address,address)": { - "details": "Emitted when the admin account has changed." - } - }, - "kind": "dev", - "methods": { - "admin()": { - "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" - }, - "changeAdmin(address)": { - "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." - }, - "constructor": { - "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}." - }, - "implementation()": { - "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" - }, - "upgradeTo(address)": { - "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." - } - }, - "stateVariables": { - "_ADMIN_SLOT": { - "details": "Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMinimalBeacon.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMinimalBeacon.json deleted file mode 100644 index 481a9d89f..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMinimalBeacon.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "address": "0x91eC9A1cbd2bCEd115634D72bf5A1f6846a9AFFF", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\":\"ERC721RaribleMinimalBeacon\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\\n constructor(address impl) UpgradeableBeacon(impl) {\\n\\n }\\n}\\n\",\"keccak256\":\"0x373664a30cbe44e442d055cae5ae935c7c3a9bcddb6f9f8fa79cb0e767a93f0c\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506040516105d73803806105d78339818101604052602081101561003357600080fd5b505180600061004061009a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100938161009e565b5050610114565b3390565b6100b18161010e60201b6103821760201c565b6100ec5760405162461bcd60e51b81526004018080602001828103825260338152602001806105a46033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b610481806101236000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212201ca8157d439eba6d8f9274010072e0c311e6540da8a0fa6f2029a22e6097d10964736f6c634300070600335570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212201ca8157d439eba6d8f9274010072e0c311e6540da8a0fa6f2029a22e6097d10964736f6c63430007060033", - "devdoc": { - "kind": "dev", - "methods": { - "implementation()": { - "details": "Returns the current implementation address." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "upgradeTo(address)": { - "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 5462, - "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol:ERC721RaribleMinimalBeacon", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6517, - "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol:ERC721RaribleMinimalBeacon", - "label": "_implementation", - "offset": 0, - "slot": "1", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMinimalBeaconMeta.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMinimalBeaconMeta.json deleted file mode 100644 index 153e282ce..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMinimalBeaconMeta.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "address": "0x91eC9A1cbd2bCEd115634D72bf5A1f6846a9AFFF", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "impl", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\":\"ERC721RaribleMinimalBeaconMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\\n constructor(address impl) UpgradeableBeacon(impl) {\\n\\n }\\n}\\n\",\"keccak256\":\"0x74e682f5c26cd1290987e53ce368b9a908a7b674f329395a413cc95ff88588b0\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506040516105d73803806105d78339818101604052602081101561003357600080fd5b505180600061004061009a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100938161009e565b5050610114565b3390565b6100b18161010e60201b6103821760201c565b6100ec5760405162461bcd60e51b81526004018080602001828103825260338152602001806105a46033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b610481806101236000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220d014740003730a299f6764ded32cc405512e8bcd1542564d586c837fcf41383264736f6c634300070600335570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220d014740003730a299f6764ded32cc405512e8bcd1542564d586c837fcf41383264736f6c63430007060033", - "devdoc": { - "kind": "dev", - "methods": { - "implementation()": { - "details": "Returns the current implementation address." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - }, - "upgradeTo(address)": { - "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 5462, - "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol:ERC721RaribleMinimalBeaconMeta", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 6517, - "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol:ERC721RaribleMinimalBeaconMeta", - "label": "_implementation", - "offset": 0, - "slot": "1", - "type": "t_address" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMinimal_Proxy.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMinimal_Proxy.json deleted file mode 100644 index dca2961dc..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721RaribleMinimal_Proxy.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "address": "0xc103130F894Ae71c56e6c95526B1055bB1AdA8E8", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "admin_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./UpgradeableProxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _setAdmin(admin_);\\n }\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _admin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _admin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n require(newAdmin != address(0), \\\"TransparentUpgradeableProxy: new admin is the zero address\\\");\\n emit AdminChanged(_admin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address adm) {\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n adm := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n bytes32 slot = _ADMIN_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newAdmin)\\n }\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _admin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0xf852214ea286716082f3ba480ff70bda2cbe2d11238091d2a440767d0ed49e61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n *\\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\\n * {TransparentUpgradeableProxy}.\\n */\\ncontract UpgradeableProxy is Proxy {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) public payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _setImplementation(_logic);\\n if(_data.length > 0) {\\n Address.functionDelegateCall(_logic, _data);\\n }\\n }\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Upgrades the proxy to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal virtual {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableProxy: new implementation is not a contract\\\");\\n\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newImplementation)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x81af1059a5bd5fb25cb0351499e1d4110416f5b0000ffad6427cbf6088b193a4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405260405162000c7c38038062000c7c833981810160405260608110156200002957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200005557600080fd5b9083019060208201858111156200006b57600080fd5b82516401000000008111828201881017156200008657600080fd5b82525081516020918201929091019080838360005b83811015620000b55781810151838201526020016200009b565b50505050905090810190601f168015620000e35780820380516001836020036101000a031916815260200191505b5060405250849150829050620000f98262000137565b8051156200011a57620001188282620001ae60201b620003841760201c565b505b50620001239050565b6200012e82620001dd565b505050620003be565b6200014d816200020160201b620003b01760201c565b6200018a5760405162461bcd60e51b815260040180806020018281038252603681526020018062000c206036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6060620001d6838360405180606001604052806027815260200162000bf96027913962000207565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b6060620002148462000201565b620002515760405162461bcd60e51b815260040180806020018281038252602681526020018062000c566026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b60208310620002905780518252601f1990920191602091820191016200026f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620002f2576040519150601f19603f3d011682016040523d82523d6000602084013e620002f7565b606091505b5090925090506200030a82828662000314565b9695505050505050565b6060831562000325575081620001d6565b825115620003365782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200038257818101518382015260200162000368565b50505050905090810190601f168015620003b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b61082b80620003ce6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374", - "deployedBytecode": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033", - "devdoc": { - "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", - "events": { - "AdminChanged(address,address)": { - "details": "Emitted when the admin account has changed." - } - }, - "kind": "dev", - "methods": { - "admin()": { - "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" - }, - "changeAdmin(address)": { - "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." - }, - "constructor": { - "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}." - }, - "implementation()": { - "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" - }, - "upgradeTo(address)": { - "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." - } - }, - "stateVariables": { - "_ADMIN_SLOT": { - "details": "Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721Rarible_Proxy.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721Rarible_Proxy.json deleted file mode 100644 index fbbbb4a45..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ERC721Rarible_Proxy.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "address": "0x86516Af1F9b3c8E64F02c45377D5d785787f81cC", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "admin_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./UpgradeableProxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _setAdmin(admin_);\\n }\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _admin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _admin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n require(newAdmin != address(0), \\\"TransparentUpgradeableProxy: new admin is the zero address\\\");\\n emit AdminChanged(_admin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address adm) {\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n adm := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n bytes32 slot = _ADMIN_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newAdmin)\\n }\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _admin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0xf852214ea286716082f3ba480ff70bda2cbe2d11238091d2a440767d0ed49e61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n *\\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\\n * {TransparentUpgradeableProxy}.\\n */\\ncontract UpgradeableProxy is Proxy {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) public payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _setImplementation(_logic);\\n if(_data.length > 0) {\\n Address.functionDelegateCall(_logic, _data);\\n }\\n }\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Upgrades the proxy to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal virtual {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableProxy: new implementation is not a contract\\\");\\n\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newImplementation)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x81af1059a5bd5fb25cb0351499e1d4110416f5b0000ffad6427cbf6088b193a4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405260405162000c7c38038062000c7c833981810160405260608110156200002957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200005557600080fd5b9083019060208201858111156200006b57600080fd5b82516401000000008111828201881017156200008657600080fd5b82525081516020918201929091019080838360005b83811015620000b55781810151838201526020016200009b565b50505050905090810190601f168015620000e35780820380516001836020036101000a031916815260200191505b5060405250849150829050620000f98262000137565b8051156200011a57620001188282620001ae60201b620003841760201c565b505b50620001239050565b6200012e82620001dd565b505050620003be565b6200014d816200020160201b620003b01760201c565b6200018a5760405162461bcd60e51b815260040180806020018281038252603681526020018062000c206036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6060620001d6838360405180606001604052806027815260200162000bf96027913962000207565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b6060620002148462000201565b620002515760405162461bcd60e51b815260040180806020018281038252602681526020018062000c566026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b60208310620002905780518252601f1990920191602091820191016200026f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620002f2576040519150601f19603f3d011682016040523d82523d6000602084013e620002f7565b606091505b5090925090506200030a82828662000314565b9695505050505050565b6060831562000325575081620001d6565b825115620003365782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200038257818101518382015260200162000368565b50505050905090810190601f168015620003b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b61082b80620003ce6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374", - "deployedBytecode": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033", - "devdoc": { - "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", - "events": { - "AdminChanged(address,address)": { - "details": "Emitted when the admin account has changed." - } - }, - "kind": "dev", - "methods": { - "admin()": { - "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" - }, - "changeAdmin(address)": { - "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." - }, - "constructor": { - "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}." - }, - "implementation()": { - "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" - }, - "upgradeTo(address)": { - "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." - } - }, - "stateVariables": { - "_ADMIN_SLOT": { - "details": "Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ExchangeMetaV2_Implementation.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ExchangeMetaV2_Implementation.json deleted file mode 100644 index a8c17431e..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ExchangeMetaV2_Implementation.json +++ /dev/null @@ -1,1345 +0,0 @@ -{ - "address": "0xAFA4fE011f874C79D9bC083806105760F17e8f0c", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldValue", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newValue", - "type": "uint256" - } - ], - "name": "BuyerFeeAmountChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "Cancel", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldValue", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newValue", - "type": "address" - } - ], - "name": "FeeReceiverChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "leftHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "rightHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newLeftFill", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newRightFill", - "type": "uint256" - } - ], - "name": "Match", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "assetType", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "address", - "name": "matcher", - "type": "address" - } - ], - "name": "MatcherChange", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "userAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "address payable", - "name": "relayerAddress", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "functionSignature", - "type": "bytes" - } - ], - "name": "MetaTransactionExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes4", - "name": "assetType", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "name": "ProxyChange", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldValue", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newValue", - "type": "uint256" - } - ], - "name": "SellerFeeAmountChanged", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_transferProxy", - "type": "address" - }, - { - "internalType": "address", - "name": "_erc20TransferProxy", - "type": "address" - }, - { - "internalType": "uint256", - "name": "newProtocolFee", - "type": "uint256" - }, - { - "internalType": "address", - "name": "newDefaultFeeReceiver", - "type": "address" - }, - { - "internalType": "contract IRoyaltiesProvider", - "name": "newRoyaltiesProvider", - "type": "address" - } - ], - "name": "__ExchangeV2_init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "maker", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes4", - "name": "assetClass", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct LibAsset.AssetType", - "name": "assetType", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "internalType": "struct LibAsset.Asset", - "name": "makeAsset", - "type": "tuple" - }, - { - "internalType": "address", - "name": "taker", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes4", - "name": "assetClass", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct LibAsset.AssetType", - "name": "assetType", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "internalType": "struct LibAsset.Asset", - "name": "takeAsset", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "salt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" - }, - { - "internalType": "bytes4", - "name": "dataType", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct LibOrder.Order", - "name": "order", - "type": "tuple" - } - ], - "name": "cancel", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "bidMaker", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bidNftAmount", - "type": "uint256" - }, - { - "internalType": "bytes4", - "name": "nftAssetClass", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "nftData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "bidPaymentAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "paymentToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "bidSalt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "bidStart", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "bidEnd", - "type": "uint256" - }, - { - "internalType": "bytes4", - "name": "bidDataType", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "bidData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "bidSignature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "sellOrderPaymentAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sellOrderNftAmount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "sellOrderData", - "type": "bytes" - } - ], - "internalType": "struct LibDirectTransfer.AcceptBid", - "name": "direct", - "type": "tuple" - } - ], - "name": "directAcceptBid", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "sellOrderMaker", - "type": "address" - }, - { - "internalType": "uint256", - "name": "sellOrderNftAmount", - "type": "uint256" - }, - { - "internalType": "bytes4", - "name": "nftAssetClass", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "nftData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "sellOrderPaymentAmount", - "type": "uint256" - }, - { - "internalType": "address", - "name": "paymentToken", - "type": "address" - }, - { - "internalType": "uint256", - "name": "sellOrderSalt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sellOrderStart", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "sellOrderEnd", - "type": "uint256" - }, - { - "internalType": "bytes4", - "name": "sellOrderDataType", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "sellOrderData", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "sellOrderSignature", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "buyOrderPaymentAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "buyOrderNftAmount", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "buyOrderData", - "type": "bytes" - } - ], - "internalType": "struct LibDirectTransfer.Purchase", - "name": "direct", - "type": "tuple" - } - ], - "name": "directPurchase", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "userAddress", - "type": "address" - }, - { - "internalType": "bytes", - "name": "functionSignature", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "sigR", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "sigS", - "type": "bytes32" - }, - { - "internalType": "uint8", - "name": "sigV", - "type": "uint8" - } - ], - "name": "executeMetaTransaction", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "fills", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "user", - "type": "address" - } - ], - "name": "getNonce", - "outputs": [ - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "maker", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes4", - "name": "assetClass", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct LibAsset.AssetType", - "name": "assetType", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "internalType": "struct LibAsset.Asset", - "name": "makeAsset", - "type": "tuple" - }, - { - "internalType": "address", - "name": "taker", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes4", - "name": "assetClass", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct LibAsset.AssetType", - "name": "assetType", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "internalType": "struct LibAsset.Asset", - "name": "takeAsset", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "salt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" - }, - { - "internalType": "bytes4", - "name": "dataType", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct LibOrder.Order", - "name": "orderLeft", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "signatureLeft", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "address", - "name": "maker", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes4", - "name": "assetClass", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct LibAsset.AssetType", - "name": "assetType", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "internalType": "struct LibAsset.Asset", - "name": "makeAsset", - "type": "tuple" - }, - { - "internalType": "address", - "name": "taker", - "type": "address" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes4", - "name": "assetClass", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct LibAsset.AssetType", - "name": "assetType", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "internalType": "struct LibAsset.Asset", - "name": "takeAsset", - "type": "tuple" - }, - { - "internalType": "uint256", - "name": "salt", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "start", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "end", - "type": "uint256" - }, - { - "internalType": "bytes4", - "name": "dataType", - "type": "bytes4" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct LibOrder.Order", - "name": "orderRight", - "type": "tuple" - }, - { - "internalType": "bytes", - "name": "signatureRight", - "type": "bytes" - } - ], - "name": "matchOrders", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "protocolFee", - "outputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint48", - "name": "buyerAmount", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "sellerAmount", - "type": "uint48" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "royaltiesRegistry", - "outputs": [ - { - "internalType": "contract IRoyaltiesProvider", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - }, - { - "internalType": "uint48", - "name": "_buyerAmount", - "type": "uint48" - }, - { - "internalType": "uint48", - "name": "_sellerAmount", - "type": "uint48" - } - ], - "name": "setAllProtocolFeeData", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "assetType", - "type": "bytes4" - }, - { - "internalType": "address", - "name": "matcher", - "type": "address" - } - ], - "name": "setAssetMatcher", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint48", - "name": "_buyerAmount", - "type": "uint48" - } - ], - "name": "setPrtocolFeeBuyerAmount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_receiver", - "type": "address" - } - ], - "name": "setPrtocolFeeReceiver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint48", - "name": "_sellerAmount", - "type": "uint48" - } - ], - "name": "setPrtocolFeeSellerAmount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IRoyaltiesProvider", - "name": "newRoyaltiesRegistry", - "type": "address" - } - ], - "name": "setRoyaltiesRegistry", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "assetType", - "type": "bytes4" - }, - { - "internalType": "address", - "name": "proxy", - "type": "address" - } - ], - "name": "setTransferProxy", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "transactionHash": "0xe88234afa1266d47a23da742d203172a21b7297fb84ffb56997cb14188ecc94d", - "receipt": { - "to": null, - "from": "0x0CA38eAc26A4D0F17F7f323189282e2c0d8259bD", - "contractAddress": "0xAFA4fE011f874C79D9bC083806105760F17e8f0c", - "transactionIndex": 8, - "gasUsed": "5064911", - "logsBloom": "0x00000000200000000000000000000000000000000200000000000000020000000000000002000000000000000000000000008000000000000000000000000000000000000000000000000000000000800400000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000080000000000000000000000000000000000000000000100000", - "blockHash": "0x154eb6fa089b1e34f1e7fb9d4a6d8a90e78895f56ba5c94134b145cb24058fae", - "transactionHash": "0xe88234afa1266d47a23da742d203172a21b7297fb84ffb56997cb14188ecc94d", - "logs": [ - { - "transactionIndex": 8, - "blockNumber": 45608761, - "transactionHash": "0xe88234afa1266d47a23da742d203172a21b7297fb84ffb56997cb14188ecc94d", - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd", - "0x0000000000000000000000005082f249cdb2f2c1ee035e4f423c46ea2dab3ab1" - ], - "data": "0x000000000000000000000000000000000000000000000000001afdc3bb7601000000000000000000000000000000000000000000000000001d3eedbcfc2276a9000000000000000000000000000000000000000000000609406f873550d6b6500000000000000000000000000000000000000000000000001d23eff940ac75a9000000000000000000000000000000000000000000000609408a84f90c4cb750", - "logIndex": 46, - "blockHash": "0x154eb6fa089b1e34f1e7fb9d4a6d8a90e78895f56ba5c94134b145cb24058fae" - } - ], - "blockNumber": 45608761, - "cumulativeGasUsed": "8029678", - "status": 1, - "byzantium": true - }, - "args": [], - "numDeployments": 2, - "solcInputHash": "18cf8d0003f91de2c6ccf5af55330880", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"BuyerFeeAmountChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"Cancel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"}],\"name\":\"FeeReceiverChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leftHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"rightHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLeftFill\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRightFill\",\"type\":\"uint256\"}],\"name\":\"Match\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"MatcherChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"SellerFeeAmountChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_erc20TransferProxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newDefaultFeeReceiver\",\"type\":\"address\"},{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesProvider\",\"type\":\"address\"}],\"name\":\"__ExchangeV2_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"bidMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"bidPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"bidDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"bidData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bidSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.AcceptBid\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directAcceptBid\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sellOrderMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"sellOrderDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"buyOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.Purchase\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"fills\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderLeft\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureLeft\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderRight\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureRight\",\"type\":\"bytes\"}],\"name\":\"matchOrders\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"sellerAmount\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"royaltiesRegistry\",\"outputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setAllProtocolFeeData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"setAssetMatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeBuyerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"setPrtocolFeeReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeSellerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesRegistry\",\"type\":\"address\"}],\"name\":\"setRoyaltiesRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"setTransferProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\",\"params\":{\"direct\":\"struct with parameters for accept bid operation\"}},\"directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\":\"ExchangeMetaV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3a89b0a6ff66280e8e48f9f2c862d5c0e8ab23ee306ae5b204cd588931661a93\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __OrderValidator_init_unchained();\\n __MetaTransaction_init_unchained(\\\"ExchangeMetaV2\\\", \\\"1\\\");\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n }\\n\\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\\n return super._msgSender();\\n }\\n\\n}\\n\",\"keccak256\":\"0xb39016abefc3e1794ff3db48e349fe36bf32eaf04f9d9b6be506ca19af312a20\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == rightTakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xab1909ec7aea3ae95b2de68e94c33c6105944202130cd48762100700ad58e02c\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\\n using SafeMath for uint256;\\n\\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\\\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\\\"));\\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\\\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\\\");\\n\\n mapping(address => uint256) private nonces;\\n bytes32 internal domainSeparator;\\n\\n /*\\n * Meta transaction structure.\\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\\n * He should call the desired function directly in that case.\\n */\\n struct MetaTransaction {\\n uint256 nonce;\\n address from;\\n bytes functionSignature;\\n }\\n\\n /*\\n * Domain structure.\\n * Data(information to for making metaTransaction method uniq.) about method and contract\\n */\\n struct EIP712Domain {\\n string name;\\n string version;\\n address verifyingContract;\\n bytes32 salt;\\n }\\n\\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\\n\\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\\n domainSeparator = keccak256(abi.encode(\\n EIP712_DOMAIN_TYPEHASH,\\n keccak256(bytes(name)),\\n keccak256(bytes(version)),\\n address(this),\\n getSalt()\\n ));\\n }\\n\\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\\n if (inBytes.length == 0) {\\n return 0x0;\\n }\\n\\n assembly {\\n outBytes4 := mload(add(inBytes, 32))\\n }\\n }\\n\\n function executeMetaTransaction(address userAddress,\\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\\n require(destinationFunctionSig != msg.sig, \\\"Wrong functionSignature\\\");\\n MetaTransaction memory metaTx = MetaTransaction({\\n nonce : nonces[userAddress],\\n from : userAddress,\\n functionSignature : functionSignature\\n });\\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \\\"Signer and signature do not match\\\");\\n nonces[userAddress] = nonces[userAddress].add(1);\\n // Append userAddress at the end to extract it from calling context\\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\\n\\n require(success, \\\"Function call not successful\\\");\\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\\n return returnData;\\n }\\n\\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n META_TRANSACTION_TYPEHASH,\\n metaTx.nonce,\\n metaTx.from,\\n keccak256(metaTx.functionSignature)\\n ));\\n }\\n\\n function getNonce(address user) external view returns (uint256 nonce) {\\n nonce = nonces[user];\\n }\\n\\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\\n require(signer != address(0), \\\"Invalid signature\\\");\\n return signer == user;\\n }\\n\\n function _msgSender() internal view virtual override returns (address payable sender) {\\n if (msg.sender == address(this)) {\\n bytes memory array = msg.data;\\n uint256 index = msg.data.length;\\n assembly {\\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\\n }\\n } else {\\n sender = msg.sender;\\n }\\n return sender;\\n }\\n\\n function getSalt() internal pure returns (bytes32) {\\n return bytes32(getChainID());\\n }\\n\\n function getChainID() internal pure returns (uint256 id) {\\n assembly {\\n id := chainid()\\n }\\n }\\n\\n function getDomainSeparator() private view returns (bytes32) {\\n return domainSeparator;\\n }\\n\\n /**\\n * Accept message hash and returns hash message in EIP712 compatible form\\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\\n * https://eips.ethereum.org/EIPS/eip-712\\n * \\\"\\\\\\\\x19\\\" makes the encoding deterministic\\n * \\\"\\\\\\\\x01\\\" is the version byte to make it compatible to EIP-191\\n */\\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", getDomainSeparator(), messageHash));\\n }\\n\\n /**\\n * @dev verifies the call result and bubbles up revert reason for failed calls\\n *\\n * @param success : outcome of forwarded call\\n * @param returndata : returned data from the frowarded call\\n * @param errorMessage : fallback error message to show\\n */\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\\n if (!success) {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x58924a44eea8720bdcfb32f12d3374deac9605a3b75cb8872907856d526bde10\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x5e982ad688493d9c729757c2ebd98efecd0bf3b33992f7342edf6c349874b86c\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50615a9d80620000216000396000f3fe60806040526004361061011f5760003560e01c80638da5cb5b116100a0578063d6ca6ab711610064578063d6ca6ab7146102f2578063e2864fe314610312578063e99a3f8014610332578063eae3ad6f14610345578063f2fde38b146103655761011f565b80638da5cb5b14610259578063b0e21e8a1461026e578063b39deb4614610292578063b74c8e9a146102b2578063bc158c2d146102d25761011f565b806330c642f1116100e757806330c642f1146101cf5780633be89922146101ef57806367d49a3b1461020f5780636d8f069414610222578063715018a6146102445761011f565b80630c53c51c146101245780630d5f7d351461014d5780631372a6251461016257806320158c44146101825780632d0335ab146101af575b600080fd5b610137610132366004614e48565b610385565b60405161014491906153dc565b60405180910390f35b61016061015b366004614fb0565b6106fe565b005b34801561016e57600080fd5b5061016061017d366004614de1565b610a1b565b34801561018e57600080fd5b506101a261019d366004614f44565b610b38565b60405161014491906153b8565b3480156101bb57600080fd5b506101a26101ca366004614b8c565b610b4b565b3480156101db57600080fd5b506101606101ea366004614f78565b610b67565b3480156101fb57600080fd5b5061016061020a366004614b8c565b610c37565b61016061021d366004614fb0565b610cbc565b34801561022e57600080fd5b50610237610f9c565b60405161014491906152ec565b34801561025057600080fd5b50610160610fac565b34801561026557600080fd5b50610237611058565b34801561027a57600080fd5b50610283611068565b6040516101449392919061538f565b34801561029e57600080fd5b506101606102ad366004614f78565b611093565b3480156102be57600080fd5b506101606102cd366004614eb4565b611157565b3480156102de57600080fd5b506101606102ed366004614b8c565b6111d9565b3480156102fe57600080fd5b5061016061030d36600461527e565b6112a6565b34801561031e57600080fd5b5061016061032d3660046151a5565b611380565b6101606103403660046151d7565b611441565b34801561035157600080fd5b5061016061036036600461527e565b611457565b34801561037157600080fd5b50610160610380366004614b8c565b61152e565b6060600061039286611631565b90506000356001600160e01b031990811690821614156103f9576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526101936020908152908490205483528201529081018790526104378882888888611651565b6104725760405162461bcd60e51b8152600401808060200182810382526021815260200180615a476021913960400191505060405180910390fd5b6001600160a01b0388166000908152610193602052604090205461049790600161173b565b61019360008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106105025780518252601f1990920191602091820191016104e3565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106105785780518252601f199092019160209182019101610559565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146105da576040519150601f19603f3d011682016040523d82523d6000602084013e6105df565b606091505b509150915081610636576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106b557818101518382015260200161069d565b50505050905090810190601f1680156106e25780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b600061071861071360c0840160a08501614b8c565b61179e565b604080516101208101909152909150600090806107386020860186614b8c565b6001600160a01b031681526020016040518060400160405280604051806040016040528088604001602081019061076f9190614f5c565b6001600160e01b031916815260200161078b60608a018a6157e1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a08301520161082e61014086016101208701614f5c565b6001600160e01b031916815260200161084b6101408601866157e1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050604080516101208101825282815281518083018352878152610180890135602082810191909152820152808201839052815160808101835294955091939192506060808401929182918282019182916108df91908c01908c01614f5c565b6001600160e01b03191681526020016108fb60608b018b6157e1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a0890135602092830152918352820181905260408201819052606082015260800161096a61014087016101208801614f5c565b6001600160e01b03191681526020016109876101c08701876157e1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610a0b826109d16101608701876157e1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180192505050565b610a158282611818565b50505050565b600054610100900460ff1680610a345750610a34611a6a565b80610a42575060005460ff16155b610a7d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806159b6602e913960400191505060405180910390fd5b600054610100900460ff16158015610aa8576000805460ff1961ff0019909116610100171660011790555b610ab0611a7b565b610ab8611b1d565b610ac0611c16565b610b096040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611ce6565b610b138686611d76565b610b1e848484611e20565b8015610b30576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b6001600160a01b03166000908152610193602052604090205490565b610b6f611ee0565b6001600160a01b0316610b80611058565b6001600160a01b031614610bc9576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c315359390610c2b9084906152ec565b60405180910390a25050565b610c3f611ee0565b6001600160a01b0316610c50611058565b6001600160a01b031614610c99576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cd161071360c0840160a08501614b8c565b60408051610120810190915290915060009080610cf16020860186614b8c565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b0316815260200160405180604001604052806040518060400160405280886040016020810190610d569190614f5c565b6001600160e01b0319168152602001610d7260608a018a6157e1565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e085013560408201526101008501356060820152608001610ded61014086016101208701614f5c565b6001600160e01b0319168152602001610e0a6101408601866157e1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815160808101835294955091939192506020830191908190818101908190610e7c9060608c01908c01614f5c565b6001600160e01b0319168152602001610e9860608b018b6157e1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c001610f2b61014087016101208801614f5c565b6001600160e01b0319168152602001610f486101c08701876157e1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610f92826109d16101608701876157e1565b610a158183611818565b610162546001600160a01b031681565b610fb4611ee0565b6001600160a01b0316610fc5611058565b6001600160a01b03161461100e576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b03165b90565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b61109b611ee0565b6001600160a01b03166110ac611058565b6001600160a01b0316146110f5576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f90610c2b9084906152ec565b61115f611ee0565b6001600160a01b0316611170611058565b6001600160a01b0316146111b9576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b6111c2836111d9565b6111cb826112a6565b6111d481611457565b505050565b6111e1611ee0565b6001600160a01b03166111f2611058565b6001600160a01b03161461123b576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd039161127b916001600160a01b03909116908490615300565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b6112ae611ee0565b6001600160a01b03166112bf611058565b6001600160a01b031614611308576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e9161134d91600160a01b90910465ffffffffffff169084906157c8565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316611393611ee0565b6001600160a01b0316146113c25760405162461bcd60e51b81526004016113b990615738565b60405180910390fd5b60808101516113e35760405162461bcd60e51b81526004016113b9906154ca565b60006113ee82611eef565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a906114359083906153b8565b60405180910390a15050565b61144d84848484612077565b610a158483611818565b61145f611ee0565b6001600160a01b0316611470611058565b6001600160a01b0316146114b9576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916114fe91600160d01b90910465ffffffffffff169084906157c8565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b611536611ee0565b6001600160a01b0316611547611058565b6001600160a01b031614611590576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b6001600160a01b0381166115d55760405162461bcd60e51b81526004018080602001828103825260268152602001806159216026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008151600014156116455750600061164c565b5060208101515b919050565b600080600161166761166288612143565b6121c6565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156116be573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661171a576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611795576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6117a6614781565b6117ae614781565b6001600160a01b0383166117cb576355575f5d60e11b8152611798565b6322ba176160e21b81526040516117e69084906020016152ec565b60408051601f19818403018152919052602082015292915050565b61180a82612212565b61181482826122dc565b5050565b600080611825848461258b565b9150915060008060006118388787612624565b9250925092506000806119916040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b031681525061198c8a600001518a600001516126d3565b6127a4565b885191935091506001600160e01b0319166355575f5d60e11b1415611a105785516001600160e01b0319166355575f5d60e11b14156119cf57600080fd5b813410156119ef5760405162461bcd60e51b81526004016113b990615710565b81341115611a0b57611a0b611a04348461291b565b3390612978565b611a5f565b85516001600160e01b0319166355575f5d60e11b1415611a5f5780341015611a4a5760405162461bcd60e51b81526004016113b990615710565b80341115611a5f57611a5f611a04348361291b565b505050505050505050565b6000611a7530612a10565b15905090565b600054610100900460ff1680611a945750611a94611a6a565b80611aa2575060005460ff16155b611add5760405162461bcd60e51b815260040180806020018281038252602e8152602001806159b6602e913960400191505060405180910390fd5b600054610100900460ff16158015611b08576000805460ff1961ff0019909116610100171660011790555b8015611b1a576000805461ff00191690555b50565b600054610100900460ff1680611b365750611b36611a6a565b80611b44575060005460ff16155b611b7f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806159b6602e913960400191505060405180910390fd5b600054610100900460ff16158015611baa576000805460ff1961ff0019909116610100171660011790555b6000611bb4611ee0565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611b1a576000805461ff001916905550565b600054610100900460ff1680611c2f5750611c2f611a6a565b80611c3d575060005460ff16155b611c785760405162461bcd60e51b815260040180806020018281038252602e8152602001806159b6602e913960400191505060405180910390fd5b600054610100900460ff16158015611ca3576000805460ff1961ff0019909116610100171660011790555b611b086040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b815250612a16565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030611d20612ad6565b60405160200180868152602001858152602001848152602001836001600160a01b031681526020018281526020019550505050505060405160208183030381529060405280519060200120610194819055505050565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff1680611e395750611e39611a6a565b80611e47575060005460ff16155b611e825760405162461bcd60e51b815260040180806020018281038252602e8152602001806159b6602e913960400191505060405180910390fd5b600054610100900460ff16158015611ead576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610a15576000805461ff001916905550505050565b6000611eea612ae0565b905090565b60e08101516000906001600160e01b031916632611a13360e11b1480611f23575060e08201516001600160e01b0319908116145b15611f98578151602083015151611f3990612b3c565b606084015151611f4890612b3c565b846080015160405160200180856001600160a01b0316815260200184815260200183815260200182815260200194505050505060405160208183030381529060405280519060200120905061164c565b8151602083015151611fa990612b3c565b606084015151611fb890612b3c565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561202457818101518382015260200161200c565b50505050905090810190601f1680156120515780820380516001836020036101000a031916815260200191505b50965050505050505060405160208183030381529060405280519060200120905061164c565b6120818484611801565b61208b8282611801565b60408401516001600160a01b0316156120e75781516001600160a01b0316156120e75783604001516001600160a01b031682600001516001600160a01b0316146120e75760405162461bcd60e51b81526004016113b9906156cd565b60408201516001600160a01b031615610a155783516001600160a01b031615610a155783600001516001600160a01b031682604001516001600160a01b031614610a155760405162461bcd60e51b81526004016113b99061553c565b60006040518060800160405280604381526020016158de60439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60006121d0612ba6565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60a081015115806122265750428160a00151105b612277576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c0810151158061228b5750428160c00151115b611b1a576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b60808201516123615781516001600160a01b03161561235c5781516001600160a01b0316612308611ee0565b6001600160a01b03161461235c576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b611814565b81516001600160a01b0316612374611ee0565b6001600160a01b03161461181457600061238d83612bad565b90506123a583600001516001600160a01b0316612a10565b156124e1578251630b135d3f60e11b906001600160a01b0316631626ba7e6123cc84612c9d565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561241f578181015183820152602001612407565b50505050905090810190601f16801561244c5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561246a57600080fd5b505afa15801561247e573d6000803e3d6000fd5b505050506040513d602081101561249457600080fd5b50516001600160e01b031916146124dc5760405162461bcd60e51b815260040180806020018281038252602b81526020018061598b602b913960400191505060405180910390fd5b6111d4565b82516001600160a01b03166124ff836124f984612c9d565b90612ca7565b6001600160a01b0316146125445760405162461bcd60e51b81526004018080602001828103825260228152602001806159696022913960400191505060405180910390fd5b82516001600160a01b03166111d4576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b612593614781565b61259b614781565b6020840151516060840151516125b19190612d27565b80519092506001600160e01b0319166125dc5760405162461bcd60e51b81526004016113b9906156a1565b6060840151516020840151516125f29190612d27565b80519091506001600160e01b03191661261d5760405162461bcd60e51b81526004016113b9906156a1565b9250929050565b61262c614799565b612634614799565b61263c6147bc565b600061264786611eef565b9050600061265486611eef565b90506000612660611ee0565b88519091506001600160a01b031661267f576001600160a01b03811688525b86516001600160a01b031661269b576001600160a01b03811687525b6126a488612d67565b95506126af87612d67565b94506126c7888885858a604001518a60400151612e60565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b14156126f657506001611798565b6001600160e01b031982166355575f5d60e11b141561271757506002611798565b6001600160e01b031983166322ba176160e21b141561273857506001611798565b6001600160e01b031982166322ba176160e21b141561275957506002611798565b6001600160e01b0319831663025ceed960e61b141561277a57506001611798565b6001600160e01b0319821663025ceed960e61b141561279b57506002611798565b50600092915050565b825160209081015183519091015160018360028111156127c057fe5b14156128425760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b9091041691810191909152612812908690869061301b565b915061283d846000015160000151856000015160200151866080015188602001518860600151613295565b612913565b600283600281111561285057fe5b14156128cd5760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526128a2908590879061301b565b905061283d856000015160000151866000015160200151876080015187602001518960600151613295565b8451805160209182015160808801519287015160608901516128f0949190613295565b835180516020918201516080870151928801516060880151612913949190613295565b935093915050565b600082821115612972576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146129c3576040519150601f19603f3d011682016040523d82523d6000602084013e6129c8565b606091505b50509050806111d4576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff1680612a2f5750612a2f611a6a565b80612a3d575060005460ff16155b612a785760405162461bcd60e51b815260040180806020018281038252602e8152602001806159b6602e913960400191505060405180910390fd5b600054610100900460ff16158015612aa3576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca5580156111d4576000805461ff0019169055505050565b6000611eea613419565b600033301415612b3757600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506110659050565b503390565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b6101945490565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d8260000151612be2846020015161341d565b8460400151612bf4866060015161341d565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b60006121d061348d565b60008151604114612cff576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612d1d868285856134c8565b9695505050505050565b612d2f614781565b6000612d3b848461371e565b80519091506001600160e01b031916612d6057612d58838561371e565b915050611798565b9050611798565b612d6f614799565b60e08201516001600160e01b031916632611a13360e11b1415612dbb576000826101000151806020019051810190612da7919061506d565b805183526020908101519083015250612e47565b60e08201516001600160e01b0319166323d235ef60e01b1415612e13576000826101000151806020019051810190612df391906150f9565b805183526020808201519084015260409081015115159083015250612e47565b60e08201516001600160e01b03199081161415612e2f57612e47565b60405162461bcd60e51b81526004016113b990615633565b80515161164c578151612e599061393a565b8152919050565b612e686147bc565b6000612e788860800151876139d5565b90506000612e8a8860800151876139d5565b90506000612e9c8a8a85858a8a6139fa565b90508960200151602001516000141580612ebd575060608901516020015115155b15612ee0578051612ee05760405162461bcd60e51b81526004016113b9906155ac565b60608a015160200151151580612efc57506020808a0151015115155b15612f25576000816020015111612f255760405162461bcd60e51b81526004016113b9906155ac565b60808a015115612f78578515612f57578051612f4290849061173b565b600089815261012f6020526040902055612f78565b6020810151612f6790849061173b565b600089815261012f60205260409020555b608089015115612fcb578415612fad576020810151612f9890839061173b565b600088815261012f6020526040902055612fcb565b8051612fba90839061173b565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c45092613006928c928c9291906153c1565b60405180910390a19998505050505050505050565b6000613034846000015160200151838660400151613a89565b9050600061305e828660000151602001518760800151868960000151600001518a60600151613b36565b8551805186515160208089015193015160808a015160608b015195965061308c959394929387929190613b93565b905084604001515160011480156130a857508360400151516001145b80156130fd575084604001516000815181106130c057fe5b6020026020010151600001516001600160a01b031684604001516000815181106130e657fe5b6020026020010151600001516001600160a01b0316145b1561321357604080516001808252818301909252600091816020015b6131216147d6565b815260200190600190039081613119579050509050846040015160008151811061314757fe5b6020026020010151600001518160008151811061316057fe5b60209081029190910101516001600160a01b0390911690526040860151805160009061318857fe5b60200260200101516020015185604001516000815181106131a557fe5b60200260200101516020015101816000815181106131bf57fe5b6020026020010151602001906001600160601b031690816001600160601b03168152505061320986600001516000015183886000015160200151848a608001518b60600151613c98565b50915061326c9050565b61323d85600001516000015182876000015160200151886040015189608001518a60600151613c98565b50855180516020909101516040870151608089015160608a0151949550613268948693929190613c98565b5090505b61328d85600001516000015182876080015187602001518960600151613295565b509392505050565b60008251116132b65760405162461bcd60e51b81526004016113b9906154f8565b600084815b60018551038110156133855760006132fc8683815181106132d857fe5b6020026020010151602001516001600160601b031689613d4d90919063ffffffff16565b905061333186838151811061330d57fe5b6020026020010151602001516001600160601b03168561173b90919063ffffffff16565b9350801561337c57613343838261291b565b925061337c60405180604001604052808b8152602001838152508888858151811061336a57fe5b60200260200101516000015188613d65565b506001016132bb565b5060008460018651038151811061339857fe5b602002602001015190506133c281602001516001600160601b03168461173b90919063ffffffff16565b925082612710146133e55760405162461bcd60e51b81526004016113b99061566a565b811561340f5761340f60405180604001604052808a81526020018481525087836000015187613d65565b5050505050505050565b4690565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b0861344d8360000151612b3c565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b6000611eea7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6134bb61416d565b6134c3614173565b614179565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156135295760405162461bcd60e51b81526004018080602001828103825260228152602001806159476022913960400191505060405180910390fd5b6000601e8560ff161115613603576004850360ff16601b148061355257506004850360ff16601c145b61358d5760405162461bcd60e51b81526004018080602001828103825260228152602001806159e46022913960400191505060405180910390fd5b6001613598876141db565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156135f2573d6000803e3d6000fd5b5050506020604051035190506136ba565b8460ff16601b148061361857508460ff16601c145b6136535760405162461bcd60e51b81526004018080602001828103825260228152602001806159e46022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156136ad573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116613715576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b613726614781565b825182516001600160e01b031982166355575f5d60e11b1415613791576001600160e01b031981166355575f5d60e11b1415613766578492505050611798565b5050604080518082018252600080825282516020818101909452908152918101919091529050611798565b6001600160e01b031982166322ba176160e21b14156137d6576001600160e01b031981166322ba176160e21b1415613766576137cd858561422c565b92505050611798565b6001600160e01b031982166339d690a360e11b1415613812576001600160e01b031981166339d690a360e11b1415613766576137cd858561422c565b6001600160e01b0319821663025ceed960e61b141561384e576001600160e01b0319811663025ceed960e61b1415613766576137cd858561422c565b6001600160e01b031982166000908152606560205260409020546001600160a01b03168015613903576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb0906138a5908990899060040161575d565b60006040518083038186803b1580156138bd57600080fd5b505afa1580156138d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138f99190810190614fe2565b9350505050611798565b6001600160e01b03198381169083161415613922576138f9868661422c565b60405162461bcd60e51b81526004016113b99061545c565b60408051600180825281830190925260609160009190816020015b61395d6147d6565b815260200190600190039081613955579050509050828160008151811061398057fe5b6020026020010151600001906001600160a01b031690816001600160a01b031681525050612710816000815181106139b457fe5b6020908102919091018101516001600160601b039092169101529050919050565b6000826139e457506000611798565b50600090815261012f6020526040902054919050565b613a026147bc565b600080613a10898887614289565b91509150600080613a228a8988614289565b9150915083811180613a32575083155b15613a5e57613a5384848c60200151602001518d6060015160200151614302565b945050505050612d1d565b613a7a8b60200151602001518c60600151602001518484614387565b9b9a5050505050505050505050565b602082015160009065ffffffffffff16815b8351811015613b1657612710848281518110613ab357fe5b6020026020010151602001516001600160601b03161115613ae65760405162461bcd60e51b81526004016113b990615604565b838181518110613af257fe5b6020026020010151602001516001600160601b031682019150806001019050613a9b565b50613b2b613b248683613d4d565b869061173b565b9150505b9392505050565b6000806000613b588989886040015189602001510165ffffffffffff1661440d565b90925090508015613b8757613b8760405180604001604052808781526020018381525088886000015187613d65565b50979650505050505050565b600080613b9f8861442f565b905080516001148015613bb3575086516001145b8015613c00575086600081518110613bc757fe5b6020026020010151600001516001600160a01b031681600081518110613be957fe5b6020026020010151600001516001600160a01b0316145b15613c515761138881600081518110613c1557fe5b6020026020010151602001516001600160601b03161115613c485760405162461bcd60e51b81526004016113b990615493565b85915050613c8d565b600080613c628b8989868a8a613c98565b91509150611388811115613c885760405162461bcd60e51b81526004016113b990615493565b509150505b979650505050505050565b846000805b8551811015613d4157613cd9868281518110613cb557fe5b6020026020010151602001516001600160601b03168361173b90919063ffffffff16565b91506000613d088489898581518110613cee57fe5b6020026020010151602001516001600160601b031661440d565b90945090508015613d3857613d3860405180604001604052808c8152602001838152508789858151811061336a57fe5b50600101613c9d565b50965096945050505050565b6000611795612710613d5f85856145a4565b906145fd565b8351516001600160e01b0319166339d690a360e11b1415613eab57600080856000015160200151806020019051810190613d9f9190614db4565b915091508560200151600114613dc75760405162461bcd60e51b81526004016113b990615580565b6001600160a01b038516301415613e3f57604051632142170760e11b81526001600160a01b038316906342842e0e90613e089030908890869060040161531a565b600060405180830381600087803b158015613e2257600080fd5b505af1158015613e36573d6000803e3d6000fd5b50505050613ea4565b604051637b84dc8360e11b81526001600160a01b0384169063f709b90690613e71908590899089908790600401615432565b600060405180830381600087803b158015613e8b57600080fd5b505af1158015613e9f573d6000803e3d6000fd5b505050505b5050610a15565b8351516001600160e01b0319166322ba176160e21b1415614009576000846000015160200151806020019051810190613ee49190614ba8565b90506001600160a01b038416301415613f9b57602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb91613f28918791600401615376565b602060405180830381600087803b158015613f4257600080fd5b505af1158015613f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7a9190614f2a565b613f965760405162461bcd60e51b81526004016113b9906155d5565b614003565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c391613fd091859189918991600401615432565b600060405180830381600087803b158015613fea57600080fd5b505af1158015613ffe573d6000803e3d6000fd5b505050505b50610a15565b8351516001600160e01b03191663025ceed960e61b14156140c6576000808560000151602001518060200190518101906140439190614db4565b90925090506001600160a01b03851630141561408e576020860151604051637921219560e11b81526001600160a01b0384169163f242432a91613e089130918991879160040161533e565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee991613e719186918a918a918891906004016153ef565b8351516001600160e01b0319166355575f5d60e11b141561410f576001600160a01b038216301461410a57602084015161410a906001600160a01b03841690612978565b610a15565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf19061413f90879087908790600401615782565b600060405180830381600087803b15801561415957600080fd5b505af115801561340f573d6000803e3d6000fd5b60c95490565b60ca5490565b6000838383614186613419565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b614234614781565b6020808401518051908201208382015180519201919091208082141561425e578492505050611798565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b60008082156142c85760208086015101516142a4908561291b565b91506142c185606001516020015186602001516020015184614664565b9050612913565b6060850151602001516142db908561291b565b90506142f885602001516020015186606001516020015183614664565b9150935093915050565b61430a6147bc565b6000614317858585614664565b90508581111561436e576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b61438f6147bc565b600061439c838787614664565b9050838111156143f3576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b6000806144238561441e8686613d4d565b6146ca565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480614463575081516001600160e01b0319166339d690a360e11b145b156145195760008083602001518060200190518101906144839190614db4565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a906144ba9085908590600401615376565b600060405180830381600087803b1580156144d457600080fd5b505af11580156144e8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145109190810190614ef8565b9250505061164c565b81516001600160e01b03191662737ea960e61b141561455a576000826020015180602001905181019061454c9190614bc4565b60800151925061164c915050565b81516001600160e01b03191663d8f960c160e01b141561459c576000826020015180602001905181019061458e9190614cc1565b60600151925061164c915050565b506060919050565b6000826145b357506000611798565b828202828482816145c057fe5b04146117955760405162461bcd60e51b8152600401808060200182810382526021815260200180615a066021913960400191505060405180910390fd5b6000808211614653576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161465c57fe5b049392505050565b60006146718484846146f2565b156146b4576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b6146c283613d5f86856145a4565b949350505050565b600080828411156146e9576146df848461291b565b915082905061261d565b50600093915050565b600082614739576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b811580614744575083155b1561475157506000613b2f565b6000838061475b57fe5b858409905061476a85846145a4565b614776826103e86145a4565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b803561164c816158b2565b600082601f830112614808578081fd5b8151602061481d61481883615848565b615825565b82815281810190858301855b8581101561485257614840898684518b0101614981565b84529284019290840190600101614829565b5090979650505050505050565b600082601f83011261486f578081fd5b8151602061487f61481883615848565b8281528181019085830160408086028801850189101561489d578687fd5b865b8681101561490c5781838b0312156148b5578788fd5b81518281018181106001600160401b03821117156148cf57fe5b835283516148dc816158b2565b8152838701516001600160601b03811681146148f657898afd5b818801528552938501939181019160010161489f565b509198975050505050505050565b8051801515811461164c57600080fd5b803561164c816158c7565b600082601f830112614945578081fd5b813561495361481882615865565b818152846020838601011115614967578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112614991578081fd5b815161499f61481882615865565b8181528460208386010111156149b3578283fd5b6146c2826020830160208701615886565b60006101e082840312156149d6578081fd5b50919050565b600060408083850312156149ee578182fd5b80518181016001600160401b038282108183111715614a0957fe5b818452829450853581811115614a1e57600080fd5b8601808803851315614a2f57600080fd5b608084018381108382111715614a4157fe5b909452833593614a50856158c7565b93825260208401359381851115614a6657600080fd5b614a7288868301614935565b60608501525050815260209384013593019290925292915050565b6000610120808385031215614aa0578182fd5b614aa981615825565b915050614ab5826147ed565b815260208201356001600160401b0380821115614ad157600080fd5b614add858386016149dc565b6020840152614aee604085016147ed565b60408401526060840135915080821115614b0757600080fd5b614b13858386016149dc565b60608401526080840135608084015260a084013560a084015260c084013560c0840152614b4260e0850161492a565b60e084015261010091508184013581811115614b5d57600080fd5b614b6986828701614935565b8385015250505092915050565b803565ffffffffffff8116811461164c57600080fd5b600060208284031215614b9d578081fd5b8135611795816158b2565b600060208284031215614bb9578081fd5b8151611795816158b2565b60008060408385031215614bd6578081fd5b8251614be1816158b2565b60208401519092506001600160401b0380821115614bfd578283fd5b9084019060c08287031215614c10578283fd5b614c1a60c0615825565b82518152602083015182811115614c2f578485fd5b614c3b88828601614981565b60208301525060408301516040820152606083015182811115614c5c578485fd5b614c688882860161485f565b606083015250608083015182811115614c7f578485fd5b614c8b8882860161485f565b60808301525060a083015182811115614ca2578485fd5b614cae888286016147f8565b60a0830152508093505050509250929050565b60008060408385031215614cd3578182fd5b8251614cde816158b2565b60208401519092506001600160401b0380821115614cfa578283fd5b9084019060a08287031215614d0d578283fd5b614d1760a0615825565b82518152602083015182811115614d2c578485fd5b614d3888828601614981565b602083015250604083015182811115614d4f578485fd5b614d5b8882860161485f565b604083015250606083015182811115614d72578485fd5b614d7e8882860161485f565b606083015250608083015182811115614d95578485fd5b614da1888286016147f8565b6080830152508093505050509250929050565b60008060408385031215614dc6578182fd5b8251614dd1816158b2565b6020939093015192949293505050565b600080600080600060a08688031215614df8578081fd5b8535614e03816158b2565b94506020860135614e13816158b2565b9350604086013592506060860135614e2a816158b2565b91506080860135614e3a816158b2565b809150509295509295909350565b600080600080600060a08688031215614e5f578283fd5b8535614e6a816158b2565b945060208601356001600160401b03811115614e84578384fd5b614e9088828901614935565b9450506040860135925060608601359150608086013560ff81168114614e3a578182fd5b600080600060608486031215614ec8578081fd5b8335614ed3816158b2565b9250614ee160208501614b76565b9150614eef60408501614b76565b90509250925092565b600060208284031215614f09578081fd5b81516001600160401b03811115614f1e578182fd5b6146c28482850161485f565b600060208284031215614f3b578081fd5b6117958261491a565b600060208284031215614f55578081fd5b5035919050565b600060208284031215614f6d578081fd5b8135611795816158c7565b60008060408385031215614f8a578182fd5b8235614f95816158c7565b91506020830135614fa5816158b2565b809150509250929050565b600060208284031215614fc1578081fd5b81356001600160401b03811115614fd6578182fd5b6146c2848285016149c4565b600060208284031215614ff3578081fd5b81516001600160401b0380821115615009578283fd5b908301906040828603121561501c578283fd5b60405160408101818110838211171561503157fe5b604052825161503f816158c7565b8152602083015182811115615052578485fd5b61505e87828601614981565b60208301525095945050505050565b60006020828403121561507e578081fd5b81516001600160401b0380821115615094578283fd5b90830190604082860312156150a7578283fd5b6040516040810181811083821117156150bc57fe5b6040528251828111156150cd578485fd5b6150d98782860161485f565b8252506020830151828111156150ed578485fd5b61505e8782860161485f565b60006020828403121561510a578081fd5b81516001600160401b0380821115615120578283fd5b9083019060608286031215615133578283fd5b60405160608101818110838211171561514857fe5b604052825182811115615159578485fd5b6151658782860161485f565b825250602083015182811115615179578485fd5b6151858782860161485f565b6020830152506151976040840161491a565b604082015295945050505050565b6000602082840312156151b6578081fd5b81356001600160401b038111156151cb578182fd5b6146c284828501614a8d565b600080600080608085870312156151ec578182fd5b84356001600160401b0380821115615202578384fd5b61520e88838901614a8d565b95506020870135915080821115615223578384fd5b61522f88838901614935565b94506040870135915080821115615244578384fd5b61525088838901614a8d565b93506060870135915080821115615265578283fd5b5061527287828801614935565b91505092959194509250565b60006020828403121561528f578081fd5b61179582614b76565b600081518084526152b0816020860160208601615886565b601f01601f19169290920160200192915050565b600063ffffffff60e01b82511683526020820151604060208501526146c26040850182615298565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b6000602082526117956020830184615298565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b60006040825261577060408301856152c4565b8281036020840152613b2b81856152c4565b60006060825284516040606084015261579e60a08401826152c4565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e198436030181126157f7578283fd5b8301803591506001600160401b03821115615810578283fd5b60200191503681900382131561261d57600080fd5b6040518181016001600160401b038111828210171561584057fe5b604052919050565b60006001600160401b0382111561585b57fe5b5060209081020190565b60006001600160401b0382111561587857fe5b50601f01601f191660200190565b60005b838110156158a1578181015183820152602001615889565b83811115610a155750506000910152565b6001600160a01b0381168114611b1a57600080fd5b6001600160e01b031981168114611b1a57600080fdfe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368a2646970667358221220f93b403b7e6a7e20288f6de2d316a86611df0ef6231729a32a7d66db602be04464736f6c63430007060033", - "deployedBytecode": "0x60806040526004361061011f5760003560e01c80638da5cb5b116100a0578063d6ca6ab711610064578063d6ca6ab7146102f2578063e2864fe314610312578063e99a3f8014610332578063eae3ad6f14610345578063f2fde38b146103655761011f565b80638da5cb5b14610259578063b0e21e8a1461026e578063b39deb4614610292578063b74c8e9a146102b2578063bc158c2d146102d25761011f565b806330c642f1116100e757806330c642f1146101cf5780633be89922146101ef57806367d49a3b1461020f5780636d8f069414610222578063715018a6146102445761011f565b80630c53c51c146101245780630d5f7d351461014d5780631372a6251461016257806320158c44146101825780632d0335ab146101af575b600080fd5b610137610132366004614e48565b610385565b60405161014491906153dc565b60405180910390f35b61016061015b366004614fb0565b6106fe565b005b34801561016e57600080fd5b5061016061017d366004614de1565b610a1b565b34801561018e57600080fd5b506101a261019d366004614f44565b610b38565b60405161014491906153b8565b3480156101bb57600080fd5b506101a26101ca366004614b8c565b610b4b565b3480156101db57600080fd5b506101606101ea366004614f78565b610b67565b3480156101fb57600080fd5b5061016061020a366004614b8c565b610c37565b61016061021d366004614fb0565b610cbc565b34801561022e57600080fd5b50610237610f9c565b60405161014491906152ec565b34801561025057600080fd5b50610160610fac565b34801561026557600080fd5b50610237611058565b34801561027a57600080fd5b50610283611068565b6040516101449392919061538f565b34801561029e57600080fd5b506101606102ad366004614f78565b611093565b3480156102be57600080fd5b506101606102cd366004614eb4565b611157565b3480156102de57600080fd5b506101606102ed366004614b8c565b6111d9565b3480156102fe57600080fd5b5061016061030d36600461527e565b6112a6565b34801561031e57600080fd5b5061016061032d3660046151a5565b611380565b6101606103403660046151d7565b611441565b34801561035157600080fd5b5061016061036036600461527e565b611457565b34801561037157600080fd5b50610160610380366004614b8c565b61152e565b6060600061039286611631565b90506000356001600160e01b031990811690821614156103f9576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526101936020908152908490205483528201529081018790526104378882888888611651565b6104725760405162461bcd60e51b8152600401808060200182810382526021815260200180615a476021913960400191505060405180910390fd5b6001600160a01b0388166000908152610193602052604090205461049790600161173b565b61019360008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106105025780518252601f1990920191602091820191016104e3565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106105785780518252601f199092019160209182019101610559565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146105da576040519150601f19603f3d011682016040523d82523d6000602084013e6105df565b606091505b509150915081610636576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106b557818101518382015260200161069d565b50505050905090810190601f1680156106e25780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b600061071861071360c0840160a08501614b8c565b61179e565b604080516101208101909152909150600090806107386020860186614b8c565b6001600160a01b031681526020016040518060400160405280604051806040016040528088604001602081019061076f9190614f5c565b6001600160e01b031916815260200161078b60608a018a6157e1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a08301520161082e61014086016101208701614f5c565b6001600160e01b031916815260200161084b6101408601866157e1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050604080516101208101825282815281518083018352878152610180890135602082810191909152820152808201839052815160808101835294955091939192506060808401929182918282019182916108df91908c01908c01614f5c565b6001600160e01b03191681526020016108fb60608b018b6157e1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a0890135602092830152918352820181905260408201819052606082015260800161096a61014087016101208801614f5c565b6001600160e01b03191681526020016109876101c08701876157e1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610a0b826109d16101608701876157e1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180192505050565b610a158282611818565b50505050565b600054610100900460ff1680610a345750610a34611a6a565b80610a42575060005460ff16155b610a7d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806159b6602e913960400191505060405180910390fd5b600054610100900460ff16158015610aa8576000805460ff1961ff0019909116610100171660011790555b610ab0611a7b565b610ab8611b1d565b610ac0611c16565b610b096040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611ce6565b610b138686611d76565b610b1e848484611e20565b8015610b30576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b6001600160a01b03166000908152610193602052604090205490565b610b6f611ee0565b6001600160a01b0316610b80611058565b6001600160a01b031614610bc9576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c315359390610c2b9084906152ec565b60405180910390a25050565b610c3f611ee0565b6001600160a01b0316610c50611058565b6001600160a01b031614610c99576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610cd161071360c0840160a08501614b8c565b60408051610120810190915290915060009080610cf16020860186614b8c565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b0316815260200160405180604001604052806040518060400160405280886040016020810190610d569190614f5c565b6001600160e01b0319168152602001610d7260608a018a6157e1565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e085013560408201526101008501356060820152608001610ded61014086016101208701614f5c565b6001600160e01b0319168152602001610e0a6101408601866157e1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815160808101835294955091939192506020830191908190818101908190610e7c9060608c01908c01614f5c565b6001600160e01b0319168152602001610e9860608b018b6157e1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c001610f2b61014087016101208801614f5c565b6001600160e01b0319168152602001610f486101c08701876157e1565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610f92826109d16101608701876157e1565b610a158183611818565b610162546001600160a01b031681565b610fb4611ee0565b6001600160a01b0316610fc5611058565b6001600160a01b03161461100e576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b03165b90565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b61109b611ee0565b6001600160a01b03166110ac611058565b6001600160a01b0316146110f5576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f90610c2b9084906152ec565b61115f611ee0565b6001600160a01b0316611170611058565b6001600160a01b0316146111b9576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b6111c2836111d9565b6111cb826112a6565b6111d481611457565b505050565b6111e1611ee0565b6001600160a01b03166111f2611058565b6001600160a01b03161461123b576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd039161127b916001600160a01b03909116908490615300565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b6112ae611ee0565b6001600160a01b03166112bf611058565b6001600160a01b031614611308576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e9161134d91600160a01b90910465ffffffffffff169084906157c8565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316611393611ee0565b6001600160a01b0316146113c25760405162461bcd60e51b81526004016113b990615738565b60405180910390fd5b60808101516113e35760405162461bcd60e51b81526004016113b9906154ca565b60006113ee82611eef565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a906114359083906153b8565b60405180910390a15050565b61144d84848484612077565b610a158483611818565b61145f611ee0565b6001600160a01b0316611470611058565b6001600160a01b0316146114b9576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916114fe91600160d01b90910465ffffffffffff169084906157c8565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b611536611ee0565b6001600160a01b0316611547611058565b6001600160a01b031614611590576040805162461bcd60e51b81526020600482018190526024820152600080516020615a27833981519152604482015290519081900360640190fd5b6001600160a01b0381166115d55760405162461bcd60e51b81526004018080602001828103825260268152602001806159216026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008151600014156116455750600061164c565b5060208101515b919050565b600080600161166761166288612143565b6121c6565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156116be573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661171a576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611795576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b6117a6614781565b6117ae614781565b6001600160a01b0383166117cb576355575f5d60e11b8152611798565b6322ba176160e21b81526040516117e69084906020016152ec565b60408051601f19818403018152919052602082015292915050565b61180a82612212565b61181482826122dc565b5050565b600080611825848461258b565b9150915060008060006118388787612624565b9250925092506000806119916040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b031681525061198c8a600001518a600001516126d3565b6127a4565b885191935091506001600160e01b0319166355575f5d60e11b1415611a105785516001600160e01b0319166355575f5d60e11b14156119cf57600080fd5b813410156119ef5760405162461bcd60e51b81526004016113b990615710565b81341115611a0b57611a0b611a04348461291b565b3390612978565b611a5f565b85516001600160e01b0319166355575f5d60e11b1415611a5f5780341015611a4a5760405162461bcd60e51b81526004016113b990615710565b80341115611a5f57611a5f611a04348361291b565b505050505050505050565b6000611a7530612a10565b15905090565b600054610100900460ff1680611a945750611a94611a6a565b80611aa2575060005460ff16155b611add5760405162461bcd60e51b815260040180806020018281038252602e8152602001806159b6602e913960400191505060405180910390fd5b600054610100900460ff16158015611b08576000805460ff1961ff0019909116610100171660011790555b8015611b1a576000805461ff00191690555b50565b600054610100900460ff1680611b365750611b36611a6a565b80611b44575060005460ff16155b611b7f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806159b6602e913960400191505060405180910390fd5b600054610100900460ff16158015611baa576000805460ff1961ff0019909116610100171660011790555b6000611bb4611ee0565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611b1a576000805461ff001916905550565b600054610100900460ff1680611c2f5750611c2f611a6a565b80611c3d575060005460ff16155b611c785760405162461bcd60e51b815260040180806020018281038252602e8152602001806159b6602e913960400191505060405180910390fd5b600054610100900460ff16158015611ca3576000805460ff1961ff0019909116610100171660011790555b611b086040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b815250612a16565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030611d20612ad6565b60405160200180868152602001858152602001848152602001836001600160a01b031681526020018281526020019550505050505060405160208183030381529060405280519060200120610194819055505050565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff1680611e395750611e39611a6a565b80611e47575060005460ff16155b611e825760405162461bcd60e51b815260040180806020018281038252602e8152602001806159b6602e913960400191505060405180910390fd5b600054610100900460ff16158015611ead576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610a15576000805461ff001916905550505050565b6000611eea612ae0565b905090565b60e08101516000906001600160e01b031916632611a13360e11b1480611f23575060e08201516001600160e01b0319908116145b15611f98578151602083015151611f3990612b3c565b606084015151611f4890612b3c565b846080015160405160200180856001600160a01b0316815260200184815260200183815260200182815260200194505050505060405160208183030381529060405280519060200120905061164c565b8151602083015151611fa990612b3c565b606084015151611fb890612b3c565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561202457818101518382015260200161200c565b50505050905090810190601f1680156120515780820380516001836020036101000a031916815260200191505b50965050505050505060405160208183030381529060405280519060200120905061164c565b6120818484611801565b61208b8282611801565b60408401516001600160a01b0316156120e75781516001600160a01b0316156120e75783604001516001600160a01b031682600001516001600160a01b0316146120e75760405162461bcd60e51b81526004016113b9906156cd565b60408201516001600160a01b031615610a155783516001600160a01b031615610a155783600001516001600160a01b031682604001516001600160a01b031614610a155760405162461bcd60e51b81526004016113b99061553c565b60006040518060800160405280604381526020016158de60439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60006121d0612ba6565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60a081015115806122265750428160a00151105b612277576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c0810151158061228b5750428160c00151115b611b1a576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b60808201516123615781516001600160a01b03161561235c5781516001600160a01b0316612308611ee0565b6001600160a01b03161461235c576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b611814565b81516001600160a01b0316612374611ee0565b6001600160a01b03161461181457600061238d83612bad565b90506123a583600001516001600160a01b0316612a10565b156124e1578251630b135d3f60e11b906001600160a01b0316631626ba7e6123cc84612c9d565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561241f578181015183820152602001612407565b50505050905090810190601f16801561244c5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561246a57600080fd5b505afa15801561247e573d6000803e3d6000fd5b505050506040513d602081101561249457600080fd5b50516001600160e01b031916146124dc5760405162461bcd60e51b815260040180806020018281038252602b81526020018061598b602b913960400191505060405180910390fd5b6111d4565b82516001600160a01b03166124ff836124f984612c9d565b90612ca7565b6001600160a01b0316146125445760405162461bcd60e51b81526004018080602001828103825260228152602001806159696022913960400191505060405180910390fd5b82516001600160a01b03166111d4576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b612593614781565b61259b614781565b6020840151516060840151516125b19190612d27565b80519092506001600160e01b0319166125dc5760405162461bcd60e51b81526004016113b9906156a1565b6060840151516020840151516125f29190612d27565b80519091506001600160e01b03191661261d5760405162461bcd60e51b81526004016113b9906156a1565b9250929050565b61262c614799565b612634614799565b61263c6147bc565b600061264786611eef565b9050600061265486611eef565b90506000612660611ee0565b88519091506001600160a01b031661267f576001600160a01b03811688525b86516001600160a01b031661269b576001600160a01b03811687525b6126a488612d67565b95506126af87612d67565b94506126c7888885858a604001518a60400151612e60565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b14156126f657506001611798565b6001600160e01b031982166355575f5d60e11b141561271757506002611798565b6001600160e01b031983166322ba176160e21b141561273857506001611798565b6001600160e01b031982166322ba176160e21b141561275957506002611798565b6001600160e01b0319831663025ceed960e61b141561277a57506001611798565b6001600160e01b0319821663025ceed960e61b141561279b57506002611798565b50600092915050565b825160209081015183519091015160018360028111156127c057fe5b14156128425760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b9091041691810191909152612812908690869061301b565b915061283d846000015160000151856000015160200151866080015188602001518860600151613295565b612913565b600283600281111561285057fe5b14156128cd5760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526128a2908590879061301b565b905061283d856000015160000151866000015160200151876080015187602001518960600151613295565b8451805160209182015160808801519287015160608901516128f0949190613295565b835180516020918201516080870151928801516060880151612913949190613295565b935093915050565b600082821115612972576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146129c3576040519150601f19603f3d011682016040523d82523d6000602084013e6129c8565b606091505b50509050806111d4576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff1680612a2f5750612a2f611a6a565b80612a3d575060005460ff16155b612a785760405162461bcd60e51b815260040180806020018281038252602e8152602001806159b6602e913960400191505060405180910390fd5b600054610100900460ff16158015612aa3576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca5580156111d4576000805461ff0019169055505050565b6000611eea613419565b600033301415612b3757600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506110659050565b503390565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b6101945490565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d8260000151612be2846020015161341d565b8460400151612bf4866060015161341d565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b60006121d061348d565b60008151604114612cff576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612d1d868285856134c8565b9695505050505050565b612d2f614781565b6000612d3b848461371e565b80519091506001600160e01b031916612d6057612d58838561371e565b915050611798565b9050611798565b612d6f614799565b60e08201516001600160e01b031916632611a13360e11b1415612dbb576000826101000151806020019051810190612da7919061506d565b805183526020908101519083015250612e47565b60e08201516001600160e01b0319166323d235ef60e01b1415612e13576000826101000151806020019051810190612df391906150f9565b805183526020808201519084015260409081015115159083015250612e47565b60e08201516001600160e01b03199081161415612e2f57612e47565b60405162461bcd60e51b81526004016113b990615633565b80515161164c578151612e599061393a565b8152919050565b612e686147bc565b6000612e788860800151876139d5565b90506000612e8a8860800151876139d5565b90506000612e9c8a8a85858a8a6139fa565b90508960200151602001516000141580612ebd575060608901516020015115155b15612ee0578051612ee05760405162461bcd60e51b81526004016113b9906155ac565b60608a015160200151151580612efc57506020808a0151015115155b15612f25576000816020015111612f255760405162461bcd60e51b81526004016113b9906155ac565b60808a015115612f78578515612f57578051612f4290849061173b565b600089815261012f6020526040902055612f78565b6020810151612f6790849061173b565b600089815261012f60205260409020555b608089015115612fcb578415612fad576020810151612f9890839061173b565b600088815261012f6020526040902055612fcb565b8051612fba90839061173b565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c45092613006928c928c9291906153c1565b60405180910390a19998505050505050505050565b6000613034846000015160200151838660400151613a89565b9050600061305e828660000151602001518760800151868960000151600001518a60600151613b36565b8551805186515160208089015193015160808a015160608b015195965061308c959394929387929190613b93565b905084604001515160011480156130a857508360400151516001145b80156130fd575084604001516000815181106130c057fe5b6020026020010151600001516001600160a01b031684604001516000815181106130e657fe5b6020026020010151600001516001600160a01b0316145b1561321357604080516001808252818301909252600091816020015b6131216147d6565b815260200190600190039081613119579050509050846040015160008151811061314757fe5b6020026020010151600001518160008151811061316057fe5b60209081029190910101516001600160a01b0390911690526040860151805160009061318857fe5b60200260200101516020015185604001516000815181106131a557fe5b60200260200101516020015101816000815181106131bf57fe5b6020026020010151602001906001600160601b031690816001600160601b03168152505061320986600001516000015183886000015160200151848a608001518b60600151613c98565b50915061326c9050565b61323d85600001516000015182876000015160200151886040015189608001518a60600151613c98565b50855180516020909101516040870151608089015160608a0151949550613268948693929190613c98565b5090505b61328d85600001516000015182876080015187602001518960600151613295565b509392505050565b60008251116132b65760405162461bcd60e51b81526004016113b9906154f8565b600084815b60018551038110156133855760006132fc8683815181106132d857fe5b6020026020010151602001516001600160601b031689613d4d90919063ffffffff16565b905061333186838151811061330d57fe5b6020026020010151602001516001600160601b03168561173b90919063ffffffff16565b9350801561337c57613343838261291b565b925061337c60405180604001604052808b8152602001838152508888858151811061336a57fe5b60200260200101516000015188613d65565b506001016132bb565b5060008460018651038151811061339857fe5b602002602001015190506133c281602001516001600160601b03168461173b90919063ffffffff16565b925082612710146133e55760405162461bcd60e51b81526004016113b99061566a565b811561340f5761340f60405180604001604052808a81526020018481525087836000015187613d65565b5050505050505050565b4690565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b0861344d8360000151612b3c565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b6000611eea7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6134bb61416d565b6134c3614173565b614179565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156135295760405162461bcd60e51b81526004018080602001828103825260228152602001806159476022913960400191505060405180910390fd5b6000601e8560ff161115613603576004850360ff16601b148061355257506004850360ff16601c145b61358d5760405162461bcd60e51b81526004018080602001828103825260228152602001806159e46022913960400191505060405180910390fd5b6001613598876141db565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156135f2573d6000803e3d6000fd5b5050506020604051035190506136ba565b8460ff16601b148061361857508460ff16601c145b6136535760405162461bcd60e51b81526004018080602001828103825260228152602001806159e46022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156136ad573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116613715576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b613726614781565b825182516001600160e01b031982166355575f5d60e11b1415613791576001600160e01b031981166355575f5d60e11b1415613766578492505050611798565b5050604080518082018252600080825282516020818101909452908152918101919091529050611798565b6001600160e01b031982166322ba176160e21b14156137d6576001600160e01b031981166322ba176160e21b1415613766576137cd858561422c565b92505050611798565b6001600160e01b031982166339d690a360e11b1415613812576001600160e01b031981166339d690a360e11b1415613766576137cd858561422c565b6001600160e01b0319821663025ceed960e61b141561384e576001600160e01b0319811663025ceed960e61b1415613766576137cd858561422c565b6001600160e01b031982166000908152606560205260409020546001600160a01b03168015613903576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb0906138a5908990899060040161575d565b60006040518083038186803b1580156138bd57600080fd5b505afa1580156138d1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138f99190810190614fe2565b9350505050611798565b6001600160e01b03198381169083161415613922576138f9868661422c565b60405162461bcd60e51b81526004016113b99061545c565b60408051600180825281830190925260609160009190816020015b61395d6147d6565b815260200190600190039081613955579050509050828160008151811061398057fe5b6020026020010151600001906001600160a01b031690816001600160a01b031681525050612710816000815181106139b457fe5b6020908102919091018101516001600160601b039092169101529050919050565b6000826139e457506000611798565b50600090815261012f6020526040902054919050565b613a026147bc565b600080613a10898887614289565b91509150600080613a228a8988614289565b9150915083811180613a32575083155b15613a5e57613a5384848c60200151602001518d6060015160200151614302565b945050505050612d1d565b613a7a8b60200151602001518c60600151602001518484614387565b9b9a5050505050505050505050565b602082015160009065ffffffffffff16815b8351811015613b1657612710848281518110613ab357fe5b6020026020010151602001516001600160601b03161115613ae65760405162461bcd60e51b81526004016113b990615604565b838181518110613af257fe5b6020026020010151602001516001600160601b031682019150806001019050613a9b565b50613b2b613b248683613d4d565b869061173b565b9150505b9392505050565b6000806000613b588989886040015189602001510165ffffffffffff1661440d565b90925090508015613b8757613b8760405180604001604052808781526020018381525088886000015187613d65565b50979650505050505050565b600080613b9f8861442f565b905080516001148015613bb3575086516001145b8015613c00575086600081518110613bc757fe5b6020026020010151600001516001600160a01b031681600081518110613be957fe5b6020026020010151600001516001600160a01b0316145b15613c515761138881600081518110613c1557fe5b6020026020010151602001516001600160601b03161115613c485760405162461bcd60e51b81526004016113b990615493565b85915050613c8d565b600080613c628b8989868a8a613c98565b91509150611388811115613c885760405162461bcd60e51b81526004016113b990615493565b509150505b979650505050505050565b846000805b8551811015613d4157613cd9868281518110613cb557fe5b6020026020010151602001516001600160601b03168361173b90919063ffffffff16565b91506000613d088489898581518110613cee57fe5b6020026020010151602001516001600160601b031661440d565b90945090508015613d3857613d3860405180604001604052808c8152602001838152508789858151811061336a57fe5b50600101613c9d565b50965096945050505050565b6000611795612710613d5f85856145a4565b906145fd565b8351516001600160e01b0319166339d690a360e11b1415613eab57600080856000015160200151806020019051810190613d9f9190614db4565b915091508560200151600114613dc75760405162461bcd60e51b81526004016113b990615580565b6001600160a01b038516301415613e3f57604051632142170760e11b81526001600160a01b038316906342842e0e90613e089030908890869060040161531a565b600060405180830381600087803b158015613e2257600080fd5b505af1158015613e36573d6000803e3d6000fd5b50505050613ea4565b604051637b84dc8360e11b81526001600160a01b0384169063f709b90690613e71908590899089908790600401615432565b600060405180830381600087803b158015613e8b57600080fd5b505af1158015613e9f573d6000803e3d6000fd5b505050505b5050610a15565b8351516001600160e01b0319166322ba176160e21b1415614009576000846000015160200151806020019051810190613ee49190614ba8565b90506001600160a01b038416301415613f9b57602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb91613f28918791600401615376565b602060405180830381600087803b158015613f4257600080fd5b505af1158015613f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f7a9190614f2a565b613f965760405162461bcd60e51b81526004016113b9906155d5565b614003565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c391613fd091859189918991600401615432565b600060405180830381600087803b158015613fea57600080fd5b505af1158015613ffe573d6000803e3d6000fd5b505050505b50610a15565b8351516001600160e01b03191663025ceed960e61b14156140c6576000808560000151602001518060200190518101906140439190614db4565b90925090506001600160a01b03851630141561408e576020860151604051637921219560e11b81526001600160a01b0384169163f242432a91613e089130918991879160040161533e565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee991613e719186918a918a918891906004016153ef565b8351516001600160e01b0319166355575f5d60e11b141561410f576001600160a01b038216301461410a57602084015161410a906001600160a01b03841690612978565b610a15565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf19061413f90879087908790600401615782565b600060405180830381600087803b15801561415957600080fd5b505af115801561340f573d6000803e3d6000fd5b60c95490565b60ca5490565b6000838383614186613419565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b614234614781565b6020808401518051908201208382015180519201919091208082141561425e578492505050611798565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b60008082156142c85760208086015101516142a4908561291b565b91506142c185606001516020015186602001516020015184614664565b9050612913565b6060850151602001516142db908561291b565b90506142f885602001516020015186606001516020015183614664565b9150935093915050565b61430a6147bc565b6000614317858585614664565b90508581111561436e576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b61438f6147bc565b600061439c838787614664565b9050838111156143f3576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b6000806144238561441e8686613d4d565b6146ca565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480614463575081516001600160e01b0319166339d690a360e11b145b156145195760008083602001518060200190518101906144839190614db4565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a906144ba9085908590600401615376565b600060405180830381600087803b1580156144d457600080fd5b505af11580156144e8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526145109190810190614ef8565b9250505061164c565b81516001600160e01b03191662737ea960e61b141561455a576000826020015180602001905181019061454c9190614bc4565b60800151925061164c915050565b81516001600160e01b03191663d8f960c160e01b141561459c576000826020015180602001905181019061458e9190614cc1565b60600151925061164c915050565b506060919050565b6000826145b357506000611798565b828202828482816145c057fe5b04146117955760405162461bcd60e51b8152600401808060200182810382526021815260200180615a066021913960400191505060405180910390fd5b6000808211614653576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161465c57fe5b049392505050565b60006146718484846146f2565b156146b4576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b6146c283613d5f86856145a4565b949350505050565b600080828411156146e9576146df848461291b565b915082905061261d565b50600093915050565b600082614739576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b811580614744575083155b1561475157506000613b2f565b6000838061475b57fe5b858409905061476a85846145a4565b614776826103e86145a4565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b803561164c816158b2565b600082601f830112614808578081fd5b8151602061481d61481883615848565b615825565b82815281810190858301855b8581101561485257614840898684518b0101614981565b84529284019290840190600101614829565b5090979650505050505050565b600082601f83011261486f578081fd5b8151602061487f61481883615848565b8281528181019085830160408086028801850189101561489d578687fd5b865b8681101561490c5781838b0312156148b5578788fd5b81518281018181106001600160401b03821117156148cf57fe5b835283516148dc816158b2565b8152838701516001600160601b03811681146148f657898afd5b818801528552938501939181019160010161489f565b509198975050505050505050565b8051801515811461164c57600080fd5b803561164c816158c7565b600082601f830112614945578081fd5b813561495361481882615865565b818152846020838601011115614967578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112614991578081fd5b815161499f61481882615865565b8181528460208386010111156149b3578283fd5b6146c2826020830160208701615886565b60006101e082840312156149d6578081fd5b50919050565b600060408083850312156149ee578182fd5b80518181016001600160401b038282108183111715614a0957fe5b818452829450853581811115614a1e57600080fd5b8601808803851315614a2f57600080fd5b608084018381108382111715614a4157fe5b909452833593614a50856158c7565b93825260208401359381851115614a6657600080fd5b614a7288868301614935565b60608501525050815260209384013593019290925292915050565b6000610120808385031215614aa0578182fd5b614aa981615825565b915050614ab5826147ed565b815260208201356001600160401b0380821115614ad157600080fd5b614add858386016149dc565b6020840152614aee604085016147ed565b60408401526060840135915080821115614b0757600080fd5b614b13858386016149dc565b60608401526080840135608084015260a084013560a084015260c084013560c0840152614b4260e0850161492a565b60e084015261010091508184013581811115614b5d57600080fd5b614b6986828701614935565b8385015250505092915050565b803565ffffffffffff8116811461164c57600080fd5b600060208284031215614b9d578081fd5b8135611795816158b2565b600060208284031215614bb9578081fd5b8151611795816158b2565b60008060408385031215614bd6578081fd5b8251614be1816158b2565b60208401519092506001600160401b0380821115614bfd578283fd5b9084019060c08287031215614c10578283fd5b614c1a60c0615825565b82518152602083015182811115614c2f578485fd5b614c3b88828601614981565b60208301525060408301516040820152606083015182811115614c5c578485fd5b614c688882860161485f565b606083015250608083015182811115614c7f578485fd5b614c8b8882860161485f565b60808301525060a083015182811115614ca2578485fd5b614cae888286016147f8565b60a0830152508093505050509250929050565b60008060408385031215614cd3578182fd5b8251614cde816158b2565b60208401519092506001600160401b0380821115614cfa578283fd5b9084019060a08287031215614d0d578283fd5b614d1760a0615825565b82518152602083015182811115614d2c578485fd5b614d3888828601614981565b602083015250604083015182811115614d4f578485fd5b614d5b8882860161485f565b604083015250606083015182811115614d72578485fd5b614d7e8882860161485f565b606083015250608083015182811115614d95578485fd5b614da1888286016147f8565b6080830152508093505050509250929050565b60008060408385031215614dc6578182fd5b8251614dd1816158b2565b6020939093015192949293505050565b600080600080600060a08688031215614df8578081fd5b8535614e03816158b2565b94506020860135614e13816158b2565b9350604086013592506060860135614e2a816158b2565b91506080860135614e3a816158b2565b809150509295509295909350565b600080600080600060a08688031215614e5f578283fd5b8535614e6a816158b2565b945060208601356001600160401b03811115614e84578384fd5b614e9088828901614935565b9450506040860135925060608601359150608086013560ff81168114614e3a578182fd5b600080600060608486031215614ec8578081fd5b8335614ed3816158b2565b9250614ee160208501614b76565b9150614eef60408501614b76565b90509250925092565b600060208284031215614f09578081fd5b81516001600160401b03811115614f1e578182fd5b6146c28482850161485f565b600060208284031215614f3b578081fd5b6117958261491a565b600060208284031215614f55578081fd5b5035919050565b600060208284031215614f6d578081fd5b8135611795816158c7565b60008060408385031215614f8a578182fd5b8235614f95816158c7565b91506020830135614fa5816158b2565b809150509250929050565b600060208284031215614fc1578081fd5b81356001600160401b03811115614fd6578182fd5b6146c2848285016149c4565b600060208284031215614ff3578081fd5b81516001600160401b0380821115615009578283fd5b908301906040828603121561501c578283fd5b60405160408101818110838211171561503157fe5b604052825161503f816158c7565b8152602083015182811115615052578485fd5b61505e87828601614981565b60208301525095945050505050565b60006020828403121561507e578081fd5b81516001600160401b0380821115615094578283fd5b90830190604082860312156150a7578283fd5b6040516040810181811083821117156150bc57fe5b6040528251828111156150cd578485fd5b6150d98782860161485f565b8252506020830151828111156150ed578485fd5b61505e8782860161485f565b60006020828403121561510a578081fd5b81516001600160401b0380821115615120578283fd5b9083019060608286031215615133578283fd5b60405160608101818110838211171561514857fe5b604052825182811115615159578485fd5b6151658782860161485f565b825250602083015182811115615179578485fd5b6151858782860161485f565b6020830152506151976040840161491a565b604082015295945050505050565b6000602082840312156151b6578081fd5b81356001600160401b038111156151cb578182fd5b6146c284828501614a8d565b600080600080608085870312156151ec578182fd5b84356001600160401b0380821115615202578384fd5b61520e88838901614a8d565b95506020870135915080821115615223578384fd5b61522f88838901614935565b94506040870135915080821115615244578384fd5b61525088838901614a8d565b93506060870135915080821115615265578283fd5b5061527287828801614935565b91505092959194509250565b60006020828403121561528f578081fd5b61179582614b76565b600081518084526152b0816020860160208601615886565b601f01601f19169290920160200192915050565b600063ffffffff60e01b82511683526020820151604060208501526146c26040850182615298565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b6000602082526117956020830184615298565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b60006040825261577060408301856152c4565b8281036020840152613b2b81856152c4565b60006060825284516040606084015261579e60a08401826152c4565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e198436030181126157f7578283fd5b8301803591506001600160401b03821115615810578283fd5b60200191503681900382131561261d57600080fd5b6040518181016001600160401b038111828210171561584057fe5b604052919050565b60006001600160401b0382111561585b57fe5b5060209081020190565b60006001600160401b0382111561587857fe5b50601f01601f191660200190565b60005b838110156158a1578181015183820152602001615889565b83811115610a155750506000910152565b6001600160a01b0381168114611b1a57600080fd5b6001600160e01b031981168114611b1a57600080fdfe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368a2646970667358221220f93b403b7e6a7e20288f6de2d316a86611df0ef6231729a32a7d66db602be04464736f6c63430007060033", - "devdoc": { - "kind": "dev", - "methods": { - "directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))": { - "details": "function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction", - "params": { - "direct": "struct with parameters for accept bid operation" - } - }, - "directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))": { - "details": "function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction" - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 739, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 742, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 4256, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 10, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address" - }, - { - "astId": 129, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage" - }, - { - "astId": 11953, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "matchers", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_bytes4,t_address)" - }, - { - "astId": 12199, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "__gap", - "offset": 0, - "slot": "102", - "type": "t_array(t_uint256)49_storage" - }, - { - "astId": 31255, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "proxies", - "offset": 0, - "slot": "151", - "type": "t_mapping(t_bytes4,t_address)" - }, - { - "astId": 31552, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "__gap", - "offset": 0, - "slot": "152", - "type": "t_array(t_uint256)49_storage" - }, - { - "astId": 138, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "_HASHED_NAME", - "offset": 0, - "slot": "201", - "type": "t_bytes32" - }, - { - "astId": 140, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "_HASHED_VERSION", - "offset": 0, - "slot": "202", - "type": "t_bytes32" - }, - { - "astId": 289, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "__gap", - "offset": 0, - "slot": "203", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 13421, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "__gap", - "offset": 0, - "slot": "253", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 12353, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "fills", - "offset": 0, - "slot": "303", - "type": "t_mapping(t_bytes32,t_uint256)" - }, - { - "astId": 13285, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "__gap", - "offset": 0, - "slot": "304", - "type": "t_array(t_uint256)49_storage" - }, - { - "astId": 30182, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "protocolFee", - "offset": 0, - "slot": "353", - "type": "t_struct(ProtocolFeeData)30218_storage" - }, - { - "astId": 30184, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "royaltiesRegistry", - "offset": 0, - "slot": "354", - "type": "t_contract(IRoyaltiesProvider)11922" - }, - { - "astId": 30186, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "defaultFeeReceiver", - "offset": 0, - "slot": "355", - "type": "t_address" - }, - { - "astId": 30190, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "feeReceivers", - "offset": 0, - "slot": "356", - "type": "t_mapping(t_address,t_address)" - }, - { - "astId": 31231, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "__gap", - "offset": 0, - "slot": "357", - "type": "t_array(t_uint256)46_storage" - }, - { - "astId": 19246, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "nonces", - "offset": 0, - "slot": "403", - "type": "t_mapping(t_address,t_uint256)" - }, - { - "astId": 19248, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "domainSeparator", - "offset": 0, - "slot": "404", - "type": "t_bytes32" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)46_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[46]", - "numberOfBytes": "1472" - }, - "t_array(t_uint256)49_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes32": { - "encoding": "inplace", - "label": "bytes32", - "numberOfBytes": "32" - }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" - }, - "t_contract(IRoyaltiesProvider)11922": { - "encoding": "inplace", - "label": "contract IRoyaltiesProvider", - "numberOfBytes": "20" - }, - "t_mapping(t_address,t_address)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_mapping(t_address,t_uint256)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "encoding": "mapping", - "key": "t_bytes32", - "label": "mapping(bytes32 => uint256)", - "numberOfBytes": "32", - "value": "t_uint256" - }, - "t_mapping(t_bytes4,t_address)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => address)", - "numberOfBytes": "32", - "value": "t_address" - }, - "t_struct(ProtocolFeeData)30218_storage": { - "encoding": "inplace", - "label": "struct RaribleTransferManager.ProtocolFeeData", - "members": [ - { - "astId": 30213, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "receiver", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 30215, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "buyerAmount", - "offset": 20, - "slot": "0", - "type": "t_uint48" - }, - { - "astId": 30217, - "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", - "label": "sellerAmount", - "offset": 26, - "slot": "0", - "type": "t_uint48" - } - ], - "numberOfBytes": "32" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - }, - "t_uint48": { - "encoding": "inplace", - "label": "uint48", - "numberOfBytes": "6" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/ExchangeMetaV2_Proxy.json b/projects/hardhat-deploy/deployments/polygon_mumbai/ExchangeMetaV2_Proxy.json deleted file mode 100644 index 5b51d9b03..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/ExchangeMetaV2_Proxy.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "address": "0x2Fc743F5419637B93dDAC159715B902186300041", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "admin_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./UpgradeableProxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _setAdmin(admin_);\\n }\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _admin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _admin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n require(newAdmin != address(0), \\\"TransparentUpgradeableProxy: new admin is the zero address\\\");\\n emit AdminChanged(_admin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address adm) {\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n adm := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n bytes32 slot = _ADMIN_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newAdmin)\\n }\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _admin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0xf852214ea286716082f3ba480ff70bda2cbe2d11238091d2a440767d0ed49e61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n *\\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\\n * {TransparentUpgradeableProxy}.\\n */\\ncontract UpgradeableProxy is Proxy {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) public payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _setImplementation(_logic);\\n if(_data.length > 0) {\\n Address.functionDelegateCall(_logic, _data);\\n }\\n }\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Upgrades the proxy to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal virtual {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableProxy: new implementation is not a contract\\\");\\n\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newImplementation)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x81af1059a5bd5fb25cb0351499e1d4110416f5b0000ffad6427cbf6088b193a4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405260405162000c7c38038062000c7c833981810160405260608110156200002957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200005557600080fd5b9083019060208201858111156200006b57600080fd5b82516401000000008111828201881017156200008657600080fd5b82525081516020918201929091019080838360005b83811015620000b55781810151838201526020016200009b565b50505050905090810190601f168015620000e35780820380516001836020036101000a031916815260200191505b5060405250849150829050620000f98262000137565b8051156200011a57620001188282620001ae60201b620003841760201c565b505b50620001239050565b6200012e82620001dd565b505050620003be565b6200014d816200020160201b620003b01760201c565b6200018a5760405162461bcd60e51b815260040180806020018281038252603681526020018062000c206036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6060620001d6838360405180606001604052806027815260200162000bf96027913962000207565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b6060620002148462000201565b620002515760405162461bcd60e51b815260040180806020018281038252602681526020018062000c566026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b60208310620002905780518252601f1990920191602091820191016200026f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620002f2576040519150601f19603f3d011682016040523d82523d6000602084013e620002f7565b606091505b5090925090506200030a82828662000314565b9695505050505050565b6060831562000325575081620001d6565b825115620003365782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200038257818101518382015260200162000368565b50505050905090810190601f168015620003b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b61082b80620003ce6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374", - "deployedBytecode": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033", - "devdoc": { - "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", - "events": { - "AdminChanged(address,address)": { - "details": "Emitted when the admin account has changed." - } - }, - "kind": "dev", - "methods": { - "admin()": { - "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" - }, - "changeAdmin(address)": { - "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." - }, - "constructor": { - "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}." - }, - "implementation()": { - "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" - }, - "upgradeTo(address)": { - "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." - } - }, - "stateVariables": { - "_ADMIN_SLOT": { - "details": "Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/RaribleExchangeWrapper.json b/projects/hardhat-deploy/deployments/polygon_mumbai/RaribleExchangeWrapper.json deleted file mode 100644 index a9f10f15d..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/RaribleExchangeWrapper.json +++ /dev/null @@ -1,629 +0,0 @@ -{ - "address": "0x042221c65AC6925fbc478dB5B746183f72377526", - "abi": [ - { - "inputs": [ - { - "internalType": "address[10]", - "name": "marketplaces", - "type": "address[10]" - }, - { - "internalType": "address", - "name": "_weth", - "type": "address" - }, - { - "internalType": "address[]", - "name": "transferProxies", - "type": "address[]" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "result", - "type": "bool" - } - ], - "name": "Execution", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bool", - "name": "paused", - "type": "bool" - } - ], - "name": "Paused", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "transferProxies", - "type": "address[]" - } - ], - "name": "approveWETH", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "blur", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "enum RaribleExchangeWrapper.Markets", - "name": "marketId", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "fees", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct RaribleExchangeWrapper.PurchaseDetails[]", - "name": "purchaseDetails", - "type": "tuple[]" - }, - { - "internalType": "address", - "name": "feeRecipientFirst", - "type": "address" - }, - { - "internalType": "address", - "name": "feeRecipientSecond", - "type": "address" - }, - { - "internalType": "bool", - "name": "allowFail", - "type": "bool" - } - ], - "name": "bulkPurchase", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "exchangeV2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "looksRare", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "looksRareV2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "", - "type": "uint256[]" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC1155BatchReceived", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC1155Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "onERC721Received", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bool", - "name": "_paused", - "type": "bool" - } - ], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "seaPort_1_1", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "seaPort_1_4", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "seaPort_1_5", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "enum RaribleExchangeWrapper.Markets", - "name": "marketId", - "type": "uint8" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "fees", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "internalType": "struct RaribleExchangeWrapper.PurchaseDetails", - "name": "purchaseDetails", - "type": "tuple" - }, - { - "internalType": "address", - "name": "feeRecipientFirst", - "type": "address" - }, - { - "internalType": "address", - "name": "feeRecipientSecond", - "type": "address" - } - ], - "name": "singlePurchase", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "sudoswap", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "weth", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "wyvernExchange", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "x2y2", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[10]\",\"name\":\"marketplaces\",\"type\":\"address[10]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":\"RaribleExchangeWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165 is IERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n constructor () internal {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Receiver.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\ncontract ERC1155Holder is ERC1155Receiver {\\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155BatchReceived.selector;\\n }\\n}\\n\",\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155Receiver.sol\\\";\\nimport \\\"../../introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\\n constructor() internal {\\n _registerInterface(\\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n}\\n\",\"keccak256\":\"0x57a0e246fb1c8f9cccf91c508eafe474e40260a31de3a39019ba8312cfdf9b2d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155Receiver is IERC165 {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC721Receiver.sol\\\";\\n\\n /**\\n * @dev Implementation of the {IERC721Receiver} interface.\\n *\\n * Accepts all token transfers. \\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\\n */\\ncontract ERC721Holder is IERC721Receiver {\\n\\n /**\\n * @dev See {IERC721Receiver-onERC721Received}.\\n *\\n * Always returns `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n}\\n\",\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3a89b0a6ff66280e8e48f9f2c862d5c0e8ab23ee306ae5b204cd588931661a93\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n}\\n\",\"keccak256\":\"0xa9d02b9e22ffb9d25f412979951822d56b05d857de1f47ce82ad7b4a8d4601f6\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n require(newFill.rightValue > 0 && newFill.leftValue > 0, \\\"nothing to fill\\\");\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3f48a34d89493d2c5799d4ebcb80d714de368f1470234b7539ad0a4296055241\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0x51b74eb51875062b862e2fe38d0294e22a764f9f5dd470fc1cfe433207b124cb\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill){\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x178b508b30b501b104be37d15c159a16b2823869bdb37a9227dc0c4f624eb3bc\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\\\";\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport \\\"./interfaces/IWyvernExchange.sol\\\";\\nimport \\\"./interfaces/IExchangeV2.sol\\\";\\nimport \\\"./interfaces/ISeaPort.sol\\\";\\nimport \\\"./interfaces/Ix2y2.sol\\\";\\nimport \\\"./interfaces/ILooksRare.sol\\\";\\nimport \\\"./interfaces/IBlur.sol\\\";\\n\\nimport \\\"./libraries/IsPausable.sol\\\";\\n\\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\\n using LibTransfer for address;\\n using BpLibrary for uint;\\n using SafeMath for uint;\\n\\n //marketplaces\\n address public immutable wyvernExchange;\\n address public immutable exchangeV2;\\n address public immutable seaPort_1_1;\\n address public immutable x2y2;\\n address public immutable looksRare;\\n address public immutable sudoswap;\\n address public immutable seaPort_1_4;\\n address public immutable looksRareV2;\\n address public immutable blur;\\n address public immutable seaPort_1_5;\\n\\n //currencties\\n address public immutable weth;\\n\\n //constants\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n event Execution(bool result);\\n\\n enum Markets {\\n ExchangeV2,\\n WyvernExchange,\\n SeaPort_1_1,\\n X2Y2,\\n LooksRareOrders,\\n SudoSwap,\\n SeaPort_1_4,\\n LooksRareV2,\\n Blur,\\n SeaPort_1_5\\n }\\n\\n enum AdditionalDataTypes {\\n NoAdditionalData,\\n RoyaltiesAdditionalData\\n }\\n\\n enum Currencies {\\n ETH,\\n WETH\\n }\\n\\n /**\\n @notice struct for the purchase data\\n @param marketId - market key from Markets enum (what market to use)\\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\\n bytes (27,28) used for dataType\\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\\n @param data - data for market call\\n */\\n struct PurchaseDetails {\\n Markets marketId;\\n uint256 amount;\\n uint fees;\\n bytes data;\\n }\\n\\n /**\\n @notice struct for the data with additional Ddta\\n @param data - data for market call\\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\\n */\\n struct AdditionalData {\\n bytes data;\\n uint[] additionalRoyalties;\\n }\\n\\n constructor(\\n address[10] memory marketplaces,\\n //address _wyvernExchange, 0\\n //address _exchangeV2, 1\\n //address _seaPort_1_1, 2\\n //address _x2y2, 3\\n //address _looksRare, 4\\n //address _sudoswap, 5\\n //address _seaPort_1_4, 6\\n //address _looksRareV2, 7\\n //address _blur, 8\\n //address _seaPort_1_5, 9\\n address _weth,\\n address[] memory transferProxies\\n ) {\\n wyvernExchange = marketplaces[0];\\n exchangeV2 = marketplaces[1];\\n seaPort_1_1 = marketplaces[2];\\n x2y2 = marketplaces[3];\\n looksRare = marketplaces[4];\\n sudoswap = marketplaces[5];\\n seaPort_1_4 = marketplaces[6];\\n looksRareV2 = marketplaces[7];\\n blur = marketplaces[8];\\n seaPort_1_5 = marketplaces[9];\\n\\n weth = _weth;\\n\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n if (_weth != address(0)){\\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n }\\n\\n /**\\n @notice executes a single purchase\\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n */\\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\\n requireNotPaused();\\n \\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\\n \\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n Currencies currency = getCurrency(purchaseDetails.fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n emit Execution(success);\\n \\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes an array of purchases\\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\\n */\\n \\n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\\n requireNotPaused();\\n\\n uint sumFirstFeesETH = 0;\\n uint sumSecondFeesETH = 0;\\n uint sumFirstFeesWETH = 0;\\n uint sumSecondFeesWETH = 0;\\n bool result = false;\\n\\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = 0;\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\\n }\\n\\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n Currencies currency = getCurrency(purchaseDetails[i].fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n result = result || success;\\n emit Execution(success);\\n }\\n\\n require(result, \\\"no successful executions\\\");\\n\\n //pay fees in ETH \\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\\n\\n //pay fees in WETH\\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\\n\\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes one purchase in ETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n uint paymentAmount = purchaseDetails.amount;\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase wyvernExchange failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\\n\\n if (allowFail) {\\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n Ix2y2(x2y2).run{value : paymentAmount}(input);\\n }\\n\\n //for every element in input.details[] getting\\n // order = input.details[i].orderIdx\\n // and from that order getting item = input.details[i].itemId\\n for (uint i = 0; i < input.details.length; ++i) {\\n uint orderId = input.details[i].orderIdx;\\n uint itemId = input.details[i].itemIdx;\\n bytes memory data = input.orders[orderId].items[itemId].data;\\n {\\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\\n }\\n }\\n\\n // 1 = erc-721\\n if (input.orders[orderId].delegateType == 1) {\\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair721 memory p = pairs[j];\\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\\n }\\n } else if (input.orders[orderId].delegateType == 2) {\\n // 2 = erc-1155\\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair1155 memory p = pairs[j];\\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \\\"\\\");\\n }\\n } else {\\n revert(\\\"unknown delegateType x2y2\\\");\\n }\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\\n if (allowFail) {\\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase sudoswap failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase LooksRareV2 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.Blur){\\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\\n if (allowFail) {\\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId ETH\\\");\\n }\\n\\n //transferring royalties\\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\\n \\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice executes one purchase in WETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n\\n //buying\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed WETH\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId WETH\\\");\\n }\\n \\n //transfer royalties\\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\\n\\n //get fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice transfers ETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n LibTransfer.transferEth(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers WETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers change back to sender\\n */\\n function transferChange() internal {\\n uint ethAmount = address(this).balance;\\n if (ethAmount > 0) {\\n address(msg.sender).transferEth(ethAmount);\\n }\\n }\\n\\n /**\\n @notice transfers weth change back to sender\\n */\\n function transferChangeWETH() internal {\\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\\n if (wethAmount > 0) {\\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\\n }\\n }\\n\\n /**\\n @notice parses fees in base points from one uint and calculates real amount of fees\\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\\n @param amount price of the order\\n @return firstFeeAmount real amount for the first fee\\n @return secondFeeAmount real amount for the second fee\\n */\\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\\n uint firstFee = uint(uint16(fees >> 16));\\n uint secondFee = uint(uint16(fees));\\n return (amount.bp(firstFee), amount.bp(secondFee));\\n }\\n\\n /**\\n @notice parses \\\"fees\\\" field to find the currency for the purchase\\n @param fees field with encoded data\\n @return 0 if ETH, 1 if WETH ERC-20\\n */\\n function getCurrency(uint fees) internal pure returns(Currencies) {\\n return Currencies(uint16(fees >> 48));\\n }\\n\\n\\n /**\\n @notice parses _data to data for market call and additionalData\\n @param feesAndDataType 27 and 28 bytes for dataType\\n @return marketData data for market call\\n @return additionalRoyalties array uint256, (base point + address)\\n */\\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\\n uint[] memory additionalRoyalties;\\n\\n //return no royalties if wrong data type\\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\\n return (_data, additionalRoyalties);\\n }\\n\\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\\n\\n //return no royalties if market doesn't support royalties\\n if (supportsRoyalties(marketId)) {\\n return (additionalData.data, additionalData.additionalRoyalties);\\n } else {\\n return (additionalData.data, additionalRoyalties);\\n } \\n }\\n \\n revert(\\\"unknown additionalDataType\\\");\\n }\\n\\n /**\\n @notice transfer additional royalties in ETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeETH(value, account);\\n }\\n }\\n }\\n\\n /**\\n @notice transfer additional royalties in WETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeWETH(value, account);\\n }\\n }\\n }\\n\\n // modifies `src`\\n function _arrayReplace(\\n bytes memory src,\\n bytes memory replacement,\\n bytes memory mask\\n ) internal view virtual {\\n require(src.length == replacement.length);\\n require(src.length == mask.length);\\n\\n for (uint256 i = 0; i < src.length; ++i) {\\n if (mask[i] != 0) {\\n src[i] = replacement[i];\\n }\\n }\\n }\\n\\n /**\\n @notice returns true if this contract supports additional royalties for the marketplace;\\n now royalties are supported for:\\n 1. SudoSwap\\n 2. LooksRare old\\n 3. LooksRare V2\\n */\\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\\n if (\\n marketId == Markets.SudoSwap ||\\n marketId == Markets.LooksRareOrders ||\\n marketId == Markets.LooksRareV2\\n ) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\\n uint result = 0;\\n\\n Currencies currency = getCurrency(detail.fees);\\n\\n //for every purchase with WETH we sum amount, fees and royalties needed\\n if (currency == Currencies.WETH) {\\n\\n //add amount\\n result = result + detail.amount;\\n\\n //add fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\\n result = result + firstFeeAmount + secondFeeAmount;\\n\\n //add royalties\\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\\n for (uint j = 0; j < royalties.length; ++j) {\\n uint royaltyBasePoint = uint(royalties[j] >> 160);\\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\\n result = result + royaltyValue;\\n }\\n }\\n\\n return result;\\n }\\n\\n /**\\n @notice approves weth for a list of the addresses\\n @param transferProxies - array of addresses to approve WETH for\\n */\\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n receive() external payable {}\\n}\",\"keccak256\":\"0xeab6e5c7ffdbfc05eb128b8b75ff03a37d85b1e8eb4b4c0ede7311106c1259c1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\n\\ninterface IBlur {\\n enum Side { Buy, Sell }\\n enum SignatureVersion { Single, Bulk }\\n enum AssetType { ERC721, ERC1155 }\\n\\n struct Fee {\\n uint16 rate;\\n address payable recipient;\\n }\\n \\n struct Order {\\n address trader;\\n Side side;\\n address matchingPolicy;\\n address collection;\\n uint256 tokenId;\\n uint256 amount;\\n address paymentToken;\\n uint256 price;\\n uint256 listingTime;\\n /* Order expiration timestamp - 0 for oracle cancellations. */\\n uint256 expirationTime;\\n Fee[] fees;\\n uint256 salt;\\n bytes extraParams;\\n }\\n\\n struct Input {\\n Order order;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n bytes extraSignature;\\n SignatureVersion signatureVersion;\\n uint256 blockNumber;\\n }\\n\\n function execute(Input calldata sell, Input calldata buy)\\n external\\n payable;\\n}\\n\",\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-v2/contracts/ExchangeV2.sol\\\";\\n\\nimport {RoyaltiesRegistry} from \\\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\\\";\\nimport {TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\\\";\\nimport {ERC20TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\\\";\\n\\ninterface IExchangeV2 {\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable;\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable;\\n}\",\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibLooksRare.sol\\\";\\n\\ninterface ILooksRare {\\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\\n\\n /**\\n * @notice This function allows a user to execute a taker bid (against a maker ask).\\n * @param takerBid Taker bid struct\\n * @param makerAsk Maker ask struct\\n * @param makerSignature Maker signature\\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\\n * @param affiliate Affiliate address\\n */\\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\\n}\\n\",\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibSeaPort.sol\\\";\\n\\ninterface ISeaPort {\\n function fulfillAdvancedOrder(\\n LibSeaPort.AdvancedOrder calldata advancedOrder,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n bytes32 fulfillerConduitKey,\\n address recipient\\n ) external payable returns (bool fulfilled);\\n\\n function fulfillAvailableAdvancedOrders(\\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\\n bytes32 fulfillerConduitKey,\\n address recipient,\\n uint256 maximumFulfilled\\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\\n\\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\\n external\\n payable\\n returns (bool fulfilled);\\n}\",\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface IWyvernExchange {\\n function atomicMatch_(\\n address[14] memory addrs,\\n uint[18] memory uints,\\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\\n bytes memory calldataBuy,\\n bytes memory calldataSell,\\n bytes memory replacementPatternBuy,\\n bytes memory replacementPatternSell,\\n bytes memory staticExtradataBuy,\\n bytes memory staticExtradataSell,\\n uint8[2] memory vs,\\n bytes32[5] memory rssMetadata)\\n external\\n payable;\\n\\n enum Side {\\n Buy,\\n Sell\\n }\\n\\n enum SaleKind {\\n FixedPrice,\\n DutchAuction\\n }\\n\\n function calculateFinalPrice(\\n Side side,\\n SaleKind saleKind,\\n uint256 basePrice,\\n uint256 extra,\\n uint256 listingTime,\\n uint256 expirationTime\\n ) external view returns (uint256);\\n}\",\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface Ix2y2 {\\n\\n struct OrderItem {\\n uint256 price;\\n bytes data;\\n }\\n\\n struct Pair721 {\\n address token;\\n uint256 tokenId;\\n }\\n\\n struct Pair1155 {\\n address token;\\n uint256 tokenId;\\n uint256 amount;\\n }\\n\\n struct Order {\\n uint256 salt;\\n address user;\\n uint256 network;\\n uint256 intent;\\n uint256 delegateType;\\n uint256 deadline;\\n address currency;\\n bytes dataMask;\\n OrderItem[] items;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n uint8 signVersion;\\n }\\n\\n struct Fee {\\n uint256 percentage;\\n address to;\\n }\\n\\n struct SettleDetail {\\n Op op;\\n uint256 orderIdx;\\n uint256 itemIdx;\\n uint256 price;\\n bytes32 itemHash;\\n address executionDelegate;\\n bytes dataReplacement;\\n uint256 bidIncentivePct;\\n uint256 aucMinIncrementPct;\\n uint256 aucIncDurationSecs;\\n Fee[] fees;\\n }\\n\\n struct SettleShared {\\n uint256 salt;\\n uint256 deadline;\\n uint256 amountToEth;\\n uint256 amountToWeth;\\n address user;\\n bool canFail;\\n }\\n\\n struct RunInput {\\n Order[] orders;\\n SettleDetail[] details;\\n SettleShared shared;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n }\\n\\n enum Op {\\n INVALID,\\n // off-chain\\n COMPLETE_SELL_OFFER,\\n COMPLETE_BUY_OFFER,\\n CANCEL_OFFER,\\n // auction\\n BID,\\n COMPLETE_AUCTION,\\n REFUND_AUCTION,\\n REFUND_AUCTION_STUCK_ITEM\\n }\\n\\n function run(RunInput memory input) external payable;\\n}\",\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nabstract contract IsPausable is Ownable {\\n bool public paused;\\n\\n event Paused(bool paused);\\n\\n function pause(bool _paused) external onlyOwner {\\n paused = _paused;\\n emit Paused(_paused);\\n }\\n\\n function requireNotPaused() internal view {\\n require (!paused, \\\"the contract is paused\\\");\\n }\\n\\n}\\n\",\"keccak256\":\"0xd0ea1d6838dd79b8cfe64e777e4f84456928f0e3621fbb6acd00492e738b2b61\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibLooksRare {\\n struct MakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address signer; // signer of the maker order\\n address collection; // collection address\\n uint256 price; // price (used as )\\n uint256 tokenId; // id of the token\\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\\n address currency; // currency (e.g., WETH)\\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\\n uint256 startTime; // startTime in timestamp\\n uint256 endTime; // endTime in timestamp\\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // additional parameters\\n uint8 v; // v: parameter (27 or 28)\\n bytes32 r; // r: parameter\\n bytes32 s; // s: parameter\\n }\\n\\n struct TakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address taker; // msg.sender\\n uint256 price; // final price for the purchase\\n uint256 tokenId;\\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // other params (e.g., tokenId)\\n }\\n\\n /**\\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\\n */\\n enum CollectionType {\\n ERC721,\\n ERC1155\\n }\\n\\n /**\\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\\n */\\n enum QuoteType {\\n Bid,\\n Ask\\n }\\n /**\\n * 1. Maker struct\\n */\\n\\n /**\\n * @notice Maker is the struct for a maker order.\\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\\n * @param globalNonce Global user order nonce for maker orders\\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\\n * @param strategyId Strategy id\\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\\n * @param collection Collection address\\n * @param currency Currency address (@dev address(0) = ETH)\\n * @param signer Signer address\\n * @param startTime Start timestamp\\n * @param endTime End timestamp\\n * @param price Minimum price for maker ask, maximum price for maker bid\\n * @param itemIds Array of itemIds\\n * @param amounts Array of amounts\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Maker {\\n QuoteType quoteType;\\n uint256 globalNonce;\\n uint256 subsetNonce;\\n uint256 orderNonce;\\n uint256 strategyId;\\n CollectionType collectionType;\\n address collection;\\n address currency;\\n address signer;\\n uint256 startTime;\\n uint256 endTime;\\n uint256 price;\\n uint256[] itemIds;\\n uint256[] amounts;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 2. Taker struct\\n */\\n\\n /**\\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Taker {\\n address recipient;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 3. Merkle tree struct\\n */\\n\\n enum MerkleTreeNodePosition {\\n Left,\\n Right\\n }\\n\\n /**\\n * @notice MerkleTreeNode is a MerkleTree's node.\\n * @param value It can be an order hash or a proof\\n * @param position The node's position in its branch.\\n * It can be left or right or none\\n * (before the tree is sorted).\\n */\\n struct MerkleTreeNode {\\n bytes32 value;\\n MerkleTreeNodePosition position;\\n }\\n\\n /**\\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\\n * @dev A Merkle tree can be computed with order hashes.\\n * It can contain order hashes from both maker bid and maker ask structs.\\n * @param root Merkle root\\n * @param proof Array containing the merkle proof\\n */\\n struct MerkleTree {\\n bytes32 root;\\n MerkleTreeNode[] proof;\\n }\\n}\\n\",\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibSeaPort {\\n /**\\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\\n * matching, a group of six functions may be called that only requires a\\n * subset of the usual order arguments. Note the use of a \\\"basicOrderType\\\"\\n * enum; this represents both the usual order type as well as the \\\"route\\\"\\n * of the basic order (a simple derivation function for the basic order\\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\\n */\\n struct BasicOrderParameters {\\n address considerationToken; // 0x24\\n uint256 considerationIdentifier; // 0x44\\n uint256 considerationAmount; // 0x64\\n address payable offerer; // 0x84\\n address zone; // 0xa4\\n address offerToken; // 0xc4\\n uint256 offerIdentifier; // 0xe4\\n uint256 offerAmount; // 0x104\\n BasicOrderType basicOrderType; // 0x124\\n uint256 startTime; // 0x144\\n uint256 endTime; // 0x164\\n bytes32 zoneHash; // 0x184\\n uint256 salt; // 0x1a4\\n bytes32 offererConduitKey; // 0x1c4\\n bytes32 fulfillerConduitKey; // 0x1e4\\n uint256 totalOriginalAdditionalRecipients; // 0x204\\n AdditionalRecipient[] additionalRecipients; // 0x224\\n bytes signature; // 0x244\\n }\\n /**\\n * @dev Basic orders can supply any number of additional recipients, with the\\n * implied assumption that they are supplied from the offered ETH (or other\\n * native token) or ERC20 token for the order.\\n */\\n struct AdditionalRecipient {\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum BasicOrderType {\\n // 0: no partial fills, anyone can execute\\n ETH_TO_ERC721_FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n ETH_TO_ERC721_PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC721_FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 4: no partial fills, anyone can execute\\n ETH_TO_ERC1155_FULL_OPEN,\\n\\n // 5: partial fills supported, anyone can execute\\n ETH_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 6: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 7: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 8: no partial fills, anyone can execute\\n ERC20_TO_ERC721_FULL_OPEN,\\n\\n // 9: partial fills supported, anyone can execute\\n ERC20_TO_ERC721_PARTIAL_OPEN,\\n\\n // 10: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC721_FULL_RESTRICTED,\\n\\n // 11: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 12: no partial fills, anyone can execute\\n ERC20_TO_ERC1155_FULL_OPEN,\\n\\n // 13: partial fills supported, anyone can execute\\n ERC20_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 14: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 15: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 16: no partial fills, anyone can execute\\n ERC721_TO_ERC20_FULL_OPEN,\\n\\n // 17: partial fills supported, anyone can execute\\n ERC721_TO_ERC20_PARTIAL_OPEN,\\n\\n // 18: no partial fills, only offerer or zone can execute\\n ERC721_TO_ERC20_FULL_RESTRICTED,\\n\\n // 19: partial fills supported, only offerer or zone can execute\\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\\n\\n // 20: no partial fills, anyone can execute\\n ERC1155_TO_ERC20_FULL_OPEN,\\n\\n // 21: partial fills supported, anyone can execute\\n ERC1155_TO_ERC20_PARTIAL_OPEN,\\n\\n // 22: no partial fills, only offerer or zone can execute\\n ERC1155_TO_ERC20_FULL_RESTRICTED,\\n\\n // 23: partial fills supported, only offerer or zone can execute\\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\\n }\\n\\n /**\\n * @dev The full set of order components, with the exception of the counter,\\n * must be supplied when fulfilling more sophisticated orders or groups of\\n * orders. The total number of original consideration items must also be\\n * supplied, as the caller may specify additional consideration items.\\n */\\n struct OrderParameters {\\n address offerer; // 0x00\\n address zone; // 0x20\\n OfferItem[] offer; // 0x40\\n ConsiderationItem[] consideration; // 0x60\\n OrderType orderType; // 0x80\\n uint256 startTime; // 0xa0\\n uint256 endTime; // 0xc0\\n bytes32 zoneHash; // 0xe0\\n uint256 salt; // 0x100\\n bytes32 conduitKey; // 0x120\\n uint256 totalOriginalConsiderationItems; // 0x140\\n // offer.length // 0x160\\n }\\n\\n /**\\n * @dev Orders require a signature in addition to the other order parameters.\\n */\\n struct Order {\\n OrderParameters parameters;\\n bytes signature;\\n }\\n\\n struct AdvancedOrder {\\n OrderParameters parameters;\\n uint120 numerator;\\n uint120 denominator;\\n bytes signature;\\n bytes extraData;\\n }\\n\\n struct OfferItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n }\\n\\n /**\\n * @dev A consideration item has the same five components as an offer item and\\n * an additional sixth component designating the required recipient of the\\n * item.\\n */\\n struct ConsiderationItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum OrderType {\\n // 0: no partial fills, anyone can execute\\n FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n PARTIAL_RESTRICTED\\n }\\n\\n // prettier-ignore\\n enum ItemType {\\n // 0: ETH on mainnet, MATIC on polygon, etc.\\n NATIVE,\\n\\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\\n ERC20,\\n\\n // 2: ERC721 items\\n ERC721,\\n\\n // 3: ERC1155 items\\n ERC1155,\\n\\n // 4: ERC721 items where a number of tokenIds are supported\\n ERC721_WITH_CRITERIA,\\n\\n // 5: ERC1155 items where a number of ids are supported\\n ERC1155_WITH_CRITERIA\\n }\\n\\n /**\\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\\n * offer and consideration items, then generates a single execution\\n * element. A given fulfillment can be applied to as many offer and\\n * consideration items as desired, but must contain at least one offer and\\n * at least one consideration that match. The fulfillment must also remain\\n * consistent on all key parameters across all offer items (same offerer,\\n * token, type, tokenId, and conduit preference) as well as across all\\n * consideration items (token, type, tokenId, and recipient).\\n */\\n struct Fulfillment {\\n FulfillmentComponent[] offerComponents;\\n FulfillmentComponent[] considerationComponents;\\n }\\n\\n /**\\n * @dev Each fulfillment component contains one index referencing a specific\\n * order and another referencing a specific offer or consideration item.\\n */\\n struct FulfillmentComponent {\\n uint256 orderIndex;\\n uint256 itemIndex;\\n }\\n\\n /**\\n * @dev An execution is triggered once all consideration items have been zeroed\\n * out. It sends the item in question from the offerer to the item's\\n * recipient, optionally sourcing approvals from either this contract\\n * directly or from the offerer's chosen conduit if one is specified. An\\n * execution is not provided as an argument, but rather is derived via\\n * orders, criteria resolvers, and fulfillments (where the total number of\\n * executions will be less than or equal to the total number of indicated\\n * fulfillments) and returned as part of `matchOrders`.\\n */\\n struct Execution {\\n ReceivedItem item;\\n address offerer;\\n bytes32 conduitKey;\\n }\\n\\n /**\\n * @dev A received item is translated from a utilized consideration item and has\\n * the same four components as a spent item, as well as an additional fifth\\n * component designating the required recipient of the item.\\n */\\n struct ReceivedItem {\\n ItemType itemType;\\n address token;\\n uint256 identifier;\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n struct CriteriaResolver {\\n uint256 orderIndex;\\n Side side;\\n uint256 index;\\n uint256 identifier;\\n bytes32[] criteriaProof;\\n }\\n\\n // prettier-ignore\\n enum Side {\\n // 0: Items that can be spent\\n OFFER,\\n\\n // 1: Items that must be received\\n CONSIDERATION\\n }\\n}\\n\",\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x7f99c2e0828bbba57e1599d92f1368b62ef0e9cd62bda3c4091e108d1fbc35b6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x5e982ad688493d9c729757c2ebd98efecd0bf3b33992f7342edf6c349874b86c\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x363fa1f25a41aa7d7b3fb9e2d182dec04c3774d06d9eed428b3fe48140fa4b7e\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x87cd179c900495ee44c1b9c7fa57f4da0228217d78792bd6d6a6fde6c32be2b2\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x6101e06040523480156200001257600080fd5b5060405162004cd538038062004cd5833981016040819052620000359162000344565b60006200004162000210565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200009d6301ffc9a760e01b62000214565b620000af630271189760e51b62000214565b82516001600160601b0319606091821b811660809081526020860151831b821660a09081526040870151841b831660c090815284880151851b841660e090815292880151851b841661010090815291880151851b841661012090815290880151851b84166101405291870151841b831661016052860151831b821661018052850151821b81166101a0529083901b166101c05260005b815181101562000206576001600160a01b03831615620001fd57826001600160a01b031663095ea7b38383815181106200017b57fe5b60200260200101516000196040518363ffffffff1660e01b8152600401620001a592919062000429565b602060405180830381600087803b158015620001c057600080fd5b505af1158015620001d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fb919062000400565b505b60010162000145565b5050505062000466565b3390565b6001600160e01b0319808216141562000274576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b80516001600160a01b0381168114620002b457600080fd5b919050565b600082601f830112620002ca578081fd5b815160206001600160401b03821115620002e057fe5b808202620002f082820162000442565b8381528281019086840183880185018910156200030b578687fd5b8693505b85841015620003385762000323816200029c565b8352600193909301929184019184016200030f565b50979650505050505050565b600080600061018084860312156200035a578283fd5b84601f85011262000369578283fd5b610140620003778162000442565b908501908086888411156200038a578687fd5b865b600a811015620003b757620003a1826200029c565b845260209384019391909101906001016200038c565b50508095505050620003c9816200029c565b61016086015190935090506001600160401b03811115620003e8578182fd5b620003f686828701620002b9565b9150509250925092565b60006020828403121562000412578081fd5b8151801515811462000422578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b03811182821017156200045e57fe5b604052919050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c61475f62000576600039806104f7528061060f528061082c528061099f52806121fd52806122b452806123435250806104af5280611cd852806120c5525080610c355280611af35280611b8d5250806104d352806119e9525080610bed52806119175280611ff5525080610524528061184552508061090b528061161952806116b3525080610d6c52806111c052806112565250806103af5280610f0e5280611e4a52508061092f52806110bd5280611f25525080610c115280610feb525061475f6000f3fe6080604052600436106101435760003560e01c806386dcbd27116100b6578063bd4486ee1161006f578063bd4486ee14610319578063c9f0a2fa1461032e578063df6c255814610343578063f23a6e6114610358578063f2fde38b14610378578063fc40c9c7146103985761014a565b806386dcbd27146102875780638da5cb5b146102a75780639110c777146102bc578063a05f32dc146102d1578063b94ee332146102e6578063bc197c81146102f95761014a565b80633733b82b116101085780633733b82b1461020b5780633fc8cef3146102205780635c975abb146102355780635ea1e4c91461024a578063715018a61461025f57806386496e7a146102745761014a565b80628534f71461014f57806301ffc9a71461017a57806302329a29146101a7578063150b7a02146101c9578063349d6a85146101f65761014a565b3661014a57005b600080fd5b34801561015b57600080fd5b506101646103ad565b6040516101719190613e85565b60405180910390f35b34801561018657600080fd5b5061019a6101953660046136e6565b6103d1565b6040516101719190613f0e565b3480156101b357600080fd5b506101c76101c23660046136ae565b6103f4565b005b3480156101d557600080fd5b506101e96101e4366004613318565b61049d565b6040516101719190613f19565b34801561020257600080fd5b506101646104ad565b34801561021757600080fd5b506101646104d1565b34801561022c57600080fd5b506101646104f5565b34801561024157600080fd5b5061019a610519565b34801561025657600080fd5b50610164610522565b34801561026b57600080fd5b506101c7610546565b6101c761028236600461386a565b6105f2565b34801561029357600080fd5b506101c76102a23660046133e7565b6107bd565b3480156102b357600080fd5b506101646108fa565b3480156102c857600080fd5b50610164610909565b3480156102dd57600080fd5b5061016461092d565b6101c76102f43660046135f3565b610951565b34801561030557600080fd5b506101e961031436600461326f565b610bda565b34801561032557600080fd5b50610164610beb565b34801561033a57600080fd5b50610164610c0f565b34801561034f57600080fd5b50610164610c33565b34801561036457600080fd5b506101e9610373366004613381565b610c57565b34801561038457600080fd5b506101c7610393366004613253565b610c68565b3480156103a457600080fd5b50610164610d6a565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b6103fc610d8e565b6001600160a01b031661040d6108fa565b6001600160a01b031614610456576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61054e610d8e565b6001600160a01b031661055f6108fa565b6001600160a01b0316146105a8576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6105fa610d92565b600061060584610de5565b905080156106b8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610644610d8e565b30846040518463ffffffff1660e01b815260040161066493929190613e99565b602060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b691906136ca565b505b60006106c78560400151610eb0565b905060008080808460018111156106da57fe5b141561070b576106eb886000610ecc565b919450925090506106fc8288611de2565b6107068187611de2565b610766565b600184600181111561071957fe5b14156107455761072a886000611e0d565b9194509250905061073b82886121c9565b61070681876121c9565b60405162461bcd60e51b815260040161075d906140a2565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107959190613f0e565b60405180910390a16107a5612286565b84156107b3576107b361229a565b5050505050505050565b6107c5610d8e565b6001600160a01b03166107d66108fa565b6001600160a01b03161461081f576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b60005b818110156108f5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061086557fe5b905060200201602081019061087a9190613253565b6000196040518363ffffffff1660e01b815260040161089a929190613ef5565b602060405180830381600087803b1580156108b457600080fd5b505af11580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec91906136ca565b50600101610822565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610959610d92565b60008060008060008060005b8a518110156109965761098a8b828151811061097d57fe5b6020026020010151610de5565b90910190600101610965565b508015610a48577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109d4610d8e565b30846040518463ffffffff1660e01b81526004016109f493929190613e99565b602060405180830381600087803b158015610a0e57600080fd5b505af1158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4691906136ca565b505b60005b8a51811015610b72576000610a768c8381518110610a6557fe5b602002602001015160400151610eb0565b90506000808080846001811115610a8957fe5b1415610ad057610aac8f8681518110610a9e57fe5b60200260200101518d610ecc565b91945092509050610abd8b836123e8565b9a50610ac98a826123e8565b9950610b21565b6001846001811115610ade57fe5b141561074557610b018f8681518110610af357fe5b60200260200101518d611e0d565b91945092509050610b1289836123e8565b9850610b1e88826123e8565b97505b8680610b2a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b5b9190613f0e565b60405180910390a150505050806001019050610a4b565b5081610b905760405162461bcd60e51b815260040161075d906142b3565b610b9a868a611de2565b610ba48589611de2565b610bae848a6121c9565b610bb883896121c9565b610bc0612286565b8015610bce57610bce61229a565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c70610d8e565b6001600160a01b0316610c816108fa565b6001600160a01b031614610cca576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b6001600160a01b038116610d0f5760405162461bcd60e51b81526004018080602001828103825260268152602001806146c36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610de3576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610dfb8460400151610eb0565b90506001816001811115610e0b57fe5b1415610ea95760208401516040850151928101926000918291610e2d91612449565b91509150808285010193506000610e5187606001518860400151896000015161247a565b91505060005b8151811015610ea457600060a0838381518110610e7057fe5b6020026020010151901c90506000610e95828b6020015161253390919063ffffffff16565b97909701965050600101610e57565b505050505b5092915050565b6000603082901c61ffff166001811115610ec657fe5b92915050565b6000806000806000610eeb87606001518860400151896000015161247a565b60208901519193509150600288516009811115610f0457fe5b1415610fd25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f459190613e69565b60006040518083038185875af1925050503d8060008114610f82576040519150601f19603f3d011682016040523d82523d6000602084013e610f87565b606091505b505090508715610faf5780610faa57600080600096509650965050505050611ddb565b610fcc565b80610fcc5760405162461bcd60e51b815260040161075d90614108565b50611da9565b600188516009811115610fe157fe5b14156110a45760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516110229190613e69565b60006040518083038185875af1925050503d806000811461105f576040519150601f19603f3d011682016040523d82523d6000602084013e611064565b606091505b5050905087156110875780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90613f98565b6000885160098111156110b357fe5b14156111765760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516110f49190613e69565b60006040518083038185875af1925050503d8060008114611131576040519150601f19603f3d011682016040523d82523d6000602084013e611136565b606091505b5050905087156111595780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90614006565b60038851600981111561118557fe5b14156115c8576000838060200190518101906111a191906138c0565b9050871561123f5760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906111f7908590600401614318565b6000604051808303818588803b15801561121057600080fd5b505af193505050508015611222575060015b61123a57600080600096509650965050505050611ddb565b6112c0565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061128d908590600401614318565b6000604051808303818588803b1580156112a657600080fd5b505af11580156112ba573d6000803e3d6000fd5b50505050505b60005b8160200151518110156115c1576000826020015182815181106112e257fe5b602002602001015160200151905060008360200151838151811061130257fe5b602002602001015160400151905060008460000151838151811061132257fe5b60200260200101516101000151828151811061133a57fe5b602002602001015160200151905060008560000151848151811061135a57fe5b602002602001015160e0015151118015611390575060008560200151858151811061138157fe5b602002602001015160c0015151115b156113d6576113d681866020015186815181106113a957fe5b602002602001015160c00151876000015186815181106113c557fe5b602002602001015160e0015161254b565b84518051849081106113e457fe5b602002602001015160800151600114156114b95760008180602001905181019061140e9190613532565b905060005b81518110156114b257600082828151811061142a57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611450610d8e565b84602001516040518463ffffffff1660e01b815260040161147393929190613e99565b600060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505060019093019250611413915050565b50506115b3565b84518051849081106114c757fe5b6020026020010151608001516002141561159b576000818060200190518101906114f19190613455565b905060005b81518110156114b257600082828151811061150d57fe5b6020026020010151905080600001516001600160a01b031663f242432a30611533610d8e565b846020015185604001516040518563ffffffff1660e01b815260040161155c9493929190613ebd565b600060405180830381600087803b15801561157657600080fd5b505af115801561158a573d6000803e3d6000fd5b5050600190930192506114f6915050565b60405162461bcd60e51b815260040161075d906141e2565b5050508060010190506112c3565b5050611da9565b6004885160098111156115d757fe5b141561182c576000806000858060200190518101906115f69190613988565b925092509250891561169c57604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b296908690611652908790879060040161449f565b6000604051808303818588803b15801561166b57600080fd5b505af19350505050801561167d575060015b611697576000806000985098509850505050505050611ddb565b61171f565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b2969086906116ec908790879060040161449f565b6000604051808303818588803b15801561170557600080fd5b505af1158015611719573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117ae5781604001516001600160a01b03166342842e0e30611754610d8e565b85608001516040518463ffffffff1660e01b815260040161177793929190613e99565b600060405180830381600087803b15801561179157600080fd5b505af11580156117a5573d6000803e3d6000fd5b50505050611824565b6001600160e01b0319811663025ceed960e61b141561180c5781604001516001600160a01b031663f242432a306117e3610d8e565b85608001518660a001516040518563ffffffff1660e01b81526004016117779493929190613ebd565b60405162461bcd60e51b815260040161075d90614250565b505050611da9565b60058851600981111561183b57fe5b14156118fe5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316828560405161187c9190613e69565b60006040518083038185875af1925050503d80600081146118b9576040519150601f19603f3d011682016040523d82523d6000602084013e6118be565b606091505b5050905087156118e15780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d906141ab565b60068851600981111561190d57fe5b14156119d05760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316828560405161194e9190613e69565b60006040518083038185875af1925050503d806000811461198b576040519150601f19603f3d011682016040523d82523d6000602084013e611990565b606091505b5050905087156119b35780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90613fcf565b6007885160098111156119df57fe5b1415611aa25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a209190613e69565b60006040518083038185875af1925050503d8060008114611a5d576040519150601f19603f3d011682016040523d82523d6000602084013e611a62565b606091505b505090508715611a855780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90614219565b600888516009811115611ab157fe5b1415611cbf57600080600085806020019051810190611ad091906137f6565b9250925092508915611b7657604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b2c90879087906004016142ea565b6000604051808303818588803b158015611b4557600080fd5b505af193505050508015611b57575060015b611b71576000806000985098509850505050505050611ddb565b611bf9565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611bc690879087906004016142ea565b6000604051808303818588803b158015611bdf57600080fd5b505af1158015611bf3573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c58578251606001516001600160a01b03166342842e0e30611c2f610d8e565b8651608001516040516001600160e01b031960e086901b16815261177793929190600401613e99565b6001600160e01b0319811663025ceed960e61b141561180c578251606001516001600160a01b031663f242432a30611c8e610d8e565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117779493929190600401613ebd565b600988516009811115611cce57fe5b1415611d915760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d0f9190613e69565b60006040518083038185875af1925050503d8060008114611d4c576040519150601f19603f3d011682016040523d82523d6000602084013e611d51565b606091505b505090508715611d745780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d9061413f565b60405162461bcd60e51b815260040161075d90614074565b611db78289602001516125dc565b600080611dcc8a604001518b60200151612449565b60019950909750955050505050505b9250925092565b600082118015611dfa57506001600160a01b03811615155b15611e0957611e098183612665565b5050565b6000806000806000611e2c87606001518860400151896000015161247a565b9092509050600287516009811115611e4057fe5b1415611f0c5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611e809190613e69565b6000604051808303816000865af19150503d8060008114611ebd576040519150601f19603f3d011682016040523d82523d6000602084013e611ec2565b606091505b505090508615611ee95780611ee4576000806000955095509550505050611ddb565b611f06565b80611f065760405162461bcd60e51b815260040161075d90614176565b50612194565b600087516009811115611f1b57fe5b1415611fdc5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f5b9190613e69565b6000604051808303816000865af19150503d8060008114611f98576040519150601f19603f3d011682016040523d82523d6000602084013e611f9d565b606091505b505090508615611fbf5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d9061403d565b600687516009811115611feb57fe5b14156120ac5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168360405161202b9190613e69565b6000604051808303816000865af19150503d8060008114612068576040519150601f19603f3d011682016040523d82523d6000602084013e61206d565b606091505b50509050861561208f5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d90613f2e565b6009875160098111156120bb57fe5b141561217c5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516120fb9190613e69565b6000604051808303816000865af19150503d8060008114612138576040519150601f19603f3d011682016040523d82523d6000602084013e61213d565b606091505b50509050861561215f5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d90613f63565b60405162461bcd60e51b815260040161075d906140d9565b6121a28188602001516126fd565b6000806121b789604001518a60200151612449565b60019b919a5098509650505050505050565b6000821180156121e157506001600160a01b03811615155b15611e095760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906122349084908690600401613ef5565b602060405180830381600087803b15801561224e57600080fd5b505af1158015612262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f591906136ca565b478015612297576122973382612665565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906122e9903090600401613e85565b60206040518083038186803b15801561230157600080fd5b505afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190613a75565b90508015612297577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612378610d8e565b836040518363ffffffff1660e01b8152600401612396929190613ef5565b602060405180830381600087803b1580156123b057600080fd5b505af11580156123c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0991906136ca565b600082820183811015612442576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166124638583612533565b61246d8683612533565b9350935050509250929050565b6060806000602085901c61ffff16600181111561249357fe5b9050606060008260018111156124a557fe5b14156124b757869350915061252b9050565b60018260018111156124c557fe5b1415612513576000878060200190518101906124e19190613702565b90506124ec86612786565b1561250757806000015181602001519450945050505061252b565b519350915061252b9050565b60405162461bcd60e51b815260040161075d9061427c565b935093915050565b600061244261271061254585856127d8565b90612831565b815183511461255957600080fd5b805183511461256757600080fd5b60005b83518110156125d65781818151811061257f57fe5b01602001516001600160f81b031916156125ce5782818151811061259f57fe5b602001015160f81c60f81b8482815181106125b657fe5b60200101906001600160f81b031916908160001a9053505b60010161256a565b50505050565b60005b82518110156108f55760008382815181106125f657fe5b6020026020010151111561265d57600083828151811061261257fe5b60200260200101519050600060a085848151811061262c57fe5b6020026020010151901c9050600061264d828661253390919063ffffffff16565b90506126598184611de2565b5050505b6001016125df565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146126b0576040519150601f19603f3d011682016040523d82523d6000602084013e6126b5565b606091505b50509050806108f5576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156108f557600083828151811061271757fe5b6020026020010151111561277e57600083828151811061273357fe5b60200260200101519050600060a085848151811061274d57fe5b6020026020010151901c9050600061276e828661253390919063ffffffff16565b905061277a81846121c9565b5050505b600101612700565b6000600582600981111561279657fe5b14806127ad575060048260098111156127ab57fe5b145b806127c3575060078260098111156127c157fe5b145b156127d0575060016103ef565b506000919050565b6000826127e757506000610ec6565b828202828482816127f457fe5b04146124425760405162461bcd60e51b81526004018080602001828103825260218152602001806146e96021913960400191505060405180910390fd5b6000808211612887576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161289057fe5b049392505050565b80356103ef81614689565b80516103ef81614689565b600082601f8301126128be578081fd5b815160206128d36128ce8361461f565b6145fc565b828152818101908583016040808602880185018910156128f1578687fd5b865b8681101561295b5781838b031215612909578788fd5b81518281018181106001600160401b038211171561292357fe5b8352835161ffff8116811461293657898afd5b81528387015161294581614689565b81880152855293850193918101916001016128f3565b509198975050505050505050565b600082601f830112612979578081fd5b815160206129896128ce8361461f565b828152818101908583016040808602880185018910156129a7578687fd5b865b8681101561295b5781838b0312156129bf578788fd5b81518281018181106001600160401b03821117156129d957fe5b835283518152868401516129ec81614689565b81880152855293850193918101916001016129a9565b600082601f830112612a12578081fd5b81516020612a226128ce8361461f565b82815281810190858301855b85811015612aab5781518801604080601f19838d03011215612a4e578889fd5b80518181016001600160401b038282108183111715612a6957fe5b818452848a01518352928401519280841115612a83578b8cfd5b5050612a938c8984860101612df9565b81890152865250509284019290840190600101612a2e565b5090979650505050505050565b600082601f830112612ac8578081fd5b81516020612ad86128ce8361461f565b82815281810190858301855b85811015612aab57815188016101a080601f19838d03011215612b05578889fd5b612b0e816145fc565b878301518152612b20604084016128a3565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612b5860e084016128a3565b60c08201526101008301516001600160401b0380821115612b77578b8cfd5b612b858e8b84880101612df9565b60e084015261012091508185015181811115612b9f578c8dfd5b612bad8f8c83890101612a02565b610100850152505061014080850151828401526101609150818501518184015250610180612bdc818601613242565b82840152612beb848601613242565b9083015250865250509284019290840190600101612ae4565b600082601f830112612c14578081fd5b81516020612c246128ce8361461f565b82815281810190858301855b85811015612aab578151880161016080601f19838d03011215612c51578889fd5b612c5a816145fc565b612c65888401612e44565b815260408084015189830152606080850151828401526080915081850151818401525060a0808501518284015260c09150612ca18286016128a3565b9083015260e08401516001600160401b0380821115612cbe578c8dfd5b612ccc8f8c84890101612df9565b8385015261010092508286015160e0850152610120915081860151838501526101409250828601518285015284860151945080851115612d0a578c8dfd5b5050612d1a8d8a85870101612969565b90820152865250509284019290840190600101612c30565b600082601f830112612d42578081fd5b81356020612d526128ce8361461f565b8281528181019085830183850287018401881015612d6e578586fd5b855b85811015612aab57813584529284019290840190600101612d70565b80356103ef8161469e565b80516103ef8161469e565b80516103ef816146ac565b600082601f830112612dbd578081fd5b8135612dcb6128ce8261463c565b818152846020838601011115612ddf578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612e09578081fd5b8151612e176128ce8261463c565b818152846020838601011115612e2b578283fd5b612e3c82602083016020870161465d565b949350505050565b8051600881106103ef57600080fd5b8051600281106103ef57600080fd5b600060e08284031215612e73578081fd5b612e7d60e06145fc565b905081516001600160401b0380821115612e9657600080fd5b612ea285838601613026565b8352612eb060208501613242565b602084015260408401516040840152606084015160608401526080840151915080821115612edd57600080fd5b50612eea84828501612df9565b608083015250612efc60a08301612e53565b60a082015260c082015160c082015292915050565b6000610200808385031215612f24578182fd5b612f2d816145fc565b915050612f3982612d97565b8152612f47602083016128a3565b6020820152612f58604083016128a3565b6040820152606082015160608201526080820151608082015260a082015160a0820152612f8760c083016128a3565b60c0820152612f9860e083016128a3565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b03811115612fe457600080fd5b612ff085828601612df9565b8284015250506101a0613004818401613242565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a0808385031215613039578182fd5b613042816145fc565b91505061304e826128a3565b815261305c60208301612e53565b602082015261306d604083016128a3565b604082015261307e606083016128a3565b60608201526080820151608082015260a082015160a08201526130a360c083016128a3565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156130e457600080fd5b6130f0868387016128ae565b838501526101609250828501518385015261018092508285015191508082111561311957600080fd5b5061312685828601612df9565b82840152505092915050565b600060808284031215613143578081fd5b604051608081016001600160401b03828210818311171561316057fe5b8160405282935084359150600a821061317857600080fd5b818352602085013560208401526040850135604084015260608501359150808211156131a357600080fd5b506131b085828601612dad565b6060830152505092915050565b600060c082840312156131ce578081fd5b60405160c081018181106001600160401b03821117156131ea57fe5b806040525080915082518152602083015160208201526040830151604082015260608301516060820152608083015161322281614689565b608082015260a08301516132358161469e565b60a0919091015292915050565b805160ff811681146103ef57600080fd5b600060208284031215613264578081fd5b813561244281614689565b600080600080600060a08688031215613286578081fd5b853561329181614689565b945060208601356132a181614689565b935060408601356001600160401b03808211156132bc578283fd5b6132c889838a01612d32565b945060608801359150808211156132dd578283fd5b6132e989838a01612d32565b935060808801359150808211156132fe578283fd5b5061330b88828901612dad565b9150509295509295909350565b6000806000806080858703121561332d578182fd5b843561333881614689565b9350602085013561334881614689565b92506040850135915060608501356001600160401b03811115613369578182fd5b61337587828801612dad565b91505092959194509250565b600080600080600060a08688031215613398578283fd5b85356133a381614689565b945060208601356133b381614689565b9350604086013592506060860135915060808601356001600160401b038111156133db578182fd5b61330b88828901612dad565b600080602083850312156133f9578182fd5b82356001600160401b038082111561340f578384fd5b818501915085601f830112613422578384fd5b813581811115613430578485fd5b8660208083028501011115613443578485fd5b60209290920196919550909350505050565b60006020808385031215613467578182fd5b82516001600160401b038082111561347d578384fd5b818501915085601f830112613490578384fd5b815161349e6128ce8261461f565b818152848101908486016060808502870188018b10156134bc578889fd5b8896505b848710156135235780828c0312156134d6578889fd5b6040805182810181811089821117156134eb57fe5b825283516134f881614689565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906134c0565b50909998505050505050505050565b60006020808385031215613544578182fd5b82516001600160401b038082111561355a578384fd5b818501915085601f83011261356d578384fd5b815161357b6128ce8261461f565b818152848101908486016040808502870188018b1015613599578889fd5b8896505b848710156135235780828c0312156135b3578889fd5b805181810181811088821117156135c657fe5b825282516135d381614689565b81528289015189820152845260019690960195928701929081019061359d565b60008060008060808587031215613608578182fd5b84356001600160401b0381111561361d578283fd5b8501601f8101871361362d578283fd5b8035602061363d6128ce8361461f565b82815281810190848301875b85811015613672576136608d8684358a0101613132565b84529284019290840190600101613649565b50508098505050613684818901612898565b955050505061369560408601612898565b91506136a360608601612d8c565b905092959194509250565b6000602082840312156136bf578081fd5b81356124428161469e565b6000602082840312156136db578081fd5b81516124428161469e565b6000602082840312156136f7578081fd5b8135612442816146ac565b60006020808385031215613714578182fd5b82516001600160401b038082111561372a578384fd5b908401906040828703121561373d578384fd5b60405160408101818110838211171561375257fe5b604052825182811115613763578586fd5b61376f88828601612df9565b8252508383015182811115613782578586fd5b80840193505086601f840112613796578485fd5b825191506137a66128ce8361461f565b82815284810190848601868502860187018a10156137c2578788fd5b8795505b848610156137e45780518352600195909501949186019186016137c6565b50948201949094529695505050505050565b60008060006060848603121561380a578081fd5b83516001600160401b0380821115613820578283fd5b61382c87838801612e62565b94506020860151915080821115613841578283fd5b5061384e86828701612e62565b925050604084015161385f816146ac565b809150509250925092565b60008060006060848603121561387e578081fd5b83356001600160401b03811115613893578182fd5b61389f86828701613132565b93505060208401356138b081614689565b9150604084013561385f81614689565b6000602082840312156138d1578081fd5b81516001600160401b03808211156138e7578283fd5b9083019061016082860312156138fb578283fd5b61390560c06145fc565b825182811115613913578485fd5b61391f87828601612ab8565b825250602083015182811115613933578485fd5b61393f87828601612c04565b60208301525061395286604085016131bd565b60408201526101008301516060820152610120830151608082015261397a6101408401613242565b60a082015295945050505050565b60008060006060848603121561399c578081fd5b83516001600160401b03808211156139b2578283fd5b9085019060c082880312156139c5578283fd5b60405160c0810181811083821117156139da57fe5b6040526139e683612d97565b81526139f4602084016128a3565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613a28578485fd5b613a3489828601612df9565b60a0830152506020870151909550915080821115613a50578283fd5b50613a5d86828701612f11565b925050613a6c60408501612da2565b90509250925092565b600060208284031215613a86578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613ae1578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613aad565b509495945050505050565b6000815180845260208085019450808401835b83811015613ae1578151805188528301516001600160a01b03168388015260409096019590820190600101613aff565b60008282518085526020808601955080818302840101818601855b84811015612aab57858303601f190189528151805184528401516040858501819052613b7881860183613c7e565b9a86019a9450505090830190600101613b4a565b6000815180845260208085018081965082840281019150828601855b85811015613c6b5782840389528151610160613bc5868351613caa565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613bfd82890182613a8d565b505060c0808301518282890152613c1683890182613c7e565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613c57915082905083613aec565b9a87019a9550505090840190600101613ba8565b5091979650505050505050565b15159052565b60008151808452613c9681602086016020860161465d565b601f01601f19169290920160200192915050565b60088110613cb457fe5b9052565b60028110613cb457fe5b6000815160e08452613cd860e085018251613a8d565b6020810151610100613cec81870183613cb8565b60408301519150610120613d0281880184613a8d565b60608401519250610140613d1881890185613a8d565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613d4c818c0188613a8d565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613d876102808b0187613a9a565b918701516102408b01529095015188860360df19016102608a0152949350613db59250839150849050613c7e565b9150506020830151613dca6020860182613e62565b50604083015160408501526060830151606085015260808301518482036080860152613df68282613c7e565b91505060a0830151613e0b60a0860182613cb8565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b60008251613e7b81846020870161465d565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b6000604082526142fd6040830185613cc2565b828103602084015261430f8185613cc2565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614435578a820361019f19018452855180518352898101516143758b850182613a8d565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516143b082860182613a8d565b505060e08082015189828601526143c98a860182613c7e565b91505061010080830151858303828701526143e48382613b2f565b925050506101208083015181860152506101408083015181860152508682015161441088860182613e62565b509089015190614422848b0183613e62565b968a0196948a019492505060010161434d565b50968a0151898803601f190160408b0152966144518189613b8c565b97505050506040880151935061446a6060880185613e20565b6060880151610120880152608088015161014088015260a0880151935061449381880185613e62565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e08501526144f982850182613c7e565b90508381036020850152610200614511828751613c78565b60208601516145236020840182613a8d565b5060408601516145366040840182613a8d565b50606086015160608301526080860151608083015260a086015160a083015260c086015161456760c0840182613a8d565b5060e086015161457a60e0840182613a8d565b508583015192820192909252610120808601519082015261014080860151908201526101608086015190820152610180808601518183018490529092906145c382840182613c7e565b935050506101a0808601516145da82840182613e62565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561461757fe5b604052919050565b60006001600160401b0382111561463257fe5b5060209081020190565b60006001600160401b0382111561464f57fe5b50601f01601f191660200190565b60005b83811015614678578181015183820152602001614660565b838111156125d65750506000910152565b6001600160a01b038116811461229757600080fd5b801515811461229757600080fd5b6001600160e01b03198116811461229757600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204cedaa680c5a0679008a0d1c00fbacd1ead2703a81cf38dc69116d58d31e721a64736f6c63430007060033", - "deployedBytecode": "0x6080604052600436106101435760003560e01c806386dcbd27116100b6578063bd4486ee1161006f578063bd4486ee14610319578063c9f0a2fa1461032e578063df6c255814610343578063f23a6e6114610358578063f2fde38b14610378578063fc40c9c7146103985761014a565b806386dcbd27146102875780638da5cb5b146102a75780639110c777146102bc578063a05f32dc146102d1578063b94ee332146102e6578063bc197c81146102f95761014a565b80633733b82b116101085780633733b82b1461020b5780633fc8cef3146102205780635c975abb146102355780635ea1e4c91461024a578063715018a61461025f57806386496e7a146102745761014a565b80628534f71461014f57806301ffc9a71461017a57806302329a29146101a7578063150b7a02146101c9578063349d6a85146101f65761014a565b3661014a57005b600080fd5b34801561015b57600080fd5b506101646103ad565b6040516101719190613e85565b60405180910390f35b34801561018657600080fd5b5061019a6101953660046136e6565b6103d1565b6040516101719190613f0e565b3480156101b357600080fd5b506101c76101c23660046136ae565b6103f4565b005b3480156101d557600080fd5b506101e96101e4366004613318565b61049d565b6040516101719190613f19565b34801561020257600080fd5b506101646104ad565b34801561021757600080fd5b506101646104d1565b34801561022c57600080fd5b506101646104f5565b34801561024157600080fd5b5061019a610519565b34801561025657600080fd5b50610164610522565b34801561026b57600080fd5b506101c7610546565b6101c761028236600461386a565b6105f2565b34801561029357600080fd5b506101c76102a23660046133e7565b6107bd565b3480156102b357600080fd5b506101646108fa565b3480156102c857600080fd5b50610164610909565b3480156102dd57600080fd5b5061016461092d565b6101c76102f43660046135f3565b610951565b34801561030557600080fd5b506101e961031436600461326f565b610bda565b34801561032557600080fd5b50610164610beb565b34801561033a57600080fd5b50610164610c0f565b34801561034f57600080fd5b50610164610c33565b34801561036457600080fd5b506101e9610373366004613381565b610c57565b34801561038457600080fd5b506101c7610393366004613253565b610c68565b3480156103a457600080fd5b50610164610d6a565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b6103fc610d8e565b6001600160a01b031661040d6108fa565b6001600160a01b031614610456576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61054e610d8e565b6001600160a01b031661055f6108fa565b6001600160a01b0316146105a8576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6105fa610d92565b600061060584610de5565b905080156106b8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610644610d8e565b30846040518463ffffffff1660e01b815260040161066493929190613e99565b602060405180830381600087803b15801561067e57600080fd5b505af1158015610692573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b691906136ca565b505b60006106c78560400151610eb0565b905060008080808460018111156106da57fe5b141561070b576106eb886000610ecc565b919450925090506106fc8288611de2565b6107068187611de2565b610766565b600184600181111561071957fe5b14156107455761072a886000611e0d565b9194509250905061073b82886121c9565b61070681876121c9565b60405162461bcd60e51b815260040161075d906140a2565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107959190613f0e565b60405180910390a16107a5612286565b84156107b3576107b361229a565b5050505050505050565b6107c5610d8e565b6001600160a01b03166107d66108fa565b6001600160a01b03161461081f576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b60005b818110156108f5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061086557fe5b905060200201602081019061087a9190613253565b6000196040518363ffffffff1660e01b815260040161089a929190613ef5565b602060405180830381600087803b1580156108b457600080fd5b505af11580156108c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ec91906136ca565b50600101610822565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610959610d92565b60008060008060008060005b8a518110156109965761098a8b828151811061097d57fe5b6020026020010151610de5565b90910190600101610965565b508015610a48577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109d4610d8e565b30846040518463ffffffff1660e01b81526004016109f493929190613e99565b602060405180830381600087803b158015610a0e57600080fd5b505af1158015610a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4691906136ca565b505b60005b8a51811015610b72576000610a768c8381518110610a6557fe5b602002602001015160400151610eb0565b90506000808080846001811115610a8957fe5b1415610ad057610aac8f8681518110610a9e57fe5b60200260200101518d610ecc565b91945092509050610abd8b836123e8565b9a50610ac98a826123e8565b9950610b21565b6001846001811115610ade57fe5b141561074557610b018f8681518110610af357fe5b60200260200101518d611e0d565b91945092509050610b1289836123e8565b9850610b1e88826123e8565b97505b8680610b2a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b5b9190613f0e565b60405180910390a150505050806001019050610a4b565b5081610b905760405162461bcd60e51b815260040161075d906142b3565b610b9a868a611de2565b610ba48589611de2565b610bae848a6121c9565b610bb883896121c9565b610bc0612286565b8015610bce57610bce61229a565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c70610d8e565b6001600160a01b0316610c816108fa565b6001600160a01b031614610cca576040805162461bcd60e51b8152602060048201819052602482015260008051602061470a833981519152604482015290519081900360640190fd5b6001600160a01b038116610d0f5760405162461bcd60e51b81526004018080602001828103825260268152602001806146c36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610de3576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610dfb8460400151610eb0565b90506001816001811115610e0b57fe5b1415610ea95760208401516040850151928101926000918291610e2d91612449565b91509150808285010193506000610e5187606001518860400151896000015161247a565b91505060005b8151811015610ea457600060a0838381518110610e7057fe5b6020026020010151901c90506000610e95828b6020015161253390919063ffffffff16565b97909701965050600101610e57565b505050505b5092915050565b6000603082901c61ffff166001811115610ec657fe5b92915050565b6000806000806000610eeb87606001518860400151896000015161247a565b60208901519193509150600288516009811115610f0457fe5b1415610fd25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f459190613e69565b60006040518083038185875af1925050503d8060008114610f82576040519150601f19603f3d011682016040523d82523d6000602084013e610f87565b606091505b505090508715610faf5780610faa57600080600096509650965050505050611ddb565b610fcc565b80610fcc5760405162461bcd60e51b815260040161075d90614108565b50611da9565b600188516009811115610fe157fe5b14156110a45760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516110229190613e69565b60006040518083038185875af1925050503d806000811461105f576040519150601f19603f3d011682016040523d82523d6000602084013e611064565b606091505b5050905087156110875780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90613f98565b6000885160098111156110b357fe5b14156111765760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516110f49190613e69565b60006040518083038185875af1925050503d8060008114611131576040519150601f19603f3d011682016040523d82523d6000602084013e611136565b606091505b5050905087156111595780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90614006565b60038851600981111561118557fe5b14156115c8576000838060200190518101906111a191906138c0565b9050871561123f5760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906111f7908590600401614318565b6000604051808303818588803b15801561121057600080fd5b505af193505050508015611222575060015b61123a57600080600096509650965050505050611ddb565b6112c0565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061128d908590600401614318565b6000604051808303818588803b1580156112a657600080fd5b505af11580156112ba573d6000803e3d6000fd5b50505050505b60005b8160200151518110156115c1576000826020015182815181106112e257fe5b602002602001015160200151905060008360200151838151811061130257fe5b602002602001015160400151905060008460000151838151811061132257fe5b60200260200101516101000151828151811061133a57fe5b602002602001015160200151905060008560000151848151811061135a57fe5b602002602001015160e0015151118015611390575060008560200151858151811061138157fe5b602002602001015160c0015151115b156113d6576113d681866020015186815181106113a957fe5b602002602001015160c00151876000015186815181106113c557fe5b602002602001015160e0015161254b565b84518051849081106113e457fe5b602002602001015160800151600114156114b95760008180602001905181019061140e9190613532565b905060005b81518110156114b257600082828151811061142a57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611450610d8e565b84602001516040518463ffffffff1660e01b815260040161147393929190613e99565b600060405180830381600087803b15801561148d57600080fd5b505af11580156114a1573d6000803e3d6000fd5b505060019093019250611413915050565b50506115b3565b84518051849081106114c757fe5b6020026020010151608001516002141561159b576000818060200190518101906114f19190613455565b905060005b81518110156114b257600082828151811061150d57fe5b6020026020010151905080600001516001600160a01b031663f242432a30611533610d8e565b846020015185604001516040518563ffffffff1660e01b815260040161155c9493929190613ebd565b600060405180830381600087803b15801561157657600080fd5b505af115801561158a573d6000803e3d6000fd5b5050600190930192506114f6915050565b60405162461bcd60e51b815260040161075d906141e2565b5050508060010190506112c3565b5050611da9565b6004885160098111156115d757fe5b141561182c576000806000858060200190518101906115f69190613988565b925092509250891561169c57604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b296908690611652908790879060040161449f565b6000604051808303818588803b15801561166b57600080fd5b505af19350505050801561167d575060015b611697576000806000985098509850505050505050611ddb565b61171f565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b2969086906116ec908790879060040161449f565b6000604051808303818588803b15801561170557600080fd5b505af1158015611719573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117ae5781604001516001600160a01b03166342842e0e30611754610d8e565b85608001516040518463ffffffff1660e01b815260040161177793929190613e99565b600060405180830381600087803b15801561179157600080fd5b505af11580156117a5573d6000803e3d6000fd5b50505050611824565b6001600160e01b0319811663025ceed960e61b141561180c5781604001516001600160a01b031663f242432a306117e3610d8e565b85608001518660a001516040518563ffffffff1660e01b81526004016117779493929190613ebd565b60405162461bcd60e51b815260040161075d90614250565b505050611da9565b60058851600981111561183b57fe5b14156118fe5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316828560405161187c9190613e69565b60006040518083038185875af1925050503d80600081146118b9576040519150601f19603f3d011682016040523d82523d6000602084013e6118be565b606091505b5050905087156118e15780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d906141ab565b60068851600981111561190d57fe5b14156119d05760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316828560405161194e9190613e69565b60006040518083038185875af1925050503d806000811461198b576040519150601f19603f3d011682016040523d82523d6000602084013e611990565b606091505b5050905087156119b35780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90613fcf565b6007885160098111156119df57fe5b1415611aa25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a209190613e69565b60006040518083038185875af1925050503d8060008114611a5d576040519150601f19603f3d011682016040523d82523d6000602084013e611a62565b606091505b505090508715611a855780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d90614219565b600888516009811115611ab157fe5b1415611cbf57600080600085806020019051810190611ad091906137f6565b9250925092508915611b7657604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b2c90879087906004016142ea565b6000604051808303818588803b158015611b4557600080fd5b505af193505050508015611b57575060015b611b71576000806000985098509850505050505050611ddb565b611bf9565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611bc690879087906004016142ea565b6000604051808303818588803b158015611bdf57600080fd5b505af1158015611bf3573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c58578251606001516001600160a01b03166342842e0e30611c2f610d8e565b8651608001516040516001600160e01b031960e086901b16815261177793929190600401613e99565b6001600160e01b0319811663025ceed960e61b141561180c578251606001516001600160a01b031663f242432a30611c8e610d8e565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117779493929190600401613ebd565b600988516009811115611cce57fe5b1415611d915760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d0f9190613e69565b60006040518083038185875af1925050503d8060008114611d4c576040519150601f19603f3d011682016040523d82523d6000602084013e611d51565b606091505b505090508715611d745780610faa57600080600096509650965050505050611ddb565b80610fcc5760405162461bcd60e51b815260040161075d9061413f565b60405162461bcd60e51b815260040161075d90614074565b611db78289602001516125dc565b600080611dcc8a604001518b60200151612449565b60019950909750955050505050505b9250925092565b600082118015611dfa57506001600160a01b03811615155b15611e0957611e098183612665565b5050565b6000806000806000611e2c87606001518860400151896000015161247a565b9092509050600287516009811115611e4057fe5b1415611f0c5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611e809190613e69565b6000604051808303816000865af19150503d8060008114611ebd576040519150601f19603f3d011682016040523d82523d6000602084013e611ec2565b606091505b505090508615611ee95780611ee4576000806000955095509550505050611ddb565b611f06565b80611f065760405162461bcd60e51b815260040161075d90614176565b50612194565b600087516009811115611f1b57fe5b1415611fdc5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f5b9190613e69565b6000604051808303816000865af19150503d8060008114611f98576040519150601f19603f3d011682016040523d82523d6000602084013e611f9d565b606091505b505090508615611fbf5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d9061403d565b600687516009811115611feb57fe5b14156120ac5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168360405161202b9190613e69565b6000604051808303816000865af19150503d8060008114612068576040519150601f19603f3d011682016040523d82523d6000602084013e61206d565b606091505b50509050861561208f5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d90613f2e565b6009875160098111156120bb57fe5b141561217c5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516120fb9190613e69565b6000604051808303816000865af19150503d8060008114612138576040519150601f19603f3d011682016040523d82523d6000602084013e61213d565b606091505b50509050861561215f5780611ee4576000806000955095509550505050611ddb565b80611f065760405162461bcd60e51b815260040161075d90613f63565b60405162461bcd60e51b815260040161075d906140d9565b6121a28188602001516126fd565b6000806121b789604001518a60200151612449565b60019b919a5098509650505050505050565b6000821180156121e157506001600160a01b03811615155b15611e095760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906122349084908690600401613ef5565b602060405180830381600087803b15801561224e57600080fd5b505af1158015612262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f591906136ca565b478015612297576122973382612665565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906122e9903090600401613e85565b60206040518083038186803b15801561230157600080fd5b505afa158015612315573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123399190613a75565b90508015612297577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612378610d8e565b836040518363ffffffff1660e01b8152600401612396929190613ef5565b602060405180830381600087803b1580156123b057600080fd5b505af11580156123c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0991906136ca565b600082820183811015612442576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166124638583612533565b61246d8683612533565b9350935050509250929050565b6060806000602085901c61ffff16600181111561249357fe5b9050606060008260018111156124a557fe5b14156124b757869350915061252b9050565b60018260018111156124c557fe5b1415612513576000878060200190518101906124e19190613702565b90506124ec86612786565b1561250757806000015181602001519450945050505061252b565b519350915061252b9050565b60405162461bcd60e51b815260040161075d9061427c565b935093915050565b600061244261271061254585856127d8565b90612831565b815183511461255957600080fd5b805183511461256757600080fd5b60005b83518110156125d65781818151811061257f57fe5b01602001516001600160f81b031916156125ce5782818151811061259f57fe5b602001015160f81c60f81b8482815181106125b657fe5b60200101906001600160f81b031916908160001a9053505b60010161256a565b50505050565b60005b82518110156108f55760008382815181106125f657fe5b6020026020010151111561265d57600083828151811061261257fe5b60200260200101519050600060a085848151811061262c57fe5b6020026020010151901c9050600061264d828661253390919063ffffffff16565b90506126598184611de2565b5050505b6001016125df565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146126b0576040519150601f19603f3d011682016040523d82523d6000602084013e6126b5565b606091505b50509050806108f5576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156108f557600083828151811061271757fe5b6020026020010151111561277e57600083828151811061273357fe5b60200260200101519050600060a085848151811061274d57fe5b6020026020010151901c9050600061276e828661253390919063ffffffff16565b905061277a81846121c9565b5050505b600101612700565b6000600582600981111561279657fe5b14806127ad575060048260098111156127ab57fe5b145b806127c3575060078260098111156127c157fe5b145b156127d0575060016103ef565b506000919050565b6000826127e757506000610ec6565b828202828482816127f457fe5b04146124425760405162461bcd60e51b81526004018080602001828103825260218152602001806146e96021913960400191505060405180910390fd5b6000808211612887576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161289057fe5b049392505050565b80356103ef81614689565b80516103ef81614689565b600082601f8301126128be578081fd5b815160206128d36128ce8361461f565b6145fc565b828152818101908583016040808602880185018910156128f1578687fd5b865b8681101561295b5781838b031215612909578788fd5b81518281018181106001600160401b038211171561292357fe5b8352835161ffff8116811461293657898afd5b81528387015161294581614689565b81880152855293850193918101916001016128f3565b509198975050505050505050565b600082601f830112612979578081fd5b815160206129896128ce8361461f565b828152818101908583016040808602880185018910156129a7578687fd5b865b8681101561295b5781838b0312156129bf578788fd5b81518281018181106001600160401b03821117156129d957fe5b835283518152868401516129ec81614689565b81880152855293850193918101916001016129a9565b600082601f830112612a12578081fd5b81516020612a226128ce8361461f565b82815281810190858301855b85811015612aab5781518801604080601f19838d03011215612a4e578889fd5b80518181016001600160401b038282108183111715612a6957fe5b818452848a01518352928401519280841115612a83578b8cfd5b5050612a938c8984860101612df9565b81890152865250509284019290840190600101612a2e565b5090979650505050505050565b600082601f830112612ac8578081fd5b81516020612ad86128ce8361461f565b82815281810190858301855b85811015612aab57815188016101a080601f19838d03011215612b05578889fd5b612b0e816145fc565b878301518152612b20604084016128a3565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612b5860e084016128a3565b60c08201526101008301516001600160401b0380821115612b77578b8cfd5b612b858e8b84880101612df9565b60e084015261012091508185015181811115612b9f578c8dfd5b612bad8f8c83890101612a02565b610100850152505061014080850151828401526101609150818501518184015250610180612bdc818601613242565b82840152612beb848601613242565b9083015250865250509284019290840190600101612ae4565b600082601f830112612c14578081fd5b81516020612c246128ce8361461f565b82815281810190858301855b85811015612aab578151880161016080601f19838d03011215612c51578889fd5b612c5a816145fc565b612c65888401612e44565b815260408084015189830152606080850151828401526080915081850151818401525060a0808501518284015260c09150612ca18286016128a3565b9083015260e08401516001600160401b0380821115612cbe578c8dfd5b612ccc8f8c84890101612df9565b8385015261010092508286015160e0850152610120915081860151838501526101409250828601518285015284860151945080851115612d0a578c8dfd5b5050612d1a8d8a85870101612969565b90820152865250509284019290840190600101612c30565b600082601f830112612d42578081fd5b81356020612d526128ce8361461f565b8281528181019085830183850287018401881015612d6e578586fd5b855b85811015612aab57813584529284019290840190600101612d70565b80356103ef8161469e565b80516103ef8161469e565b80516103ef816146ac565b600082601f830112612dbd578081fd5b8135612dcb6128ce8261463c565b818152846020838601011115612ddf578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612e09578081fd5b8151612e176128ce8261463c565b818152846020838601011115612e2b578283fd5b612e3c82602083016020870161465d565b949350505050565b8051600881106103ef57600080fd5b8051600281106103ef57600080fd5b600060e08284031215612e73578081fd5b612e7d60e06145fc565b905081516001600160401b0380821115612e9657600080fd5b612ea285838601613026565b8352612eb060208501613242565b602084015260408401516040840152606084015160608401526080840151915080821115612edd57600080fd5b50612eea84828501612df9565b608083015250612efc60a08301612e53565b60a082015260c082015160c082015292915050565b6000610200808385031215612f24578182fd5b612f2d816145fc565b915050612f3982612d97565b8152612f47602083016128a3565b6020820152612f58604083016128a3565b6040820152606082015160608201526080820151608082015260a082015160a0820152612f8760c083016128a3565b60c0820152612f9860e083016128a3565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b03811115612fe457600080fd5b612ff085828601612df9565b8284015250506101a0613004818401613242565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a0808385031215613039578182fd5b613042816145fc565b91505061304e826128a3565b815261305c60208301612e53565b602082015261306d604083016128a3565b604082015261307e606083016128a3565b60608201526080820151608082015260a082015160a08201526130a360c083016128a3565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156130e457600080fd5b6130f0868387016128ae565b838501526101609250828501518385015261018092508285015191508082111561311957600080fd5b5061312685828601612df9565b82840152505092915050565b600060808284031215613143578081fd5b604051608081016001600160401b03828210818311171561316057fe5b8160405282935084359150600a821061317857600080fd5b818352602085013560208401526040850135604084015260608501359150808211156131a357600080fd5b506131b085828601612dad565b6060830152505092915050565b600060c082840312156131ce578081fd5b60405160c081018181106001600160401b03821117156131ea57fe5b806040525080915082518152602083015160208201526040830151604082015260608301516060820152608083015161322281614689565b608082015260a08301516132358161469e565b60a0919091015292915050565b805160ff811681146103ef57600080fd5b600060208284031215613264578081fd5b813561244281614689565b600080600080600060a08688031215613286578081fd5b853561329181614689565b945060208601356132a181614689565b935060408601356001600160401b03808211156132bc578283fd5b6132c889838a01612d32565b945060608801359150808211156132dd578283fd5b6132e989838a01612d32565b935060808801359150808211156132fe578283fd5b5061330b88828901612dad565b9150509295509295909350565b6000806000806080858703121561332d578182fd5b843561333881614689565b9350602085013561334881614689565b92506040850135915060608501356001600160401b03811115613369578182fd5b61337587828801612dad565b91505092959194509250565b600080600080600060a08688031215613398578283fd5b85356133a381614689565b945060208601356133b381614689565b9350604086013592506060860135915060808601356001600160401b038111156133db578182fd5b61330b88828901612dad565b600080602083850312156133f9578182fd5b82356001600160401b038082111561340f578384fd5b818501915085601f830112613422578384fd5b813581811115613430578485fd5b8660208083028501011115613443578485fd5b60209290920196919550909350505050565b60006020808385031215613467578182fd5b82516001600160401b038082111561347d578384fd5b818501915085601f830112613490578384fd5b815161349e6128ce8261461f565b818152848101908486016060808502870188018b10156134bc578889fd5b8896505b848710156135235780828c0312156134d6578889fd5b6040805182810181811089821117156134eb57fe5b825283516134f881614689565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906134c0565b50909998505050505050505050565b60006020808385031215613544578182fd5b82516001600160401b038082111561355a578384fd5b818501915085601f83011261356d578384fd5b815161357b6128ce8261461f565b818152848101908486016040808502870188018b1015613599578889fd5b8896505b848710156135235780828c0312156135b3578889fd5b805181810181811088821117156135c657fe5b825282516135d381614689565b81528289015189820152845260019690960195928701929081019061359d565b60008060008060808587031215613608578182fd5b84356001600160401b0381111561361d578283fd5b8501601f8101871361362d578283fd5b8035602061363d6128ce8361461f565b82815281810190848301875b85811015613672576136608d8684358a0101613132565b84529284019290840190600101613649565b50508098505050613684818901612898565b955050505061369560408601612898565b91506136a360608601612d8c565b905092959194509250565b6000602082840312156136bf578081fd5b81356124428161469e565b6000602082840312156136db578081fd5b81516124428161469e565b6000602082840312156136f7578081fd5b8135612442816146ac565b60006020808385031215613714578182fd5b82516001600160401b038082111561372a578384fd5b908401906040828703121561373d578384fd5b60405160408101818110838211171561375257fe5b604052825182811115613763578586fd5b61376f88828601612df9565b8252508383015182811115613782578586fd5b80840193505086601f840112613796578485fd5b825191506137a66128ce8361461f565b82815284810190848601868502860187018a10156137c2578788fd5b8795505b848610156137e45780518352600195909501949186019186016137c6565b50948201949094529695505050505050565b60008060006060848603121561380a578081fd5b83516001600160401b0380821115613820578283fd5b61382c87838801612e62565b94506020860151915080821115613841578283fd5b5061384e86828701612e62565b925050604084015161385f816146ac565b809150509250925092565b60008060006060848603121561387e578081fd5b83356001600160401b03811115613893578182fd5b61389f86828701613132565b93505060208401356138b081614689565b9150604084013561385f81614689565b6000602082840312156138d1578081fd5b81516001600160401b03808211156138e7578283fd5b9083019061016082860312156138fb578283fd5b61390560c06145fc565b825182811115613913578485fd5b61391f87828601612ab8565b825250602083015182811115613933578485fd5b61393f87828601612c04565b60208301525061395286604085016131bd565b60408201526101008301516060820152610120830151608082015261397a6101408401613242565b60a082015295945050505050565b60008060006060848603121561399c578081fd5b83516001600160401b03808211156139b2578283fd5b9085019060c082880312156139c5578283fd5b60405160c0810181811083821117156139da57fe5b6040526139e683612d97565b81526139f4602084016128a3565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613a28578485fd5b613a3489828601612df9565b60a0830152506020870151909550915080821115613a50578283fd5b50613a5d86828701612f11565b925050613a6c60408501612da2565b90509250925092565b600060208284031215613a86578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613ae1578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613aad565b509495945050505050565b6000815180845260208085019450808401835b83811015613ae1578151805188528301516001600160a01b03168388015260409096019590820190600101613aff565b60008282518085526020808601955080818302840101818601855b84811015612aab57858303601f190189528151805184528401516040858501819052613b7881860183613c7e565b9a86019a9450505090830190600101613b4a565b6000815180845260208085018081965082840281019150828601855b85811015613c6b5782840389528151610160613bc5868351613caa565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613bfd82890182613a8d565b505060c0808301518282890152613c1683890182613c7e565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613c57915082905083613aec565b9a87019a9550505090840190600101613ba8565b5091979650505050505050565b15159052565b60008151808452613c9681602086016020860161465d565b601f01601f19169290920160200192915050565b60088110613cb457fe5b9052565b60028110613cb457fe5b6000815160e08452613cd860e085018251613a8d565b6020810151610100613cec81870183613cb8565b60408301519150610120613d0281880184613a8d565b60608401519250610140613d1881890185613a8d565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613d4c818c0188613a8d565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613d876102808b0187613a9a565b918701516102408b01529095015188860360df19016102608a0152949350613db59250839150849050613c7e565b9150506020830151613dca6020860182613e62565b50604083015160408501526060830151606085015260808301518482036080860152613df68282613c7e565b91505060a0830151613e0b60a0860182613cb8565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b60008251613e7b81846020870161465d565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b6000604082526142fd6040830185613cc2565b828103602084015261430f8185613cc2565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614435578a820361019f19018452855180518352898101516143758b850182613a8d565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516143b082860182613a8d565b505060e08082015189828601526143c98a860182613c7e565b91505061010080830151858303828701526143e48382613b2f565b925050506101208083015181860152506101408083015181860152508682015161441088860182613e62565b509089015190614422848b0183613e62565b968a0196948a019492505060010161434d565b50968a0151898803601f190160408b0152966144518189613b8c565b97505050506040880151935061446a6060880185613e20565b6060880151610120880152608088015161014088015260a0880151935061449381880185613e62565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e08501526144f982850182613c7e565b90508381036020850152610200614511828751613c78565b60208601516145236020840182613a8d565b5060408601516145366040840182613a8d565b50606086015160608301526080860151608083015260a086015160a083015260c086015161456760c0840182613a8d565b5060e086015161457a60e0840182613a8d565b508583015192820192909252610120808601519082015261014080860151908201526101608086015190820152610180808601518183018490529092906145c382840182613c7e565b935050506101a0808601516145da82840182613e62565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561461757fe5b604052919050565b60006001600160401b0382111561463257fe5b5060209081020190565b60006001600160401b0382111561464f57fe5b50601f01601f191660200190565b60005b83811015614678578181015183820152602001614660565b838111156125d65750506000910152565b6001600160a01b038116811461229757600080fd5b801515811461229757600080fd5b6001600160e01b03198116811461229757600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204cedaa680c5a0679008a0d1c00fbacd1ead2703a81cf38dc69116d58d31e721a64736f6c63430007060033", - "devdoc": { - "kind": "dev", - "methods": { - "approveWETH(address[])": { - "params": { - "transferProxies": "- array of addresses to approve WETH for" - } - }, - "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { - "params": { - "allowFail": "- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch", - "feeRecipientFirst": "- address of the first fee recipient", - "feeRecipientSecond": "- address of the second fee recipient", - "purchaseDetails": "- array of deatails about the purchases (more info in PurchaseDetails struct)" - } - }, - "onERC721Received(address,address,uint256,bytes)": { - "details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`." - }, - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { - "params": { - "feeRecipientFirst": "- address of the first fee recipient", - "feeRecipientSecond": "- address of the second fee recipient", - "purchaseDetails": "- deatails about the purchase (more info in PurchaseDetails struct)" - } - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "approveWETH(address[])": { - "notice": "approves weth for a list of the addresses" - }, - "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { - "notice": "executes an array of purchases" - }, - "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { - "notice": "executes a single purchase" - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 5462, - "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", - "label": "_owner", - "offset": 0, - "slot": "0", - "type": "t_address" - }, - { - "astId": 5578, - "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", - "label": "_supportedInterfaces", - "offset": 0, - "slot": "1", - "type": "t_mapping(t_bytes4,t_bool)" - }, - { - "astId": 17196, - "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", - "label": "paused", - "offset": 0, - "slot": "2", - "type": "t_bool" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_bytes4": { - "encoding": "inplace", - "label": "bytes4", - "numberOfBytes": "4" - }, - "t_mapping(t_bytes4,t_bool)": { - "encoding": "mapping", - "key": "t_bytes4", - "label": "mapping(bytes4 => bool)", - "numberOfBytes": "32", - "value": "t_bool" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/RoyaltiesRegistry_Proxy.json b/projects/hardhat-deploy/deployments/polygon_mumbai/RoyaltiesRegistry_Proxy.json deleted file mode 100644 index 7a7efced0..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/RoyaltiesRegistry_Proxy.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "address": "0xC61627D0b68018242CB983bB244c9B299b9Cce05", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_logic", - "type": "address" - }, - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "bytes", - "name": "_data", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "admin_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "changeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "implementation_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"events\":{\"AdminChanged(address,address)\":{\"details\":\"Emitted when the admin account has changed.\"}},\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"stateVariables\":{\"_ADMIN_SLOT\":{\"details\":\"Storage slot with the admin of the contract. This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is validated in the constructor.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./UpgradeableProxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\\n */\\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _setAdmin(admin_);\\n }\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _admin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _admin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n require(newAdmin != address(0), \\\"TransparentUpgradeableProxy: new admin is the zero address\\\");\\n emit AdminChanged(_admin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\\n _upgradeTo(newImplementation);\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address adm) {\\n bytes32 slot = _ADMIN_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n adm := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n bytes32 slot = _ADMIN_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newAdmin)\\n }\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _admin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0xf852214ea286716082f3ba480ff70bda2cbe2d11238091d2a440767d0ed49e61\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n *\\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\\n * {TransparentUpgradeableProxy}.\\n */\\ncontract UpgradeableProxy is Proxy {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) public payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _setImplementation(_logic);\\n if(_data.length > 0) {\\n Address.functionDelegateCall(_logic, _data);\\n }\\n }\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n impl := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Upgrades the proxy to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal virtual {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableProxy: new implementation is not a contract\\\");\\n\\n bytes32 slot = _IMPLEMENTATION_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, newImplementation)\\n }\\n }\\n}\\n\",\"keccak256\":\"0x81af1059a5bd5fb25cb0351499e1d4110416f5b0000ffad6427cbf6088b193a4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405260405162000c7c38038062000c7c833981810160405260608110156200002957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200005557600080fd5b9083019060208201858111156200006b57600080fd5b82516401000000008111828201881017156200008657600080fd5b82525081516020918201929091019080838360005b83811015620000b55781810151838201526020016200009b565b50505050905090810190601f168015620000e35780820380516001836020036101000a031916815260200191505b5060405250849150829050620000f98262000137565b8051156200011a57620001188282620001ae60201b620003841760201c565b505b50620001239050565b6200012e82620001dd565b505050620003be565b6200014d816200020160201b620003b01760201c565b6200018a5760405162461bcd60e51b815260040180806020018281038252603681526020018062000c206036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6060620001d6838360405180606001604052806027815260200162000bf96027913962000207565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b6060620002148462000201565b620002515760405162461bcd60e51b815260040180806020018281038252602681526020018062000c566026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b60208310620002905780518252601f1990920191602091820191016200026f565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620002f2576040519150601f19603f3d011682016040523d82523d6000602084013e620002f7565b606091505b5090925090506200030a82828662000314565b9695505050505050565b6060831562000325575081620001d6565b825115620003365782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200038257818101518382015260200162000368565b50505050905090810190601f168015620003b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b61082b80620003ce6000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374", - "deployedBytecode": "0x60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100985780635c60da1b146101185780638f28397014610149578063f851a4401461017c5761005d565b3661005d5761005b610191565b005b61005b610191565b34801561007157600080fd5b5061005b6004803603602081101561008857600080fd5b50356001600160a01b03166101ab565b61005b600480360360408110156100ae57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100d957600080fd5b8201836020820111156100eb57600080fd5b8035906020019184600183028401116401000000008311171561010d57600080fd5b5090925090506101e5565b34801561012457600080fd5b5061012d610262565b604080516001600160a01b039092168252519081900360200190f35b34801561015557600080fd5b5061005b6004803603602081101561016c57600080fd5b50356001600160a01b031661029f565b34801561018857600080fd5b5061012d610359565b6101996103b6565b6101a96101a4610416565b61043b565b565b6101b361045f565b6001600160a01b0316336001600160a01b031614156101da576101d581610484565b6101e2565b6101e2610191565b50565b6101ed61045f565b6001600160a01b0316336001600160a01b031614156102555761020f83610484565b61024f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061038492505050565b5061025d565b61025d610191565b505050565b600061026c61045f565b6001600160a01b0316336001600160a01b031614156102945761028d610416565b905061029c565b61029c610191565b90565b6102a761045f565b6001600160a01b0316336001600160a01b031614156101da576001600160a01b0381166103055760405162461bcd60e51b815260040180806020018281038252603a8152602001806106f7603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61032e61045f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101d5816104c4565b600061036361045f565b6001600160a01b0316336001600160a01b031614156102945761028d61045f565b60606103a98383604051806060016040528060278152602001610731602791396104e8565b9392505050565b3b151590565b6103be61045f565b6001600160a01b0316336001600160a01b0316141561040e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107b46042913960600191505060405180910390fd5b6101a96101a9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561045a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61048d816105ea565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b60606104f3846103b0565b61052e5760405162461bcd60e51b815260040180806020018281038252602681526020018061078e6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b6020831061056b5780518252601f19909201916020918201910161054c565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105cb576040519150601f19603f3d011682016040523d82523d6000602084013e6105d0565b606091505b50915091506105e0828286610652565b9695505050505050565b6105f3816103b0565b61062e5760405162461bcd60e51b81526004018080602001828103825260368152602001806107586036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106615750816103a9565b8251156106715782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106bb5781810151838201526020016106a3565b50505050905090810190601f1680156106e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212204770b73f36362a6e091db1f1a307be5eddc1083813c544b5f21abce9558c289a64736f6c63430007060033", - "devdoc": { - "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", - "events": { - "AdminChanged(address,address)": { - "details": "Emitted when the admin account has changed." - } - }, - "kind": "dev", - "methods": { - "admin()": { - "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" - }, - "changeAdmin(address)": { - "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." - }, - "constructor": { - "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}." - }, - "implementation()": { - "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" - }, - "upgradeTo(address)": { - "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." - }, - "upgradeToAndCall(address,bytes)": { - "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." - } - }, - "stateVariables": { - "_ADMIN_SLOT": { - "details": "Storage slot with the admin of the contract. This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is validated in the constructor." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": null - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/TransferProxy.json b/projects/hardhat-deploy/deployments/polygon_mumbai/TransferProxy.json deleted file mode 100644 index cbac54585..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/TransferProxy.json +++ /dev/null @@ -1,276 +0,0 @@ -{ - "address": "0x02e21199D043dab90248f79d6A8d0c36832734B0", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "inputs": [], - "name": "__OperatorRole_init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "__TransferProxy_init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "addOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC1155Upgradeable", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "erc1155safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC721Upgradeable", - "name": "token", - "type": "address" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "erc721safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "removeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "numDeployments": 1, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"erc1155safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC721Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"erc721safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":\"TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x87cd179c900495ee44c1b9c7fa57f4da0228217d78792bd6d6a6fde6c32be2b2\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50610ac8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100d65780639c1c2ee9146100fc578063ac8a584a14610199578063f2fde38b146101bf578063f709b906146101e557610093565b80632ff26a0a14610098578063495edf86146100a2578063715018a6146100aa5780638da5cb5b146100b2575b600080fd5b6100a0610221565b005b6100a06102d3565b6100a0610368565b6100ba610414565b604080516001600160a01b039092168252519081900360200190f35b6100a0600480360360208110156100ec57600080fd5b50356001600160a01b0316610423565b6100a0600480360360c081101561011257600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561015a57600080fd5b82018360208201111561016c57600080fd5b8035906020019184600183028401116401000000008311171561018e57600080fd5b5090925090506104a9565b6100a0600480360360208110156101af57600080fd5b50356001600160a01b03166105d2565b6100a0600480360360208110156101d557600080fd5b50356001600160a01b0316610655565b6100a0600480360360808110156101fb57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610758565b600054610100900460ff168061023a575061023a610842565b80610248575060005460ff16155b6102835760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102ae576000805460ff1961ff0019909116610100171660011790555b6102b6610853565b6102be6108f3565b80156102d0576000805461ff00191690555b50565b600054610100900460ff16806102ec57506102ec610842565b806102fa575060005460ff16155b6103355760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610360576000805460ff1961ff0019909116610100171660011790555b6102be610221565b6103706109ec565b6001600160a01b0316610381610414565b6001600160a01b0316146103ca576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61042b6109ec565b6001600160a01b031661043c610414565b6001600160a01b031614610485576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006104b56109ec565b6001600160a01b0316815260208101919091526040016000205460ff1661050d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156105b157600080fd5b505af11580156105c5573d6000803e3d6000fd5b5050505050505050505050565b6105da6109ec565b6001600160a01b03166105eb610414565b6001600160a01b031614610634576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61065d6109ec565b6001600160a01b031661066e610414565b6001600160a01b0316146106b7576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b0381166106fc5760405162461bcd60e51b81526004018080602001828103825260268152602001806109f76026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b606560006107646109ec565b6001600160a01b0316815260208101919091526040016000205460ff166107bc5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b5050505050505050565b600061084d306109f0565b15905090565b600054610100900460ff168061086c575061086c610842565b8061087a575060005460ff16155b6108b55760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102be576000805460ff1961ff00199091166101001716600117905580156102d0576000805461ff001916905550565b600054610100900460ff168061090c575061090c610842565b8061091a575060005460ff16155b6109555760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610980576000805460ff1961ff0019909116610100171660011790555b600061098a6109ec565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d0576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212201ac6cdd7d3dfc55f32f10d13fb14c86d97528121944756ef32d89fb364459cdf64736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100d65780639c1c2ee9146100fc578063ac8a584a14610199578063f2fde38b146101bf578063f709b906146101e557610093565b80632ff26a0a14610098578063495edf86146100a2578063715018a6146100aa5780638da5cb5b146100b2575b600080fd5b6100a0610221565b005b6100a06102d3565b6100a0610368565b6100ba610414565b604080516001600160a01b039092168252519081900360200190f35b6100a0600480360360208110156100ec57600080fd5b50356001600160a01b0316610423565b6100a0600480360360c081101561011257600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561015a57600080fd5b82018360208201111561016c57600080fd5b8035906020019184600183028401116401000000008311171561018e57600080fd5b5090925090506104a9565b6100a0600480360360208110156101af57600080fd5b50356001600160a01b03166105d2565b6100a0600480360360208110156101d557600080fd5b50356001600160a01b0316610655565b6100a0600480360360808110156101fb57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610758565b600054610100900460ff168061023a575061023a610842565b80610248575060005460ff16155b6102835760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102ae576000805460ff1961ff0019909116610100171660011790555b6102b6610853565b6102be6108f3565b80156102d0576000805461ff00191690555b50565b600054610100900460ff16806102ec57506102ec610842565b806102fa575060005460ff16155b6103355760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610360576000805460ff1961ff0019909116610100171660011790555b6102be610221565b6103706109ec565b6001600160a01b0316610381610414565b6001600160a01b0316146103ca576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61042b6109ec565b6001600160a01b031661043c610414565b6001600160a01b031614610485576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006104b56109ec565b6001600160a01b0316815260208101919091526040016000205460ff1661050d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156105b157600080fd5b505af11580156105c5573d6000803e3d6000fd5b5050505050505050505050565b6105da6109ec565b6001600160a01b03166105eb610414565b6001600160a01b031614610634576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61065d6109ec565b6001600160a01b031661066e610414565b6001600160a01b0316146106b7576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b0381166106fc5760405162461bcd60e51b81526004018080602001828103825260268152602001806109f76026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b606560006107646109ec565b6001600160a01b0316815260208101919091526040016000205460ff166107bc5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b5050505050505050565b600061084d306109f0565b15905090565b600054610100900460ff168061086c575061086c610842565b8061087a575060005460ff16155b6108b55760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102be576000805460ff1961ff00199091166101001716600117905580156102d0576000805461ff001916905550565b600054610100900460ff168061090c575061090c610842565b8061091a575060005460ff16155b6109555760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610980576000805460ff1961ff0019909116610100171660011790555b600061098a6109ec565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d0576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212201ac6cdd7d3dfc55f32f10d13fb14c86d97528121944756ef32d89fb364459cdf64736f6c63430007060033", - "devdoc": { - "kind": "dev", - "methods": { - "owner()": { - "details": "Returns the address of the current owner." - }, - "renounceOwnership()": { - "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." - }, - "transferOwnership(address)": { - "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": {}, - "version": 1 - }, - "storageLayout": { - "storage": [ - { - "astId": 739, - "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", - "label": "_initialized", - "offset": 0, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 742, - "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", - "label": "_initializing", - "offset": 1, - "slot": "0", - "type": "t_bool" - }, - { - "astId": 4256, - "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", - "label": "__gap", - "offset": 0, - "slot": "1", - "type": "t_array(t_uint256)50_storage" - }, - { - "astId": 10, - "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", - "label": "_owner", - "offset": 0, - "slot": "51", - "type": "t_address" - }, - { - "astId": 129, - "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", - "label": "__gap", - "offset": 0, - "slot": "52", - "type": "t_array(t_uint256)49_storage" - }, - { - "astId": 19576, - "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", - "label": "operators", - "offset": 0, - "slot": "101", - "type": "t_mapping(t_address,t_bool)" - } - ], - "types": { - "t_address": { - "encoding": "inplace", - "label": "address", - "numberOfBytes": "20" - }, - "t_array(t_uint256)49_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[49]", - "numberOfBytes": "1568" - }, - "t_array(t_uint256)50_storage": { - "base": "t_uint256", - "encoding": "inplace", - "label": "uint256[50]", - "numberOfBytes": "1600" - }, - "t_bool": { - "encoding": "inplace", - "label": "bool", - "numberOfBytes": "1" - }, - "t_mapping(t_address,t_bool)": { - "encoding": "mapping", - "key": "t_address", - "label": "mapping(address => bool)", - "numberOfBytes": "32", - "value": "t_bool" - }, - "t_uint256": { - "encoding": "inplace", - "label": "uint256", - "numberOfBytes": "32" - } - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/solcInputs/bf917ed004d0f3f4e7ddfe1dd4d0856b.json b/projects/hardhat-deploy/deployments/polygon_mumbai/solcInputs/bf917ed004d0f3f4e7ddfe1dd4d0856b.json deleted file mode 100644 index afa2c8217..000000000 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/solcInputs/bf917ed004d0f3f4e7ddfe1dd4d0856b.json +++ /dev/null @@ -1,617 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal initializer {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n uint256[49] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712Upgradeable is Initializable {\n /* solhint-disable var-name-mixedcase */\n bytes32 private _HASHED_NAME;\n bytes32 private _HASHED_VERSION;\n bytes32 private constant _TYPE_HASH = keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n function __EIP712_init(string memory name, string memory version) internal initializer {\n __EIP712_init_unchained(name, version);\n }\n\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\n }\n\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\n return keccak256(\n abi.encode(\n typeHash,\n name,\n version,\n _getChainId(),\n address(this)\n )\n );\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n }\n\n function _getChainId() private view returns (uint256 chainId) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n\n /**\n * @dev The hash of the name parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712NameHash() internal virtual view returns (bytes32) {\n return _HASHED_NAME;\n }\n\n /**\n * @dev The hash of the version parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\n return _HASHED_VERSION;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165Upgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n function __ERC165_init() internal initializer {\n __ERC165_init_unchained();\n }\n\n function __ERC165_init_unchained() internal initializer {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n uint256[49] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165Upgradeable {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\n// solhint-disable-next-line compiler-version\npragma solidity >=0.4.24 <0.8.0;\n\nimport \"../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n */\nabstract contract Initializable {\n\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(_initializing || _isConstructor() || !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /// @dev Returns true if and only if the function is running in the constructor\n function _isConstructor() private view returns (bool) {\n return !AddressUpgradeable.isContract(address(this));\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155HolderUpgradeable is Initializable, ERC1155ReceiverUpgradeable {\n function __ERC1155Holder_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ERC1155Holder_init_unchained();\n }\n\n function __ERC1155Holder_init_unchained() internal initializer {\n }\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\n function __ERC1155Receiver_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n }\n\n function __ERC1155Receiver_init_unchained() internal initializer {\n _registerInterface(\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\n );\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\nimport \"./IERC1155MetadataURIUpgradeable.sol\";\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC20Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable {\n using SafeMathUpgradeable for uint256;\n\n mapping (address => uint256) private _balances;\n\n mapping (address => mapping (address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n * a default value of 18.\n *\n * To select a different value for {decimals}, use {_setupDecimals}.\n *\n * All three of these values are immutable: they can only be set once during\n * construction.\n */\n function __ERC20_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC20_init_unchained(name_, symbol_);\n }\n\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n _decimals = 18;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n * called.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return _decimals;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * Requirements:\n *\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n * - the caller must have allowance for ``sender``'s tokens of at least\n * `amount`.\n */\n function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n /**\n * @dev Moves tokens `amount` from `sender` to `recipient`.\n *\n * This is internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: mint to the zero address\");\n\n _beforeTokenTransfer(address(0), account, amount);\n\n _totalSupply = _totalSupply.add(amount);\n _balances[account] = _balances[account].add(amount);\n emit Transfer(address(0), account, amount);\n }\n\n /**\n * @dev Destroys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: burn from the zero address\");\n\n _beforeTokenTransfer(account, address(0), amount);\n\n _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n _totalSupply = _totalSupply.sub(amount);\n emit Transfer(account, address(0), amount);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(address owner, address spender, uint256 amount) internal virtual {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Sets {decimals} to a value other than the default one of 18.\n *\n * WARNING: This function should only be called from the constructor. Most\n * applications that interact with token contracts will not expect\n * {decimals} to ever change, and may work incorrectly if it does.\n */\n function _setupDecimals(uint8 decimals_) internal virtual {\n _decimals = decimals_;\n }\n\n /**\n * @dev Hook that is called before any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * will be to transferred to `to`.\n * - when `from` is zero, `amount` tokens will be minted for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n uint256[44] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20Upgradeable {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721HolderUpgradeable is Initializable, IERC721ReceiverUpgradeable {\n function __ERC721Holder_init() internal initializer {\n __ERC721Holder_init_unchained();\n }\n\n function __ERC721Holder_init_unchained() internal initializer {\n }\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC721Upgradeable.sol\";\nimport \"./IERC721MetadataUpgradeable.sol\";\nimport \"./IERC721EnumerableUpgradeable.sol\";\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../utils/EnumerableSetUpgradeable.sol\";\nimport \"../../utils/EnumerableMapUpgradeable.sol\";\nimport \"../../utils/StringsUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) private _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap private _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits an {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[41] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721EnumerableUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the total amount of tokens stored by the contract.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);\n\n /**\n * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n * Use along with {totalSupply} to enumerate all tokens.\n */\n function tokenByIndex(uint256 index) external view returns (uint256);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721ReceiverUpgradeable {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the caller.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool _approved) external;\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal initializer {\n __Context_init_unchained();\n }\n\n function __Context_init_unchained() internal initializer {\n }\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing an enumerable variant of Solidity's\n * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]\n * type.\n *\n * Maps have the following properties:\n *\n * - Entries are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Entries are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableMap for EnumerableMap.UintToAddressMap;\n *\n * // Declare a set state variable\n * EnumerableMap.UintToAddressMap private myMap;\n * }\n * ```\n *\n * As of v3.0.0, only maps of type `uint256 -> address` (`UintToAddressMap`) are\n * supported.\n */\nlibrary EnumerableMapUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Map type with\n // bytes32 keys and values.\n // The Map implementation uses private functions, and user-facing\n // implementations (such as Uint256ToAddressMap) are just wrappers around\n // the underlying Map.\n // This means that we can only create new EnumerableMaps for types that fit\n // in bytes32.\n\n struct MapEntry {\n bytes32 _key;\n bytes32 _value;\n }\n\n struct Map {\n // Storage of map keys and values\n MapEntry[] _entries;\n\n // Position of the entry defined by a key in the `entries` array, plus 1\n // because index 0 means a key is not in the map.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex == 0) { // Equivalent to !contains(map, key)\n map._entries.push(MapEntry({ _key: key, _value: value }));\n // The entry is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n map._indexes[key] = map._entries.length;\n return true;\n } else {\n map._entries[keyIndex - 1]._value = value;\n return false;\n }\n }\n\n /**\n * @dev Removes a key-value pair from a map. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function _remove(Map storage map, bytes32 key) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex != 0) { // Equivalent to contains(map, key)\n // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one\n // in the array, and then remove the last entry (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = keyIndex - 1;\n uint256 lastIndex = map._entries.length - 1;\n\n // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n MapEntry storage lastEntry = map._entries[lastIndex];\n\n // Move the last entry to the index where the entry to delete is\n map._entries[toDeleteIndex] = lastEntry;\n // Update the index for the moved entry\n map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved entry was stored\n map._entries.pop();\n\n // Delete the index for the deleted slot\n delete map._indexes[key];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function _contains(Map storage map, bytes32 key) private view returns (bool) {\n return map._indexes[key] != 0;\n }\n\n /**\n * @dev Returns the number of key-value pairs in the map. O(1).\n */\n function _length(Map storage map) private view returns (uint256) {\n return map._entries.length;\n }\n\n /**\n * @dev Returns the key-value pair stored at position `index` in the map. O(1).\n *\n * Note that there are no guarantees on the ordering of entries inside the\n * array, and it may change when more entries are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {\n require(map._entries.length > index, \"EnumerableMap: index out of bounds\");\n\n MapEntry storage entry = map._entries[index];\n return (entry._key, entry._value);\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n */\n function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {\n uint256 keyIndex = map._indexes[key];\n if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)\n return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function _get(Map storage map, bytes32 key) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, \"EnumerableMap: nonexistent key\"); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n /**\n * @dev Same as {_get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {_tryGet}.\n */\n function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n // UintToAddressMap\n\n struct UintToAddressMap {\n Map _inner;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {\n return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {\n return _remove(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {\n return _contains(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns the number of elements in the map. O(1).\n */\n function length(UintToAddressMap storage map) internal view returns (uint256) {\n return _length(map._inner);\n }\n\n /**\n * @dev Returns the element stored at position `index` in the set. O(1).\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {\n (bytes32 key, bytes32 value) = _at(map._inner, index);\n return (uint256(key), address(uint160(uint256(value))));\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n *\n * _Available since v3.4._\n */\n function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {\n (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));\n return (success, address(uint160(uint256(value))));\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key)))));\n }\n\n /**\n * @dev Same as {get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryGet}.\n */\n function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n */\nlibrary EnumerableSetUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) { // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n bytes32 lastvalue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastvalue;\n // Update the index for the moved value\n set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n require(set._values.length > index, \"EnumerableSet: index out of bounds\");\n return set._values[index];\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuardUpgradeable is Initializable {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n function __ReentrancyGuard_init() internal initializer {\n __ReentrancyGuard_init_unchained();\n }\n\n function __ReentrancyGuard_init_unchained() internal initializer {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n // On the first call to nonReentrant, _notEntered will be true\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n uint256[49] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary StringsUpgradeable {\n /**\n * @dev Converts a `uint256` to its ASCII `string` representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n uint256 index = digits - 1;\n temp = value;\n while (temp != 0) {\n buffer[index--] = bytes1(uint8(48 + temp % 10));\n temp /= 10;\n }\n return string(buffer);\n }\n}\n" - }, - "@openzeppelin/contracts/access/Ownable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" - }, - "@openzeppelin/contracts/introspection/ERC165.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165 is IERC165 {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n constructor () internal {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" - }, - "@openzeppelin/contracts/introspection/IERC165.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" - }, - "@openzeppelin/contracts/math/SafeMath.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/BeaconProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\nimport \"./IBeacon.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy {\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) public payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _setBeacon(beacon, data);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address beacon) {\n bytes32 slot = _BEACON_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n beacon := sload(slot)\n }\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_beacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n require(\n Address.isContract(beacon),\n \"BeaconProxy: beacon is not a contract\"\n );\n require(\n Address.isContract(IBeacon(beacon).implementation()),\n \"BeaconProxy: beacon implementation is not a contract\"\n );\n bytes32 slot = _BEACON_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, beacon)\n }\n\n if (data.length > 0) {\n Address.functionDelegateCall(_implementation(), data, \"BeaconProxy: function call failed\");\n }\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/IBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" - }, - "@openzeppelin/contracts/proxy/Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/ProxyAdmin.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../access/Ownable.sol\";\nimport \"./TransparentUpgradeableProxy.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(TransparentUpgradeableProxy proxy, address implementation, bytes memory data) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./UpgradeableProxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\n */\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _setAdmin(admin_);\n }\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _admin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _admin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n require(newAdmin != address(0), \"TransparentUpgradeableProxy: new admin is the zero address\");\n emit AdminChanged(_admin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external virtual ifAdmin {\n _upgradeTo(newImplementation);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\n _upgradeTo(newImplementation);\n Address.functionDelegateCall(newImplementation, data);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address adm) {\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n adm := sload(slot)\n }\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n bytes32 slot = _ADMIN_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newAdmin)\n }\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _admin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../access/Ownable.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n constructor(address implementation_) public {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/UpgradeableProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n *\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\n * {TransparentUpgradeableProxy}.\n */\ncontract UpgradeableProxy is Proxy {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) public payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _setImplementation(_logic);\n if(_data.length > 0) {\n Address.functionDelegateCall(_logic, _data);\n }\n }\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n impl := sload(slot)\n }\n }\n\n /**\n * @dev Upgrades the proxy to a new implementation.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal virtual {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableProxy: new implementation is not a contract\");\n\n bytes32 slot = _IMPLEMENTATION_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newImplementation)\n }\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/ERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155.sol\";\nimport \"./IERC1155MetadataURI.sol\";\nimport \"./IERC1155Receiver.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../introspection/ERC165.sol\";\nimport \"../../math/SafeMath.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {\n using SafeMath for uint256;\n using Address for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n constructor (string memory uri_) public {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Receiver.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155Holder is ERC1155Receiver {\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Receiver.sol\";\nimport \"../../introspection/ERC165.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\n constructor() internal {\n _registerInterface(\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\n );\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/IERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155 is IERC165 {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURI is IERC1155 {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155Receiver is IERC165 {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" - }, - "@openzeppelin/contracts/token/ERC721/ERC721Holder.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721Receiver.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721Holder is IERC721Receiver {\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" - }, - "@openzeppelin/contracts/utils/Address.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" - }, - "@openzeppelin/contracts/utils/Context.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" - }, - "@openzeppelin/contracts/utils/Pausable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n bool private _paused;\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n constructor () internal {\n _paused = false;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n require(!paused(), \"Pausable: paused\");\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n require(paused(), \"Pausable: not paused\");\n _;\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" - }, - "@rarible/auction/contracts/1155/AuctionHouse1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase1155.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse1155 is ERC1155HolderUpgradeable, AuctionHouseBase1155 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse1155_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse1155_init_unchained();\n }\n\n function __AuctionHouse1155_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint96 _sellTokenValue,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC1155 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(_sellTokenValue > 0, \"incorrect _sellTokenValue\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenValue,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n\n transferNFT(\n _sellToken, \n _sellTokenId, \n _sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n sender,\n address(this)\n );\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime if it's not set\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId) internal {\n emit AuctionFinished(_auctionId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n address seller = currentAuction.seller;\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n currentAuction.sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n \n deactivateAuction(_auctionId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return this.supportsInterface(interfaceId);\n }\n\n}" - }, - "@rarible/auction/contracts/1155/AuctionHouseBase1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase1155 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint96 sellTokenValue;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n\n}" - }, - "@rarible/auction/contracts/721/AuctionHouse721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase721.sol\";\nimport \"../wrapper/TokenToAuction.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse721 is ERC721HolderUpgradeable, TokenToAuction, AuctionHouseBase721 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse721_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC721Holder_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse721_init_unchained();\n }\n\n function __AuctionHouse721_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC721 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n transferNFT(\n _sellToken, \n _sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n sender,\n address(this)\n );\n setAuctionForToken(_sellToken, _sellTokenId, currentAuctionId);\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId, address token, uint tokenId) internal {\n emit AuctionFinished(_auctionId);\n deleteAuctionForToken(token, tokenId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n address seller = currentAuction.seller;\n require(_checkAuctionExistence(seller), \"there is no auction with this id\");\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n \n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n /// @dev function to call from wrapper to put bid\n function putBidWrapper(uint256 _auctionId) external payable {\n require(auctions[_auctionId].buyAsset == address(0), \"only ETH bids allowed\");\n putBid(_auctionId, Bid(msg.value, LibBidDataV1.V1, \"\"));\n }\n\n}" - }, - "@rarible/auction/contracts/721/AuctionHouseBase721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase721 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n}" - }, - "@rarible/auction/contracts/AuctionHouseBase.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libs/LibAucDataV1.sol\";\nimport \"./libs/LibBidDataV1.sol\";\nimport \"./libs/SafeMathUpgradeable96.sol\";\n\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nabstract contract AuctionHouseBase is OwnableUpgradeable, ReentrancyGuardUpgradeable, RaribleTransferManager, TransferExecutor {\n using LibTransfer for address;\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n /// @dev default minimal auction duration and also the time for that auction is extended when it's about to end (endTime - now < EXTENSION_DURATION)\n uint96 internal constant EXTENSION_DURATION = 15 minutes;\n\n /// @dev maximum auction duration\n uint128 internal constant MAX_DURATION = 1000 days;\n\n /// @dev maximum fee base point\n uint internal constant MAX_FEE_BASE_POINT = 1000;\n\n /// @dev mapping to store eth amount that is ready to be withdrawn (used for faulty eth-bids)\n mapping(address => uint) readyToWithdraw;\n\n /// @dev latest auctionId\n uint256 public auctionId;\n\n /// @dev minimal auction duration\n uint96 public minimalDuration;\n\n /// @dev minimal bid increase in base points\n uint96 public minimalStepBasePoint;\n\n /// @dev bid struct\n struct Bid {\n // the amount \n uint amount;\n // version of Bid to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Bid, can be seen in \"LibBidDataV1.sol\"\n bytes data;\n }\n\n /// @dev event that emits when auction is created\n event AuctionCreated(uint indexed auctionId, address seller);\n /// @dev event that emits when bid is placed\n event BidPlaced(uint indexed auctionId, address buyer, uint endTime);\n /// @dev event that emits when auction is finished\n event AuctionFinished(uint indexed auctionId);\n /// @dev event that emits when auction is canceled\n event AuctionCancelled(uint indexed auctionId);\n /// @dev event that emits when auction is bought out\n event AuctionBuyOut(uint indexed auctionId, address buyer);\n\n /// @dev event that's emitted when user can withdraw ETH from the AuctionHouse\n event AvailableToWithdraw(address indexed owner, uint added, uint total);\n /// @dev event that's emitted when minimal auction duration changes\n event MinimalDurationChanged(uint oldValue, uint newValue);\n\n event MinimalStepChanged(uint oldValue, uint newValue);\n\n function __AuctionHouseBase_init_unchained(\n uint96 _minimalStepBasePoint\n ) internal initializer {\n auctionId = 1;\n minimalDuration = EXTENSION_DURATION;\n minimalStepBasePoint = _minimalStepBasePoint;\n }\n\n /// @dev increments auctionId and returns new value\n function getNextAndIncrementAuctionId() internal returns (uint256) {\n return auctionId++;\n }\n\n function changeMinimalDuration(uint96 newValue) external onlyOwner {\n emit MinimalDurationChanged(minimalDuration, newValue);\n minimalDuration = newValue;\n }\n\n function changeMinimalStep(uint96 newValue) external onlyOwner {\n emit MinimalStepChanged(minimalStepBasePoint, newValue);\n minimalStepBasePoint = newValue;\n }\n\n function transferNFT (\n address token,\n uint tokenId,\n uint value,\n bytes4 assetClass,\n address from,\n address to\n ) internal {\n transfer(\n getSellAsset(\n token,\n tokenId,\n value,\n assetClass\n ),\n from,\n to,\n proxies[assetClass]\n );\n }\n\n function transferBid(\n uint value,\n address token,\n address from,\n address to,\n address proxy\n ) internal {\n transfer(\n getBuyAsset(\n token,\n value\n ),\n from,\n to,\n proxy\n );\n }\n\n function getSellAsset(address token, uint tokenId, uint value, bytes4 assetClass) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n asset.assetType.assetClass = assetClass;\n asset.assetType.data = abi.encode(token, tokenId);\n }\n\n function getBuyAsset(address token, uint value) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n\n if (token == address(0)){\n asset.assetType.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n asset.assetType.assetClass = LibAsset.ERC20_ASSET_CLASS;\n asset.assetType.data = abi.encode(token);\n }\n }\n\n function getPayouts(address maker) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(maker);\n payout[0].value = 10000;\n return payout;\n }\n\n function getOriginFee(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee = new LibPart.Part[](1);\n originFee[0].account = payable(address(data));\n originFee[0].value = uint96(getValueFromData(data));\n return originFee;\n }\n\n function _checkAuctionRangeTime(uint endTime, uint startTime) internal view returns (bool){\n uint currentTime = block.timestamp;\n if (startTime > 0 && startTime > currentTime) {\n return false;\n }\n if (endTime > 0 && endTime <= currentTime){\n return false;\n }\n\n return true;\n }\n\n /// @dev returns true if newAmount is enough for buyOut\n function buyOutVerify(LibAucDataV1.DataV1 memory aucData, uint newAmount) internal pure returns (bool) {\n if (aucData.buyOutPrice > 0 && aucData.buyOutPrice <= newAmount) {\n return true;\n }\n return false;\n }\n\n /// @dev returns true if auction exists, false otherwise\n function _checkAuctionExistence(address seller) internal pure returns (bool){\n return seller != address(0);\n }\n\n /// @dev Used to withdraw faulty bids (bids that failed to return after out-bidding)\n function withdrawFaultyBid(address _to) external {\n address sender = _msgSender();\n uint amount = readyToWithdraw[sender];\n require( amount > 0, \"nothing to withdraw\");\n readyToWithdraw[sender] = 0;\n _to.transferEth(amount);\n }\n\n function _returnBid(\n Bid memory oldBid,\n address buyAsset,\n address oldBuyer,\n address proxy\n ) internal {\n // nothing to return\n if (oldBuyer == address(0)) {\n return;\n }\n if (buyAsset == address(0)) {\n (bool success,) = oldBuyer.call{ value: oldBid.amount }(\"\");\n if (!success) {\n uint currentValueToWithdraw = readyToWithdraw[oldBuyer];\n uint newValueToWithdraw = oldBid.amount.add(currentValueToWithdraw);\n readyToWithdraw[oldBuyer] = newValueToWithdraw;\n emit AvailableToWithdraw(oldBuyer, oldBid.amount, newValueToWithdraw);\n }\n } else {\n transferBid(\n oldBid.amount,\n buyAsset,\n address(this),\n oldBuyer,\n proxy\n );\n }\n }\n\n function _getProxy(address buyAsset) internal view returns(address){\n address proxy;\n if (buyAsset != address(0)){\n proxy = proxies[LibAsset.ERC20_ASSET_CLASS];\n }\n return proxy;\n }\n\n /// @dev check that msg.value more than bid amount with fees and return change\n function checkEthReturnChange(uint totalAmount, address buyer) internal {\n uint msgValue = msg.value;\n require(msgValue >= totalAmount, \"not enough ETH\");\n uint256 change = msgValue.sub(totalAmount);\n if (change > 0) {\n buyer.transferEth(change);\n }\n }\n\n /// @dev returns true if auction in progress, false otherwise\n function checkAuctionInProgress(address seller, uint endTime, uint startTime) internal view{\n require(_checkAuctionExistence(seller) && _checkAuctionRangeTime(endTime, startTime), \"auction is inactive\");\n }\n\n /// @dev reserves new bid and returns the last one if it exists\n function reserveBid(\n address buyAsset,\n address oldBuyer,\n address newBuyer,\n Bid memory oldBid,\n address proxy,\n uint newTotalAmount\n ) internal {\n // return old bid if theres any\n _returnBid(\n oldBid,\n buyAsset,\n oldBuyer,\n proxy\n );\n \n //lock new bid\n transferBid(\n newTotalAmount,\n buyAsset,\n newBuyer,\n address(this),\n proxy\n );\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function _getMinimalNextBid(address buyer, uint96 minimalPrice, uint amount) internal view returns (uint minBid){\n if (buyer == address(0x0)) {\n minBid = minimalPrice;\n } else {\n minBid = amount.add(amount.bp(minimalStepBasePoint));\n }\n }\n\n function getValueFromData(uint data) internal pure returns(uint) {\n return (data >> 160);\n }\n\n uint256[50] private ______gap;\n}" - }, - "@rarible/auction/contracts/libs/LibAucDataV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Auction struct\nlibrary LibAucDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Auction data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n // auction duration\n uint96 duration;\n // auction startTime\n uint96 startTime;\n // auction buyout price\n uint96 buyOutPrice;\n }\n\n /// @dev returns parsed data field of an Auction (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n }\n } else {\n revert(\"wrong auction dataType\");\n }\n }\n}\n\n" - }, - "@rarible/auction/contracts/libs/LibBidDataV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Bid struct\nlibrary LibBidDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Bid data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n }\n\n /// @dev returns parsed data field of a Bid (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n } \n } else {\n revert(\"wrong bid dataType\");\n }\n }\n}\n" - }, - "@rarible/auction/contracts/libs/SafeMathUpgradeable96.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable96 {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint96 a, uint96 b) internal pure returns (uint96) {\n uint96 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint96 a, uint96 b) internal pure returns (uint96) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n}\n" - }, - "@rarible/auction/contracts/wrapper/IMarketWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/**\n * @title IMarketWrapper\n * @author Anna Carroll\n * @notice IMarketWrapper provides a common interface for\n * interacting with NFT auction markets.\n * Contracts can abstract their interactions with\n * different NFT markets using IMarketWrapper.\n * NFT markets can become compatible with any contract\n * using IMarketWrapper by deploying a MarketWrapper contract\n * that implements this interface using the logic of their Market.\n *\n * WARNING: MarketWrapper contracts should NEVER write to storage!\n * When implementing a MarketWrapper, exercise caution; a poorly implemented\n * MarketWrapper contract could permanently lose access to the NFT or user funds.\n */\ninterface IMarketWrapper {\n /**\n * @notice Given the auctionId, nftContract, and tokenId, check that:\n * 1. the auction ID matches the token\n * referred to by tokenId + nftContract\n * 2. the auctionId refers to an *ACTIVE* auction\n * (e.g. an auction that will accept bids)\n * within this market contract\n * 3. any additional validation to ensure that\n * a PartyBid can bid on this auction\n * (ex: if the market allows arbitrary bidding currencies,\n * check that the auction currency is ETH)\n * Note: This function probably should have been named \"isValidAuction\"\n * @dev Called in PartyBid.sol in `initialize` at line 174\n * @return TRUE if the auction is valid\n */\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external view returns (bool);\n\n /**\n * @notice Calculate the minimum next bid for this auction.\n * PartyBid contracts always submit the minimum possible\n * bid that will be accepted by the Market contract.\n * usually, this is either the reserve price (if there are no bids)\n * or a certain percentage increase above the current highest bid\n * @dev Called in PartyBid.sol in `bid` at line 251\n * @return minimum bid amount\n */\n function getMinimumBid(uint256 auctionId) external view returns (uint256);\n\n /**\n * @notice Query the current highest bidder for this auction\n * It is assumed that there is always 1 winning highest bidder for an auction\n * This is used to ensure that PartyBid cannot outbid itself if it is already winning\n * @dev Called in PartyBid.sol in `bid` at line 241\n * @return highest bidder\n */\n function getCurrentHighestBidder(uint256 auctionId)\n external\n view\n returns (address);\n\n /**\n * @notice Submit bid to Market contract\n * @dev Called in PartyBid.sol in `bid` at line 259\n */\n function bid(uint256 auctionId, uint256 bidAmount) external;\n\n /**\n * @notice Determine whether the auction has been finalized\n * Used to check if it is still possible to bid\n * And to determine whether the PartyBid should finalize the auction\n * @dev Called in PartyBid.sol in `bid` at line 247\n * @dev and in `finalize` at line 288\n * @return TRUE if the auction has been finalized\n */\n function isFinalized(uint256 auctionId) external view returns (bool);\n\n /**\n * @notice Finalize the results of the auction\n * on the Market contract\n * It is assumed that this operation is performed once for each auction,\n * that after it is done the auction is over and the NFT has been\n * transferred to the auction winner.\n * @dev Called in PartyBid.sol in `finalize` at line 289\n */\n function finalize(uint256 auctionId) external;\n}" - }, - "@rarible/auction/contracts/wrapper/TokenToAuction.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/// @dev contract to add tokenToAuctionId functionality to auctionHouse\ncontract TokenToAuction {\n /// @dev mapping to store auction ids for token address + token id (only stores erc-721 tokens)\n mapping(address => mapping(uint256 => uint256)) private tokenToAuctionId;\n\n /// @dev returns auction id by token address and token id\n function getAuctionByToken(address _collection, uint tokenId) external view returns(uint) {\n return tokenToAuctionId[_collection][tokenId];\n }\n\n /// @dev sets auction id for token address and token id\n function setAuctionForToken(address token, uint tokenId, uint auctionId) internal {\n tokenToAuctionId[token][tokenId] = auctionId;\n }\n\n /// @dev deletes auctionId from tokenToAuctionId\n function deleteAuctionForToken(address token, uint tokenId) internal {\n delete tokenToAuctionId[token][tokenId];\n }\n \n uint256[50] private ______gap;\n}" - }, - "@rarible/auction/contracts/wrapper/Wrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\nimport \"./IMarketWrapper.sol\";\nimport \"../721/AuctionHouse721.sol\";\n\ncontract Wrapper is IMarketWrapper{\n\n AuctionHouse721 internal immutable auction;\n\n constructor(address _auction) {\n auction = AuctionHouse721(_auction);\n }\n\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external override view returns (bool){\n return auctionId == auction. getAuctionByToken(nftContract, tokenId);\n }\n\n function getMinimumBid(uint256 auctionId) external override view returns (uint256){\n return auction.getMinimalNextBid(auctionId);\n }\n\n function getCurrentHighestBidder(uint256 auctionId)\n external\n override\n view\n returns (address){\n return auction.getCurrentBuyer(auctionId);\n }\n\n function bid(uint256 auctionId, uint256 bidAmount) external override{\n (bool success, bytes memory returnData) =\n address(auction).call{value: bidAmount}(\n abi.encodeWithSignature(\"putBidWrapper(uint256)\", auctionId)\n );\n require(success, string(returnData));\n }\n\n function isFinalized(uint256 auctionId) external override view returns (bool){\n return !auction.checkAuctionExistence(auctionId);\n }\n\n function finalize(uint256 auctionId) external override{\n auction.finishAuction(auctionId);\n }\n}" - }, - "@rarible/custom-matchers/contracts/AssetMatcherCollection.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\n/*\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\n */\ncontract AssetMatcherCollection is IAssetMatcher {\n\n bytes constant EMPTY = \"\";\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\n if (\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\n ) {\n (address leftToken) = abi.decode(leftAssetType.data, (address));\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\n if (leftToken == rightToken) {\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\n }\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n}" - }, - "@rarible/exchange-interfaces/contracts/IAssetMatcher.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface IAssetMatcher {\n function matchAssets(\n LibAsset.AssetType memory leftAssetType,\n LibAsset.AssetType memory rightAssetType\n ) external view returns (LibAsset.AssetType memory);\n}\n" - }, - "@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface ICryptoPunksMarket {\n //to get address punk owner from mapping (uint => address) public punkIndexToAddress;\n function punkIndexToAddress(uint key) external returns (address);\n\n function buyPunk(uint punkIndex) payable external;\n\n function transferPunk(address to, uint punkIndex) external;\n\n function offerPunkForSaleToAddress(uint punkIndex, uint minSalePriceInWei, address toAddress) external;\n}" - }, - "@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\ninterface IERC20TransferProxy {\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\n}\n" - }, - "@rarible/exchange-interfaces/contracts/INftTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\ninterface INftTransferProxy {\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n}\n" - }, - "@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\n}\n" - }, - "@rarible/exchange-interfaces/contracts/ITransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" - }, - "@rarible/exchange-v2/contracts/AssetMatcher.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" - }, - "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/ExchangeV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n require(newFill.rightValue > 0 && newFill.leftValue > 0, \"nothing to fill\");\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibDirectTransfer { //LibDirectTransfers\n /*All buy parameters need for create buyOrder and sellOrder*/\n struct Purchase {\n address sellOrderMaker; //\n uint256 sellOrderNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 sellOrderPaymentAmount;\n address paymentToken;\n uint256 sellOrderSalt;\n uint sellOrderStart;\n uint sellOrderEnd;\n bytes4 sellOrderDataType;\n bytes sellOrderData;\n bytes sellOrderSignature;\n\n uint256 buyOrderPaymentAmount;\n uint256 buyOrderNftAmount;\n bytes buyOrderData;\n }\n\n /*All accept bid parameters need for create buyOrder and sellOrder*/\n struct AcceptBid {\n address bidMaker; //\n uint256 bidNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 bidPaymentAmount;\n address paymentToken;\n uint256 bidSalt;\n uint bidStart;\n uint bidEnd;\n bytes4 bidDataType;\n bytes bidData;\n bytes bidSignature;\n\n uint256 sellOrderPaymentAmount;\n uint256 sellOrderNftAmount;\n bytes sellOrderData;\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibFill.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibMath.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary LibMath {\n using SafeMathUpgradeable for uint;\n\n /// @dev Calculates partial value given a numerator and denominator rounded down.\n /// Reverts if rounding error is >= 0.1%\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return partialAmount value of target rounded down.\n function safeGetPartialAmountFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorFloor(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding down.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // The absolute rounding error is the difference between the rounded\n // value and the ideal value. The relative rounding error is the\n // absolute rounding error divided by the absolute value of the\n // ideal value. This is undefined when the ideal value is zero.\n //\n // The ideal value is `numerator * target / denominator`.\n // Let's call `numerator * target % denominator` the remainder.\n // The absolute error is `remainder / denominator`.\n //\n // When the ideal value is zero, we require the absolute error to\n // be zero. Fortunately, this is always the case. The ideal value is\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\n // remainder and absolute error are also zero.\n if (target == 0 || numerator == 0) {\n return false;\n }\n\n // Otherwise, we want the relative rounding error to be strictly\n // less than 0.1%.\n // The relative error is `remainder / (numerator * target)`.\n // We want the relative error less than 1 / 1000:\n // remainder / (numerator * target) < 1 / 1000\n // or equivalently:\n // 1000 * remainder < numerator * target\n // so we have a rounding error iff:\n // 1000 * remainder >= numerator * target\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n isError = remainder.mul(1000) >= numerator.mul(target);\n }\n\n function safeGetPartialAmountCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorCeil(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding up.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // See the comments in `isRoundingError`.\n if (target == 0 || numerator == 0) {\n // When either is zero, the ideal value and rounded value are zero\n // and there is no rounding error. (Although the relative error\n // is undefined.)\n return false;\n }\n // Compute remainder as before\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n remainder = denominator.sub(remainder) % denominator;\n isError = remainder.mul(1000) >= numerator.mul(target);\n return isError;\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrder.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nimport \"./LibMath.sol\";\nimport \"./LibOrderDataV3.sol\";\nimport \"./LibOrderDataV2.sol\";\nimport \"./LibOrderDataV1.sol\";\n\nlibrary LibOrder {\n using SafeMathUpgradeable for uint;\n\n bytes32 constant ORDER_TYPEHASH = keccak256(\n \"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\n\n struct Order {\n address maker;\n LibAsset.Asset makeAsset;\n address taker;\n LibAsset.Asset takeAsset;\n uint salt;\n uint start;\n uint end;\n bytes4 dataType;\n bytes data;\n }\n\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\n if (isMakeFill){\n makeValue = order.makeAsset.value.sub(fill);\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\n } else {\n takeValue = order.takeAsset.value.sub(fill);\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \n } \n }\n\n function hashKey(Order memory order) internal pure returns (bytes32) {\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt\n ));\n } else {\n //order.data is in hash for V2, V3 and all new order\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt,\n order.data\n ));\n }\n }\n\n function hash(Order memory order) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ORDER_TYPEHASH,\n order.maker,\n LibAsset.hash(order.makeAsset),\n order.taker,\n LibAsset.hash(order.takeAsset),\n order.salt,\n order.start,\n order.end,\n order.dataType,\n keccak256(order.data)\n ));\n }\n\n function validateOrderTime(LibOrder.Order memory order) internal view {\n require(order.start == 0 || order.start < block.timestamp, \"Order start validation failed\");\n require(order.end == 0 || order.end > block.timestamp, \"Order end validation failed\");\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderData.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibOrderData {\n\n struct GenericOrderData {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n } \n\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\n if (order.dataType == LibOrderDataV1.V1) {\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n } else if (order.dataType == LibOrderDataV2.V2) {\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n dataOrder.isMakeFill = data.isMakeFill;\n } else if (order.dataType == 0xffffffff) {\n } else {\n revert(\"Unknown Order data type\");\n }\n if (dataOrder.payouts.length == 0) {\n dataOrder.payouts = payoutSet(order.maker);\n }\n }\n\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(orderAddress);\n payout[0].value = 10000;\n return payout;\n }\n\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee;\n\n if (dataFirst > 0 && dataSecond > 0){\n originFee = new LibPart.Part[](2);\n\n originFee[0] = uintToLibPart(dataFirst);\n originFee[1] = uintToLibPart(dataSecond);\n }\n\n if (dataFirst > 0 && dataSecond == 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataFirst);\n }\n\n if (dataFirst == 0 && dataSecond > 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataSecond);\n }\n\n return originFee;\n }\n\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payouts;\n\n if (data > 0) {\n payouts = new LibPart.Part[](1);\n payouts[0] = uintToLibPart(data);\n }\n\n return payouts;\n }\n\n /**\n @notice converts uint to LibPart.Part\n @param data address and value encoded in uint (first 12 bytes )\n @return result LibPart.Part \n */\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\n if (data > 0){\n result.account = payable(address(data));\n result.value = uint96(data >> 160);\n }\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n struct DataV1 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV2 {\n bytes4 constant public V2 = bytes4(keccak256(\"V2\"));\n\n struct DataV2 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\n/// @dev deprecated\nlibrary LibOrderDataV3 {\n bytes4 constant public V3_SELL = bytes4(keccak256(\"V3_SELL\"));\n bytes4 constant public V3_BUY = bytes4(keccak256(\"V3_BUY\"));\n\n struct DataV3_SELL {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n uint maxFeesBasePoint;\n bytes32 marketplaceMarker;\n }\n\n struct DataV3_BUY {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n bytes32 marketplaceMarker;\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/OrderValidator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./libraries/LibOrder.sol\";\n\nimport \"@rarible/lib-signature/contracts/IERC1271.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\n\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\n using LibSignature for bytes32;\n using AddressUpgradeable for address;\n \n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function __OrderValidator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Exchange\", \"2\");\n }\n\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\n if (order.salt == 0) {\n if (order.maker != address(0)) {\n require(_msgSender() == order.maker, \"maker is not tx sender\");\n }\n } else {\n if (_msgSender() != order.maker) {\n bytes32 hash = LibOrder.hash(order);\n // if maker is contract checking ERC1271 signature\n if (order.maker.isContract()) {\n require(\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\n \"contract order signature verification error\"\n );\n } else {\n // if maker is not contract then checking ECDSA signature\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\n revert(\"order signature verification error\");\n } else {\n require (order.maker != address(0), \"no maker\");\n }\n }\n }\n }\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../../contracts/ExchangeV2.sol\";\n\ncontract RaribleTestHelper {\n function encode(LibOrderDataV1.DataV1 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV2(LibOrderDataV2.DataV2 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_SELL(LibOrderDataV3.DataV3_SELL memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_BUY(LibOrderDataV3.DataV3_BUY memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value)\n external\n pure\n returns (uint256)\n {\n return (uint256(value) << 160) + uint256(account);\n }\n\n function hashKey(LibOrder.Order calldata order)\n external\n pure\n returns (bytes32)\n {\n return LibOrder.hashKey(order);\n }\n\n function hashV2(\n address maker,\n LibAsset.Asset memory makeAsset,\n LibAsset.Asset memory takeAsset,\n uint256 salt,\n bytes memory data\n ) public pure returns (bytes32) {\n return\n keccak256(\n abi.encode(\n maker,\n LibAsset.hash(makeAsset.assetType),\n LibAsset.hash(takeAsset.assetType),\n salt,\n data\n )\n );\n }\n\n function encodeLazy721(LibERC721LazyMint.Mint721Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n function encodeLazy1155(LibERC1155LazyMint.Mint1155Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n}\n" - }, - "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n\ninterface IBlur {\n enum Side { Buy, Sell }\n enum SignatureVersion { Single, Bulk }\n enum AssetType { ERC721, ERC1155 }\n\n struct Fee {\n uint16 rate;\n address payable recipient;\n }\n \n struct Order {\n address trader;\n Side side;\n address matchingPolicy;\n address collection;\n uint256 tokenId;\n uint256 amount;\n address paymentToken;\n uint256 price;\n uint256 listingTime;\n /* Order expiration timestamp - 0 for oracle cancellations. */\n uint256 expirationTime;\n Fee[] fees;\n uint256 salt;\n bytes extraParams;\n }\n\n struct Input {\n Order order;\n uint8 v;\n bytes32 r;\n bytes32 s;\n bytes extraSignature;\n SignatureVersion signatureVersion;\n uint256 blockNumber;\n }\n\n function execute(Input calldata sell, Input calldata buy)\n external\n payable;\n}\n" - }, - "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\n\ninterface IExchangeV2 {\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable;\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable;\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../libraries/LibLooksRare.sol\";\n\ninterface ILooksRare {\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\n\n /**\n * @notice This function allows a user to execute a taker bid (against a maker ask).\n * @param takerBid Taker bid struct\n * @param makerAsk Maker ask struct\n * @param makerSignature Maker signature\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\n * @param affiliate Affiliate address\n */\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\n}\n" - }, - "@rarible/exchange-wrapper/contracts/interfaces/ILSSVMRouter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\ninterface ILSSVMRouter {\n struct PairSwapSpecific {\n address pair;\n uint256[] nftIds;\n }\n\n /**\n @notice Swaps ETH into specific NFTs using multiple pairs.\n @param swapList The list of pairs to trade with and the IDs of the NFTs to buy from each.\n @param ethRecipient The address that will receive the unspent ETH input\n @param nftRecipient The address that will receive the NFT output\n @param deadline The Unix timestamp (in seconds) at/after which the swap will revert\n @return remainingValue The unspent ETH amount\n */\n function swapETHForSpecificNFTs(\n PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n )\n external\n payable\n returns (uint256 remainingValue);\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"../libraries/LibSeaPort.sol\";\n\ninterface ISeaPort {\n function fulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder calldata advancedOrder,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n bytes32 fulfillerConduitKey,\n address recipient\n ) external payable returns (bool fulfilled);\n\n function fulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\n bytes32 fulfillerConduitKey,\n address recipient,\n uint256 maximumFulfilled\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\n\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\n external\n payable\n returns (bool fulfilled);\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface IWyvernExchange {\n function atomicMatch_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n\n enum Side {\n Buy,\n Sell\n }\n\n enum SaleKind {\n FixedPrice,\n DutchAuction\n }\n\n function calculateFinalPrice(\n Side side,\n SaleKind saleKind,\n uint256 basePrice,\n uint256 extra,\n uint256 listingTime,\n uint256 expirationTime\n ) external view returns (uint256);\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface Ix2y2 {\n\n struct OrderItem {\n uint256 price;\n bytes data;\n }\n\n struct Pair721 {\n address token;\n uint256 tokenId;\n }\n\n struct Pair1155 {\n address token;\n uint256 tokenId;\n uint256 amount;\n }\n\n struct Order {\n uint256 salt;\n address user;\n uint256 network;\n uint256 intent;\n uint256 delegateType;\n uint256 deadline;\n address currency;\n bytes dataMask;\n OrderItem[] items;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n uint8 signVersion;\n }\n\n struct Fee {\n uint256 percentage;\n address to;\n }\n\n struct SettleDetail {\n Op op;\n uint256 orderIdx;\n uint256 itemIdx;\n uint256 price;\n bytes32 itemHash;\n address executionDelegate;\n bytes dataReplacement;\n uint256 bidIncentivePct;\n uint256 aucMinIncrementPct;\n uint256 aucIncDurationSecs;\n Fee[] fees;\n }\n\n struct SettleShared {\n uint256 salt;\n uint256 deadline;\n uint256 amountToEth;\n uint256 amountToWeth;\n address user;\n bool canFail;\n }\n\n struct RunInput {\n Order[] orders;\n SettleDetail[] details;\n SettleShared shared;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n }\n\n enum Op {\n INVALID,\n // off-chain\n COMPLETE_SELL_OFFER,\n COMPLETE_BUY_OFFER,\n CANCEL_OFFER,\n // auction\n BID,\n COMPLETE_AUCTION,\n REFUND_AUCTION,\n REFUND_AUCTION_STUCK_ITEM\n }\n\n function run(RunInput memory input) external payable;\n}" - }, - "@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\nabstract contract IsPausable is Ownable {\n bool public paused;\n\n event Paused(bool paused);\n\n function pause(bool _paused) external onlyOwner {\n paused = _paused;\n emit Paused(_paused);\n }\n\n function requireNotPaused() internal view {\n require (!paused, \"the contract is paused\");\n }\n\n}\n" - }, - "@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibLooksRare {\n struct MakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address signer; // signer of the maker order\n address collection; // collection address\n uint256 price; // price (used as )\n uint256 tokenId; // id of the token\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\n address currency; // currency (e.g., WETH)\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\n uint256 startTime; // startTime in timestamp\n uint256 endTime; // endTime in timestamp\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // additional parameters\n uint8 v; // v: parameter (27 or 28)\n bytes32 r; // r: parameter\n bytes32 s; // s: parameter\n }\n\n struct TakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address taker; // msg.sender\n uint256 price; // final price for the purchase\n uint256 tokenId;\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // other params (e.g., tokenId)\n }\n\n /**\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\n */\n enum CollectionType {\n ERC721,\n ERC1155\n }\n\n /**\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\n */\n enum QuoteType {\n Bid,\n Ask\n }\n /**\n * 1. Maker struct\n */\n\n /**\n * @notice Maker is the struct for a maker order.\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\n * @param globalNonce Global user order nonce for maker orders\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\n * @param strategyId Strategy id\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\n * @param collection Collection address\n * @param currency Currency address (@dev address(0) = ETH)\n * @param signer Signer address\n * @param startTime Start timestamp\n * @param endTime End timestamp\n * @param price Minimum price for maker ask, maximum price for maker bid\n * @param itemIds Array of itemIds\n * @param amounts Array of amounts\n * @param additionalParameters Extra data specific for the order\n */\n struct Maker {\n QuoteType quoteType;\n uint256 globalNonce;\n uint256 subsetNonce;\n uint256 orderNonce;\n uint256 strategyId;\n CollectionType collectionType;\n address collection;\n address currency;\n address signer;\n uint256 startTime;\n uint256 endTime;\n uint256 price;\n uint256[] itemIds;\n uint256[] amounts;\n bytes additionalParameters;\n }\n\n /**\n * 2. Taker struct\n */\n\n /**\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\n * @param additionalParameters Extra data specific for the order\n */\n struct Taker {\n address recipient;\n bytes additionalParameters;\n }\n\n /**\n * 3. Merkle tree struct\n */\n\n enum MerkleTreeNodePosition {\n Left,\n Right\n }\n\n /**\n * @notice MerkleTreeNode is a MerkleTree's node.\n * @param value It can be an order hash or a proof\n * @param position The node's position in its branch.\n * It can be left or right or none\n * (before the tree is sorted).\n */\n struct MerkleTreeNode {\n bytes32 value;\n MerkleTreeNodePosition position;\n }\n\n /**\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\n * @dev A Merkle tree can be computed with order hashes.\n * It can contain order hashes from both maker bid and maker ask structs.\n * @param root Merkle root\n * @param proof Array containing the merkle proof\n */\n struct MerkleTree {\n bytes32 root;\n MerkleTreeNode[] proof;\n }\n}\n" - }, - "@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" - }, - "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,\n WyvernExchange,\n SeaPort_1_1,\n X2Y2,\n LooksRareOrders,\n SudoSwap,\n SeaPort_1_4,\n LooksRareV2,\n Blur,\n SeaPort_1_5\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[10] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" - }, - "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" - }, - "@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"./LibERC1155LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC1155LazyMint is IERC1155Upgradeable {\n\n event Supply(\n uint256 tokenId,\n uint256 value\n );\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC1155LazyMint.Mint1155Data memory data,\n address to,\n uint256 _amount\n ) external;\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) external;\n}\n" - }, - "@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC1155LazyMint {\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC1155_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\n\n struct Mint1155Data {\n uint tokenId;\n string tokenURI;\n uint supply;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n data.supply,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n}\n" - }, - "@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"./LibERC721LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC721LazyMint is IERC721Upgradeable {\n\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external;\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external;\n}\n" - }, - "@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC721LazyMint {\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC721_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\n\n struct Mint721Data {\n uint tokenId;\n string tokenURI;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n\n}\n" - }, - "@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/erc-721/IERC721LazyMint.sol\";\n\ncontract ERC721LazyMintTest is IERC721LazyMint, ERC721Upgradeable {\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external override {\n _mint(to, data.tokenId);\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external override {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n this.mintAndTransfer(data, to);\n }\n }\n\n function encode(LibERC721LazyMint.Mint721Data memory data)\n external\n view\n returns (bytes memory)\n {\n return abi.encode(address(this), data);\n }\n}\n" - }, - "@rarible/lib-asset/contracts/LibAsset.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibAsset {\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\"ETH\"));\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\"ERC20\"));\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\"ERC721\"));\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\"ERC1155\"));\n bytes4 constant public COLLECTION = bytes4(keccak256(\"COLLECTION\"));\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\"CRYPTO_PUNKS\"));\n\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\n \"AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes32 constant ASSET_TYPEHASH = keccak256(\n \"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n struct AssetType {\n bytes4 assetClass;\n bytes data;\n }\n\n struct Asset {\n AssetType assetType;\n uint value;\n }\n\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPE_TYPEHASH,\n assetType.assetClass,\n keccak256(assetType.data)\n ));\n }\n\n function hash(Asset memory asset) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPEHASH,\n hash(asset.assetType),\n asset.value\n ));\n }\n\n}\n" - }, - "@rarible/lib-bp/contracts/BpLibrary.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary BpLibrary {\n using SafeMathUpgradeable for uint;\n\n function bp(uint value, uint bpValue) internal pure returns (uint) {\n return value.mul(bpValue).div(10000);\n }\n}\n" - }, - "@rarible/lib-part/contracts/LibPart.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibPart {\n bytes32 public constant TYPE_HASH = keccak256(\"Part(address account,uint96 value)\");\n\n struct Part {\n address payable account;\n uint96 value;\n }\n\n function hash(Part memory part) internal pure returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\n }\n}\n" - }, - "@rarible/lib-signature/contracts/ERC1271.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nabstract contract ERC1271 {\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\n\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\n\n /**\n * @dev Function must be implemented by deriving contract\n * @param _hash Arbitrary length data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\n *\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\n\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\n }\n}" - }, - "@rarible/lib-signature/contracts/IERC1271.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ninterface IERC1271 {\n\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param _hash Hash of the data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n *\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\n}" - }, - "@rarible/lib-signature/contracts/LibSignature.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nlibrary LibSignature {\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature)\n internal\n pure\n returns (address)\n {\n // Check the signature length\n if (signature.length != 65) {\n revert(\"ECDSA: invalid signature length\");\n }\n\n // Divide the signature in r, s and v variables\n bytes32 r;\n bytes32 s;\n uint8 v;\n\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n // solhint-disable-next-line no-inline-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n\n return recover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n require(\n uint256(s) <=\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\n \"ECDSA: invalid signature 's' value\"\n );\n\n // If the signature is valid (and not malleable), return the signer address\n // v > 30 is a special case, we need to adjust hash with \"\\x19Ethereum Signed Message:\\n32\"\n // and v = v - 4\n address signer;\n if (v > 30) {\n require(\n v - 4 == 27 || v - 4 == 28,\n \"ECDSA: invalid signature 'v' value\"\n );\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\n } else {\n require(v == 27 || v == 28, \"ECDSA: invalid signature 'v' value\");\n signer = ecrecover(hash, v, r, s);\n }\n\n require(signer != address(0), \"ECDSA: invalid signature\");\n\n return signer;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * replicates the behavior of the\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n * JSON-RPC method.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash)\n internal\n pure\n returns (bytes32)\n {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return\n keccak256(\n abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash)\n );\n }\n}\n" - }, - "@rarible/meta-tx/contracts/EIP712MetaTransaction.sol": { - "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" - }, - "@rarible/role-operator/contracts/OperatorRole.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocksV2.sol\";\n\ncontract RoyaltiesProviderArtBlocksV2 is IRoyaltiesProvider {\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n RoyaltyArtBlocksV2 artBlocksV2 = RoyaltyArtBlocksV2(token);\n\n (address payable[] memory recipients, uint256[] memory bps) = artBlocksV2.getRoyalties(tokenId);\n \n uint256 len = recipients.length;\n\n LibPart.Part[] memory result = new LibPart.Part[](len);\n \n for (uint i = 0; i < len; i++) {\n result[i].account = recipients[i];\n result[i].value = uint96(bps[i]);\n }\n\n return result;\n }\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyV2Legacy.sol\";\n\ncontract RoyaltiesProviderV2Legacy is IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n return RoyaltyV2Legacy(token).getRoyalties(tokenId);\n }\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocks.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocks {\n \n function getRoyaltyData(uint256 _tokenId) external virtual view returns (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID);\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocksV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocksV2 {\n \n /**\n * @notice Gets royalty Basis Points (BPS) for token ID `_tokenId`.\n * This conforms to the IManifold interface designated in the Royalty\n * Registry's RoyaltyEngineV1.sol contract.\n * ref: https://github.com/manifoldxyz/royalty-registry-solidity\n * @param _tokenId Token ID to be queried.\n * @return recipients Array of royalty payment recipients\n * @return bps Array of Basis Points (BPS) allocated to each recipient,\n * aligned by index.\n * @dev reverts if invalid _tokenId\n * @dev only returns recipients that have a non-zero BPS allocation\n */\n function getRoyalties(uint256 _tokenId) \n external \n view\n virtual\n returns (\n address payable[] memory recipients, \n uint256[] memory bps\n );\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltyV2Legacy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" - }, - "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" - }, - "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" - }, - "@rarible/royalties/contracts/IERC2981.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n///\n/// @dev Interface for the NFT Royalty Standard\n///\n//interface IERC2981 is IERC165 {\ninterface IERC2981 {\n /// ERC165 bytes to add to interface array - set in parent contract\n /// implementing this standard\n ///\n /// bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n /// _registerInterface(_INTERFACE_ID_ERC2981);\n\n /// @notice Called with the sale price to determine how much royalty\n // is owed and to whom.\n /// @param _tokenId - the NFT asset queried for royalty information\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\n /// @return receiver - address of who should be sent the royalty payment\n /// @return royaltyAmount - the royalty payment amount for _salePrice\n function royaltyInfo(\n uint256 _tokenId,\n uint256 _salePrice\n ) external view returns (\n address receiver,\n uint256 royaltyAmount\n );\n}" - }, - "@rarible/royalties/contracts/impl/AbstractRoyalties.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract AbstractRoyalties {\n mapping (uint256 => LibPart.Part[]) internal royalties;\n\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\n uint256 totalValue;\n for (uint i = 0; i < _royalties.length; ++i) {\n require(_royalties[i].account != address(0x0), \"Recipient should be present\");\n require(_royalties[i].value != 0, \"Royalty value should be positive\");\n totalValue += _royalties[i].value;\n royalties[id].push(_royalties[i]);\n }\n require(totalValue < 10000, \"Royalty total value should be < 10000\");\n _onRoyaltiesSet(id, _royalties);\n }\n\n function _updateAccount(uint256 _id, address _from, address _to) internal {\n uint length = royalties[_id].length;\n for(uint i = 0; i < length; ++i) {\n if (royalties[_id][i].account == _from) {\n royalties[_id][i].account = payable(address(uint160(_to)));\n }\n }\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\n}\n" - }, - "@rarible/royalties/contracts/impl/RoyaltiesV1Impl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV1.sol\";\n\ncontract RoyaltiesV1Impl is AbstractRoyalties, RoyaltiesV1 {\n\n function getFeeRecipients(uint256 id) public override view returns (address payable[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n address payable[] memory result = new address payable[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = address(uint160(_royalties[i].account));\n }\n return result;\n }\n\n function getFeeBps(uint256 id) public override view returns (uint[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n uint[] memory result = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = _royalties[i].value;\n }\n return result;\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n address[] memory recipients = new address[](_royalties.length);\n uint[] memory bps = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n recipients[i] = _royalties[i].account;\n bps[i] = _royalties[i].value;\n }\n emit SecondarySaleFees(id, recipients, bps);\n }\n}\n" - }, - "@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV2.sol\";\nimport \"../IERC2981.sol\";\nimport \"../LibRoyalties2981.sol\";\n\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\n\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\n return royalties[id];\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n emit RoyaltiesSet(id, _royalties);\n }\n\n /*\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\n */\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\n if (royalties[id].length == 0) {\n receiver = address(0);\n royaltyAmount = 0;\n return(receiver, royaltyAmount);\n }\n LibPart.Part[] memory _royalties = royalties[id];\n receiver = _royalties[0].account;\n uint percent;\n for (uint i = 0; i < _royalties.length; ++i) {\n percent += _royalties[i].value;\n }\n //don`t need require(percent < 10000, \"Token royalty > 100%\"); here, because check later in calculateRoyalties\n royaltyAmount = percent * _salePrice / 10000;\n }\n}\n" - }, - "@rarible/royalties/contracts/LibRoyalties2981.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibRoyalties2981 {\n /*\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\n uint96 constant _WEIGHT_VALUE = 1000000;\n\n /*Method for converting amount to percent and forming LibPart*/\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\n LibPart.Part[] memory result;\n if (amount == 0) {\n return result;\n }\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\n require(percent < 10000, \"Royalties 2981 exceeds 100%\");\n result = new LibPart.Part[](1);\n result[0].account = payable(to);\n result[0].value = uint96(percent);\n return result;\n }\n}\n" - }, - "@rarible/royalties/contracts/LibRoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV1 {\n /*\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\n *\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\n */\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\n}\n" - }, - "@rarible/royalties/contracts/LibRoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV2 {\n /*\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\n}\n" - }, - "@rarible/royalties/contracts/RoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\ninterface RoyaltiesV1 {\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\n\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\n function getFeeBps(uint256 id) external view returns (uint[] memory);\n}\n" - }, - "@rarible/royalties/contracts/RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltiesV2 {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" - }, - "@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC1155RoyaltiesV2 is RoyaltiesV2Impl, ERC1155Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, uint amount, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId, amount, \"\");\n _saveRoyalties(tokenId, _fees);\n }\n}\n" - }, - "@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV1Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV1.sol\";\n\ncontract TestERC721RoyaltiesV1 is RoyaltiesV1Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV1._INTERFACE_ID_FEES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" - }, - "@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC721RoyaltiesV2 is RoyaltiesV2Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" - }, - "@rarible/test/contracts/TestERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\n\ncontract TestERC1155 is ERC1155, Pausable {\n constructor() ERC1155(\"uri\"){\n\n }\n\n function mint(address to, uint tokenId, uint amount) external {\n _mint(to, tokenId, amount, \"\");\n }\n\n function batchSafeTransferFrom(\n address[] memory froms,\n address[] memory tos,\n uint256[] memory ids,\n uint256[] memory amounts\n ) external {\n require(froms.length == tos.length, \"wrong length 1\");\n require(tos.length == ids.length, \"wrong length 2\");\n require(ids.length == amounts.length, \"wrong length 3\");\n\n for (uint i = 0; i < froms.length; i ++) {\n safeTransferFrom(froms[i], tos[i], ids[i], amounts[i], \"\");\n }\n }\n\n function emitPauseEvent(bool paused) external {\n if (paused) {\n emit Paused(address(0));\n } else {\n emit Unpaused(address(0));\n }\n }\n}\n" - }, - "@rarible/test/contracts/TestERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\n\ncontract TestERC20 is ERC20Upgradeable {\n function mint(address to, uint amount) external {\n _mint(to, amount);\n }\n\n function init() external {\n __ERC20_init(\"TestERC20\", \"TE20\");\n }\n}\n" - }, - "@rarible/test/contracts/TestERC721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\n\ncontract TestERC721 is ERC721Upgradeable {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" - }, - "@rarible/tokens/contracts/access/MinterAccessControl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" - }, - "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n\n uint256[50] private __gap;\n}" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\n\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\n using StringsUpgradeable for uint256;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _clearMetadata(uint256 tokenId) internal override virtual {\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n uint256[50] private __gap;\n}" - }, - "@rarible/tokens/contracts/erc-721/ERC721Base.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeable.sol\";\nimport \"./ERC721DefaultApproval.sol\";\nimport \"./ERC721Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721Base is OwnableUpgradeable, ERC721DefaultApproval, ERC721BurnableUpgradeable, ERC721Lazy, HasContractURI {\n\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721Upgradeable, ERC721DefaultApproval) view returns (bool) {\n return ERC721DefaultApproval._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApproval, ERC721Upgradeable, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApproval.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721Lazy) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function _mint(address to, uint256 tokenId) internal override(ERC721Lazy, ERC721Upgradeable) {\n super._mint(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721BurnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721Upgradeable.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeable is Initializable, ContextUpgradeable, ERC721Upgradeable {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721DefaultApproval.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721Upgradeable.sol\";\n\nabstract contract ERC721DefaultApproval is ERC721Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721Lazy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\n\nabstract contract ERC721Lazy is IERC721LazyMint, ERC721Upgradeable, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _mint(address to, uint256 tokenId) internal virtual override {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burned(tokenId), \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721Rarible.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Base.sol\";\n\ncontract ERC721Rarible is ERC721Base {\n\n event CreateERC721Rarible(address owner, string name, string symbol);\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external initializer {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/HasContractURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/IsPrivateCollection.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" - }, - "@rarible/tokens/contracts/LibURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibURI {\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\n function checkPrefix(string memory base, string memory _tokenURI)\n internal\n pure\n returns (string memory)\n {\n bytes memory whatBytes = bytes(base);\n bytes memory whereBytes = bytes(_tokenURI);\n\n if (whatBytes.length > whereBytes.length) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n\n for (uint256 j = 0; j < whatBytes.length; j++) {\n if (whereBytes[j] != whatBytes[j]) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n }\n\n return _tokenURI;\n }\n}\n" - }, - "@rarible/tokens/contracts/Mint721Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\n\ncontract Mint721Validator is ERC1271Validator {\n function __Mint721Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint721\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nabstract contract ITransferExecutor {\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal virtual;\n}\n" - }, - "@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../lib/LibDeal.sol\";\nimport \"./ITransferExecutor.sol\";\n\nabstract contract ITransferManager is ITransferExecutor {\n\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\n}" - }, - "@rarible/transfer-manager/contracts/lib/LibDeal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\nimport \"./LibFeeSide.sol\";\n\nlibrary LibDeal {\n struct DealSide {\n LibAsset.Asset asset;\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n address proxy;\n address from;\n }\n}\n" - }, - "@rarible/transfer-manager/contracts/lib/LibFeeSide.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibFeeSide {\n\n enum FeeSide {NONE, LEFT, RIGHT}\n\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n return FeeSide.NONE;\n }\n}\n" - }, - "@rarible/transfer-manager/contracts/lib/LibTransfer.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibTransfer {\n function transferEth(address to, uint value) internal {\n (bool success,) = to.call{ value: value }(\"\");\n require(success, \"transfer failed\");\n }\n}\n" - }, - "@rarible/transfer-manager/contracts/RaribleTransferManager.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n ProtocolFeeData memory _protocolFee,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param _protocolFee protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n ProtocolFeeData memory _protocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = _protocolFee.buyerAmount;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" - }, - "@rarible/transfer-manager/contracts/TransferExecutor.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" - }, - "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract PunkTransferProxy is OperatorRole, ITransferProxy {\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, uint punkIndex) = abi.decode(asset.assetType.data, (address, uint));\n ICryptoPunksMarket punkToken = ICryptoPunksMarket(token);\n //check punk from real owner\n require(punkToken.punkIndexToAddress(punkIndex) == from, \"Seller not punk owner\");\n //buy punk to proxy, now proxy is owner\n punkToken.buyPunk(punkIndex);\n //Transfer ownership of a punk to buyer\n punkToken.transferPunk(to, punkIndex);\n }\n}" - }, - "src/AssetMatchersImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { AssetMatcherCollection } from \"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\";\n" - }, - "src/Auction.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {AuctionHouse1155} from \"@rarible/auction/contracts/1155/AuctionHouse1155.sol\";\nimport {AuctionHouse721} from \"@rarible/auction/contracts/721/AuctionHouse721.sol\";\nimport {Wrapper} from \"@rarible/auction/contracts/wrapper/Wrapper.sol\";" - }, - "src/ExchangeV2Import.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ExchangeV2} from \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {ExchangeMetaV2} from \"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\";" - }, - "src/ExchangeWrapperImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" - }, - "src/RaribleExchangeWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {RaribleExchangeWrapper} from \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" - }, - "src/RoyaltiesRegistryImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {RoyaltiesProviderV2Legacy} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol\";\nimport {RoyaltiesProviderArtBlocks} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol\";\nimport {RoyaltiesProviderArtBlocksV2} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol\";\n" - }, - "src/TokensImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\n//tokens 721\nimport {ERC721Rarible} from \"@rarible/tokens/contracts/erc-721/ERC721Rarible.sol\";\nimport {ERC721RaribleMinimal} from \"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport {ERC721RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\";\n\n//tokens 1155\nimport {ERC1155Rarible} from \"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\";\nimport {ERC1155RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\";\n\n//meta tokens\nimport {ERC721RaribleMeta} from \"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\";\nimport {ERC1155RaribleMeta} from \"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\";\n\n//beacons\nimport {ERC1155RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\";\nimport {ERC721RaribleMinimalBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\";\nimport {ERC721RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol\";\nimport {ERC1155RaribleBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\";\nimport {ERC721RaribleMinimalBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\";\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" - }, - "src/TransferProxiesImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ERC721LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\";\nimport {ERC1155LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\nimport {PunkTransferProxy} from \"@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol\";\n" - }, - "src/TransparentUpgradeableProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/proxy/ProxyAdmin.sol\";\n" - }, - "test/contracts/ERC721LazyMintTest.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol\";\n" - }, - "test/contracts/RaribleTestHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" - }, - "test/contracts/TestERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155 } from \"@rarible/test/contracts/TestERC1155.sol\";\n\n" - }, - "test/contracts/TestERC1155RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol\";\n\n" - }, - "test/contracts/TestERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" - }, - "test/contracts/TestERC721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721 } from \"@rarible/test/contracts/TestERC721.sol\";\n" - }, - "test/contracts/TestERC721RoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV1 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol\";\n" - }, - "test/contracts/TestERC721RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol\";\n\n" - }, - "test/contracts/WrapperHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport { WrapperHelper } from \"@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol\";" - }, - "test/exchange/contracts/RaribleTestHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" - } - }, - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/.chainId b/projects/hardhat-deploy/deployments/sei_testnet/.chainId new file mode 100644 index 000000000..9f1c2b165 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/.chainId @@ -0,0 +1 @@ +713715 \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/AssetMatcherCollection.json b/projects/hardhat-deploy/deployments/sei_testnet/AssetMatcherCollection.json new file mode 100644 index 000000000..f8a68439d --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/AssetMatcherCollection.json @@ -0,0 +1,101 @@ +{ + "address": "0xc4F5FCD96e3b37A31f871F0968206F47294a4471", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "leftAssetType", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "rightAssetType", + "type": "tuple" + } + ], + "name": "matchAssets", + "outputs": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x5a33ed7f290a6dc56c9bad5650028295dd6cd603a6ff5e34ed0a1324446f27d1", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "302853", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x07e6d1751c6beec2a8bec55b6fd07c18b168f33bbbfdc58dca30cffd45b4ab36", + "transactionHash": "0x5a33ed7f290a6dc56c9bad5650028295dd6cd603a6ff5e34ed0a1324446f27d1", + "logs": [], + "blockNumber": 18030106, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"leftAssetType\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"rightAssetType\",\"type\":\"tuple\"}],\"name\":\"matchAssets\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\":\"AssetMatcherCollection\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\n/*\\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\\n */\\ncontract AssetMatcherCollection is IAssetMatcher {\\n\\n bytes constant EMPTY = \\\"\\\";\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\\n if (\\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \\n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \\n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\\n ) {\\n (address leftToken) = abi.decode(leftAssetType.data, (address));\\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\\n if (leftToken == rightToken) {\\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\\n }\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n}\",\"keccak256\":\"0x115e3e94c7b3df6de5c8adf15c42bc737876212e37bd0d0ebe446494d57c94e9\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610403806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d3f7cb014610030575b600080fd5b61004361003e3660046102da565b610059565b604051610050919061033b565b60405180910390f35b610061610195565b81516001600160e01b0319166339d690a360e11b1480610092575081516001600160e01b03191663d8f960c160e01b145b806100ae575081516001600160e01b03191663025ceed960e61b145b806100c9575081516001600160e01b03191662737ea960e61b145b806100e5575081516001600160e01b031916630f9ae27560e21b145b1561016b5760008360200151806020019051810190610104919061028e565b90506000836020015180602001905181019061012091906102af565b509050806001600160a01b0316826001600160a01b031614156101685750506040805180820190915282516001600160e01b031916815260208084015190820152905061018f565b50505b50604080518082018252600080825282516020818101909452908152918101919091525b92915050565b60408051808201909152600081526060602082015290565b80516001600160a01b03811681146101c457600080fd5b919050565b6000604082840312156101da578081fd5b6040516040810167ffffffffffffffff82821081831117156101f857fe5b816040528293508435915063ffffffff60e01b8216821461021857600080fd5b908252602090848201358181111561022f57600080fd5b8501601f8101871361024057600080fd5b80358281111561024c57fe5b61025e601f8201601f191685016103a9565b9250808352878482840101111561027457600080fd5b808483018585013760009083018401525091015292915050565b60006020828403121561029f578081fd5b6102a8826101ad565b9392505050565b600080604083850312156102c1578081fd5b6102ca836101ad565b9150602083015190509250929050565b600080604083850312156102ec578182fd5b823567ffffffffffffffff80821115610303578384fd5b61030f868387016101c9565b93506020850135915080821115610324578283fd5b50610331858286016101c9565b9150509250929050565b6000602080835263ffffffff60e01b84511681840152808401516040808501528051806060860152835b8181101561038157828101840151868201608001528301610365565b818111156103925784608083880101525b50601f01601f191693909301608001949350505050565b60405181810167ffffffffffffffff811182821017156103c557fe5b60405291905056fea2646970667358221220fe8f50b49531504ff963dc9b719db80c3131b9d5b69661a49edd957769dee45764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d3f7cb014610030575b600080fd5b61004361003e3660046102da565b610059565b604051610050919061033b565b60405180910390f35b610061610195565b81516001600160e01b0319166339d690a360e11b1480610092575081516001600160e01b03191663d8f960c160e01b145b806100ae575081516001600160e01b03191663025ceed960e61b145b806100c9575081516001600160e01b03191662737ea960e61b145b806100e5575081516001600160e01b031916630f9ae27560e21b145b1561016b5760008360200151806020019051810190610104919061028e565b90506000836020015180602001905181019061012091906102af565b509050806001600160a01b0316826001600160a01b031614156101685750506040805180820190915282516001600160e01b031916815260208084015190820152905061018f565b50505b50604080518082018252600080825282516020818101909452908152918101919091525b92915050565b60408051808201909152600081526060602082015290565b80516001600160a01b03811681146101c457600080fd5b919050565b6000604082840312156101da578081fd5b6040516040810167ffffffffffffffff82821081831117156101f857fe5b816040528293508435915063ffffffff60e01b8216821461021857600080fd5b908252602090848201358181111561022f57600080fd5b8501601f8101871361024057600080fd5b80358281111561024c57fe5b61025e601f8201601f191685016103a9565b9250808352878482840101111561027457600080fd5b808483018585013760009083018401525091015292915050565b60006020828403121561029f578081fd5b6102a8826101ad565b9392505050565b600080604083850312156102c1578081fd5b6102ca836101ad565b9150602083015190509250929050565b600080604083850312156102ec578182fd5b823567ffffffffffffffff80821115610303578384fd5b61030f868387016101c9565b93506020850135915080821115610324578283fd5b50610331858286016101c9565b9150509250929050565b6000602080835263ffffffff60e01b84511681840152808401516040808501528051806060860152835b8181101561038157828101840151868201608001528301610365565b818111156103925784608083880101525b50601f01601f191693909301608001949350505050565b60405181810167ffffffffffffffff811182821017156103c557fe5b60405291905056fea2646970667358221220fe8f50b49531504ff963dc9b719db80c3131b9d5b69661a49edd957769dee45764736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/DefaultProxyAdmin.json b/projects/hardhat-deploy/deployments/sei_testnet/DefaultProxyAdmin.json new file mode 100644 index 000000000..b7dc97025 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/DefaultProxyAdmin.json @@ -0,0 +1,259 @@ +{ + "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0xe3532c16517f0e9d36c186a122c6afa4e5a3d490bc48db49431ab4079bbcfdff", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "677380", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000001000000000000020000000000000000000800000000000000000000000000000000500200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xcb97a1c3e5cd709a11980aae2102a154314ef4024b297cb9e6d8497e43411050", + "transactionHash": "0xe3532c16517f0e9d36c186a122c6afa4e5a3d490bc48db49431ab4079bbcfdff", + "logs": [ + { + "transactionIndex": 29, + "blockNumber": 18030015, + "transactionHash": "0xe3532c16517f0e9d36c186a122c6afa4e5a3d490bc48db49431ab4079bbcfdff", + "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xcb97a1c3e5cd709a11980aae2102a154314ef4024b297cb9e6d8497e43411050" + } + ], + "blockNumber": 18030015, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ERC1155LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/sei_testnet/ERC1155LazyMintTransferProxy.json new file mode 100644 index 000000000..8d624fdee --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ERC1155LazyMintTransferProxy.json @@ -0,0 +1,293 @@ +{ + "address": "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ERC1155LazyMintTransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "asset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x913015ebb1849b85b6e3df5daedf70cb700ec78709143e641d160b66ca51ee67", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 1, + "gasUsed": "923250", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xfde229414fc5c3ec3c01163e6c34fa6f3053f7ca64c4bd98f4f425fd6ebeb590", + "transactionHash": "0x913015ebb1849b85b6e3df5daedf70cb700ec78709143e641d160b66ca51ee67", + "logs": [], + "blockNumber": 18030092, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC1155LazyMintTransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":\"ERC1155LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n\\n function __ERC1155LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\\n }\\n}\\n\",\"keccak256\":\"0x5750ad43c269486bb6256eaf27ed2cf2c7ed3964aa0e55871c6b9bb0e96b3e3f\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610f13806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100db578063ac8a584a146100ee578063ccf4fad214610101578063e814f46d14610101578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b55780638da5cb5b146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ac2565b6101d9565b6100a06102cf565b6100c561037b565b6040516100d29190610c8b565b60405180910390f35b6100a06100e93660046109a8565b61038a565b6100a06100fc3660046109a8565b610410565b6100a061010f3660046109a8565b610493565b6100a06101223660046109a8565b61054f565b600054610100900460ff16806101405750610140610652565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc610663565b6101c4610703565b80156101d6576000805461ff00191690555b50565b606560006101e56107fc565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eb66028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061025c91906109c4565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b81526004016102969493929190610c9f565b600060405180830381600087803b1580156102b057600080fd5b505af11580156102c4573d6000803e3d6000fd5b505050505050505050565b6102d76107fc565b6001600160a01b03166102e861037b565b6001600160a01b031614610331576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b6103926107fc565b6001600160a01b03166103a361037b565b6001600160a01b0316146103ec576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104186107fc565b6001600160a01b031661042961037b565b6001600160a01b031614610472576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806104ac57506104ac610652565b806104ba575060005460ff16155b6104f55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610520576000805460ff1961ff0019909116610100171660011790555b610528610663565b610530610703565b6105398261054f565b801561054b576000805461ff00191690555b5050565b6105576107fc565b6001600160a01b031661056861037b565b6001600160a01b0316146105b1576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b0381166105f65760405162461bcd60e51b8152600401808060200182810382526026815260200180610e426026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061065d30610800565b15905090565b600054610100900460ff168061067c575061067c610652565b8061068a575060005460ff16155b6106c55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff168061071c575061071c610652565b8061072a575060005460ff16155b6107655760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610790576000805460ff1961ff0019909116610100171660011790555b600061079a6107fc565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061081d61081884610dda565b610d98565b905082815283838301111561083157600080fd5b61083f836020830184610dfc565b9392505050565b803561080581610e2c565b600082601f830112610861578081fd5b8151602061087161081883610dbc565b82815281810190858301855b858110156108bb578151880189603f820112610897578788fd5b6108a88a878301516040840161080a565b855250928401929084019060010161087d565b5090979650505050505050565b600082601f8301126108d8578081fd5b815160206108e861081883610dbc565b82815281810190858301604080860288018501891015610906578687fd5b865b8681101561097b5781838b03121561091e578788fd5b815182810181811067ffffffffffffffff8211171561093957fe5b8352835161094681610e2c565b8152838701516bffffffffffffffffffffffff8116811461096557898afd5b8188015285529385019391810191600101610908565b509198975050505050505050565b600082601f830112610999578081fd5b61083f8383516020850161080a565b6000602082840312156109b9578081fd5b813561083f81610e2c565b600080604083850312156109d6578081fd5b82516109e181610e2c565b602084015190925067ffffffffffffffff808211156109fe578283fd5b9084019060c08287031215610a11578283fd5b610a1b60c0610d98565b82518152602083015182811115610a30578485fd5b610a3c88828601610989565b60208301525060408301516040820152606083015182811115610a5d578485fd5b610a69888286016108c8565b606083015250608083015182811115610a80578485fd5b610a8c888286016108c8565b60808301525060a083015182811115610aa3578485fd5b610aaf88828601610851565b60a0830152508093505050509250929050565b600080600060608486031215610ad6578081fd5b833567ffffffffffffffff80821115610aed578283fd5b81860191506040808389031215610b02578384fd5b80518181018181108482111715610b1557fe5b808352843584811115610b26578687fd5b8501808b03841315610b36578687fd5b608083018281108682111715610b4857fe5b845280356001600160e01b031981168114610b61578788fd5b825260208181013586811115610b75578889fd5b82019550601f86018c13610b87578788fd5b85359150610b9761081883610dda565b8281528c82848901011115610baa578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bd9818c01610846565b985050505050610bea818801610846565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c5457815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c16565b509495945050505050565b60008151808452610c77816020860160208601610dfc565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610cc7610140850182610c5f565b9050604088015160c08501526060880151607f19808684030160e0870152610cef8383610c03565b925060808a015191508086840301610100870152610d0d8383610c03565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610d6657601f19868303018452610d54828651610c5f565b94870194938701939150600101610d38565b508096505050505050610d7b81840187610bf6565b50610d896040830185610bf6565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610db457fe5b604052919050565b600067ffffffffffffffff821115610dd057fe5b5060209081020190565b600067ffffffffffffffff821115610dee57fe5b50601f01601f191660200190565b60005b83811015610e17578181015183820152602001610dff565b83811115610e26576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a2e24b24412817b3e18dda67abff2b746539ae76571c1e638821050d4f94e66e64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100db578063ac8a584a146100ee578063ccf4fad214610101578063e814f46d14610101578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b55780638da5cb5b146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ac2565b6101d9565b6100a06102cf565b6100c561037b565b6040516100d29190610c8b565b60405180910390f35b6100a06100e93660046109a8565b61038a565b6100a06100fc3660046109a8565b610410565b6100a061010f3660046109a8565b610493565b6100a06101223660046109a8565b61054f565b600054610100900460ff16806101405750610140610652565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc610663565b6101c4610703565b80156101d6576000805461ff00191690555b50565b606560006101e56107fc565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eb66028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061025c91906109c4565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b81526004016102969493929190610c9f565b600060405180830381600087803b1580156102b057600080fd5b505af11580156102c4573d6000803e3d6000fd5b505050505050505050565b6102d76107fc565b6001600160a01b03166102e861037b565b6001600160a01b031614610331576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b6103926107fc565b6001600160a01b03166103a361037b565b6001600160a01b0316146103ec576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104186107fc565b6001600160a01b031661042961037b565b6001600160a01b031614610472576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806104ac57506104ac610652565b806104ba575060005460ff16155b6104f55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610520576000805460ff1961ff0019909116610100171660011790555b610528610663565b610530610703565b6105398261054f565b801561054b576000805461ff00191690555b5050565b6105576107fc565b6001600160a01b031661056861037b565b6001600160a01b0316146105b1576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b0381166105f65760405162461bcd60e51b8152600401808060200182810382526026815260200180610e426026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061065d30610800565b15905090565b600054610100900460ff168061067c575061067c610652565b8061068a575060005460ff16155b6106c55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff168061071c575061071c610652565b8061072a575060005460ff16155b6107655760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610790576000805460ff1961ff0019909116610100171660011790555b600061079a6107fc565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061081d61081884610dda565b610d98565b905082815283838301111561083157600080fd5b61083f836020830184610dfc565b9392505050565b803561080581610e2c565b600082601f830112610861578081fd5b8151602061087161081883610dbc565b82815281810190858301855b858110156108bb578151880189603f820112610897578788fd5b6108a88a878301516040840161080a565b855250928401929084019060010161087d565b5090979650505050505050565b600082601f8301126108d8578081fd5b815160206108e861081883610dbc565b82815281810190858301604080860288018501891015610906578687fd5b865b8681101561097b5781838b03121561091e578788fd5b815182810181811067ffffffffffffffff8211171561093957fe5b8352835161094681610e2c565b8152838701516bffffffffffffffffffffffff8116811461096557898afd5b8188015285529385019391810191600101610908565b509198975050505050505050565b600082601f830112610999578081fd5b61083f8383516020850161080a565b6000602082840312156109b9578081fd5b813561083f81610e2c565b600080604083850312156109d6578081fd5b82516109e181610e2c565b602084015190925067ffffffffffffffff808211156109fe578283fd5b9084019060c08287031215610a11578283fd5b610a1b60c0610d98565b82518152602083015182811115610a30578485fd5b610a3c88828601610989565b60208301525060408301516040820152606083015182811115610a5d578485fd5b610a69888286016108c8565b606083015250608083015182811115610a80578485fd5b610a8c888286016108c8565b60808301525060a083015182811115610aa3578485fd5b610aaf88828601610851565b60a0830152508093505050509250929050565b600080600060608486031215610ad6578081fd5b833567ffffffffffffffff80821115610aed578283fd5b81860191506040808389031215610b02578384fd5b80518181018181108482111715610b1557fe5b808352843584811115610b26578687fd5b8501808b03841315610b36578687fd5b608083018281108682111715610b4857fe5b845280356001600160e01b031981168114610b61578788fd5b825260208181013586811115610b75578889fd5b82019550601f86018c13610b87578788fd5b85359150610b9761081883610dda565b8281528c82848901011115610baa578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bd9818c01610846565b985050505050610bea818801610846565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c5457815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c16565b509495945050505050565b60008151808452610c77816020860160208601610dfc565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610cc7610140850182610c5f565b9050604088015160c08501526060880151607f19808684030160e0870152610cef8383610c03565b925060808a015191508086840301610100870152610d0d8383610c03565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610d6657601f19868303018452610d54828651610c5f565b94870194938701939150600101610d38565b508096505050505050610d7b81840187610bf6565b50610d896040830185610bf6565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610db457fe5b604052919050565b600067ffffffffffffffff821115610dd057fe5b5060209081020190565b600067ffffffffffffffff821115610dee57fe5b50601f01601f191660200190565b60005b83811015610e17578181015183820152602001610dff565b83811115610e26576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a2e24b24412817b3e18dda67abff2b746539ae76571c1e638821050d4f94e66e64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19884, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleBeaconMeta.json b/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleBeaconMeta.json new file mode 100644 index 000000000..dde4556c9 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleBeaconMeta.json @@ -0,0 +1,219 @@ +{ + "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x16978dfbffb2dfec4e809adf79730c2a591b9c38b979f91e426a8dc8cd7322a9", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "394703", + "logsBloom": "0x00000000000000000000000000000000000000000400800004800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc8913c5d34d3174412e9474cf89e44f25d606dd09d35978432dea79e033ccbe0", + "transactionHash": "0x16978dfbffb2dfec4e809adf79730c2a591b9c38b979f91e426a8dc8cd7322a9", + "logs": [ + { + "transactionIndex": 8, + "blockNumber": 18030235, + "transactionHash": "0x16978dfbffb2dfec4e809adf79730c2a591b9c38b979f91e426a8dc8cd7322a9", + "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xc8913c5d34d3174412e9474cf89e44f25d606dd09d35978432dea79e033ccbe0" + }, + { + "transactionIndex": 8, + "blockNumber": 18030235, + "transactionHash": "0x16978dfbffb2dfec4e809adf79730c2a591b9c38b979f91e426a8dc8cd7322a9", + "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xc8913c5d34d3174412e9474cf89e44f25d606dd09d35978432dea79e033ccbe0" + } + ], + "blockNumber": 18030235, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\":\"ERC1155RaribleBeaconMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\\n transferOwnership(initialOwner);\\n }\\n}\\n\",\"keccak256\":\"0xf0f5306033288bc22598ae47368ae7d66273c924401c123259a8fc467459965b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405161072d38038061072d8339818101604052604081101561003357600080fd5b508051602090910151816000610047610099565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602061070d833981519152908290a3506100888161009d565b506100928161010d565b5050610224565b3390565b6100b08161020f60201b6103821760201c565b6100eb5760405162461bcd60e51b81526004018080602001828103825260338152602001806106da6033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610115610099565b6001600160a01b0316610126610215565b6001600160a01b031614610181576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166101c65760405162461bcd60e51b81526004018080602001828103825260268152602001806106b46026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061070d83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b6000546001600160a01b031690565b610481806102336000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a264697066735822122097d1fd4fefddd34270259a2d6721a4f9af66abf30b6e34916f1ca191250e72b564736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163748be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a264697066735822122097d1fd4fefddd34270259a2d6721a4f9af66abf30b6e34916f1ca191250e72b564736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "implementation()": { + "details": "Returns the current implementation address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeTo(address)": { + "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol:ERC1155RaribleBeaconMeta", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6517, + "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol:ERC1155RaribleBeaconMeta", + "label": "_implementation", + "offset": 0, + "slot": "1", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleFactoryC2.json new file mode 100644 index 000000000..7567aef47 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleFactoryC2.json @@ -0,0 +1,396 @@ +{ + "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_beacon", + "type": "address" + }, + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create1155RaribleProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create1155RaribleUserProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "beacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x37c466c097e9111b06732515c232faf7fe71da8bcf9678a065156643a105da73", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "1374604", + "logsBloom": "0x00000000000000000000000000000000008000000400800000800000000000000000000000000000000000000000000000000000000040000000004000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010", + "blockHash": "0x863f39b05591835a5d9aaf16f5ac0290beac92f76f828c5cf4041f1b89cee84e", + "transactionHash": "0x37c466c097e9111b06732515c232faf7fe71da8bcf9678a065156643a105da73", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 18030239, + "transactionHash": "0x37c466c097e9111b06732515c232faf7fe71da8bcf9678a065156643a105da73", + "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x863f39b05591835a5d9aaf16f5ac0290beac92f76f828c5cf4041f1b89cee84e" + }, + { + "transactionIndex": 1, + "blockNumber": 18030239, + "transactionHash": "0x37c466c097e9111b06732515c232faf7fe71da8bcf9678a065156643a105da73", + "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x863f39b05591835a5d9aaf16f5ac0290beac92f76f828c5cf4041f1b89cee84e" + } + ], + "blockNumber": 18030239, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":\"ERC1155RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-1155/ERC1155Rarible.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\\n *\\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC1155RaribleFactoryC2 is Ownable{\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create1155RaribleProxy(address proxy);\\n event Create1155RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n transferOwnership(initialOwner);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleProxy(beaconProxy);\\n }\\n \\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n\\n}\\n\",\"keccak256\":\"0xafc4d548d88843b0e3642d55d28bf07415ad50950c9fbb22f8eeadd5a9774478\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x80b6ec138d4689d2e842777e9d61ff3a32a872ac61c91deebf3af5210517eb02\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Base.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n \\n isPrivate = true;\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC1155Rarible(initialOwner, _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0x9f9ce1325409a069ad166fa51ce4402e854f9da274e047a763a4f4e193925967\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7d305157d1d52073aa03b9bc8d8efae9ad010f32160a8eedbc19ca9549c9a7a6\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620017f7380380620017f7833981016040819052620000349162000205565b600062000040620000cb565b600080546001600160a01b0319166001600160a01b038316908117825560405192935091600080516020620017d7833981519152908290a350600180546001600160a01b038087166001600160a01b031992831617909255600280548684169083161790556003805492851692909116919091179055620000c181620000cf565b5050505062000261565b3390565b620000d9620000cb565b6001600160a01b0316620000ec620001d9565b6001600160a01b03161462000148576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166200018f5760405162461bcd60e51b8152600401808060200182810382526026815260200180620017b16026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020620017d783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b80516001600160a01b03811681146200020057600080fd5b919050565b600080600080608085870312156200021b578384fd5b6200022685620001e8565b93506200023660208601620001e8565b92506200024660408601620001e8565b91506200025660608601620001e8565b905092959194509250565b61154080620002716000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220d72849794df566f801d9145066ca8915bdfb2399d632f29f7ac136b4c6a377dd64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220d72849794df566f801d9145066ca8915bdfb2399d632f29f7ac136b4c6a377dd64736f6c63430007060033", + "devdoc": { + "details": "This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.", + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 22716, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "beacon", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 22718, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "transferProxy", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 22720, + "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", + "label": "lazyTransferProxy", + "offset": 0, + "slot": "3", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleMeta.json b/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleMeta.json new file mode 100644 index 000000000..e33547d42 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleMeta.json @@ -0,0 +1,1575 @@ +{ + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BurnLazy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "BurnLazyBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Supply", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "TransferBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferSingle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "URI", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "burnBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "1124696", + "logsBloom": "0x00000400000000000000000000000020400000000400800000800000000000000000000000000000000000000000000000000000000040000100000000000000000000000000008000000000000002000001000000000800004000000000000000004000020000000000001080000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000100004000000000000000000000000000000000020000200000000010001000000000080000400000000000000000020000001000000000010000000000000800000000000000000001000000001000000", + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923", + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "logs": [ + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000a36e6ee8c5eebfb1738fb78ce3d09562869f58a4" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + }, + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + }, + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + }, + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + }, + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + }, + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" + ], + "data": "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 5, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + }, + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + } + ], + "blockNumber": 18030224, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "__ERC1155Rarible_init_proxy", + "args": [ + "Rarible", + "RARI", + "ipfs:/", + "", + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ] + }, + "implementation": "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleMeta_Implementation.json b/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleMeta_Implementation.json new file mode 100644 index 000000000..808ea5bc6 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleMeta_Implementation.json @@ -0,0 +1,1791 @@ +{ + "address": "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "BurnLazy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "BurnLazyBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC1155RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Supply", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + } + ], + "name": "TransferBatch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "TransferSingle", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "value", + "type": "string" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "URI", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "accounts", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + } + ], + "name": "balanceOfBatch", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + } + ], + "name": "burnBatch", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "ids", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "amounts", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeBatchTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "uri", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x5a5916003a8b20732b370820166fb5bbe35096b2f86698150509159b2f962de0", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "5465741", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xf1199143538b5be3ccce3ae9ba76b7709b849e319a95e08cc493003435af8697", + "transactionHash": "0x5a5916003a8b20732b370820166fb5bbe35096b2f86698150509159b2f962de0", + "logs": [], + "blockNumber": 18030221, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnLazy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"BurnLazyBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC1155Rarible_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"balanceOf(address,uint256)\":{\"details\":\"See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"See {IERC1155-safeBatchTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"See {IERC1155-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC1155-setApprovalForAll}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\":\"ERC1155RaribleMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\\n using SafeMath for uint256;\\n\\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\\\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\\\"));\\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\\\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\\\");\\n\\n mapping(address => uint256) private nonces;\\n bytes32 internal domainSeparator;\\n\\n /*\\n * Meta transaction structure.\\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\\n * He should call the desired function directly in that case.\\n */\\n struct MetaTransaction {\\n uint256 nonce;\\n address from;\\n bytes functionSignature;\\n }\\n\\n /*\\n * Domain structure.\\n * Data(information to for making metaTransaction method uniq.) about method and contract\\n */\\n struct EIP712Domain {\\n string name;\\n string version;\\n address verifyingContract;\\n bytes32 salt;\\n }\\n\\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\\n\\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\\n domainSeparator = keccak256(abi.encode(\\n EIP712_DOMAIN_TYPEHASH,\\n keccak256(bytes(name)),\\n keccak256(bytes(version)),\\n address(this),\\n getSalt()\\n ));\\n }\\n\\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\\n if (inBytes.length == 0) {\\n return 0x0;\\n }\\n\\n assembly {\\n outBytes4 := mload(add(inBytes, 32))\\n }\\n }\\n\\n function executeMetaTransaction(address userAddress,\\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\\n require(destinationFunctionSig != msg.sig, \\\"Wrong functionSignature\\\");\\n MetaTransaction memory metaTx = MetaTransaction({\\n nonce : nonces[userAddress],\\n from : userAddress,\\n functionSignature : functionSignature\\n });\\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \\\"Signer and signature do not match\\\");\\n nonces[userAddress] = nonces[userAddress].add(1);\\n // Append userAddress at the end to extract it from calling context\\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\\n\\n require(success, \\\"Function call not successful\\\");\\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\\n return returnData;\\n }\\n\\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n META_TRANSACTION_TYPEHASH,\\n metaTx.nonce,\\n metaTx.from,\\n keccak256(metaTx.functionSignature)\\n ));\\n }\\n\\n function getNonce(address user) external view returns (uint256 nonce) {\\n nonce = nonces[user];\\n }\\n\\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\\n require(signer != address(0), \\\"Invalid signature\\\");\\n return signer == user;\\n }\\n\\n function _msgSender() internal view virtual override returns (address payable sender) {\\n if (msg.sender == address(this)) {\\n bytes memory array = msg.data;\\n uint256 index = msg.data.length;\\n assembly {\\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\\n }\\n } else {\\n sender = msg.sender;\\n }\\n return sender;\\n }\\n\\n function getSalt() internal pure returns (bytes32) {\\n return bytes32(getChainID());\\n }\\n\\n function getChainID() internal pure returns (uint256 id) {\\n assembly {\\n id := chainid()\\n }\\n }\\n\\n function getDomainSeparator() private view returns (bytes32) {\\n return domainSeparator;\\n }\\n\\n /**\\n * Accept message hash and returns hash message in EIP712 compatible form\\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\\n * https://eips.ethereum.org/EIPS/eip-712\\n * \\\"\\\\\\\\x19\\\" makes the encoding deterministic\\n * \\\"\\\\\\\\x01\\\" is the version byte to make it compatible to EIP-191\\n */\\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", getDomainSeparator(), messageHash));\\n }\\n\\n /**\\n * @dev verifies the call result and bubbles up revert reason for failed calls\\n *\\n * @param success : outcome of forwarded call\\n * @param returndata : returned data from the frowarded call\\n * @param errorMessage : fallback error message to show\\n */\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\\n if (!success) {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x58924a44eea8720bdcfb32f12d3374deac9605a3b75cb8872907856d526bde10\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x80b6ec138d4689d2e842777e9d61ff3a32a872ac61c91deebf3af5210517eb02\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7d305157d1d52073aa03b9bc8d8efae9ad010f32160a8eedbc19ca9549c9a7a6\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\\\";\\nimport \\\"../ERC1155Base.sol\\\";\\nimport \\\"../../IsPrivateCollection.sol\\\";\\nimport \\\"../../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC1155RaribleUserMeta\\\", \\\"1\\\");\\n \\n isPrivate = true;\\n\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n \\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC1155RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC1155RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\\n return super._msgSender();\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0x4213a9625423e8bec14757bd2d16a9586b0d6848ed806d14d078de2f291a856f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50615ff280620000216000396000f3fe6080604052600436106101ed5760003560e01c80636c0360eb1161010d578063aa271e1a116100a0578063e985e9c51161006f578063e985e9c51461058a578063f242432a146105aa578063f2fde38b146105ca578063f5298aca146105ea578063ffc4e0a71461060a576101ed565b8063aa271e1a14610515578063cad96cca14610535578063e07f231914610555578063e8a3d48514610575576101ed565b80638da5cb5b116100dc5780638da5cb5b1461049e57806395d89b41146104c0578063983b2d56146104d5578063a22cb465146104f5576101ed565b80636c0360eb14610427578063715018a61461043c57806371e2a65714610451578063891be97414610471576101ed565b80632a55205a116101855780634e1273f4116101545780634e1273f41461039a57806355f804b3146103c757806361e05459146103e75780636b20c45414610407576101ed565b80632a55205a1461030c5780632d0335ab1461033a5780632eb2c2d61461035a5780633092afd51461037a576101ed565b80630e89341c116101c15780630e89341c1461028a5780630eaead67146102aa578063173c43d2146102cc578063220e4d73146102ec576101ed565b8062fdd58e146101f257806301ffc9a71461022857806306fdde03146102555780630c53c51c14610277575b600080fd5b3480156101fe57600080fd5b5061021261020d366004615211565b61062a565b60405161021f9190615b3a565b60405180910390f35b34801561023457600080fd5b5061024861024336600461530a565b61069c565b60405161021f919061588b565b34801561026157600080fd5b5061026a6106af565b60405161021f9190615896565b61026a610285366004615197565b61073e565b34801561029657600080fd5b5061026a6102a5366004615692565b610ab7565b3480156102b657600080fd5b506102ca6102c536600461563b565b610ac2565b005b3480156102d857600080fd5b506102ca6102e7366004615364565b610b66565b3480156102f857600080fd5b506102ca61030736600461542b565b610c16565b34801561031857600080fd5b5061032c6103273660046156eb565b610cd0565b60405161021f929190615827565b34801561034657600080fd5b50610212610355366004614f91565b610dde565b34801561036657600080fd5b506102ca610375366004614fe5565b610dfa565b34801561038657600080fd5b506102ca610395366004614f91565b6110f8565b3480156103a657600080fd5b506103ba6103b53660046152aa565b6111a8565b60405161021f9190615853565b3480156103d357600080fd5b506102ca6103e2366004615332565b611293565b3480156103f357600080fd5b506102ca610402366004615504565b611338565b34801561041357600080fd5b506102ca6104223660046150f4565b6113ce565b34801561043357600080fd5b5061026a611554565b34801561044857600080fd5b506102ca6115ec565b34801561045d57600080fd5b506102ca61046c366004615270565b611698565b34801561047d57600080fd5b5061049161048c366004615692565b611781565b60405161021f9190615840565b3480156104aa57600080fd5b506104b3611811565b60405161021f91906157dd565b3480156104cc57600080fd5b5061026a611820565b3480156104e157600080fd5b506102ca6104f0366004614f91565b61187c565b34801561050157600080fd5b506102ca610510366004615166565b611931565b34801561052157600080fd5b50610248610530366004614f91565b611a20565b34801561054157600080fd5b50610491610550366004615692565b611a3f565b34801561056157600080fd5b506102ca6105703660046156aa565b611aba565b34801561058157600080fd5b5061026a611afd565b34801561059657600080fd5b506102486105a5366004614fad565b611b59565b3480156105b657600080fd5b506102ca6105c536600461508e565b611b6c565b3480156105d657600080fd5b506102ca6105e5366004614f91565b611d25565b3480156105f657600080fd5b506102ca61060536600461523c565b611e28565b34801561061657600080fd5b506102ca6106253660046155d4565b611ea4565b60006001600160a01b0383166106715760405162461bcd60e51b815260040180806020018281038252602b815260200180615ce6602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b60006106a782611f4c565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b820191906000526020600020905b81548152906001019060200180831161071957829003601f168201915b505050505081565b6060600061074b86611feb565b90506000356001600160e01b031990811690821614156107b2576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102fb6020908152908490205483528201529081018790526107f08882888888612007565b61082b5760405162461bcd60e51b8152600401808060200182810382526021815260200180615efd6021913960400191505060405180910390fd5b6001600160a01b03881660009081526102fb60205260409020546108509060016120f1565b6102fb60008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106108bb5780518252601f19909201916020918201910161089c565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106109315780518252601f199092019160209182019101610912565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610993576040519150601f19603f3d011682016040523d82523d6000602084013e610998565b606091505b5091509150816109ef576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a6e578181015183820152602001610a56565b50505050905090810190601f168015610a9b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b60606106a78261214b565b6102965460ff1615610b56578260600151600081518110610adf57fe5b6020026020010151600001516001600160a01b0316610afc611811565b6001600160a01b03161480610b315750610b318360600151600081518110610b2057fe5b602002602001015160000151611a20565b610b565760405162461bcd60e51b8152600401610b4d906158d4565b60405180910390fd5b610b618383836122e1565b505050565b610b748686868686866125dd565b610bc1604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610bf561279f565b8787604051610c06939291906157f1565b60405180910390a1505050505050565b610c248787878787876125dd565b610c71604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff19169055610c8581611d25565b7fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610cae61279f565b8888604051610cbf939291906157f1565b60405180910390a150505050505050565b60008281526101fa60205260408120548190610cf157506000905080610dd7565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d6d57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610d1e565b50505050905080600081518110610d8057fe5b60209081029190910101515192506000805b8251811015610dcb57828181518110610da757fe5b6020026020010151602001516001600160601b031682019150806001019050610d92565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102fb602052604090205490565b8151835114610e3a5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f956028913960400191505060405180910390fd5b6001600160a01b038416610e7f5760405162461bcd60e51b8152600401808060200182810382526025815260200180615de96025913960400191505060405180910390fd5b610e8761279f565b6001600160a01b0316856001600160a01b03161480610ead5750610ead856105a561279f565b610ee85760405162461bcd60e51b8152600401808060200182810382526032815260200180615e0e6032913960400191505060405180910390fd5b6000610ef261279f565b9050610f028187878787876110f0565b60005b8451811015611008576000858281518110610f1c57fe5b602002602001015190506000858381518110610f3457fe5b60200260200101519050610fa1816040518060600160405280602a8152602001615eb3602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546127ae9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a1681522054610fd890826120f1565b60009283526097602090815260408085206001600160a01b038c1686529091529092209190915550600101610f05565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561108e578181015183820152602001611076565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156110cd5781810151838201526020016110b5565b5050505090500194505050505060405180910390a46110f0818787878787612845565b505050505050565b61110061279f565b6001600160a01b0316611111611811565b6001600160a01b03161461115a576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b606081518351146111ea5760405162461bcd60e51b8152600401808060200182810382526029815260200180615f6c6029913960400191505060405180910390fd5b600083516001600160401b038111801561120357600080fd5b5060405190808252806020026020018201604052801561122d578160200160208202803683370190505b50905060005b845181101561128b5761126c85828151811061124b57fe5b602002602001015185838151811061125f57fe5b602002602001015161062a565b82828151811061127857fe5b6020908102919091010152600101611233565b509392505050565b61129b61279f565b6001600160a01b03166112ac611811565b6001600160a01b0316146112f5576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6112fe81612abb565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d68160405161132d9190615896565b60405180910390a150565b6113468787878786866125dd565b611397604051806040016040528060168152602001754552433131353552617269626c65557365724d65746160501b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc610cae61279f565b80518251146113ef5760405162461bcd60e51b8152600401610b4d90615a83565b600082516001600160401b038111801561140857600080fd5b50604051908082528060200260200182016040528015611432578160200160208202803683370190505b509050600083516001600160401b038111801561144e57600080fd5b50604051908082528060200260200182016040528015611478578160200160208202803683370190505b50905060005b84518110156114ed576114b785828151811061149657fe5b60200260200101518583815181106114aa57fe5b6020026020010151612acf565b8483815181106114c357fe5b602002602001018484815181106114d657fe5b60209081029190910101919091525260010161147e565b506114f9858584612b44565b846001600160a01b031661150b61279f565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051611545929190615866565b60405180910390a35050505050565b61012f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b505050505090505b90565b6115f461279f565b6001600160a01b0316611605611811565b6001600160a01b03161461164e576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6116a061279f565b6001600160a01b03166116b1611811565b6001600160a01b0316146116fa576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b60005b815181101561177d57600082828151811061171457fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016116fd565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561180657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016117b7565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b61188461279f565b6001600160a01b0316611895611811565b6001600160a01b0316146118de576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b031661194361279f565b6001600160a01b031614156119895760405162461bcd60e51b8152600401808060200182810382526029815260200180615f436029913960400191505060405180910390fd5b806098600061199661279f565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556119da61279f565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa6020908152604080832080548251818502810185019093528083526060949293919290918401821561180657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016117b7565b816001600160a01b0316611acc61279f565b6001600160a01b031614611af25760405162461bcd60e51b8152600401610b4d9061598b565b610b61838383612bb8565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b6000611b658383612c64565b9392505050565b6001600160a01b038416611bb15760405162461bcd60e51b8152600401808060200182810382526025815260200180615de96025913960400191505060405180910390fd5b611bb961279f565b6001600160a01b0316856001600160a01b03161480611bdf5750611bdf856105a561279f565b611c1a5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b6000611c2461279f565b9050611c44818787611c3588612c90565b611c3e88612c90565b876110f0565b611c8b836040518060600160405280602a8152602001615eb3602a913960008781526097602090815260408083206001600160a01b038d16845290915290205491906127ae565b60008581526097602090815260408083206001600160a01b038b81168552925280832093909355871681522054611cc290846120f1565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a841693861692600080516020615cc683398151915292908290030190a46110f0818787878787612cd5565b611d2d61279f565b6001600160a01b0316611d3e611811565b6001600160a01b031614611d87576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b038116611dcc5760405162461bcd60e51b8152600401808060200182810382526026815260200180615d546026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600080611e358484612acf565b90925090508115611e4b57611e4b858584612e46565b8015611e9d57846001600160a01b0316611e6361279f565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051611545929190615b5c565b5050505050565b6000611eb484866000015161062a565b9050818115611eee578280831015611ec95750815b611ee9868689600001518460405180602001604052806000815250611b6c565b830390505b80156110f0578560600151600081518110611f0557fe5b6020026020010151600001516001600160a01b0316856001600160a01b031614611f415760405162461bcd60e51b8152600401610b4d906158a9565b6110f0868583610ac2565b60006001600160e01b03198216636db15a0f60e01b1480611f7d57506001600160e01b0319821663656cb66560e11b145b80611f9857506001600160e01b0319821663152a902d60e11b145b80611fb357506001600160e01b031982166301ffc9a760e01b145b80611fce57506001600160e01b03198216636cdb3d1360e11b145b806106a75750506001600160e01b0319166303a24d0760e21b1490565b6000815160001415611fff575060006106aa565b506020015190565b600080600161201d61201888612eba565b612f3d565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612074573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120d0576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611b65576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081815261012e6020908152604080832080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352606094938301828280156121e05780601f106121b5576101008083540402835291602001916121e0565b820191906000526020600020905b8154815290600101906020018083116121c357829003601f168201915b5050505050905060006121f1611554565b9050805160001415612205575090506106aa565b81511561221f576122168183612f89565b925050506106aa565b806122298561316e565b6040516020018083805190602001908083835b6020831061225b5780518252601f19909201916020918201910161223c565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106122a35780518252601f199092019160209182019101612284565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c60006122f061279f565b9050806001600160a01b0316826001600160a01b0316148061231757506123178282611b59565b6123335760405162461bcd60e51b8152600401610b4d906159da565b600083116123535760405162461bcd60e51b8152600401610b4d906159b0565b845160009081526101fc60205260409020546124bc57846060015160008151811061237a57fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146123b65760405162461bcd60e51b8152600401610b4d90615960565b60008560400151116123da5760405162461bcd60e51b8152600401610b4d90615901565b8460a0015151856060015151146123f057600080fd5b60006123fb86613248565b905060005b8660600151518110156124715760008760600151828151811061241f57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b0316146124685761246881848a60a00151858151811061245b57fe5b602002602001015161349b565b50600101612400565b50612484866000015187604001516134a6565b61249686600001518760800151613510565b6124a8866000015187606001516136ff565b6124ba866000015187602001516138ae565b505b6124db8486600001518560405180602001604052806000815250613972565b836001600160a01b0316826001600160a01b03161461258c57816001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615cc6833981519152886000015187604051612536929190615b5c565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b0316600080516020615cc683398151915288600001518760405161257f929190615b5c565b60405180910390a4611e9d565b836001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615cc68339815191528860000151876040516125ce929190615b5c565b60405180910390a45050505050565b600054610100900460ff16806125f657506125f6613984565b80612604575060005460ff16155b61263f5760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff1615801561266a576000805460ff1961ff0019909116610100171660011790555b612672613995565b61267a613a8f565b612682613a91565b61268a613b42565b612692613be2565b6126aa60405180602001604052806000815250613c25565b6126b384613cf0565b6126bb613a8f565b6126c3613d15565b6126cd8787613db2565b6126d5613a8f565b6126de85612abb565b6126e9836001613ddb565b6126f4826001613ddb565b8015612706576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030612749613e3b565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102fc819055505050565b60006127a9613e45565b905090565b6000818484111561283d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128025781810151838201526020016127ea565b50505050905090810190601f16801561282f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b612857846001600160a01b0316613ea1565b156110f057836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156128e55781810151838201526020016128cd565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561292457818101518382015260200161290c565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612960578181015183820152602001612948565b50505050905090810190601f16801561298d5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1580156129b257600080fd5b505af19250505080156129d757506040513d60208110156129d257600080fd5b505160015b612a6c576129e3615bb0565b806129ee5750612a35565b60405162461bcd60e51b81526020600482018181528351602484015283518493919283926044019190850190808383600083156128025781810151838201526020016127ea565b60405162461bcd60e51b8152600401808060200182810382526034815260200180615c6a6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146127065760405162461bcd60e51b8152600401808060200182810382526028815260200180615c9e6028913960400191505060405180910390fd5b805161177d9061012f906020840190614bd5565b806000606084901c612adf61279f565b6001600160a01b0316816001600160a01b03161415612b3c578391506000612b0686613ea7565b90508015612b2b576000612b1987613eba565b8203905080861115612b29578093505b505b612b358684613ecd565b8285039350505b509250929050565b612b4c61279f565b6001600160a01b0316836001600160a01b03161480612b725750612b72836105a561279f565b612bad5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b610b61838383613ee6565b60008381526101fa6020526040812054905b81811015611e9d5760008581526101fa6020526040902080546001600160a01b038616919083908110612bf957fe5b6000918252602090912001546001600160a01b03161415612c5c5760008581526101fa60205260409020805484919083908110612c3257fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612bca565b6001600160a01b038116600090815260c9602052604081205460ff1680611b655750611b658383614154565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612cc457fe5b602090810291909101015292915050565b612ce7846001600160a01b0316613ea1565b156110f057836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612d76578181015183820152602001612d5e565b50505050905090810190601f168015612da35780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612dc657600080fd5b505af1925050508015612deb57506040513d6020811015612de657600080fd5b505160015b612df7576129e3615bb0565b6001600160e01b0319811663f23a6e6160e01b146127065760405162461bcd60e51b8152600401808060200182810382526028815260200180615c9e6028913960400191505060405180910390fd5b612e4e61279f565b6001600160a01b0316836001600160a01b03161480612e745750612e74836105a561279f565b612eaf5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b610b61838383614182565b6000604051806080016040528060438152602001615d1160439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612f476142a3565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b805182516060918491849110156130545784846040516020018083805190602001908083835b60208310612fce5780518252601f199092019160209182019101612faf565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106130165780518252601f199092019160209182019101612ff7565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610696565b60005b82518110156131645782818151811061306c57fe5b602001015160f81c60f81b6001600160f81b03191682828151811061308d57fe5b01602001516001600160f81b0319161461315c5785856040516020018083805190602001908083835b602083106130d55780518252601f1990920191602091820191016130b6565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061311d5780518252601f1990920191602091820191016130fe565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350505050610696565b600101613057565b5092949350505050565b60608161319357506040805180820190915260018152600360fc1b60208201526106aa565b8160005b81156131ab57600101600a82049150613197565b6000816001600160401b03811180156131c357600080fd5b506040519080825280601f01601f1916602001820160405280156131ee576020820181803683370190505b50859350905060001982015b831561323f57600a840660300160f81b8282806001900393508151811061321d57fe5b60200101906001600160f81b031916908160001a905350600a840493506131fa565b50949350505050565b6000808260800151516001600160401b038111801561326657600080fd5b50604051908082528060200260200182016040528015613290578160200160208202803683370190505b50905060005b8360800151518110156132e2576132c3846080015182815181106132b657fe5b60200260200101516142aa565b8282815181106132cf57fe5b6020908102919091010152600101613296565b5060008360600151516001600160401b038111801561330057600080fd5b5060405190808252806020026020018201604052801561332a578160200160208202803683370190505b50905060005b84606001515181101561336f57613350856060015182815181106132b657fe5b82828151811061335c57fe5b6020908102919091010152600101613330565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b838110156133d85781810151838201526020016133c0565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b83811015613429578181015183820152602001613411565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b610b61838383614317565b60008281526101fc6020526040902054156134c057600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c906135049084908490615b5c565b60405180910390a15050565b6000805b82518110156136b45760006001600160a01b031683828151811061353457fe5b6020026020010151600001516001600160a01b0316141561359c576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b8281815181106135a857fe5b6020026020010151602001516001600160601b031660001415613612576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b82818151811061361e57fe5b6020026020010151602001516001600160601b0316820191506101fa600085815260200190815260200160002083828151811061365757fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501613514565b5061271081106136f55760405162461bcd60e51b8152600401808060200182810382526025815260200180615f1e6025913960400191505060405180910390fd5b610b618383614559565b60008281526101fb6020526040812090805b835181101561384d5760006001600160a01b031684828151811061373157fe5b6020026020010151600001516001600160a01b031614156137645760405162461bcd60e51b8152600401610b4d90615a4c565b83818151811061377057fe5b6020026020010151602001516001600160601b0316600014156137a55760405162461bcd60e51b8152600401610b4d9061592b565b828482815181106137b257fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b03199092169190911790921691909117905583516138439085908390811061381f57fe5b6020026020010151602001516001600160601b0316836120f190919063ffffffff16565b9150600101613711565b50806127101461386f5760405162461bcd60e51b8152600401610b4d90615aec565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f84846040516138a0929190615b43565b60405180910390a150505050565b600082815261012e6020908152604090912082516138ce92840190614bd5565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6138fa8461214b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561393457818101518382015260200161391c565b50505050905090810190601f1680156139615780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b61397e8484848461458a565b50505050565b600061398f30613ea1565b15905090565b600054610100900460ff16806139ae57506139ae613984565b806139bc575060005460ff16155b6139f75760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613a22576000805460ff1961ff0019909116610100171660011790555b6000613a2c61279f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015613a8c576000805461ff00191690555b50565b565b600054610100900460ff1680613aaa5750613aaa613984565b80613ab8575060005460ff16155b613af35760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613b1e576000805460ff1961ff0019909116610100171660011790555b613b2e6301ffc9a760e01b61469c565b8015613a8c576000805461ff001916905550565b600054610100900460ff1680613b5b5750613b5b613984565b80613b69575060005460ff16155b613ba45760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613b2e576000805460ff1961ff0019909116610100171660011790558015613a8c576000805461ff001916905550565b613a8f604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250614720565b600054610100900460ff1680613c3e5750613c3e613984565b80613c4c575060005460ff16155b613c875760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613cb2576000805460ff1961ff0019909116610100171660011790555b613cbb826147e2565b613ccb636cdb3d1360e11b61469c565b613cdb6303a24d0760e21b61469c565b801561177d576000805461ff00191690555050565b8051613d0490610230906020840190614bd5565b50613a8c63e8a3d48560e01b61469c565b600054610100900460ff1680613d2e5750613d2e613984565b80613d3c575060005460ff16155b613d775760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613da2576000805460ff1961ff0019909116610100171660011790555b613b2e63656cb66560e11b61469c565b8151613dc690610262906020850190614bd5565b508051610b6190610263906020840190614bd5565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b60006127a96147f5565b600033301415613e9c57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506115e99050565b503390565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b038316613f2b5760405162461bcd60e51b8152600401808060200182810382526023815260200180615e906023913960400191505060405180910390fd5b8051825114613f6b5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f956028913960400191505060405180910390fd5b6000613f7561279f565b9050613f95818560008686604051806020016040528060008152506110f0565b60005b83518110156140735761402a838281518110613fb057fe5b6020026020010151604051806060016040528060248152602001615d7a6024913960976000888681518110613fe157fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020546127ae9092919063ffffffff16565b6097600086848151811061403a57fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101613f98565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156140fa5781810151838201526020016140e2565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015614139578181015183820152602001614121565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b0383166141c75760405162461bcd60e51b8152600401808060200182810382526023815260200180615e906023913960400191505060405180910390fd5b60006141d161279f565b9050614201818560006141e387612c90565b6141ec87612c90565b604051806020016040528060008152506110f0565b61424882604051806060016040528060248152602001615d7a6024913960008681526097602090815260408083206001600160a01b038b16845290915290205491906127ae565b60008481526097602090815260408083206001600160a01b03808a1680865291845282852095909555815188815292830187905281519394909390861692600080516020615cc683398151915292908290030190a450505050565b6102fc5490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000614322836147f9565b9050600082516041141561433d5761433a8284614803565b90505b846001600160a01b0316816001600160a01b031614611e9d57614368856001600160a01b0316613ea1565b156144e15760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156143d75781810151838201526020016143bf565b50505050905090810190601f1680156144045780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561442257600080fd5b505afa158015614436573d6000803e3d6000fd5b505050506040513d602081101561444c57600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146144db5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156128025781810151838201526020016127ea565b50611e9d565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b815260048101938452825160248201528251929392839260449092019190808383600083156128025781810151838201526020016127ea565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613504929190615b43565b60008381526101fd60205260408120546145a59084906120f1565b60008581526101fc60205260409020549091508111156145d75760405162461bcd60e51b8152600401610b4d90615a22565b60008481526101fd602052604090208190556001600160a01b03851661460f5760405162461bcd60e51b8152600401610b4d90615aab565b600061461961279f565b905061463a8160008861462b89612c90565b61463489612c90565b886110f0565b60008581526097602090815260408083206001600160a01b038a16845290915290205461466790856120f1565b60008681526097602090815260408083206001600160a01b038b1684529091528120919091556110f090829088888888612cd5565b6001600160e01b031980821614156146fb576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806147395750614739613984565b80614747575060005460ff16155b6147825760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff161580156147ad576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912061016291909155610163558015610b61576000805461ff0019169055505050565b805161177d906099906020840190614bd5565b4690565b6000612f47614883565b6000815160411461485b576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a614879868285856148be565b9695505050505050565b60006127a97f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6148b1614b14565b6148b9614b1b565b614b22565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561491f5760405162461bcd60e51b8152600401808060200182810382526022815260200180615dc76022913960400191505060405180910390fd5b6000601e8560ff1611156149f9576004850360ff16601b148061494857506004850360ff16601c145b6149835760405162461bcd60e51b8152600401808060200182810382526022815260200180615e6e6022913960400191505060405180910390fd5b600161498e87614b84565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156149e8573d6000803e3d6000fd5b505050602060405103519050614ab0565b8460ff16601b1480614a0e57508460ff16601c145b614a495760405162461bcd60e51b8152600401808060200182810382526022815260200180615e6e6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614aa3573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116614b0b576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b6000838383614b2f6147f5565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614c0b5760008555614c51565b82601f10614c2457805160ff1916838001178555614c51565b82800160010185558215614c51579182015b82811115614c51578251825591602001919060010190614c36565b50614c5d929150614c61565b5090565b5b80821115614c5d5760008155600101614c62565b80356106aa81615c54565b600082601f830112614c91578081fd5b81356020614ca6614ca183615b8d565b615b6a565b8281528181019085830183850287018401881015614cc2578586fd5b855b85811015614ce9578135614cd781615c54565b84529284019290840190600101614cc4565b5090979650505050505050565b600082601f830112614d06578081fd5b81356020614d16614ca183615b8d565b82815281810190858301855b85811015614ce957614d39898684358b0101614e60565b84529284019290840190600101614d22565b600082601f830112614d5b578081fd5b81356020614d6b614ca183615b8d565b82815281810190858301604080860288018501891015614d89578687fd5b865b86811015614df85781838b031215614da1578788fd5b81518281018181106001600160401b0382111715614dbb57fe5b83528335614dc881615c54565b8152838701356001600160601b0381168114614de257898afd5b8188015285529385019391810191600101614d8b565b509198975050505050505050565b600082601f830112614e16578081fd5b81356020614e26614ca183615b8d565b8281528181019085830183850287018401881015614e42578586fd5b855b85811015614ce957813584529284019290840190600101614e44565b600082601f830112614e70578081fd5b81356001600160401b03811115614e8357fe5b614e96601f8201601f1916602001615b6a565b818152846020838601011115614eaa578283fd5b816020850160208301379081016020019190915292915050565b600060c08284031215614ed5578081fd5b614edf60c0615b6a565b90508135815260208201356001600160401b0380821115614eff57600080fd5b614f0b85838601614e60565b6020840152604084013560408401526060840135915080821115614f2e57600080fd5b614f3a85838601614d4b565b60608401526080840135915080821115614f5357600080fd5b614f5f85838601614d4b565b608084015260a0840135915080821115614f7857600080fd5b50614f8584828501614cf6565b60a08301525092915050565b600060208284031215614fa2578081fd5b8135611b6581615c54565b60008060408385031215614fbf578081fd5b8235614fca81615c54565b91506020830135614fda81615c54565b809150509250929050565b600080600080600060a08688031215614ffc578081fd5b853561500781615c54565b9450602086013561501781615c54565b935060408601356001600160401b0380821115615032578283fd5b61503e89838a01614e06565b94506060880135915080821115615053578283fd5b61505f89838a01614e06565b93506080880135915080821115615074578283fd5b5061508188828901614e60565b9150509295509295909350565b600080600080600060a086880312156150a5578283fd5b85356150b081615c54565b945060208601356150c081615c54565b9350604086013592506060860135915060808601356001600160401b038111156150e8578182fd5b61508188828901614e60565b600080600060608486031215615108578081fd5b833561511381615c54565b925060208401356001600160401b038082111561512e578283fd5b61513a87838801614e06565b9350604086013591508082111561514f578283fd5b5061515c86828701614e06565b9150509250925092565b60008060408385031215615178578182fd5b823561518381615c54565b915060208301358015158114614fda578182fd5b600080600080600060a086880312156151ae578283fd5b85356151b981615c54565b945060208601356001600160401b038111156151d3578384fd5b6151df88828901614e60565b9450506040860135925060608601359150608086013560ff81168114615203578182fd5b809150509295509295909350565b60008060408385031215615223578182fd5b823561522e81615c54565b946020939093013593505050565b600080600060608486031215615250578081fd5b833561525b81615c54565b95602085013595506040909401359392505050565b600060208284031215615281578081fd5b81356001600160401b03811115615296578182fd5b6152a284828501614c81565b949350505050565b600080604083850312156152bc578182fd5b82356001600160401b03808211156152d2578384fd5b6152de86838701614c81565b935060208501359150808211156152f3578283fd5b5061530085828601614e06565b9150509250929050565b60006020828403121561531b578081fd5b81356001600160e01b031981168114611b65578182fd5b600060208284031215615343578081fd5b81356001600160401b03811115615358578182fd5b6152a284828501614e60565b60008060008060008060c0878903121561537c578384fd5b86356001600160401b0380821115615392578586fd5b61539e8a838b01614e60565b975060208901359150808211156153b3578586fd5b6153bf8a838b01614e60565b965060408901359150808211156153d4578586fd5b6153e08a838b01614e60565b955060608901359150808211156153f5578283fd5b5061540289828a01614e60565b93505061541160808801614c76565b915061541f60a08801614c76565b90509295509295509295565b600080600080600080600060e0888a031215615445578485fd5b87356001600160401b038082111561545b578687fd5b6154678b838c01614e60565b985060208a013591508082111561547c578687fd5b6154888b838c01614e60565b975060408a013591508082111561549d578687fd5b6154a98b838c01614e60565b965060608a01359150808211156154be578283fd5b506154cb8a828b01614e60565b9450506154da60808901614c76565b92506154e860a08901614c76565b91506154f660c08901614c76565b905092959891949750929550565b600080600080600080600060e0888a03121561551e578081fd5b87356001600160401b0380821115615534578283fd5b6155408b838c01614e60565b985060208a0135915080821115615555578283fd5b6155618b838c01614e60565b975060408a0135915080821115615576578283fd5b6155828b838c01614e60565b965060608a0135915080821115615597578283fd5b6155a38b838c01614e60565b955060808a01359150808211156155b8578283fd5b506155c58a828b01614c81565b9350506154e860a08901614c76565b600080600080608085870312156155e9578182fd5b84356001600160401b038111156155fe578283fd5b61560a87828801614ec4565b945050602085013561561b81615c54565b9250604085013561562b81615c54565b9396929550929360600135925050565b60008060006060848603121561564f578081fd5b83356001600160401b03811115615664578182fd5b61567086828701614ec4565b935050602084013561568181615c54565b929592945050506040919091013590565b6000602082840312156156a3578081fd5b5035919050565b6000806000606084860312156156be578081fd5b8335925060208401356156d081615c54565b915060408401356156e081615c54565b809150509250925092565b600080604083850312156156fd578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561575857815180516001600160a01b031688528301516001600160601b0316838801526040909601959082019060010161571f565b509495945050505050565b6000815180845260208085019450808401835b8381101561575857815187529582019590820190600101615776565b60008151808452815b818110156157b75760208185018101518683018201520161579b565b818111156157c85782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038416815260606020820181905260009061581590830185615792565b82810360408401526148798185615792565b6001600160a01b03929092168252602082015260400190565b600060208252611b65602083018461570c565b600060208252611b656020830184615763565b6000604082526158796040830185615763565b8281036020840152614b0b8185615763565b901515815260200190565b600060208252611b656020830184615792565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526152a2604083018461570c565b918252602082015260400190565b6040518181016001600160401b0381118282101715615b8557fe5b604052919050565b60006001600160401b03821115615ba057fe5b5060209081020190565b60e01c90565b600060443d1015615bc0576115e9565b600481823e6308c379a0615bd48251615baa565b14615bde576115e9565b6040513d600319016004823e80513d6001600160401b038160248401118184111715615c0d57505050506115e9565b82840192508251915080821115615c2757505050506115e9565b503d83016020828401011115615c3f575050506115e9565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114613a8c57600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a2646970667358221220f540d26841c40ddd1f27954b47aaa64f7ec5519fb4b4f9b16d43c26372e6e07e64736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101ed5760003560e01c80636c0360eb1161010d578063aa271e1a116100a0578063e985e9c51161006f578063e985e9c51461058a578063f242432a146105aa578063f2fde38b146105ca578063f5298aca146105ea578063ffc4e0a71461060a576101ed565b8063aa271e1a14610515578063cad96cca14610535578063e07f231914610555578063e8a3d48514610575576101ed565b80638da5cb5b116100dc5780638da5cb5b1461049e57806395d89b41146104c0578063983b2d56146104d5578063a22cb465146104f5576101ed565b80636c0360eb14610427578063715018a61461043c57806371e2a65714610451578063891be97414610471576101ed565b80632a55205a116101855780634e1273f4116101545780634e1273f41461039a57806355f804b3146103c757806361e05459146103e75780636b20c45414610407576101ed565b80632a55205a1461030c5780632d0335ab1461033a5780632eb2c2d61461035a5780633092afd51461037a576101ed565b80630e89341c116101c15780630e89341c1461028a5780630eaead67146102aa578063173c43d2146102cc578063220e4d73146102ec576101ed565b8062fdd58e146101f257806301ffc9a71461022857806306fdde03146102555780630c53c51c14610277575b600080fd5b3480156101fe57600080fd5b5061021261020d366004615211565b61062a565b60405161021f9190615b3a565b60405180910390f35b34801561023457600080fd5b5061024861024336600461530a565b61069c565b60405161021f919061588b565b34801561026157600080fd5b5061026a6106af565b60405161021f9190615896565b61026a610285366004615197565b61073e565b34801561029657600080fd5b5061026a6102a5366004615692565b610ab7565b3480156102b657600080fd5b506102ca6102c536600461563b565b610ac2565b005b3480156102d857600080fd5b506102ca6102e7366004615364565b610b66565b3480156102f857600080fd5b506102ca61030736600461542b565b610c16565b34801561031857600080fd5b5061032c6103273660046156eb565b610cd0565b60405161021f929190615827565b34801561034657600080fd5b50610212610355366004614f91565b610dde565b34801561036657600080fd5b506102ca610375366004614fe5565b610dfa565b34801561038657600080fd5b506102ca610395366004614f91565b6110f8565b3480156103a657600080fd5b506103ba6103b53660046152aa565b6111a8565b60405161021f9190615853565b3480156103d357600080fd5b506102ca6103e2366004615332565b611293565b3480156103f357600080fd5b506102ca610402366004615504565b611338565b34801561041357600080fd5b506102ca6104223660046150f4565b6113ce565b34801561043357600080fd5b5061026a611554565b34801561044857600080fd5b506102ca6115ec565b34801561045d57600080fd5b506102ca61046c366004615270565b611698565b34801561047d57600080fd5b5061049161048c366004615692565b611781565b60405161021f9190615840565b3480156104aa57600080fd5b506104b3611811565b60405161021f91906157dd565b3480156104cc57600080fd5b5061026a611820565b3480156104e157600080fd5b506102ca6104f0366004614f91565b61187c565b34801561050157600080fd5b506102ca610510366004615166565b611931565b34801561052157600080fd5b50610248610530366004614f91565b611a20565b34801561054157600080fd5b50610491610550366004615692565b611a3f565b34801561056157600080fd5b506102ca6105703660046156aa565b611aba565b34801561058157600080fd5b5061026a611afd565b34801561059657600080fd5b506102486105a5366004614fad565b611b59565b3480156105b657600080fd5b506102ca6105c536600461508e565b611b6c565b3480156105d657600080fd5b506102ca6105e5366004614f91565b611d25565b3480156105f657600080fd5b506102ca61060536600461523c565b611e28565b34801561061657600080fd5b506102ca6106253660046155d4565b611ea4565b60006001600160a01b0383166106715760405162461bcd60e51b815260040180806020018281038252602b815260200180615ce6602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b60006106a782611f4c565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b820191906000526020600020905b81548152906001019060200180831161071957829003601f168201915b505050505081565b6060600061074b86611feb565b90506000356001600160e01b031990811690821614156107b2576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102fb6020908152908490205483528201529081018790526107f08882888888612007565b61082b5760405162461bcd60e51b8152600401808060200182810382526021815260200180615efd6021913960400191505060405180910390fd5b6001600160a01b03881660009081526102fb60205260409020546108509060016120f1565b6102fb60008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106108bb5780518252601f19909201916020918201910161089c565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106109315780518252601f199092019160209182019101610912565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610993576040519150601f19603f3d011682016040523d82523d6000602084013e610998565b606091505b5091509150816109ef576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a6e578181015183820152602001610a56565b50505050905090810190601f168015610a9b5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b60606106a78261214b565b6102965460ff1615610b56578260600151600081518110610adf57fe5b6020026020010151600001516001600160a01b0316610afc611811565b6001600160a01b03161480610b315750610b318360600151600081518110610b2057fe5b602002602001015160000151611a20565b610b565760405162461bcd60e51b8152600401610b4d906158d4565b60405180910390fd5b610b618383836122e1565b505050565b610b748686868686866125dd565b610bc1604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610bf561279f565b8787604051610c06939291906157f1565b60405180910390a1505050505050565b610c248787878787876125dd565b610c71604051806040016040528060128152602001714552433131353552617269626c654d65746160701b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff19169055610c8581611d25565b7fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610cae61279f565b8888604051610cbf939291906157f1565b60405180910390a150505050505050565b60008281526101fa60205260408120548190610cf157506000905080610dd7565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d6d57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610d1e565b50505050905080600081518110610d8057fe5b60209081029190910101515192506000805b8251811015610dcb57828181518110610da757fe5b6020026020010151602001516001600160601b031682019150806001019050610d92565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102fb602052604090205490565b8151835114610e3a5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f956028913960400191505060405180910390fd5b6001600160a01b038416610e7f5760405162461bcd60e51b8152600401808060200182810382526025815260200180615de96025913960400191505060405180910390fd5b610e8761279f565b6001600160a01b0316856001600160a01b03161480610ead5750610ead856105a561279f565b610ee85760405162461bcd60e51b8152600401808060200182810382526032815260200180615e0e6032913960400191505060405180910390fd5b6000610ef261279f565b9050610f028187878787876110f0565b60005b8451811015611008576000858281518110610f1c57fe5b602002602001015190506000858381518110610f3457fe5b60200260200101519050610fa1816040518060600160405280602a8152602001615eb3602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546127ae9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a1681522054610fd890826120f1565b60009283526097602090815260408085206001600160a01b038c1686529091529092209190915550600101610f05565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561108e578181015183820152602001611076565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156110cd5781810151838201526020016110b5565b5050505090500194505050505060405180910390a46110f0818787878787612845565b505050505050565b61110061279f565b6001600160a01b0316611111611811565b6001600160a01b03161461115a576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b606081518351146111ea5760405162461bcd60e51b8152600401808060200182810382526029815260200180615f6c6029913960400191505060405180910390fd5b600083516001600160401b038111801561120357600080fd5b5060405190808252806020026020018201604052801561122d578160200160208202803683370190505b50905060005b845181101561128b5761126c85828151811061124b57fe5b602002602001015185838151811061125f57fe5b602002602001015161062a565b82828151811061127857fe5b6020908102919091010152600101611233565b509392505050565b61129b61279f565b6001600160a01b03166112ac611811565b6001600160a01b0316146112f5576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6112fe81612abb565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d68160405161132d9190615896565b60405180910390a150565b6113468787878786866125dd565b611397604051806040016040528060168152602001754552433131353552617269626c65557365724d65746160501b815250604051806040016040528060018152602001603160f81b81525061270f565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc610cae61279f565b80518251146113ef5760405162461bcd60e51b8152600401610b4d90615a83565b600082516001600160401b038111801561140857600080fd5b50604051908082528060200260200182016040528015611432578160200160208202803683370190505b509050600083516001600160401b038111801561144e57600080fd5b50604051908082528060200260200182016040528015611478578160200160208202803683370190505b50905060005b84518110156114ed576114b785828151811061149657fe5b60200260200101518583815181106114aa57fe5b6020026020010151612acf565b8483815181106114c357fe5b602002602001018484815181106114d657fe5b60209081029190910101919091525260010161147e565b506114f9858584612b44565b846001600160a01b031661150b61279f565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051611545929190615866565b60405180910390a35050505050565b61012f8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156115e15780601f106115b6576101008083540402835291602001916115e1565b820191906000526020600020905b8154815290600101906020018083116115c457829003601f168201915b505050505090505b90565b6115f461279f565b6001600160a01b0316611605611811565b6001600160a01b03161461164e576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6116a061279f565b6001600160a01b03166116b1611811565b6001600160a01b0316146116fa576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b60005b815181101561177d57600082828151811061171457fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016116fd565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561180657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016117b7565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b61188461279f565b6001600160a01b0316611895611811565b6001600160a01b0316146118de576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b031661194361279f565b6001600160a01b031614156119895760405162461bcd60e51b8152600401808060200182810382526029815260200180615f436029913960400191505060405180910390fd5b806098600061199661279f565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556119da61279f565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa6020908152604080832080548251818502810185019093528083526060949293919290918401821561180657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016117b7565b816001600160a01b0316611acc61279f565b6001600160a01b031614611af25760405162461bcd60e51b8152600401610b4d9061598b565b610b61838383612bb8565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107365780601f1061070b57610100808354040283529160200191610736565b6000611b658383612c64565b9392505050565b6001600160a01b038416611bb15760405162461bcd60e51b8152600401808060200182810382526025815260200180615de96025913960400191505060405180910390fd5b611bb961279f565b6001600160a01b0316856001600160a01b03161480611bdf5750611bdf856105a561279f565b611c1a5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b6000611c2461279f565b9050611c44818787611c3588612c90565b611c3e88612c90565b876110f0565b611c8b836040518060600160405280602a8152602001615eb3602a913960008781526097602090815260408083206001600160a01b038d16845290915290205491906127ae565b60008581526097602090815260408083206001600160a01b038b81168552925280832093909355871681522054611cc290846120f1565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a841693861692600080516020615cc683398151915292908290030190a46110f0818787878787612cd5565b611d2d61279f565b6001600160a01b0316611d3e611811565b6001600160a01b031614611d87576040805162461bcd60e51b81526020600482018190526024820152600080516020615edd833981519152604482015290519081900360640190fd5b6001600160a01b038116611dcc5760405162461bcd60e51b8152600401808060200182810382526026815260200180615d546026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600080611e358484612acf565b90925090508115611e4b57611e4b858584612e46565b8015611e9d57846001600160a01b0316611e6361279f565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051611545929190615b5c565b5050505050565b6000611eb484866000015161062a565b9050818115611eee578280831015611ec95750815b611ee9868689600001518460405180602001604052806000815250611b6c565b830390505b80156110f0578560600151600081518110611f0557fe5b6020026020010151600001516001600160a01b0316856001600160a01b031614611f415760405162461bcd60e51b8152600401610b4d906158a9565b6110f0868583610ac2565b60006001600160e01b03198216636db15a0f60e01b1480611f7d57506001600160e01b0319821663656cb66560e11b145b80611f9857506001600160e01b0319821663152a902d60e11b145b80611fb357506001600160e01b031982166301ffc9a760e01b145b80611fce57506001600160e01b03198216636cdb3d1360e11b145b806106a75750506001600160e01b0319166303a24d0760e21b1490565b6000815160001415611fff575060006106aa565b506020015190565b600080600161201d61201888612eba565b612f3d565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612074573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166120d0576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611b65576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081815261012e6020908152604080832080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352606094938301828280156121e05780601f106121b5576101008083540402835291602001916121e0565b820191906000526020600020905b8154815290600101906020018083116121c357829003601f168201915b5050505050905060006121f1611554565b9050805160001415612205575090506106aa565b81511561221f576122168183612f89565b925050506106aa565b806122298561316e565b6040516020018083805190602001908083835b6020831061225b5780518252601f19909201916020918201910161223c565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106122a35780518252601f199092019160209182019101612284565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c60006122f061279f565b9050806001600160a01b0316826001600160a01b0316148061231757506123178282611b59565b6123335760405162461bcd60e51b8152600401610b4d906159da565b600083116123535760405162461bcd60e51b8152600401610b4d906159b0565b845160009081526101fc60205260409020546124bc57846060015160008151811061237a57fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146123b65760405162461bcd60e51b8152600401610b4d90615960565b60008560400151116123da5760405162461bcd60e51b8152600401610b4d90615901565b8460a0015151856060015151146123f057600080fd5b60006123fb86613248565b905060005b8660600151518110156124715760008760600151828151811061241f57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b0316146124685761246881848a60a00151858151811061245b57fe5b602002602001015161349b565b50600101612400565b50612484866000015187604001516134a6565b61249686600001518760800151613510565b6124a8866000015187606001516136ff565b6124ba866000015187602001516138ae565b505b6124db8486600001518560405180602001604052806000815250613972565b836001600160a01b0316826001600160a01b03161461258c57816001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615cc6833981519152886000015187604051612536929190615b5c565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b0316600080516020615cc683398151915288600001518760405161257f929190615b5c565b60405180910390a4611e9d565b836001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615cc68339815191528860000151876040516125ce929190615b5c565b60405180910390a45050505050565b600054610100900460ff16806125f657506125f6613984565b80612604575060005460ff16155b61263f5760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff1615801561266a576000805460ff1961ff0019909116610100171660011790555b612672613995565b61267a613a8f565b612682613a91565b61268a613b42565b612692613be2565b6126aa60405180602001604052806000815250613c25565b6126b384613cf0565b6126bb613a8f565b6126c3613d15565b6126cd8787613db2565b6126d5613a8f565b6126de85612abb565b6126e9836001613ddb565b6126f4826001613ddb565b8015612706576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030612749613e3b565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102fc819055505050565b60006127a9613e45565b905090565b6000818484111561283d5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156128025781810151838201526020016127ea565b50505050905090810190601f16801561282f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b612857846001600160a01b0316613ea1565b156110f057836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156128e55781810151838201526020016128cd565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561292457818101518382015260200161290c565b50505050905001848103825285818151815260200191508051906020019080838360005b83811015612960578181015183820152602001612948565b50505050905090810190601f16801561298d5780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1580156129b257600080fd5b505af19250505080156129d757506040513d60208110156129d257600080fd5b505160015b612a6c576129e3615bb0565b806129ee5750612a35565b60405162461bcd60e51b81526020600482018181528351602484015283518493919283926044019190850190808383600083156128025781810151838201526020016127ea565b60405162461bcd60e51b8152600401808060200182810382526034815260200180615c6a6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b146127065760405162461bcd60e51b8152600401808060200182810382526028815260200180615c9e6028913960400191505060405180910390fd5b805161177d9061012f906020840190614bd5565b806000606084901c612adf61279f565b6001600160a01b0316816001600160a01b03161415612b3c578391506000612b0686613ea7565b90508015612b2b576000612b1987613eba565b8203905080861115612b29578093505b505b612b358684613ecd565b8285039350505b509250929050565b612b4c61279f565b6001600160a01b0316836001600160a01b03161480612b725750612b72836105a561279f565b612bad5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b610b61838383613ee6565b60008381526101fa6020526040812054905b81811015611e9d5760008581526101fa6020526040902080546001600160a01b038616919083908110612bf957fe5b6000918252602090912001546001600160a01b03161415612c5c5760008581526101fa60205260409020805484919083908110612c3257fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612bca565b6001600160a01b038116600090815260c9602052604081205460ff1680611b655750611b658383614154565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612cc457fe5b602090810291909101015292915050565b612ce7846001600160a01b0316613ea1565b156110f057836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612d76578181015183820152602001612d5e565b50505050905090810190601f168015612da35780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015612dc657600080fd5b505af1925050508015612deb57506040513d6020811015612de657600080fd5b505160015b612df7576129e3615bb0565b6001600160e01b0319811663f23a6e6160e01b146127065760405162461bcd60e51b8152600401808060200182810382526028815260200180615c9e6028913960400191505060405180910390fd5b612e4e61279f565b6001600160a01b0316836001600160a01b03161480612e745750612e74836105a561279f565b612eaf5760405162461bcd60e51b8152600401808060200182810382526029815260200180615d9e6029913960400191505060405180910390fd5b610b61838383614182565b6000604051806080016040528060438152602001615d1160439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612f476142a3565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b805182516060918491849110156130545784846040516020018083805190602001908083835b60208310612fce5780518252601f199092019160209182019101612faf565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106130165780518252601f199092019160209182019101612ff7565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610696565b60005b82518110156131645782818151811061306c57fe5b602001015160f81c60f81b6001600160f81b03191682828151811061308d57fe5b01602001516001600160f81b0319161461315c5785856040516020018083805190602001908083835b602083106130d55780518252601f1990920191602091820191016130b6565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061311d5780518252601f1990920191602091820191016130fe565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350505050610696565b600101613057565b5092949350505050565b60608161319357506040805180820190915260018152600360fc1b60208201526106aa565b8160005b81156131ab57600101600a82049150613197565b6000816001600160401b03811180156131c357600080fd5b506040519080825280601f01601f1916602001820160405280156131ee576020820181803683370190505b50859350905060001982015b831561323f57600a840660300160f81b8282806001900393508151811061321d57fe5b60200101906001600160f81b031916908160001a905350600a840493506131fa565b50949350505050565b6000808260800151516001600160401b038111801561326657600080fd5b50604051908082528060200260200182016040528015613290578160200160208202803683370190505b50905060005b8360800151518110156132e2576132c3846080015182815181106132b657fe5b60200260200101516142aa565b8282815181106132cf57fe5b6020908102919091010152600101613296565b5060008360600151516001600160401b038111801561330057600080fd5b5060405190808252806020026020018201604052801561332a578160200160208202803683370190505b50905060005b84606001515181101561336f57613350856060015182815181106132b657fe5b82828151811061335c57fe5b6020908102919091010152600101613330565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b838110156133d85781810151838201526020016133c0565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b83811015613429578181015183820152602001613411565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b610b61838383614317565b60008281526101fc6020526040902054156134c057600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c906135049084908490615b5c565b60405180910390a15050565b6000805b82518110156136b45760006001600160a01b031683828151811061353457fe5b6020026020010151600001516001600160a01b0316141561359c576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b8281815181106135a857fe5b6020026020010151602001516001600160601b031660001415613612576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b82818151811061361e57fe5b6020026020010151602001516001600160601b0316820191506101fa600085815260200190815260200160002083828151811061365757fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501613514565b5061271081106136f55760405162461bcd60e51b8152600401808060200182810382526025815260200180615f1e6025913960400191505060405180910390fd5b610b618383614559565b60008281526101fb6020526040812090805b835181101561384d5760006001600160a01b031684828151811061373157fe5b6020026020010151600001516001600160a01b031614156137645760405162461bcd60e51b8152600401610b4d90615a4c565b83818151811061377057fe5b6020026020010151602001516001600160601b0316600014156137a55760405162461bcd60e51b8152600401610b4d9061592b565b828482815181106137b257fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b03199092169190911790921691909117905583516138439085908390811061381f57fe5b6020026020010151602001516001600160601b0316836120f190919063ffffffff16565b9150600101613711565b50806127101461386f5760405162461bcd60e51b8152600401610b4d90615aec565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f84846040516138a0929190615b43565b60405180910390a150505050565b600082815261012e6020908152604090912082516138ce92840190614bd5565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b6138fa8461214b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561393457818101518382015260200161391c565b50505050905090810190601f1680156139615780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b61397e8484848461458a565b50505050565b600061398f30613ea1565b15905090565b600054610100900460ff16806139ae57506139ae613984565b806139bc575060005460ff16155b6139f75760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613a22576000805460ff1961ff0019909116610100171660011790555b6000613a2c61279f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015613a8c576000805461ff00191690555b50565b565b600054610100900460ff1680613aaa5750613aaa613984565b80613ab8575060005460ff16155b613af35760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613b1e576000805460ff1961ff0019909116610100171660011790555b613b2e6301ffc9a760e01b61469c565b8015613a8c576000805461ff001916905550565b600054610100900460ff1680613b5b5750613b5b613984565b80613b69575060005460ff16155b613ba45760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613b2e576000805460ff1961ff0019909116610100171660011790558015613a8c576000805461ff001916905550565b613a8f604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250614720565b600054610100900460ff1680613c3e5750613c3e613984565b80613c4c575060005460ff16155b613c875760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613cb2576000805460ff1961ff0019909116610100171660011790555b613cbb826147e2565b613ccb636cdb3d1360e11b61469c565b613cdb6303a24d0760e21b61469c565b801561177d576000805461ff00191690555050565b8051613d0490610230906020840190614bd5565b50613a8c63e8a3d48560e01b61469c565b600054610100900460ff1680613d2e5750613d2e613984565b80613d3c575060005460ff16155b613d775760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff16158015613da2576000805460ff1961ff0019909116610100171660011790555b613b2e63656cb66560e11b61469c565b8151613dc690610262906020850190614bd5565b508051610b6190610263906020840190614bd5565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b60006127a96147f5565b600033301415613e9c57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b031691506115e99050565b503390565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b038316613f2b5760405162461bcd60e51b8152600401808060200182810382526023815260200180615e906023913960400191505060405180910390fd5b8051825114613f6b5760405162461bcd60e51b8152600401808060200182810382526028815260200180615f956028913960400191505060405180910390fd5b6000613f7561279f565b9050613f95818560008686604051806020016040528060008152506110f0565b60005b83518110156140735761402a838281518110613fb057fe5b6020026020010151604051806060016040528060248152602001615d7a6024913960976000888681518110613fe157fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020546127ae9092919063ffffffff16565b6097600086848151811061403a57fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101613f98565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156140fa5781810151838201526020016140e2565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015614139578181015183820152602001614121565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b0383166141c75760405162461bcd60e51b8152600401808060200182810382526023815260200180615e906023913960400191505060405180910390fd5b60006141d161279f565b9050614201818560006141e387612c90565b6141ec87612c90565b604051806020016040528060008152506110f0565b61424882604051806060016040528060248152602001615d7a6024913960008681526097602090815260408083206001600160a01b038b16845290915290205491906127ae565b60008481526097602090815260408083206001600160a01b03808a1680865291845282852095909555815188815292830187905281519394909390861692600080516020615cc683398151915292908290030190a450505050565b6102fc5490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000614322836147f9565b9050600082516041141561433d5761433a8284614803565b90505b846001600160a01b0316816001600160a01b031614611e9d57614368856001600160a01b0316613ea1565b156144e15760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156143d75781810151838201526020016143bf565b50505050905090810190601f1680156144045780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561442257600080fd5b505afa158015614436573d6000803e3d6000fd5b505050506040513d602081101561444c57600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146144db5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156128025781810151838201526020016127ea565b50611e9d565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b815260048101938452825160248201528251929392839260449092019190808383600083156128025781810151838201526020016127ea565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613504929190615b43565b60008381526101fd60205260408120546145a59084906120f1565b60008581526101fc60205260409020549091508111156145d75760405162461bcd60e51b8152600401610b4d90615a22565b60008481526101fd602052604090208190556001600160a01b03851661460f5760405162461bcd60e51b8152600401610b4d90615aab565b600061461961279f565b905061463a8160008861462b89612c90565b61463489612c90565b886110f0565b60008581526097602090815260408083206001600160a01b038a16845290915290205461466790856120f1565b60008681526097602090815260408083206001600160a01b038b1684529091528120919091556110f090829088888888612cd5565b6001600160e01b031980821614156146fb576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806147395750614739613984565b80614747575060005460ff16155b6147825760405162461bcd60e51b815260040180806020018281038252602e815260200180615e40602e913960400191505060405180910390fd5b600054610100900460ff161580156147ad576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912061016291909155610163558015610b61576000805461ff0019169055505050565b805161177d906099906020840190614bd5565b4690565b6000612f47614883565b6000815160411461485b576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a614879868285856148be565b9695505050505050565b60006127a97f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6148b1614b14565b6148b9614b1b565b614b22565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561491f5760405162461bcd60e51b8152600401808060200182810382526022815260200180615dc76022913960400191505060405180910390fd5b6000601e8560ff1611156149f9576004850360ff16601b148061494857506004850360ff16601c145b6149835760405162461bcd60e51b8152600401808060200182810382526022815260200180615e6e6022913960400191505060405180910390fd5b600161498e87614b84565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156149e8573d6000803e3d6000fd5b505050602060405103519050614ab0565b8460ff16601b1480614a0e57508460ff16601c145b614a495760405162461bcd60e51b8152600401808060200182810382526022815260200180615e6e6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614aa3573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116614b0b576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b6000838383614b2f6147f5565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614c0b5760008555614c51565b82601f10614c2457805160ff1916838001178555614c51565b82800160010185558215614c51579182015b82811115614c51578251825591602001919060010190614c36565b50614c5d929150614c61565b5090565b5b80821115614c5d5760008155600101614c62565b80356106aa81615c54565b600082601f830112614c91578081fd5b81356020614ca6614ca183615b8d565b615b6a565b8281528181019085830183850287018401881015614cc2578586fd5b855b85811015614ce9578135614cd781615c54565b84529284019290840190600101614cc4565b5090979650505050505050565b600082601f830112614d06578081fd5b81356020614d16614ca183615b8d565b82815281810190858301855b85811015614ce957614d39898684358b0101614e60565b84529284019290840190600101614d22565b600082601f830112614d5b578081fd5b81356020614d6b614ca183615b8d565b82815281810190858301604080860288018501891015614d89578687fd5b865b86811015614df85781838b031215614da1578788fd5b81518281018181106001600160401b0382111715614dbb57fe5b83528335614dc881615c54565b8152838701356001600160601b0381168114614de257898afd5b8188015285529385019391810191600101614d8b565b509198975050505050505050565b600082601f830112614e16578081fd5b81356020614e26614ca183615b8d565b8281528181019085830183850287018401881015614e42578586fd5b855b85811015614ce957813584529284019290840190600101614e44565b600082601f830112614e70578081fd5b81356001600160401b03811115614e8357fe5b614e96601f8201601f1916602001615b6a565b818152846020838601011115614eaa578283fd5b816020850160208301379081016020019190915292915050565b600060c08284031215614ed5578081fd5b614edf60c0615b6a565b90508135815260208201356001600160401b0380821115614eff57600080fd5b614f0b85838601614e60565b6020840152604084013560408401526060840135915080821115614f2e57600080fd5b614f3a85838601614d4b565b60608401526080840135915080821115614f5357600080fd5b614f5f85838601614d4b565b608084015260a0840135915080821115614f7857600080fd5b50614f8584828501614cf6565b60a08301525092915050565b600060208284031215614fa2578081fd5b8135611b6581615c54565b60008060408385031215614fbf578081fd5b8235614fca81615c54565b91506020830135614fda81615c54565b809150509250929050565b600080600080600060a08688031215614ffc578081fd5b853561500781615c54565b9450602086013561501781615c54565b935060408601356001600160401b0380821115615032578283fd5b61503e89838a01614e06565b94506060880135915080821115615053578283fd5b61505f89838a01614e06565b93506080880135915080821115615074578283fd5b5061508188828901614e60565b9150509295509295909350565b600080600080600060a086880312156150a5578283fd5b85356150b081615c54565b945060208601356150c081615c54565b9350604086013592506060860135915060808601356001600160401b038111156150e8578182fd5b61508188828901614e60565b600080600060608486031215615108578081fd5b833561511381615c54565b925060208401356001600160401b038082111561512e578283fd5b61513a87838801614e06565b9350604086013591508082111561514f578283fd5b5061515c86828701614e06565b9150509250925092565b60008060408385031215615178578182fd5b823561518381615c54565b915060208301358015158114614fda578182fd5b600080600080600060a086880312156151ae578283fd5b85356151b981615c54565b945060208601356001600160401b038111156151d3578384fd5b6151df88828901614e60565b9450506040860135925060608601359150608086013560ff81168114615203578182fd5b809150509295509295909350565b60008060408385031215615223578182fd5b823561522e81615c54565b946020939093013593505050565b600080600060608486031215615250578081fd5b833561525b81615c54565b95602085013595506040909401359392505050565b600060208284031215615281578081fd5b81356001600160401b03811115615296578182fd5b6152a284828501614c81565b949350505050565b600080604083850312156152bc578182fd5b82356001600160401b03808211156152d2578384fd5b6152de86838701614c81565b935060208501359150808211156152f3578283fd5b5061530085828601614e06565b9150509250929050565b60006020828403121561531b578081fd5b81356001600160e01b031981168114611b65578182fd5b600060208284031215615343578081fd5b81356001600160401b03811115615358578182fd5b6152a284828501614e60565b60008060008060008060c0878903121561537c578384fd5b86356001600160401b0380821115615392578586fd5b61539e8a838b01614e60565b975060208901359150808211156153b3578586fd5b6153bf8a838b01614e60565b965060408901359150808211156153d4578586fd5b6153e08a838b01614e60565b955060608901359150808211156153f5578283fd5b5061540289828a01614e60565b93505061541160808801614c76565b915061541f60a08801614c76565b90509295509295509295565b600080600080600080600060e0888a031215615445578485fd5b87356001600160401b038082111561545b578687fd5b6154678b838c01614e60565b985060208a013591508082111561547c578687fd5b6154888b838c01614e60565b975060408a013591508082111561549d578687fd5b6154a98b838c01614e60565b965060608a01359150808211156154be578283fd5b506154cb8a828b01614e60565b9450506154da60808901614c76565b92506154e860a08901614c76565b91506154f660c08901614c76565b905092959891949750929550565b600080600080600080600060e0888a03121561551e578081fd5b87356001600160401b0380821115615534578283fd5b6155408b838c01614e60565b985060208a0135915080821115615555578283fd5b6155618b838c01614e60565b975060408a0135915080821115615576578283fd5b6155828b838c01614e60565b965060608a0135915080821115615597578283fd5b6155a38b838c01614e60565b955060808a01359150808211156155b8578283fd5b506155c58a828b01614c81565b9350506154e860a08901614c76565b600080600080608085870312156155e9578182fd5b84356001600160401b038111156155fe578283fd5b61560a87828801614ec4565b945050602085013561561b81615c54565b9250604085013561562b81615c54565b9396929550929360600135925050565b60008060006060848603121561564f578081fd5b83356001600160401b03811115615664578182fd5b61567086828701614ec4565b935050602084013561568181615c54565b929592945050506040919091013590565b6000602082840312156156a3578081fd5b5035919050565b6000806000606084860312156156be578081fd5b8335925060208401356156d081615c54565b915060408401356156e081615c54565b809150509250925092565b600080604083850312156156fd578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561575857815180516001600160a01b031688528301516001600160601b0316838801526040909601959082019060010161571f565b509495945050505050565b6000815180845260208085019450808401835b8381101561575857815187529582019590820190600101615776565b60008151808452815b818110156157b75760208185018101518683018201520161579b565b818111156157c85782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038416815260606020820181905260009061581590830185615792565b82810360408401526148798185615792565b6001600160a01b03929092168252602082015260400190565b600060208252611b65602083018461570c565b600060208252611b656020830184615763565b6000604082526158796040830185615763565b8281036020840152614b0b8185615763565b901515815260200190565b600060208252611b656020830184615792565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526152a2604083018461570c565b918252602082015260400190565b6040518181016001600160401b0381118282101715615b8557fe5b604052919050565b60006001600160401b03821115615ba057fe5b5060209081020190565b60e01c90565b600060443d1015615bc0576115e9565b600481823e6308c379a0615bd48251615baa565b14615bde576115e9565b6040513d600319016004823e80513d6001600160401b038160248401118184111715615c0d57505050506115e9565b82840192508251915080821115615c2757505050506115e9565b503d83016020828401011115615c3f575050506115e9565b601f01601f1916810160200160405291505090565b6001600160a01b0381168114613a8c57600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a2646970667358221220f540d26841c40ddd1f27954b47aaa64f7ec5519fb4b4f9b16d43c26372e6e07e64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "addMinter(address)": { + "details": "Add `minter` to the list of allowed minters." + }, + "addMinters(address[])": { + "details": "Add `minters` to the list of allowed minters." + }, + "balanceOf(address,uint256)": { + "details": "See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address." + }, + "balanceOfBatch(address[],uint256[])": { + "details": "See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length." + }, + "baseURI()": { + "details": "Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID." + }, + "isMinter(address)": { + "details": "Returns `true` if `account` has been granted to minters." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "removeMinter(address)": { + "details": "Revoke `_minter` from the list of allowed minters." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)": { + "details": "See {IERC1155-safeBatchTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,uint256,bytes)": { + "details": "See {IERC1155-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC1155-setApprovalForAll}." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 307, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 364, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 25039, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_balances", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))" + }, + { + "astId": 25045, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_operatorApprovals", + "offset": 0, + "slot": "152", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 25047, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_uri", + "offset": 0, + "slot": "153", + "type": "t_string_storage" + }, + { + "astId": 26040, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "154", + "type": "t_array(t_uint256)47_storage" + }, + { + "astId": 24041, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "defaultApprovals", + "offset": 0, + "slot": "201", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 24091, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "202", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 24031, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "252", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 23834, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_tokenURIs", + "offset": 0, + "slot": "302", + "type": "t_mapping(t_uint256,t_string_storage)" + }, + { + "astId": 23836, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_baseURI", + "offset": 0, + "slot": "303", + "type": "t_string_storage" + }, + { + "astId": 23951, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 138, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "354", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "355", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "356", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26448, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "406", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26076, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "456", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 21496, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "royalties", + "offset": 0, + "slot": "506", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" + }, + { + "astId": 24128, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "creators", + "offset": 0, + "slot": "507", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" + }, + { + "astId": 24132, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "supply", + "offset": 0, + "slot": "508", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 24136, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "minted", + "offset": 0, + "slot": "509", + "type": "t_mapping(t_uint256,t_uint256)" + }, + { + "astId": 24749, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "510", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22321, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "contractURI", + "offset": 0, + "slot": "560", + "type": "t_string_storage" + }, + { + "astId": 22353, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "561", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 23458, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "name", + "offset": 0, + "slot": "610", + "type": "t_string_storage" + }, + { + "astId": 23460, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "symbol", + "offset": 0, + "slot": "611", + "type": "t_string_storage" + }, + { + "astId": 23819, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "612", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22359, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "isPrivate", + "offset": 0, + "slot": "662", + "type": "t_bool" + }, + { + "astId": 22363, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "663", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 22488, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "_minters", + "offset": 0, + "slot": "712", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 22605, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "713", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 19515, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "nonces", + "offset": 0, + "slot": "763", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 19517, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "domainSeparator", + "offset": 0, + "slot": "764", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)19269_storage)dyn_storage": { + "base": "t_struct(Part)19269_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)47_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[47]", + "numberOfBytes": "1504" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct LibPart.Part[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(Part)19269_storage)dyn_storage" + }, + "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => mapping(address => uint256))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_uint256)" + }, + "t_mapping(t_uint256,t_string_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => string)", + "numberOfBytes": "32", + "value": "t_string_storage" + }, + "t_mapping(t_uint256,t_uint256)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Part)19269_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 19266, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 19268, + "contract": "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol:ERC1155RaribleMeta", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleMeta_Proxy.json new file mode 100644 index 000000000..47ce6f1a1 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ERC1155RaribleMeta_Proxy.json @@ -0,0 +1,301 @@ +{ + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "1124696", + "logsBloom": "0x00000400000000000000000000000020400000000400800000800000000000000000000000000000000000000000000000000000000040000100000000000000000000000000008000000000000002000001000000000800004000000000000000004000020000000000001080000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000100004000000000000000000000000000000000020000200000000010001000000000080000400000000000000000020000001000000000010000000000000800000000000000000001000000001000000", + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923", + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "logs": [ + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000a36e6ee8c5eebfb1738fb78ce3d09562869f58a4" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + }, + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + }, + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + }, + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + }, + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + }, + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" + ], + "data": "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 5, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + }, + { + "transactionIndex": 27, + "blockNumber": 18030224, + "transactionHash": "0x9a5bc64a4968874599273024eacf588130d4bee24f80cc2e9a2b8a33de436062", + "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0xd066d46bebc3bc01ad8cfc9f7169629f93072ac682ecbd2429f188f942b26923" + } + ], + "blockNumber": 18030224, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ERC20TransferProxy.json b/projects/hardhat-deploy/deployments/sei_testnet/ERC20TransferProxy.json new file mode 100644 index 000000000..fbf3fb964 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ERC20TransferProxy.json @@ -0,0 +1,281 @@ +{ + "address": "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__ERC20TransferProxy_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ERC20TransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "erc20safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xb03c5383095d8e28434d7b8cbc32137b2356a00fb4d32ac8b0aeebfcb5f6c981", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "697645", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x7e6f23078ac47a4c90dbda30268e8ae66208da412e5a0fa4b6e4169efb941e31", + "transactionHash": "0xb03c5383095d8e28434d7b8cbc32137b2356a00fb4d32ac8b0aeebfcb5f6c981", + "logs": [], + "blockNumber": 18030057, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__ERC20TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC20TransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"erc20safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":\"ERC20TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __ERC20TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x2fce5fa6025c24a87072eed4cec6ff8e9172ec7b72ca211286904847adf4a324\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610b0f806100206000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80639870d7fe116100665780639870d7fe1461011d5780639d5c7b6b14610143578063ac8a584a14610169578063e814f46d1461018f578063f2fde38b146101b55761009e565b80632ff26a0a146100a3578063715018a6146100ad57806375978127146100b5578063776062c3146100bd5780638da5cb5b146100f9575b600080fd5b6100ab6101db565b005b6100ab61028d565b6100ab610339565b6100ab600480360360808110156100d357600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356103ce565b61010161051d565b604080516001600160a01b039092168252519081900360200190f35b6100ab6004803603602081101561013357600080fd5b50356001600160a01b031661052c565b6100ab6004803603602081101561015957600080fd5b50356001600160a01b03166105b2565b6100ab6004803603602081101561017f57600080fd5b50356001600160a01b0316610666565b6100ab600480360360208110156101a557600080fd5b50356001600160a01b03166106e9565b6100ab600480360360208110156101cb57600080fd5b50356001600160a01b0316610786565b600054610100900460ff16806101f457506101f4610889565b80610202575060005460ff16155b61023d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610268576000805460ff1961ff0019909116610100171660011790555b61027061089a565b61027861093a565b801561028a576000805461ff00191690555b50565b610295610a33565b6001600160a01b03166102a661051d565b6001600160a01b0316146102ef576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103525750610352610889565b80610360575060005460ff16155b61039b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156103c6576000805460ff1961ff0019909116610100171660011790555b6102786101db565b606560006103da610a33565b6001600160a01b0316815260208101919091526040016000205460ff166104325760405162461bcd60e51b8152600401808060200182810382526028815260200180610ab26028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561049a57600080fd5b505af11580156104ae573d6000803e3d6000fd5b505050506040513d60208110156104c457600080fd5b5051610517576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b610534610a33565b6001600160a01b031661054561051d565b6001600160a01b03161461058e576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806105cb57506105cb610889565b806105d9575060005460ff16155b6106145760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff1615801561063f576000805460ff1961ff0019909116610100171660011790555b6106476101db565b61065082610786565b8015610662576000805461ff00191690555b5050565b61066e610a33565b6001600160a01b031661067f61051d565b6001600160a01b0316146106c8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806107025750610702610889565b80610710575060005460ff16155b61074b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610776576000805460ff1961ff0019909116610100171660011790555b61077e61089a565b61064761093a565b61078e610a33565b6001600160a01b031661079f61051d565b6001600160a01b0316146107e8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03811661082d5760405162461bcd60e51b8152600401808060200182810382526026815260200180610a3e6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061089430610a37565b15905090565b600054610100900460ff16806108b357506108b3610889565b806108c1575060005460ff16155b6108fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610278576000805460ff1961ff001990911661010017166001179055801561028a576000805461ff001916905550565b600054610100900460ff16806109535750610953610889565b80610961575060005460ff16155b61099c5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156109c7576000805460ff1961ff0019909116610100171660011790555b60006109d1610a33565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561028a576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220597fa1b0869f6e9a9c201e77b523de7b663d5ce8e581f4023871dace183130a564736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80639870d7fe116100665780639870d7fe1461011d5780639d5c7b6b14610143578063ac8a584a14610169578063e814f46d1461018f578063f2fde38b146101b55761009e565b80632ff26a0a146100a3578063715018a6146100ad57806375978127146100b5578063776062c3146100bd5780638da5cb5b146100f9575b600080fd5b6100ab6101db565b005b6100ab61028d565b6100ab610339565b6100ab600480360360808110156100d357600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356103ce565b61010161051d565b604080516001600160a01b039092168252519081900360200190f35b6100ab6004803603602081101561013357600080fd5b50356001600160a01b031661052c565b6100ab6004803603602081101561015957600080fd5b50356001600160a01b03166105b2565b6100ab6004803603602081101561017f57600080fd5b50356001600160a01b0316610666565b6100ab600480360360208110156101a557600080fd5b50356001600160a01b03166106e9565b6100ab600480360360208110156101cb57600080fd5b50356001600160a01b0316610786565b600054610100900460ff16806101f457506101f4610889565b80610202575060005460ff16155b61023d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610268576000805460ff1961ff0019909116610100171660011790555b61027061089a565b61027861093a565b801561028a576000805461ff00191690555b50565b610295610a33565b6001600160a01b03166102a661051d565b6001600160a01b0316146102ef576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103525750610352610889565b80610360575060005460ff16155b61039b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156103c6576000805460ff1961ff0019909116610100171660011790555b6102786101db565b606560006103da610a33565b6001600160a01b0316815260208101919091526040016000205460ff166104325760405162461bcd60e51b8152600401808060200182810382526028815260200180610ab26028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561049a57600080fd5b505af11580156104ae573d6000803e3d6000fd5b505050506040513d60208110156104c457600080fd5b5051610517576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b610534610a33565b6001600160a01b031661054561051d565b6001600160a01b03161461058e576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806105cb57506105cb610889565b806105d9575060005460ff16155b6106145760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff1615801561063f576000805460ff1961ff0019909116610100171660011790555b6106476101db565b61065082610786565b8015610662576000805461ff00191690555b5050565b61066e610a33565b6001600160a01b031661067f61051d565b6001600160a01b0316146106c8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806107025750610702610889565b80610710575060005460ff16155b61074b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610776576000805460ff1961ff0019909116610100171660011790555b61077e61089a565b61064761093a565b61078e610a33565b6001600160a01b031661079f61051d565b6001600160a01b0316146107e8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03811661082d5760405162461bcd60e51b8152600401808060200182810382526026815260200180610a3e6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061089430610a37565b15905090565b600054610100900460ff16806108b357506108b3610889565b806108c1575060005460ff16155b6108fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610278576000805460ff1961ff001990911661010017166001179055801561028a576000805461ff001916905550565b600054610100900460ff16806109535750610953610889565b80610961575060005460ff16155b61099c5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156109c7576000805460ff1961ff0019909116610100171660011790555b60006109d1610a33565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561028a576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220597fa1b0869f6e9a9c201e77b523de7b663d5ce8e581f4023871dace183130a564736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19884, + "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ERC721LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/sei_testnet/ERC721LazyMintTransferProxy.json new file mode 100644 index 000000000..a9d638849 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ERC721LazyMintTransferProxy.json @@ -0,0 +1,293 @@ +{ + "address": "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ERC721LazyMintTransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "asset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x3118ff45478065e368d202874a3eddc12a227137c86fee33746de31f45e6758c", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "935371", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x51c416906be9dd45b7fbeaa4f6bc09f27bd391934fe537734cfcf6b2ec308360", + "transactionHash": "0x3118ff45478065e368d202874a3eddc12a227137c86fee33746de31f45e6758c", + "logs": [], + "blockNumber": 18030079, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC721LazyMintTransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":\"ERC721LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n\\n function __ERC721LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\\n }\\n}\\n\",\"keccak256\":\"0x454e275be5d03f236ad96f9a2392e928d3397aad056dad7640fc1500867911a4\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610f4a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100d05780639870d7fe146100ee578063ac8a584a14610101578063e814f46d146100bd578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b5578063795c7aaa146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ae0565b6101d9565b6100a06102f7565b6100a06100cb3660046109d0565b6103a3565b6100d861045f565b6040516100e59190610ca9565b60405180910390f35b6100a06100fc3660046109d0565b61046e565b6100a061010f3660046109d0565b6104f4565b6100a06101223660046109d0565b610577565b600054610100900460ff1680610140575061014061067a565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc61068b565b6101c461072b565b80156101d6576000805461ff00191690555b50565b606560006101e5610824565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eed6028913960400191505060405180910390fd5b826020015160011461026a5760405162461bcd60e51b815260040161026190610cbd565b60405180910390fd5b60008084600001516020015180602001905181019061028991906109ec565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb29906102be90849088908890600401610ce9565b600060405180830381600087803b1580156102d857600080fd5b505af11580156102ec573d6000803e3d6000fd5b505050505050505050565b6102ff610824565b6001600160a01b031661031061045f565b6001600160a01b031614610359576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103bc57506103bc61067a565b806103ca575060005460ff16155b6104055760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff16158015610430576000805460ff1961ff0019909116610100171660011790555b61043861068b565b61044061072b565b61044982610577565b801561045b576000805461ff00191690555b5050565b6033546001600160a01b031690565b610476610824565b6001600160a01b031661048761045f565b6001600160a01b0316146104d0576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104fc610824565b6001600160a01b031661050d61045f565b6001600160a01b031614610556576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61057f610824565b6001600160a01b031661059061045f565b6001600160a01b0316146105d9576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03811661061e5760405162461bcd60e51b8152600401808060200182810382526026815260200180610e796026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061068530610828565b15905090565b600054610100900460ff16806106a457506106a461067a565b806106b2575060005460ff16155b6106ed5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff1680610744575061074461067a565b80610752575060005460ff16155b61078d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156107b8576000805460ff1961ff0019909116610100171660011790555b60006107c2610824565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061084561084084610e11565b610dcf565b905082815283838301111561085957600080fd5b610867836020830184610e33565b9392505050565b803561082d81610e63565b600082601f830112610889578081fd5b8151602061089961084083610df3565b82815281810190858301855b858110156108e3578151880189603f8201126108bf578788fd5b6108d08a8783015160408401610832565b85525092840192908401906001016108a5565b5090979650505050505050565b600082601f830112610900578081fd5b8151602061091061084083610df3565b8281528181019085830160408086028801850189101561092e578687fd5b865b868110156109a35781838b031215610946578788fd5b815182810181811067ffffffffffffffff8211171561096157fe5b8352835161096e81610e63565b8152838701516bffffffffffffffffffffffff8116811461098d57898afd5b8188015285529385019391810191600101610930565b509198975050505050505050565b600082601f8301126109c1578081fd5b61086783835160208501610832565b6000602082840312156109e1578081fd5b813561086781610e63565b600080604083850312156109fe578081fd5b8251610a0981610e63565b602084015190925067ffffffffffffffff80821115610a26578283fd5b9084019060a08287031215610a39578283fd5b610a4360a0610dcf565b82518152602083015182811115610a58578485fd5b610a64888286016109b1565b602083015250604083015182811115610a7b578485fd5b610a87888286016108f0565b604083015250606083015182811115610a9e578485fd5b610aaa888286016108f0565b606083015250608083015182811115610ac1578485fd5b610acd88828601610879565b6080830152508093505050509250929050565b600080600060608486031215610af4578081fd5b833567ffffffffffffffff80821115610b0b578283fd5b81860191506040808389031215610b20578384fd5b80518181018181108482111715610b3357fe5b808352843584811115610b44578687fd5b8501808b03841315610b54578687fd5b608083018281108682111715610b6657fe5b845280356001600160e01b031981168114610b7f578788fd5b825260208181013586811115610b93578889fd5b82019550601f86018c13610ba5578788fd5b85359150610bb561084083610e11565b8281528c82848901011115610bc8578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bf7818c0161086e565b985050505050610c0881880161086e565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c7257815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c34565b509495945050505050565b60008151808452610c95816020860160208601610e33565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610d11610100850182610c7d565b90506040870151605f19808684030160a0870152610d2f8383610c21565b925060608901519150808684030160c0870152610d4c8383610c21565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610da457601f19868303018452610d92828651610c7d565b94870194938701939150600101610d76565b508096505050505050610db981840186610c14565b50610dc76040830184610c14565b949350505050565b60405181810167ffffffffffffffff81118282101715610deb57fe5b604052919050565b600067ffffffffffffffff821115610e0757fe5b5060209081020190565b600067ffffffffffffffff821115610e2557fe5b50601f01601f191660200190565b60005b83811015610e4e578181015183820152602001610e36565b83811115610e5d576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a70ad50617bc7d86721e59644bb144857ba8df35926720d11f324896d0ef12f264736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100d05780639870d7fe146100ee578063ac8a584a14610101578063e814f46d146100bd578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b5578063795c7aaa146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ae0565b6101d9565b6100a06102f7565b6100a06100cb3660046109d0565b6103a3565b6100d861045f565b6040516100e59190610ca9565b60405180910390f35b6100a06100fc3660046109d0565b61046e565b6100a061010f3660046109d0565b6104f4565b6100a06101223660046109d0565b610577565b600054610100900460ff1680610140575061014061067a565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc61068b565b6101c461072b565b80156101d6576000805461ff00191690555b50565b606560006101e5610824565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eed6028913960400191505060405180910390fd5b826020015160011461026a5760405162461bcd60e51b815260040161026190610cbd565b60405180910390fd5b60008084600001516020015180602001905181019061028991906109ec565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb29906102be90849088908890600401610ce9565b600060405180830381600087803b1580156102d857600080fd5b505af11580156102ec573d6000803e3d6000fd5b505050505050505050565b6102ff610824565b6001600160a01b031661031061045f565b6001600160a01b031614610359576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103bc57506103bc61067a565b806103ca575060005460ff16155b6104055760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff16158015610430576000805460ff1961ff0019909116610100171660011790555b61043861068b565b61044061072b565b61044982610577565b801561045b576000805461ff00191690555b5050565b6033546001600160a01b031690565b610476610824565b6001600160a01b031661048761045f565b6001600160a01b0316146104d0576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104fc610824565b6001600160a01b031661050d61045f565b6001600160a01b031614610556576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61057f610824565b6001600160a01b031661059061045f565b6001600160a01b0316146105d9576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03811661061e5760405162461bcd60e51b8152600401808060200182810382526026815260200180610e796026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061068530610828565b15905090565b600054610100900460ff16806106a457506106a461067a565b806106b2575060005460ff16155b6106ed5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff1680610744575061074461067a565b80610752575060005460ff16155b61078d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156107b8576000805460ff1961ff0019909116610100171660011790555b60006107c2610824565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061084561084084610e11565b610dcf565b905082815283838301111561085957600080fd5b610867836020830184610e33565b9392505050565b803561082d81610e63565b600082601f830112610889578081fd5b8151602061089961084083610df3565b82815281810190858301855b858110156108e3578151880189603f8201126108bf578788fd5b6108d08a8783015160408401610832565b85525092840192908401906001016108a5565b5090979650505050505050565b600082601f830112610900578081fd5b8151602061091061084083610df3565b8281528181019085830160408086028801850189101561092e578687fd5b865b868110156109a35781838b031215610946578788fd5b815182810181811067ffffffffffffffff8211171561096157fe5b8352835161096e81610e63565b8152838701516bffffffffffffffffffffffff8116811461098d57898afd5b8188015285529385019391810191600101610930565b509198975050505050505050565b600082601f8301126109c1578081fd5b61086783835160208501610832565b6000602082840312156109e1578081fd5b813561086781610e63565b600080604083850312156109fe578081fd5b8251610a0981610e63565b602084015190925067ffffffffffffffff80821115610a26578283fd5b9084019060a08287031215610a39578283fd5b610a4360a0610dcf565b82518152602083015182811115610a58578485fd5b610a64888286016109b1565b602083015250604083015182811115610a7b578485fd5b610a87888286016108f0565b604083015250606083015182811115610a9e578485fd5b610aaa888286016108f0565b606083015250608083015182811115610ac1578485fd5b610acd88828601610879565b6080830152508093505050509250929050565b600080600060608486031215610af4578081fd5b833567ffffffffffffffff80821115610b0b578283fd5b81860191506040808389031215610b20578384fd5b80518181018181108482111715610b3357fe5b808352843584811115610b44578687fd5b8501808b03841315610b54578687fd5b608083018281108682111715610b6657fe5b845280356001600160e01b031981168114610b7f578788fd5b825260208181013586811115610b93578889fd5b82019550601f86018c13610ba5578788fd5b85359150610bb561084083610e11565b8281528c82848901011115610bc8578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bf7818c0161086e565b985050505050610c0881880161086e565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c7257815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c34565b509495945050505050565b60008151808452610c95816020860160208601610e33565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610d11610100850182610c7d565b90506040870151605f19808684030160a0870152610d2f8383610c21565b925060608901519150808684030160c0870152610d4c8383610c21565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610da457601f19868303018452610d92828651610c7d565b94870194938701939150600101610d76565b508096505050505050610db981840186610c14565b50610dc76040830184610c14565b949350505050565b60405181810167ffffffffffffffff81118282101715610deb57fe5b604052919050565b600067ffffffffffffffff821115610e0757fe5b5060209081020190565b600067ffffffffffffffff821115610e2557fe5b50601f01601f191660200190565b60005b83811015610e4e578181015183820152602001610e36565b83811115610e5d576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a70ad50617bc7d86721e59644bb144857ba8df35926720d11f324896d0ef12f264736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19884, + "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleFactoryC2.json new file mode 100644 index 000000000..4e9c7d764 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleFactoryC2.json @@ -0,0 +1,396 @@ +{ + "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_beacon", + "type": "address" + }, + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create721RaribleProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "Create721RaribleUserProxy", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "beacon", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "_salt", + "type": "uint256" + } + ], + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x7c666552ced87c5230479c2f98428bd5005503811ed92ff9fbe72f3ea57daba4", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "1374604", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000010000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000041000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x2fb9185e57c5ff6a08510125f420485bf507b035eca61ed6ab1f46714e452e79", + "transactionHash": "0x7c666552ced87c5230479c2f98428bd5005503811ed92ff9fbe72f3ea57daba4", + "logs": [ + { + "transactionIndex": 12, + "blockNumber": 18030217, + "transactionHash": "0x7c666552ced87c5230479c2f98428bd5005503811ed92ff9fbe72f3ea57daba4", + "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x2fb9185e57c5ff6a08510125f420485bf507b035eca61ed6ab1f46714e452e79" + }, + { + "transactionIndex": 12, + "blockNumber": 18030217, + "transactionHash": "0x7c666552ced87c5230479c2f98428bd5005503811ed92ff9fbe72f3ea57daba4", + "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x2fb9185e57c5ff6a08510125f420485bf507b035eca61ed6ab1f46714e452e79" + } + ], + "blockNumber": 18030217, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":\"ERC721RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-721-minimal/ERC721RaribleMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC721Rarible token.\\n *\\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC721RaribleFactoryC2 is Ownable {\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create721RaribleProxy(address proxy);\\n event Create721RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n transferOwnership(initialOwner);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleProxy(beaconProxy);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that private contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n}\\n\",\"keccak256\":\"0x6fd15e5905a37d0a07d5ca73e818d8a54f29b58b241c3ea82255e3ef98f83043\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721BaseMinimal.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = true;\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x6d5c6aa0e1b36eb2bde4584ff91f87a5411e4931e022b55966bda85c169008b9\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620017f7380380620017f7833981016040819052620000349162000205565b600062000040620000cb565b600080546001600160a01b0319166001600160a01b038316908117825560405192935091600080516020620017d7833981519152908290a350600180546001600160a01b038087166001600160a01b031992831617909255600280548684169083161790556003805492851692909116919091179055620000c181620000cf565b5050505062000261565b3390565b620000d9620000cb565b6001600160a01b0316620000ec620001d9565b6001600160a01b03161462000148576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166200018f5760405162461bcd60e51b8152600401808060200182810382526026815260200180620017b16026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020620017d783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b80516001600160a01b03811681146200020057600080fd5b919050565b600080600080608085870312156200021b578384fd5b6200022685620001e8565b93506200023660208601620001e8565b92506200024660408601620001e8565b91506200025660608601620001e8565b905092959194509250565b61154080620002716000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220c6da39aa047c7bcc743388596f3312d9e6c5276f87af5dbcc961f12ecaecb5ef64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220c6da39aa047c7bcc743388596f3312d9e6c5276f87af5dbcc961f12ecaecb5ef64736f6c63430007060033", + "devdoc": { + "details": "This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.", + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 23081, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "beacon", + "offset": 0, + "slot": "1", + "type": "t_address" + }, + { + "astId": 23083, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "transferProxy", + "offset": 0, + "slot": "2", + "type": "t_address" + }, + { + "astId": 23085, + "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", + "label": "lazyTransferProxy", + "offset": 0, + "slot": "3", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMeta.json b/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMeta.json new file mode 100644 index 000000000..559cf2f7c --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMeta.json @@ -0,0 +1,1433 @@ +{ + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC721Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "1123036", + "logsBloom": "0x00000400000800000000000000000000400000000400800010800000000000000000000000000000000000000001000000000000000440000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000408000002800000000000000000000000000000000000100004000000000000000000000000000100000020000300000000000001000000000000000400000040000000000020000000000000000060000000000000000000000000000000000000000001000000", + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1", + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "logs": [ + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000003dc700b8bd71fcd8b80914e10b561c15816f71ac" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + }, + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + }, + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + }, + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + }, + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + }, + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" + ], + "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 5, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + }, + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + } + ], + "blockNumber": 18030202, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "__ERC721Rarible_init_proxy", + "args": [ + "Rarible", + "RARI", + "ipfs:/", + "", + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ] + }, + "implementation": "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMeta_Implementation.json b/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMeta_Implementation.json new file mode 100644 index 000000000..5bb4f5241 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMeta_Implementation.json @@ -0,0 +1,1667 @@ +{ + "address": "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "approved", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "ApprovalForAll", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "BaseUriChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721Rarible", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "symbol", + "type": "string" + } + ], + "name": "CreateERC721RaribleUser", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + } + ], + "name": "Creators", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "hasApproval", + "type": "bool" + } + ], + "name": "DefaultApproval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": true, + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "name": "MinterStatusChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSet", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address[]", + "name": "operators", + "type": "address[]" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721RaribleUser_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + } + ], + "name": "__ERC721Rarible_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC721Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "addMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "minters", + "type": "address[]" + } + ], + "name": "addMinters", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "baseURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "burn", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "contractURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getApproved", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + } + ], + "name": "getCreators", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + } + ], + "name": "getRaribleV2Royalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "isApprovedForAll", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "mintAndTransfer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "ownerOf", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_minter", + "type": "address" + } + ], + "name": "removeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_salePrice", + "type": "uint256" + } + ], + "name": "royaltyInfo", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltyAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bool", + "name": "approved", + "type": "bool" + } + ], + "name": "setApprovalForAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "newBaseURI", + "type": "string" + } + ], + "name": "setBaseURI", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "tokenURI", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "transferFromOrMint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + } + ], + "name": "updateAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xd723d99d6164c36e1175983949a238a8a931cfdd896d62c7122dfe4ceb7b3768", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "4791813", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x1d8e040d50d7ead30c2f5dcb4820c6f9c628143cdc1245bd86bef4c0e718d127", + "transactionHash": "0xd723d99d6164c36e1175983949a238a8a931cfdd896d62c7122dfe4ceb7b3768", + "logs": [], + "blockNumber": 18030199, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC721Rarible_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"burn(uint256)\":{\"details\":\"Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\":\"ERC721RaribleMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\\n using SafeMath for uint256;\\n\\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\\\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\\\"));\\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\\\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\\\");\\n\\n mapping(address => uint256) private nonces;\\n bytes32 internal domainSeparator;\\n\\n /*\\n * Meta transaction structure.\\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\\n * He should call the desired function directly in that case.\\n */\\n struct MetaTransaction {\\n uint256 nonce;\\n address from;\\n bytes functionSignature;\\n }\\n\\n /*\\n * Domain structure.\\n * Data(information to for making metaTransaction method uniq.) about method and contract\\n */\\n struct EIP712Domain {\\n string name;\\n string version;\\n address verifyingContract;\\n bytes32 salt;\\n }\\n\\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\\n\\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\\n domainSeparator = keccak256(abi.encode(\\n EIP712_DOMAIN_TYPEHASH,\\n keccak256(bytes(name)),\\n keccak256(bytes(version)),\\n address(this),\\n getSalt()\\n ));\\n }\\n\\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\\n if (inBytes.length == 0) {\\n return 0x0;\\n }\\n\\n assembly {\\n outBytes4 := mload(add(inBytes, 32))\\n }\\n }\\n\\n function executeMetaTransaction(address userAddress,\\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\\n require(destinationFunctionSig != msg.sig, \\\"Wrong functionSignature\\\");\\n MetaTransaction memory metaTx = MetaTransaction({\\n nonce : nonces[userAddress],\\n from : userAddress,\\n functionSignature : functionSignature\\n });\\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \\\"Signer and signature do not match\\\");\\n nonces[userAddress] = nonces[userAddress].add(1);\\n // Append userAddress at the end to extract it from calling context\\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\\n\\n require(success, \\\"Function call not successful\\\");\\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\\n return returnData;\\n }\\n\\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n META_TRANSACTION_TYPEHASH,\\n metaTx.nonce,\\n metaTx.from,\\n keccak256(metaTx.functionSignature)\\n ));\\n }\\n\\n function getNonce(address user) external view returns (uint256 nonce) {\\n nonce = nonces[user];\\n }\\n\\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\\n require(signer != address(0), \\\"Invalid signature\\\");\\n return signer == user;\\n }\\n\\n function _msgSender() internal view virtual override returns (address payable sender) {\\n if (msg.sender == address(this)) {\\n bytes memory array = msg.data;\\n uint256 index = msg.data.length;\\n assembly {\\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\\n }\\n } else {\\n sender = msg.sender;\\n }\\n return sender;\\n }\\n\\n function getSalt() internal pure returns (bytes32) {\\n return bytes32(getChainID());\\n }\\n\\n function getChainID() internal pure returns (uint256 id) {\\n assembly {\\n id := chainid()\\n }\\n }\\n\\n function getDomainSeparator() private view returns (bytes32) {\\n return domainSeparator;\\n }\\n\\n /**\\n * Accept message hash and returns hash message in EIP712 compatible form\\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\\n * https://eips.ethereum.org/EIPS/eip-712\\n * \\\"\\\\\\\\x19\\\" makes the encoding deterministic\\n * \\\"\\\\\\\\x01\\\" is the version byte to make it compatible to EIP-191\\n */\\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", getDomainSeparator(), messageHash));\\n }\\n\\n /**\\n * @dev verifies the call result and bubbles up revert reason for failed calls\\n *\\n * @param success : outcome of forwarded call\\n * @param returndata : returned data from the frowarded call\\n * @param errorMessage : fallback error message to show\\n */\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\\n if (!success) {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x58924a44eea8720bdcfb32f12d3374deac9605a3b75cb8872907856d526bde10\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\\\";\\nimport \\\"../ERC721BaseMinimal.sol\\\";\\nimport \\\"../../IsPrivateCollection.sol\\\";\\nimport \\\"../../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC721RaribleUserMeta\\\", \\\"1\\\");\\n\\n isPrivate = true;\\n\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC721RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n __MetaTransaction_init_unchained(\\\"ERC721RaribleMeta\\\", \\\"1\\\");\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\\n }\\n\\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\\n return super._msgSender();\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x8c1956eda6ce9c45b465280defb27fa3e6b8307d389334729effdb6e206e8e77\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506153f6806100206000396000f3fe6080604052600436106102045760003560e01c806370a0823111610118578063aa271e1a116100a0578063e07f23191161006f578063e07f2319146105df578063e8a3d485146105ff578063e985e9c514610614578063f2fde38b14610634578063ff14a3541461065457610204565b8063aa271e1a1461055f578063b88d4fde1461057f578063c87b56dd1461059f578063cad96cca146105bf57610204565b8063891be974116100e7578063891be974146104c85780638da5cb5b146104f557806395d89b411461050a578063983b2d561461051f578063a22cb4651461053f57610204565b806370a0823114610453578063715018a61461047357806371e2a65714610488578063832fbb29146104a857610204565b80632d0335ab1161019b57806342966c681161016a57806342966c68146103be5780634648eb9d146103de57806355f804b3146103fe5780636352211e1461041e5780636c0360eb1461043e57610204565b80632d0335ab146103315780633092afd51461035e5780633db397c61461037e57806342842e0e1461039e57610204565b80630c53c51c116101d75780630c53c51c146102b057806322a775b6146102c357806323b872dd146102e35780632a55205a1461030357610204565b806301ffc9a71461020957806306fdde031461023f578063081812fc14610261578063095ea7b31461028e575b600080fd5b34801561021557600080fd5b506102296102243660046148c5565b610674565b6040516102369190614dab565b60405180910390f35b34801561024b57600080fd5b50610254610687565b6040516102369190614db6565b34801561026d57600080fd5b5061028161027c366004614c34565b61071e565b6040516102369190614d35565b34801561029a57600080fd5b506102ae6102a9366004614868565b610781565b005b6102546102be3660046147ee565b610857565b3480156102cf57600080fd5b506102ae6102de366004614b8f565b610bd0565b3480156102ef57600080fd5b506102ae6102fe366004614714565b610c72565b34801561030f57600080fd5b5061032361031e366004614c72565b610cc9565b604051610236929190614d7f565b34801561033d57600080fd5b5061035161034c3660046146c0565b610dd7565b6040516102369190614f7c565b34801561036a57600080fd5b506102ae6103793660046146c0565b610df3565b34801561038a57600080fd5b506102ae61039936600461491f565b610ea3565b3480156103aa57600080fd5b506102ae6103b9366004614714565b610f52565b3480156103ca57600080fd5b506102ae6103d9366004614c34565b610f6d565b3480156103ea57600080fd5b506102ae6103f9366004614abf565b611037565b34801561040a57600080fd5b506102ae6104193660046148ed565b6110ee565b34801561042a57600080fd5b50610281610439366004614c34565b611193565b34801561044a57600080fd5b506102546111e7565b34801561045f57600080fd5b5061035161046e3660046146c0565b611249565b34801561047f57600080fd5b506102ae6112ad565b34801561049457600080fd5b506102ae6104a3366004614893565b611359565b3480156104b457600080fd5b506102ae6104c3366004614bd3565b61143e565b3480156104d457600080fd5b506104e86104e3366004614c34565b6114b9565b6040516102369190614d98565b34801561050157600080fd5b50610281611549565b34801561051657600080fd5b50610254611558565b34801561052b57600080fd5b506102ae61053a3660046146c0565b6115b9565b34801561054b57600080fd5b506102ae61055a3660046147bd565b61166e565b34801561056b57600080fd5b5061022961057a3660046146c0565b611774565b34801561058b57600080fd5b506102ae61059a366004614754565b611793565b3480156105ab57600080fd5b506102546105ba366004614c34565b6117f1565b3480156105cb57600080fd5b506104e86105da366004614c34565b6117fc565b3480156105eb57600080fd5b506102ae6105fa366004614c4c565b611877565b34801561060b57600080fd5b506102546118ba565b34801561062057600080fd5b5061022961062f3660046146dc565b611949565b34801561064057600080fd5b506102ae61064f3660046146c0565b61195e565b34801561066057600080fd5b506102ae61066f3660046149e6565b611a61565b600061067f82611b02565b90505b919050565b60fd8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b820191906000526020600020905b8154815290600101906020018083116106f657829003601f168201915b505050505090505b90565b600061072982611bbc565b6107645760405162461bcd60e51b815260040180806020018281038252602c815260200180615209602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b600061078c82611193565b9050806001600160a01b0316836001600160a01b031614156107df5760405162461bcd60e51b815260040180806020018281038252602181526020018061531a6021913960400191505060405180910390fd5b806001600160a01b03166107f1611bd9565b6001600160a01b0316148061080d575061080d8161062f611bd9565b6108485760405162461bcd60e51b81526004018080602001828103825260388152602001806151016038913960400191505060405180910390fd5b6108528383611be8565b505050565b6060600061086486611c57565b90506000356001600160e01b031990811690821614156108cb576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102f76020908152908490205483528201529081018790526109098882888888611c73565b6109445760405162461bcd60e51b81526004018080602001828103825260218152602001806152aa6021913960400191505060405180910390fd5b6001600160a01b03881660009081526102f76020526040902054610969906001611d5d565b6102f760008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106109d45780518252601f1990920191602091820191016109b5565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610a4a5780518252601f199092019160209182019101610a2b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610aac576040519150601f19603f3d011682016040523d82523d6000602084013e610ab1565b606091505b509150915081610b08576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b87578181015183820152602001610b6f565b50505050905090810190601f168015610bb45780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b6102925460ff1615610c64578160400151600081518110610bed57fe5b6020026020010151600001516001600160a01b0316610c0a611549565b6001600160a01b03161480610c3f5750610c3f8260400151600081518110610c2e57fe5b602002602001015160000151611774565b610c645760405162461bcd60e51b8152600401610c5b90614df4565b60405180910390fd5b610c6e8282611db7565b5050565b610c83610c7d611bd9565b82611f39565b610cbe5760405162461bcd60e51b815260040180806020018281038252603181526020018061533b6031913960400191505060405180910390fd5b610852838383611f45565b60008281526101c660205260408120548190610cea57506000905080610dd0565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d6657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610d17565b50505050905080600081518110610d7957fe5b60209081029190910101515192506000805b8251811015610dc457828181518110610da057fe5b6020026020010151602001516001600160601b031682019150806001019050610d8b565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102f7602052604090205490565b610dfb611bd9565b6001600160a01b0316610e0c611549565b6001600160a01b031614610e55576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b610eb1868686868686612064565b610efd6040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd610f31611bd9565b8787604051610f4293929190614d49565b60405180910390a1505050505050565b61085283838360405180602001604052806000815250611793565b610f7681611bbc565b610fe557606081901c610f87611bd9565b6001600160a01b0316816001600160a01b031614610fd65760405162461bcd60e51b815260040180806020018281038252602d8152602001806151dc602d913960400191505060405180910390fd5b610fdf8261220e565b50611034565b610ff0610c7d611bd9565b61102b5760405162461bcd60e51b81526004018080602001828103825260308152602001806153916030913960400191505060405180910390fd5b6110348161222a565b50565b611045878787878686612064565b6110956040518060400160405280601581526020017445524337323152617269626c65557365724d65746160581b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e99136110cc611bd9565b88886040516110dd93929190614d49565b60405180910390a150505050505050565b6110f6611bd9565b6001600160a01b0316611107611549565b6001600160a01b031614611150576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b611159816122c6565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d6816040516111889190614db6565b60405180910390a150565b600081815260ff60205260408120546001600160a01b03168061067f5760405162461bcd60e51b81526004018080602001828103825260298152602001806151636029913960400191505060405180910390fd5b6101c88054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b60006001600160a01b0382166112905760405162461bcd60e51b815260040180806020018281038252602a815260200180615139602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b6112b5611bd9565b6001600160a01b03166112c6611549565b6001600160a01b03161461130f576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b611361611bd9565b6001600160a01b0316611372611549565b6001600160a01b0316146113bb576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b60005b8151811015610c6e5760008282815181106113d557fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016113be565b825161144990611bbc565b156114625761145d82828560000151610f52565b610852565b826040015160008151811061147357fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146114af5760405162461bcd60e51b8152600401610c5b90614dc9565b6108528382610bd0565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561153e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114ef565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b6115c1611bd9565b6001600160a01b03166115d2611549565b6001600160a01b03161461161b576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b611676611bd9565b6001600160a01b0316826001600160a01b031614156116dc576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006116ea611bd9565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561172e611bd9565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b6117a461179e611bd9565b83611f39565b6117df5760405162461bcd60e51b815260040180806020018281038252603181526020018061533b6031913960400191505060405180910390fd5b6117eb848484846122da565b50505050565b606061067f8261232c565b60008181526101c66020908152604080832080548251818502810185019093528083526060949293919290918401821561153e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114ef565b816001600160a01b0316611889611bd9565b6001600160a01b0316146118af5760405162461bcd60e51b8152600401610c5b90614e81565b610852838383612337565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156119415780601f1061191657610100808354040283529160200191611941565b820191906000526020600020905b81548152906001019060200180831161192457829003601f168201915b505050505081565b600061195583836123e3565b90505b92915050565b611966611bd9565b6001600160a01b0316611977611549565b6001600160a01b0316146119c0576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b038116611a055760405162461bcd60e51b81526004018080602001828103825260268152602001806150696026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b611a6f878787878787612064565b611abb6040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff19169055611acf8161195e565b7ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd8188886040516110dd93929190614d49565b60006001600160e01b03198216638486f69f60e01b1480611b3357506001600160e01b0319821663656cb66560e11b145b80611b4e57506001600160e01b0319821663152a902d60e11b145b80611b6957506001600160e01b031982166301ffc9a760e01b145b80611b8457506001600160e01b031982166380ac58cd60e01b145b80611b9f57506001600160e01b03198216635b5e139f60e01b145b8061067f5750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b6000611be3612410565b905090565b60008181526101016020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c1e82611193565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000815160001415611c6b57506000610682565b506020015190565b6000806001611c89611c848861246c565b6124ef565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ce0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611d3c576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611955576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b815160601c6000611dc6611bd9565b90508360400151600081518110611dd957fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611e155760405162461bcd60e51b8152600401610c5b90614e56565b83608001515184604001515114611e2b57600080fd5b806001600160a01b0316826001600160a01b03161480611e505750611e508282611949565b611e6c5760405162461bcd60e51b8152600401610c5b90614edd565b6000611e778561253b565b905060005b856040015151811015611eed57600086604001518281518110611e9b57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611ee457611ee4818489608001518581518110611ed757fe5b6020026020010151612782565b50600101611e7c565b50611efc84866000015161278d565b611f0e856000015186606001516127a7565b611f2085600001518660400151612996565b611f3285600001518660200151612b45565b5050505050565b60006119558383612ba9565b826001600160a01b0316611f5882611193565b6001600160a01b031614611f9d5760405162461bcd60e51b81526004018080602001828103825260298152602001806152816029913960400191505060405180910390fd5b6001600160a01b038216611fe25760405162461bcd60e51b815260040180806020018281038252602481526020018061508f6024913960400191505060405180910390fd5b611fed838383610852565b611ff8600082611be8565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b031916821790559251849392916000805160206152fa83398151915291a4505050565b600054610100900460ff168061207d575061207d612bd6565b8061208b575060005460ff16155b6120c65760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff161580156120f1576000805460ff1961ff0019909116610100171660011790555b6120fa856122c6565b612102612be7565b61210a612c88565b612112612be7565b61211a612d25565b612122612dc2565b61212a612be7565b612132612ebb565b61213a612f8a565b61214384612f8c565b61214d8787612fb1565b61215883600161309c565b61216382600161309c565b8015612175576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab782805190602001208280519060200120306121b86130fd565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102f8819055505050565b600090815261010360205260409020805460ff19166001179055565b600061223582611193565b905061224381600084610852565b61224e600083611be8565b61225782613107565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b031916905561229c8261220e565b60405182906000906001600160a01b038416906000805160206152fa833981519152908390a45050565b8051610c6e906101c8906020840190614328565b6122e5848484611f45565b6122f184848484613110565b6117eb5760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b606061067f826132c6565b60008381526101c66020526040812054905b81811015611f325760008581526101c66020526040902080546001600160a01b03861691908390811061237857fe5b6000918252602090912001546001600160a01b031614156123db5760008581526101c6602052604090208054849190839081106123b157fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612349565b6001600160a01b038116600090815261012f602052604081205460ff1680611955575061195583836134a1565b60003330141561246757600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061071b9050565b503390565b600060405180608001604052806043815260200161502660439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60006124f96134d0565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000808260600151516001600160401b038111801561255957600080fd5b50604051908082528060200260200182016040528015612583578160200160208202803683370190505b50905060005b8360600151518110156125d5576125b6846060015182815181106125a957fe5b60200260200101516134d7565b8282815181106125c257fe5b6020908102919091010152600101612589565b5060008360400151516001600160401b03811180156125f357600080fd5b5060405190808252806020026020018201604052801561261d578160200160208202803683370190505b50905060005b84604001515181101561266257612643856040015182815181106125a957fe5b82828151811061264f57fe5b6020908102919091010152600101612623565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b838110156126c65781810151838201526020016126ae565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b838110156127175781810151838201526020016126ff565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b610852838383613544565b610c6e8282604051806020016040528060008152506137c3565b6000805b825181101561294b5760006001600160a01b03168382815181106127cb57fe5b6020026020010151600001516001600160a01b03161415612833576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b82818151811061283f57fe5b6020026020010151602001516001600160601b0316600014156128a9576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b8281815181106128b557fe5b6020026020010151602001516001600160601b0316820191506101c660008581526020019081526020016000208382815181106128ee57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b03199093169290921716179055016127ab565b50612710811061298c5760405162461bcd60e51b815260040180806020018281038252602581526020018061536c6025913960400191505060405180910390fd5b6108528383613815565b60008281526101fb6020526040812090805b8351811015612ae45760006001600160a01b03168482815181106129c857fe5b6020026020010151600001516001600160a01b031614156129fb5760405162461bcd60e51b8152600401610c5b90614ea6565b838181518110612a0757fe5b6020026020010151602001516001600160601b031660001415612a3c5760405162461bcd60e51b8152600401610c5b90614e21565b82848281518110612a4957fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612ada90859083908110612ab657fe5b6020026020010151602001516001600160601b031683611d5d90919063ffffffff16565b91506001016129a8565b508061271014612b065760405162461bcd60e51b8152600401610c5b90614f2e565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612b37929190614f85565b60405180910390a150505050565b612b4e82611bbc565b612b895760405162461bcd60e51b815260040180806020018281038252602c815260200180615235602c913960400191505060405180910390fd5b60008281526101c760209081526040909120825161085292840190614328565b6001600160a01b038216600090815261012f602052604081205460ff168061195557506119558383613852565b6000612be1306138ee565b15905090565b600054610100900460ff1680612c005750612c00612bd6565b80612c0e575060005460ff16155b612c495760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612c74576000805460ff1961ff0019909116610100171660011790555b8015611034576000805461ff001916905550565b600054610100900460ff1680612ca15750612ca1612bd6565b80612caf575060005460ff16155b612cea5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612d15576000805460ff1961ff0019909116610100171660011790555b612c7463656cb66560e11b6138f4565b600054610100900460ff1680612d3e5750612d3e612bd6565b80612d4c575060005460ff16155b612d875760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612db2576000805460ff1961ff0019909116610100171660011790555b612c746301ffc9a760e01b6138f4565b600054610100900460ff1680612ddb5750612ddb612bd6565b80612de9575060005460ff16155b612e245760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612e4f576000805460ff1961ff0019909116610100171660011790555b6000612e59611bd9565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611034576000805461ff001916905550565b600054610100900460ff1680612ed45750612ed4612bd6565b80612ee2575060005460ff16155b612f1d5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612f48576000805460ff1961ff0019909116610100171660011790555b612c74604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b815250613978565b565b8051612fa09061022e906020840190614328565b5061103463e8a3d48560e01b6138f4565b600054610100900460ff1680612fca5750612fca612bd6565b80612fd8575060005460ff16155b6130135760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff1615801561303e576000805460ff1961ff0019909116610100171660011790555b82516130519060fd906020860190614328565b5081516130659060fe906020850190614328565b506130766380ac58cd60e01b6138f4565b613086635b5e139f60e01b6138f4565b8015610852576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b6000611be3613a38565b61103481613a3c565b6000613124846001600160a01b03166138ee565b156132ba57836001600160a01b031663150b7a02613140611bd9565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156131b357818101518382015260200161319b565b50505050905090810190601f1680156131e05780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561320257600080fd5b505af192505050801561322757506040513d602081101561322257600080fd5b505160015b6132a0573d808015613255576040519150601f19603f3d011682016040523d82523d6000602084013e61325a565b606091505b5080516132985760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506132be565b5060015b949350505050565b60606132d182611bbc565b61330c5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152cb602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156133a05780601f10613375576101008083540402835291602001916133a0565b820191906000526020600020905b81548152906001019060200180831161338357829003601f168201915b5050505050905060006133b16111e7565b90508051600014156133c557509050610682565b8151156133df576133d68183613a45565b92505050610682565b806133e985613c2a565b6040516020018083805190602001908083835b6020831061341b5780518252601f1990920191602091820191016133fc565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106134635780518252601f199092019160209182019101613444565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b6102f85490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b600061354f83613d04565b9050600082516041141561356a576135678284613d0e565b90505b846001600160a01b0316816001600160a01b031614611f3257613595856001600160a01b03166138ee565b1561374b5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156136045781810151838201526020016135ec565b50505050905090810190601f1680156136315780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561364f57600080fd5b505afa158015613663573d6000803e3d6000fd5b505050506040513d602081101561367957600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146137455760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561370a5781810151838201526020016136f2565b50505050905090810190601f1680156137375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611f32565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b8152600481019384528251602482015282519293928392604490920191908083836000831561370a5781810151838201526020016136f2565b6137cd8383613d8e565b6137da6000848484613110565b6108525760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613846929190614f85565b60405180910390a15050565b600061385d82611bbc565b6138985760405162461bcd60e51b815260040180806020018281038252602c8152602001806150d5602c913960400191505060405180910390fd5b60006138a383611193565b9050806001600160a01b0316846001600160a01b031614806138de5750836001600160a01b03166138d38461071e565b6001600160a01b0316145b806132be57506132be8185611949565b3b151590565b6001600160e01b03198082161415613953576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806139915750613991612bd6565b8061399f575060005460ff16155b6139da5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015613a05576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015610852576000805461ff0019169055505050565b4690565b61103481613ef4565b80518251606091849184911015613b105784846040516020018083805190602001908083835b60208310613a8a5780518252601f199092019160209182019101613a6b565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613ad25780518252601f199092019160209182019101613ab3565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050611958565b60005b8251811015613c2057828181518110613b2857fe5b602001015160f81c60f81b6001600160f81b031916828281518110613b4957fe5b01602001516001600160f81b03191614613c185785856040516020018083805190602001908083835b60208310613b915780518252601f199092019160209182019101613b72565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613bd95780518252601f199092019160209182019101613bba565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350505050611958565b600101613b13565b5092949350505050565b606081613c4f57506040805180820190915260018152600360fc1b6020820152610682565b8160005b8115613c6757600101600a82049150613c53565b6000816001600160401b0381118015613c7f57600080fd5b506040519080825280601f01601f191660200182016040528015613caa576020820181803683370190505b50859350905060001982015b8315613cfb57600a840660300160f81b82828060019003935081518110613cd957fe5b60200101906001600160f81b031916908160001a905350600a84049350613cb6565b50949350505050565b60006124f9613f34565b60008151604114613d66576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a613d8486828585613f6f565b9695505050505050565b6001600160a01b038216613de9576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff1615613e45576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b613e4e81611bbc565b15613ea0576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613eac60008383610852565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b0319169091179055610c6e82826141c5565b60008181526101c7602052604090205460026000196101006001841615020190911604156110345760008181526101c760205260408120611034916143b4565b6000611be37f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613f626141cf565b613f6a6141d5565b6141db565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613fd05760405162461bcd60e51b81526004018080602001828103825260228152602001806150b36022913960400191505060405180910390fd5b6000601e8560ff1611156140aa576004850360ff16601b1480613ff957506004850360ff16601c145b6140345760405162461bcd60e51b81526004018080602001828103825260228152602001806151ba6022913960400191505060405180910390fd5b600161403f8761423d565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614099573d6000803e3d6000fd5b505050602060405103519050614161565b8460ff16601b14806140bf57508460ff16601c145b6140fa5760405162461bcd60e51b81526004018080602001828103825260228152602001806151ba6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614154573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166141bc576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b610c6e828261428e565b60975490565b60985490565b60008383836141e8613a38565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b03831681146142fd5760405182906001600160a01b038316906000906000805160206152fa833981519152908290a481836001600160a01b0316826001600160a01b03166000805160206152fa83398151915260405160405180910390a4610852565b60405182906001600160a01b038516906000906000805160206152fa833981519152908290a4505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261435e57600085556143a4565b82601f1061437757805160ff19168380011785556143a4565b828001600101855582156143a4579182015b828111156143a4578251825591602001919060010190614389565b506143b09291506143f4565b5090565b50805460018160011615610100020316600290046000825580601f106143da5750611034565b601f01602090049060005260206000209081019061103491905b5b808211156143b057600081556001016143f5565b803561068281614fde565b600082601f830112614424578081fd5b8135602061443961443483614fc1565b614f9e565b8281528181019085830183850287018401881015614455578586fd5b855b8581101561447c57813561446a81614fde565b84529284019290840190600101614457565b5090979650505050505050565b600082601f830112614499578081fd5b813560206144a961443483614fc1565b82815281810190858301855b8581101561447c576144cc898684358b0101614599565b845292840192908401906001016144b5565b600082601f8301126144ee578081fd5b813560206144fe61443483614fc1565b8281528181019085830160408086028801850189101561451c578687fd5b865b8681101561458b5781838b031215614534578788fd5b81518281018181106001600160401b038211171561454e57fe5b8352833561455b81614fde565b8152838701356001600160601b038116811461457557898afd5b818801528552938501939181019160010161451e565b509198975050505050505050565b600082601f8301126145a9578081fd5b81356001600160401b038111156145bc57fe5b6145cf601f8201601f1916602001614f9e565b8181528460208386010111156145e3578283fd5b816020850160208301379081016020019190915292915050565b600060a0828403121561460e578081fd5b61461860a0614f9e565b90508135815260208201356001600160401b038082111561463857600080fd5b61464485838601614599565b6020840152604084013591508082111561465d57600080fd5b614669858386016144de565b6040840152606084013591508082111561468257600080fd5b61468e858386016144de565b606084015260808401359150808211156146a757600080fd5b506146b484828501614489565b60808301525092915050565b6000602082840312156146d1578081fd5b813561195581614fde565b600080604083850312156146ee578081fd5b82356146f981614fde565b9150602083013561470981614fde565b809150509250929050565b600080600060608486031215614728578081fd5b833561473381614fde565b9250602084013561474381614fde565b929592945050506040919091013590565b60008060008060808587031215614769578182fd5b843561477481614fde565b9350602085013561478481614fde565b92506040850135915060608501356001600160401b038111156147a5578182fd5b6147b187828801614599565b91505092959194509250565b600080604083850312156147cf578182fd5b82356147da81614fde565b915060208301358015158114614709578182fd5b600080600080600060a08688031215614805578283fd5b853561481081614fde565b945060208601356001600160401b0381111561482a578384fd5b61483688828901614599565b9450506040860135925060608601359150608086013560ff8116811461485a578182fd5b809150509295509295909350565b6000806040838503121561487a578182fd5b823561488581614fde565b946020939093013593505050565b6000602082840312156148a4578081fd5b81356001600160401b038111156148b9578182fd5b6132be84828501614414565b6000602082840312156148d6578081fd5b81356001600160e01b031981168114611955578182fd5b6000602082840312156148fe578081fd5b81356001600160401b03811115614913578182fd5b6132be84828501614599565b60008060008060008060c08789031215614937578384fd5b86356001600160401b038082111561494d578586fd5b6149598a838b01614599565b9750602089013591508082111561496e578586fd5b61497a8a838b01614599565b9650604089013591508082111561498f578586fd5b61499b8a838b01614599565b955060608901359150808211156149b0578283fd5b506149bd89828a01614599565b9350506149cc60808801614409565b91506149da60a08801614409565b90509295509295509295565b600080600080600080600060e0888a031215614a00578485fd5b87356001600160401b0380821115614a16578687fd5b614a228b838c01614599565b985060208a0135915080821115614a37578687fd5b614a438b838c01614599565b975060408a0135915080821115614a58578687fd5b614a648b838c01614599565b965060608a0135915080821115614a79578283fd5b50614a868a828b01614599565b945050614a9560808901614409565b9250614aa360a08901614409565b9150614ab160c08901614409565b905092959891949750929550565b600080600080600080600060e0888a031215614ad9578081fd5b87356001600160401b0380821115614aef578283fd5b614afb8b838c01614599565b985060208a0135915080821115614b10578283fd5b614b1c8b838c01614599565b975060408a0135915080821115614b31578283fd5b614b3d8b838c01614599565b965060608a0135915080821115614b52578283fd5b614b5e8b838c01614599565b955060808a0135915080821115614b73578283fd5b50614b808a828b01614414565b935050614aa360a08901614409565b60008060408385031215614ba1578182fd5b82356001600160401b03811115614bb6578283fd5b614bc2858286016145fd565b925050602083013561470981614fde565b600080600060608486031215614be7578081fd5b83356001600160401b03811115614bfc578182fd5b614c08868287016145fd565b9350506020840135614c1981614fde565b91506040840135614c2981614fde565b809150509250925092565b600060208284031215614c45578081fd5b5035919050565b600080600060608486031215614c60578081fd5b833592506020840135614c1981614fde565b60008060408385031215614c84578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614cdf57815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614ca6565b509495945050505050565b60008151808452815b81811015614d0f57602081850181015186830182015201614cf3565b81811115614d205782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614d6d90830185614cea565b8281036040840152613d848185614cea565b6001600160a01b03929092168252602082015260400190565b6000602082526119556020830184614c93565b901515815260200190565b6000602082526119556020830184614cea565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526132be6040830184614c93565b6040518181016001600160401b0381118282101715614fb957fe5b604052919050565b60006001600160401b03821115614fd457fe5b5060209081020190565b6001600160a01b038116811461103457600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e5369676e657220616e64207369676e617475726520646f206e6f74206d617463684552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220f5990a22763c1b208eac60f3e6497209cfc0e77387e5cf0f890a08218d603c9464736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106102045760003560e01c806370a0823111610118578063aa271e1a116100a0578063e07f23191161006f578063e07f2319146105df578063e8a3d485146105ff578063e985e9c514610614578063f2fde38b14610634578063ff14a3541461065457610204565b8063aa271e1a1461055f578063b88d4fde1461057f578063c87b56dd1461059f578063cad96cca146105bf57610204565b8063891be974116100e7578063891be974146104c85780638da5cb5b146104f557806395d89b411461050a578063983b2d561461051f578063a22cb4651461053f57610204565b806370a0823114610453578063715018a61461047357806371e2a65714610488578063832fbb29146104a857610204565b80632d0335ab1161019b57806342966c681161016a57806342966c68146103be5780634648eb9d146103de57806355f804b3146103fe5780636352211e1461041e5780636c0360eb1461043e57610204565b80632d0335ab146103315780633092afd51461035e5780633db397c61461037e57806342842e0e1461039e57610204565b80630c53c51c116101d75780630c53c51c146102b057806322a775b6146102c357806323b872dd146102e35780632a55205a1461030357610204565b806301ffc9a71461020957806306fdde031461023f578063081812fc14610261578063095ea7b31461028e575b600080fd5b34801561021557600080fd5b506102296102243660046148c5565b610674565b6040516102369190614dab565b60405180910390f35b34801561024b57600080fd5b50610254610687565b6040516102369190614db6565b34801561026d57600080fd5b5061028161027c366004614c34565b61071e565b6040516102369190614d35565b34801561029a57600080fd5b506102ae6102a9366004614868565b610781565b005b6102546102be3660046147ee565b610857565b3480156102cf57600080fd5b506102ae6102de366004614b8f565b610bd0565b3480156102ef57600080fd5b506102ae6102fe366004614714565b610c72565b34801561030f57600080fd5b5061032361031e366004614c72565b610cc9565b604051610236929190614d7f565b34801561033d57600080fd5b5061035161034c3660046146c0565b610dd7565b6040516102369190614f7c565b34801561036a57600080fd5b506102ae6103793660046146c0565b610df3565b34801561038a57600080fd5b506102ae61039936600461491f565b610ea3565b3480156103aa57600080fd5b506102ae6103b9366004614714565b610f52565b3480156103ca57600080fd5b506102ae6103d9366004614c34565b610f6d565b3480156103ea57600080fd5b506102ae6103f9366004614abf565b611037565b34801561040a57600080fd5b506102ae6104193660046148ed565b6110ee565b34801561042a57600080fd5b50610281610439366004614c34565b611193565b34801561044a57600080fd5b506102546111e7565b34801561045f57600080fd5b5061035161046e3660046146c0565b611249565b34801561047f57600080fd5b506102ae6112ad565b34801561049457600080fd5b506102ae6104a3366004614893565b611359565b3480156104b457600080fd5b506102ae6104c3366004614bd3565b61143e565b3480156104d457600080fd5b506104e86104e3366004614c34565b6114b9565b6040516102369190614d98565b34801561050157600080fd5b50610281611549565b34801561051657600080fd5b50610254611558565b34801561052b57600080fd5b506102ae61053a3660046146c0565b6115b9565b34801561054b57600080fd5b506102ae61055a3660046147bd565b61166e565b34801561056b57600080fd5b5061022961057a3660046146c0565b611774565b34801561058b57600080fd5b506102ae61059a366004614754565b611793565b3480156105ab57600080fd5b506102546105ba366004614c34565b6117f1565b3480156105cb57600080fd5b506104e86105da366004614c34565b6117fc565b3480156105eb57600080fd5b506102ae6105fa366004614c4c565b611877565b34801561060b57600080fd5b506102546118ba565b34801561062057600080fd5b5061022961062f3660046146dc565b611949565b34801561064057600080fd5b506102ae61064f3660046146c0565b61195e565b34801561066057600080fd5b506102ae61066f3660046149e6565b611a61565b600061067f82611b02565b90505b919050565b60fd8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b820191906000526020600020905b8154815290600101906020018083116106f657829003601f168201915b505050505090505b90565b600061072982611bbc565b6107645760405162461bcd60e51b815260040180806020018281038252602c815260200180615209602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b600061078c82611193565b9050806001600160a01b0316836001600160a01b031614156107df5760405162461bcd60e51b815260040180806020018281038252602181526020018061531a6021913960400191505060405180910390fd5b806001600160a01b03166107f1611bd9565b6001600160a01b0316148061080d575061080d8161062f611bd9565b6108485760405162461bcd60e51b81526004018080602001828103825260388152602001806151016038913960400191505060405180910390fd5b6108528383611be8565b505050565b6060600061086486611c57565b90506000356001600160e01b031990811690821614156108cb576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b03891660008181526102f76020908152908490205483528201529081018790526109098882888888611c73565b6109445760405162461bcd60e51b81526004018080602001828103825260218152602001806152aa6021913960400191505060405180910390fd5b6001600160a01b03881660009081526102f76020526040902054610969906001611d5d565b6102f760008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b602083106109d45780518252601f1990920191602091820191016109b5565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b60208310610a4a5780518252601f199092019160209182019101610a2b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610aac576040519150601f19603f3d011682016040523d82523d6000602084013e610ab1565b606091505b509150915081610b08576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b87578181015183820152602001610b6f565b50505050905090810190601f168015610bb45780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b6102925460ff1615610c64578160400151600081518110610bed57fe5b6020026020010151600001516001600160a01b0316610c0a611549565b6001600160a01b03161480610c3f5750610c3f8260400151600081518110610c2e57fe5b602002602001015160000151611774565b610c645760405162461bcd60e51b8152600401610c5b90614df4565b60405180910390fd5b610c6e8282611db7565b5050565b610c83610c7d611bd9565b82611f39565b610cbe5760405162461bcd60e51b815260040180806020018281038252603181526020018061533b6031913960400191505060405180910390fd5b610852838383611f45565b60008281526101c660205260408120548190610cea57506000905080610dd0565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b82821015610d6657600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610d17565b50505050905080600081518110610d7957fe5b60209081029190910101515192506000805b8251811015610dc457828181518110610da057fe5b6020026020010151602001516001600160601b031682019150806001019050610d8b565b50612710908502049150505b9250929050565b6001600160a01b031660009081526102f7602052604090205490565b610dfb611bd9565b6001600160a01b0316610e0c611549565b6001600160a01b031614610e55576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b610eb1868686868686612064565b610efd6040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd610f31611bd9565b8787604051610f4293929190614d49565b60405180910390a1505050505050565b61085283838360405180602001604052806000815250611793565b610f7681611bbc565b610fe557606081901c610f87611bd9565b6001600160a01b0316816001600160a01b031614610fd65760405162461bcd60e51b815260040180806020018281038252602d8152602001806151dc602d913960400191505060405180910390fd5b610fdf8261220e565b50611034565b610ff0610c7d611bd9565b61102b5760405162461bcd60e51b81526004018080602001828103825260308152602001806153916030913960400191505060405180910390fd5b6110348161222a565b50565b611045878787878686612064565b6110956040518060400160405280601581526020017445524337323152617269626c65557365724d65746160581b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e99136110cc611bd9565b88886040516110dd93929190614d49565b60405180910390a150505050505050565b6110f6611bd9565b6001600160a01b0316611107611549565b6001600160a01b031614611150576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b611159816122c6565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d6816040516111889190614db6565b60405180910390a150565b600081815260ff60205260408120546001600160a01b03168061067f5760405162461bcd60e51b81526004018080602001828103825260298152602001806151636029913960400191505060405180910390fd5b6101c88054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b60006001600160a01b0382166112905760405162461bcd60e51b815260040180806020018281038252602a815260200180615139602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b6112b5611bd9565b6001600160a01b03166112c6611549565b6001600160a01b03161461130f576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b611361611bd9565b6001600160a01b0316611372611549565b6001600160a01b0316146113bb576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b60005b8151811015610c6e5760008282815181106113d557fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016113be565b825161144990611bbc565b156114625761145d82828560000151610f52565b610852565b826040015160008151811061147357fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146114af5760405162461bcd60e51b8152600401610c5b90614dc9565b6108528382610bd0565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561153e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114ef565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156107135780601f106106e857610100808354040283529160200191610713565b6115c1611bd9565b6001600160a01b03166115d2611549565b6001600160a01b03161461161b576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b611676611bd9565b6001600160a01b0316826001600160a01b031614156116dc576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006116ea611bd9565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561172e611bd9565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b6117a461179e611bd9565b83611f39565b6117df5760405162461bcd60e51b815260040180806020018281038252603181526020018061533b6031913960400191505060405180910390fd5b6117eb848484846122da565b50505050565b606061067f8261232c565b60008181526101c66020908152604080832080548251818502810185019093528083526060949293919290918401821561153e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016114ef565b816001600160a01b0316611889611bd9565b6001600160a01b0316146118af5760405162461bcd60e51b8152600401610c5b90614e81565b610852838383612337565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156119415780601f1061191657610100808354040283529160200191611941565b820191906000526020600020905b81548152906001019060200180831161192457829003601f168201915b505050505081565b600061195583836123e3565b90505b92915050565b611966611bd9565b6001600160a01b0316611977611549565b6001600160a01b0316146119c0576040805162461bcd60e51b81526020600482018190526024820152600080516020615261833981519152604482015290519081900360640190fd5b6001600160a01b038116611a055760405162461bcd60e51b81526004018080602001828103825260268152602001806150696026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b611a6f878787878787612064565b611abb6040518060400160405280601181526020017045524337323152617269626c654d65746160781b815250604051806040016040528060018152602001603160f81b81525061217e565b610292805460ff19169055611acf8161195e565b7ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd8188886040516110dd93929190614d49565b60006001600160e01b03198216638486f69f60e01b1480611b3357506001600160e01b0319821663656cb66560e11b145b80611b4e57506001600160e01b0319821663152a902d60e11b145b80611b6957506001600160e01b031982166301ffc9a760e01b145b80611b8457506001600160e01b031982166380ac58cd60e01b145b80611b9f57506001600160e01b03198216635b5e139f60e01b145b8061067f5750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b6000611be3612410565b905090565b60008181526101016020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c1e82611193565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000815160001415611c6b57506000610682565b506020015190565b6000806001611c89611c848861246c565b6124ef565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ce0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611d3c576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b600082820183811015611955576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b815160601c6000611dc6611bd9565b90508360400151600081518110611dd957fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611e155760405162461bcd60e51b8152600401610c5b90614e56565b83608001515184604001515114611e2b57600080fd5b806001600160a01b0316826001600160a01b03161480611e505750611e508282611949565b611e6c5760405162461bcd60e51b8152600401610c5b90614edd565b6000611e778561253b565b905060005b856040015151811015611eed57600086604001518281518110611e9b57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611ee457611ee4818489608001518581518110611ed757fe5b6020026020010151612782565b50600101611e7c565b50611efc84866000015161278d565b611f0e856000015186606001516127a7565b611f2085600001518660400151612996565b611f3285600001518660200151612b45565b5050505050565b60006119558383612ba9565b826001600160a01b0316611f5882611193565b6001600160a01b031614611f9d5760405162461bcd60e51b81526004018080602001828103825260298152602001806152816029913960400191505060405180910390fd5b6001600160a01b038216611fe25760405162461bcd60e51b815260040180806020018281038252602481526020018061508f6024913960400191505060405180910390fd5b611fed838383610852565b611ff8600082611be8565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b031916821790559251849392916000805160206152fa83398151915291a4505050565b600054610100900460ff168061207d575061207d612bd6565b8061208b575060005460ff16155b6120c65760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff161580156120f1576000805460ff1961ff0019909116610100171660011790555b6120fa856122c6565b612102612be7565b61210a612c88565b612112612be7565b61211a612d25565b612122612dc2565b61212a612be7565b612132612ebb565b61213a612f8a565b61214384612f8c565b61214d8787612fb1565b61215883600161309c565b61216382600161309c565b8015612175576000805461ff00191690555b50505050505050565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab782805190602001208280519060200120306121b86130fd565b60405160200180868152602001858152602001848152602001836001600160a01b0316815260200182815260200195505050505050604051602081830303815290604052805190602001206102f8819055505050565b600090815261010360205260409020805460ff19166001179055565b600061223582611193565b905061224381600084610852565b61224e600083611be8565b61225782613107565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b031916905561229c8261220e565b60405182906000906001600160a01b038416906000805160206152fa833981519152908390a45050565b8051610c6e906101c8906020840190614328565b6122e5848484611f45565b6122f184848484613110565b6117eb5760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b606061067f826132c6565b60008381526101c66020526040812054905b81811015611f325760008581526101c66020526040902080546001600160a01b03861691908390811061237857fe5b6000918252602090912001546001600160a01b031614156123db5760008581526101c6602052604090208054849190839081106123b157fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612349565b6001600160a01b038116600090815261012f602052604081205460ff1680611955575061195583836134a1565b60003330141561246757600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061071b9050565b503390565b600060405180608001604052806043815260200161502660439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b60006124f96134d0565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000808260600151516001600160401b038111801561255957600080fd5b50604051908082528060200260200182016040528015612583578160200160208202803683370190505b50905060005b8360600151518110156125d5576125b6846060015182815181106125a957fe5b60200260200101516134d7565b8282815181106125c257fe5b6020908102919091010152600101612589565b5060008360400151516001600160401b03811180156125f357600080fd5b5060405190808252806020026020018201604052801561261d578160200160208202803683370190505b50905060005b84604001515181101561266257612643856040015182815181106125a957fe5b82828151811061264f57fe5b6020908102919091010152600101612623565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b838110156126c65781810151838201526020016126ae565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b838110156127175781810151838201526020016126ff565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b610852838383613544565b610c6e8282604051806020016040528060008152506137c3565b6000805b825181101561294b5760006001600160a01b03168382815181106127cb57fe5b6020026020010151600001516001600160a01b03161415612833576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b82818151811061283f57fe5b6020026020010151602001516001600160601b0316600014156128a9576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b8281815181106128b557fe5b6020026020010151602001516001600160601b0316820191506101c660008581526020019081526020016000208382815181106128ee57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b03199093169290921716179055016127ab565b50612710811061298c5760405162461bcd60e51b815260040180806020018281038252602581526020018061536c6025913960400191505060405180910390fd5b6108528383613815565b60008281526101fb6020526040812090805b8351811015612ae45760006001600160a01b03168482815181106129c857fe5b6020026020010151600001516001600160a01b031614156129fb5760405162461bcd60e51b8152600401610c5b90614ea6565b838181518110612a0757fe5b6020026020010151602001516001600160601b031660001415612a3c5760405162461bcd60e51b8152600401610c5b90614e21565b82848281518110612a4957fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612ada90859083908110612ab657fe5b6020026020010151602001516001600160601b031683611d5d90919063ffffffff16565b91506001016129a8565b508061271014612b065760405162461bcd60e51b8152600401610c5b90614f2e565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612b37929190614f85565b60405180910390a150505050565b612b4e82611bbc565b612b895760405162461bcd60e51b815260040180806020018281038252602c815260200180615235602c913960400191505060405180910390fd5b60008281526101c760209081526040909120825161085292840190614328565b6001600160a01b038216600090815261012f602052604081205460ff168061195557506119558383613852565b6000612be1306138ee565b15905090565b600054610100900460ff1680612c005750612c00612bd6565b80612c0e575060005460ff16155b612c495760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612c74576000805460ff1961ff0019909116610100171660011790555b8015611034576000805461ff001916905550565b600054610100900460ff1680612ca15750612ca1612bd6565b80612caf575060005460ff16155b612cea5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612d15576000805460ff1961ff0019909116610100171660011790555b612c7463656cb66560e11b6138f4565b600054610100900460ff1680612d3e5750612d3e612bd6565b80612d4c575060005460ff16155b612d875760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612db2576000805460ff1961ff0019909116610100171660011790555b612c746301ffc9a760e01b6138f4565b600054610100900460ff1680612ddb5750612ddb612bd6565b80612de9575060005460ff16155b612e245760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612e4f576000805460ff1961ff0019909116610100171660011790555b6000612e59611bd9565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611034576000805461ff001916905550565b600054610100900460ff1680612ed45750612ed4612bd6565b80612ee2575060005460ff16155b612f1d5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015612f48576000805460ff1961ff0019909116610100171660011790555b612c74604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b815250613978565b565b8051612fa09061022e906020840190614328565b5061103463e8a3d48560e01b6138f4565b600054610100900460ff1680612fca5750612fca612bd6565b80612fd8575060005460ff16155b6130135760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff1615801561303e576000805460ff1961ff0019909116610100171660011790555b82516130519060fd906020860190614328565b5081516130659060fe906020850190614328565b506130766380ac58cd60e01b6138f4565b613086635b5e139f60e01b6138f4565b8015610852576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b6000611be3613a38565b61103481613a3c565b6000613124846001600160a01b03166138ee565b156132ba57836001600160a01b031663150b7a02613140611bd9565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156131b357818101518382015260200161319b565b50505050905090810190601f1680156131e05780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561320257600080fd5b505af192505050801561322757506040513d602081101561322257600080fd5b505160015b6132a0573d808015613255576040519150601f19603f3d011682016040523d82523d6000602084013e61325a565b606091505b5080516132985760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506132be565b5060015b949350505050565b60606132d182611bbc565b61330c5760405162461bcd60e51b815260040180806020018281038252602f8152602001806152cb602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156133a05780601f10613375576101008083540402835291602001916133a0565b820191906000526020600020905b81548152906001019060200180831161338357829003601f168201915b5050505050905060006133b16111e7565b90508051600014156133c557509050610682565b8151156133df576133d68183613a45565b92505050610682565b806133e985613c2a565b6040516020018083805190602001908083835b6020831061341b5780518252601f1990920191602091820191016133fc565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106134635780518252601f199092019160209182019101613444565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b6102f85490565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b600061354f83613d04565b9050600082516041141561356a576135678284613d0e565b90505b846001600160a01b0316816001600160a01b031614611f3257613595856001600160a01b03166138ee565b1561374b5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b838110156136045781810151838201526020016135ec565b50505050905090810190601f1680156136315780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561364f57600080fd5b505afa158015613663573d6000803e3d6000fd5b505050506040513d602081101561367957600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b0319909116146137455760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561370a5781810151838201526020016136f2565b50505050905090810190601f1680156137375780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611f32565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b8152600481019384528251602482015282519293928392604490920191908083836000831561370a5781810151838201526020016136f2565b6137cd8383613d8e565b6137da6000848484613110565b6108525760405162461bcd60e51b8152600401808060200182810382526032815260200180614ff46032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051613846929190614f85565b60405180910390a15050565b600061385d82611bbc565b6138985760405162461bcd60e51b815260040180806020018281038252602c8152602001806150d5602c913960400191505060405180910390fd5b60006138a383611193565b9050806001600160a01b0316846001600160a01b031614806138de5750836001600160a01b03166138d38461071e565b6001600160a01b0316145b806132be57506132be8185611949565b3b151590565b6001600160e01b03198082161415613953576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806139915750613991612bd6565b8061399f575060005460ff16155b6139da5760405162461bcd60e51b815260040180806020018281038252602e81526020018061518c602e913960400191505060405180910390fd5b600054610100900460ff16158015613a05576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015610852576000805461ff0019169055505050565b4690565b61103481613ef4565b80518251606091849184911015613b105784846040516020018083805190602001908083835b60208310613a8a5780518252601f199092019160209182019101613a6b565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613ad25780518252601f199092019160209182019101613ab3565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050611958565b60005b8251811015613c2057828181518110613b2857fe5b602001015160f81c60f81b6001600160f81b031916828281518110613b4957fe5b01602001516001600160f81b03191614613c185785856040516020018083805190602001908083835b60208310613b915780518252601f199092019160209182019101613b72565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613bd95780518252601f199092019160209182019101613bba565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529350505050611958565b600101613b13565b5092949350505050565b606081613c4f57506040805180820190915260018152600360fc1b6020820152610682565b8160005b8115613c6757600101600a82049150613c53565b6000816001600160401b0381118015613c7f57600080fd5b506040519080825280601f01601f191660200182016040528015613caa576020820181803683370190505b50859350905060001982015b8315613cfb57600a840660300160f81b82828060019003935081518110613cd957fe5b60200101906001600160f81b031916908160001a905350600a84049350613cb6565b50949350505050565b60006124f9613f34565b60008151604114613d66576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a613d8486828585613f6f565b9695505050505050565b6001600160a01b038216613de9576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff1615613e45576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b613e4e81611bbc565b15613ea0576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b613eac60008383610852565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b0319169091179055610c6e82826141c5565b60008181526101c7602052604090205460026000196101006001841615020190911604156110345760008181526101c760205260408120611034916143b4565b6000611be37f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613f626141cf565b613f6a6141d5565b6141db565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115613fd05760405162461bcd60e51b81526004018080602001828103825260228152602001806150b36022913960400191505060405180910390fd5b6000601e8560ff1611156140aa576004850360ff16601b1480613ff957506004850360ff16601c145b6140345760405162461bcd60e51b81526004018080602001828103825260228152602001806151ba6022913960400191505060405180910390fd5b600161403f8761423d565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614099573d6000803e3d6000fd5b505050602060405103519050614161565b8460ff16601b14806140bf57508460ff16601c145b6140fa5760405162461bcd60e51b81526004018080602001828103825260228152602001806151ba6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614154573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166141bc576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b610c6e828261428e565b60975490565b60985490565b60008383836141e8613a38565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b03831681146142fd5760405182906001600160a01b038316906000906000805160206152fa833981519152908290a481836001600160a01b0316826001600160a01b03166000805160206152fa83398151915260405160405180910390a4610852565b60405182906001600160a01b038516906000906000805160206152fa833981519152908290a4505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261435e57600085556143a4565b82601f1061437757805160ff19168380011785556143a4565b828001600101855582156143a4579182015b828111156143a4578251825591602001919060010190614389565b506143b09291506143f4565b5090565b50805460018160011615610100020316600290046000825580601f106143da5750611034565b601f01602090049060005260206000209081019061103491905b5b808211156143b057600081556001016143f5565b803561068281614fde565b600082601f830112614424578081fd5b8135602061443961443483614fc1565b614f9e565b8281528181019085830183850287018401881015614455578586fd5b855b8581101561447c57813561446a81614fde565b84529284019290840190600101614457565b5090979650505050505050565b600082601f830112614499578081fd5b813560206144a961443483614fc1565b82815281810190858301855b8581101561447c576144cc898684358b0101614599565b845292840192908401906001016144b5565b600082601f8301126144ee578081fd5b813560206144fe61443483614fc1565b8281528181019085830160408086028801850189101561451c578687fd5b865b8681101561458b5781838b031215614534578788fd5b81518281018181106001600160401b038211171561454e57fe5b8352833561455b81614fde565b8152838701356001600160601b038116811461457557898afd5b818801528552938501939181019160010161451e565b509198975050505050505050565b600082601f8301126145a9578081fd5b81356001600160401b038111156145bc57fe5b6145cf601f8201601f1916602001614f9e565b8181528460208386010111156145e3578283fd5b816020850160208301379081016020019190915292915050565b600060a0828403121561460e578081fd5b61461860a0614f9e565b90508135815260208201356001600160401b038082111561463857600080fd5b61464485838601614599565b6020840152604084013591508082111561465d57600080fd5b614669858386016144de565b6040840152606084013591508082111561468257600080fd5b61468e858386016144de565b606084015260808401359150808211156146a757600080fd5b506146b484828501614489565b60808301525092915050565b6000602082840312156146d1578081fd5b813561195581614fde565b600080604083850312156146ee578081fd5b82356146f981614fde565b9150602083013561470981614fde565b809150509250929050565b600080600060608486031215614728578081fd5b833561473381614fde565b9250602084013561474381614fde565b929592945050506040919091013590565b60008060008060808587031215614769578182fd5b843561477481614fde565b9350602085013561478481614fde565b92506040850135915060608501356001600160401b038111156147a5578182fd5b6147b187828801614599565b91505092959194509250565b600080604083850312156147cf578182fd5b82356147da81614fde565b915060208301358015158114614709578182fd5b600080600080600060a08688031215614805578283fd5b853561481081614fde565b945060208601356001600160401b0381111561482a578384fd5b61483688828901614599565b9450506040860135925060608601359150608086013560ff8116811461485a578182fd5b809150509295509295909350565b6000806040838503121561487a578182fd5b823561488581614fde565b946020939093013593505050565b6000602082840312156148a4578081fd5b81356001600160401b038111156148b9578182fd5b6132be84828501614414565b6000602082840312156148d6578081fd5b81356001600160e01b031981168114611955578182fd5b6000602082840312156148fe578081fd5b81356001600160401b03811115614913578182fd5b6132be84828501614599565b60008060008060008060c08789031215614937578384fd5b86356001600160401b038082111561494d578586fd5b6149598a838b01614599565b9750602089013591508082111561496e578586fd5b61497a8a838b01614599565b9650604089013591508082111561498f578586fd5b61499b8a838b01614599565b955060608901359150808211156149b0578283fd5b506149bd89828a01614599565b9350506149cc60808801614409565b91506149da60a08801614409565b90509295509295509295565b600080600080600080600060e0888a031215614a00578485fd5b87356001600160401b0380821115614a16578687fd5b614a228b838c01614599565b985060208a0135915080821115614a37578687fd5b614a438b838c01614599565b975060408a0135915080821115614a58578687fd5b614a648b838c01614599565b965060608a0135915080821115614a79578283fd5b50614a868a828b01614599565b945050614a9560808901614409565b9250614aa360a08901614409565b9150614ab160c08901614409565b905092959891949750929550565b600080600080600080600060e0888a031215614ad9578081fd5b87356001600160401b0380821115614aef578283fd5b614afb8b838c01614599565b985060208a0135915080821115614b10578283fd5b614b1c8b838c01614599565b975060408a0135915080821115614b31578283fd5b614b3d8b838c01614599565b965060608a0135915080821115614b52578283fd5b614b5e8b838c01614599565b955060808a0135915080821115614b73578283fd5b50614b808a828b01614414565b935050614aa360a08901614409565b60008060408385031215614ba1578182fd5b82356001600160401b03811115614bb6578283fd5b614bc2858286016145fd565b925050602083013561470981614fde565b600080600060608486031215614be7578081fd5b83356001600160401b03811115614bfc578182fd5b614c08868287016145fd565b9350506020840135614c1981614fde565b91506040840135614c2981614fde565b809150509250925092565b600060208284031215614c45578081fd5b5035919050565b600080600060608486031215614c60578081fd5b833592506020840135614c1981614fde565b60008060408385031215614c84578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614cdf57815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614ca6565b509495945050505050565b60008151808452815b81811015614d0f57602081850181015186830182015201614cf3565b81811115614d205782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614d6d90830185614cea565b8281036040840152613d848185614cea565b6001600160a01b03929092168252602082015260400190565b6000602082526119556020830184614c93565b901515815260200190565b6000602082526119556020830184614cea565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526132be6040830184614c93565b6040518181016001600160401b0381118282101715614fb957fe5b604052919050565b60006001600160401b03821115614fd457fe5b5060209081020190565b6001600160a01b038116811461103457600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e5369676e657220616e64207369676e617475726520646f206e6f74206d617463684552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220f5990a22763c1b208eac60f3e6497209cfc0e77387e5cf0f890a08218d603c9464736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "addMinter(address)": { + "details": "Add `minter` to the list of allowed minters." + }, + "addMinters(address[])": { + "details": "Add `minters` to the list of allowed minters." + }, + "approve(address,uint256)": { + "details": "See {IERC721-approve}." + }, + "balanceOf(address)": { + "details": "See {IERC721-balanceOf}." + }, + "baseURI()": { + "details": "Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID." + }, + "burn(uint256)": { + "details": "Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator." + }, + "getApproved(uint256)": { + "details": "See {IERC721-getApproved}." + }, + "isMinter(address)": { + "details": "Returns `true` if `account` has been granted to minters." + }, + "name()": { + "details": "See {IERC721Metadata-name}." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "ownerOf(uint256)": { + "details": "See {IERC721-ownerOf}." + }, + "removeMinter(address)": { + "details": "Revoke `_minter` from the list of allowed minters." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "safeTransferFrom(address,address,uint256)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "safeTransferFrom(address,address,uint256,bytes)": { + "details": "See {IERC721-safeTransferFrom}." + }, + "setApprovalForAll(address,bool)": { + "details": "See {IERC721-setApprovalForAll}." + }, + "symbol()": { + "details": "See {IERC721Metadata-symbol}." + }, + "transferFrom(address,address,uint256)": { + "details": "See {IERC721-transferFrom}." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 307, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 364, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 138, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "151", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "152", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "153", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26448, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "203", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 27665, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_name", + "offset": 0, + "slot": "253", + "type": "t_string_storage" + }, + { + "astId": 27667, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_symbol", + "offset": 0, + "slot": "254", + "type": "t_string_storage" + }, + { + "astId": 27671, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_owners", + "offset": 0, + "slot": "255", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 27675, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_balances", + "offset": 0, + "slot": "256", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 27679, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_tokenApprovals", + "offset": 0, + "slot": "257", + "type": "t_mapping(t_uint256,t_address)" + }, + { + "astId": 27685, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_operatorApprovals", + "offset": 0, + "slot": "258", + "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" + }, + { + "astId": 27695, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_burnedTokens", + "offset": 0, + "slot": "259", + "type": "t_mapping(t_uint256,t_bool)" + }, + { + "astId": 28474, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "260", + "type": "t_array(t_uint256)43_storage" + }, + { + "astId": 26691, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "defaultApprovals", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 26762, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26681, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "354", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22478, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "404", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 21496, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "royalties", + "offset": 0, + "slot": "454", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" + }, + { + "astId": 27499, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_tokenURIs", + "offset": 0, + "slot": "455", + "type": "t_mapping(t_uint256,t_string_storage)" + }, + { + "astId": 27501, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_baseURI", + "offset": 0, + "slot": "456", + "type": "t_string_storage" + }, + { + "astId": 27636, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "457", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 26805, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "creators", + "offset": 0, + "slot": "507", + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" + }, + { + "astId": 27230, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "508", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22321, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "contractURI", + "offset": 0, + "slot": "558", + "type": "t_string_storage" + }, + { + "astId": 22353, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "559", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 26595, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "608", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 22359, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "isPrivate", + "offset": 0, + "slot": "658", + "type": "t_bool" + }, + { + "astId": 22363, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "659", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 22488, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "_minters", + "offset": 0, + "slot": "708", + "type": "t_mapping(t_address,t_bool)" + }, + { + "astId": 22605, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "__gap", + "offset": 0, + "slot": "709", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 19515, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "nonces", + "offset": 0, + "slot": "759", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 19517, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "domainSeparator", + "offset": 0, + "slot": "760", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)19269_storage)dyn_storage": { + "base": "t_struct(Part)19269_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)43_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[43]", + "numberOfBytes": "1376" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_address,t_mapping(t_address,t_bool))": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => mapping(address => bool))", + "numberOfBytes": "32", + "value": "t_mapping(t_address,t_bool)" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_address)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => struct LibPart.Part[])", + "numberOfBytes": "32", + "value": "t_array(t_struct(Part)19269_storage)dyn_storage" + }, + "t_mapping(t_uint256,t_bool)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_mapping(t_uint256,t_string_storage)": { + "encoding": "mapping", + "key": "t_uint256", + "label": "mapping(uint256 => string)", + "numberOfBytes": "32", + "value": "t_string_storage" + }, + "t_string_storage": { + "encoding": "bytes", + "label": "string", + "numberOfBytes": "32" + }, + "t_struct(Part)19269_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 19266, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 19268, + "contract": "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol:ERC721RaribleMeta", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMeta_Proxy.json new file mode 100644 index 000000000..2b1034caa --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMeta_Proxy.json @@ -0,0 +1,301 @@ +{ + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "1123036", + "logsBloom": "0x00000400000800000000000000000000400000000400800010800000000000000000000000000000000000000001000000000000000440000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000408000002800000000000000000000000000000000000100004000000000000000000000000000100000020000300000000000001000000000000000400000040000000000020000000000000000060000000000000000000000000000000000000000001000000", + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1", + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "logs": [ + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000003dc700b8bd71fcd8b80914e10b561c15816f71ac" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + }, + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + }, + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 2, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + }, + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", + "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + }, + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + }, + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" + ], + "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 5, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + }, + { + "transactionIndex": 19, + "blockNumber": 18030202, + "transactionHash": "0xc4fc3f58e14dcd10c2c76219715fff4e81a2279bfc92c2866399a6cf392a2fea", + "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0x32e90b91ce831b42ff27ef32f38bc0bd21040aaf6adab42168eab472eb6bf8d1" + } + ], + "blockNumber": 18030202, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMinimalBeaconMeta.json b/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMinimalBeaconMeta.json new file mode 100644 index 000000000..4809120e8 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ERC721RaribleMinimalBeaconMeta.json @@ -0,0 +1,219 @@ +{ + "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "impl", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x979717dec00aed43d834f17d50dc79d45a0bdab60c6ab81fb7e06a2f1b63f20b", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 1, + "gasUsed": "394691", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000004001000000000000004000004000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000200000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x4c5a876a1607fc9d7a9270c5c6785af9d53bf33a0a4687c3b651a909a17c133d", + "transactionHash": "0x979717dec00aed43d834f17d50dc79d45a0bdab60c6ab81fb7e06a2f1b63f20b", + "logs": [ + { + "transactionIndex": 24, + "blockNumber": 18030214, + "transactionHash": "0x979717dec00aed43d834f17d50dc79d45a0bdab60c6ab81fb7e06a2f1b63f20b", + "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x4c5a876a1607fc9d7a9270c5c6785af9d53bf33a0a4687c3b651a909a17c133d" + }, + { + "transactionIndex": 24, + "blockNumber": 18030214, + "transactionHash": "0x979717dec00aed43d834f17d50dc79d45a0bdab60c6ab81fb7e06a2f1b63f20b", + "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x4c5a876a1607fc9d7a9270c5c6785af9d53bf33a0a4687c3b651a909a17c133d" + } + ], + "blockNumber": 18030214, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\":\"ERC721RaribleMinimalBeaconMeta\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\\n transferOwnership(initialOwner);\\n }\\n}\\n\",\"keccak256\":\"0xca4a880219e74fc2d13c800e9917a3a7d0b05e3843410e379bc1ce7c86bc3de4\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405161072d38038061072d8339818101604052604081101561003357600080fd5b508051602090910151816000610047610099565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602061070d833981519152908290a3506100888161009d565b506100928161010d565b5050610224565b3390565b6100b08161020f60201b6103821760201c565b6100eb5760405162461bcd60e51b81526004018080602001828103825260338152602001806106da6033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610115610099565b6001600160a01b0316610126610215565b6001600160a01b031614610181576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166101c65760405162461bcd60e51b81526004018080602001828103825260268152602001806106b46026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061070d83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b6000546001600160a01b031690565b610481806102336000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212208dfb6c9a3280e9711a17e61af949448fbab9f4b715e50bfe015711eabdbf2fcd64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163748be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212208dfb6c9a3280e9711a17e61af949448fbab9f4b715e50bfe015711eabdbf2fcd64736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "implementation()": { + "details": "Returns the current implementation address." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgradeTo(address)": { + "details": "Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol:ERC721RaribleMinimalBeaconMeta", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 6517, + "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol:ERC721RaribleMinimalBeaconMeta", + "label": "_implementation", + "offset": 0, + "slot": "1", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ExchangeMetaV2.json b/projects/hardhat-deploy/deployments/sei_testnet/ExchangeMetaV2.json new file mode 100644 index 000000000..cee92be0b --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ExchangeMetaV2.json @@ -0,0 +1,1361 @@ +{ + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "BuyerFeeAmountChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "Cancel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldValue", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newValue", + "type": "address" + } + ], + "name": "FeeReceiverChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "leftHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "rightHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newLeftFill", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newRightFill", + "type": "uint256" + } + ], + "name": "Match", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "MatcherChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "ProxyChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "SellerFeeAmountChanged", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + } + ], + "name": "__ExchangeV2_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "assetTypes", + "type": "bytes4[]" + }, + { + "internalType": "address[]", + "name": "proxies", + "type": "address[]" + }, + { + "internalType": "bytes4", + "name": "assetMatcherType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "assetMatcher", + "type": "address" + } + ], + "name": "__ExchangeV2_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "order", + "type": "tuple" + } + ], + "name": "cancel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "bidMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "bidPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "bidDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "bidData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "bidSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.AcceptBid", + "name": "direct", + "type": "tuple" + } + ], + "name": "directAcceptBid", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sellOrderMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "sellOrderDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sellOrderSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "buyOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "buyOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "buyOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.Purchase", + "name": "direct", + "type": "tuple" + } + ], + "name": "directPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "fills", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderLeft", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureLeft", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderRight", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureRight", + "type": "bytes" + } + ], + "name": "matchOrders", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFee", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "sellerAmount", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "royaltiesRegistry", + "outputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setAllProtocolFeeData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "setAssetMatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeBuyerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + } + ], + "name": "setPrtocolFeeReceiver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeSellerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesRegistry", + "type": "address" + } + ], + "name": "setRoyaltiesRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "setTransferProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "1049680", + "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000000000000000000000000000400000000000000000000000800000000000000010000000020000010000000000000042004000000000000000000200020000000000000008004002008000000000000000000000004000000000010001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000002000000004000000000000000a0000008000000000001000000000000000400000000000000000020000000000000000000000000000000000000020000000000000000300000000200", + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a", + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "logs": [ + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000006c619e55e9947051e98570a36044c31c4eb0736d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + }, + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + }, + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0xd8f960c100000000000000000000000000000000000000000000000000000000" + ], + "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", + "logIndex": 2, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + }, + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", + "logIndex": 3, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + }, + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", + "0xf63c282500000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", + "logIndex": 4, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + }, + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 5, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + }, + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + } + ], + "blockNumber": 18030112, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "__ExchangeV2_init_proxy", + "args": [ + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", + 0, + "0x0000000000000000000000000000000000000000", + "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893", + [ + "0xd8f960c1", + "0x1cdfaa40" + ], + [ + "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2" + ], + "0xf63c2825", + "0xc4F5FCD96e3b37A31f871F0968206F47294a4471" + ] + }, + "implementation": "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ExchangeMetaV2_Implementation.json b/projects/hardhat-deploy/deployments/sei_testnet/ExchangeMetaV2_Implementation.json new file mode 100644 index 000000000..9a61ebde9 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ExchangeMetaV2_Implementation.json @@ -0,0 +1,1387 @@ +{ + "address": "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "BuyerFeeAmountChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "Cancel", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldValue", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newValue", + "type": "address" + } + ], + "name": "FeeReceiverChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "leftHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "rightHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newLeftFill", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newRightFill", + "type": "uint256" + } + ], + "name": "Match", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "MatcherChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address payable", + "name": "relayerAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + } + ], + "name": "MetaTransactionExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "ProxyChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldValue", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newValue", + "type": "uint256" + } + ], + "name": "SellerFeeAmountChanged", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + } + ], + "name": "__ExchangeV2_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "assetTypes", + "type": "bytes4[]" + }, + { + "internalType": "address[]", + "name": "proxies", + "type": "address[]" + }, + { + "internalType": "bytes4", + "name": "assetMatcherType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "assetMatcher", + "type": "address" + } + ], + "name": "__ExchangeV2_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "order", + "type": "tuple" + } + ], + "name": "cancel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "bidMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "bidPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bidSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "bidEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "bidDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "bidData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "bidSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.AcceptBid", + "name": "direct", + "type": "tuple" + } + ], + "name": "directAcceptBid", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "sellOrderMaker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "nftAssetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "nftData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "sellOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "paymentToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "sellOrderSalt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderStart", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sellOrderEnd", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "sellOrderDataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "sellOrderData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "sellOrderSignature", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "buyOrderPaymentAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "buyOrderNftAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "buyOrderData", + "type": "bytes" + } + ], + "internalType": "struct LibDirectTransfer.Purchase", + "name": "direct", + "type": "tuple" + } + ], + "name": "directPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "userAddress", + "type": "address" + }, + { + "internalType": "bytes", + "name": "functionSignature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "sigR", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "sigS", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "sigV", + "type": "uint8" + } + ], + "name": "executeMetaTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "fills", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "name": "getNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderLeft", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureLeft", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "orderRight", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "signatureRight", + "type": "bytes" + } + ], + "name": "matchOrders", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFee", + "outputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "sellerAmount", + "type": "uint48" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "royaltiesRegistry", + "outputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + }, + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setAllProtocolFeeData", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "matcher", + "type": "address" + } + ], + "name": "setAssetMatcher", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_buyerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeBuyerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_receiver", + "type": "address" + } + ], + "name": "setPrtocolFeeReceiver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint48", + "name": "_sellerAmount", + "type": "uint48" + } + ], + "name": "setPrtocolFeeSellerAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesRegistry", + "type": "address" + } + ], + "name": "setRoyaltiesRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "assetType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "proxy", + "type": "address" + } + ], + "name": "setTransferProxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xd01a109805beece4a60521b5796299c44c705ca974a88b644849ec48e0248f71", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "5353145", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xa4f672aaac05f35dbdef3aeb1dfbbd24fd69ea24a95a86028014be2dcd8b40ca", + "transactionHash": "0xd01a109805beece4a60521b5796299c44c705ca974a88b644849ec48e0248f71", + "logs": [], + "blockNumber": 18030109, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"BuyerFeeAmountChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"Cancel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"}],\"name\":\"FeeReceiverChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leftHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"rightHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLeftFill\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRightFill\",\"type\":\"uint256\"}],\"name\":\"Match\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"MatcherChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address payable\",\"name\":\"relayerAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"}],\"name\":\"MetaTransactionExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"SellerFeeAmountChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_erc20TransferProxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newDefaultFeeReceiver\",\"type\":\"address\"},{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesProvider\",\"type\":\"address\"}],\"name\":\"__ExchangeV2_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_erc20TransferProxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newDefaultFeeReceiver\",\"type\":\"address\"},{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"assetTypes\",\"type\":\"bytes4[]\"},{\"internalType\":\"address[]\",\"name\":\"proxies\",\"type\":\"address[]\"},{\"internalType\":\"bytes4\",\"name\":\"assetMatcherType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"assetMatcher\",\"type\":\"address\"}],\"name\":\"__ExchangeV2_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"bidMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"bidPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"bidDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"bidData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bidSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.AcceptBid\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directAcceptBid\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sellOrderMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"sellOrderDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"buyOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.Purchase\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"userAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"functionSignature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"sigR\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"sigS\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"sigV\",\"type\":\"uint8\"}],\"name\":\"executeMetaTransaction\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"fills\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderLeft\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureLeft\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderRight\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureRight\",\"type\":\"bytes\"}],\"name\":\"matchOrders\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"sellerAmount\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"royaltiesRegistry\",\"outputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setAllProtocolFeeData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"setAssetMatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeBuyerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"setPrtocolFeeReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeSellerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesRegistry\",\"type\":\"address\"}],\"name\":\"setRoyaltiesRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"setTransferProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\",\"params\":{\"direct\":\"struct with parameters for accept bid operation\"}},\"directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\":\"ExchangeMetaV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function _setAssetMatcher(bytes4 assetType, address matcher) internal {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x8fceb04eec1c1b32bea097a019b57e9422c31fa2e020e9957db91d5b03edb1bb\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __OrderValidator_init_unchained();\\n __MetaTransaction_init_unchained(\\\"ExchangeMetaV2\\\", \\\"1\\\");\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n }\\n\\n function __ExchangeV2_init_proxy(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider,\\n address _initialOwner,\\n bytes4[] memory assetTypes, \\n address[] memory proxies,\\n bytes4 assetMatcherType,\\n address assetMatcher\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __OrderValidator_init_unchained();\\n __MetaTransaction_init_unchained(\\\"ExchangeMetaV2\\\", \\\"1\\\");\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n for (uint i = 0; i < assetTypes.length; i++) {\\n _setTransferProxy(assetTypes[i], proxies[i]);\\n }\\n _setAssetMatcher(assetMatcherType, assetMatcher);\\n transferOwnership(_initialOwner);\\n }\\n\\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\\n return super._msgSender();\\n }\\n\\n}\\n\",\"keccak256\":\"0xe555b85b81c8f5d3aed6aeb629444a9a0794b6da5c28c5d58252e68d71f20282\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\":{\"content\":\"//SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\\n using SafeMath for uint256;\\n\\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\\\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\\\"));\\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\\\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\\\");\\n\\n mapping(address => uint256) private nonces;\\n bytes32 internal domainSeparator;\\n\\n /*\\n * Meta transaction structure.\\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\\n * He should call the desired function directly in that case.\\n */\\n struct MetaTransaction {\\n uint256 nonce;\\n address from;\\n bytes functionSignature;\\n }\\n\\n /*\\n * Domain structure.\\n * Data(information to for making metaTransaction method uniq.) about method and contract\\n */\\n struct EIP712Domain {\\n string name;\\n string version;\\n address verifyingContract;\\n bytes32 salt;\\n }\\n\\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\\n\\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\\n domainSeparator = keccak256(abi.encode(\\n EIP712_DOMAIN_TYPEHASH,\\n keccak256(bytes(name)),\\n keccak256(bytes(version)),\\n address(this),\\n getSalt()\\n ));\\n }\\n\\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\\n if (inBytes.length == 0) {\\n return 0x0;\\n }\\n\\n assembly {\\n outBytes4 := mload(add(inBytes, 32))\\n }\\n }\\n\\n function executeMetaTransaction(address userAddress,\\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\\n require(destinationFunctionSig != msg.sig, \\\"Wrong functionSignature\\\");\\n MetaTransaction memory metaTx = MetaTransaction({\\n nonce : nonces[userAddress],\\n from : userAddress,\\n functionSignature : functionSignature\\n });\\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \\\"Signer and signature do not match\\\");\\n nonces[userAddress] = nonces[userAddress].add(1);\\n // Append userAddress at the end to extract it from calling context\\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\\n\\n require(success, \\\"Function call not successful\\\");\\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\\n return returnData;\\n }\\n\\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n META_TRANSACTION_TYPEHASH,\\n metaTx.nonce,\\n metaTx.from,\\n keccak256(metaTx.functionSignature)\\n ));\\n }\\n\\n function getNonce(address user) external view returns (uint256 nonce) {\\n nonce = nonces[user];\\n }\\n\\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\\n require(signer != address(0), \\\"Invalid signature\\\");\\n return signer == user;\\n }\\n\\n function _msgSender() internal view virtual override returns (address payable sender) {\\n if (msg.sender == address(this)) {\\n bytes memory array = msg.data;\\n uint256 index = msg.data.length;\\n assembly {\\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\\n }\\n } else {\\n sender = msg.sender;\\n }\\n return sender;\\n }\\n\\n function getSalt() internal pure returns (bytes32) {\\n return bytes32(getChainID());\\n }\\n\\n function getChainID() internal pure returns (uint256 id) {\\n assembly {\\n id := chainid()\\n }\\n }\\n\\n function getDomainSeparator() private view returns (bytes32) {\\n return domainSeparator;\\n }\\n\\n /**\\n * Accept message hash and returns hash message in EIP712 compatible form\\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\\n * https://eips.ethereum.org/EIPS/eip-712\\n * \\\"\\\\\\\\x19\\\" makes the encoding deterministic\\n * \\\"\\\\\\\\x01\\\" is the version byte to make it compatible to EIP-191\\n */\\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", getDomainSeparator(), messageHash));\\n }\\n\\n /**\\n * @dev verifies the call result and bubbles up revert reason for failed calls\\n *\\n * @param success : outcome of forwarded call\\n * @param returndata : returned data from the frowarded call\\n * @param errorMessage : fallback error message to show\\n */\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\\n if (!success) {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\",\"keccak256\":\"0x58924a44eea8720bdcfb32f12d3374deac9605a3b75cb8872907856d526bde10\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function _setTransferProxy(bytes4 assetType, address proxy) internal {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xea639616c66696b5ae9b278d3c6c9a85839bb5e815a4db046b4fd0225cd86625\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50615df280620000216000396000f3fe60806040526004361061012a5760003560e01c8063715018a6116100ab578063bc158c2d1161006f578063bc158c2d146102fd578063d6ca6ab71461031d578063e2864fe31461033d578063e99a3f801461035d578063eae3ad6f14610370578063f2fde38b146103905761012a565b8063715018a61461026f5780638da5cb5b14610284578063b0e21e8a14610299578063b39deb46146102bd578063b74c8e9a146102dd5761012a565b80632d0335ab116100f25780632d0335ab146101da57806330c642f1146101fa5780633be899221461021a57806367d49a3b1461023a5780636d8f06941461024d5761012a565b80630c53c51c1461012f5780630d5f7d35146101585780631372a6251461016d57806320158c441461018d5780632bed54d6146101ba575b600080fd5b61014261013d36600461519d565b6103b0565b60405161014f9190615731565b60405180910390f35b61016b610166366004615305565b610729565b005b34801561017957600080fd5b5061016b610188366004615056565b610a46565b34801561019957600080fd5b506101ad6101a8366004615299565b610b63565b60405161014f919061570d565b3480156101c657600080fd5b5061016b6101d53660046150bd565b610b76565b3480156101e657600080fd5b506101ad6101f5366004614e01565b610cf0565b34801561020657600080fd5b5061016b6102153660046152cd565b610d0c565b34801561022657600080fd5b5061016b610235366004614e01565b610ddc565b61016b610248366004615305565b610e61565b34801561025957600080fd5b50610262611141565b60405161014f9190615641565b34801561027b57600080fd5b5061016b611151565b34801561029057600080fd5b506102626111fd565b3480156102a557600080fd5b506102ae61120d565b60405161014f939291906156e4565b3480156102c957600080fd5b5061016b6102d83660046152cd565b611238565b3480156102e957600080fd5b5061016b6102f8366004615209565b6112fc565b34801561030957600080fd5b5061016b610318366004614e01565b61137e565b34801561032957600080fd5b5061016b6103383660046155d3565b61144b565b34801561034957600080fd5b5061016b6103583660046154fa565b611525565b61016b61036b36600461552c565b6115e6565b34801561037c57600080fd5b5061016b61038b3660046155d3565b6115fc565b34801561039c57600080fd5b5061016b6103ab366004614e01565b6116d3565b606060006103bd866117d6565b90506000356001600160e01b03199081169082161415610424576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b038916600081815261019360209081529084902054835282015290810187905261046288828888886117f6565b61049d5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d9c6021913960400191505060405180910390fd5b6001600160a01b038816600090815261019360205260409020546104c29060016118e0565b61019360008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b6020831061052d5780518252601f19909201916020918201910161050e565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106105a35780518252601f199092019160209182019101610584565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610605576040519150601f19603f3d011682016040523d82523d6000602084013e61060a565b606091505b509150915081610661576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106e05781810151838201526020016106c8565b50505050905090810190601f16801561070d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b600061074361073e60c0840160a08501614e01565b611943565b604080516101208101909152909150600090806107636020860186614e01565b6001600160a01b031681526020016040518060400160405280604051806040016040528088604001602081019061079a91906152b1565b6001600160e01b03191681526020016107b660608a018a615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a083015201610859610140860161012087016152b1565b6001600160e01b0319168152602001610876610140860186615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815180830183528781526101808901356020828101919091528201528082018390528151608081018352949550919391925060608084019291829182820191829161090a91908c01908c016152b1565b6001600160e01b031916815260200161092660608b018b615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528201819052604082018190526060820152608001610995610140870161012088016152b1565b6001600160e01b03191681526020016109b26101c0870187615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610a36826109fc610160870187615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119a692505050565b610a4082826119bd565b50505050565b600054610100900460ff1680610a5f5750610a5f611c0f565b80610a6d575060005460ff16155b610aa85760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad3576000805460ff1961ff0019909116610100171660011790555b610adb611c20565b610ae3611cc2565b610aeb611dbb565b610b346040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611e8b565b610b3e8686611f1b565b610b49848484611fc5565b8015610b5b576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b600054610100900460ff1680610b8f5750610b8f611c0f565b80610b9d575060005460ff16155b610bd85760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015610c03576000805460ff1961ff0019909116610100171660011790555b610c0b611c20565b610c13611cc2565b610c1b611dbb565b610c646040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611e8b565b610c6e8b8b611f1b565b610c79898989611fc5565b60005b8551811015610cbd57610cb5868281518110610c9457fe5b6020026020010151868381518110610ca857fe5b6020026020010151610d6e565b600101610c7c565b50610cc8838361129a565b610cd1866116d3565b8015610ce3576000805461ff00191690555b5050505050505050505050565b6001600160a01b03166000908152610193602052604090205490565b610d14612085565b6001600160a01b0316610d256111fd565b6001600160a01b031614610d6e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c315359390610dd0908490615641565b60405180910390a25050565b610de4612085565b6001600160a01b0316610df56111fd565b6001600160a01b031614610e3e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e7661073e60c0840160a08501614e01565b60408051610120810190915290915060009080610e966020860186614e01565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b0316815260200160405180604001604052806040518060400160405280886040016020810190610efb91906152b1565b6001600160e01b0319168152602001610f1760608a018a615b36565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e085013560408201526101008501356060820152608001610f92610140860161012087016152b1565b6001600160e01b0319168152602001610faf610140860186615b36565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505060408051610120810182528281528151608081018352949550919391925060208301919081908181019081906110219060608c01908c016152b1565b6001600160e01b031916815260200161103d60608b018b615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c0016110d0610140870161012088016152b1565b6001600160e01b03191681526020016110ed6101c0870187615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050611137826109fc610160870187615b36565b610a4081836119bd565b610162546001600160a01b031681565b611159612085565b6001600160a01b031661116a6111fd565b6001600160a01b0316146111b3576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b03165b90565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b611240612085565b6001600160a01b03166112516111fd565b6001600160a01b03161461129a576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f90610dd0908490615641565b611304612085565b6001600160a01b03166113156111fd565b6001600160a01b03161461135e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6113678361137e565b6113708261144b565b611379816115fc565b505050565b611386612085565b6001600160a01b03166113976111fd565b6001600160a01b0316146113e0576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd0391611420916001600160a01b03909116908490615655565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b611453612085565b6001600160a01b03166114646111fd565b6001600160a01b0316146114ad576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e916114f291600160a01b90910465ffffffffffff16908490615b1d565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316611538612085565b6001600160a01b0316146115675760405162461bcd60e51b815260040161155e90615a8d565b60405180910390fd5b60808101516115885760405162461bcd60e51b815260040161155e9061581f565b600061159382612094565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a906115da90839061570d565b60405180910390a15050565b6115f28484848461221c565b610a4084836119bd565b611604612085565b6001600160a01b03166116156111fd565b6001600160a01b03161461165e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916116a391600160d01b90910465ffffffffffff16908490615b1d565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b6116db612085565b6001600160a01b03166116ec6111fd565b6001600160a01b031614611735576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160a01b03811661177a5760405162461bcd60e51b8152600401808060200182810382526026815260200180615c766026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008151600014156117ea575060006117f1565b5060208101515b919050565b600080600161180c611807886122e8565b61236b565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611863573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118bf576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b60008282018381101561193a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b61194b614930565b611953614930565b6001600160a01b038316611970576355575f5d60e11b815261193d565b6322ba176160e21b815260405161198b908490602001615641565b60408051601f19818403018152919052602082015292915050565b6119af826123b7565b6119b98282612481565b5050565b6000806119ca8484612730565b9150915060008060006119dd87876127c9565b925092509250600080611b366040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b0316815250611b318a600001518a60000151612878565b612949565b885191935091506001600160e01b0319166355575f5d60e11b1415611bb55785516001600160e01b0319166355575f5d60e11b1415611b7457600080fd5b81341015611b945760405162461bcd60e51b815260040161155e90615a65565b81341115611bb057611bb0611ba93484612ac0565b3390612b1d565b611c04565b85516001600160e01b0319166355575f5d60e11b1415611c045780341015611bef5760405162461bcd60e51b815260040161155e90615a65565b80341115611c0457611c04611ba93483612ac0565b505050505050505050565b6000611c1a30612bb5565b15905090565b600054610100900460ff1680611c395750611c39611c0f565b80611c47575060005460ff16155b611c825760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611cad576000805460ff1961ff0019909116610100171660011790555b8015611cbf576000805461ff00191690555b50565b600054610100900460ff1680611cdb5750611cdb611c0f565b80611ce9575060005460ff16155b611d245760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611d4f576000805460ff1961ff0019909116610100171660011790555b6000611d59612085565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611cbf576000805461ff001916905550565b600054610100900460ff1680611dd45750611dd4611c0f565b80611de2575060005460ff16155b611e1d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611e48576000805460ff1961ff0019909116610100171660011790555b611cad6040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b815250612bbb565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030611ec5612c7b565b60405160200180868152602001858152602001848152602001836001600160a01b031681526020018281526020019550505050505060405160208183030381529060405280519060200120610194819055505050565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff1680611fde5750611fde611c0f565b80611fec575060005460ff16155b6120275760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015612052576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610a40576000805461ff001916905550505050565b600061208f612c85565b905090565b60e08101516000906001600160e01b031916632611a13360e11b14806120c8575060e08201516001600160e01b0319908116145b1561213d5781516020830151516120de90612ce1565b6060840151516120ed90612ce1565b846080015160405160200180856001600160a01b031681526020018481526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506117f1565b815160208301515161214e90612ce1565b60608401515161215d90612ce1565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121c95781810151838201526020016121b1565b50505050905090810190601f1680156121f65780820380516001836020036101000a031916815260200191505b5096505050505050506040516020818303038152906040528051906020012090506117f1565b61222684846119a6565b61223082826119a6565b60408401516001600160a01b03161561228c5781516001600160a01b03161561228c5783604001516001600160a01b031682600001516001600160a01b03161461228c5760405162461bcd60e51b815260040161155e90615a22565b60408201516001600160a01b031615610a405783516001600160a01b031615610a405783600001516001600160a01b031682604001516001600160a01b031614610a405760405162461bcd60e51b815260040161155e90615891565b6000604051806080016040528060438152602001615c3360439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612375612d4b565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60a081015115806123cb5750428160a00151105b61241c576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c081015115806124305750428160c00151115b611cbf576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b60808201516125065781516001600160a01b0316156125015781516001600160a01b03166124ad612085565b6001600160a01b031614612501576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b6119b9565b81516001600160a01b0316612519612085565b6001600160a01b0316146119b957600061253283612d52565b905061254a83600001516001600160a01b0316612bb5565b15612686578251630b135d3f60e11b906001600160a01b0316631626ba7e61257184612e42565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156125c45781810151838201526020016125ac565b50505050905090810190601f1680156125f15780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561260f57600080fd5b505afa158015612623573d6000803e3d6000fd5b505050506040513d602081101561263957600080fd5b50516001600160e01b031916146126815760405162461bcd60e51b815260040180806020018281038252602b815260200180615ce0602b913960400191505060405180910390fd5b611379565b82516001600160a01b03166126a48361269e84612e42565b90612e4c565b6001600160a01b0316146126e95760405162461bcd60e51b8152600401808060200182810382526022815260200180615cbe6022913960400191505060405180910390fd5b82516001600160a01b0316611379576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b612738614930565b612740614930565b6020840151516060840151516127569190612ecc565b80519092506001600160e01b0319166127815760405162461bcd60e51b815260040161155e906159f6565b6060840151516020840151516127979190612ecc565b80519091506001600160e01b0319166127c25760405162461bcd60e51b815260040161155e906159f6565b9250929050565b6127d1614948565b6127d9614948565b6127e161496b565b60006127ec86612094565b905060006127f986612094565b90506000612805612085565b88519091506001600160a01b0316612824576001600160a01b03811688525b86516001600160a01b0316612840576001600160a01b03811687525b61284988612f0c565b955061285487612f0c565b945061286c888885858a604001518a60400151613005565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b141561289b5750600161193d565b6001600160e01b031982166355575f5d60e11b14156128bc5750600261193d565b6001600160e01b031983166322ba176160e21b14156128dd5750600161193d565b6001600160e01b031982166322ba176160e21b14156128fe5750600261193d565b6001600160e01b0319831663025ceed960e61b141561291f5750600161193d565b6001600160e01b0319821663025ceed960e61b14156129405750600261193d565b50600092915050565b8251602090810151835190910151600183600281111561296557fe5b14156129e75760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526129b790869086906131c0565b91506129e284600001516000015185600001516020015186608001518860200151886060015161343a565b612ab8565b60028360028111156129f557fe5b1415612a725760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b9091041691810191909152612a4790859087906131c0565b90506129e285600001516000015186600001516020015187608001518760200151896060015161343a565b845180516020918201516080880151928701516060890151612a9594919061343a565b835180516020918201516080870151928801516060880151612ab894919061343a565b935093915050565b600082821115612b17576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612b68576040519150601f19603f3d011682016040523d82523d6000602084013e612b6d565b606091505b5050905080611379576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff1680612bd45750612bd4611c0f565b80612be2575060005460ff16155b612c1d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015612c48576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca558015611379576000805461ff0019169055505050565b600061208f6135be565b600033301415612cdc57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061120a9050565b503390565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b6101945490565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d8260000151612d8784602001516135c2565b8460400151612d9986606001516135c2565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b6000612375613632565b60008151604114612ea4576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612ec28682858561366d565b9695505050505050565b612ed4614930565b6000612ee084846138c3565b80519091506001600160e01b031916612f0557612efd83856138c3565b91505061193d565b905061193d565b612f14614948565b60e08201516001600160e01b031916632611a13360e11b1415612f60576000826101000151806020019051810190612f4c91906153c2565b805183526020908101519083015250612fec565b60e08201516001600160e01b0319166323d235ef60e01b1415612fb8576000826101000151806020019051810190612f98919061544e565b805183526020808201519084015260409081015115159083015250612fec565b60e08201516001600160e01b03199081161415612fd457612fec565b60405162461bcd60e51b815260040161155e90615988565b8051516117f1578151612ffe90613adf565b8152919050565b61300d61496b565b600061301d886080015187613b7a565b9050600061302f886080015187613b7a565b905060006130418a8a85858a8a613b9f565b90508960200151602001516000141580613062575060608901516020015115155b156130855780516130855760405162461bcd60e51b815260040161155e90615901565b60608a0151602001511515806130a157506020808a0151015115155b156130ca5760008160200151116130ca5760405162461bcd60e51b815260040161155e90615901565b60808a01511561311d5785156130fc5780516130e79084906118e0565b600089815261012f602052604090205561311d565b602081015161310c9084906118e0565b600089815261012f60205260409020555b60808901511561317057841561315257602081015161313d9083906118e0565b600088815261012f6020526040902055613170565b805161315f9083906118e0565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c450926131ab928c928c929190615716565b60405180910390a19998505050505050505050565b60006131d9846000015160200151838660400151613c38565b90506000613203828660000151602001518760800151868960000151600001518a60600151613ce5565b8551805186515160208089015193015160808a015160608b0151959650613231959394929387929190613d42565b9050846040015151600114801561324d57508360400151516001145b80156132a25750846040015160008151811061326557fe5b6020026020010151600001516001600160a01b0316846040015160008151811061328b57fe5b6020026020010151600001516001600160a01b0316145b156133b857604080516001808252818301909252600091816020015b6132c6614985565b8152602001906001900390816132be57905050905084604001516000815181106132ec57fe5b6020026020010151600001518160008151811061330557fe5b60209081029190910101516001600160a01b0390911690526040860151805160009061332d57fe5b602002602001015160200151856040015160008151811061334a57fe5b602002602001015160200151018160008151811061336457fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250506133ae86600001516000015183886000015160200151848a608001518b60600151613e47565b5091506134119050565b6133e285600001516000015182876000015160200151886040015189608001518a60600151613e47565b50855180516020909101516040870151608089015160608a015194955061340d948693929190613e47565b5090505b6134328560000151600001518287608001518760200151896060015161343a565b509392505050565b600082511161345b5760405162461bcd60e51b815260040161155e9061584d565b600084815b600185510381101561352a5760006134a186838151811061347d57fe5b6020026020010151602001516001600160601b031689613efc90919063ffffffff16565b90506134d68683815181106134b257fe5b6020026020010151602001516001600160601b0316856118e090919063ffffffff16565b93508015613521576134e88382612ac0565b925061352160405180604001604052808b8152602001838152508888858151811061350f57fe5b60200260200101516000015188613f14565b50600101613460565b5060008460018651038151811061353d57fe5b6020026020010151905061356781602001516001600160601b0316846118e090919063ffffffff16565b9250826127101461358a5760405162461bcd60e51b815260040161155e906159bf565b81156135b4576135b460405180604001604052808a81526020018481525087836000015187613f14565b5050505050505050565b4690565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b086135f28360000151612ce1565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b600061208f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61366061431c565b613668614322565b614328565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156136ce5760405162461bcd60e51b8152600401808060200182810382526022815260200180615c9c6022913960400191505060405180910390fd5b6000601e8560ff1611156137a8576004850360ff16601b14806136f757506004850360ff16601c145b6137325760405162461bcd60e51b8152600401808060200182810382526022815260200180615d396022913960400191505060405180910390fd5b600161373d8761438a565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613797573d6000803e3d6000fd5b50505060206040510351905061385f565b8460ff16601b14806137bd57508460ff16601c145b6137f85760405162461bcd60e51b8152600401808060200182810382526022815260200180615d396022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613852573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166138ba576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6138cb614930565b825182516001600160e01b031982166355575f5d60e11b1415613936576001600160e01b031981166355575f5d60e11b141561390b57849250505061193d565b505060408051808201825260008082528251602081810190945290815291810191909152905061193d565b6001600160e01b031982166322ba176160e21b141561397b576001600160e01b031981166322ba176160e21b141561390b5761397285856143db565b9250505061193d565b6001600160e01b031982166339d690a360e11b14156139b7576001600160e01b031981166339d690a360e11b141561390b5761397285856143db565b6001600160e01b0319821663025ceed960e61b14156139f3576001600160e01b0319811663025ceed960e61b141561390b5761397285856143db565b6001600160e01b031982166000908152606560205260409020546001600160a01b03168015613aa8576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb090613a4a9089908990600401615ab2565b60006040518083038186803b158015613a6257600080fd5b505afa158015613a76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a9e9190810190615337565b935050505061193d565b6001600160e01b03198381169083161415613ac757613a9e86866143db565b60405162461bcd60e51b815260040161155e906157b1565b60408051600180825281830190925260609160009190816020015b613b02614985565b815260200190600190039081613afa5790505090508281600081518110613b2557fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505061271081600081518110613b5957fe5b6020908102919091018101516001600160601b039092169101529050919050565b600082613b895750600061193d565b50600090815261012f6020526040902054919050565b613ba761496b565b600080613bb5898887614438565b91509150600080613bc78a8988614438565b9150915083811180613be157508381148015613be1575083155b15613c0d57613c0284848c60200151602001518d60600151602001516144b1565b945050505050612ec2565b613c298b60200151602001518c60600151602001518484614536565b9b9a5050505050505050505050565b602082015160009065ffffffffffff16815b8351811015613cc557612710848281518110613c6257fe5b6020026020010151602001516001600160601b03161115613c955760405162461bcd60e51b815260040161155e90615959565b838181518110613ca157fe5b6020026020010151602001516001600160601b031682019150806001019050613c4a565b50613cda613cd38683613efc565b86906118e0565b9150505b9392505050565b6000806000613d078989886040015189602001510165ffffffffffff166145bc565b90925090508015613d3657613d3660405180604001604052808781526020018381525088886000015187613f14565b50979650505050505050565b600080613d4e886145de565b905080516001148015613d62575086516001145b8015613daf575086600081518110613d7657fe5b6020026020010151600001516001600160a01b031681600081518110613d9857fe5b6020026020010151600001516001600160a01b0316145b15613e005761138881600081518110613dc457fe5b6020026020010151602001516001600160601b03161115613df75760405162461bcd60e51b815260040161155e906157e8565b85915050613e3c565b600080613e118b8989868a8a613e47565b91509150611388811115613e375760405162461bcd60e51b815260040161155e906157e8565b509150505b979650505050505050565b846000805b8551811015613ef057613e88868281518110613e6457fe5b6020026020010151602001516001600160601b0316836118e090919063ffffffff16565b91506000613eb78489898581518110613e9d57fe5b6020026020010151602001516001600160601b03166145bc565b90945090508015613ee757613ee760405180604001604052808c8152602001838152508789858151811061350f57fe5b50600101613e4c565b50965096945050505050565b600061193a612710613f0e8585614753565b906147ac565b8351516001600160e01b0319166339d690a360e11b141561405a57600080856000015160200151806020019051810190613f4e9190615029565b915091508560200151600114613f765760405162461bcd60e51b815260040161155e906158d5565b6001600160a01b038516301415613fee57604051632142170760e11b81526001600160a01b038316906342842e0e90613fb79030908890869060040161566f565b600060405180830381600087803b158015613fd157600080fd5b505af1158015613fe5573d6000803e3d6000fd5b50505050614053565b604051637b84dc8360e11b81526001600160a01b0384169063f709b90690614020908590899089908790600401615787565b600060405180830381600087803b15801561403a57600080fd5b505af115801561404e573d6000803e3d6000fd5b505050505b5050610a40565b8351516001600160e01b0319166322ba176160e21b14156141b85760008460000151602001518060200190518101906140939190614e1d565b90506001600160a01b03841630141561414a57602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb916140d79187916004016156cb565b602060405180830381600087803b1580156140f157600080fd5b505af1158015614105573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614129919061527f565b6141455760405162461bcd60e51b815260040161155e9061592a565b6141b2565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c39161417f91859189918991600401615787565b600060405180830381600087803b15801561419957600080fd5b505af11580156141ad573d6000803e3d6000fd5b505050505b50610a40565b8351516001600160e01b03191663025ceed960e61b1415614275576000808560000151602001518060200190518101906141f29190615029565b90925090506001600160a01b03851630141561423d576020860151604051637921219560e11b81526001600160a01b0384169163f242432a91613fb791309189918791600401615693565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee9916140209186918a918a91889190600401615744565b8351516001600160e01b0319166355575f5d60e11b14156142be576001600160a01b03821630146142b95760208401516142b9906001600160a01b03841690612b1d565b610a40565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf1906142ee90879087908790600401615ad7565b600060405180830381600087803b15801561430857600080fd5b505af11580156135b4573d6000803e3d6000fd5b60c95490565b60ca5490565b60008383836143356135be565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6143e3614930565b6020808401518051908201208382015180519201919091208082141561440d57849250505061193d565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b60008082156144775760208086015101516144539085612ac0565b915061447085606001516020015186602001516020015184614813565b9050612ab8565b60608501516020015161448a9085612ac0565b90506144a785602001516020015186606001516020015183614813565b9150935093915050565b6144b961496b565b60006144c6858585614813565b90508581111561451d576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b61453e61496b565b600061454b838787614813565b9050838111156145a2576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b6000806145d2856145cd8686613efc565b614879565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480614612575081516001600160e01b0319166339d690a360e11b145b156146c85760008083602001518060200190518101906146329190615029565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a9061466990859085906004016156cb565b600060405180830381600087803b15801561468357600080fd5b505af1158015614697573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146bf919081019061524d565b925050506117f1565b81516001600160e01b03191662737ea960e61b141561470957600082602001518060200190518101906146fb9190614e39565b6080015192506117f1915050565b81516001600160e01b03191663d8f960c160e01b141561474b576000826020015180602001905181019061473d9190614f36565b6060015192506117f1915050565b506060919050565b6000826147625750600061193d565b8282028284828161476f57fe5b041461193a5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d5b6021913960400191505060405180910390fd5b6000808211614802576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161480b57fe5b049392505050565b60006148208484846148a1565b15614863576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b61487183613f0e8685614753565b949350505050565b600080828411156148985761488e8484612ac0565b91508290506127c2565b50600093915050565b6000826148e8576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8115806148f3575083155b1561490057506000613cde565b6000838061490a57fe5b85840990506149198584614753565b614925826103e8614753565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b80356117f181615c07565b600082601f8301126149b7578081fd5b813560206149cc6149c783615b9d565b615b7a565b82815281810190858301838502870184018810156149e8578586fd5b855b85811015614a0f5781356149fd81615c07565b845292840192908401906001016149ea565b5090979650505050505050565b600082601f830112614a2c578081fd5b81356020614a3c6149c783615b9d565b8281528181019085830183850287018401881015614a58578586fd5b855b85811015614a0f578135614a6d81615c1c565b84529284019290840190600101614a5a565b600082601f830112614a8f578081fd5b81516020614a9f6149c783615b9d565b82815281810190858301855b85811015614a0f57614ac2898684518b0101614bf6565b84529284019290840190600101614aab565b600082601f830112614ae4578081fd5b81516020614af46149c783615b9d565b82815281810190858301604080860288018501891015614b12578687fd5b865b86811015614b815781838b031215614b2a578788fd5b81518281018181106001600160401b0382111715614b4457fe5b83528351614b5181615c07565b8152838701516001600160601b0381168114614b6b57898afd5b8188015285529385019391810191600101614b14565b509198975050505050505050565b805180151581146117f157600080fd5b80356117f181615c1c565b600082601f830112614bba578081fd5b8135614bc86149c782615bba565b818152846020838601011115614bdc578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112614c06578081fd5b8151614c146149c782615bba565b818152846020838601011115614c28578283fd5b614871826020830160208701615bdb565b60006101e08284031215614c4b578081fd5b50919050565b60006040808385031215614c63578182fd5b80518181016001600160401b038282108183111715614c7e57fe5b818452829450853581811115614c9357600080fd5b8601808803851315614ca457600080fd5b608084018381108382111715614cb657fe5b909452833593614cc585615c1c565b93825260208401359381851115614cdb57600080fd5b614ce788868301614baa565b60608501525050815260209384013593019290925292915050565b6000610120808385031215614d15578182fd5b614d1e81615b7a565b915050614d2a8261499c565b815260208201356001600160401b0380821115614d4657600080fd5b614d5285838601614c51565b6020840152614d636040850161499c565b60408401526060840135915080821115614d7c57600080fd5b614d8885838601614c51565b60608401526080840135608084015260a084013560a084015260c084013560c0840152614db760e08501614b9f565b60e084015261010091508184013581811115614dd257600080fd5b614dde86828701614baa565b8385015250505092915050565b803565ffffffffffff811681146117f157600080fd5b600060208284031215614e12578081fd5b813561193a81615c07565b600060208284031215614e2e578081fd5b815161193a81615c07565b60008060408385031215614e4b578081fd5b8251614e5681615c07565b60208401519092506001600160401b0380821115614e72578283fd5b9084019060c08287031215614e85578283fd5b614e8f60c0615b7a565b82518152602083015182811115614ea4578485fd5b614eb088828601614bf6565b60208301525060408301516040820152606083015182811115614ed1578485fd5b614edd88828601614ad4565b606083015250608083015182811115614ef4578485fd5b614f0088828601614ad4565b60808301525060a083015182811115614f17578485fd5b614f2388828601614a7f565b60a0830152508093505050509250929050565b60008060408385031215614f48578182fd5b8251614f5381615c07565b60208401519092506001600160401b0380821115614f6f578283fd5b9084019060a08287031215614f82578283fd5b614f8c60a0615b7a565b82518152602083015182811115614fa1578485fd5b614fad88828601614bf6565b602083015250604083015182811115614fc4578485fd5b614fd088828601614ad4565b604083015250606083015182811115614fe7578485fd5b614ff388828601614ad4565b60608301525060808301518281111561500a578485fd5b61501688828601614a7f565b6080830152508093505050509250929050565b6000806040838503121561503b578182fd5b825161504681615c07565b6020939093015192949293505050565b600080600080600060a0868803121561506d578081fd5b853561507881615c07565b9450602086013561508881615c07565b935060408601359250606086013561509f81615c07565b915060808601356150af81615c07565b809150509295509295909350565b6000806000806000806000806000806101408b8d0312156150dc578788fd5b6150e58b61499c565b99506150f360208c0161499c565b985060408b0135975061510860608c0161499c565b965061511660808c0161499c565b955061512460a08c0161499c565b945060c08b01356001600160401b038082111561513f578586fd5b61514b8e838f01614a1c565b955060e08d0135915080821115615160578485fd5b5061516d8d828e016149a7565b93505061517d6101008c01614b9f565b915061518c6101208c0161499c565b90509295989b9194979a5092959850565b600080600080600060a086880312156151b4578283fd5b85356151bf81615c07565b945060208601356001600160401b038111156151d9578384fd5b6151e588828901614baa565b9450506040860135925060608601359150608086013560ff811681146150af578182fd5b60008060006060848603121561521d578081fd5b833561522881615c07565b925061523660208501614deb565b915061524460408501614deb565b90509250925092565b60006020828403121561525e578081fd5b81516001600160401b03811115615273578182fd5b61487184828501614ad4565b600060208284031215615290578081fd5b61193a82614b8f565b6000602082840312156152aa578081fd5b5035919050565b6000602082840312156152c2578081fd5b813561193a81615c1c565b600080604083850312156152df578182fd5b82356152ea81615c1c565b915060208301356152fa81615c07565b809150509250929050565b600060208284031215615316578081fd5b81356001600160401b0381111561532b578182fd5b61487184828501614c39565b600060208284031215615348578081fd5b81516001600160401b038082111561535e578283fd5b9083019060408286031215615371578283fd5b60405160408101818110838211171561538657fe5b604052825161539481615c1c565b81526020830151828111156153a7578485fd5b6153b387828601614bf6565b60208301525095945050505050565b6000602082840312156153d3578081fd5b81516001600160401b03808211156153e9578283fd5b90830190604082860312156153fc578283fd5b60405160408101818110838211171561541157fe5b604052825182811115615422578485fd5b61542e87828601614ad4565b825250602083015182811115615442578485fd5b6153b387828601614ad4565b60006020828403121561545f578081fd5b81516001600160401b0380821115615475578283fd5b9083019060608286031215615488578283fd5b60405160608101818110838211171561549d57fe5b6040528251828111156154ae578485fd5b6154ba87828601614ad4565b8252506020830151828111156154ce578485fd5b6154da87828601614ad4565b6020830152506154ec60408401614b8f565b604082015295945050505050565b60006020828403121561550b578081fd5b81356001600160401b03811115615520578182fd5b61487184828501614d02565b60008060008060808587031215615541578182fd5b84356001600160401b0380821115615557578384fd5b61556388838901614d02565b95506020870135915080821115615578578384fd5b61558488838901614baa565b94506040870135915080821115615599578384fd5b6155a588838901614d02565b935060608701359150808211156155ba578283fd5b506155c787828801614baa565b91505092959194509250565b6000602082840312156155e4578081fd5b61193a82614deb565b60008151808452615605816020860160208601615bdb565b601f01601f19169290920160200192915050565b600063ffffffff60e01b825116835260208201516040602085015261487160408501826155ed565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b60006020825261193a60208301846155ed565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b600060408252615ac56040830185615619565b8281036020840152613cda8185615619565b600060608252845160406060840152615af360a0840182615619565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e19843603018112615b4c578283fd5b8301803591506001600160401b03821115615b65578283fd5b6020019150368190038213156127c257600080fd5b6040518181016001600160401b0381118282101715615b9557fe5b604052919050565b60006001600160401b03821115615bb057fe5b5060209081020190565b60006001600160401b03821115615bcd57fe5b50601f01601f191660200190565b60005b83811015615bf6578181015183820152602001615bde565b83811115610a405750506000910152565b6001600160a01b0381168114611cbf57600080fd5b6001600160e01b031981168114611cbf57600080fdfe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368a2646970667358221220853fb7961aafe6e2183b94b8e1ed04009e1c58f763f151673e596f036a33a5d064736f6c63430007060033", + "deployedBytecode": "0x60806040526004361061012a5760003560e01c8063715018a6116100ab578063bc158c2d1161006f578063bc158c2d146102fd578063d6ca6ab71461031d578063e2864fe31461033d578063e99a3f801461035d578063eae3ad6f14610370578063f2fde38b146103905761012a565b8063715018a61461026f5780638da5cb5b14610284578063b0e21e8a14610299578063b39deb46146102bd578063b74c8e9a146102dd5761012a565b80632d0335ab116100f25780632d0335ab146101da57806330c642f1146101fa5780633be899221461021a57806367d49a3b1461023a5780636d8f06941461024d5761012a565b80630c53c51c1461012f5780630d5f7d35146101585780631372a6251461016d57806320158c441461018d5780632bed54d6146101ba575b600080fd5b61014261013d36600461519d565b6103b0565b60405161014f9190615731565b60405180910390f35b61016b610166366004615305565b610729565b005b34801561017957600080fd5b5061016b610188366004615056565b610a46565b34801561019957600080fd5b506101ad6101a8366004615299565b610b63565b60405161014f919061570d565b3480156101c657600080fd5b5061016b6101d53660046150bd565b610b76565b3480156101e657600080fd5b506101ad6101f5366004614e01565b610cf0565b34801561020657600080fd5b5061016b6102153660046152cd565b610d0c565b34801561022657600080fd5b5061016b610235366004614e01565b610ddc565b61016b610248366004615305565b610e61565b34801561025957600080fd5b50610262611141565b60405161014f9190615641565b34801561027b57600080fd5b5061016b611151565b34801561029057600080fd5b506102626111fd565b3480156102a557600080fd5b506102ae61120d565b60405161014f939291906156e4565b3480156102c957600080fd5b5061016b6102d83660046152cd565b611238565b3480156102e957600080fd5b5061016b6102f8366004615209565b6112fc565b34801561030957600080fd5b5061016b610318366004614e01565b61137e565b34801561032957600080fd5b5061016b6103383660046155d3565b61144b565b34801561034957600080fd5b5061016b6103583660046154fa565b611525565b61016b61036b36600461552c565b6115e6565b34801561037c57600080fd5b5061016b61038b3660046155d3565b6115fc565b34801561039c57600080fd5b5061016b6103ab366004614e01565b6116d3565b606060006103bd866117d6565b90506000356001600160e01b03199081169082161415610424576040805162461bcd60e51b815260206004820152601760248201527f57726f6e672066756e6374696f6e5369676e6174757265000000000000000000604482015290519081900360640190fd5b604080516060810182526001600160a01b038916600081815261019360209081529084902054835282015290810187905261046288828888886117f6565b61049d5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d9c6021913960400191505060405180910390fd5b6001600160a01b038816600090815261019360205260409020546104c29060016118e0565b61019360008a6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080306001600160a01b0316898b6040516020018083805190602001908083835b6020831061052d5780518252601f19909201916020918201910161050e565b6001836020036101000a038019825116818451168082178552505050505050905001826001600160a01b031660601b8152601401925050506040516020818303038152906040526040518082805190602001908083835b602083106105a35780518252601f199092019160209182019101610584565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610605576040519150601f19603f3d011682016040523d82523d6000602084013e61060a565b606091505b509150915081610661576040805162461bcd60e51b815260206004820152601c60248201527f46756e6374696f6e2063616c6c206e6f74207375636365737366756c00000000604482015290519081900360640190fd5b7f5845892132946850460bff5a0083f71031bc5bf9aadcd40f1de79423eac9b10b8a338b60405180846001600160a01b03168152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106e05781810151838201526020016106c8565b50505050905090810190601f16801561070d5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a19998505050505050505050565b600061074361073e60c0840160a08501614e01565b611943565b604080516101208101909152909150600090806107636020860186614e01565b6001600160a01b031681526020016040518060400160405280604051806040016040528088604001602081019061079a91906152b1565b6001600160e01b03191681526020016107b660608a018a615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a083015201610859610140860161012087016152b1565b6001600160e01b0319168152602001610876610140860186615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815180830183528781526101808901356020828101919091528201528082018390528151608081018352949550919391925060608084019291829182820191829161090a91908c01908c016152b1565b6001600160e01b031916815260200161092660608b018b615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528201819052604082018190526060820152608001610995610140870161012088016152b1565b6001600160e01b03191681526020016109b26101c0870187615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610a36826109fc610160870187615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506119a692505050565b610a4082826119bd565b50505050565b600054610100900460ff1680610a5f5750610a5f611c0f565b80610a6d575060005460ff16155b610aa85760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad3576000805460ff1961ff0019909116610100171660011790555b610adb611c20565b610ae3611cc2565b610aeb611dbb565b610b346040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611e8b565b610b3e8686611f1b565b610b49848484611fc5565b8015610b5b576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b600054610100900460ff1680610b8f5750610b8f611c0f565b80610b9d575060005460ff16155b610bd85760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015610c03576000805460ff1961ff0019909116610100171660011790555b610c0b611c20565b610c13611cc2565b610c1b611dbb565b610c646040518060400160405280600e81526020016d22bc31b430b733b2a6b2ba30ab1960911b815250604051806040016040528060018152602001603160f81b815250611e8b565b610c6e8b8b611f1b565b610c79898989611fc5565b60005b8551811015610cbd57610cb5868281518110610c9457fe5b6020026020010151868381518110610ca857fe5b6020026020010151610d6e565b600101610c7c565b50610cc8838361129a565b610cd1866116d3565b8015610ce3576000805461ff00191690555b5050505050505050505050565b6001600160a01b03166000908152610193602052604090205490565b610d14612085565b6001600160a01b0316610d256111fd565b6001600160a01b031614610d6e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c315359390610dd0908490615641565b60405180910390a25050565b610de4612085565b6001600160a01b0316610df56111fd565b6001600160a01b031614610e3e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e7661073e60c0840160a08501614e01565b60408051610120810190915290915060009080610e966020860186614e01565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b0316815260200160405180604001604052806040518060400160405280886040016020810190610efb91906152b1565b6001600160e01b0319168152602001610f1760608a018a615b36565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e085013560408201526101008501356060820152608001610f92610140860161012087016152b1565b6001600160e01b0319168152602001610faf610140860186615b36565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505060408051610120810182528281528151608081018352949550919391925060208301919081908181019081906110219060608c01908c016152b1565b6001600160e01b031916815260200161103d60608b018b615b36565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c0016110d0610140870161012088016152b1565b6001600160e01b03191681526020016110ed6101c0870187615b36565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050611137826109fc610160870187615b36565b610a4081836119bd565b610162546001600160a01b031681565b611159612085565b6001600160a01b031661116a6111fd565b6001600160a01b0316146111b3576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b03165b90565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b611240612085565b6001600160a01b03166112516111fd565b6001600160a01b03161461129a576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f90610dd0908490615641565b611304612085565b6001600160a01b03166113156111fd565b6001600160a01b03161461135e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6113678361137e565b6113708261144b565b611379816115fc565b505050565b611386612085565b6001600160a01b03166113976111fd565b6001600160a01b0316146113e0576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd0391611420916001600160a01b03909116908490615655565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b611453612085565b6001600160a01b03166114646111fd565b6001600160a01b0316146114ad576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e916114f291600160a01b90910465ffffffffffff16908490615b1d565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316611538612085565b6001600160a01b0316146115675760405162461bcd60e51b815260040161155e90615a8d565b60405180910390fd5b60808101516115885760405162461bcd60e51b815260040161155e9061581f565b600061159382612094565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a906115da90839061570d565b60405180910390a15050565b6115f28484848461221c565b610a4084836119bd565b611604612085565b6001600160a01b03166116156111fd565b6001600160a01b03161461165e576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916116a391600160d01b90910465ffffffffffff16908490615b1d565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b6116db612085565b6001600160a01b03166116ec6111fd565b6001600160a01b031614611735576040805162461bcd60e51b81526020600482018190526024820152600080516020615d7c833981519152604482015290519081900360640190fd5b6001600160a01b03811661177a5760405162461bcd60e51b8152600401808060200182810382526026815260200180615c766026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008151600014156117ea575060006117f1565b5060208101515b919050565b600080600161180c611807886122e8565b61236b565b84878760405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611863573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166118bf576040805162461bcd60e51b8152602060048201526011602482015270496e76616c6964207369676e617475726560781b604482015290519081900360640190fd5b866001600160a01b0316816001600160a01b03161491505095945050505050565b60008282018381101561193a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b61194b614930565b611953614930565b6001600160a01b038316611970576355575f5d60e11b815261193d565b6322ba176160e21b815260405161198b908490602001615641565b60408051601f19818403018152919052602082015292915050565b6119af826123b7565b6119b98282612481565b5050565b6000806119ca8484612730565b9150915060008060006119dd87876127c9565b925092509250600080611b366040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b0316815250611b318a600001518a60000151612878565b612949565b885191935091506001600160e01b0319166355575f5d60e11b1415611bb55785516001600160e01b0319166355575f5d60e11b1415611b7457600080fd5b81341015611b945760405162461bcd60e51b815260040161155e90615a65565b81341115611bb057611bb0611ba93484612ac0565b3390612b1d565b611c04565b85516001600160e01b0319166355575f5d60e11b1415611c045780341015611bef5760405162461bcd60e51b815260040161155e90615a65565b80341115611c0457611c04611ba93483612ac0565b505050505050505050565b6000611c1a30612bb5565b15905090565b600054610100900460ff1680611c395750611c39611c0f565b80611c47575060005460ff16155b611c825760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611cad576000805460ff1961ff0019909116610100171660011790555b8015611cbf576000805461ff00191690555b50565b600054610100900460ff1680611cdb5750611cdb611c0f565b80611ce9575060005460ff16155b611d245760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611d4f576000805460ff1961ff0019909116610100171660011790555b6000611d59612085565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611cbf576000805461ff001916905550565b600054610100900460ff1680611dd45750611dd4611c0f565b80611de2575060005460ff16155b611e1d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015611e48576000805460ff1961ff0019909116610100171660011790555b611cad6040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b815250612bbb565b7f36c25de3e541d5d970f66e4210d728721220fff5c077cc6cd008b3a0c62adab78280519060200120828051906020012030611ec5612c7b565b60405160200180868152602001858152602001848152602001836001600160a01b031681526020018281526020019550505050505060405160208183030381529060405280519060200120610194819055505050565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff1680611fde5750611fde611c0f565b80611fec575060005460ff16155b6120275760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015612052576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610a40576000805461ff001916905550505050565b600061208f612c85565b905090565b60e08101516000906001600160e01b031916632611a13360e11b14806120c8575060e08201516001600160e01b0319908116145b1561213d5781516020830151516120de90612ce1565b6060840151516120ed90612ce1565b846080015160405160200180856001600160a01b031681526020018481526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506117f1565b815160208301515161214e90612ce1565b60608401515161215d90612ce1565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156121c95781810151838201526020016121b1565b50505050905090810190601f1680156121f65780820380516001836020036101000a031916815260200191505b5096505050505050506040516020818303038152906040528051906020012090506117f1565b61222684846119a6565b61223082826119a6565b60408401516001600160a01b03161561228c5781516001600160a01b03161561228c5783604001516001600160a01b031682600001516001600160a01b03161461228c5760405162461bcd60e51b815260040161155e90615a22565b60408201516001600160a01b031615610a405783516001600160a01b031615610a405783600001516001600160a01b031682604001516001600160a01b031614610a405760405162461bcd60e51b815260040161155e90615891565b6000604051806080016040528060438152602001615c3360439139805190602001208260000151836020015184604001518051906020012060405160200180858152602001848152602001836001600160a01b03168152602001828152602001945050505050604051602081830303815290604052805190602001209050919050565b6000612375612d4b565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60a081015115806123cb5750428160a00151105b61241c576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c081015115806124305750428160c00151115b611cbf576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b60808201516125065781516001600160a01b0316156125015781516001600160a01b03166124ad612085565b6001600160a01b031614612501576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b6119b9565b81516001600160a01b0316612519612085565b6001600160a01b0316146119b957600061253283612d52565b905061254a83600001516001600160a01b0316612bb5565b15612686578251630b135d3f60e11b906001600160a01b0316631626ba7e61257184612e42565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156125c45781810151838201526020016125ac565b50505050905090810190601f1680156125f15780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b15801561260f57600080fd5b505afa158015612623573d6000803e3d6000fd5b505050506040513d602081101561263957600080fd5b50516001600160e01b031916146126815760405162461bcd60e51b815260040180806020018281038252602b815260200180615ce0602b913960400191505060405180910390fd5b611379565b82516001600160a01b03166126a48361269e84612e42565b90612e4c565b6001600160a01b0316146126e95760405162461bcd60e51b8152600401808060200182810382526022815260200180615cbe6022913960400191505060405180910390fd5b82516001600160a01b0316611379576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b612738614930565b612740614930565b6020840151516060840151516127569190612ecc565b80519092506001600160e01b0319166127815760405162461bcd60e51b815260040161155e906159f6565b6060840151516020840151516127979190612ecc565b80519091506001600160e01b0319166127c25760405162461bcd60e51b815260040161155e906159f6565b9250929050565b6127d1614948565b6127d9614948565b6127e161496b565b60006127ec86612094565b905060006127f986612094565b90506000612805612085565b88519091506001600160a01b0316612824576001600160a01b03811688525b86516001600160a01b0316612840576001600160a01b03811687525b61284988612f0c565b955061285487612f0c565b945061286c888885858a604001518a60400151613005565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b141561289b5750600161193d565b6001600160e01b031982166355575f5d60e11b14156128bc5750600261193d565b6001600160e01b031983166322ba176160e21b14156128dd5750600161193d565b6001600160e01b031982166322ba176160e21b14156128fe5750600261193d565b6001600160e01b0319831663025ceed960e61b141561291f5750600161193d565b6001600160e01b0319821663025ceed960e61b14156129405750600261193d565b50600092915050565b8251602090810151835190910151600183600281111561296557fe5b14156129e75760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526129b790869086906131c0565b91506129e284600001516000015185600001516020015186608001518860200151886060015161343a565b612ab8565b60028360028111156129f557fe5b1415612a725760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b9091041691810191909152612a4790859087906131c0565b90506129e285600001516000015186600001516020015187608001518760200151896060015161343a565b845180516020918201516080880151928701516060890151612a9594919061343a565b835180516020918201516080870151928801516060880151612ab894919061343a565b935093915050565b600082821115612b17576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612b68576040519150601f19603f3d011682016040523d82523d6000602084013e612b6d565b606091505b5050905080611379576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff1680612bd45750612bd4611c0f565b80612be2575060005460ff16155b612c1d5760405162461bcd60e51b815260040180806020018281038252602e815260200180615d0b602e913960400191505060405180910390fd5b600054610100900460ff16158015612c48576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca558015611379576000805461ff0019169055505050565b600061208f6135be565b600033301415612cdc57600080368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050503601516001600160a01b0316915061120a9050565b503390565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b6101945490565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d8260000151612d8784602001516135c2565b8460400151612d9986606001516135c2565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b6000612375613632565b60008151604114612ea4576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a612ec28682858561366d565b9695505050505050565b612ed4614930565b6000612ee084846138c3565b80519091506001600160e01b031916612f0557612efd83856138c3565b91505061193d565b905061193d565b612f14614948565b60e08201516001600160e01b031916632611a13360e11b1415612f60576000826101000151806020019051810190612f4c91906153c2565b805183526020908101519083015250612fec565b60e08201516001600160e01b0319166323d235ef60e01b1415612fb8576000826101000151806020019051810190612f98919061544e565b805183526020808201519084015260409081015115159083015250612fec565b60e08201516001600160e01b03199081161415612fd457612fec565b60405162461bcd60e51b815260040161155e90615988565b8051516117f1578151612ffe90613adf565b8152919050565b61300d61496b565b600061301d886080015187613b7a565b9050600061302f886080015187613b7a565b905060006130418a8a85858a8a613b9f565b90508960200151602001516000141580613062575060608901516020015115155b156130855780516130855760405162461bcd60e51b815260040161155e90615901565b60608a0151602001511515806130a157506020808a0151015115155b156130ca5760008160200151116130ca5760405162461bcd60e51b815260040161155e90615901565b60808a01511561311d5785156130fc5780516130e79084906118e0565b600089815261012f602052604090205561311d565b602081015161310c9084906118e0565b600089815261012f60205260409020555b60808901511561317057841561315257602081015161313d9083906118e0565b600088815261012f6020526040902055613170565b805161315f9083906118e0565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c450926131ab928c928c929190615716565b60405180910390a19998505050505050505050565b60006131d9846000015160200151838660400151613c38565b90506000613203828660000151602001518760800151868960000151600001518a60600151613ce5565b8551805186515160208089015193015160808a015160608b0151959650613231959394929387929190613d42565b9050846040015151600114801561324d57508360400151516001145b80156132a25750846040015160008151811061326557fe5b6020026020010151600001516001600160a01b0316846040015160008151811061328b57fe5b6020026020010151600001516001600160a01b0316145b156133b857604080516001808252818301909252600091816020015b6132c6614985565b8152602001906001900390816132be57905050905084604001516000815181106132ec57fe5b6020026020010151600001518160008151811061330557fe5b60209081029190910101516001600160a01b0390911690526040860151805160009061332d57fe5b602002602001015160200151856040015160008151811061334a57fe5b602002602001015160200151018160008151811061336457fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250506133ae86600001516000015183886000015160200151848a608001518b60600151613e47565b5091506134119050565b6133e285600001516000015182876000015160200151886040015189608001518a60600151613e47565b50855180516020909101516040870151608089015160608a015194955061340d948693929190613e47565b5090505b6134328560000151600001518287608001518760200151896060015161343a565b509392505050565b600082511161345b5760405162461bcd60e51b815260040161155e9061584d565b600084815b600185510381101561352a5760006134a186838151811061347d57fe5b6020026020010151602001516001600160601b031689613efc90919063ffffffff16565b90506134d68683815181106134b257fe5b6020026020010151602001516001600160601b0316856118e090919063ffffffff16565b93508015613521576134e88382612ac0565b925061352160405180604001604052808b8152602001838152508888858151811061350f57fe5b60200260200101516000015188613f14565b50600101613460565b5060008460018651038151811061353d57fe5b6020026020010151905061356781602001516001600160601b0316846118e090919063ffffffff16565b9250826127101461358a5760405162461bcd60e51b815260040161155e906159bf565b81156135b4576135b460405180604001604052808a81526020018481525087836000015187613f14565b5050505050505050565b4690565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b086135f28360000151612ce1565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b600061208f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61366061431c565b613668614322565b614328565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156136ce5760405162461bcd60e51b8152600401808060200182810382526022815260200180615c9c6022913960400191505060405180910390fd5b6000601e8560ff1611156137a8576004850360ff16601b14806136f757506004850360ff16601c145b6137325760405162461bcd60e51b8152600401808060200182810382526022815260200180615d396022913960400191505060405180910390fd5b600161373d8761438a565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613797573d6000803e3d6000fd5b50505060206040510351905061385f565b8460ff16601b14806137bd57508460ff16601c145b6137f85760405162461bcd60e51b8152600401808060200182810382526022815260200180615d396022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613852573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166138ba576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6138cb614930565b825182516001600160e01b031982166355575f5d60e11b1415613936576001600160e01b031981166355575f5d60e11b141561390b57849250505061193d565b505060408051808201825260008082528251602081810190945290815291810191909152905061193d565b6001600160e01b031982166322ba176160e21b141561397b576001600160e01b031981166322ba176160e21b141561390b5761397285856143db565b9250505061193d565b6001600160e01b031982166339d690a360e11b14156139b7576001600160e01b031981166339d690a360e11b141561390b5761397285856143db565b6001600160e01b0319821663025ceed960e61b14156139f3576001600160e01b0319811663025ceed960e61b141561390b5761397285856143db565b6001600160e01b031982166000908152606560205260409020546001600160a01b03168015613aa8576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb090613a4a9089908990600401615ab2565b60006040518083038186803b158015613a6257600080fd5b505afa158015613a76573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613a9e9190810190615337565b935050505061193d565b6001600160e01b03198381169083161415613ac757613a9e86866143db565b60405162461bcd60e51b815260040161155e906157b1565b60408051600180825281830190925260609160009190816020015b613b02614985565b815260200190600190039081613afa5790505090508281600081518110613b2557fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505061271081600081518110613b5957fe5b6020908102919091018101516001600160601b039092169101529050919050565b600082613b895750600061193d565b50600090815261012f6020526040902054919050565b613ba761496b565b600080613bb5898887614438565b91509150600080613bc78a8988614438565b9150915083811180613be157508381148015613be1575083155b15613c0d57613c0284848c60200151602001518d60600151602001516144b1565b945050505050612ec2565b613c298b60200151602001518c60600151602001518484614536565b9b9a5050505050505050505050565b602082015160009065ffffffffffff16815b8351811015613cc557612710848281518110613c6257fe5b6020026020010151602001516001600160601b03161115613c955760405162461bcd60e51b815260040161155e90615959565b838181518110613ca157fe5b6020026020010151602001516001600160601b031682019150806001019050613c4a565b50613cda613cd38683613efc565b86906118e0565b9150505b9392505050565b6000806000613d078989886040015189602001510165ffffffffffff166145bc565b90925090508015613d3657613d3660405180604001604052808781526020018381525088886000015187613f14565b50979650505050505050565b600080613d4e886145de565b905080516001148015613d62575086516001145b8015613daf575086600081518110613d7657fe5b6020026020010151600001516001600160a01b031681600081518110613d9857fe5b6020026020010151600001516001600160a01b0316145b15613e005761138881600081518110613dc457fe5b6020026020010151602001516001600160601b03161115613df75760405162461bcd60e51b815260040161155e906157e8565b85915050613e3c565b600080613e118b8989868a8a613e47565b91509150611388811115613e375760405162461bcd60e51b815260040161155e906157e8565b509150505b979650505050505050565b846000805b8551811015613ef057613e88868281518110613e6457fe5b6020026020010151602001516001600160601b0316836118e090919063ffffffff16565b91506000613eb78489898581518110613e9d57fe5b6020026020010151602001516001600160601b03166145bc565b90945090508015613ee757613ee760405180604001604052808c8152602001838152508789858151811061350f57fe5b50600101613e4c565b50965096945050505050565b600061193a612710613f0e8585614753565b906147ac565b8351516001600160e01b0319166339d690a360e11b141561405a57600080856000015160200151806020019051810190613f4e9190615029565b915091508560200151600114613f765760405162461bcd60e51b815260040161155e906158d5565b6001600160a01b038516301415613fee57604051632142170760e11b81526001600160a01b038316906342842e0e90613fb79030908890869060040161566f565b600060405180830381600087803b158015613fd157600080fd5b505af1158015613fe5573d6000803e3d6000fd5b50505050614053565b604051637b84dc8360e11b81526001600160a01b0384169063f709b90690614020908590899089908790600401615787565b600060405180830381600087803b15801561403a57600080fd5b505af115801561404e573d6000803e3d6000fd5b505050505b5050610a40565b8351516001600160e01b0319166322ba176160e21b14156141b85760008460000151602001518060200190518101906140939190614e1d565b90506001600160a01b03841630141561414a57602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb916140d79187916004016156cb565b602060405180830381600087803b1580156140f157600080fd5b505af1158015614105573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614129919061527f565b6141455760405162461bcd60e51b815260040161155e9061592a565b6141b2565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c39161417f91859189918991600401615787565b600060405180830381600087803b15801561419957600080fd5b505af11580156141ad573d6000803e3d6000fd5b505050505b50610a40565b8351516001600160e01b03191663025ceed960e61b1415614275576000808560000151602001518060200190518101906141f29190615029565b90925090506001600160a01b03851630141561423d576020860151604051637921219560e11b81526001600160a01b0384169163f242432a91613fb791309189918791600401615693565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee9916140209186918a918a91889190600401615744565b8351516001600160e01b0319166355575f5d60e11b14156142be576001600160a01b03821630146142b95760208401516142b9906001600160a01b03841690612b1d565b610a40565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf1906142ee90879087908790600401615ad7565b600060405180830381600087803b15801561430857600080fd5b505af11580156135b4573d6000803e3d6000fd5b60c95490565b60ca5490565b60008383836143356135be565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6143e3614930565b6020808401518051908201208382015180519201919091208082141561440d57849250505061193d565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b60008082156144775760208086015101516144539085612ac0565b915061447085606001516020015186602001516020015184614813565b9050612ab8565b60608501516020015161448a9085612ac0565b90506144a785602001516020015186606001516020015183614813565b9150935093915050565b6144b961496b565b60006144c6858585614813565b90508581111561451d576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b61453e61496b565b600061454b838787614813565b9050838111156145a2576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b6000806145d2856145cd8686613efc565b614879565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480614612575081516001600160e01b0319166339d690a360e11b145b156146c85760008083602001518060200190518101906146329190615029565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a9061466990859085906004016156cb565b600060405180830381600087803b15801561468357600080fd5b505af1158015614697573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526146bf919081019061524d565b925050506117f1565b81516001600160e01b03191662737ea960e61b141561470957600082602001518060200190518101906146fb9190614e39565b6080015192506117f1915050565b81516001600160e01b03191663d8f960c160e01b141561474b576000826020015180602001905181019061473d9190614f36565b6060015192506117f1915050565b506060919050565b6000826147625750600061193d565b8282028284828161476f57fe5b041461193a5760405162461bcd60e51b8152600401808060200182810382526021815260200180615d5b6021913960400191505060405180910390fd5b6000808211614802576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161480b57fe5b049392505050565b60006148208484846148a1565b15614863576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b61487183613f0e8685614753565b949350505050565b600080828411156148985761488e8484612ac0565b91508290506127c2565b50600093915050565b6000826148e8576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8115806148f3575083155b1561490057506000613cde565b6000838061490a57fe5b85840990506149198584614753565b614925826103e8614753565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b80356117f181615c07565b600082601f8301126149b7578081fd5b813560206149cc6149c783615b9d565b615b7a565b82815281810190858301838502870184018810156149e8578586fd5b855b85811015614a0f5781356149fd81615c07565b845292840192908401906001016149ea565b5090979650505050505050565b600082601f830112614a2c578081fd5b81356020614a3c6149c783615b9d565b8281528181019085830183850287018401881015614a58578586fd5b855b85811015614a0f578135614a6d81615c1c565b84529284019290840190600101614a5a565b600082601f830112614a8f578081fd5b81516020614a9f6149c783615b9d565b82815281810190858301855b85811015614a0f57614ac2898684518b0101614bf6565b84529284019290840190600101614aab565b600082601f830112614ae4578081fd5b81516020614af46149c783615b9d565b82815281810190858301604080860288018501891015614b12578687fd5b865b86811015614b815781838b031215614b2a578788fd5b81518281018181106001600160401b0382111715614b4457fe5b83528351614b5181615c07565b8152838701516001600160601b0381168114614b6b57898afd5b8188015285529385019391810191600101614b14565b509198975050505050505050565b805180151581146117f157600080fd5b80356117f181615c1c565b600082601f830112614bba578081fd5b8135614bc86149c782615bba565b818152846020838601011115614bdc578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112614c06578081fd5b8151614c146149c782615bba565b818152846020838601011115614c28578283fd5b614871826020830160208701615bdb565b60006101e08284031215614c4b578081fd5b50919050565b60006040808385031215614c63578182fd5b80518181016001600160401b038282108183111715614c7e57fe5b818452829450853581811115614c9357600080fd5b8601808803851315614ca457600080fd5b608084018381108382111715614cb657fe5b909452833593614cc585615c1c565b93825260208401359381851115614cdb57600080fd5b614ce788868301614baa565b60608501525050815260209384013593019290925292915050565b6000610120808385031215614d15578182fd5b614d1e81615b7a565b915050614d2a8261499c565b815260208201356001600160401b0380821115614d4657600080fd5b614d5285838601614c51565b6020840152614d636040850161499c565b60408401526060840135915080821115614d7c57600080fd5b614d8885838601614c51565b60608401526080840135608084015260a084013560a084015260c084013560c0840152614db760e08501614b9f565b60e084015261010091508184013581811115614dd257600080fd5b614dde86828701614baa565b8385015250505092915050565b803565ffffffffffff811681146117f157600080fd5b600060208284031215614e12578081fd5b813561193a81615c07565b600060208284031215614e2e578081fd5b815161193a81615c07565b60008060408385031215614e4b578081fd5b8251614e5681615c07565b60208401519092506001600160401b0380821115614e72578283fd5b9084019060c08287031215614e85578283fd5b614e8f60c0615b7a565b82518152602083015182811115614ea4578485fd5b614eb088828601614bf6565b60208301525060408301516040820152606083015182811115614ed1578485fd5b614edd88828601614ad4565b606083015250608083015182811115614ef4578485fd5b614f0088828601614ad4565b60808301525060a083015182811115614f17578485fd5b614f2388828601614a7f565b60a0830152508093505050509250929050565b60008060408385031215614f48578182fd5b8251614f5381615c07565b60208401519092506001600160401b0380821115614f6f578283fd5b9084019060a08287031215614f82578283fd5b614f8c60a0615b7a565b82518152602083015182811115614fa1578485fd5b614fad88828601614bf6565b602083015250604083015182811115614fc4578485fd5b614fd088828601614ad4565b604083015250606083015182811115614fe7578485fd5b614ff388828601614ad4565b60608301525060808301518281111561500a578485fd5b61501688828601614a7f565b6080830152508093505050509250929050565b6000806040838503121561503b578182fd5b825161504681615c07565b6020939093015192949293505050565b600080600080600060a0868803121561506d578081fd5b853561507881615c07565b9450602086013561508881615c07565b935060408601359250606086013561509f81615c07565b915060808601356150af81615c07565b809150509295509295909350565b6000806000806000806000806000806101408b8d0312156150dc578788fd5b6150e58b61499c565b99506150f360208c0161499c565b985060408b0135975061510860608c0161499c565b965061511660808c0161499c565b955061512460a08c0161499c565b945060c08b01356001600160401b038082111561513f578586fd5b61514b8e838f01614a1c565b955060e08d0135915080821115615160578485fd5b5061516d8d828e016149a7565b93505061517d6101008c01614b9f565b915061518c6101208c0161499c565b90509295989b9194979a5092959850565b600080600080600060a086880312156151b4578283fd5b85356151bf81615c07565b945060208601356001600160401b038111156151d9578384fd5b6151e588828901614baa565b9450506040860135925060608601359150608086013560ff811681146150af578182fd5b60008060006060848603121561521d578081fd5b833561522881615c07565b925061523660208501614deb565b915061524460408501614deb565b90509250925092565b60006020828403121561525e578081fd5b81516001600160401b03811115615273578182fd5b61487184828501614ad4565b600060208284031215615290578081fd5b61193a82614b8f565b6000602082840312156152aa578081fd5b5035919050565b6000602082840312156152c2578081fd5b813561193a81615c1c565b600080604083850312156152df578182fd5b82356152ea81615c1c565b915060208301356152fa81615c07565b809150509250929050565b600060208284031215615316578081fd5b81356001600160401b0381111561532b578182fd5b61487184828501614c39565b600060208284031215615348578081fd5b81516001600160401b038082111561535e578283fd5b9083019060408286031215615371578283fd5b60405160408101818110838211171561538657fe5b604052825161539481615c1c565b81526020830151828111156153a7578485fd5b6153b387828601614bf6565b60208301525095945050505050565b6000602082840312156153d3578081fd5b81516001600160401b03808211156153e9578283fd5b90830190604082860312156153fc578283fd5b60405160408101818110838211171561541157fe5b604052825182811115615422578485fd5b61542e87828601614ad4565b825250602083015182811115615442578485fd5b6153b387828601614ad4565b60006020828403121561545f578081fd5b81516001600160401b0380821115615475578283fd5b9083019060608286031215615488578283fd5b60405160608101818110838211171561549d57fe5b6040528251828111156154ae578485fd5b6154ba87828601614ad4565b8252506020830151828111156154ce578485fd5b6154da87828601614ad4565b6020830152506154ec60408401614b8f565b604082015295945050505050565b60006020828403121561550b578081fd5b81356001600160401b03811115615520578182fd5b61487184828501614d02565b60008060008060808587031215615541578182fd5b84356001600160401b0380821115615557578384fd5b61556388838901614d02565b95506020870135915080821115615578578384fd5b61558488838901614baa565b94506040870135915080821115615599578384fd5b6155a588838901614d02565b935060608701359150808211156155ba578283fd5b506155c787828801614baa565b91505092959194509250565b6000602082840312156155e4578081fd5b61193a82614deb565b60008151808452615605816020860160208601615bdb565b601f01601f19169290920160200192915050565b600063ffffffff60e01b825116835260208201516040602085015261487160408501826155ed565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b60006020825261193a60208301846155ed565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b600060408252615ac56040830185615619565b8281036020840152613cda8185615619565b600060608252845160406060840152615af360a0840182615619565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e19843603018112615b4c578283fd5b8301803591506001600160401b03821115615b65578283fd5b6020019150368190038213156127c257600080fd5b6040518181016001600160401b0381118282101715615b9557fe5b604052919050565b60006001600160401b03821115615bb057fe5b5060209081020190565b60006001600160401b03821115615bcd57fe5b50601f01601f191660200190565b60005b83811015615bf6578181015183820152602001615bde565b83811115610a405750506000910152565b6001600160a01b0381168114611cbf57600080fd5b6001600160e01b031981168114611cbf57600080fdfe4d6574615472616e73616374696f6e2875696e74323536206e6f6e63652c616464726573732066726f6d2c62797465732066756e6374696f6e5369676e6174757265294f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725369676e657220616e64207369676e617475726520646f206e6f74206d61746368a2646970667358221220853fb7961aafe6e2183b94b8e1ed04009e1c58f763f151673e596f036a33a5d064736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))": { + "details": "function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction", + "params": { + "direct": "struct with parameters for accept bid operation" + } + }, + "directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))": { + "details": "function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 11953, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "matchers", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes4,t_address)" + }, + { + "astId": 12218, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "102", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 31747, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "proxies", + "offset": 0, + "slot": "151", + "type": "t_mapping(t_bytes4,t_address)" + }, + { + "astId": 32063, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "152", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 138, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_HASHED_NAME", + "offset": 0, + "slot": "201", + "type": "t_bytes32" + }, + { + "astId": 140, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "_HASHED_VERSION", + "offset": 0, + "slot": "202", + "type": "t_bytes32" + }, + { + "astId": 289, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "203", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 13603, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "253", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 12535, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "fills", + "offset": 0, + "slot": "303", + "type": "t_mapping(t_bytes32,t_uint256)" + }, + { + "astId": 13467, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "304", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 30674, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "protocolFee", + "offset": 0, + "slot": "353", + "type": "t_struct(ProtocolFeeData)30710_storage" + }, + { + "astId": 30676, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "royaltiesRegistry", + "offset": 0, + "slot": "354", + "type": "t_contract(IRoyaltiesProvider)11922" + }, + { + "astId": 30678, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "defaultFeeReceiver", + "offset": 0, + "slot": "355", + "type": "t_address" + }, + { + "astId": 30682, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "feeReceivers", + "offset": 0, + "slot": "356", + "type": "t_mapping(t_address,t_address)" + }, + { + "astId": 31723, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "__gap", + "offset": 0, + "slot": "357", + "type": "t_array(t_uint256)46_storage" + }, + { + "astId": 19515, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "nonces", + "offset": 0, + "slot": "403", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 19517, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "domainSeparator", + "offset": 0, + "slot": "404", + "type": "t_bytes32" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)46_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_contract(IRoyaltiesProvider)11922": { + "encoding": "inplace", + "label": "contract IRoyaltiesProvider", + "numberOfBytes": "20" + }, + "t_mapping(t_address,t_address)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_uint256)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes4,t_address)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => address)", + "numberOfBytes": "32", + "value": "t_address" + }, + "t_struct(ProtocolFeeData)30710_storage": { + "encoding": "inplace", + "label": "struct RaribleTransferManager.ProtocolFeeData", + "members": [ + { + "astId": 30705, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "receiver", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 30707, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "buyerAmount", + "offset": 20, + "slot": "0", + "type": "t_uint48" + }, + { + "astId": 30709, + "contract": "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol:ExchangeMetaV2", + "label": "sellerAmount", + "offset": 26, + "slot": "0", + "type": "t_uint48" + } + ], + "numberOfBytes": "32" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint48": { + "encoding": "inplace", + "label": "uint48", + "numberOfBytes": "6" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/ExchangeMetaV2_Proxy.json b/projects/hardhat-deploy/deployments/sei_testnet/ExchangeMetaV2_Proxy.json new file mode 100644 index 000000000..25f879e63 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/ExchangeMetaV2_Proxy.json @@ -0,0 +1,302 @@ +{ + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "1049680", + "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000000000000000000000000000400000000000000000000000800000000000000010000000020000010000000000000042004000000000000000000200020000000000000008004002008000000000000000000000004000000000010001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000002000000004000000000000000a0000008000000000001000000000000000400000000000000000020000000000000000000000000000000000000020000000000000000300000000200", + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a", + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "logs": [ + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000006c619e55e9947051e98570a36044c31c4eb0736d" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + }, + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + }, + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0xd8f960c100000000000000000000000000000000000000000000000000000000" + ], + "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", + "logIndex": 2, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + }, + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", + "logIndex": 3, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + }, + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", + "0xf63c282500000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", + "logIndex": 4, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + }, + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 5, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + }, + { + "transactionIndex": 22, + "blockNumber": 18030112, + "transactionHash": "0x5343cc3e80935109b53eedf9e1449a33a8d50d1166e115adc830f6f8997296da", + "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 6, + "blockHash": "0x99aa9405daffe72c6dd8f9a20aadaf534345b444bf1bdfcbce92a350990d309a" + } + ], + "blockNumber": 18030112, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/RaribleExchangeWrapper.json b/projects/hardhat-deploy/deployments/sei_testnet/RaribleExchangeWrapper.json new file mode 100644 index 000000000..c20e09cef --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/RaribleExchangeWrapper.json @@ -0,0 +1,726 @@ +{ + "address": "0x0D7147461cef9Ce51B8ba63560Dc53f96E90638B", + "abi": [ + { + "inputs": [ + { + "internalType": "address[11]", + "name": "marketplaces", + "type": "address[11]" + }, + { + "internalType": "address", + "name": "_weth", + "type": "address" + }, + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "result", + "type": "bool" + } + ], + "name": "Execution", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "paused", + "type": "bool" + } + ], + "name": "Paused", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + } + ], + "name": "approveWETH", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "blur", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapper.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapper.PurchaseDetails[]", + "name": "purchaseDetails", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowFail", + "type": "bool" + } + ], + "name": "bulkPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "exchangeV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRare", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRareV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_paused", + "type": "bool" + } + ], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_4", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_5", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_6", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapper.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapper.PurchaseDetails", + "name": "purchaseDetails", + "type": "tuple" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + } + ], + "name": "singlePurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "sudoswap", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "weth", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wyvernExchange", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "x2y2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x6391cd34da98b8ec5be940bc12ded197d7285d33ddccb4787ac5efe910b605d3", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "4340176", + "logsBloom": "0x00000000000000000000800000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000020200000000800000000000000000000000000000001000000000000004000000020000000000000020000000000000000000800000000000000000400000000000000400000000000000000000000000000000000000000000020000000000000000000020000000000000000000000000000000004000000000000000200000000000000000000000000000000000021000000000000000000000000000100004020000010000000000000000000800000000000000008000000000000000000000000", + "blockHash": "0x688e73f18f6ffcda4f07c66d55012c924a0d9620e8dd3b024c2975ae84b123a4", + "transactionHash": "0x6391cd34da98b8ec5be940bc12ded197d7285d33ddccb4787ac5efe910b605d3", + "logs": [ + { + "transactionIndex": 2, + "blockNumber": 18046753, + "transactionHash": "0x6391cd34da98b8ec5be940bc12ded197d7285d33ddccb4787ac5efe910b605d3", + "address": "0x0D7147461cef9Ce51B8ba63560Dc53f96E90638B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x688e73f18f6ffcda4f07c66d55012c924a0d9620e8dd3b024c2975ae84b123a4" + }, + { + "transactionIndex": 2, + "blockNumber": 18046753, + "transactionHash": "0x6391cd34da98b8ec5be940bc12ded197d7285d33ddccb4787ac5efe910b605d3", + "address": "0x63600A899Ad94AE1BC638504Fa56D8A6144Df2fe", + "topics": [ + "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", + "0x0000000000000000000000000d7147461cef9ce51b8ba63560dc53f96e90638b", + "0x000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a509731" + ], + "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "logIndex": 1, + "blockHash": "0x688e73f18f6ffcda4f07c66d55012c924a0d9620e8dd3b024c2975ae84b123a4" + }, + { + "transactionIndex": 2, + "blockNumber": 18046753, + "transactionHash": "0x6391cd34da98b8ec5be940bc12ded197d7285d33ddccb4787ac5efe910b605d3", + "address": "0x0D7147461cef9Ce51B8ba63560Dc53f96E90638B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x688e73f18f6ffcda4f07c66d55012c924a0d9620e8dd3b024c2975ae84b123a4" + } + ], + "blockNumber": 18046753, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + [ + "0x0000000000000000000000000000000000000000", + "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000", + "0x0000000000000000000000000000000000000000" + ], + "0x63600a899ad94ae1bc638504fa56d8a6144df2fe", + [ + "0xA3d49c7e2c845b792e422696FE0D9ef17a509731" + ], + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ], + "numDeployments": 2, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[11]\",\"name\":\"marketplaces\",\"type\":\"address[11]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_6\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":\"RaribleExchangeWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165 is IERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n constructor () internal {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Receiver.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\ncontract ERC1155Holder is ERC1155Receiver {\\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155BatchReceived.selector;\\n }\\n}\\n\",\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155Receiver.sol\\\";\\nimport \\\"../../introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\\n constructor() internal {\\n _registerInterface(\\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n}\\n\",\"keccak256\":\"0x57a0e246fb1c8f9cccf91c508eafe474e40260a31de3a39019ba8312cfdf9b2d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155Receiver is IERC165 {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC721Receiver.sol\\\";\\n\\n /**\\n * @dev Implementation of the {IERC721Receiver} interface.\\n *\\n * Accepts all token transfers. \\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\\n */\\ncontract ERC721Holder is IERC721Receiver {\\n\\n /**\\n * @dev See {IERC721Receiver-onERC721Received}.\\n *\\n * Always returns `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n}\\n\",\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function _setAssetMatcher(bytes4 assetType, address matcher) internal {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x8fceb04eec1c1b32bea097a019b57e9422c31fa2e020e9957db91d5b03edb1bb\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n function __ExchangeV2_init_proxy(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider,\\n address _initialOwner,\\n bytes4[] memory assetTypes, \\n address[] memory proxies,\\n bytes4 assetMatcherType,\\n address assetMatcher\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n for (uint i = 0; i < assetTypes.length; i++) {\\n _setTransferProxy(assetTypes[i], proxies[i]);\\n }\\n _setAssetMatcher(assetMatcherType, assetMatcher);\\n transferOwnership(_initialOwner);\\n }\\n}\\n\",\"keccak256\":\"0x8b5d108d1e027792fd3494dda7feb79937b5bb68cec82109f3ce69fe1f01c59a\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\\\";\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport \\\"./interfaces/IWyvernExchange.sol\\\";\\nimport \\\"./interfaces/IExchangeV2.sol\\\";\\nimport \\\"./interfaces/ISeaPort.sol\\\";\\nimport \\\"./interfaces/Ix2y2.sol\\\";\\nimport \\\"./interfaces/ILooksRare.sol\\\";\\nimport \\\"./interfaces/IBlur.sol\\\";\\n\\nimport \\\"./libraries/IsPausable.sol\\\";\\n\\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\\n using LibTransfer for address;\\n using BpLibrary for uint;\\n using SafeMath for uint;\\n\\n //marketplaces\\n address public immutable wyvernExchange;\\n address public immutable exchangeV2;\\n address public immutable seaPort_1_1;\\n address public immutable x2y2;\\n address public immutable looksRare;\\n address public immutable sudoswap;\\n address public immutable seaPort_1_4;\\n address public immutable looksRareV2;\\n address public immutable blur;\\n address public immutable seaPort_1_5;\\n address public immutable seaPort_1_6;\\n\\n //currencties\\n address public immutable weth;\\n\\n //constants\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n event Execution(bool result);\\n\\n enum Markets {\\n ExchangeV2,//0\\n WyvernExchange,//1\\n SeaPort_1_1,//2\\n X2Y2,//3\\n LooksRareOrders,//4\\n SudoSwap,//5\\n SeaPort_1_4,//6\\n LooksRareV2,//7\\n Blur,//8\\n SeaPort_1_5,//9\\n SeaPort_1_6//10\\n }\\n\\n enum AdditionalDataTypes {\\n NoAdditionalData,\\n RoyaltiesAdditionalData\\n }\\n\\n enum Currencies {\\n ETH,\\n WETH\\n }\\n\\n /**\\n @notice struct for the purchase data\\n @param marketId - market key from Markets enum (what market to use)\\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\\n bytes (27,28) used for dataType\\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\\n @param data - data for market call\\n */\\n struct PurchaseDetails {\\n Markets marketId;\\n uint256 amount;\\n uint fees;\\n bytes data;\\n }\\n\\n /**\\n @notice struct for the data with additional Ddta\\n @param data - data for market call\\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\\n */\\n struct AdditionalData {\\n bytes data;\\n uint[] additionalRoyalties;\\n }\\n\\n constructor(\\n address[11] memory marketplaces,\\n //address _wyvernExchange, 0\\n //address _exchangeV2, 1\\n //address _seaPort_1_1, 2\\n //address _x2y2, 3\\n //address _looksRare, 4\\n //address _sudoswap, 5\\n //address _seaPort_1_4, 6\\n //address _looksRareV2, 7\\n //address _blur, 8\\n //address _seaPort_1_5, 9\\n //address _seaPort_1_6, 10\\n address _weth,\\n address[] memory transferProxies,\\n address initialOwner\\n ) {\\n wyvernExchange = marketplaces[0];\\n exchangeV2 = marketplaces[1];\\n seaPort_1_1 = marketplaces[2];\\n x2y2 = marketplaces[3];\\n looksRare = marketplaces[4];\\n sudoswap = marketplaces[5];\\n seaPort_1_4 = marketplaces[6];\\n looksRareV2 = marketplaces[7];\\n blur = marketplaces[8];\\n seaPort_1_5 = marketplaces[9];\\n seaPort_1_6 = marketplaces[10];\\n\\n weth = _weth;\\n\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n if (_weth != address(0)){\\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n transferOwnership(initialOwner);\\n }\\n\\n /**\\n @notice executes a single purchase\\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n */\\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\\n requireNotPaused();\\n \\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\\n \\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n Currencies currency = getCurrency(purchaseDetails.fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n emit Execution(success);\\n \\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes an array of purchases\\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\\n */\\n \\n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\\n requireNotPaused();\\n\\n uint sumFirstFeesETH = 0;\\n uint sumSecondFeesETH = 0;\\n uint sumFirstFeesWETH = 0;\\n uint sumSecondFeesWETH = 0;\\n bool result = false;\\n\\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = 0;\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\\n }\\n\\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n Currencies currency = getCurrency(purchaseDetails[i].fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n result = result || success;\\n emit Execution(success);\\n }\\n\\n require(result, \\\"no successful executions\\\");\\n\\n //pay fees in ETH \\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\\n\\n //pay fees in WETH\\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\\n\\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes one purchase in ETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n uint paymentAmount = purchaseDetails.amount;\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase wyvernExchange failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\\n\\n if (allowFail) {\\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n Ix2y2(x2y2).run{value : paymentAmount}(input);\\n }\\n\\n //for every element in input.details[] getting\\n // order = input.details[i].orderIdx\\n // and from that order getting item = input.details[i].itemId\\n for (uint i = 0; i < input.details.length; ++i) {\\n uint orderId = input.details[i].orderIdx;\\n uint itemId = input.details[i].itemIdx;\\n bytes memory data = input.orders[orderId].items[itemId].data;\\n {\\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\\n }\\n }\\n\\n // 1 = erc-721\\n if (input.orders[orderId].delegateType == 1) {\\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair721 memory p = pairs[j];\\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\\n }\\n } else if (input.orders[orderId].delegateType == 2) {\\n // 2 = erc-1155\\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair1155 memory p = pairs[j];\\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \\\"\\\");\\n }\\n } else {\\n revert(\\\"unknown delegateType x2y2\\\");\\n }\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\\n if (allowFail) {\\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase sudoswap failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase LooksRareV2 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.Blur){\\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\\n if (allowFail) {\\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId ETH\\\");\\n }\\n\\n //transferring royalties\\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\\n \\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice executes one purchase in WETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n\\n //buying\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed WETH\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId WETH\\\");\\n }\\n \\n //transfer royalties\\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\\n\\n //get fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice transfers ETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n LibTransfer.transferEth(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers WETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers change back to sender\\n */\\n function transferChange() internal {\\n uint ethAmount = address(this).balance;\\n if (ethAmount > 0) {\\n address(msg.sender).transferEth(ethAmount);\\n }\\n }\\n\\n /**\\n @notice transfers weth change back to sender\\n */\\n function transferChangeWETH() internal {\\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\\n if (wethAmount > 0) {\\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\\n }\\n }\\n\\n /**\\n @notice parses fees in base points from one uint and calculates real amount of fees\\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\\n @param amount price of the order\\n @return firstFeeAmount real amount for the first fee\\n @return secondFeeAmount real amount for the second fee\\n */\\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\\n uint firstFee = uint(uint16(fees >> 16));\\n uint secondFee = uint(uint16(fees));\\n return (amount.bp(firstFee), amount.bp(secondFee));\\n }\\n\\n /**\\n @notice parses \\\"fees\\\" field to find the currency for the purchase\\n @param fees field with encoded data\\n @return 0 if ETH, 1 if WETH ERC-20\\n */\\n function getCurrency(uint fees) internal pure returns(Currencies) {\\n return Currencies(uint16(fees >> 48));\\n }\\n\\n\\n /**\\n @notice parses _data to data for market call and additionalData\\n @param feesAndDataType 27 and 28 bytes for dataType\\n @return marketData data for market call\\n @return additionalRoyalties array uint256, (base point + address)\\n */\\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\\n uint[] memory additionalRoyalties;\\n\\n //return no royalties if wrong data type\\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\\n return (_data, additionalRoyalties);\\n }\\n\\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\\n\\n //return no royalties if market doesn't support royalties\\n if (supportsRoyalties(marketId)) {\\n return (additionalData.data, additionalData.additionalRoyalties);\\n } else {\\n return (additionalData.data, additionalRoyalties);\\n } \\n }\\n \\n revert(\\\"unknown additionalDataType\\\");\\n }\\n\\n /**\\n @notice transfer additional royalties in ETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeETH(value, account);\\n }\\n }\\n }\\n\\n /**\\n @notice transfer additional royalties in WETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeWETH(value, account);\\n }\\n }\\n }\\n\\n // modifies `src`\\n function _arrayReplace(\\n bytes memory src,\\n bytes memory replacement,\\n bytes memory mask\\n ) internal view virtual {\\n require(src.length == replacement.length);\\n require(src.length == mask.length);\\n\\n for (uint256 i = 0; i < src.length; ++i) {\\n if (mask[i] != 0) {\\n src[i] = replacement[i];\\n }\\n }\\n }\\n\\n /**\\n @notice returns true if this contract supports additional royalties for the marketplace;\\n now royalties are supported for:\\n 1. SudoSwap\\n 2. LooksRare old\\n 3. LooksRare V2\\n */\\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\\n if (\\n marketId == Markets.SudoSwap ||\\n marketId == Markets.LooksRareOrders ||\\n marketId == Markets.LooksRareV2\\n ) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\\n uint result = 0;\\n\\n Currencies currency = getCurrency(detail.fees);\\n\\n //for every purchase with WETH we sum amount, fees and royalties needed\\n if (currency == Currencies.WETH) {\\n\\n //add amount\\n result = result + detail.amount;\\n\\n //add fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\\n result = result + firstFeeAmount + secondFeeAmount;\\n\\n //add royalties\\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\\n for (uint j = 0; j < royalties.length; ++j) {\\n uint royaltyBasePoint = uint(royalties[j] >> 160);\\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\\n result = result + royaltyValue;\\n }\\n }\\n\\n return result;\\n }\\n\\n /**\\n @notice approves weth for a list of the addresses\\n @param transferProxies - array of addresses to approve WETH for\\n */\\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n receive() external payable {}\\n}\",\"keccak256\":\"0xef372314c49c4a4c44c2956a8d3e875e4c1016963969f5a867cd9d6162a920c2\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\n\\ninterface IBlur {\\n enum Side { Buy, Sell }\\n enum SignatureVersion { Single, Bulk }\\n enum AssetType { ERC721, ERC1155 }\\n\\n struct Fee {\\n uint16 rate;\\n address payable recipient;\\n }\\n \\n struct Order {\\n address trader;\\n Side side;\\n address matchingPolicy;\\n address collection;\\n uint256 tokenId;\\n uint256 amount;\\n address paymentToken;\\n uint256 price;\\n uint256 listingTime;\\n /* Order expiration timestamp - 0 for oracle cancellations. */\\n uint256 expirationTime;\\n Fee[] fees;\\n uint256 salt;\\n bytes extraParams;\\n }\\n\\n struct Input {\\n Order order;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n bytes extraSignature;\\n SignatureVersion signatureVersion;\\n uint256 blockNumber;\\n }\\n\\n function execute(Input calldata sell, Input calldata buy)\\n external\\n payable;\\n}\\n\",\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-v2/contracts/ExchangeV2.sol\\\";\\n\\nimport {RoyaltiesRegistry} from \\\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\\\";\\nimport {TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\\\";\\nimport {ERC20TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\\\";\\n\\ninterface IExchangeV2 {\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable;\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable;\\n}\",\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibLooksRare.sol\\\";\\n\\ninterface ILooksRare {\\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\\n\\n /**\\n * @notice This function allows a user to execute a taker bid (against a maker ask).\\n * @param takerBid Taker bid struct\\n * @param makerAsk Maker ask struct\\n * @param makerSignature Maker signature\\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\\n * @param affiliate Affiliate address\\n */\\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\\n}\\n\",\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibSeaPort.sol\\\";\\n\\ninterface ISeaPort {\\n function fulfillAdvancedOrder(\\n LibSeaPort.AdvancedOrder calldata advancedOrder,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n bytes32 fulfillerConduitKey,\\n address recipient\\n ) external payable returns (bool fulfilled);\\n\\n function fulfillAvailableAdvancedOrders(\\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\\n bytes32 fulfillerConduitKey,\\n address recipient,\\n uint256 maximumFulfilled\\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\\n\\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\\n external\\n payable\\n returns (bool fulfilled);\\n}\",\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface IWyvernExchange {\\n function atomicMatch_(\\n address[14] memory addrs,\\n uint[18] memory uints,\\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\\n bytes memory calldataBuy,\\n bytes memory calldataSell,\\n bytes memory replacementPatternBuy,\\n bytes memory replacementPatternSell,\\n bytes memory staticExtradataBuy,\\n bytes memory staticExtradataSell,\\n uint8[2] memory vs,\\n bytes32[5] memory rssMetadata)\\n external\\n payable;\\n\\n enum Side {\\n Buy,\\n Sell\\n }\\n\\n enum SaleKind {\\n FixedPrice,\\n DutchAuction\\n }\\n\\n function calculateFinalPrice(\\n Side side,\\n SaleKind saleKind,\\n uint256 basePrice,\\n uint256 extra,\\n uint256 listingTime,\\n uint256 expirationTime\\n ) external view returns (uint256);\\n}\",\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface Ix2y2 {\\n\\n struct OrderItem {\\n uint256 price;\\n bytes data;\\n }\\n\\n struct Pair721 {\\n address token;\\n uint256 tokenId;\\n }\\n\\n struct Pair1155 {\\n address token;\\n uint256 tokenId;\\n uint256 amount;\\n }\\n\\n struct Order {\\n uint256 salt;\\n address user;\\n uint256 network;\\n uint256 intent;\\n uint256 delegateType;\\n uint256 deadline;\\n address currency;\\n bytes dataMask;\\n OrderItem[] items;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n uint8 signVersion;\\n }\\n\\n struct Fee {\\n uint256 percentage;\\n address to;\\n }\\n\\n struct SettleDetail {\\n Op op;\\n uint256 orderIdx;\\n uint256 itemIdx;\\n uint256 price;\\n bytes32 itemHash;\\n address executionDelegate;\\n bytes dataReplacement;\\n uint256 bidIncentivePct;\\n uint256 aucMinIncrementPct;\\n uint256 aucIncDurationSecs;\\n Fee[] fees;\\n }\\n\\n struct SettleShared {\\n uint256 salt;\\n uint256 deadline;\\n uint256 amountToEth;\\n uint256 amountToWeth;\\n address user;\\n bool canFail;\\n }\\n\\n struct RunInput {\\n Order[] orders;\\n SettleDetail[] details;\\n SettleShared shared;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n }\\n\\n enum Op {\\n INVALID,\\n // off-chain\\n COMPLETE_SELL_OFFER,\\n COMPLETE_BUY_OFFER,\\n CANCEL_OFFER,\\n // auction\\n BID,\\n COMPLETE_AUCTION,\\n REFUND_AUCTION,\\n REFUND_AUCTION_STUCK_ITEM\\n }\\n\\n function run(RunInput memory input) external payable;\\n}\",\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nabstract contract IsPausable is Ownable {\\n bool public paused;\\n\\n event Paused(bool paused);\\n\\n function pause(bool _paused) external onlyOwner {\\n paused = _paused;\\n emit Paused(_paused);\\n }\\n\\n function requireNotPaused() internal view {\\n require (!paused, \\\"the contract is paused\\\");\\n }\\n\\n}\\n\",\"keccak256\":\"0xd0ea1d6838dd79b8cfe64e777e4f84456928f0e3621fbb6acd00492e738b2b61\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibLooksRare {\\n struct MakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address signer; // signer of the maker order\\n address collection; // collection address\\n uint256 price; // price (used as )\\n uint256 tokenId; // id of the token\\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\\n address currency; // currency (e.g., WETH)\\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\\n uint256 startTime; // startTime in timestamp\\n uint256 endTime; // endTime in timestamp\\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // additional parameters\\n uint8 v; // v: parameter (27 or 28)\\n bytes32 r; // r: parameter\\n bytes32 s; // s: parameter\\n }\\n\\n struct TakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address taker; // msg.sender\\n uint256 price; // final price for the purchase\\n uint256 tokenId;\\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // other params (e.g., tokenId)\\n }\\n\\n /**\\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\\n */\\n enum CollectionType {\\n ERC721,\\n ERC1155\\n }\\n\\n /**\\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\\n */\\n enum QuoteType {\\n Bid,\\n Ask\\n }\\n /**\\n * 1. Maker struct\\n */\\n\\n /**\\n * @notice Maker is the struct for a maker order.\\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\\n * @param globalNonce Global user order nonce for maker orders\\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\\n * @param strategyId Strategy id\\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\\n * @param collection Collection address\\n * @param currency Currency address (@dev address(0) = ETH)\\n * @param signer Signer address\\n * @param startTime Start timestamp\\n * @param endTime End timestamp\\n * @param price Minimum price for maker ask, maximum price for maker bid\\n * @param itemIds Array of itemIds\\n * @param amounts Array of amounts\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Maker {\\n QuoteType quoteType;\\n uint256 globalNonce;\\n uint256 subsetNonce;\\n uint256 orderNonce;\\n uint256 strategyId;\\n CollectionType collectionType;\\n address collection;\\n address currency;\\n address signer;\\n uint256 startTime;\\n uint256 endTime;\\n uint256 price;\\n uint256[] itemIds;\\n uint256[] amounts;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 2. Taker struct\\n */\\n\\n /**\\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Taker {\\n address recipient;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 3. Merkle tree struct\\n */\\n\\n enum MerkleTreeNodePosition {\\n Left,\\n Right\\n }\\n\\n /**\\n * @notice MerkleTreeNode is a MerkleTree's node.\\n * @param value It can be an order hash or a proof\\n * @param position The node's position in its branch.\\n * It can be left or right or none\\n * (before the tree is sorted).\\n */\\n struct MerkleTreeNode {\\n bytes32 value;\\n MerkleTreeNodePosition position;\\n }\\n\\n /**\\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\\n * @dev A Merkle tree can be computed with order hashes.\\n * It can contain order hashes from both maker bid and maker ask structs.\\n * @param root Merkle root\\n * @param proof Array containing the merkle proof\\n */\\n struct MerkleTree {\\n bytes32 root;\\n MerkleTreeNode[] proof;\\n }\\n}\\n\",\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibSeaPort {\\n /**\\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\\n * matching, a group of six functions may be called that only requires a\\n * subset of the usual order arguments. Note the use of a \\\"basicOrderType\\\"\\n * enum; this represents both the usual order type as well as the \\\"route\\\"\\n * of the basic order (a simple derivation function for the basic order\\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\\n */\\n struct BasicOrderParameters {\\n address considerationToken; // 0x24\\n uint256 considerationIdentifier; // 0x44\\n uint256 considerationAmount; // 0x64\\n address payable offerer; // 0x84\\n address zone; // 0xa4\\n address offerToken; // 0xc4\\n uint256 offerIdentifier; // 0xe4\\n uint256 offerAmount; // 0x104\\n BasicOrderType basicOrderType; // 0x124\\n uint256 startTime; // 0x144\\n uint256 endTime; // 0x164\\n bytes32 zoneHash; // 0x184\\n uint256 salt; // 0x1a4\\n bytes32 offererConduitKey; // 0x1c4\\n bytes32 fulfillerConduitKey; // 0x1e4\\n uint256 totalOriginalAdditionalRecipients; // 0x204\\n AdditionalRecipient[] additionalRecipients; // 0x224\\n bytes signature; // 0x244\\n }\\n /**\\n * @dev Basic orders can supply any number of additional recipients, with the\\n * implied assumption that they are supplied from the offered ETH (or other\\n * native token) or ERC20 token for the order.\\n */\\n struct AdditionalRecipient {\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum BasicOrderType {\\n // 0: no partial fills, anyone can execute\\n ETH_TO_ERC721_FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n ETH_TO_ERC721_PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC721_FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 4: no partial fills, anyone can execute\\n ETH_TO_ERC1155_FULL_OPEN,\\n\\n // 5: partial fills supported, anyone can execute\\n ETH_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 6: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 7: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 8: no partial fills, anyone can execute\\n ERC20_TO_ERC721_FULL_OPEN,\\n\\n // 9: partial fills supported, anyone can execute\\n ERC20_TO_ERC721_PARTIAL_OPEN,\\n\\n // 10: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC721_FULL_RESTRICTED,\\n\\n // 11: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 12: no partial fills, anyone can execute\\n ERC20_TO_ERC1155_FULL_OPEN,\\n\\n // 13: partial fills supported, anyone can execute\\n ERC20_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 14: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 15: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 16: no partial fills, anyone can execute\\n ERC721_TO_ERC20_FULL_OPEN,\\n\\n // 17: partial fills supported, anyone can execute\\n ERC721_TO_ERC20_PARTIAL_OPEN,\\n\\n // 18: no partial fills, only offerer or zone can execute\\n ERC721_TO_ERC20_FULL_RESTRICTED,\\n\\n // 19: partial fills supported, only offerer or zone can execute\\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\\n\\n // 20: no partial fills, anyone can execute\\n ERC1155_TO_ERC20_FULL_OPEN,\\n\\n // 21: partial fills supported, anyone can execute\\n ERC1155_TO_ERC20_PARTIAL_OPEN,\\n\\n // 22: no partial fills, only offerer or zone can execute\\n ERC1155_TO_ERC20_FULL_RESTRICTED,\\n\\n // 23: partial fills supported, only offerer or zone can execute\\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\\n }\\n\\n /**\\n * @dev The full set of order components, with the exception of the counter,\\n * must be supplied when fulfilling more sophisticated orders or groups of\\n * orders. The total number of original consideration items must also be\\n * supplied, as the caller may specify additional consideration items.\\n */\\n struct OrderParameters {\\n address offerer; // 0x00\\n address zone; // 0x20\\n OfferItem[] offer; // 0x40\\n ConsiderationItem[] consideration; // 0x60\\n OrderType orderType; // 0x80\\n uint256 startTime; // 0xa0\\n uint256 endTime; // 0xc0\\n bytes32 zoneHash; // 0xe0\\n uint256 salt; // 0x100\\n bytes32 conduitKey; // 0x120\\n uint256 totalOriginalConsiderationItems; // 0x140\\n // offer.length // 0x160\\n }\\n\\n /**\\n * @dev Orders require a signature in addition to the other order parameters.\\n */\\n struct Order {\\n OrderParameters parameters;\\n bytes signature;\\n }\\n\\n struct AdvancedOrder {\\n OrderParameters parameters;\\n uint120 numerator;\\n uint120 denominator;\\n bytes signature;\\n bytes extraData;\\n }\\n\\n struct OfferItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n }\\n\\n /**\\n * @dev A consideration item has the same five components as an offer item and\\n * an additional sixth component designating the required recipient of the\\n * item.\\n */\\n struct ConsiderationItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum OrderType {\\n // 0: no partial fills, anyone can execute\\n FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n PARTIAL_RESTRICTED\\n }\\n\\n // prettier-ignore\\n enum ItemType {\\n // 0: ETH on mainnet, MATIC on polygon, etc.\\n NATIVE,\\n\\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\\n ERC20,\\n\\n // 2: ERC721 items\\n ERC721,\\n\\n // 3: ERC1155 items\\n ERC1155,\\n\\n // 4: ERC721 items where a number of tokenIds are supported\\n ERC721_WITH_CRITERIA,\\n\\n // 5: ERC1155 items where a number of ids are supported\\n ERC1155_WITH_CRITERIA\\n }\\n\\n /**\\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\\n * offer and consideration items, then generates a single execution\\n * element. A given fulfillment can be applied to as many offer and\\n * consideration items as desired, but must contain at least one offer and\\n * at least one consideration that match. The fulfillment must also remain\\n * consistent on all key parameters across all offer items (same offerer,\\n * token, type, tokenId, and conduit preference) as well as across all\\n * consideration items (token, type, tokenId, and recipient).\\n */\\n struct Fulfillment {\\n FulfillmentComponent[] offerComponents;\\n FulfillmentComponent[] considerationComponents;\\n }\\n\\n /**\\n * @dev Each fulfillment component contains one index referencing a specific\\n * order and another referencing a specific offer or consideration item.\\n */\\n struct FulfillmentComponent {\\n uint256 orderIndex;\\n uint256 itemIndex;\\n }\\n\\n /**\\n * @dev An execution is triggered once all consideration items have been zeroed\\n * out. It sends the item in question from the offerer to the item's\\n * recipient, optionally sourcing approvals from either this contract\\n * directly or from the offerer's chosen conduit if one is specified. An\\n * execution is not provided as an argument, but rather is derived via\\n * orders, criteria resolvers, and fulfillments (where the total number of\\n * executions will be less than or equal to the total number of indicated\\n * fulfillments) and returned as part of `matchOrders`.\\n */\\n struct Execution {\\n ReceivedItem item;\\n address offerer;\\n bytes32 conduitKey;\\n }\\n\\n /**\\n * @dev A received item is translated from a utilized consideration item and has\\n * the same four components as a spent item, as well as an additional fifth\\n * component designating the required recipient of the item.\\n */\\n struct ReceivedItem {\\n ItemType itemType;\\n address token;\\n uint256 identifier;\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n struct CriteriaResolver {\\n uint256 orderIndex;\\n Side side;\\n uint256 index;\\n uint256 identifier;\\n bytes32[] criteriaProof;\\n }\\n\\n // prettier-ignore\\n enum Side {\\n // 0: Items that can be spent\\n OFFER,\\n\\n // 1: Items that must be received\\n CONSIDERATION\\n }\\n}\\n\",\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n function __RoyaltiesRegistry_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0xe0ea605e62d7b65dae93684b5102383b3b9fec0ade21efca0f2831d468738f50\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function _setTransferProxy(bytes4 assetType, address proxy) internal {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xea639616c66696b5ae9b278d3c6c9a85839bb5e815a4db046b4fd0225cd86625\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __ERC20TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x2fce5fa6025c24a87072eed4cec6ff8e9172ec7b72ca211286904847adf4a324\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x23a035508922fbe29dfb91796175b391943f830eead313134142a01bd776f848\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6102006040523480156200001257600080fd5b50604051620050b5380380620050b5833981016040819052620000359162000466565b60006200004162000219565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602062005095833981519152908290a3506200008c6301ffc9a760e01b6200021d565b6200009e630271189760e51b6200021d565b83516001600160601b0319606091821b811660809081526020870151831b821660a09081526040880151841b831660c090815284890151851b841660e090815292890151851b841661010090815291890151851b841661012090815290890151851b841661014090815292890151851b84166101605290880151841b831661018052870151831b82166101a052860151821b81166101c0529084901b166101e05260005b825181101562000203576001600160a01b03841615620001fa57836001600160a01b031663095ea7b38483815181106200017857fe5b60200260200101516000196040518363ffffffff1660e01b8152600401620001a29291906200055f565b602060405180830381600087803b158015620001bd57600080fd5b505af1158015620001d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f8919062000536565b505b60010162000142565b506200020f81620002a5565b505050506200059c565b3390565b6001600160e01b031980821614156200027d576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b620002af62000219565b6001600160a01b0316620002c2620003af565b6001600160a01b0316146200031e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620003655760405162461bcd60e51b81526004018080602001828103825260268152602001806200506f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216916000805160206200509583398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b80516001600160a01b0381168114620003d657600080fd5b919050565b600082601f830112620003ec578081fd5b815160206001600160401b038211156200040257fe5b8082026200041282820162000578565b8381528281019086840183880185018910156200042d578687fd5b8693505b858410156200045a576200044581620003be565b83526001939093019291840191840162000431565b50979650505050505050565b6000806000806101c085870312156200047d578384fd5b85601f8601126200048c578384fd5b6101606200049a8162000578565b90860190808789841115620004ad578788fd5b875b600b811015620004da57620004c482620003be565b84526020938401939190910190600101620004af565b50508096505050620004ec81620003be565b61018087015190945090506001600160401b038111156200050b578283fd5b6200051987828801620003db565b9250506200052b6101a08601620003be565b905092959194509250565b60006020828403121562000548578081fd5b8151801515811462000558578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b03811182821017156200059457fe5b604052919050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6149ac620006c360003980610517528061062f528061084c52806109bf52806123e3528061249a5280612529525080610d8c5280611dee52806122ab5250806104cf5280611d1c52806121db525080610c555280611b375280611bd15250806104f35280611a2d525080610c0d528061195b528061210b525080610544528061188952508061092b528061165d52806116f7525080610db05280611204528061129a5250806103cf5280610f525280611f6052508061094f5280611101528061203b525080610c31528061102f52506149ac6000f3fe60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200c805bd259b6e7fc099e514b3de13443a4ec4de2e14c673f7017d1283feec1a764736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200c805bd259b6e7fc099e514b3de13443a4ec4de2e14c673f7017d1283feec1a764736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "approveWETH(address[])": { + "params": { + "transferProxies": "- array of addresses to approve WETH for" + } + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "params": { + "allowFail": "- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch", + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- array of deatails about the purchases (more info in PurchaseDetails struct)" + } + }, + "onERC721Received(address,address,uint256,bytes)": { + "details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "params": { + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- deatails about the purchase (more info in PurchaseDetails struct)" + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "approveWETH(address[])": { + "notice": "approves weth for a list of the addresses" + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "notice": "executes an array of purchases" + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "notice": "executes a single purchase" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 5462, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + }, + { + "astId": 5578, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "_supportedInterfaces", + "offset": 0, + "slot": "1", + "type": "t_mapping(t_bytes4,t_bool)" + }, + { + "astId": 17504, + "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", + "label": "paused", + "offset": 0, + "slot": "2", + "type": "t_bool" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes4": { + "encoding": "inplace", + "label": "bytes4", + "numberOfBytes": "4" + }, + "t_mapping(t_bytes4,t_bool)": { + "encoding": "mapping", + "key": "t_bytes4", + "label": "mapping(bytes4 => bool)", + "numberOfBytes": "32", + "value": "t_bool" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/RoyaltiesRegistry.json b/projects/hardhat-deploy/deployments/sei_testnet/RoyaltiesRegistry.json new file mode 100644 index 000000000..68e9e22b8 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/RoyaltiesRegistry.json @@ -0,0 +1,620 @@ +{ + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForContract", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForToken", + "type": "event" + }, + { + "inputs": [], + "name": "__RoyaltiesRegistry_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__RoyaltiesRegistry_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "clearRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltiesType", + "type": "uint256" + } + ], + "name": "forceSetRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getProvider", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoyalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getRoyaltiesType", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesByToken", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "royaltiesByTokenAndTokenId", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesProviders", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "provider", + "type": "address" + } + ], + "name": "setProviderByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "setRoyaltiesByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x6f22250a283e5e12692e9367a3a3496ec50b71ea3d131337855d9aee5e91d4b7", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "811009", + "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", + "blockHash": "0x8c99864f2f5068389940806223d9a8f215a39430555f13b49e208f8cb0c6880f", + "transactionHash": "0x6f22250a283e5e12692e9367a3a3496ec50b71ea3d131337855d9aee5e91d4b7", + "logs": [ + { + "transactionIndex": 6, + "blockNumber": 18030023, + "transactionHash": "0x6f22250a283e5e12692e9367a3a3496ec50b71ea3d131337855d9aee5e91d4b7", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x8c99864f2f5068389940806223d9a8f215a39430555f13b49e208f8cb0c6880f" + }, + { + "transactionIndex": 6, + "blockNumber": 18030023, + "transactionHash": "0x6f22250a283e5e12692e9367a3a3496ec50b71ea3d131337855d9aee5e91d4b7", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x8c99864f2f5068389940806223d9a8f215a39430555f13b49e208f8cb0c6880f" + }, + { + "transactionIndex": 6, + "blockNumber": 18030023, + "transactionHash": "0x6f22250a283e5e12692e9367a3a3496ec50b71ea3d131337855d9aee5e91d4b7", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x8c99864f2f5068389940806223d9a8f215a39430555f13b49e208f8cb0c6880f" + }, + { + "transactionIndex": 6, + "blockNumber": 18030023, + "transactionHash": "0x6f22250a283e5e12692e9367a3a3496ec50b71ea3d131337855d9aee5e91d4b7", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 3, + "blockHash": "0x8c99864f2f5068389940806223d9a8f215a39430555f13b49e208f8cb0c6880f" + } + ], + "blockNumber": 18030023, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "__RoyaltiesRegistry_init_proxy", + "args": [ + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ] + }, + "implementation": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/RoyaltiesRegistry_Implementation.json b/projects/hardhat-deploy/deployments/sei_testnet/RoyaltiesRegistry_Implementation.json new file mode 100644 index 000000000..b0e981122 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/RoyaltiesRegistry_Implementation.json @@ -0,0 +1,639 @@ +{ + "address": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForContract", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "indexed": false, + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "RoyaltiesSetForToken", + "type": "event" + }, + { + "inputs": [], + "name": "__RoyaltiesRegistry_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__RoyaltiesRegistry_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "clearRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "royaltiesType", + "type": "uint256" + } + ], + "name": "forceSetRoyaltiesType", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getProvider", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "getRoyalties", + "outputs": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getRoyaltiesType", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesByToken", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "royaltiesByTokenAndTokenId", + "outputs": [ + { + "internalType": "bool", + "name": "initialized", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "royaltiesProviders", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "provider", + "type": "address" + } + ], + "name": "setProviderByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + } + ], + "name": "setRoyaltiesByToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x607c1cedf66996ab26bdff951dd65f7fb863547dde71a77e28128b6ca82ac3b1", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "1663864", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x2ecb0ace413e571c613e38a38e462a4ad304262cfe194d0bc86837fdd367bb32", + "transactionHash": "0x607c1cedf66996ab26bdff951dd65f7fb863547dde71a77e28128b6ca82ac3b1", + "logs": [], + "blockNumber": 18030018, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForToken\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__RoyaltiesRegistry_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__RoyaltiesRegistry_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"clearRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltiesType\",\"type\":\"uint256\"}],\"name\":\"forceSetRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getRoyalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getRoyaltiesType\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesByToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"royaltiesByTokenAndTokenId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesProviders\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"setProviderByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"setRoyaltiesByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RoyaltiesSetForContract(address,(address,uint96)[])\":{\"details\":\"emitted when royalties set for token in \"},\"RoyaltiesSetForToken(address,uint256,(address,uint96)[])\":{\"details\":\"deprecated\"}},\"kind\":\"dev\",\"methods\":{\"clearRoyaltiesType(address)\":{\"details\":\"clears royalties type for token contract\"},\"forceSetRoyaltiesType(address,uint256)\":{\"details\":\"clears and sets new royalties type for token contract\"},\"getProvider(address)\":{\"details\":\"returns provider address for token contract from royaltiesProviders mapping\"},\"getRoyalties(address,uint256)\":{\"details\":\"returns royalties for token contract and token id\"},\"getRoyaltiesType(address)\":{\"details\":\"returns royalties type for token contract\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setProviderByToken(address,address)\":{\"details\":\"sets external provider for token contract, and royalties type = 4\"},\"setRoyaltiesByToken(address,(address,uint96)[])\":{\"details\":\"sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"royaltiesByToken\":{\"details\":\"stores royalties for token contract, set in setRoyaltiesByToken() method\"},\"royaltiesByTokenAndTokenId\":{\"details\":\"deprecated\"},\"royaltiesProviders\":{\"details\":\"stores external provider and royalties type for token contract\"},\"royaltiesTypesAmount\":{\"details\":\"total amount or supported royalties types\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":\"RoyaltiesRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n function __RoyaltiesRegistry_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0xe0ea605e62d7b65dae93684b5102383b3b9fec0ade21efca0f2831d468738f50\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50611c43806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063d836f01311610066578063d836f013146101e9578063f2fde38b146101fc578063f39cc7061461020f578063fc73be0014610222576100f5565b80638da5cb5b1461019b5780639ca7dc7a146101a3578063acf14efb146101c3578063d1da3cce146101d6576100f5565b806336eff6c2116100d357806336eff6c21461014057806355f21eb714610153578063715018a61461017357806382b19f121461017b576100f5565b806305df952f146100fa57806317c44b171461012357806327fff8ab14610138575b600080fd5b61010d610108366004611517565b610235565b60405161011a919061198c565b60405180910390f35b610136610131366004611517565b61024a565b005b6101366102fe565b61013661014e366004611677565b6103a8565b610166610161366004611517565b6103c4565b60405161011a91906118fe565b6101366103e3565b61018e610189366004611517565b6104a1565b60405161011a9190611b2d565b6101666104c9565b6101b66101b1366004611677565b6104d8565b60405161011a919061192b565b6101366101d1366004611587565b610676565b61010d6101e43660046118e6565b6108b2565b6101366101f736600461154f565b6108c7565b61013661020a366004611517565b6108dc565b61018e61021d366004611517565b6109f1565b610136610230366004611517565b610a03565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102635750610263610a34565b80610271575060005460ff16155b6102ac5760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff161580156102d7576000805460ff1961ff0019909116610100171660011790555b6102df610a45565b6102e8826108dc565b80156102fa576000805461ff00191690555b5050565b600054610100900460ff16806103175750610317610a34565b80610325575060005460ff16155b6103605760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff1615801561038b576000805460ff1961ff0019909116610100171660011790555b610393610a45565b80156103a5576000805461ff00191690555b50565b6103b182610b3e565b6102fa82826103bf856103c4565b610c14565b6001600160a01b0381166000908152606760205260409020545b919050565b6103eb610c6b565b6001600160a01b03166103fc6104c9565b6001600160a01b031614610457576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546104c390610c6f565b92915050565b6033546001600160a01b031690565b6001600160a01b03821660009081526067602052604081205460609181906104ff82610c6f565b90508061051d576105108683610cad565b905061051d868284610c14565b80600114156105b9576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156105ab57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161055c565b5050505093505050506104c3565b80600214156105d6576105cc8686610ebb565b93505050506104c3565b80600314156105e9576105cc8686610f7b565b80600414156105fd576105cc86868461122f565b8060051415610610576105cc86866112f6565b806006141561065557604080516000808252602082019092529061064a565b6106376114ce565b81526020019060019003908161062f5790505b5093505050506104c3565b60405162461bcd60e51b815260040161066d906119ac565b60405180910390fd5b61067f82610b3e565b6001600160a01b03821660009081526067602052604081208190556106a8908390600190610c14565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106d660018301826114e5565b505060005b82518110156108305760006001600160a01b03168382815181106106fb57fe5b6020026020010151600001516001600160a01b0316141561072e5760405162461bcd60e51b815260040161066d906119e3565b82818151811061073a57fe5b6020026020010151602001516001600160601b03166000141561076f5760405162461bcd60e51b815260040161066d90611ab0565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106107a357fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061080c57fe5b6020026020010151602001516001600160601b0316820191508060010190506106db565b5061271081106108525760405162461bcd60e51b815260040161066d90611a2f565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906108a590859061192b565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b6108d082610b3e565b6102fa82600483610c14565b6108e4610c6b565b6001600160a01b03166108f56104c9565b6001600160a01b031614610950576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166109955760405162461bcd60e51b8152600401808060200182810382526026815260200180611bba6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b610a0c81610b3e565b610a15816103c4565b6001600160a01b03918216600090815260676020526040902091169055565b6000610a3f306113c0565b15905090565b600054610100900460ff1680610a5e5750610a5e610a34565b80610a6c575060005460ff16155b610aa75760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad2576000805460ff1961ff0019909116610100171660011790555b6000610adc610c6b565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156103a5576000805461ff001916905550565b610b46610c6b565b6001600160a01b0316610b576104c9565b6001600160a01b031614158015610bf75750610b71610c6b565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb357600080fd5b505afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190611533565b6001600160a01b031614155b156103a55760405162461bcd60e51b815260040161066d90611a79565b600082118015610c25575060068211155b610c415760405162461bcd60e51b815260040161066d90611b00565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610ca457806101000360020a8381610c8c57fe5b0460011415610c9c5790506103de565b600101610c74565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610ce39063656cb66560e11b90600401611997565b60206040518083038186803b158015610cfb57600080fd5b505afa925050508015610d2b575060408051601f3d908101601f19168201909252610d28918101906118c6565b60015b610d3457610d46565b8015610d445760029150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d7990632dde656160e21b90600401611997565b60206040518083038186803b158015610d9157600080fd5b505afa925050508015610dc1575060408051601f3d908101601f19168201909252610dbe918101906118c6565b60015b610dca57610ddc565b8015610dda5760039150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610e0f9063152a902d60e11b90600401611997565b60206040518083038186803b158015610e2757600080fd5b505afa925050508015610e57575060408051601f3d908101601f19168201909252610e54918101906118c6565b60015b610e6057610e72565b8015610e705760059150506104c3565b505b6001600160a01b03821615610e89575060046104c3565b6001600160a01b03831660009081526066602052604090205460ff1615610eb2575060016104c3565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610eea908590600401611b2d565b60006040518083038186803b158015610f0257600080fd5b505afa925050508015610f3757506040513d6000823e601f3d908101601f19168201604052610f349190810190611768565b60015b610f74576040805160008082526020820190925290610f6c565b610f596114ce565b815260200190600190039081610f515790505b5090506104c3565b90506104c3565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610fae908790600401611b2d565b60006040518083038186803b158015610fc657600080fd5b505afa925050508015610ffb57506040513d6000823e601f3d908101601f19168201604052610ff891908101906116cf565b60015b61103a576040805160008082526020820190925290611030565b61101d6114ce565b8152602001906001900390816110155790505b50925050506104c3565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f9061106b908890600401611b2d565b60006040518083038186803b15801561108357600080fd5b505afa9250505080156110b857506040513d6000823e601f3d908101601f191682016040526110b59190810190611842565b60015b6110f757604080516000808252602082019092529061064a565b6110da6114ce565b8152602001906001900390816110d25790505093505050506104c3565b9050815181511461113d57604080516000808252602082019092529061064a565b6111206114ce565b8152602001906001900390816111185790505093505050506104c3565b6000815167ffffffffffffffff8111801561115757600080fd5b5060405190808252806020026020018201604052801561119157816020015b61117e6114ce565b8152602001906001900390816111765790505b50905060005b8251811015611224578281815181106111ac57fe5b60200260200101518282815181106111c057fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250508381815181106111f057fe5b602002602001015182828151811061120457fe5b60209081029190910101516001600160a01b039091169052600101611197565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906112609087908790600401611912565b600060405180830381600087803b15801561127a57600080fd5b505af19250505080156112af57506040513d6000823e601f3d908101601f191682016040526112ac9190810190611768565b60015b6112ec5760408051600080825260208201909252906112e4565b6112d16114ce565b8152602001906001900390816112c95790505b5090506112ef565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061132a908590620f424090600401611b36565b604080518083038186803b15801561134157600080fd5b505afa925050508015611371575060408051601f3d908101601f1916820190925261136e918101906116a2565b60015b6113ad576040805160008082526020820190925290610f6c565b6113936114ce565b81526020019060019003908161138b5790505090506104c3565b6113b782826113c6565b925050506104c3565b3b151590565b606080826113d55790506104c3565b6000620f424061271085020490506127108110611439576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b6114566114ce565b81526020019060019003908161144e579050509150848260008151811061147957fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106114ab57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906103a591905b8082111561151357600081556001016114ff565b5090565b600060208284031215611528578081fd5b81356112ef81611b8f565b600060208284031215611544578081fd5b81516112ef81611b8f565b60008060408385031215611561578081fd5b823561156c81611b8f565b9150602083013561157c81611b8f565b809150509250929050565b600080604080848603121561159a578283fd5b83356115a581611b8f565b925060208481013567ffffffffffffffff808211156115c2578485fd5b818701915087601f8301126115d5578485fd5b81356115e86115e382611b71565b611b4d565b81815284810190848601878402860187018c1015611604578889fd5b8895505b838610156116655787818d03121561161e578889fd5b8751888101818110878211171561163157fe5b8952813561163e81611b8f565b81528188013561164d81611ba4565b81890152835260019590950194918601918701611608565b50809750505050505050509250929050565b60008060408385031215611689578182fd5b823561169481611b8f565b946020939093013593505050565b600080604083850312156116b4578182fd5b82516116bf81611b8f565b6020939093015192949293505050565b600060208083850312156116e1578182fd5b825167ffffffffffffffff8111156116f7578283fd5b8301601f81018513611707578283fd5b80516117156115e382611b71565b8181528381019083850185840285018601891015611731578687fd5b8694505b8385101561175c57805161174881611b8f565b835260019490940193918501918501611735565b50979650505050505050565b6000602080838503121561177a578182fd5b825167ffffffffffffffff80821115611791578384fd5b818501915085601f8301126117a4578384fd5b81516117b26115e382611b71565b818152848101908486016040808502870188018b10156117d0578889fd5b8896505b848710156118335780828c0312156117ea578889fd5b805181810181811088821117156117fd57fe5b8252825161180a81611b8f565b81528289015161181981611ba4565b818a015284526001969096019592870192908101906117d4565b50909998505050505050505050565b60006020808385031215611854578182fd5b825167ffffffffffffffff81111561186a578283fd5b8301601f8101851361187a578283fd5b80516118886115e382611b71565b81815283810190838501858402850186018910156118a4578687fd5b8694505b8385101561175c5780518352600194909401939185019185016118a8565b6000602082840312156118d7578081fd5b815180151581146112ef578182fd5b6000602082840312156118f7578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b8281101561197f57815180516001600160a01b031685528601516001600160601b0316868501529284019290850190600101611948565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611b6957fe5b604052919050565b600067ffffffffffffffff821115611b8557fe5b5060209081020190565b6001600160a01b03811681146103a557600080fd5b6001600160601b03811681146103a557600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a26469706673582212206011445674d35ef28e96f7be2c7e18367ccbf39ba213446ab0ff8093543dc49764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063d836f01311610066578063d836f013146101e9578063f2fde38b146101fc578063f39cc7061461020f578063fc73be0014610222576100f5565b80638da5cb5b1461019b5780639ca7dc7a146101a3578063acf14efb146101c3578063d1da3cce146101d6576100f5565b806336eff6c2116100d357806336eff6c21461014057806355f21eb714610153578063715018a61461017357806382b19f121461017b576100f5565b806305df952f146100fa57806317c44b171461012357806327fff8ab14610138575b600080fd5b61010d610108366004611517565b610235565b60405161011a919061198c565b60405180910390f35b610136610131366004611517565b61024a565b005b6101366102fe565b61013661014e366004611677565b6103a8565b610166610161366004611517565b6103c4565b60405161011a91906118fe565b6101366103e3565b61018e610189366004611517565b6104a1565b60405161011a9190611b2d565b6101666104c9565b6101b66101b1366004611677565b6104d8565b60405161011a919061192b565b6101366101d1366004611587565b610676565b61010d6101e43660046118e6565b6108b2565b6101366101f736600461154f565b6108c7565b61013661020a366004611517565b6108dc565b61018e61021d366004611517565b6109f1565b610136610230366004611517565b610a03565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102635750610263610a34565b80610271575060005460ff16155b6102ac5760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff161580156102d7576000805460ff1961ff0019909116610100171660011790555b6102df610a45565b6102e8826108dc565b80156102fa576000805461ff00191690555b5050565b600054610100900460ff16806103175750610317610a34565b80610325575060005460ff16155b6103605760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff1615801561038b576000805460ff1961ff0019909116610100171660011790555b610393610a45565b80156103a5576000805461ff00191690555b50565b6103b182610b3e565b6102fa82826103bf856103c4565b610c14565b6001600160a01b0381166000908152606760205260409020545b919050565b6103eb610c6b565b6001600160a01b03166103fc6104c9565b6001600160a01b031614610457576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546104c390610c6f565b92915050565b6033546001600160a01b031690565b6001600160a01b03821660009081526067602052604081205460609181906104ff82610c6f565b90508061051d576105108683610cad565b905061051d868284610c14565b80600114156105b9576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156105ab57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161055c565b5050505093505050506104c3565b80600214156105d6576105cc8686610ebb565b93505050506104c3565b80600314156105e9576105cc8686610f7b565b80600414156105fd576105cc86868461122f565b8060051415610610576105cc86866112f6565b806006141561065557604080516000808252602082019092529061064a565b6106376114ce565b81526020019060019003908161062f5790505b5093505050506104c3565b60405162461bcd60e51b815260040161066d906119ac565b60405180910390fd5b61067f82610b3e565b6001600160a01b03821660009081526067602052604081208190556106a8908390600190610c14565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106d660018301826114e5565b505060005b82518110156108305760006001600160a01b03168382815181106106fb57fe5b6020026020010151600001516001600160a01b0316141561072e5760405162461bcd60e51b815260040161066d906119e3565b82818151811061073a57fe5b6020026020010151602001516001600160601b03166000141561076f5760405162461bcd60e51b815260040161066d90611ab0565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106107a357fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061080c57fe5b6020026020010151602001516001600160601b0316820191508060010190506106db565b5061271081106108525760405162461bcd60e51b815260040161066d90611a2f565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906108a590859061192b565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b6108d082610b3e565b6102fa82600483610c14565b6108e4610c6b565b6001600160a01b03166108f56104c9565b6001600160a01b031614610950576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166109955760405162461bcd60e51b8152600401808060200182810382526026815260200180611bba6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b610a0c81610b3e565b610a15816103c4565b6001600160a01b03918216600090815260676020526040902091169055565b6000610a3f306113c0565b15905090565b600054610100900460ff1680610a5e5750610a5e610a34565b80610a6c575060005460ff16155b610aa75760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad2576000805460ff1961ff0019909116610100171660011790555b6000610adc610c6b565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156103a5576000805461ff001916905550565b610b46610c6b565b6001600160a01b0316610b576104c9565b6001600160a01b031614158015610bf75750610b71610c6b565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb357600080fd5b505afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190611533565b6001600160a01b031614155b156103a55760405162461bcd60e51b815260040161066d90611a79565b600082118015610c25575060068211155b610c415760405162461bcd60e51b815260040161066d90611b00565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610ca457806101000360020a8381610c8c57fe5b0460011415610c9c5790506103de565b600101610c74565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610ce39063656cb66560e11b90600401611997565b60206040518083038186803b158015610cfb57600080fd5b505afa925050508015610d2b575060408051601f3d908101601f19168201909252610d28918101906118c6565b60015b610d3457610d46565b8015610d445760029150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d7990632dde656160e21b90600401611997565b60206040518083038186803b158015610d9157600080fd5b505afa925050508015610dc1575060408051601f3d908101601f19168201909252610dbe918101906118c6565b60015b610dca57610ddc565b8015610dda5760039150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610e0f9063152a902d60e11b90600401611997565b60206040518083038186803b158015610e2757600080fd5b505afa925050508015610e57575060408051601f3d908101601f19168201909252610e54918101906118c6565b60015b610e6057610e72565b8015610e705760059150506104c3565b505b6001600160a01b03821615610e89575060046104c3565b6001600160a01b03831660009081526066602052604090205460ff1615610eb2575060016104c3565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610eea908590600401611b2d565b60006040518083038186803b158015610f0257600080fd5b505afa925050508015610f3757506040513d6000823e601f3d908101601f19168201604052610f349190810190611768565b60015b610f74576040805160008082526020820190925290610f6c565b610f596114ce565b815260200190600190039081610f515790505b5090506104c3565b90506104c3565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610fae908790600401611b2d565b60006040518083038186803b158015610fc657600080fd5b505afa925050508015610ffb57506040513d6000823e601f3d908101601f19168201604052610ff891908101906116cf565b60015b61103a576040805160008082526020820190925290611030565b61101d6114ce565b8152602001906001900390816110155790505b50925050506104c3565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f9061106b908890600401611b2d565b60006040518083038186803b15801561108357600080fd5b505afa9250505080156110b857506040513d6000823e601f3d908101601f191682016040526110b59190810190611842565b60015b6110f757604080516000808252602082019092529061064a565b6110da6114ce565b8152602001906001900390816110d25790505093505050506104c3565b9050815181511461113d57604080516000808252602082019092529061064a565b6111206114ce565b8152602001906001900390816111185790505093505050506104c3565b6000815167ffffffffffffffff8111801561115757600080fd5b5060405190808252806020026020018201604052801561119157816020015b61117e6114ce565b8152602001906001900390816111765790505b50905060005b8251811015611224578281815181106111ac57fe5b60200260200101518282815181106111c057fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250508381815181106111f057fe5b602002602001015182828151811061120457fe5b60209081029190910101516001600160a01b039091169052600101611197565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906112609087908790600401611912565b600060405180830381600087803b15801561127a57600080fd5b505af19250505080156112af57506040513d6000823e601f3d908101601f191682016040526112ac9190810190611768565b60015b6112ec5760408051600080825260208201909252906112e4565b6112d16114ce565b8152602001906001900390816112c95790505b5090506112ef565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061132a908590620f424090600401611b36565b604080518083038186803b15801561134157600080fd5b505afa925050508015611371575060408051601f3d908101601f1916820190925261136e918101906116a2565b60015b6113ad576040805160008082526020820190925290610f6c565b6113936114ce565b81526020019060019003908161138b5790505090506104c3565b6113b782826113c6565b925050506104c3565b3b151590565b606080826113d55790506104c3565b6000620f424061271085020490506127108110611439576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b6114566114ce565b81526020019060019003908161144e579050509150848260008151811061147957fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106114ab57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906103a591905b8082111561151357600081556001016114ff565b5090565b600060208284031215611528578081fd5b81356112ef81611b8f565b600060208284031215611544578081fd5b81516112ef81611b8f565b60008060408385031215611561578081fd5b823561156c81611b8f565b9150602083013561157c81611b8f565b809150509250929050565b600080604080848603121561159a578283fd5b83356115a581611b8f565b925060208481013567ffffffffffffffff808211156115c2578485fd5b818701915087601f8301126115d5578485fd5b81356115e86115e382611b71565b611b4d565b81815284810190848601878402860187018c1015611604578889fd5b8895505b838610156116655787818d03121561161e578889fd5b8751888101818110878211171561163157fe5b8952813561163e81611b8f565b81528188013561164d81611ba4565b81890152835260019590950194918601918701611608565b50809750505050505050509250929050565b60008060408385031215611689578182fd5b823561169481611b8f565b946020939093013593505050565b600080604083850312156116b4578182fd5b82516116bf81611b8f565b6020939093015192949293505050565b600060208083850312156116e1578182fd5b825167ffffffffffffffff8111156116f7578283fd5b8301601f81018513611707578283fd5b80516117156115e382611b71565b8181528381019083850185840285018601891015611731578687fd5b8694505b8385101561175c57805161174881611b8f565b835260019490940193918501918501611735565b50979650505050505050565b6000602080838503121561177a578182fd5b825167ffffffffffffffff80821115611791578384fd5b818501915085601f8301126117a4578384fd5b81516117b26115e382611b71565b818152848101908486016040808502870188018b10156117d0578889fd5b8896505b848710156118335780828c0312156117ea578889fd5b805181810181811088821117156117fd57fe5b8252825161180a81611b8f565b81528289015161181981611ba4565b818a015284526001969096019592870192908101906117d4565b50909998505050505050505050565b60006020808385031215611854578182fd5b825167ffffffffffffffff81111561186a578283fd5b8301601f8101851361187a578283fd5b80516118886115e382611b71565b81815283810190838501858402850186018910156118a4578687fd5b8694505b8385101561175c5780518352600194909401939185019185016118a8565b6000602082840312156118d7578081fd5b815180151581146112ef578182fd5b6000602082840312156118f7578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b8281101561197f57815180516001600160a01b031685528601516001600160601b0316868501529284019290850190600101611948565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611b6957fe5b604052919050565b600067ffffffffffffffff821115611b8557fe5b5060209081020190565b6001600160a01b03811681146103a557600080fd5b6001600160601b03811681146103a557600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a26469706673582212206011445674d35ef28e96f7be2c7e18367ccbf39ba213446ab0ff8093543dc49764736f6c63430007060033", + "devdoc": { + "events": { + "RoyaltiesSetForContract(address,(address,uint96)[])": { + "details": "emitted when royalties set for token in " + }, + "RoyaltiesSetForToken(address,uint256,(address,uint96)[])": { + "details": "deprecated" + } + }, + "kind": "dev", + "methods": { + "clearRoyaltiesType(address)": { + "details": "clears royalties type for token contract" + }, + "forceSetRoyaltiesType(address,uint256)": { + "details": "clears and sets new royalties type for token contract" + }, + "getProvider(address)": { + "details": "returns provider address for token contract from royaltiesProviders mapping" + }, + "getRoyalties(address,uint256)": { + "details": "returns royalties for token contract and token id" + }, + "getRoyaltiesType(address)": { + "details": "returns royalties type for token contract" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "setProviderByToken(address,address)": { + "details": "sets external provider for token contract, and royalties type = 4" + }, + "setRoyaltiesByToken(address,(address,uint96)[])": { + "details": "sets royalties for token contract in royaltiesByToken mapping and royalties type = 1" + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "stateVariables": { + "royaltiesByToken": { + "details": "stores royalties for token contract, set in setRoyaltiesByToken() method" + }, + "royaltiesByTokenAndTokenId": { + "details": "deprecated" + }, + "royaltiesProviders": { + "details": "stores external provider and royalties type for token contract" + }, + "royaltiesTypesAmount": { + "details": "total amount or supported royalties types" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 20000, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesByTokenAndTokenId", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_bytes32,t_struct(RoyaltiesSet)19995_storage)" + }, + { + "astId": 20005, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesByToken", + "offset": 0, + "slot": "102", + "type": "t_mapping(t_address,t_struct(RoyaltiesSet)19995_storage)" + }, + { + "astId": 20010, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royaltiesProviders", + "offset": 0, + "slot": "103", + "type": "t_mapping(t_address,t_uint256)" + }, + { + "astId": 20805, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "__gap", + "offset": 0, + "slot": "104", + "type": "t_array(t_uint256)46_storage" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_address_payable": { + "encoding": "inplace", + "label": "address payable", + "numberOfBytes": "20" + }, + "t_array(t_struct(Part)19269_storage)dyn_storage": { + "base": "t_struct(Part)19269_storage", + "encoding": "dynamic_array", + "label": "struct LibPart.Part[]", + "numberOfBytes": "32" + }, + "t_array(t_uint256)46_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[46]", + "numberOfBytes": "1472" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_bytes32": { + "encoding": "inplace", + "label": "bytes32", + "numberOfBytes": "32" + }, + "t_mapping(t_address,t_struct(RoyaltiesSet)19995_storage)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => struct RoyaltiesRegistry.RoyaltiesSet)", + "numberOfBytes": "32", + "value": "t_struct(RoyaltiesSet)19995_storage" + }, + "t_mapping(t_address,t_uint256)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => uint256)", + "numberOfBytes": "32", + "value": "t_uint256" + }, + "t_mapping(t_bytes32,t_struct(RoyaltiesSet)19995_storage)": { + "encoding": "mapping", + "key": "t_bytes32", + "label": "mapping(bytes32 => struct RoyaltiesRegistry.RoyaltiesSet)", + "numberOfBytes": "32", + "value": "t_struct(RoyaltiesSet)19995_storage" + }, + "t_struct(Part)19269_storage": { + "encoding": "inplace", + "label": "struct LibPart.Part", + "members": [ + { + "astId": 19266, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "account", + "offset": 0, + "slot": "0", + "type": "t_address_payable" + }, + { + "astId": 19268, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "value", + "offset": 20, + "slot": "0", + "type": "t_uint96" + } + ], + "numberOfBytes": "32" + }, + "t_struct(RoyaltiesSet)19995_storage": { + "encoding": "inplace", + "label": "struct RoyaltiesRegistry.RoyaltiesSet", + "members": [ + { + "astId": 19991, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 19994, + "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", + "label": "royalties", + "offset": 0, + "slot": "1", + "type": "t_array(t_struct(Part)19269_storage)dyn_storage" + } + ], + "numberOfBytes": "64" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint96": { + "encoding": "inplace", + "label": "uint96", + "numberOfBytes": "12" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/RoyaltiesRegistry_Proxy.json b/projects/hardhat-deploy/deployments/sei_testnet/RoyaltiesRegistry_Proxy.json new file mode 100644 index 000000000..045ac05c9 --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/RoyaltiesRegistry_Proxy.json @@ -0,0 +1,263 @@ +{ + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x6f22250a283e5e12692e9367a3a3496ec50b71ea3d131337855d9aee5e91d4b7", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "811009", + "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", + "blockHash": "0x8c99864f2f5068389940806223d9a8f215a39430555f13b49e208f8cb0c6880f", + "transactionHash": "0x6f22250a283e5e12692e9367a3a3496ec50b71ea3d131337855d9aee5e91d4b7", + "logs": [ + { + "transactionIndex": 6, + "blockNumber": 18030023, + "transactionHash": "0x6f22250a283e5e12692e9367a3a3496ec50b71ea3d131337855d9aee5e91d4b7", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x8c99864f2f5068389940806223d9a8f215a39430555f13b49e208f8cb0c6880f" + }, + { + "transactionIndex": 6, + "blockNumber": 18030023, + "transactionHash": "0x6f22250a283e5e12692e9367a3a3496ec50b71ea3d131337855d9aee5e91d4b7", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x8c99864f2f5068389940806223d9a8f215a39430555f13b49e208f8cb0c6880f" + }, + { + "transactionIndex": 6, + "blockNumber": 18030023, + "transactionHash": "0x6f22250a283e5e12692e9367a3a3496ec50b71ea3d131337855d9aee5e91d4b7", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x8c99864f2f5068389940806223d9a8f215a39430555f13b49e208f8cb0c6880f" + }, + { + "transactionIndex": 6, + "blockNumber": 18030023, + "transactionHash": "0x6f22250a283e5e12692e9367a3a3496ec50b71ea3d131337855d9aee5e91d4b7", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 3, + "blockHash": "0x8c99864f2f5068389940806223d9a8f215a39430555f13b49e208f8cb0c6880f" + } + ], + "blockNumber": 18030023, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [ + "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sei_testnet/TransferProxy.json b/projects/hardhat-deploy/deployments/sei_testnet/TransferProxy.json new file mode 100644 index 000000000..fa3e0765e --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/TransferProxy.json @@ -0,0 +1,319 @@ +{ + "address": "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [], + "name": "__OperatorRole_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__TransferProxy_init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__TransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "addOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC1155Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "erc1155safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC721Upgradeable", + "name": "token", + "type": "address" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "name": "erc721safeTransferFrom", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x88c388c4e143fd168a345dce56575ef6bd0946c3392df5e1e64acf63e416a2b9", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 0, + "gasUsed": "777214", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xe1f2986250f8471839febef0e6efe14e3807f128b2452028df0d9d694c65d871", + "transactionHash": "0x88c388c4e143fd168a345dce56575ef6bd0946c3392df5e1e64acf63e416a2b9", + "logs": [], + "blockNumber": 18030034, + "cumulativeGasUsed": "0", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__TransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"erc1155safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC721Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"erc721safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":\"TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x23a035508922fbe29dfb91796175b391943f830eead313134142a01bd776f848\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610c7b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80639870d7fe116100715780639870d7fe146101125780639c1c2ee914610138578063ac8a584a146101d5578063e814f46d146101fb578063f2fde38b14610221578063f709b90614610247576100a9565b80632ff26a0a146100ae578063495edf86146100b8578063715018a6146100c057806374dc542b146100c85780638da5cb5b146100ee575b600080fd5b6100b6610283565b005b6100b6610335565b6100b66103ca565b6100b6600480360360208110156100de57600080fd5b50356001600160a01b0316610476565b6100f661052a565b604080516001600160a01b039092168252519081900360200190f35b6100b66004803603602081101561012857600080fd5b50356001600160a01b0316610539565b6100b6600480360360c081101561014e57600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561019657600080fd5b8201836020820111156101a857600080fd5b803590602001918460018302840111640100000000831117156101ca57600080fd5b5090925090506105bf565b6100b6600480360360208110156101eb57600080fd5b50356001600160a01b03166106e8565b6100b66004803603602081101561021157600080fd5b50356001600160a01b031661076b565b6100b66004803603602081101561023757600080fd5b50356001600160a01b0316610808565b6100b66004803603608081101561025d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561090b565b600054610100900460ff168061029c575061029c6109f5565b806102aa575060005460ff16155b6102e55760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610310576000805460ff1961ff0019909116610100171660011790555b610318610a06565b610320610aa6565b8015610332576000805461ff00191690555b50565b600054610100900460ff168061034e575061034e6109f5565b8061035c575060005460ff16155b6103975760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156103c2576000805460ff1961ff0019909116610100171660011790555b610320610283565b6103d2610b9f565b6001600160a01b03166103e361052a565b6001600160a01b03161461042c576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff168061048f575061048f6109f5565b8061049d575060005460ff16155b6104d85760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610503576000805460ff1961ff0019909116610100171660011790555b61050b610283565b61051482610808565b8015610526576000805461ff00191690555b5050565b6033546001600160a01b031690565b610541610b9f565b6001600160a01b031661055261052a565b6001600160a01b03161461059b576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006105cb610b9f565b6001600160a01b0316815260208101919091526040016000205460ff166106235760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156106c757600080fd5b505af11580156106db573d6000803e3d6000fd5b5050505050505050505050565b6106f0610b9f565b6001600160a01b031661070161052a565b6001600160a01b03161461074a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff168061078457506107846109f5565b80610792575060005460ff16155b6107cd5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156107f8576000805460ff1961ff0019909116610100171660011790555b610800610a06565b61050b610aa6565b610810610b9f565b6001600160a01b031661082161052a565b6001600160a01b03161461086a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b0381166108af5760405162461bcd60e51b8152600401808060200182810382526026815260200180610baa6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60656000610917610b9f565b6001600160a01b0316815260208101919091526040016000205460ff1661096f5760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156109d757600080fd5b505af11580156109eb573d6000803e3d6000fd5b5050505050505050565b6000610a0030610ba3565b15905090565b600054610100900460ff1680610a1f5750610a1f6109f5565b80610a2d575060005460ff16155b610a685760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610320576000805460ff1961ff0019909116610100171660011790558015610332576000805461ff001916905550565b600054610100900460ff1680610abf5750610abf6109f5565b80610acd575060005460ff16155b610b085760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610b33576000805460ff1961ff0019909116610100171660011790555b6000610b3d610b9f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610332576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220747ec40a8b785524508be701dc7a3088a8e915dd61c7a4cdc61564ce75450d3464736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80639870d7fe116100715780639870d7fe146101125780639c1c2ee914610138578063ac8a584a146101d5578063e814f46d146101fb578063f2fde38b14610221578063f709b90614610247576100a9565b80632ff26a0a146100ae578063495edf86146100b8578063715018a6146100c057806374dc542b146100c85780638da5cb5b146100ee575b600080fd5b6100b6610283565b005b6100b6610335565b6100b66103ca565b6100b6600480360360208110156100de57600080fd5b50356001600160a01b0316610476565b6100f661052a565b604080516001600160a01b039092168252519081900360200190f35b6100b66004803603602081101561012857600080fd5b50356001600160a01b0316610539565b6100b6600480360360c081101561014e57600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561019657600080fd5b8201836020820111156101a857600080fd5b803590602001918460018302840111640100000000831117156101ca57600080fd5b5090925090506105bf565b6100b6600480360360208110156101eb57600080fd5b50356001600160a01b03166106e8565b6100b66004803603602081101561021157600080fd5b50356001600160a01b031661076b565b6100b66004803603602081101561023757600080fd5b50356001600160a01b0316610808565b6100b66004803603608081101561025d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561090b565b600054610100900460ff168061029c575061029c6109f5565b806102aa575060005460ff16155b6102e55760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610310576000805460ff1961ff0019909116610100171660011790555b610318610a06565b610320610aa6565b8015610332576000805461ff00191690555b50565b600054610100900460ff168061034e575061034e6109f5565b8061035c575060005460ff16155b6103975760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156103c2576000805460ff1961ff0019909116610100171660011790555b610320610283565b6103d2610b9f565b6001600160a01b03166103e361052a565b6001600160a01b03161461042c576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff168061048f575061048f6109f5565b8061049d575060005460ff16155b6104d85760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610503576000805460ff1961ff0019909116610100171660011790555b61050b610283565b61051482610808565b8015610526576000805461ff00191690555b5050565b6033546001600160a01b031690565b610541610b9f565b6001600160a01b031661055261052a565b6001600160a01b03161461059b576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006105cb610b9f565b6001600160a01b0316815260208101919091526040016000205460ff166106235760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156106c757600080fd5b505af11580156106db573d6000803e3d6000fd5b5050505050505050505050565b6106f0610b9f565b6001600160a01b031661070161052a565b6001600160a01b03161461074a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff168061078457506107846109f5565b80610792575060005460ff16155b6107cd5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156107f8576000805460ff1961ff0019909116610100171660011790555b610800610a06565b61050b610aa6565b610810610b9f565b6001600160a01b031661082161052a565b6001600160a01b03161461086a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b0381166108af5760405162461bcd60e51b8152600401808060200182810382526026815260200180610baa6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60656000610917610b9f565b6001600160a01b0316815260208101919091526040016000205460ff1661096f5760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156109d757600080fd5b505af11580156109eb573d6000803e3d6000fd5b5050505050505050565b6000610a0030610ba3565b15905090565b600054610100900460ff1680610a1f5750610a1f6109f5565b80610a2d575060005460ff16155b610a685760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610320576000805460ff1961ff0019909116610100171660011790558015610332576000805461ff001916905550565b600054610100900460ff1680610abf5750610abf6109f5565b80610acd575060005460ff16155b610b085760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610b33576000805460ff1961ff0019909116610100171660011790555b6000610b3d610b9f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610332576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220747ec40a8b785524508be701dc7a3088a8e915dd61c7a4cdc61564ce75450d3464736f6c63430007060033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 739, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 742, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 4256, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 129, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 19884, + "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", + "label": "operators", + "offset": 0, + "slot": "101", + "type": "t_mapping(t_address,t_bool)" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_mapping(t_address,t_bool)": { + "encoding": "mapping", + "key": "t_address", + "label": "mapping(address => bool)", + "numberOfBytes": "32", + "value": "t_bool" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + } + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/polygon_mumbai/solcInputs/18cf8d0003f91de2c6ccf5af55330880.json b/projects/hardhat-deploy/deployments/sei_testnet/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json similarity index 89% rename from projects/hardhat-deploy/deployments/polygon_mumbai/solcInputs/18cf8d0003f91de2c6ccf5af55330880.json rename to projects/hardhat-deploy/deployments/sei_testnet/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json index de612632f..cd67d7888 100644 --- a/projects/hardhat-deploy/deployments/polygon_mumbai/solcInputs/18cf8d0003f91de2c6ccf5af55330880.json +++ b/projects/hardhat-deploy/deployments/sei_testnet/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json @@ -200,13 +200,13 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" }, "@rarible/exchange-v2/contracts/AssetMatcher.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function _setAssetMatcher(bytes4 assetType, address matcher) internal {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" }, "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function __ExchangeV2_init_proxy(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _initialOwner,\n bytes4[] memory assetTypes, \n address[] memory proxies,\n bytes4 assetMatcherType,\n address assetMatcher\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n for (uint i = 0; i < assetTypes.length; i++) {\n _setTransferProxy(assetTypes[i], proxies[i]);\n }\n _setAssetMatcher(assetMatcherType, assetMatcher);\n transferOwnership(_initialOwner);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" }, "@rarible/exchange-v2/contracts/ExchangeV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n function __ExchangeV2_init_proxy(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _initialOwner,\n bytes4[] memory assetTypes, \n address[] memory proxies,\n bytes4 assetMatcherType,\n address assetMatcher\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n for (uint i = 0; i < assetTypes.length; i++) {\n _setTransferProxy(assetTypes[i], proxies[i]);\n }\n _setAssetMatcher(assetMatcherType, assetMatcher);\n transferOwnership(_initialOwner);\n }\n}\n" }, "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\n require(newFill.leftValue > 0, \"nothing to fill\");\n }\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\n require(newFill.rightValue > 0, \"nothing to fill\");\n }\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" @@ -215,7 +215,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibDirectTransfer { //LibDirectTransfers\n /*All buy parameters need for create buyOrder and sellOrder*/\n struct Purchase {\n address sellOrderMaker; //\n uint256 sellOrderNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 sellOrderPaymentAmount;\n address paymentToken;\n uint256 sellOrderSalt;\n uint sellOrderStart;\n uint sellOrderEnd;\n bytes4 sellOrderDataType;\n bytes sellOrderData;\n bytes sellOrderSignature;\n\n uint256 buyOrderPaymentAmount;\n uint256 buyOrderNftAmount;\n bytes buyOrderData;\n }\n\n /*All accept bid parameters need for create buyOrder and sellOrder*/\n struct AcceptBid {\n address bidMaker; //\n uint256 bidNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 bidPaymentAmount;\n address paymentToken;\n uint256 bidSalt;\n uint bidStart;\n uint bidEnd;\n bytes4 bidDataType;\n bytes bidData;\n bytes bidSignature;\n\n uint256 sellOrderPaymentAmount;\n uint256 sellOrderNftAmount;\n bytes sellOrderData;\n }\n}\n" }, "@rarible/exchange-v2/contracts/libraries/LibFill.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n * @return tuple representing fill of both assets\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue || (rightTakeValue == rightTakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n * @return tuple representing fill of both assets\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" }, "@rarible/exchange-v2/contracts/libraries/LibMath.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary LibMath {\n using SafeMathUpgradeable for uint;\n\n /// @dev Calculates partial value given a numerator and denominator rounded down.\n /// Reverts if rounding error is >= 0.1%\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return partialAmount value of target rounded down.\n function safeGetPartialAmountFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorFloor(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding down.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // The absolute rounding error is the difference between the rounded\n // value and the ideal value. The relative rounding error is the\n // absolute rounding error divided by the absolute value of the\n // ideal value. This is undefined when the ideal value is zero.\n //\n // The ideal value is `numerator * target / denominator`.\n // Let's call `numerator * target % denominator` the remainder.\n // The absolute error is `remainder / denominator`.\n //\n // When the ideal value is zero, we require the absolute error to\n // be zero. Fortunately, this is always the case. The ideal value is\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\n // remainder and absolute error are also zero.\n if (target == 0 || numerator == 0) {\n return false;\n }\n\n // Otherwise, we want the relative rounding error to be strictly\n // less than 0.1%.\n // The relative error is `remainder / (numerator * target)`.\n // We want the relative error less than 1 / 1000:\n // remainder / (numerator * target) < 1 / 1000\n // or equivalently:\n // 1000 * remainder < numerator * target\n // so we have a rounding error iff:\n // 1000 * remainder >= numerator * target\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n isError = remainder.mul(1000) >= numerator.mul(target);\n }\n\n function safeGetPartialAmountCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorCeil(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding up.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // See the comments in `isRoundingError`.\n if (target == 0 || numerator == 0) {\n // When either is zero, the ideal value and rounded value are zero\n // and there is no rounding error. (Although the relative error\n // is undefined.)\n return false;\n }\n // Compute remainder as before\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n remainder = denominator.sub(remainder) % denominator;\n isError = remainder.mul(1000) >= numerator.mul(target);\n return isError;\n }\n}\n" @@ -272,7 +272,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" }, "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,\n WyvernExchange,\n SeaPort_1_1,\n X2Y2,\n LooksRareOrders,\n SudoSwap,\n SeaPort_1_4,\n LooksRareV2,\n Blur,\n SeaPort_1_5\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[10] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n address public immutable seaPort_1_6;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,//0\n WyvernExchange,//1\n SeaPort_1_1,//2\n X2Y2,//3\n LooksRareOrders,//4\n SudoSwap,//5\n SeaPort_1_4,//6\n LooksRareV2,//7\n Blur,//8\n SeaPort_1_5,//9\n SeaPort_1_6//10\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[11] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n //address _seaPort_1_6, 10\n address _weth,\n address[] memory transferProxies,\n address initialOwner\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n seaPort_1_6 = marketplaces[10];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n transferOwnership(initialOwner);\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" }, "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" @@ -314,7 +314,7 @@ "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" }, "@rarible/role-operator/contracts/OperatorRole.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n transferOwnership(initialOwner);\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" }, "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" @@ -335,7 +335,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" }, "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n function __RoyaltiesRegistry_init_proxy(address _initialOwner) external initializer {\n __Ownable_init_unchained();\n transferOwnership(_initialOwner);\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" }, "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" @@ -386,31 +386,31 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\n\ncontract TestERC721 is ERC721Upgradeable {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" }, "@rarible/tokens/contracts/access/MinterAccessControl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n transferOwnership(initialOwner);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" }, "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n transferOwnership(initialOwner);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" }, "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" @@ -419,7 +419,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" @@ -428,19 +428,19 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC1155Rarible(initialOwner, _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" @@ -455,7 +455,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" @@ -482,7 +482,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" }, "@rarible/tokens/contracts/HasContractURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" }, "@rarible/tokens/contracts/IsPrivateCollection.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" @@ -512,19 +512,19 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n ProtocolFeeData memory _protocolFee,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param _protocolFee protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n ProtocolFeeData memory _protocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = _protocolFee.buyerAmount;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" }, "@rarible/transfer-manager/contracts/TransferExecutor.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function _setTransferProxy(bytes4 assetType, address proxy) internal {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" }, "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n\n function __ERC1155LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n transferOwnership(_initialOwner);\n }\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" }, "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n\n function __ERC721LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n transferOwnership(_initialOwner);\n }\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" }, "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function __ERC20TransferProxy_init_proxy(address _initialOwner) external initializer {\n __Ownable_init();\n transferOwnership(_initialOwner);\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" }, "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function __TransferProxy_init_proxy(address _initialOwner) external initializer {\n __Ownable_init();\n transferOwnership(_initialOwner);\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" }, "@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract PunkTransferProxy is OperatorRole, ITransferProxy {\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, uint punkIndex) = abi.decode(asset.assetType.data, (address, uint));\n ICryptoPunksMarket punkToken = ICryptoPunksMarket(token);\n //check punk from real owner\n require(punkToken.punkIndexToAddress(punkIndex) == from, \"Seller not punk owner\");\n //buy punk to proxy, now proxy is owner\n punkToken.buyPunk(punkIndex);\n //Transfer ownership of a punk to buyer\n punkToken.transferPunk(to, punkIndex);\n }\n}" diff --git a/projects/hardhat-deploy/deployments/sei_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/hardhat-deploy/deployments/sei_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/hardhat-deploy/deployments/sei_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sepolia/AssetMatcherCollection.json b/projects/hardhat-deploy/deployments/sepolia/AssetMatcherCollection.json index 94b3dc8dd..6d249e47c 100644 --- a/projects/hardhat-deploy/deployments/sepolia/AssetMatcherCollection.json +++ b/projects/hardhat-deploy/deployments/sepolia/AssetMatcherCollection.json @@ -1,5 +1,5 @@ { - "address": "0x3049455cdA17beE43d61090Ec344624aeda72Ed6", + "address": "0xc4F5FCD96e3b37A31f871F0968206F47294a4471", "abi": [ { "inputs": [ @@ -62,25 +62,25 @@ "type": "function" } ], - "transactionHash": "0xc614334f2256afc8c668285b59f744d47409208ac6eb460fc6f760fd2a86305a", + "transactionHash": "0xb01a7ff96af40cb1140f5d481220aec5b7f3285868cc0964f676075ea08b1df6", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x3049455cdA17beE43d61090Ec344624aeda72Ed6", - "transactionIndex": 42, - "gasUsed": "275219", + "contractAddress": null, + "transactionIndex": 53, + "gasUsed": "302853", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x94d438b0ce6cd6a19e1e3564130be01771329a4eece8954097713bd9ce98a776", - "transactionHash": "0xc614334f2256afc8c668285b59f744d47409208ac6eb460fc6f760fd2a86305a", + "blockHash": "0x93656b9642d0879efaeb7855ab4aac60c5360f24b411efc8729ef3a6450cf61c", + "transactionHash": "0xb01a7ff96af40cb1140f5d481220aec5b7f3285868cc0964f676075ea08b1df6", "logs": [], - "blockNumber": 4793874, - "cumulativeGasUsed": "2883299", + "blockNumber": 5783741, + "cumulativeGasUsed": "9773409", "status": 1, "byzantium": true }, "args": [], "numDeployments": 1, - "solcInputHash": "1e83608a8d677752f3c67873d3574235", + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"leftAssetType\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"rightAssetType\",\"type\":\"tuple\"}],\"name\":\"matchAssets\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\":\"AssetMatcherCollection\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\n/*\\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\\n */\\ncontract AssetMatcherCollection is IAssetMatcher {\\n\\n bytes constant EMPTY = \\\"\\\";\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\\n if (\\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \\n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \\n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\\n ) {\\n (address leftToken) = abi.decode(leftAssetType.data, (address));\\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\\n if (leftToken == rightToken) {\\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\\n }\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n}\",\"keccak256\":\"0x115e3e94c7b3df6de5c8adf15c42bc737876212e37bd0d0ebe446494d57c94e9\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x608060405234801561001057600080fd5b50610403806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d3f7cb014610030575b600080fd5b61004361003e3660046102da565b610059565b604051610050919061033b565b60405180910390f35b610061610195565b81516001600160e01b0319166339d690a360e11b1480610092575081516001600160e01b03191663d8f960c160e01b145b806100ae575081516001600160e01b03191663025ceed960e61b145b806100c9575081516001600160e01b03191662737ea960e61b145b806100e5575081516001600160e01b031916630f9ae27560e21b145b1561016b5760008360200151806020019051810190610104919061028e565b90506000836020015180602001905181019061012091906102af565b509050806001600160a01b0316826001600160a01b031614156101685750506040805180820190915282516001600160e01b031916815260208084015190820152905061018f565b50505b50604080518082018252600080825282516020818101909452908152918101919091525b92915050565b60408051808201909152600081526060602082015290565b80516001600160a01b03811681146101c457600080fd5b919050565b6000604082840312156101da578081fd5b6040516040810167ffffffffffffffff82821081831117156101f857fe5b816040528293508435915063ffffffff60e01b8216821461021857600080fd5b908252602090848201358181111561022f57600080fd5b8501601f8101871361024057600080fd5b80358281111561024c57fe5b61025e601f8201601f191685016103a9565b9250808352878482840101111561027457600080fd5b808483018585013760009083018401525091015292915050565b60006020828403121561029f578081fd5b6102a8826101ad565b9392505050565b600080604083850312156102c1578081fd5b6102ca836101ad565b9150602083015190509250929050565b600080604083850312156102ec578182fd5b823567ffffffffffffffff80821115610303578384fd5b61030f868387016101c9565b93506020850135915080821115610324578283fd5b50610331858286016101c9565b9150509250929050565b6000602080835263ffffffff60e01b84511681840152808401516040808501528051806060860152835b8181101561038157828101840151868201608001528301610365565b818111156103925784608083880101525b50601f01601f191693909301608001949350505050565b60405181810167ffffffffffffffff811182821017156103c557fe5b60405291905056fea2646970667358221220fe8f50b49531504ff963dc9b719db80c3131b9d5b69661a49edd957769dee45764736f6c63430007060033", "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80636d3f7cb014610030575b600080fd5b61004361003e3660046102da565b610059565b604051610050919061033b565b60405180910390f35b610061610195565b81516001600160e01b0319166339d690a360e11b1480610092575081516001600160e01b03191663d8f960c160e01b145b806100ae575081516001600160e01b03191663025ceed960e61b145b806100c9575081516001600160e01b03191662737ea960e61b145b806100e5575081516001600160e01b031916630f9ae27560e21b145b1561016b5760008360200151806020019051810190610104919061028e565b90506000836020015180602001905181019061012091906102af565b509050806001600160a01b0316826001600160a01b031614156101685750506040805180820190915282516001600160e01b031916815260208084015190820152905061018f565b50505b50604080518082018252600080825282516020818101909452908152918101919091525b92915050565b60408051808201909152600081526060602082015290565b80516001600160a01b03811681146101c457600080fd5b919050565b6000604082840312156101da578081fd5b6040516040810167ffffffffffffffff82821081831117156101f857fe5b816040528293508435915063ffffffff60e01b8216821461021857600080fd5b908252602090848201358181111561022f57600080fd5b8501601f8101871361024057600080fd5b80358281111561024c57fe5b61025e601f8201601f191685016103a9565b9250808352878482840101111561027457600080fd5b808483018585013760009083018401525091015292915050565b60006020828403121561029f578081fd5b6102a8826101ad565b9392505050565b600080604083850312156102c1578081fd5b6102ca836101ad565b9150602083015190509250929050565b600080604083850312156102ec578182fd5b823567ffffffffffffffff80821115610303578384fd5b61030f868387016101c9565b93506020850135915080821115610324578283fd5b50610331858286016101c9565b9150509250929050565b6000602080835263ffffffff60e01b84511681840152808401516040808501528051806060860152835b8181101561038157828101840151868201608001528301610365565b818111156103925784608083880101525b50601f01601f191693909301608001949350505050565b60405181810167ffffffffffffffff811182821017156103c557fe5b60405291905056fea2646970667358221220fe8f50b49531504ff963dc9b719db80c3131b9d5b69661a49edd957769dee45764736f6c63430007060033", diff --git a/projects/hardhat-deploy/deployments/sepolia/DefaultProxyAdmin.json b/projects/hardhat-deploy/deployments/sepolia/DefaultProxyAdmin.json index c5cd94d4c..75b95664c 100644 --- a/projects/hardhat-deploy/deployments/sepolia/DefaultProxyAdmin.json +++ b/projects/hardhat-deploy/deployments/sepolia/DefaultProxyAdmin.json @@ -1,5 +1,5 @@ { - "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", "abi": [ { "inputs": [ @@ -162,34 +162,34 @@ "type": "function" } ], - "transactionHash": "0x9e2a38dd1d25bc99686469fd42806035cd841d7cfc1d7081d98a9dac53ab08f4", + "transactionHash": "0xb2ed487bd6fafc8d421eee6035e5e1b8d9358fc04dced9cd5d341cb4011aa2f0", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", - "transactionIndex": 21, - "gasUsed": "644163", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000000000000000000020000000000000000000800400000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000001000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa16b7b77c02d86e30ed5e222e3b04d2940619df8032b7f11a0a2db850c531ffc", - "transactionHash": "0x9e2a38dd1d25bc99686469fd42806035cd841d7cfc1d7081d98a9dac53ab08f4", + "contractAddress": null, + "transactionIndex": 52, + "gasUsed": "677380", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000001000000000000020000000000000000000800000000000000000000000000000000500200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xd2303a8e80f0e90a98b225e323cf68746003579bbd6562f930722427b0856545", + "transactionHash": "0xb2ed487bd6fafc8d421eee6035e5e1b8d9358fc04dced9cd5d341cb4011aa2f0", "logs": [ { - "transactionIndex": 21, - "blockNumber": 4793855, - "transactionHash": "0x9e2a38dd1d25bc99686469fd42806035cd841d7cfc1d7081d98a9dac53ab08f4", - "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "transactionIndex": 52, + "blockNumber": 5783727, + "transactionHash": "0xb2ed487bd6fafc8d421eee6035e5e1b8d9358fc04dced9cd5d341cb4011aa2f0", + "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" ], "data": "0x", - "logIndex": 25, - "blockHash": "0xa16b7b77c02d86e30ed5e222e3b04d2940619df8032b7f11a0a2db850c531ffc" + "logIndex": 166, + "blockHash": "0xd2303a8e80f0e90a98b225e323cf68746003579bbd6562f930722427b0856545" } ], - "blockNumber": 4793855, - "cumulativeGasUsed": "12606362", + "blockNumber": 5783727, + "cumulativeGasUsed": "12010903", "status": 1, "byzantium": true }, @@ -197,7 +197,7 @@ "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" ], "numDeployments": 1, - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", @@ -240,7 +240,7 @@ "storageLayout": { "storage": [ { - "astId": 7, + "astId": 1599, "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", "label": "_owner", "offset": 0, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC1155LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/sepolia/ERC1155LazyMintTransferProxy.json index 81605faab..2baaf8c81 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC1155LazyMintTransferProxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC1155LazyMintTransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0xC5BBd75789bD007784A0046094d19aCeA1A79eB1", + "address": "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", "abi": [ { "anonymous": false, @@ -20,6 +20,19 @@ "name": "OwnershipTransferred", "type": "event" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ERC1155LazyMintTransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "__OperatorRole_init", @@ -27,6 +40,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -134,28 +160,28 @@ "type": "function" } ], - "transactionHash": "0x4d551812cc7e01964f737ce1b2eb4a4ce09fcfb36de2a1ff8aafe1fc327fe4ec", + "transactionHash": "0xccff957358a0b556591d29c9900735503e2ad976cab57866e9b75ad6ac35120f", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0xC5BBd75789bD007784A0046094d19aCeA1A79eB1", - "transactionIndex": 12, - "gasUsed": "837334", + "contractAddress": null, + "transactionIndex": 68, + "gasUsed": "923250", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x58115cf3366afb1eac729d5f979c034d13174f35ac123a3f2fb2e374a8592389", - "transactionHash": "0x4d551812cc7e01964f737ce1b2eb4a4ce09fcfb36de2a1ff8aafe1fc327fe4ec", + "blockHash": "0x9b266c007609fbe07b56113ce2a1606c64dc24747e2933baabc200d155c50451", + "transactionHash": "0xccff957358a0b556591d29c9900735503e2ad976cab57866e9b75ad6ac35120f", "logs": [], - "blockNumber": 4793864, - "cumulativeGasUsed": "3200386", + "blockNumber": 5783739, + "cumulativeGasUsed": "11861008", "status": 1, "byzantium": true }, "args": [], "numDeployments": 1, - "solcInputHash": "1e83608a8d677752f3c67873d3574235", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":\"ERC1155LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\\n }\\n}\\n\",\"keccak256\":\"0x246520e6a1b1b2a82d45b69e7f62b9a13a989b4cf274554b380f05eeca530edc\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50610e2e806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109dd565b6101b0565b61008a6102a6565b6100af610352565b6040516100bc9190610ba6565b60405180910390f35b61008a6100d33660046108c3565b610361565b61008a6100e63660046108c3565b6103e7565b61008a6100f93660046108c3565b61046a565b600054610100900460ff1680610117575061011761056d565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b61019361057e565b61019b61061e565b80156101ad576000805461ff00191690555b50565b606560006101bc610717565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610dd16028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061023391906108df565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b815260040161026d9493929190610bba565b600060405180830381600087803b15801561028757600080fd5b505af115801561029b573d6000803e3d6000fd5b505050505050505050565b6102ae610717565b6001600160a01b03166102bf610352565b6001600160a01b031614610308576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610369610717565b6001600160a01b031661037a610352565b6001600160a01b0316146103c3576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6103ef610717565b6001600160a01b0316610400610352565b6001600160a01b031614610449576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b610472610717565b6001600160a01b0316610483610352565b6001600160a01b0316146104cc576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b0381166105115760405162461bcd60e51b8152600401808060200182810382526026815260200180610d5d6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105783061071b565b15905090565b600054610100900460ff1680610597575061059761056d565b806105a5575060005460ff16155b6105e05760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff1680610637575061063761056d565b80610645575060005460ff16155b6106805760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff161580156106ab576000805460ff1961ff0019909116610100171660011790555b60006106b5610717565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061073861073384610cf5565b610cb3565b905082815283838301111561074c57600080fd5b61075a836020830184610d17565b9392505050565b803561072081610d47565b600082601f83011261077c578081fd5b8151602061078c61073383610cd7565b82815281810190858301855b858110156107d6578151880189603f8201126107b2578788fd5b6107c38a8783015160408401610725565b8552509284019290840190600101610798565b5090979650505050505050565b600082601f8301126107f3578081fd5b8151602061080361073383610cd7565b82815281810190858301604080860288018501891015610821578687fd5b865b868110156108965781838b031215610839578788fd5b815182810181811067ffffffffffffffff8211171561085457fe5b8352835161086181610d47565b8152838701516bffffffffffffffffffffffff8116811461088057898afd5b8188015285529385019391810191600101610823565b509198975050505050505050565b600082601f8301126108b4578081fd5b61075a83835160208501610725565b6000602082840312156108d4578081fd5b813561075a81610d47565b600080604083850312156108f1578081fd5b82516108fc81610d47565b602084015190925067ffffffffffffffff80821115610919578283fd5b9084019060c0828703121561092c578283fd5b61093660c0610cb3565b8251815260208301518281111561094b578485fd5b610957888286016108a4565b60208301525060408301516040820152606083015182811115610978578485fd5b610984888286016107e3565b60608301525060808301518281111561099b578485fd5b6109a7888286016107e3565b60808301525060a0830151828111156109be578485fd5b6109ca8882860161076c565b60a0830152508093505050509250929050565b6000806000606084860312156109f1578081fd5b833567ffffffffffffffff80821115610a08578283fd5b81860191506040808389031215610a1d578384fd5b80518181018181108482111715610a3057fe5b808352843584811115610a41578687fd5b8501808b03841315610a51578687fd5b608083018281108682111715610a6357fe5b845280356001600160e01b031981168114610a7c578788fd5b825260208181013586811115610a90578889fd5b82019550601f86018c13610aa2578788fd5b85359150610ab261073383610cf5565b8281528c82848901011115610ac5578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610af4818c01610761565b985050505050610b05818801610761565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b6f57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b31565b509495945050505050565b60008151808452610b92816020860160208601610d17565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610be2610140850182610b7a565b9050604088015160c08501526060880151607f19808684030160e0870152610c0a8383610b1e565b925060808a015191508086840301610100870152610c288383610b1e565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610c8157601f19868303018452610c6f828651610b7a565b94870194938701939150600101610c53565b508096505050505050610c9681840187610b11565b50610ca46040830185610b11565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610ccf57fe5b604052919050565b600067ffffffffffffffff821115610ceb57fe5b5060209081020190565b600067ffffffffffffffff821115610d0957fe5b50601f01601f191660200190565b60005b83811015610d32578181015183820152602001610d1a565b83811115610d41576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a28019e3a9ffc83e27b05dd4ff150123e74358301a86a8729d2441ab31507f4664736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109dd565b6101b0565b61008a6102a6565b6100af610352565b6040516100bc9190610ba6565b60405180910390f35b61008a6100d33660046108c3565b610361565b61008a6100e63660046108c3565b6103e7565b61008a6100f93660046108c3565b61046a565b600054610100900460ff1680610117575061011761056d565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b61019361057e565b61019b61061e565b80156101ad576000805461ff00191690555b50565b606560006101bc610717565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610dd16028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061023391906108df565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b815260040161026d9493929190610bba565b600060405180830381600087803b15801561028757600080fd5b505af115801561029b573d6000803e3d6000fd5b505050505050505050565b6102ae610717565b6001600160a01b03166102bf610352565b6001600160a01b031614610308576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610369610717565b6001600160a01b031661037a610352565b6001600160a01b0316146103c3576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6103ef610717565b6001600160a01b0316610400610352565b6001600160a01b031614610449576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b610472610717565b6001600160a01b0316610483610352565b6001600160a01b0316146104cc576040805162461bcd60e51b81526020600482018190526024820152600080516020610db1833981519152604482015290519081900360640190fd5b6001600160a01b0381166105115760405162461bcd60e51b8152600401808060200182810382526026815260200180610d5d6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105783061071b565b15905090565b600054610100900460ff1680610597575061059761056d565b806105a5575060005460ff16155b6105e05760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff1680610637575061063761056d565b80610645575060005460ff16155b6106805760405162461bcd60e51b815260040180806020018281038252602e815260200180610d83602e913960400191505060405180910390fd5b600054610100900460ff161580156106ab576000805460ff1961ff0019909116610100171660011790555b60006106b5610717565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061073861073384610cf5565b610cb3565b905082815283838301111561074c57600080fd5b61075a836020830184610d17565b9392505050565b803561072081610d47565b600082601f83011261077c578081fd5b8151602061078c61073383610cd7565b82815281810190858301855b858110156107d6578151880189603f8201126107b2578788fd5b6107c38a8783015160408401610725565b8552509284019290840190600101610798565b5090979650505050505050565b600082601f8301126107f3578081fd5b8151602061080361073383610cd7565b82815281810190858301604080860288018501891015610821578687fd5b865b868110156108965781838b031215610839578788fd5b815182810181811067ffffffffffffffff8211171561085457fe5b8352835161086181610d47565b8152838701516bffffffffffffffffffffffff8116811461088057898afd5b8188015285529385019391810191600101610823565b509198975050505050505050565b600082601f8301126108b4578081fd5b61075a83835160208501610725565b6000602082840312156108d4578081fd5b813561075a81610d47565b600080604083850312156108f1578081fd5b82516108fc81610d47565b602084015190925067ffffffffffffffff80821115610919578283fd5b9084019060c0828703121561092c578283fd5b61093660c0610cb3565b8251815260208301518281111561094b578485fd5b610957888286016108a4565b60208301525060408301516040820152606083015182811115610978578485fd5b610984888286016107e3565b60608301525060808301518281111561099b578485fd5b6109a7888286016107e3565b60808301525060a0830151828111156109be578485fd5b6109ca8882860161076c565b60a0830152508093505050509250929050565b6000806000606084860312156109f1578081fd5b833567ffffffffffffffff80821115610a08578283fd5b81860191506040808389031215610a1d578384fd5b80518181018181108482111715610a3057fe5b808352843584811115610a41578687fd5b8501808b03841315610a51578687fd5b608083018281108682111715610a6357fe5b845280356001600160e01b031981168114610a7c578788fd5b825260208181013586811115610a90578889fd5b82019550601f86018c13610aa2578788fd5b85359150610ab261073383610cf5565b8281528c82848901011115610ac5578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610af4818c01610761565b985050505050610b05818801610761565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b6f57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b31565b509495945050505050565b60008151808452610b92816020860160208601610d17565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610be2610140850182610b7a565b9050604088015160c08501526060880151607f19808684030160e0870152610c0a8383610b1e565b925060808a015191508086840301610100870152610c288383610b1e565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610c8157601f19868303018452610c6f828651610b7a565b94870194938701939150600101610c53565b508096505050505050610c9681840187610b11565b50610ca46040830185610b11565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610ccf57fe5b604052919050565b600067ffffffffffffffff821115610ceb57fe5b5060209081020190565b600067ffffffffffffffff821115610d0957fe5b50601f01601f191660200190565b60005b83811015610d32578181015183820152602001610d1a565b83811115610d41576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a28019e3a9ffc83e27b05dd4ff150123e74358301a86a8729d2441ab31507f4664736f6c63430007060033", + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC1155LazyMintTransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":\"ERC1155LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n\\n function __ERC1155LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\\n }\\n}\\n\",\"keccak256\":\"0x5750ad43c269486bb6256eaf27ed2cf2c7ed3964aa0e55871c6b9bb0e96b3e3f\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610f13806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100db578063ac8a584a146100ee578063ccf4fad214610101578063e814f46d14610101578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b55780638da5cb5b146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ac2565b6101d9565b6100a06102cf565b6100c561037b565b6040516100d29190610c8b565b60405180910390f35b6100a06100e93660046109a8565b61038a565b6100a06100fc3660046109a8565b610410565b6100a061010f3660046109a8565b610493565b6100a06101223660046109a8565b61054f565b600054610100900460ff16806101405750610140610652565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc610663565b6101c4610703565b80156101d6576000805461ff00191690555b50565b606560006101e56107fc565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eb66028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061025c91906109c4565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b81526004016102969493929190610c9f565b600060405180830381600087803b1580156102b057600080fd5b505af11580156102c4573d6000803e3d6000fd5b505050505050505050565b6102d76107fc565b6001600160a01b03166102e861037b565b6001600160a01b031614610331576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b6103926107fc565b6001600160a01b03166103a361037b565b6001600160a01b0316146103ec576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104186107fc565b6001600160a01b031661042961037b565b6001600160a01b031614610472576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806104ac57506104ac610652565b806104ba575060005460ff16155b6104f55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610520576000805460ff1961ff0019909116610100171660011790555b610528610663565b610530610703565b6105398261054f565b801561054b576000805461ff00191690555b5050565b6105576107fc565b6001600160a01b031661056861037b565b6001600160a01b0316146105b1576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b0381166105f65760405162461bcd60e51b8152600401808060200182810382526026815260200180610e426026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061065d30610800565b15905090565b600054610100900460ff168061067c575061067c610652565b8061068a575060005460ff16155b6106c55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff168061071c575061071c610652565b8061072a575060005460ff16155b6107655760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610790576000805460ff1961ff0019909116610100171660011790555b600061079a6107fc565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061081d61081884610dda565b610d98565b905082815283838301111561083157600080fd5b61083f836020830184610dfc565b9392505050565b803561080581610e2c565b600082601f830112610861578081fd5b8151602061087161081883610dbc565b82815281810190858301855b858110156108bb578151880189603f820112610897578788fd5b6108a88a878301516040840161080a565b855250928401929084019060010161087d565b5090979650505050505050565b600082601f8301126108d8578081fd5b815160206108e861081883610dbc565b82815281810190858301604080860288018501891015610906578687fd5b865b8681101561097b5781838b03121561091e578788fd5b815182810181811067ffffffffffffffff8211171561093957fe5b8352835161094681610e2c565b8152838701516bffffffffffffffffffffffff8116811461096557898afd5b8188015285529385019391810191600101610908565b509198975050505050505050565b600082601f830112610999578081fd5b61083f8383516020850161080a565b6000602082840312156109b9578081fd5b813561083f81610e2c565b600080604083850312156109d6578081fd5b82516109e181610e2c565b602084015190925067ffffffffffffffff808211156109fe578283fd5b9084019060c08287031215610a11578283fd5b610a1b60c0610d98565b82518152602083015182811115610a30578485fd5b610a3c88828601610989565b60208301525060408301516040820152606083015182811115610a5d578485fd5b610a69888286016108c8565b606083015250608083015182811115610a80578485fd5b610a8c888286016108c8565b60808301525060a083015182811115610aa3578485fd5b610aaf88828601610851565b60a0830152508093505050509250929050565b600080600060608486031215610ad6578081fd5b833567ffffffffffffffff80821115610aed578283fd5b81860191506040808389031215610b02578384fd5b80518181018181108482111715610b1557fe5b808352843584811115610b26578687fd5b8501808b03841315610b36578687fd5b608083018281108682111715610b4857fe5b845280356001600160e01b031981168114610b61578788fd5b825260208181013586811115610b75578889fd5b82019550601f86018c13610b87578788fd5b85359150610b9761081883610dda565b8281528c82848901011115610baa578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bd9818c01610846565b985050505050610bea818801610846565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c5457815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c16565b509495945050505050565b60008151808452610c77816020860160208601610dfc565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610cc7610140850182610c5f565b9050604088015160c08501526060880151607f19808684030160e0870152610cef8383610c03565b925060808a015191508086840301610100870152610d0d8383610c03565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610d6657601f19868303018452610d54828651610c5f565b94870194938701939150600101610d38565b508096505050505050610d7b81840187610bf6565b50610d896040830185610bf6565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610db457fe5b604052919050565b600067ffffffffffffffff821115610dd057fe5b5060209081020190565b600067ffffffffffffffff821115610dee57fe5b50601f01601f191660200190565b60005b83811015610e17578181015183820152602001610dff565b83811115610e26576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a2e24b24412817b3e18dda67abff2b746539ae76571c1e638821050d4f94e66e64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100db578063ac8a584a146100ee578063ccf4fad214610101578063e814f46d14610101578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b55780638da5cb5b146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ac2565b6101d9565b6100a06102cf565b6100c561037b565b6040516100d29190610c8b565b60405180910390f35b6100a06100e93660046109a8565b61038a565b6100a06100fc3660046109a8565b610410565b6100a061010f3660046109a8565b610493565b6100a06101223660046109a8565b61054f565b600054610100900460ff16806101405750610140610652565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc610663565b6101c4610703565b80156101d6576000805461ff00191690555b50565b606560006101e56107fc565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eb66028913960400191505060405180910390fd5b60008084600001516020015180602001905181019061025c91906109c4565b91509150816001600160a01b031663ffc4e0a782868689602001516040518563ffffffff1660e01b81526004016102969493929190610c9f565b600060405180830381600087803b1580156102b057600080fd5b505af11580156102c4573d6000803e3d6000fd5b505050505050505050565b6102d76107fc565b6001600160a01b03166102e861037b565b6001600160a01b031614610331576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b6103926107fc565b6001600160a01b03166103a361037b565b6001600160a01b0316146103ec576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104186107fc565b6001600160a01b031661042961037b565b6001600160a01b031614610472576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806104ac57506104ac610652565b806104ba575060005460ff16155b6104f55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610520576000805460ff1961ff0019909116610100171660011790555b610528610663565b610530610703565b6105398261054f565b801561054b576000805461ff00191690555b5050565b6105576107fc565b6001600160a01b031661056861037b565b6001600160a01b0316146105b1576040805162461bcd60e51b81526020600482018190526024820152600080516020610e96833981519152604482015290519081900360640190fd5b6001600160a01b0381166105f65760405162461bcd60e51b8152600401808060200182810382526026815260200180610e426026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061065d30610800565b15905090565b600054610100900460ff168061067c575061067c610652565b8061068a575060005460ff16155b6106c55760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff168061071c575061071c610652565b8061072a575060005460ff16155b6107655760405162461bcd60e51b815260040180806020018281038252602e815260200180610e68602e913960400191505060405180910390fd5b600054610100900460ff16158015610790576000805460ff1961ff0019909116610100171660011790555b600061079a6107fc565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061081d61081884610dda565b610d98565b905082815283838301111561083157600080fd5b61083f836020830184610dfc565b9392505050565b803561080581610e2c565b600082601f830112610861578081fd5b8151602061087161081883610dbc565b82815281810190858301855b858110156108bb578151880189603f820112610897578788fd5b6108a88a878301516040840161080a565b855250928401929084019060010161087d565b5090979650505050505050565b600082601f8301126108d8578081fd5b815160206108e861081883610dbc565b82815281810190858301604080860288018501891015610906578687fd5b865b8681101561097b5781838b03121561091e578788fd5b815182810181811067ffffffffffffffff8211171561093957fe5b8352835161094681610e2c565b8152838701516bffffffffffffffffffffffff8116811461096557898afd5b8188015285529385019391810191600101610908565b509198975050505050505050565b600082601f830112610999578081fd5b61083f8383516020850161080a565b6000602082840312156109b9578081fd5b813561083f81610e2c565b600080604083850312156109d6578081fd5b82516109e181610e2c565b602084015190925067ffffffffffffffff808211156109fe578283fd5b9084019060c08287031215610a11578283fd5b610a1b60c0610d98565b82518152602083015182811115610a30578485fd5b610a3c88828601610989565b60208301525060408301516040820152606083015182811115610a5d578485fd5b610a69888286016108c8565b606083015250608083015182811115610a80578485fd5b610a8c888286016108c8565b60808301525060a083015182811115610aa3578485fd5b610aaf88828601610851565b60a0830152508093505050509250929050565b600080600060608486031215610ad6578081fd5b833567ffffffffffffffff80821115610aed578283fd5b81860191506040808389031215610b02578384fd5b80518181018181108482111715610b1557fe5b808352843584811115610b26578687fd5b8501808b03841315610b36578687fd5b608083018281108682111715610b4857fe5b845280356001600160e01b031981168114610b61578788fd5b825260208181013586811115610b75578889fd5b82019550601f86018c13610b87578788fd5b85359150610b9761081883610dda565b8281528c82848901011115610baa578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bd9818c01610846565b985050505050610bea818801610846565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c5457815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c16565b509495945050505050565b60008151808452610c77816020860160208601610dfc565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6000608082528551608083015260208087015160c060a0850152610cc7610140850182610c5f565b9050604088015160c08501526060880151607f19808684030160e0870152610cef8383610c03565b925060808a015191508086840301610100870152610d0d8383610c03565b60a08b0151878203909201610120880152815180825290935090840191508383019084810284018501865b82811015610d6657601f19868303018452610d54828651610c5f565b94870194938701939150600101610d38565b508096505050505050610d7b81840187610bf6565b50610d896040830185610bf6565b82606083015295945050505050565b60405181810167ffffffffffffffff81118282101715610db457fe5b604052919050565b600067ffffffffffffffff821115610dd057fe5b5060209081020190565b600067ffffffffffffffff821115610dee57fe5b50601f01601f191660200190565b60005b83811015610e17578181015183820152602001610dff565b83811115610e26576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a2e24b24412817b3e18dda67abff2b746539ae76571c1e638821050d4f94e66e64736f6c63430007060033", "devdoc": { "kind": "dev", "methods": { @@ -219,7 +245,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 19133, + "astId": 19884, "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol:ERC1155LazyMintTransferProxy", "label": "operators", "offset": 0, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible.json b/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible.json index 761364851..f03bd53b7 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible.json @@ -1,5 +1,5 @@ { - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "abi": [ { "anonymous": false, @@ -586,6 +586,49 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1281,122 +1324,137 @@ "type": "constructor" } ], - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", - "transactionIndex": 38, - "gasUsed": "1059427", - "logsBloom": "0x00000000000000002000000000000000400000000000000000800010000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000200000000002080001000000000800000000000000000000000000020000000000001000000800000000800000040000000000000001500000000000000400000000000000000000000000000000000000000000800000000040000000000000000000000000000000100040000000000000000000000000800020000000000000000000080000000000000400000000000000400020000000000000000010000000000000000000000000000000001100000001000000", - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175", - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", + "contractAddress": null, + "transactionIndex": 42, + "gasUsed": "1101785", + "logsBloom": "0x00000400000000000000000000000000400000000400800000800000000000000000000000000000000000000000000000000000000040001000000040000000000000000000008000000000000002000001000000000800004000000000000000000000020000000000001080000800000000800000000000000000000001400000004000000000000000000000000000000000000000000000000000880000000000000000000000000000000000100004000000000000000000000000000000000020000200000000000001000020000000000480000000000000000020000000000000000010000000000000800000000000000000001000000001000000", + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa", + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", "logs": [ { - "transactionIndex": 38, - "blockNumber": 4793881, - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x00000000000000000000000018a2553ef1aae12d9cd158821319e26a62fee90e" + "0x00000000000000000000000097f85b5cd51c89beb91a3c621c2954858429dfd4" ], "data": "0x", - "logIndex": 31, - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175" + "logIndex": 110, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" }, { - "transactionIndex": 38, - "blockNumber": 4793881, - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 32, - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175" + "logIndex": 111, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" }, { - "transactionIndex": 38, - "blockNumber": 4793881, - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a094e566b61b3c2d88acf7cc15e3dd0fa83f32af" + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 33, - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175" + "logIndex": 112, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" }, { - "transactionIndex": 38, - "blockNumber": 4793881, - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000c5bbd75789bd007784a0046094d19acea1a79eb1" + "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 34, - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175" + "logIndex": 113, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + }, + { + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 114, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" }, { - "transactionIndex": 38, - "blockNumber": 4793881, - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "topics": [ "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" ], - "data": "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", - "logIndex": 35, - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175" + "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 115, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" }, { - "transactionIndex": 38, - "blockNumber": 4793881, - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1f689646861870d44b33dbbb413fa7d06a2b52f", - "logIndex": 36, - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175" + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 116, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" } ], - "blockNumber": 4793881, - "cumulativeGasUsed": "4375835", + "blockNumber": 5783757, + "cumulativeGasUsed": "9475477", "status": 1, "byzantium": true }, "args": [ - "0x18a2553ef1aaE12d9cd158821319e26A62feE90E", - "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", - "0x173c43d200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000a094e566b61b3c2d88acf7cc15e3dd0fa83f32af000000000000000000000000c5bbd75789bd007784a0046094d19acea1a79eb1000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0x97F85b5cD51C89bEB91a3C621C2954858429DFD4", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", "execute": { - "methodName": "__ERC1155Rarible_init", + "methodName": "__ERC1155Rarible_init_proxy", "args": [ "Rarible", "RARI", "ipfs:/", "", - "0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af", - "0xC5BBd75789bD007784A0046094d19aCeA1A79eB1" + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ] }, - "implementation": "0x18a2553ef1aaE12d9cd158821319e26A62feE90E", + "implementation": "0x97F85b5cD51C89bEB91a3C621C2954858429DFD4", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleBeacon.json b/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleBeacon.json index 6a207b2e3..6f1c2ddfc 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleBeacon.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleBeacon.json @@ -1,5 +1,5 @@ { - "address": "0xc798B273FaF23932Cf11177402C10C9b44D30Da2", + "address": "0x792b701837681de8f2B61a27507c9E0a3f4d4b1D", "abi": [ { "inputs": [ @@ -7,6 +7,11 @@ "internalType": "address", "name": "impl", "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" } ], "stateMutability": "nonpayable", @@ -104,45 +109,60 @@ "type": "function" } ], - "transactionHash": "0xe43fec423bc51ffc30cd99aeff82d50d3d4c4f5e5426703d4c51084e6bf1362c", + "transactionHash": "0xe0059db218889e6d204e891a50b050e82c93e130a4e43c5e54fb8627560c4144", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0xc798B273FaF23932Cf11177402C10C9b44D30Da2", - "transactionIndex": 31, - "gasUsed": "356388", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000004000000000001000000000000000000000000000000", - "blockHash": "0xa13744f44420159272fae4b847751952819bd9dc4834a652d09dddd0b44ac47e", - "transactionHash": "0xe43fec423bc51ffc30cd99aeff82d50d3d4c4f5e5426703d4c51084e6bf1362c", + "contractAddress": null, + "transactionIndex": 78, + "gasUsed": "394691", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000020480000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xcbfb98806412f63de683d9809e7102110910349864be25e5e1ef8df45266a366", + "transactionHash": "0xe0059db218889e6d204e891a50b050e82c93e130a4e43c5e54fb8627560c4144", "logs": [ { - "transactionIndex": 31, - "blockNumber": 4793882, - "transactionHash": "0xe43fec423bc51ffc30cd99aeff82d50d3d4c4f5e5426703d4c51084e6bf1362c", - "address": "0xc798B273FaF23932Cf11177402C10C9b44D30Da2", + "transactionIndex": 78, + "blockNumber": 5783758, + "transactionHash": "0xe0059db218889e6d204e891a50b050e82c93e130a4e43c5e54fb8627560c4144", + "address": "0x792b701837681de8f2B61a27507c9E0a3f4d4b1D", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 167, + "blockHash": "0xcbfb98806412f63de683d9809e7102110910349864be25e5e1ef8df45266a366" + }, + { + "transactionIndex": 78, + "blockNumber": 5783758, + "transactionHash": "0xe0059db218889e6d204e891a50b050e82c93e130a4e43c5e54fb8627560c4144", + "address": "0x792b701837681de8f2B61a27507c9E0a3f4d4b1D", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 16, - "blockHash": "0xa13744f44420159272fae4b847751952819bd9dc4834a652d09dddd0b44ac47e" + "logIndex": 168, + "blockHash": "0xcbfb98806412f63de683d9809e7102110910349864be25e5e1ef8df45266a366" } ], - "blockNumber": 4793882, - "cumulativeGasUsed": "5683293", + "blockNumber": 5783758, + "cumulativeGasUsed": "9170048", "status": 1, "byzantium": true }, "args": [ - "0x18a2553ef1aaE12d9cd158821319e26A62feE90E" + "0x97F85b5cD51C89bEB91a3C621C2954858429DFD4", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, - "solcInputHash": "1e83608a8d677752f3c67873d3574235", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\":\"ERC1155RaribleBeacon\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\\n constructor(address impl) UpgradeableBeacon(impl) {\\n\\n }\\n}\\n\",\"keccak256\":\"0xeac97cea9e8e27a1a405f493d56456e845c2a3e6058e48d931f0f692865d3f9f\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506040516105d73803806105d78339818101604052602081101561003357600080fd5b505180600061004061009a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100938161009e565b5050610114565b3390565b6100b18161010e60201b6103821760201c565b6100ec5760405162461bcd60e51b81526004018080602001828103825260338152602001806105a46033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b610481806101236000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220e9d7f6e22783cbcada5463072ff2ae001e3cc27936a59d613ef9b7d47e56193964736f6c634300070600335570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220e9d7f6e22783cbcada5463072ff2ae001e3cc27936a59d613ef9b7d47e56193964736f6c63430007060033", + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\":\"ERC1155RaribleBeacon\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\\n transferOwnership(initialOwner);\\n }\\n}\\n\",\"keccak256\":\"0x205119bd4b50233b4a5e31cd22781c7f1113a71e5f30c1989777fd2dcded1dc1\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405161072d38038061072d8339818101604052604081101561003357600080fd5b508051602090910151816000610047610099565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602061070d833981519152908290a3506100888161009d565b506100928161010d565b5050610224565b3390565b6100b08161020f60201b6103821760201c565b6100eb5760405162461bcd60e51b81526004018080602001828103825260338152602001806106da6033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610115610099565b6001600160a01b0316610126610215565b6001600160a01b031614610181576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166101c65760405162461bcd60e51b81526004018080602001828103825260268152602001806106b46026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061070d83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b6000546001600160a01b031690565b610481806102336000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212207b033774eea47a59931d06a142ad00c8fd5989e2dd99aa0f7caebf8228056af464736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163748be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212207b033774eea47a59931d06a142ad00c8fd5989e2dd99aa0f7caebf8228056af464736f6c63430007060033", "devdoc": { "kind": "dev", "methods": { @@ -180,7 +200,7 @@ "type": "t_address" }, { - "astId": 6181, + "astId": 6517, "contract": "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol:ERC1155RaribleBeacon", "label": "_implementation", "offset": 0, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleFactoryC2.json index 9084cfa1b..3ec4564ff 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleFactoryC2.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleFactoryC2.json @@ -1,5 +1,5 @@ { - "address": "0x166F6180170f438Ddc38050a2B708d38c0890956", + "address": "0xB3CBeC4ADbc46a731E559FB7EbdaD1634B5851fB", "abi": [ { "inputs": [ @@ -17,6 +17,11 @@ "internalType": "address", "name": "_lazyTransferProxy", "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" } ], "stateMutability": "nonpayable", @@ -268,47 +273,62 @@ "type": "function" } ], - "transactionHash": "0x7d9610b5fb7a2f533ff76b516fc6777d6186384ff81dd339bb53fc226a67ed51", + "transactionHash": "0x79b6d380ccfbb27336678e58309c6f7dcfe98265151f9c23159c1604d596b90e", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x166F6180170f438Ddc38050a2B708d38c0890956", - "transactionIndex": 74, - "gasUsed": "1322001", - "logsBloom": "0x000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800010000000000000000000000000000000000000200000000000000000008000000000000000000000000000000005000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x3603159f7166416d47f81fae3c4289923c50bf572311828ea1685dc29473fb5d", - "transactionHash": "0x7d9610b5fb7a2f533ff76b516fc6777d6186384ff81dd339bb53fc226a67ed51", + "contractAddress": null, + "transactionIndex": 43, + "gasUsed": "1374604", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000101000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x28753fbd771b441b74f3c9cf942fd4138d8ed5829fd62551de29c27739878426", + "transactionHash": "0x79b6d380ccfbb27336678e58309c6f7dcfe98265151f9c23159c1604d596b90e", "logs": [ { - "transactionIndex": 74, - "blockNumber": 4793883, - "transactionHash": "0x7d9610b5fb7a2f533ff76b516fc6777d6186384ff81dd339bb53fc226a67ed51", - "address": "0x166F6180170f438Ddc38050a2B708d38c0890956", + "transactionIndex": 43, + "blockNumber": 5783759, + "transactionHash": "0x79b6d380ccfbb27336678e58309c6f7dcfe98265151f9c23159c1604d596b90e", + "address": "0xB3CBeC4ADbc46a731E559FB7EbdaD1634B5851fB", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 106, + "blockHash": "0x28753fbd771b441b74f3c9cf942fd4138d8ed5829fd62551de29c27739878426" + }, + { + "transactionIndex": 43, + "blockNumber": 5783759, + "transactionHash": "0x79b6d380ccfbb27336678e58309c6f7dcfe98265151f9c23159c1604d596b90e", + "address": "0xB3CBeC4ADbc46a731E559FB7EbdaD1634B5851fB", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 53, - "blockHash": "0x3603159f7166416d47f81fae3c4289923c50bf572311828ea1685dc29473fb5d" + "logIndex": 107, + "blockHash": "0x28753fbd771b441b74f3c9cf942fd4138d8ed5829fd62551de29c27739878426" } ], - "blockNumber": 4793883, - "cumulativeGasUsed": "8179118", + "blockNumber": 5783759, + "cumulativeGasUsed": "9063636", "status": 1, "byzantium": true }, "args": [ - "0xc798B273FaF23932Cf11177402C10C9b44D30Da2", - "0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af", - "0xC5BBd75789bD007784A0046094d19aCeA1A79eB1" + "0x792b701837681de8f2B61a27507c9E0a3f4d4b1D", + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, - "solcInputHash": "1e83608a8d677752f3c67873d3574235", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":\"ERC1155RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-1155/ERC1155Rarible.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\\n *\\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC1155RaribleFactoryC2 is Ownable{\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create1155RaribleProxy(address proxy);\\n event Create1155RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleProxy(beaconProxy);\\n }\\n \\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n\\n}\\n\",\"keccak256\":\"0xf2c0efef181a15847820a0eafa6c85af2502d48586283d1404fb10ab06388949\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n function __ERC1155Burnable_init() internal {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155Burnable_init_unchained();\\n }\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x04026ec0775a9613c66bf515f9454e3025214af3fbefbc5cf0bf639f05653cd0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Base.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n \\n isPrivate = true;\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n \\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0xf3d502238807629731e84e509bd669962e01492f857c1f1670d87a91c2a11921\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa4b84593337391e99f4106494088a16eadb94b68afee9d1f63dd23b042f62e31\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161167638038061167683398101604081905261002f916100e5565b60006100396100c5565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039485166001600160a01b031991821617909155600280549385169382169390931790925560038054919093169116179055610127565b3390565b80516001600160a01b03811681146100e057600080fd5b919050565b6000806000606084860312156100f9578283fd5b610102846100c9565b9250610110602085016100c9565b915061011e604085016100c9565b90509250925092565b611540806101366000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212206c5e5108127247c039b7978e7531eff2e8c38bd974b35df0d871707b6dbe041164736f6c63430007060033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a26469706673582212206c5e5108127247c039b7978e7531eff2e8c38bd974b35df0d871707b6dbe041164736f6c63430007060033", + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create1155RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":\"ERC1155RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-1155/ERC1155Rarible.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\\n *\\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC1155RaribleFactoryC2 is Ownable{\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create1155RaribleProxy(address proxy);\\n event Create1155RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n transferOwnership(initialOwner);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleProxy(beaconProxy);\\n }\\n \\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n\\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create1155RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n\\n}\\n\",\"keccak256\":\"0xafc4d548d88843b0e3642d55d28bf07415ad50950c9fbb22f8eeadd5a9774478\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x80b6ec138d4689d2e842777e9d61ff3a32a872ac61c91deebf3af5210517eb02\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Base.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n \\n isPrivate = true;\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC1155Rarible(initialOwner, _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0x9f9ce1325409a069ad166fa51ce4402e854f9da274e047a763a4f4e193925967\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7d305157d1d52073aa03b9bc8d8efae9ad010f32160a8eedbc19ca9549c9a7a6\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620017f7380380620017f7833981016040819052620000349162000205565b600062000040620000cb565b600080546001600160a01b0319166001600160a01b038316908117825560405192935091600080516020620017d7833981519152908290a350600180546001600160a01b038087166001600160a01b031992831617909255600280548684169083161790556003805492851692909116919091179055620000c181620000cf565b5050505062000261565b3390565b620000d9620000cb565b6001600160a01b0316620000ec620001d9565b6001600160a01b03161462000148576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166200018f5760405162461bcd60e51b8152600401808060200182810382526026815260200180620017b16026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020620017d783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b80516001600160a01b03811681146200020057600080fd5b919050565b600080600080608085870312156200021b578384fd5b6200022685620001e8565b93506200023660208601620001e8565b92506200024660408601620001e8565b91506200025660608601620001e8565b905092959194509250565b61154080620002716000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220d72849794df566f801d9145066ca8915bdfb2399d632f29f7ac136b4c6a377dd64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f5b961e37212df9fe72e2c84d894099793a4569a883f97d6413c4362e68c644b582604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507f7d676ffa0eb839c909c4588fca6dd0076b4036f58e821b53b7d754c0e4b9a4d082604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6002546003546040516060926361e0545960e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092630b9e21e960e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220d72849794df566f801d9145066ca8915bdfb2399d632f29f7ac136b4c6a377dd64736f6c63430007060033", "devdoc": { "details": "This contract is for creating proxy to access ERC1155Rarible token. The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.", "kind": "dev", @@ -341,7 +361,7 @@ "type": "t_address" }, { - "astId": 21914, + "astId": 22716, "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", "label": "beacon", "offset": 0, @@ -349,7 +369,7 @@ "type": "t_address" }, { - "astId": 21916, + "astId": 22718, "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", "label": "transferProxy", "offset": 0, @@ -357,7 +377,7 @@ "type": "t_address" }, { - "astId": 21918, + "astId": 22720, "contract": "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol:ERC1155RaribleFactoryC2", "label": "lazyTransferProxy", "offset": 0, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Implementation.json b/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Implementation.json index 63890fae1..7f9bfd79e 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Implementation.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0x18a2553ef1aaE12d9cd158821319e26A62feE90E", + "address": "0x97F85b5cD51C89bEB91a3C621C2954858429DFD4", "abi": [ { "anonymous": false, @@ -463,6 +463,49 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC1155Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1137,28 +1180,28 @@ "type": "function" } ], - "transactionHash": "0xd5b41001d3b7ff9398684a5e57b37d6b10e249cab618c7676d5eb3358e3082d1", + "transactionHash": "0xd6734fee2153b26d4f2671de449b5f1ea385f38981f2534af2aec6a03b7fec13", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x18a2553ef1aaE12d9cd158821319e26A62feE90E", - "transactionIndex": 41, - "gasUsed": "4817582", + "contractAddress": null, + "transactionIndex": 17, + "gasUsed": "4919445", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xf5fc9969b9011ddc0880bb517c6660edbac67e14d44eca50a6512d6be0e7c547", - "transactionHash": "0xd5b41001d3b7ff9398684a5e57b37d6b10e249cab618c7676d5eb3358e3082d1", + "blockHash": "0x9258c52fe44a40115f5c1f6b14138078597b6118213ca006c0035105918116f5", + "transactionHash": "0xd6734fee2153b26d4f2671de449b5f1ea385f38981f2534af2aec6a03b7fec13", "logs": [], - "blockNumber": 4793880, - "cumulativeGasUsed": "13395231", + "blockNumber": 5783756, + "cumulativeGasUsed": "7196545", "status": 1, "byzantium": true }, "args": [], "numDeployments": 1, - "solcInputHash": "1e83608a8d677752f3c67873d3574235", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnLazy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"BurnLazyBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"balanceOf(address,uint256)\":{\"details\":\"See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"See {IERC1155-safeBatchTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"See {IERC1155-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC1155-setApprovalForAll}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":\"ERC1155Rarible\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n function __ERC1155Burnable_init() internal {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155Burnable_init_unchained();\\n }\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x04026ec0775a9613c66bf515f9454e3025214af3fbefbc5cf0bf639f05653cd0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Base.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n \\n isPrivate = true;\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n \\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0xf3d502238807629731e84e509bd669962e01492f857c1f1670d87a91c2a11921\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa4b84593337391e99f4106494088a16eadb94b68afee9d1f63dd23b042f62e31\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50615623806100206000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c806371e2a65711610104578063cad96cca116100a2578063f242432a11610071578063f242432a146103f1578063f2fde38b14610404578063f5298aca14610417578063ffc4e0a71461042a576101d9565b8063cad96cca146103b0578063e07f2319146103c3578063e8a3d485146103d6578063e985e9c5146103de576101d9565b806395d89b41116100de57806395d89b411461036f578063983b2d5614610377578063a22cb4651461038a578063aa271e1a1461039d576101d9565b806371e2a65714610327578063891be9741461033a5780638da5cb5b1461035a576101d9565b80632eb2c2d61161017c57806361e054591161014b57806361e05459146102f15780636b20c454146103045780636c0360eb14610317578063715018a61461031f576101d9565b80632eb2c2d6146102985780633092afd5146102ab5780634e1273f4146102be57806355f804b3146102de576101d9565b80630e89341c116101b85780630e89341c1461023c5780630eaead671461024f578063173c43d2146102645780632a55205a14610277576101d9565b8062fdd58e146101de57806301ffc9a71461020757806306fdde0314610227575b600080fd5b6101f16101ec366004614963565b61043d565b6040516101fe91906151cf565b60405180910390f35b61021a610215366004614a5c565b6104af565b6040516101fe9190614f20565b61022f6104c2565b6040516101fe9190614f2b565b61022f61024a366004614d27565b610551565b61026261025d366004614cd0565b61055c565b005b610262610272366004614ab6565b610600565b61028a610285366004614d80565b610663565b6040516101fe929190614ebc565b6102626102a63660046147b1565b610771565b6102626102b936600461475d565b610a6f565b6102d16102cc3660046149fc565b610b1f565b6040516101fe9190614ee8565b6102626102ec366004614a84565b610c0a565b6102626102ff366004614b7d565b610caf565b6102626103123660046148c0565b610d16565b61022f610e9c565b610262610f34565b6102626103353660046149c2565b610fe0565b61034d610348366004614d27565b6110c9565b6040516101fe9190614ed5565b610362611159565b6040516101fe9190614e72565b61022f611168565b61026261038536600461475d565b6111c4565b610262610398366004614932565b611279565b61021a6103ab36600461475d565b611368565b61034d6103be366004614d27565b611387565b6102626103d1366004614d3f565b611402565b61022f611445565b61021a6103ec366004614779565b6114a1565b6102626103ff36600461485a565b6114b4565b61026261041236600461475d565b61166d565b61026261042536600461498e565b611770565b610262610438366004614c69565b6117ec565b60006001600160a01b0383166104845760405162461bcd60e51b815260040180806020018281038252602b81526020018061537b602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b60006104ba82611894565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105495780601f1061051e57610100808354040283529160200191610549565b820191906000526020600020905b81548152906001019060200180831161052c57829003601f168201915b505050505081565b60606104ba82611933565b6102965460ff16156105f057826060015160008151811061057957fe5b6020026020010151600001516001600160a01b0316610596611159565b6001600160a01b031614806105cb57506105cb83606001516000815181106105ba57fe5b602002602001015160000151611368565b6105f05760405162461bcd60e51b81526004016105e790614f69565b60405180910390fd5b6105fb838383611ac9565b505050565b61060e868686868686611dc5565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610642611ef7565b878760405161065393929190614e86565b60405180910390a1505050505050565b60008281526101fa602052604081205481906106845750600090508061076a565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561070057600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016106b1565b5050505090508060008151811061071357fe5b60209081029190910101515192506000805b825181101561075e5782818151811061073a57fe5b6020026020010151602001516001600160601b031682019150806001019050610725565b50612710908502049150505b9250929050565b81518351146107b15760405162461bcd60e51b81526004018080602001828103825260288152602001806155c66028913960400191505060405180910390fd5b6001600160a01b0384166107f65760405162461bcd60e51b815260040180806020018281038252602581526020018061543b6025913960400191505060405180910390fd5b6107fe611ef7565b6001600160a01b0316856001600160a01b031614806108245750610824856103ec611ef7565b61085f5760405162461bcd60e51b81526004018080602001828103825260328152602001806154606032913960400191505060405180910390fd5b6000610869611ef7565b9050610879818787878787610a67565b60005b845181101561097f57600085828151811061089357fe5b6020026020010151905060008583815181106108ab57fe5b60200260200101519050610918816040518060600160405280602a8152602001615505602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611efb9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a168152205461094f9082611f92565b60009283526097602090815260408085206001600160a01b038c168652909152909220919091555060010161087c565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610a055781810151838201526020016109ed565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610a44578181015183820152602001610a2c565b5050505090500194505050505060405180910390a4610a67818787878787611fec565b505050505050565b610a77611ef7565b6001600160a01b0316610a88611159565b6001600160a01b031614610ad1576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b60608151835114610b615760405162461bcd60e51b815260040180806020018281038252602981526020018061559d6029913960400191505060405180910390fd5b600083516001600160401b0381118015610b7a57600080fd5b50604051908082528060200260200182016040528015610ba4578160200160208202803683370190505b50905060005b8451811015610c0257610be3858281518110610bc257fe5b6020026020010151858381518110610bd657fe5b602002602001015161043d565b828281518110610bef57fe5b6020908102919091010152600101610baa565b509392505050565b610c12611ef7565b6001600160a01b0316610c23611159565b6001600160a01b031614610c6c576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b610c7581612262565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d681604051610ca49190614f2b565b60405180910390a150565b610cbd878787878686611dc5565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc610cf4611ef7565b8888604051610d0593929190614e86565b60405180910390a150505050505050565b8051825114610d375760405162461bcd60e51b81526004016105e790615118565b600082516001600160401b0381118015610d5057600080fd5b50604051908082528060200260200182016040528015610d7a578160200160208202803683370190505b509050600083516001600160401b0381118015610d9657600080fd5b50604051908082528060200260200182016040528015610dc0578160200160208202803683370190505b50905060005b8451811015610e3557610dff858281518110610dde57fe5b6020026020010151858381518110610df257fe5b6020026020010151612276565b848381518110610e0b57fe5b60200260200101848481518110610e1e57fe5b602090810291909101019190915252600101610dc6565b50610e418585846122eb565b846001600160a01b0316610e53611ef7565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051610e8d929190614efb565b60405180910390a35050505050565b61012f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f295780601f10610efe57610100808354040283529160200191610f29565b820191906000526020600020905b815481529060010190602001808311610f0c57829003601f168201915b505050505090505b90565b610f3c611ef7565b6001600160a01b0316610f4d611159565b6001600160a01b031614610f96576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b610fe8611ef7565b6001600160a01b0316610ff9611159565b6001600160a01b031614611042576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b60005b81518110156110c557600082828151811061105c57fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a350600101611045565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561114e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016110ff565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105495780601f1061051e57610100808354040283529160200191610549565b6111cc611ef7565b6001600160a01b03166111dd611159565b6001600160a01b031614611226576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b031661128b611ef7565b6001600160a01b031614156112d15760405162461bcd60e51b81526004018080602001828103825260298152602001806155746029913960400191505060405180910390fd5b80609860006112de611ef7565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611322611ef7565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa6020908152604080832080548251818502810185019093528083526060949293919290918401821561114e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016110ff565b816001600160a01b0316611414611ef7565b6001600160a01b03161461143a5760405162461bcd60e51b81526004016105e790615020565b6105fb83838361235f565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105495780601f1061051e57610100808354040283529160200191610549565b60006114ad838361240b565b9392505050565b6001600160a01b0384166114f95760405162461bcd60e51b815260040180806020018281038252602581526020018061543b6025913960400191505060405180910390fd5b611501611ef7565b6001600160a01b0316856001600160a01b031614806115275750611527856103ec611ef7565b6115625760405162461bcd60e51b81526004018080602001828103825260298152602001806153f06029913960400191505060405180910390fd5b600061156c611ef7565b905061158c81878761157d88612437565b61158688612437565b87610a67565b6115d3836040518060600160405280602a8152602001615505602a913960008781526097602090815260408083206001600160a01b038d1684529091529020549190611efb565b60008581526097602090815260408083206001600160a01b038b8116855292528083209390935587168152205461160a9084611f92565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a84169386169260008051602061535b83398151915292908290030190a4610a6781878787878761247c565b611675611ef7565b6001600160a01b0316611686611159565b6001600160a01b0316146116cf576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6001600160a01b0381166117145760405162461bcd60e51b81526004018080602001828103825260268152602001806153a66026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008061177d8484612276565b90925090508115611793576117938585846125ed565b80156117e557846001600160a01b03166117ab611ef7565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051610e8d9291906151f1565b5050505050565b60006117fc84866000015161043d565b90508181156118365782808310156118115750815b6118318686896000015184604051806020016040528060008152506114b4565b830390505b8015610a6757856060015160008151811061184d57fe5b6020026020010151600001516001600160a01b0316856001600160a01b0316146118895760405162461bcd60e51b81526004016105e790614f3e565b610a6786858361055c565b60006001600160e01b03198216636db15a0f60e01b14806118c557506001600160e01b0319821663656cb66560e11b145b806118e057506001600160e01b0319821663152a902d60e11b145b806118fb57506001600160e01b031982166301ffc9a760e01b145b8061191657506001600160e01b03198216636cdb3d1360e11b145b806104ba5750506001600160e01b0319166303a24d0760e21b1490565b600081815261012e6020908152604080832080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352606094938301828280156119c85780601f1061199d576101008083540402835291602001916119c8565b820191906000526020600020905b8154815290600101906020018083116119ab57829003601f168201915b5050505050905060006119d9610e9c565b90508051600014156119ed575090506104bd565b815115611a07576119fe8183612661565b925050506104bd565b80611a1185612846565b6040516020018083805190602001908083835b60208310611a435780518252601f199092019160209182019101611a24565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310611a8b5780518252601f199092019160209182019101611a6c565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c6000611ad8611ef7565b9050806001600160a01b0316826001600160a01b03161480611aff5750611aff82826114a1565b611b1b5760405162461bcd60e51b81526004016105e79061506f565b60008311611b3b5760405162461bcd60e51b81526004016105e790615045565b845160009081526101fc6020526040902054611ca4578460600151600081518110611b6257fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611b9e5760405162461bcd60e51b81526004016105e790614ff5565b6000856040015111611bc25760405162461bcd60e51b81526004016105e790614f96565b8460a001515185606001515114611bd857600080fd5b6000611be386612920565b905060005b866060015151811015611c5957600087606001518281518110611c0757fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611c5057611c5081848a60a001518581518110611c4357fe5b6020026020010151612b73565b50600101611be8565b50611c6c86600001518760400151612b7e565b611c7e86600001518760800151612be8565b611c9086600001518760600151612dd7565b611ca286600001518760200151612f86565b505b611cc3848660000151856040518060200160405280600081525061304a565b836001600160a01b0316826001600160a01b031614611d7457816001600160a01b031660006001600160a01b0316826001600160a01b031660008051602061535b833981519152886000015187604051611d1e9291906151f1565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b031660008051602061535b833981519152886000015187604051611d679291906151f1565b60405180910390a46117e5565b836001600160a01b031660006001600160a01b0316826001600160a01b031660008051602061535b833981519152886000015187604051611db69291906151f1565b60405180910390a45050505050565b600054610100900460ff1680611dde5750611dde61305c565b80611dec575060005460ff16155b611e275760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015611e52576000805460ff1961ff0019909116610100171660011790555b611e5a61306d565b611e62613167565b611e6a613169565b611e7261321a565b611e7a6132ba565b611e926040518060200160405280600081525061338a565b611e9b84613455565b611ea3613167565b611eab613507565b611eb587876135a4565b611ebd61321a565b611ec685612262565b611ed18360016135cd565b611edc8260016135cd565b8015611eee576000805461ff00191690555b50505050505050565b3390565b60008184841115611f8a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f4f578181015183820152602001611f37565b50505050905090810190601f168015611f7c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156114ad576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b611ffe846001600160a01b031661362d565b15610a6757836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561208c578181015183820152602001612074565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156120cb5781810151838201526020016120b3565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156121075781810151838201526020016120ef565b50505050905090810190601f1680156121345780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561215957600080fd5b505af192505050801561217e57506040513d602081101561217957600080fd5b505160015b6122135761218a615245565b8061219557506121dc565b60405162461bcd60e51b8152602060048201818152835160248401528351849391928392604401919085019080838360008315611f4f578181015183820152602001611f37565b60405162461bcd60e51b81526004018080602001828103825260348152602001806152ff6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b14611eee5760405162461bcd60e51b81526004018080602001828103825260288152602001806153336028913960400191505060405180910390fd5b80516110c59061012f9060208401906143a1565b806000606084901c612286611ef7565b6001600160a01b0316816001600160a01b031614156122e35783915060006122ad86613633565b905080156122d25760006122c087613646565b82039050808611156122d0578093505b505b6122dc8684613659565b8285039350505b509250929050565b6122f3611ef7565b6001600160a01b0316836001600160a01b031614806123195750612319836103ec611ef7565b6123545760405162461bcd60e51b81526004018080602001828103825260298152602001806153f06029913960400191505060405180910390fd5b6105fb838383613672565b60008381526101fa6020526040812054905b818110156117e55760008581526101fa6020526040902080546001600160a01b0386169190839081106123a057fe5b6000918252602090912001546001600160a01b031614156124035760008581526101fa602052604090208054849190839081106123d957fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612371565b6001600160a01b038116600090815260c9602052604081205460ff16806114ad57506114ad83836138e0565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061246b57fe5b602090810291909101015292915050565b61248e846001600160a01b031661362d565b15610a6757836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561251d578181015183820152602001612505565b50505050905090810190601f16801561254a5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561256d57600080fd5b505af192505050801561259257506040513d602081101561258d57600080fd5b505160015b61259e5761218a615245565b6001600160e01b0319811663f23a6e6160e01b14611eee5760405162461bcd60e51b81526004018080602001828103825260288152602001806153336028913960400191505060405180910390fd5b6125f5611ef7565b6001600160a01b0316836001600160a01b0316148061261b575061261b836103ec611ef7565b6126565760405162461bcd60e51b81526004018080602001828103825260298152602001806153f06029913960400191505060405180910390fd5b6105fb83838361390e565b8051825160609184918491101561272c5784846040516020018083805190602001908083835b602083106126a65780518252601f199092019160209182019101612687565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106126ee5780518252601f1990920191602091820191016126cf565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052925050506104a9565b60005b825181101561283c5782818151811061274457fe5b602001015160f81c60f81b6001600160f81b03191682828151811061276557fe5b01602001516001600160f81b031916146128345785856040516020018083805190602001908083835b602083106127ad5780518252601f19909201916020918201910161278e565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106127f55780518252601f1990920191602091820191016127d6565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405293505050506104a9565b60010161272f565b5092949350505050565b60608161286b57506040805180820190915260018152600360fc1b60208201526104bd565b8160005b811561288357600101600a8204915061286f565b6000816001600160401b038111801561289b57600080fd5b506040519080825280601f01601f1916602001820160405280156128c6576020820181803683370190505b50859350905060001982015b831561291757600a840660300160f81b828280600190039350815181106128f557fe5b60200101906001600160f81b031916908160001a905350600a840493506128d2565b50949350505050565b6000808260800151516001600160401b038111801561293e57600080fd5b50604051908082528060200260200182016040528015612968578160200160208202803683370190505b50905060005b8360800151518110156129ba5761299b8460800151828151811061298e57fe5b6020026020010151613a2f565b8282815181106129a757fe5b602090810291909101015260010161296e565b5060008360600151516001600160401b03811180156129d857600080fd5b50604051908082528060200260200182016040528015612a02578160200160208202803683370190505b50905060005b846060015151811015612a4757612a288560600151828151811061298e57fe5b828281518110612a3457fe5b6020908102919091010152600101612a08565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b83811015612ab0578181015183820152602001612a98565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b83811015612b01578181015183820152602001612ae9565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b6105fb838383613a9c565b60008281526101fc602052604090205415612b9857600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c90612bdc90849084906151f1565b60405180910390a15050565b6000805b8251811015612d8c5760006001600160a01b0316838281518110612c0c57fe5b6020026020010151600001516001600160a01b03161415612c74576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b828181518110612c8057fe5b6020026020010151602001516001600160601b031660001415612cea576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b828181518110612cf657fe5b6020026020010151602001516001600160601b0316820191506101fa6000858152602001908152602001600020838281518110612d2f57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501612bec565b506127108110612dcd5760405162461bcd60e51b815260040180806020018281038252602581526020018061554f6025913960400191505060405180910390fd5b6105fb8383613cde565b60008281526101fb6020526040812090805b8351811015612f255760006001600160a01b0316848281518110612e0957fe5b6020026020010151600001516001600160a01b03161415612e3c5760405162461bcd60e51b81526004016105e7906150e1565b838181518110612e4857fe5b6020026020010151602001516001600160601b031660001415612e7d5760405162461bcd60e51b81526004016105e790614fc0565b82848281518110612e8a57fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612f1b90859083908110612ef757fe5b6020026020010151602001516001600160601b031683611f9290919063ffffffff16565b9150600101612de9565b508061271014612f475760405162461bcd60e51b81526004016105e790615181565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612f789291906151d8565b60405180910390a150505050565b600082815261012e602090815260409091208251612fa6928401906143a1565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b612fd284611933565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561300c578181015183820152602001612ff4565b50505050905090810190601f1680156130395780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b61305684848484613d0f565b50505050565b60006130673061362d565b15905090565b600054610100900460ff1680613086575061308661305c565b80613094575060005460ff16155b6130cf5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff161580156130fa576000805460ff1961ff0019909116610100171660011790555b6000613104611ef7565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015613164576000805461ff00191690555b50565b565b600054610100900460ff1680613182575061318261305c565b80613190575060005460ff16155b6131cb5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff161580156131f6576000805460ff1961ff0019909116610100171660011790555b6132066301ffc9a760e01b613e21565b8015613164576000805461ff001916905550565b600054610100900460ff1680613233575061323361305c565b80613241575060005460ff16155b61327c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613206576000805460ff1961ff0019909116610100171660011790558015613164576000805461ff001916905550565b600054610100900460ff16806132d357506132d361305c565b806132e1575060005460ff16155b61331c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613347576000805460ff1961ff0019909116610100171660011790555b613206604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250613ea5565b600054610100900460ff16806133a357506133a361305c565b806133b1575060005460ff16155b6133ec5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613417576000805460ff1961ff0019909116610100171660011790555b61342082613f67565b613430636cdb3d1360e11b613e21565b6134406303a24d0760e21b613e21565b80156110c5576000805461ff00191690555050565b600054610100900460ff168061346e575061346e61305c565b8061347c575060005460ff16155b6134b75760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff161580156134e2576000805460ff1961ff0019909116610100171660011790555b81516134f6906102309060208501906143a1565b5061344063e8a3d48560e01b613e21565b600054610100900460ff1680613520575061352061305c565b8061352e575060005460ff16155b6135695760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613594576000805460ff1961ff0019909116610100171660011790555b61320663656cb66560e11b613e21565b81516135b8906102629060208501906143a1565b5080516105fb906102639060208401906143a1565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b0383166136b75760405162461bcd60e51b81526004018080602001828103825260238152602001806154e26023913960400191505060405180910390fd5b80518251146136f75760405162461bcd60e51b81526004018080602001828103825260288152602001806155c66028913960400191505060405180910390fd5b6000613701611ef7565b905061372181856000868660405180602001604052806000815250610a67565b60005b83518110156137ff576137b683828151811061373c57fe5b60200260200101516040518060600160405280602481526020016153cc602491396097600088868151811061376d57fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002054611efb9092919063ffffffff16565b609760008684815181106137c657fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101613724565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561388657818101518382015260200161386e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156138c55781810151838201526020016138ad565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b0383166139535760405162461bcd60e51b81526004018080602001828103825260238152602001806154e26023913960400191505060405180910390fd5b600061395d611ef7565b905061398d8185600061396f87612437565b61397887612437565b60405180602001604052806000815250610a67565b6139d4826040518060600160405280602481526020016153cc6024913960008681526097602090815260408083206001600160a01b038b1684529091529020549190611efb565b60008481526097602090815260408083206001600160a01b03808a168086529184528285209590955581518881529283018790528151939490939086169260008051602061535b83398151915292908290030190a450505050565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000613aa783613f7a565b90506000825160411415613ac257613abf8284613fc6565b90505b846001600160a01b0316816001600160a01b0316146117e557613aed856001600160a01b031661362d565b15613c665760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b83811015613b5c578181015183820152602001613b44565b50505050905090810190601f168015613b895780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015613ba757600080fd5b505afa158015613bbb573d6000803e3d6000fd5b505050506040513d6020811015613bd157600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b031990911614613c605760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611f4f578181015183820152602001611f37565b506117e5565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315611f4f578181015183820152602001611f37565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612bdc9291906151d8565b60008381526101fd6020526040812054613d2a908490611f92565b60008581526101fc6020526040902054909150811115613d5c5760405162461bcd60e51b81526004016105e7906150b7565b60008481526101fd602052604090208190556001600160a01b038516613d945760405162461bcd60e51b81526004016105e790615140565b6000613d9e611ef7565b9050613dbf81600088613db089612437565b613db989612437565b88610a67565b60008581526097602090815260408083206001600160a01b038a168452909152902054613dec9085611f92565b60008681526097602090815260408083206001600160a01b038b168452909152812091909155610a679082908888888861247c565b6001600160e01b03198082161415613e80576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff1680613ebe5750613ebe61305c565b80613ecc575060005460ff16155b613f075760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613f32576000805460ff1961ff0019909116610100171660011790555b8251602080850191909120835191840191909120610162919091556101635580156105fb576000805461ff0019169055505050565b80516110c59060999060208401906143a1565b6000613f84614046565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000815160411461401e576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61403c86828585614086565b9695505050505050565b60006140817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6140746142dc565b61407c6142e3565b6142ea565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156140e75760405162461bcd60e51b81526004018080602001828103825260228152602001806154196022913960400191505060405180910390fd5b6000601e8560ff1611156141c1576004850360ff16601b148061411057506004850360ff16601c145b61414b5760405162461bcd60e51b81526004018080602001828103825260228152602001806154c06022913960400191505060405180910390fd5b60016141568761434c565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156141b0573d6000803e3d6000fd5b505050602060405103519050614278565b8460ff16601b14806141d657508460ff16601c145b6142115760405162461bcd60e51b81526004018080602001828103825260228152602001806154c06022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561426b573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166142d3576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b60008383836142f761439d565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b4690565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826143d7576000855561441d565b82601f106143f057805160ff191683800117855561441d565b8280016001018555821561441d579182015b8281111561441d578251825591602001919060010190614402565b5061442992915061442d565b5090565b5b80821115614429576000815560010161442e565b80356104bd816152e9565b600082601f83011261445d578081fd5b8135602061447261446d83615222565b6151ff565b828152818101908583018385028701840188101561448e578586fd5b855b858110156144b55781356144a3816152e9565b84529284019290840190600101614490565b5090979650505050505050565b600082601f8301126144d2578081fd5b813560206144e261446d83615222565b82815281810190858301855b858110156144b557614505898684358b010161462c565b845292840192908401906001016144ee565b600082601f830112614527578081fd5b8135602061453761446d83615222565b82815281810190858301604080860288018501891015614555578687fd5b865b868110156145c45781838b03121561456d578788fd5b81518281018181106001600160401b038211171561458757fe5b83528335614594816152e9565b8152838701356001600160601b03811681146145ae57898afd5b8188015285529385019391810191600101614557565b509198975050505050505050565b600082601f8301126145e2578081fd5b813560206145f261446d83615222565b828152818101908583018385028701840188101561460e578586fd5b855b858110156144b557813584529284019290840190600101614610565b600082601f83011261463c578081fd5b81356001600160401b0381111561464f57fe5b614662601f8201601f19166020016151ff565b818152846020838601011115614676578283fd5b816020850160208301379081016020019190915292915050565b600060c082840312156146a1578081fd5b6146ab60c06151ff565b90508135815260208201356001600160401b03808211156146cb57600080fd5b6146d78583860161462c565b60208401526040840135604084015260608401359150808211156146fa57600080fd5b61470685838601614517565b6060840152608084013591508082111561471f57600080fd5b61472b85838601614517565b608084015260a084013591508082111561474457600080fd5b50614751848285016144c2565b60a08301525092915050565b60006020828403121561476e578081fd5b81356114ad816152e9565b6000806040838503121561478b578081fd5b8235614796816152e9565b915060208301356147a6816152e9565b809150509250929050565b600080600080600060a086880312156147c8578081fd5b85356147d3816152e9565b945060208601356147e3816152e9565b935060408601356001600160401b03808211156147fe578283fd5b61480a89838a016145d2565b9450606088013591508082111561481f578283fd5b61482b89838a016145d2565b93506080880135915080821115614840578283fd5b5061484d8882890161462c565b9150509295509295909350565b600080600080600060a08688031215614871578283fd5b853561487c816152e9565b9450602086013561488c816152e9565b9350604086013592506060860135915060808601356001600160401b038111156148b4578182fd5b61484d8882890161462c565b6000806000606084860312156148d4578081fd5b83356148df816152e9565b925060208401356001600160401b03808211156148fa578283fd5b614906878388016145d2565b9350604086013591508082111561491b578283fd5b50614928868287016145d2565b9150509250925092565b60008060408385031215614944578182fd5b823561494f816152e9565b9150602083013580151581146147a6578182fd5b60008060408385031215614975578182fd5b8235614980816152e9565b946020939093013593505050565b6000806000606084860312156149a2578081fd5b83356149ad816152e9565b95602085013595506040909401359392505050565b6000602082840312156149d3578081fd5b81356001600160401b038111156149e8578182fd5b6149f48482850161444d565b949350505050565b60008060408385031215614a0e578182fd5b82356001600160401b0380821115614a24578384fd5b614a308683870161444d565b93506020850135915080821115614a45578283fd5b50614a52858286016145d2565b9150509250929050565b600060208284031215614a6d578081fd5b81356001600160e01b0319811681146114ad578182fd5b600060208284031215614a95578081fd5b81356001600160401b03811115614aaa578182fd5b6149f48482850161462c565b60008060008060008060c08789031215614ace578384fd5b86356001600160401b0380821115614ae4578586fd5b614af08a838b0161462c565b97506020890135915080821115614b05578586fd5b614b118a838b0161462c565b96506040890135915080821115614b26578586fd5b614b328a838b0161462c565b95506060890135915080821115614b47578283fd5b50614b5489828a0161462c565b935050614b6360808801614442565b9150614b7160a08801614442565b90509295509295509295565b600080600080600080600060e0888a031215614b97578485fd5b87356001600160401b0380821115614bad578687fd5b614bb98b838c0161462c565b985060208a0135915080821115614bce578687fd5b614bda8b838c0161462c565b975060408a0135915080821115614bef578687fd5b614bfb8b838c0161462c565b965060608a0135915080821115614c10578283fd5b614c1c8b838c0161462c565b955060808a0135915080821115614c31578283fd5b50614c3e8a828b0161444d565b935050614c4d60a08901614442565b9150614c5b60c08901614442565b905092959891949750929550565b60008060008060808587031215614c7e578182fd5b84356001600160401b03811115614c93578283fd5b614c9f87828801614690565b9450506020850135614cb0816152e9565b92506040850135614cc0816152e9565b9396929550929360600135925050565b600080600060608486031215614ce4578081fd5b83356001600160401b03811115614cf9578182fd5b614d0586828701614690565b9350506020840135614d16816152e9565b929592945050506040919091013590565b600060208284031215614d38578081fd5b5035919050565b600080600060608486031215614d53578081fd5b833592506020840135614d65816152e9565b91506040840135614d75816152e9565b809150509250925092565b60008060408385031215614d92578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614ded57815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614db4565b509495945050505050565b6000815180845260208085019450808401835b83811015614ded57815187529582019590820190600101614e0b565b60008151808452815b81811015614e4c57602081850181015186830182015201614e30565b81811115614e5d5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614eaa90830185614e27565b828103604084015261403c8185614e27565b6001600160a01b03929092168252602082015260400190565b6000602082526114ad6020830184614da1565b6000602082526114ad6020830184614df8565b600060408252614f0e6040830185614df8565b82810360208401526142d38185614df8565b901515815260200190565b6000602082526114ad6020830184614e27565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526149f46040830184614da1565b918252602082015260400190565b6040518181016001600160401b038111828210171561521a57fe5b604052919050565b60006001600160401b0382111561523557fe5b5060209081020190565b60e01c90565b600060443d101561525557610f31565b600481823e6308c379a0615269825161523f565b1461527357610f31565b6040513d600319016004823e80513d6001600160401b0381602484011181841117156152a25750505050610f31565b828401925082519150808211156152bc5750505050610f31565b503d830160208284010111156152d457505050610f31565b601f01601f1916810160200160405291505090565b6001600160a01b038116811461316457600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a26469706673582212201fcf1585ef785faaf22ca08a73a9325e2c8445a52b799df379ca4d72f94061b164736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101d95760003560e01c806371e2a65711610104578063cad96cca116100a2578063f242432a11610071578063f242432a146103f1578063f2fde38b14610404578063f5298aca14610417578063ffc4e0a71461042a576101d9565b8063cad96cca146103b0578063e07f2319146103c3578063e8a3d485146103d6578063e985e9c5146103de576101d9565b806395d89b41116100de57806395d89b411461036f578063983b2d5614610377578063a22cb4651461038a578063aa271e1a1461039d576101d9565b806371e2a65714610327578063891be9741461033a5780638da5cb5b1461035a576101d9565b80632eb2c2d61161017c57806361e054591161014b57806361e05459146102f15780636b20c454146103045780636c0360eb14610317578063715018a61461031f576101d9565b80632eb2c2d6146102985780633092afd5146102ab5780634e1273f4146102be57806355f804b3146102de576101d9565b80630e89341c116101b85780630e89341c1461023c5780630eaead671461024f578063173c43d2146102645780632a55205a14610277576101d9565b8062fdd58e146101de57806301ffc9a71461020757806306fdde0314610227575b600080fd5b6101f16101ec366004614963565b61043d565b6040516101fe91906151cf565b60405180910390f35b61021a610215366004614a5c565b6104af565b6040516101fe9190614f20565b61022f6104c2565b6040516101fe9190614f2b565b61022f61024a366004614d27565b610551565b61026261025d366004614cd0565b61055c565b005b610262610272366004614ab6565b610600565b61028a610285366004614d80565b610663565b6040516101fe929190614ebc565b6102626102a63660046147b1565b610771565b6102626102b936600461475d565b610a6f565b6102d16102cc3660046149fc565b610b1f565b6040516101fe9190614ee8565b6102626102ec366004614a84565b610c0a565b6102626102ff366004614b7d565b610caf565b6102626103123660046148c0565b610d16565b61022f610e9c565b610262610f34565b6102626103353660046149c2565b610fe0565b61034d610348366004614d27565b6110c9565b6040516101fe9190614ed5565b610362611159565b6040516101fe9190614e72565b61022f611168565b61026261038536600461475d565b6111c4565b610262610398366004614932565b611279565b61021a6103ab36600461475d565b611368565b61034d6103be366004614d27565b611387565b6102626103d1366004614d3f565b611402565b61022f611445565b61021a6103ec366004614779565b6114a1565b6102626103ff36600461485a565b6114b4565b61026261041236600461475d565b61166d565b61026261042536600461498e565b611770565b610262610438366004614c69565b6117ec565b60006001600160a01b0383166104845760405162461bcd60e51b815260040180806020018281038252602b81526020018061537b602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b60006104ba82611894565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105495780601f1061051e57610100808354040283529160200191610549565b820191906000526020600020905b81548152906001019060200180831161052c57829003601f168201915b505050505081565b60606104ba82611933565b6102965460ff16156105f057826060015160008151811061057957fe5b6020026020010151600001516001600160a01b0316610596611159565b6001600160a01b031614806105cb57506105cb83606001516000815181106105ba57fe5b602002602001015160000151611368565b6105f05760405162461bcd60e51b81526004016105e790614f69565b60405180910390fd5b6105fb838383611ac9565b505050565b61060e868686868686611dc5565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610642611ef7565b878760405161065393929190614e86565b60405180910390a1505050505050565b60008281526101fa602052604081205481906106845750600090508061076a565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561070057600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016106b1565b5050505090508060008151811061071357fe5b60209081029190910101515192506000805b825181101561075e5782818151811061073a57fe5b6020026020010151602001516001600160601b031682019150806001019050610725565b50612710908502049150505b9250929050565b81518351146107b15760405162461bcd60e51b81526004018080602001828103825260288152602001806155c66028913960400191505060405180910390fd5b6001600160a01b0384166107f65760405162461bcd60e51b815260040180806020018281038252602581526020018061543b6025913960400191505060405180910390fd5b6107fe611ef7565b6001600160a01b0316856001600160a01b031614806108245750610824856103ec611ef7565b61085f5760405162461bcd60e51b81526004018080602001828103825260328152602001806154606032913960400191505060405180910390fd5b6000610869611ef7565b9050610879818787878787610a67565b60005b845181101561097f57600085828151811061089357fe5b6020026020010151905060008583815181106108ab57fe5b60200260200101519050610918816040518060600160405280602a8152602001615505602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611efb9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a168152205461094f9082611f92565b60009283526097602090815260408085206001600160a01b038c168652909152909220919091555060010161087c565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610a055781810151838201526020016109ed565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610a44578181015183820152602001610a2c565b5050505090500194505050505060405180910390a4610a67818787878787611fec565b505050505050565b610a77611ef7565b6001600160a01b0316610a88611159565b6001600160a01b031614610ad1576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b60608151835114610b615760405162461bcd60e51b815260040180806020018281038252602981526020018061559d6029913960400191505060405180910390fd5b600083516001600160401b0381118015610b7a57600080fd5b50604051908082528060200260200182016040528015610ba4578160200160208202803683370190505b50905060005b8451811015610c0257610be3858281518110610bc257fe5b6020026020010151858381518110610bd657fe5b602002602001015161043d565b828281518110610bef57fe5b6020908102919091010152600101610baa565b509392505050565b610c12611ef7565b6001600160a01b0316610c23611159565b6001600160a01b031614610c6c576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b610c7581612262565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d681604051610ca49190614f2b565b60405180910390a150565b610cbd878787878686611dc5565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc610cf4611ef7565b8888604051610d0593929190614e86565b60405180910390a150505050505050565b8051825114610d375760405162461bcd60e51b81526004016105e790615118565b600082516001600160401b0381118015610d5057600080fd5b50604051908082528060200260200182016040528015610d7a578160200160208202803683370190505b509050600083516001600160401b0381118015610d9657600080fd5b50604051908082528060200260200182016040528015610dc0578160200160208202803683370190505b50905060005b8451811015610e3557610dff858281518110610dde57fe5b6020026020010151858381518110610df257fe5b6020026020010151612276565b848381518110610e0b57fe5b60200260200101848481518110610e1e57fe5b602090810291909101019190915252600101610dc6565b50610e418585846122eb565b846001600160a01b0316610e53611ef7565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051610e8d929190614efb565b60405180910390a35050505050565b61012f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f295780601f10610efe57610100808354040283529160200191610f29565b820191906000526020600020905b815481529060010190602001808311610f0c57829003601f168201915b505050505090505b90565b610f3c611ef7565b6001600160a01b0316610f4d611159565b6001600160a01b031614610f96576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b610fe8611ef7565b6001600160a01b0316610ff9611159565b6001600160a01b031614611042576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b60005b81518110156110c557600082828151811061105c57fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a350600101611045565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561114e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016110ff565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105495780601f1061051e57610100808354040283529160200191610549565b6111cc611ef7565b6001600160a01b03166111dd611159565b6001600160a01b031614611226576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b031661128b611ef7565b6001600160a01b031614156112d15760405162461bcd60e51b81526004018080602001828103825260298152602001806155746029913960400191505060405180910390fd5b80609860006112de611ef7565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611322611ef7565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa6020908152604080832080548251818502810185019093528083526060949293919290918401821561114e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016110ff565b816001600160a01b0316611414611ef7565b6001600160a01b03161461143a5760405162461bcd60e51b81526004016105e790615020565b6105fb83838361235f565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105495780601f1061051e57610100808354040283529160200191610549565b60006114ad838361240b565b9392505050565b6001600160a01b0384166114f95760405162461bcd60e51b815260040180806020018281038252602581526020018061543b6025913960400191505060405180910390fd5b611501611ef7565b6001600160a01b0316856001600160a01b031614806115275750611527856103ec611ef7565b6115625760405162461bcd60e51b81526004018080602001828103825260298152602001806153f06029913960400191505060405180910390fd5b600061156c611ef7565b905061158c81878761157d88612437565b61158688612437565b87610a67565b6115d3836040518060600160405280602a8152602001615505602a913960008781526097602090815260408083206001600160a01b038d1684529091529020549190611efb565b60008581526097602090815260408083206001600160a01b038b8116855292528083209390935587168152205461160a9084611f92565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a84169386169260008051602061535b83398151915292908290030190a4610a6781878787878761247c565b611675611ef7565b6001600160a01b0316611686611159565b6001600160a01b0316146116cf576040805162461bcd60e51b8152602060048201819052602482015260008051602061552f833981519152604482015290519081900360640190fd5b6001600160a01b0381166117145760405162461bcd60e51b81526004018080602001828103825260268152602001806153a66026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60008061177d8484612276565b90925090508115611793576117938585846125ed565b80156117e557846001600160a01b03166117ab611ef7565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051610e8d9291906151f1565b5050505050565b60006117fc84866000015161043d565b90508181156118365782808310156118115750815b6118318686896000015184604051806020016040528060008152506114b4565b830390505b8015610a6757856060015160008151811061184d57fe5b6020026020010151600001516001600160a01b0316856001600160a01b0316146118895760405162461bcd60e51b81526004016105e790614f3e565b610a6786858361055c565b60006001600160e01b03198216636db15a0f60e01b14806118c557506001600160e01b0319821663656cb66560e11b145b806118e057506001600160e01b0319821663152a902d60e11b145b806118fb57506001600160e01b031982166301ffc9a760e01b145b8061191657506001600160e01b03198216636cdb3d1360e11b145b806104ba5750506001600160e01b0319166303a24d0760e21b1490565b600081815261012e6020908152604080832080548251601f60026000196101006001861615020190931692909204918201859004850281018501909352808352606094938301828280156119c85780601f1061199d576101008083540402835291602001916119c8565b820191906000526020600020905b8154815290600101906020018083116119ab57829003601f168201915b5050505050905060006119d9610e9c565b90508051600014156119ed575090506104bd565b815115611a07576119fe8183612661565b925050506104bd565b80611a1185612846565b6040516020018083805190602001908083835b60208310611a435780518252601f199092019160209182019101611a24565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310611a8b5780518252601f199092019160209182019101611a6c565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c6000611ad8611ef7565b9050806001600160a01b0316826001600160a01b03161480611aff5750611aff82826114a1565b611b1b5760405162461bcd60e51b81526004016105e79061506f565b60008311611b3b5760405162461bcd60e51b81526004016105e790615045565b845160009081526101fc6020526040902054611ca4578460600151600081518110611b6257fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611b9e5760405162461bcd60e51b81526004016105e790614ff5565b6000856040015111611bc25760405162461bcd60e51b81526004016105e790614f96565b8460a001515185606001515114611bd857600080fd5b6000611be386612920565b905060005b866060015151811015611c5957600087606001518281518110611c0757fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611c5057611c5081848a60a001518581518110611c4357fe5b6020026020010151612b73565b50600101611be8565b50611c6c86600001518760400151612b7e565b611c7e86600001518760800151612be8565b611c9086600001518760600151612dd7565b611ca286600001518760200151612f86565b505b611cc3848660000151856040518060200160405280600081525061304a565b836001600160a01b0316826001600160a01b031614611d7457816001600160a01b031660006001600160a01b0316826001600160a01b031660008051602061535b833981519152886000015187604051611d1e9291906151f1565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b031660008051602061535b833981519152886000015187604051611d679291906151f1565b60405180910390a46117e5565b836001600160a01b031660006001600160a01b0316826001600160a01b031660008051602061535b833981519152886000015187604051611db69291906151f1565b60405180910390a45050505050565b600054610100900460ff1680611dde5750611dde61305c565b80611dec575060005460ff16155b611e275760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015611e52576000805460ff1961ff0019909116610100171660011790555b611e5a61306d565b611e62613167565b611e6a613169565b611e7261321a565b611e7a6132ba565b611e926040518060200160405280600081525061338a565b611e9b84613455565b611ea3613167565b611eab613507565b611eb587876135a4565b611ebd61321a565b611ec685612262565b611ed18360016135cd565b611edc8260016135cd565b8015611eee576000805461ff00191690555b50505050505050565b3390565b60008184841115611f8a5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f4f578181015183820152602001611f37565b50505050905090810190601f168015611f7c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156114ad576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b611ffe846001600160a01b031661362d565b15610a6757836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561208c578181015183820152602001612074565b50505050905001848103835286818151815260200191508051906020019060200280838360005b838110156120cb5781810151838201526020016120b3565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156121075781810151838201526020016120ef565b50505050905090810190601f1680156121345780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561215957600080fd5b505af192505050801561217e57506040513d602081101561217957600080fd5b505160015b6122135761218a615245565b8061219557506121dc565b60405162461bcd60e51b8152602060048201818152835160248401528351849391928392604401919085019080838360008315611f4f578181015183820152602001611f37565b60405162461bcd60e51b81526004018080602001828103825260348152602001806152ff6034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b14611eee5760405162461bcd60e51b81526004018080602001828103825260288152602001806153336028913960400191505060405180910390fd5b80516110c59061012f9060208401906143a1565b806000606084901c612286611ef7565b6001600160a01b0316816001600160a01b031614156122e35783915060006122ad86613633565b905080156122d25760006122c087613646565b82039050808611156122d0578093505b505b6122dc8684613659565b8285039350505b509250929050565b6122f3611ef7565b6001600160a01b0316836001600160a01b031614806123195750612319836103ec611ef7565b6123545760405162461bcd60e51b81526004018080602001828103825260298152602001806153f06029913960400191505060405180910390fd5b6105fb838383613672565b60008381526101fa6020526040812054905b818110156117e55760008581526101fa6020526040902080546001600160a01b0386169190839081106123a057fe5b6000918252602090912001546001600160a01b031614156124035760008581526101fa602052604090208054849190839081106123d957fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101612371565b6001600160a01b038116600090815260c9602052604081205460ff16806114ad57506114ad83836138e0565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061246b57fe5b602090810291909101015292915050565b61248e846001600160a01b031661362d565b15610a6757836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561251d578181015183820152602001612505565b50505050905090810190601f16801561254a5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b15801561256d57600080fd5b505af192505050801561259257506040513d602081101561258d57600080fd5b505160015b61259e5761218a615245565b6001600160e01b0319811663f23a6e6160e01b14611eee5760405162461bcd60e51b81526004018080602001828103825260288152602001806153336028913960400191505060405180910390fd5b6125f5611ef7565b6001600160a01b0316836001600160a01b0316148061261b575061261b836103ec611ef7565b6126565760405162461bcd60e51b81526004018080602001828103825260298152602001806153f06029913960400191505060405180910390fd5b6105fb83838361390e565b8051825160609184918491101561272c5784846040516020018083805190602001908083835b602083106126a65780518252601f199092019160209182019101612687565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106126ee5780518252601f1990920191602091820191016126cf565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052925050506104a9565b60005b825181101561283c5782818151811061274457fe5b602001015160f81c60f81b6001600160f81b03191682828151811061276557fe5b01602001516001600160f81b031916146128345785856040516020018083805190602001908083835b602083106127ad5780518252601f19909201916020918201910161278e565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106127f55780518252601f1990920191602091820191016127d6565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405293505050506104a9565b60010161272f565b5092949350505050565b60608161286b57506040805180820190915260018152600360fc1b60208201526104bd565b8160005b811561288357600101600a8204915061286f565b6000816001600160401b038111801561289b57600080fd5b506040519080825280601f01601f1916602001820160405280156128c6576020820181803683370190505b50859350905060001982015b831561291757600a840660300160f81b828280600190039350815181106128f557fe5b60200101906001600160f81b031916908160001a905350600a840493506128d2565b50949350505050565b6000808260800151516001600160401b038111801561293e57600080fd5b50604051908082528060200260200182016040528015612968578160200160208202803683370190505b50905060005b8360800151518110156129ba5761299b8460800151828151811061298e57fe5b6020026020010151613a2f565b8282815181106129a757fe5b602090810291909101015260010161296e565b5060008360600151516001600160401b03811180156129d857600080fd5b50604051908082528060200260200182016040528015612a02578160200160208202803683370190505b50905060005b846060015151811015612a4757612a288560600151828151811061298e57fe5b828281518110612a3457fe5b6020908102919091010152600101612a08565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b83811015612ab0578181015183820152602001612a98565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b83811015612b01578181015183820152602001612ae9565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b6105fb838383613a9c565b60008281526101fc602052604090205415612b9857600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c90612bdc90849084906151f1565b60405180910390a15050565b6000805b8251811015612d8c5760006001600160a01b0316838281518110612c0c57fe5b6020026020010151600001516001600160a01b03161415612c74576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b828181518110612c8057fe5b6020026020010151602001516001600160601b031660001415612cea576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b828181518110612cf657fe5b6020026020010151602001516001600160601b0316820191506101fa6000858152602001908152602001600020838281518110612d2f57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501612bec565b506127108110612dcd5760405162461bcd60e51b815260040180806020018281038252602581526020018061554f6025913960400191505060405180910390fd5b6105fb8383613cde565b60008281526101fb6020526040812090805b8351811015612f255760006001600160a01b0316848281518110612e0957fe5b6020026020010151600001516001600160a01b03161415612e3c5760405162461bcd60e51b81526004016105e7906150e1565b838181518110612e4857fe5b6020026020010151602001516001600160601b031660001415612e7d5760405162461bcd60e51b81526004016105e790614fc0565b82848281518110612e8a57fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612f1b90859083908110612ef757fe5b6020026020010151602001516001600160601b031683611f9290919063ffffffff16565b9150600101612de9565b508061271014612f475760405162461bcd60e51b81526004016105e790615181565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612f789291906151d8565b60405180910390a150505050565b600082815261012e602090815260409091208251612fa6928401906143a1565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b612fd284611933565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561300c578181015183820152602001612ff4565b50505050905090810190601f1680156130395780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b61305684848484613d0f565b50505050565b60006130673061362d565b15905090565b600054610100900460ff1680613086575061308661305c565b80613094575060005460ff16155b6130cf5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff161580156130fa576000805460ff1961ff0019909116610100171660011790555b6000613104611ef7565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015613164576000805461ff00191690555b50565b565b600054610100900460ff1680613182575061318261305c565b80613190575060005460ff16155b6131cb5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff161580156131f6576000805460ff1961ff0019909116610100171660011790555b6132066301ffc9a760e01b613e21565b8015613164576000805461ff001916905550565b600054610100900460ff1680613233575061323361305c565b80613241575060005460ff16155b61327c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613206576000805460ff1961ff0019909116610100171660011790558015613164576000805461ff001916905550565b600054610100900460ff16806132d357506132d361305c565b806132e1575060005460ff16155b61331c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613347576000805460ff1961ff0019909116610100171660011790555b613206604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250613ea5565b600054610100900460ff16806133a357506133a361305c565b806133b1575060005460ff16155b6133ec5760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613417576000805460ff1961ff0019909116610100171660011790555b61342082613f67565b613430636cdb3d1360e11b613e21565b6134406303a24d0760e21b613e21565b80156110c5576000805461ff00191690555050565b600054610100900460ff168061346e575061346e61305c565b8061347c575060005460ff16155b6134b75760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff161580156134e2576000805460ff1961ff0019909116610100171660011790555b81516134f6906102309060208501906143a1565b5061344063e8a3d48560e01b613e21565b600054610100900460ff1680613520575061352061305c565b8061352e575060005460ff16155b6135695760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613594576000805460ff1961ff0019909116610100171660011790555b61320663656cb66560e11b613e21565b81516135b8906102629060208501906143a1565b5080516105fb906102639060208401906143a1565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b0383166136b75760405162461bcd60e51b81526004018080602001828103825260238152602001806154e26023913960400191505060405180910390fd5b80518251146136f75760405162461bcd60e51b81526004018080602001828103825260288152602001806155c66028913960400191505060405180910390fd5b6000613701611ef7565b905061372181856000868660405180602001604052806000815250610a67565b60005b83518110156137ff576137b683828151811061373c57fe5b60200260200101516040518060600160405280602481526020016153cc602491396097600088868151811061376d57fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002054611efb9092919063ffffffff16565b609760008684815181106137c657fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a168252909252902055600101613724565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b8381101561388657818101518382015260200161386e565b50505050905001838103825284818151815260200191508051906020019060200280838360005b838110156138c55781810151838201526020016138ad565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b0383166139535760405162461bcd60e51b81526004018080602001828103825260238152602001806154e26023913960400191505060405180910390fd5b600061395d611ef7565b905061398d8185600061396f87612437565b61397887612437565b60405180602001604052806000815250610a67565b6139d4826040518060600160405280602481526020016153cc6024913960008681526097602090815260408083206001600160a01b038b1684529091529020549190611efb565b60008481526097602090815260408083206001600160a01b03808a168086529184528285209590955581518881529283018790528151939490939086169260008051602061535b83398151915292908290030190a450505050565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000613aa783613f7a565b90506000825160411415613ac257613abf8284613fc6565b90505b846001600160a01b0316816001600160a01b0316146117e557613aed856001600160a01b031661362d565b15613c665760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b83811015613b5c578181015183820152602001613b44565b50505050905090810190601f168015613b895780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015613ba757600080fd5b505afa158015613bbb573d6000803e3d6000fd5b505050506040513d6020811015613bd157600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b031990911614613c605760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611f4f578181015183820152602001611f37565b506117e5565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315611f4f578181015183820152602001611f37565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612bdc9291906151d8565b60008381526101fd6020526040812054613d2a908490611f92565b60008581526101fc6020526040902054909150811115613d5c5760405162461bcd60e51b81526004016105e7906150b7565b60008481526101fd602052604090208190556001600160a01b038516613d945760405162461bcd60e51b81526004016105e790615140565b6000613d9e611ef7565b9050613dbf81600088613db089612437565b613db989612437565b88610a67565b60008581526097602090815260408083206001600160a01b038a168452909152902054613dec9085611f92565b60008681526097602090815260408083206001600160a01b038b168452909152812091909155610a679082908888888861247c565b6001600160e01b03198082161415613e80576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff1680613ebe5750613ebe61305c565b80613ecc575060005460ff16155b613f075760405162461bcd60e51b815260040180806020018281038252602e815260200180615492602e913960400191505060405180910390fd5b600054610100900460ff16158015613f32576000805460ff1961ff0019909116610100171660011790555b8251602080850191909120835191840191909120610162919091556101635580156105fb576000805461ff0019169055505050565b80516110c59060999060208401906143a1565b6000613f84614046565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000815160411461401e576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61403c86828585614086565b9695505050505050565b60006140817f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6140746142dc565b61407c6142e3565b6142ea565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156140e75760405162461bcd60e51b81526004018080602001828103825260228152602001806154196022913960400191505060405180910390fd5b6000601e8560ff1611156141c1576004850360ff16601b148061411057506004850360ff16601c145b61414b5760405162461bcd60e51b81526004018080602001828103825260228152602001806154c06022913960400191505060405180910390fd5b60016141568761434c565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156141b0573d6000803e3d6000fd5b505050602060405103519050614278565b8460ff16601b14806141d657508460ff16601c145b6142115760405162461bcd60e51b81526004018080602001828103825260228152602001806154c06022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561426b573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166142d3576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b60008383836142f761439d565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b4690565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826143d7576000855561441d565b82601f106143f057805160ff191683800117855561441d565b8280016001018555821561441d579182015b8281111561441d578251825591602001919060010190614402565b5061442992915061442d565b5090565b5b80821115614429576000815560010161442e565b80356104bd816152e9565b600082601f83011261445d578081fd5b8135602061447261446d83615222565b6151ff565b828152818101908583018385028701840188101561448e578586fd5b855b858110156144b55781356144a3816152e9565b84529284019290840190600101614490565b5090979650505050505050565b600082601f8301126144d2578081fd5b813560206144e261446d83615222565b82815281810190858301855b858110156144b557614505898684358b010161462c565b845292840192908401906001016144ee565b600082601f830112614527578081fd5b8135602061453761446d83615222565b82815281810190858301604080860288018501891015614555578687fd5b865b868110156145c45781838b03121561456d578788fd5b81518281018181106001600160401b038211171561458757fe5b83528335614594816152e9565b8152838701356001600160601b03811681146145ae57898afd5b8188015285529385019391810191600101614557565b509198975050505050505050565b600082601f8301126145e2578081fd5b813560206145f261446d83615222565b828152818101908583018385028701840188101561460e578586fd5b855b858110156144b557813584529284019290840190600101614610565b600082601f83011261463c578081fd5b81356001600160401b0381111561464f57fe5b614662601f8201601f19166020016151ff565b818152846020838601011115614676578283fd5b816020850160208301379081016020019190915292915050565b600060c082840312156146a1578081fd5b6146ab60c06151ff565b90508135815260208201356001600160401b03808211156146cb57600080fd5b6146d78583860161462c565b60208401526040840135604084015260608401359150808211156146fa57600080fd5b61470685838601614517565b6060840152608084013591508082111561471f57600080fd5b61472b85838601614517565b608084015260a084013591508082111561474457600080fd5b50614751848285016144c2565b60a08301525092915050565b60006020828403121561476e578081fd5b81356114ad816152e9565b6000806040838503121561478b578081fd5b8235614796816152e9565b915060208301356147a6816152e9565b809150509250929050565b600080600080600060a086880312156147c8578081fd5b85356147d3816152e9565b945060208601356147e3816152e9565b935060408601356001600160401b03808211156147fe578283fd5b61480a89838a016145d2565b9450606088013591508082111561481f578283fd5b61482b89838a016145d2565b93506080880135915080821115614840578283fd5b5061484d8882890161462c565b9150509295509295909350565b600080600080600060a08688031215614871578283fd5b853561487c816152e9565b9450602086013561488c816152e9565b9350604086013592506060860135915060808601356001600160401b038111156148b4578182fd5b61484d8882890161462c565b6000806000606084860312156148d4578081fd5b83356148df816152e9565b925060208401356001600160401b03808211156148fa578283fd5b614906878388016145d2565b9350604086013591508082111561491b578283fd5b50614928868287016145d2565b9150509250925092565b60008060408385031215614944578182fd5b823561494f816152e9565b9150602083013580151581146147a6578182fd5b60008060408385031215614975578182fd5b8235614980816152e9565b946020939093013593505050565b6000806000606084860312156149a2578081fd5b83356149ad816152e9565b95602085013595506040909401359392505050565b6000602082840312156149d3578081fd5b81356001600160401b038111156149e8578182fd5b6149f48482850161444d565b949350505050565b60008060408385031215614a0e578182fd5b82356001600160401b0380821115614a24578384fd5b614a308683870161444d565b93506020850135915080821115614a45578283fd5b50614a52858286016145d2565b9150509250929050565b600060208284031215614a6d578081fd5b81356001600160e01b0319811681146114ad578182fd5b600060208284031215614a95578081fd5b81356001600160401b03811115614aaa578182fd5b6149f48482850161462c565b60008060008060008060c08789031215614ace578384fd5b86356001600160401b0380821115614ae4578586fd5b614af08a838b0161462c565b97506020890135915080821115614b05578586fd5b614b118a838b0161462c565b96506040890135915080821115614b26578586fd5b614b328a838b0161462c565b95506060890135915080821115614b47578283fd5b50614b5489828a0161462c565b935050614b6360808801614442565b9150614b7160a08801614442565b90509295509295509295565b600080600080600080600060e0888a031215614b97578485fd5b87356001600160401b0380821115614bad578687fd5b614bb98b838c0161462c565b985060208a0135915080821115614bce578687fd5b614bda8b838c0161462c565b975060408a0135915080821115614bef578687fd5b614bfb8b838c0161462c565b965060608a0135915080821115614c10578283fd5b614c1c8b838c0161462c565b955060808a0135915080821115614c31578283fd5b50614c3e8a828b0161444d565b935050614c4d60a08901614442565b9150614c5b60c08901614442565b905092959891949750929550565b60008060008060808587031215614c7e578182fd5b84356001600160401b03811115614c93578283fd5b614c9f87828801614690565b9450506020850135614cb0816152e9565b92506040850135614cc0816152e9565b9396929550929360600135925050565b600080600060608486031215614ce4578081fd5b83356001600160401b03811115614cf9578182fd5b614d0586828701614690565b9350506020840135614d16816152e9565b929592945050506040919091013590565b600060208284031215614d38578081fd5b5035919050565b600080600060608486031215614d53578081fd5b833592506020840135614d65816152e9565b91506040840135614d75816152e9565b809150509250925092565b60008060408385031215614d92578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614ded57815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614db4565b509495945050505050565b6000815180845260208085019450808401835b83811015614ded57815187529582019590820190600101614e0b565b60008151808452815b81811015614e4c57602081850181015186830182015201614e30565b81811115614e5d5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614eaa90830185614e27565b828103604084015261403c8185614e27565b6001600160a01b03929092168252602082015260400190565b6000602082526114ad6020830184614da1565b6000602082526114ad6020830184614df8565b600060408252614f0e6040830185614df8565b82810360208401526142d38185614df8565b901515815260200190565b6000602082526114ad6020830184614e27565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b6000838252604060208301526149f46040830184614da1565b918252602082015260400190565b6040518181016001600160401b038111828210171561521a57fe5b604052919050565b60006001600160401b0382111561523557fe5b5060209081020190565b60e01c90565b600060443d101561525557610f31565b600481823e6308c379a0615269825161523f565b1461527357610f31565b6040513d600319016004823e80513d6001600160401b0381602484011181841117156152a25750505050610f31565b828401925082519150808211156152bc5750505050610f31565b503d830160208284010111156152d457505050610f31565b601f01601f1916810160200160405291505090565b6001600160a01b038116811461316457600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a26469706673582212201fcf1585ef785faaf22ca08a73a9325e2c8445a52b799df379ca4d72f94061b164736f6c63430007060033", + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"BurnLazy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"BurnLazyBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC1155RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Supply\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"values\",\"type\":\"uint256[]\"}],\"name\":\"TransferBatch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"TransferSingle\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"value\",\"type\":\"string\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"URI\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC1155Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC1155Rarible_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"}],\"name\":\"balanceOfBatch\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"burnBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"ids\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeBatchTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"uri\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"balanceOf(address,uint256)\":{\"details\":\"See {IERC1155-balanceOf}. Requirements: - `account` cannot be the zero address.\"},\"balanceOfBatch(address[],uint256[])\":{\"details\":\"See {IERC1155-balanceOfBatch}. Requirements: - `accounts` and `ids` must have the same length.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)\":{\"details\":\"See {IERC1155-safeBatchTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,uint256,bytes)\":{\"details\":\"See {IERC1155-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC1155-setApprovalForAll}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":\"ERC1155Rarible\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"../../introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"../../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\\n function __ERC1155Receiver_init() internal initializer {\\n __ERC165_init_unchained();\\n __ERC1155Receiver_init_unchained();\\n }\\n\\n function __ERC1155Receiver_init_unchained() internal initializer {\\n _registerInterface(\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC1155Upgradeable.sol\\\";\\n\\n/**\\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\\n /**\\n * @dev Returns the URI for token type `id`.\\n *\\n * If the `\\\\{id\\\\}` substring is present in the URI, it must be replaced by\\n * clients with the actual token type ID.\\n */\\n function uri(uint256 id) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0x2392b21b331e4e51770afd96dae9d54337d78c10ad3b365b892f5849594d6a4a\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"./LibERC1155LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC1155LazyMint is IERC1155Upgradeable {\\n\\n event Supply(\\n uint256 tokenId,\\n uint256 value\\n );\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address to,\\n uint256 _amount\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) external;\\n}\\n\",\"keccak256\":\"0x4b532bac4a391b204a67bf25358dcc7f0bafa46202199c1b04a9d7a1cdc0e8b5\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Base.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155BurnableUpgradeable.sol\\\";\\nimport \\\"./ERC1155DefaultApproval.sol\\\";\\nimport \\\"./ERC1155Lazy.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\\n string public name;\\n string public symbol;\\n\\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\\n event BaseUriChanged(string newBaseURI);\\n\\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\\n require(ids.length == amounts.length, \\\"ids != amounts\\\");\\n uint256[] memory leftToBurns = new uint256[](ids.length);\\n uint256[] memory lazyToBurns = new uint256[](ids.length);\\n for (uint i = 0; i < ids.length; ++i) {\\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\\n }\\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\\n }\\n\\n function burn(address account, uint256 id, uint256 amount) public virtual override {\\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\\n if (leftToBurn > 0) {\\n //token exists, burn Minted\\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\\n }\\n if (lazyToBurn > 0) {\\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\\n }\\n\\n }\\n\\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\\n leftToBurn = amount;\\n lazyToBurn = 0;\\n address creator = address(id >> 96);\\n if (creator == _msgSender()) {\\n lazyToBurn = amount;\\n uint supply = ERC1155Lazy._getSupply(id);\\n if (supply != 0) {\\n //calculate Lazy amount available for burn\\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\\n if (amount > lazyBalance) {//need to burn more than available\\n lazyToBurn = lazyBalance;\\n }\\n }\\n ERC1155Lazy._addMinted(id, lazyToBurn);\\n leftToBurn = amount - lazyToBurn;\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\\n ERC1155Lazy._mint(account, id, amount, data);\\n }\\n\\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\\n name = _name;\\n symbol = _symbol;\\n }\\n\\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xca993cb73256deb3790e977f96be5b47c0af424f5a34909d6bf77ab9b2b99e37\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\ncontract ERC1155BaseURI is ERC1155Upgradeable {\\n using StringsUpgradeable for uint;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n function uri(uint id) external view override virtual returns (string memory) {\\n return _tokenURI(id);\\n }\\n\\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\\n string memory __tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return __tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(__tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, __tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\\n _tokenURIs[tokenId] = _uri;\\n emit URI(_tokenURI(tokenId), tokenId);\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc641a1b12102faf05d941f5ab04b50325e29def454cc6cbaf0205d0ee54f9f75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\\n * own tokens and those that they have been approved to use.\\n *\\n * _Available since v3.1._\\n */\\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\\n\\n function __ERC1155Burnable_init_unchained() internal {\\n }\\n function burn(address account, uint256 id, uint256 value) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burn(account, id, value);\\n }\\n\\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\\n require(\\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n _burnBatch(account, ids, values);\\n }\\n \\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x80b6ec138d4689d2e842777e9d61ff3a32a872ac61c91deebf3af5210517eb02\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\n\\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xec5e9b2fa8873854d7f1cd47716154fa2e4df27e37e5c92e51075d4fd93b5d0d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\\\";\\nimport \\\"./Mint1155Validator.sol\\\";\\nimport \\\"./ERC1155BaseURI.sol\\\";\\n\\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n mapping(uint256 => LibPart.Part[]) private creators;\\n mapping(uint => uint) private supply;\\n mapping(uint => uint) private minted;\\n\\n function __ERC1155Lazy_init_unchained() internal {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC1155\\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\\n }\\n\\n function transferFromOrMint(\\n LibERC1155LazyMint.Mint1155Data memory data,\\n address from,\\n address to,\\n uint256 amount\\n ) override external {\\n uint balance = balanceOf(from, data.tokenId);\\n uint left = amount;\\n if (balance != 0) {\\n uint transfer = amount;\\n if (balance < amount) {\\n transfer = balance;\\n }\\n safeTransferFrom(from, to, data.tokenId, transfer, \\\"\\\");\\n left = amount - transfer;\\n }\\n if (left > 0) {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to, left);\\n }\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC1155: transfer caller is not approved\\\");\\n require(_amount > 0, \\\"amount incorrect\\\");\\n\\n if (supply[data.tokenId] == 0) {\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.supply > 0, \\\"supply incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n\\n bytes32 hash = LibERC1155LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _saveSupply(data.tokenId, data.supply);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n _mint(to, data.tokenId, _amount, \\\"\\\");\\n if (minter != to) {\\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\\n } else {\\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\\n }\\n }\\n\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\\n uint newMinted = amount.add(minted[id]);\\n require(newMinted <= supply[id], \\\"more than supply\\\");\\n minted[id] = newMinted;\\n\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n function _saveSupply(uint tokenId, uint _supply) internal {\\n require(supply[tokenId] == 0);\\n supply[tokenId] = _supply;\\n emit Supply(tokenId, _supply);\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function _addMinted(uint256 tokenId, uint amount) internal {\\n minted[tokenId] += amount;\\n }\\n\\n function _getMinted(uint256 tokenId) internal view returns (uint) {\\n return minted[tokenId];\\n }\\n\\n function _getSupply(uint256 tokenId) internal view returns (uint) {\\n return supply[tokenId];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xea3ef6c2d66df47562b5fd1a1024626c338dc681294cb044cce19ab0a7da6069\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC1155Base.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\\n event CreateERC1155Rarible(address owner, string name, string symbol);\\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n \\n isPrivate = true;\\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC1155Rarible(initialOwner, _name, _symbol);\\n }\\n\\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n __Ownable_init_unchained();\\n __ERC1155Lazy_init_unchained();\\n __ERC165_init_unchained();\\n __Context_init_unchained();\\n __Mint1155Validator_init_unchained();\\n __ERC1155_init_unchained(\\\"\\\");\\n __HasContractURI_init_unchained(contractURI);\\n __ERC1155Burnable_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __ERC1155Base_init_unchained(_name, _symbol);\\n __MinterAccessControl_init_unchained();\\n _setBaseURI(baseURI);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to, _amount);\\n }\\n}\\n\",\"keccak256\":\"0x9f9ce1325409a069ad166fa51ce4402e854f9da274e047a763a4f4e193925967\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\n\\n/**\\n *\\n * @dev Implementation of the basic standard multi-token.\\n * See https://eips.ethereum.org/EIPS/eip-1155\\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\\n *\\n * _Available since v3.1._\\n */\\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\\n using SafeMathUpgradeable for uint256;\\n using AddressUpgradeable for address;\\n\\n // Mapping from token ID to account balances\\n mapping (uint256 => mapping(address => uint256)) internal _balances;\\n\\n // Mapping from account to operator approvals\\n mapping (address => mapping(address => bool)) private _operatorApprovals;\\n\\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\\n string private _uri;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\\n *\\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\\n\\n /*\\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\\n */\\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\\n\\n /**\\n * @dev See {_setURI}.\\n */\\n function __ERC1155_init(string memory uri_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC1155_init_unchained(uri_);\\n }\\n\\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\\n _setURI(uri_);\\n\\n // register the supported interfaces to conform to ERC1155 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155);\\n\\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\\n }\\n\\n /**\\n * @dev See {IERC1155MetadataURI-uri}.\\n *\\n * This implementation returns the same URI for *all* token types. It relies\\n * on the token type ID substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * Clients calling this function must replace the `\\\\{id\\\\}` substring with the\\n * actual token type ID.\\n */\\n function uri(uint256) external view virtual override returns (string memory) {\\n return _uri;\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\\n require(account != address(0), \\\"ERC1155: balance query for the zero address\\\");\\n return _balances[id][account];\\n }\\n\\n /**\\n * @dev See {IERC1155-balanceOfBatch}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(\\n address[] memory accounts,\\n uint256[] memory ids\\n )\\n public\\n view\\n virtual\\n override\\n returns (uint256[] memory)\\n {\\n require(accounts.length == ids.length, \\\"ERC1155: accounts and ids length mismatch\\\");\\n\\n uint256[] memory batchBalances = new uint256[](accounts.length);\\n\\n for (uint256 i = 0; i < accounts.length; ++i) {\\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\\n }\\n\\n return batchBalances;\\n }\\n\\n /**\\n * @dev See {IERC1155-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(_msgSender() != operator, \\\"ERC1155: setting approval status for self\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC1155-isApprovedForAll}.\\n */\\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[account][operator];\\n }\\n\\n /**\\n * @dev See {IERC1155-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][from] = _balances[id][from].sub(amount, \\\"ERC1155: insufficient balance for transfer\\\");\\n _balances[id][to] = _balances[id][to].add(amount);\\n\\n emit TransferSingle(operator, from, to, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\\n }\\n\\n /**\\n * @dev See {IERC1155-safeBatchTransferFrom}.\\n */\\n function safeBatchTransferFrom(\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n public\\n virtual\\n override\\n {\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n require(to != address(0), \\\"ERC1155: transfer to the zero address\\\");\\n require(\\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\\n \\\"ERC1155: transfer caller is not owner nor approved\\\"\\n );\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\\n\\n for (uint256 i = 0; i < ids.length; ++i) {\\n uint256 id = ids[i];\\n uint256 amount = amounts[i];\\n\\n _balances[id][from] = _balances[id][from].sub(\\n amount,\\n \\\"ERC1155: insufficient balance for transfer\\\"\\n );\\n _balances[id][to] = _balances[id][to].add(amount);\\n }\\n\\n emit TransferBatch(operator, from, to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Sets a new URI for all token types, by relying on the token type ID\\n * substitution mechanism\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\\n *\\n * By this mechanism, any occurrence of the `\\\\{id\\\\}` substring in either the\\n * URI or any of the amounts in the JSON file at said URI will be replaced by\\n * clients with the token type ID.\\n *\\n * For example, the `https://token-cdn-domain/\\\\{id\\\\}.json` URI would be\\n * interpreted by clients as\\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\\n * for token type ID 0x4cce0.\\n *\\n * See {uri}.\\n *\\n * Because these URIs cannot be meaningfully represented by the {URI} event,\\n * this function emits no events.\\n */\\n function _setURI(string memory newuri) internal virtual {\\n _uri = newuri;\\n }\\n\\n /**\\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\\n require(account != address(0), \\\"ERC1155: mint to the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\\n\\n _balances[id][account] = _balances[id][account].add(amount);\\n emit TransferSingle(operator, address(0), account, id, amount);\\n\\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\\n require(to != address(0), \\\"ERC1155: mint to the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\\n }\\n\\n emit TransferBatch(operator, address(0), to, ids, amounts);\\n\\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\\n }\\n\\n /**\\n * @dev Destroys `amount` tokens of token type `id` from `account`\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n * - `account` must have at least `amount` tokens of token type `id`.\\n */\\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \\\"\\\");\\n\\n _balances[id][account] = _balances[id][account].sub(\\n amount,\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n\\n emit TransferSingle(operator, account, address(0), id, amount);\\n }\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n */\\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\\n require(account != address(0), \\\"ERC1155: burn from the zero address\\\");\\n require(ids.length == amounts.length, \\\"ERC1155: ids and amounts length mismatch\\\");\\n\\n address operator = _msgSender();\\n\\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \\\"\\\");\\n\\n for (uint i = 0; i < ids.length; ++i) {\\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\\n amounts[i],\\n \\\"ERC1155: burn amount exceeds balance\\\"\\n );\\n }\\n\\n emit TransferBatch(operator, account, address(0), ids, amounts);\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning, as well as batched variants.\\n *\\n * The same hook is called on both single and batched variants. For single\\n * transfers, the length of the `id` and `amount` arrays will be 1.\\n *\\n * Calling conditions (for each `id` and `amount` pair):\\n *\\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\\n * of token type `id` will be transferred to `to`.\\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\\n * for `to`.\\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\\n * will be burned.\\n * - `from` and `to` are never both zero.\\n * - `ids` and `amounts` have the same, non-zero length.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n internal\\n virtual\\n { }\\n\\n function _doSafeTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256 id,\\n uint256 amount,\\n bytes memory data\\n )\\n internal\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _doSafeBatchTransferAcceptanceCheck(\\n address operator,\\n address from,\\n address to,\\n uint256[] memory ids,\\n uint256[] memory amounts,\\n bytes memory data\\n )\\n private\\n {\\n if (to.isContract()) {\\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\\n revert(\\\"ERC1155: ERC1155Receiver rejected tokens\\\");\\n }\\n } catch Error(string memory reason) {\\n revert(reason);\\n } catch {\\n revert(\\\"ERC1155: transfer to non ERC1155Receiver implementer\\\");\\n }\\n }\\n }\\n\\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\\n uint256[] memory array = new uint256[](1);\\n array[0] = element;\\n\\n return array;\\n }\\n uint256[47] private __gap;\\n}\\n\",\"keccak256\":\"0x4da10dacf779838d98654b38150ce5d70bcb4f9c362a1f01fe3546b7412fa1bc\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"../erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\ncontract Mint1155Validator is ERC1271Validator {\\n function __Mint1155Validator_init_unchained() internal {\\n __EIP712_init_unchained(\\\"Mint1155\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7d305157d1d52073aa03b9bc8d8efae9ad010f32160a8eedbc19ca9549c9a7a6\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50615639806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c8063715018a61161010f578063cad96cca116100a2578063f242432a11610071578063f242432a1461040f578063f2fde38b14610422578063f5298aca14610435578063ffc4e0a714610448576101e4565b8063cad96cca146103ce578063e07f2319146103e1578063e8a3d485146103f4578063e985e9c5146103fc576101e4565b806395d89b41116100de57806395d89b411461038d578063983b2d5614610395578063a22cb465146103a8578063aa271e1a146103bb576101e4565b8063715018a61461033d57806371e2a65714610345578063891be974146103585780638da5cb5b14610378576101e4565b80632a55205a1161018757806355f804b31161015657806355f804b3146102fc57806361e054591461030f5780636b20c454146103225780636c0360eb14610335576101e4565b80632a55205a146102955780632eb2c2d6146102b65780633092afd5146102c95780634e1273f4146102dc576101e4565b80630e89341c116101c35780630e89341c146102475780630eaead671461025a578063173c43d21461026f578063220e4d7314610282576101e4565b8062fdd58e146101e957806301ffc9a71461021257806306fdde0314610232575b600080fd5b6101fc6101f73660046148bc565b61045b565b60405161020991906151e5565b60405180910390f35b6102256102203660046149b5565b6104cd565b6040516102099190614f36565b61023a6104e0565b6040516102099190614f41565b61023a610255366004614d3d565b61056f565b61026d610268366004614ce6565b61057a565b005b61026d61027d366004614a0f565b61061e565b61026d610290366004614ad6565b610681565b6102a86102a3366004614d96565b6106e7565b604051610209929190614ed2565b61026d6102c436600461470a565b6107f5565b61026d6102d73660046146b6565b610af3565b6102ef6102ea366004614955565b610ba3565b6040516102099190614efe565b61026d61030a3660046149dd565b610c8e565b61026d61031d366004614baf565b610d33565b61026d610330366004614819565b610d89565b61023a610f0f565b61026d610fa7565b61026d61035336600461491b565b611053565b61036b610366366004614d3d565b61113c565b6040516102099190614eeb565b6103806111cc565b6040516102099190614e88565b61023a6111db565b61026d6103a33660046146b6565b611237565b61026d6103b636600461488b565b6112ec565b6102256103c93660046146b6565b6113db565b61036b6103dc366004614d3d565b6113fa565b61026d6103ef366004614d55565b611475565b61023a6114b8565b61022561040a3660046146d2565b611514565b61026d61041d3660046147b3565b611527565b61026d6104303660046146b6565b6116e0565b61026d6104433660046148e7565b6117e3565b61026d610456366004614c7f565b61185f565b60006001600160a01b0383166104a25760405162461bcd60e51b815260040180806020018281038252602b815260200180615391602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b60006104d882611907565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105675780601f1061053c57610100808354040283529160200191610567565b820191906000526020600020905b81548152906001019060200180831161054a57829003601f168201915b505050505081565b60606104d8826119a6565b6102965460ff161561060e57826060015160008151811061059757fe5b6020026020010151600001516001600160a01b03166105b46111cc565b6001600160a01b031614806105e957506105e983606001516000815181106105d857fe5b6020026020010151600001516113db565b61060e5760405162461bcd60e51b815260040161060590614f7f565b60405180910390fd5b610619838383611b3c565b505050565b61062c868686868686611e38565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610660611f6a565b878760405161067193929190614e9c565b60405180910390a1505050505050565b61068f878787878787611e38565b610296805460ff191690556106a3816116e0565b7fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e8188886040516106d693929190614e9c565b60405180910390a150505050505050565b60008281526101fa60205260408120548190610708575060009050806107ee565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561078457600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610735565b5050505090508060008151811061079757fe5b60209081029190910101515192506000805b82518110156107e2578281815181106107be57fe5b6020026020010151602001516001600160601b0316820191508060010190506107a9565b50612710908502049150505b9250929050565b81518351146108355760405162461bcd60e51b81526004018080602001828103825260288152602001806155dc6028913960400191505060405180910390fd5b6001600160a01b03841661087a5760405162461bcd60e51b81526004018080602001828103825260258152602001806154516025913960400191505060405180910390fd5b610882611f6a565b6001600160a01b0316856001600160a01b031614806108a857506108a88561040a611f6a565b6108e35760405162461bcd60e51b81526004018080602001828103825260328152602001806154766032913960400191505060405180910390fd5b60006108ed611f6a565b90506108fd818787878787610aeb565b60005b8451811015610a0357600085828151811061091757fe5b60200260200101519050600085838151811061092f57fe5b6020026020010151905061099c816040518060600160405280602a815260200161551b602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611f6e9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a16815220546109d39082612005565b60009283526097602090815260408085206001600160a01b038c1686529091529092209190915550600101610900565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610a89578181015183820152602001610a71565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610ac8578181015183820152602001610ab0565b5050505090500194505050505060405180910390a4610aeb81878787878761205f565b505050505050565b610afb611f6a565b6001600160a01b0316610b0c6111cc565b6001600160a01b031614610b55576040805162461bcd60e51b81526020600482018190526024820152600080516020615545833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b60608151835114610be55760405162461bcd60e51b81526004018080602001828103825260298152602001806155b36029913960400191505060405180910390fd5b600083516001600160401b0381118015610bfe57600080fd5b50604051908082528060200260200182016040528015610c28578160200160208202803683370190505b50905060005b8451811015610c8657610c67858281518110610c4657fe5b6020026020010151858381518110610c5a57fe5b602002602001015161045b565b828281518110610c7357fe5b6020908102919091010152600101610c2e565b509392505050565b610c96611f6a565b6001600160a01b0316610ca76111cc565b6001600160a01b031614610cf0576040805162461bcd60e51b81526020600482018190526024820152600080516020615545833981519152604482015290519081900360640190fd5b610cf9816122d5565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d681604051610d289190614f41565b60405180910390a150565b610d41878787878686611e38565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc610d78611f6a565b88886040516106d693929190614e9c565b8051825114610daa5760405162461bcd60e51b81526004016106059061512e565b600082516001600160401b0381118015610dc357600080fd5b50604051908082528060200260200182016040528015610ded578160200160208202803683370190505b509050600083516001600160401b0381118015610e0957600080fd5b50604051908082528060200260200182016040528015610e33578160200160208202803683370190505b50905060005b8451811015610ea857610e72858281518110610e5157fe5b6020026020010151858381518110610e6557fe5b60200260200101516122e9565b848381518110610e7e57fe5b60200260200101848481518110610e9157fe5b602090810291909101019190915252600101610e39565b50610eb485858461235e565b846001600160a01b0316610ec6611f6a565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051610f00929190614f11565b60405180910390a35050505050565b61012f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f9c5780601f10610f7157610100808354040283529160200191610f9c565b820191906000526020600020905b815481529060010190602001808311610f7f57829003601f168201915b505050505090505b90565b610faf611f6a565b6001600160a01b0316610fc06111cc565b6001600160a01b031614611009576040805162461bcd60e51b81526020600482018190526024820152600080516020615545833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b61105b611f6a565b6001600160a01b031661106c6111cc565b6001600160a01b0316146110b5576040805162461bcd60e51b81526020600482018190526024820152600080516020615545833981519152604482015290519081900360640190fd5b60005b81518110156111385760008282815181106110cf57fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016110b8565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156111c157600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101611172565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105675780601f1061053c57610100808354040283529160200191610567565b61123f611f6a565b6001600160a01b03166112506111cc565b6001600160a01b031614611299576040805162461bcd60e51b81526020600482018190526024820152600080516020615545833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b03166112fe611f6a565b6001600160a01b031614156113445760405162461bcd60e51b815260040180806020018281038252602981526020018061558a6029913960400191505060405180910390fd5b8060986000611351611f6a565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611395611f6a565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa602090815260408083208054825181850281018501909352808352606094929391929091840182156111c157600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101611172565b816001600160a01b0316611487611f6a565b6001600160a01b0316146114ad5760405162461bcd60e51b815260040161060590615036565b6106198383836123d2565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105675780601f1061053c57610100808354040283529160200191610567565b6000611520838361247e565b9392505050565b6001600160a01b03841661156c5760405162461bcd60e51b81526004018080602001828103825260258152602001806154516025913960400191505060405180910390fd5b611574611f6a565b6001600160a01b0316856001600160a01b0316148061159a575061159a8561040a611f6a565b6115d55760405162461bcd60e51b81526004018080602001828103825260298152602001806154066029913960400191505060405180910390fd5b60006115df611f6a565b90506115ff8187876115f0886124aa565b6115f9886124aa565b87610aeb565b611646836040518060600160405280602a815260200161551b602a913960008781526097602090815260408083206001600160a01b038d1684529091529020549190611f6e565b60008581526097602090815260408083206001600160a01b038b8116855292528083209390935587168152205461167d9084612005565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a84169386169260008051602061537183398151915292908290030190a4610aeb8187878787876124ef565b6116e8611f6a565b6001600160a01b03166116f96111cc565b6001600160a01b031614611742576040805162461bcd60e51b81526020600482018190526024820152600080516020615545833981519152604482015290519081900360640190fd5b6001600160a01b0381166117875760405162461bcd60e51b81526004018080602001828103825260268152602001806153bc6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b6000806117f084846122e9565b9092509050811561180657611806858584612660565b801561185857846001600160a01b031661181e611f6a565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051610f00929190615207565b5050505050565b600061186f84866000015161045b565b90508181156118a95782808310156118845750815b6118a4868689600001518460405180602001604052806000815250611527565b830390505b8015610aeb5785606001516000815181106118c057fe5b6020026020010151600001516001600160a01b0316856001600160a01b0316146118fc5760405162461bcd60e51b815260040161060590614f54565b610aeb86858361057a565b60006001600160e01b03198216636db15a0f60e01b148061193857506001600160e01b0319821663656cb66560e11b145b8061195357506001600160e01b0319821663152a902d60e11b145b8061196e57506001600160e01b031982166301ffc9a760e01b145b8061198957506001600160e01b03198216636cdb3d1360e11b145b806104d85750506001600160e01b0319166303a24d0760e21b1490565b600081815261012e6020908152604080832080548251601f6002600019610100600186161502019093169290920491820185900485028101850190935280835260609493830182828015611a3b5780601f10611a1057610100808354040283529160200191611a3b565b820191906000526020600020905b815481529060010190602001808311611a1e57829003601f168201915b505050505090506000611a4c610f0f565b9050805160001415611a60575090506104db565b815115611a7a57611a7181836126d4565b925050506104db565b80611a84856128b9565b6040516020018083805190602001908083835b60208310611ab65780518252601f199092019160209182019101611a97565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310611afe5780518252601f199092019160209182019101611adf565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c6000611b4b611f6a565b9050806001600160a01b0316826001600160a01b03161480611b725750611b728282611514565b611b8e5760405162461bcd60e51b815260040161060590615085565b60008311611bae5760405162461bcd60e51b81526004016106059061505b565b845160009081526101fc6020526040902054611d17578460600151600081518110611bd557fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611c115760405162461bcd60e51b81526004016106059061500b565b6000856040015111611c355760405162461bcd60e51b815260040161060590614fac565b8460a001515185606001515114611c4b57600080fd5b6000611c5686612993565b905060005b866060015151811015611ccc57600087606001518281518110611c7a57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611cc357611cc381848a60a001518581518110611cb657fe5b6020026020010151612be6565b50600101611c5b565b50611cdf86600001518760400151612bf1565b611cf186600001518760800151612c5b565b611d0386600001518760600151612e4a565b611d1586600001518760200151612ff9565b505b611d3684866000015185604051806020016040528060008152506130bd565b836001600160a01b0316826001600160a01b031614611de757816001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615371833981519152886000015187604051611d91929190615207565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b0316600080516020615371833981519152886000015187604051611dda929190615207565b60405180910390a4611858565b836001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615371833981519152886000015187604051611e29929190615207565b60405180910390a45050505050565b600054610100900460ff1680611e515750611e516130cf565b80611e5f575060005460ff16155b611e9a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff16158015611ec5576000805460ff1961ff0019909116610100171660011790555b611ecd6130e0565b611ed56131da565b611edd6131dc565b611ee561328d565b611eed61332d565b611f0560405180602001604052806000815250613370565b611f0e8461343b565b611f166131da565b611f1e613460565b611f2887876134fd565b611f306131da565b611f39856122d5565b611f44836001613526565b611f4f826001613526565b8015611f61576000805461ff00191690555b50505050505050565b3390565b60008184841115611ffd5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611fc2578181015183820152602001611faa565b50505050905090810190601f168015611fef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611520576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b612071846001600160a01b0316613586565b15610aeb57836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156120ff5781810151838201526020016120e7565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561213e578181015183820152602001612126565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561217a578181015183820152602001612162565b50505050905090810190601f1680156121a75780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1580156121cc57600080fd5b505af19250505080156121f157506040513d60208110156121ec57600080fd5b505160015b612286576121fd61525b565b80612208575061224f565b60405162461bcd60e51b8152602060048201818152835160248401528351849391928392604401919085019080838360008315611fc2578181015183820152602001611faa565b60405162461bcd60e51b81526004018080602001828103825260348152602001806153156034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b14611f615760405162461bcd60e51b81526004018080602001828103825260288152602001806153496028913960400191505060405180910390fd5b80516111389061012f9060208401906142fa565b806000606084901c6122f9611f6a565b6001600160a01b0316816001600160a01b031614156123565783915060006123208661358c565b905080156123455760006123338761359f565b8203905080861115612343578093505b505b61234f86846135b2565b8285039350505b509250929050565b612366611f6a565b6001600160a01b0316836001600160a01b0316148061238c575061238c8361040a611f6a565b6123c75760405162461bcd60e51b81526004018080602001828103825260298152602001806154066029913960400191505060405180910390fd5b6106198383836135cb565b60008381526101fa6020526040812054905b818110156118585760008581526101fa6020526040902080546001600160a01b03861691908390811061241357fe5b6000918252602090912001546001600160a01b031614156124765760008581526101fa6020526040902080548491908390811061244c57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b6001016123e4565b6001600160a01b038116600090815260c9602052604081205460ff168061152057506115208383613839565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106124de57fe5b602090810291909101015292915050565b612501846001600160a01b0316613586565b15610aeb57836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612590578181015183820152602001612578565b50505050905090810190601f1680156125bd5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1580156125e057600080fd5b505af192505050801561260557506040513d602081101561260057600080fd5b505160015b612611576121fd61525b565b6001600160e01b0319811663f23a6e6160e01b14611f615760405162461bcd60e51b81526004018080602001828103825260288152602001806153496028913960400191505060405180910390fd5b612668611f6a565b6001600160a01b0316836001600160a01b0316148061268e575061268e8361040a611f6a565b6126c95760405162461bcd60e51b81526004018080602001828103825260298152602001806154066029913960400191505060405180910390fd5b610619838383613867565b8051825160609184918491101561279f5784846040516020018083805190602001908083835b602083106127195780518252601f1990920191602091820191016126fa565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106127615780518252601f199092019160209182019101612742565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052925050506104c7565b60005b82518110156128af578281815181106127b757fe5b602001015160f81c60f81b6001600160f81b0319168282815181106127d857fe5b01602001516001600160f81b031916146128a75785856040516020018083805190602001908083835b602083106128205780518252601f199092019160209182019101612801565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106128685780518252601f199092019160209182019101612849565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405293505050506104c7565b6001016127a2565b5092949350505050565b6060816128de57506040805180820190915260018152600360fc1b60208201526104db565b8160005b81156128f657600101600a820491506128e2565b6000816001600160401b038111801561290e57600080fd5b506040519080825280601f01601f191660200182016040528015612939576020820181803683370190505b50859350905060001982015b831561298a57600a840660300160f81b8282806001900393508151811061296857fe5b60200101906001600160f81b031916908160001a905350600a84049350612945565b50949350505050565b6000808260800151516001600160401b03811180156129b157600080fd5b506040519080825280602002602001820160405280156129db578160200160208202803683370190505b50905060005b836080015151811015612a2d57612a0e84608001518281518110612a0157fe5b6020026020010151613988565b828281518110612a1a57fe5b60209081029190910101526001016129e1565b5060008360600151516001600160401b0381118015612a4b57600080fd5b50604051908082528060200260200182016040528015612a75578160200160208202803683370190505b50905060005b846060015151811015612aba57612a9b85606001518281518110612a0157fe5b828281518110612aa757fe5b6020908102919091010152600101612a7b565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b83811015612b23578181015183820152602001612b0b565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b83811015612b74578181015183820152602001612b5c565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b6106198383836139f5565b60008281526101fc602052604090205415612c0b57600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c90612c4f9084908490615207565b60405180910390a15050565b6000805b8251811015612dff5760006001600160a01b0316838281518110612c7f57fe5b6020026020010151600001516001600160a01b03161415612ce7576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b828181518110612cf357fe5b6020026020010151602001516001600160601b031660001415612d5d576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b828181518110612d6957fe5b6020026020010151602001516001600160601b0316820191506101fa6000858152602001908152602001600020838281518110612da257fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501612c5f565b506127108110612e405760405162461bcd60e51b81526004018080602001828103825260258152602001806155656025913960400191505060405180910390fd5b6106198383613c37565b60008281526101fb6020526040812090805b8351811015612f985760006001600160a01b0316848281518110612e7c57fe5b6020026020010151600001516001600160a01b03161415612eaf5760405162461bcd60e51b8152600401610605906150f7565b838181518110612ebb57fe5b6020026020010151602001516001600160601b031660001415612ef05760405162461bcd60e51b815260040161060590614fd6565b82848281518110612efd57fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612f8e90859083908110612f6a57fe5b6020026020010151602001516001600160601b03168361200590919063ffffffff16565b9150600101612e5c565b508061271014612fba5760405162461bcd60e51b815260040161060590615197565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612feb9291906151ee565b60405180910390a150505050565b600082815261012e602090815260409091208251613019928401906142fa565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b613045846119a6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561307f578181015183820152602001613067565b50505050905090810190601f1680156130ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b6130c984848484613c68565b50505050565b60006130da30613586565b15905090565b600054610100900460ff16806130f957506130f96130cf565b80613107575060005460ff16155b6131425760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff1615801561316d576000805460ff1961ff0019909116610100171660011790555b6000613177611f6a565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156131d7576000805461ff00191690555b50565b565b600054610100900460ff16806131f557506131f56130cf565b80613203575060005460ff16155b61323e5760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff16158015613269576000805460ff1961ff0019909116610100171660011790555b6132796301ffc9a760e01b613d7a565b80156131d7576000805461ff001916905550565b600054610100900460ff16806132a657506132a66130cf565b806132b4575060005460ff16155b6132ef5760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff16158015613279576000805460ff1961ff00199091166101001716600117905580156131d7576000805461ff001916905550565b6131da604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250613dfe565b600054610100900460ff168061338957506133896130cf565b80613397575060005460ff16155b6133d25760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff161580156133fd576000805460ff1961ff0019909116610100171660011790555b61340682613ec0565b613416636cdb3d1360e11b613d7a565b6134266303a24d0760e21b613d7a565b8015611138576000805461ff00191690555050565b805161344f906102309060208401906142fa565b506131d763e8a3d48560e01b613d7a565b600054610100900460ff168061347957506134796130cf565b80613487575060005460ff16155b6134c25760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff161580156134ed576000805460ff1961ff0019909116610100171660011790555b61327963656cb66560e11b613d7a565b8151613511906102629060208501906142fa565b508051610619906102639060208401906142fa565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b0383166136105760405162461bcd60e51b81526004018080602001828103825260238152602001806154f86023913960400191505060405180910390fd5b80518251146136505760405162461bcd60e51b81526004018080602001828103825260288152602001806155dc6028913960400191505060405180910390fd5b600061365a611f6a565b905061367a81856000868660405180602001604052806000815250610aeb565b60005b83518110156137585761370f83828151811061369557fe5b60200260200101516040518060600160405280602481526020016153e260249139609760008886815181106136c657fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002054611f6e9092919063ffffffff16565b6097600086848151811061371f57fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a16825290925290205560010161367d565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156137df5781810151838201526020016137c7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561381e578181015183820152602001613806565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b0383166138ac5760405162461bcd60e51b81526004018080602001828103825260238152602001806154f86023913960400191505060405180910390fd5b60006138b6611f6a565b90506138e6818560006138c8876124aa565b6138d1876124aa565b60405180602001604052806000815250610aeb565b61392d826040518060600160405280602481526020016153e26024913960008681526097602090815260408083206001600160a01b038b1684529091529020549190611f6e565b60008481526097602090815260408083206001600160a01b03808a168086529184528285209590955581518881529283018790528151939490939086169260008051602061537183398151915292908290030190a450505050565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000613a0083613ed3565b90506000825160411415613a1b57613a188284613f1f565b90505b846001600160a01b0316816001600160a01b03161461185857613a46856001600160a01b0316613586565b15613bbf5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b83811015613ab5578181015183820152602001613a9d565b50505050905090810190601f168015613ae25780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015613b0057600080fd5b505afa158015613b14573d6000803e3d6000fd5b505050506040513d6020811015613b2a57600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b031990911614613bb95760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611fc2578181015183820152602001611faa565b50611858565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315611fc2578181015183820152602001611faa565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612c4f9291906151ee565b60008381526101fd6020526040812054613c83908490612005565b60008581526101fc6020526040902054909150811115613cb55760405162461bcd60e51b8152600401610605906150cd565b60008481526101fd602052604090208190556001600160a01b038516613ced5760405162461bcd60e51b815260040161060590615156565b6000613cf7611f6a565b9050613d1881600088613d09896124aa565b613d12896124aa565b88610aeb565b60008581526097602090815260408083206001600160a01b038a168452909152902054613d459085612005565b60008681526097602090815260408083206001600160a01b038b168452909152812091909155610aeb908290888888886124ef565b6001600160e01b03198082161415613dd9576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff1680613e175750613e176130cf565b80613e25575060005460ff16155b613e605760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff16158015613e8b576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912061016291909155610163558015610619576000805461ff0019169055505050565b80516111389060999060208401906142fa565b6000613edd613f9f565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60008151604114613f77576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a613f9586828585613fdf565b9695505050505050565b6000613fda7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613fcd614235565b613fd561423c565b614243565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156140405760405162461bcd60e51b815260040180806020018281038252602281526020018061542f6022913960400191505060405180910390fd5b6000601e8560ff16111561411a576004850360ff16601b148061406957506004850360ff16601c145b6140a45760405162461bcd60e51b81526004018080602001828103825260228152602001806154d66022913960400191505060405180910390fd5b60016140af876142a5565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614109573d6000803e3d6000fd5b5050506020604051035190506141d1565b8460ff16601b148061412f57508460ff16601c145b61416a5760405162461bcd60e51b81526004018080602001828103825260228152602001806154d66022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156141c4573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b03811661422c576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b60008383836142506142f6565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b4690565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826143305760008555614376565b82601f1061434957805160ff1916838001178555614376565b82800160010185558215614376579182015b8281111561437657825182559160200191906001019061435b565b50614382929150614386565b5090565b5b808211156143825760008155600101614387565b80356104db816152ff565b600082601f8301126143b6578081fd5b813560206143cb6143c683615238565b615215565b82815281810190858301838502870184018810156143e7578586fd5b855b8581101561440e5781356143fc816152ff565b845292840192908401906001016143e9565b5090979650505050505050565b600082601f83011261442b578081fd5b8135602061443b6143c683615238565b82815281810190858301855b8581101561440e5761445e898684358b0101614585565b84529284019290840190600101614447565b600082601f830112614480578081fd5b813560206144906143c683615238565b828152818101908583016040808602880185018910156144ae578687fd5b865b8681101561451d5781838b0312156144c6578788fd5b81518281018181106001600160401b03821117156144e057fe5b835283356144ed816152ff565b8152838701356001600160601b038116811461450757898afd5b81880152855293850193918101916001016144b0565b509198975050505050505050565b600082601f83011261453b578081fd5b8135602061454b6143c683615238565b8281528181019085830183850287018401881015614567578586fd5b855b8581101561440e57813584529284019290840190600101614569565b600082601f830112614595578081fd5b81356001600160401b038111156145a857fe5b6145bb601f8201601f1916602001615215565b8181528460208386010111156145cf578283fd5b816020850160208301379081016020019190915292915050565b600060c082840312156145fa578081fd5b61460460c0615215565b90508135815260208201356001600160401b038082111561462457600080fd5b61463085838601614585565b602084015260408401356040840152606084013591508082111561465357600080fd5b61465f85838601614470565b6060840152608084013591508082111561467857600080fd5b61468485838601614470565b608084015260a084013591508082111561469d57600080fd5b506146aa8482850161441b565b60a08301525092915050565b6000602082840312156146c7578081fd5b8135611520816152ff565b600080604083850312156146e4578081fd5b82356146ef816152ff565b915060208301356146ff816152ff565b809150509250929050565b600080600080600060a08688031215614721578081fd5b853561472c816152ff565b9450602086013561473c816152ff565b935060408601356001600160401b0380821115614757578283fd5b61476389838a0161452b565b94506060880135915080821115614778578283fd5b61478489838a0161452b565b93506080880135915080821115614799578283fd5b506147a688828901614585565b9150509295509295909350565b600080600080600060a086880312156147ca578283fd5b85356147d5816152ff565b945060208601356147e5816152ff565b9350604086013592506060860135915060808601356001600160401b0381111561480d578182fd5b6147a688828901614585565b60008060006060848603121561482d578081fd5b8335614838816152ff565b925060208401356001600160401b0380821115614853578283fd5b61485f8783880161452b565b93506040860135915080821115614874578283fd5b506148818682870161452b565b9150509250925092565b6000806040838503121561489d578182fd5b82356148a8816152ff565b9150602083013580151581146146ff578182fd5b600080604083850312156148ce578182fd5b82356148d9816152ff565b946020939093013593505050565b6000806000606084860312156148fb578081fd5b8335614906816152ff565b95602085013595506040909401359392505050565b60006020828403121561492c578081fd5b81356001600160401b03811115614941578182fd5b61494d848285016143a6565b949350505050565b60008060408385031215614967578182fd5b82356001600160401b038082111561497d578384fd5b614989868387016143a6565b9350602085013591508082111561499e578283fd5b506149ab8582860161452b565b9150509250929050565b6000602082840312156149c6578081fd5b81356001600160e01b031981168114611520578182fd5b6000602082840312156149ee578081fd5b81356001600160401b03811115614a03578182fd5b61494d84828501614585565b60008060008060008060c08789031215614a27578384fd5b86356001600160401b0380821115614a3d578586fd5b614a498a838b01614585565b97506020890135915080821115614a5e578586fd5b614a6a8a838b01614585565b96506040890135915080821115614a7f578586fd5b614a8b8a838b01614585565b95506060890135915080821115614aa0578283fd5b50614aad89828a01614585565b935050614abc6080880161439b565b9150614aca60a0880161439b565b90509295509295509295565b600080600080600080600060e0888a031215614af0578485fd5b87356001600160401b0380821115614b06578687fd5b614b128b838c01614585565b985060208a0135915080821115614b27578687fd5b614b338b838c01614585565b975060408a0135915080821115614b48578687fd5b614b548b838c01614585565b965060608a0135915080821115614b69578283fd5b50614b768a828b01614585565b945050614b856080890161439b565b9250614b9360a0890161439b565b9150614ba160c0890161439b565b905092959891949750929550565b600080600080600080600060e0888a031215614bc9578081fd5b87356001600160401b0380821115614bdf578283fd5b614beb8b838c01614585565b985060208a0135915080821115614c00578283fd5b614c0c8b838c01614585565b975060408a0135915080821115614c21578283fd5b614c2d8b838c01614585565b965060608a0135915080821115614c42578283fd5b614c4e8b838c01614585565b955060808a0135915080821115614c63578283fd5b50614c708a828b016143a6565b935050614b9360a0890161439b565b60008060008060808587031215614c94578182fd5b84356001600160401b03811115614ca9578283fd5b614cb5878288016145e9565b9450506020850135614cc6816152ff565b92506040850135614cd6816152ff565b9396929550929360600135925050565b600080600060608486031215614cfa578081fd5b83356001600160401b03811115614d0f578182fd5b614d1b868287016145e9565b9350506020840135614d2c816152ff565b929592945050506040919091013590565b600060208284031215614d4e578081fd5b5035919050565b600080600060608486031215614d69578081fd5b833592506020840135614d7b816152ff565b91506040840135614d8b816152ff565b809150509250925092565b60008060408385031215614da8578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614e0357815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614dca565b509495945050505050565b6000815180845260208085019450808401835b83811015614e0357815187529582019590820190600101614e21565b60008151808452815b81811015614e6257602081850181015186830182015201614e46565b81811115614e735782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614ec090830185614e3d565b8281036040840152613f958185614e3d565b6001600160a01b03929092168252602082015260400190565b6000602082526115206020830184614db7565b6000602082526115206020830184614e0e565b600060408252614f246040830185614e0e565b828103602084015261422c8185614e0e565b901515815260200190565b6000602082526115206020830184614e3d565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b60008382526040602083015261494d6040830184614db7565b918252602082015260400190565b6040518181016001600160401b038111828210171561523057fe5b604052919050565b60006001600160401b0382111561524b57fe5b5060209081020190565b60e01c90565b600060443d101561526b57610fa4565b600481823e6308c379a061527f8251615255565b1461528957610fa4565b6040513d600319016004823e80513d6001600160401b0381602484011181841117156152b85750505050610fa4565b828401925082519150808211156152d25750505050610fa4565b503d830160208284010111156152ea57505050610fa4565b601f01601f1916810160200160405291505090565b6001600160a01b03811681146131d757600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a2646970667358221220a980104437ed4ee22910047efa705a42d7f1272c6edf093fe8eb6a0243c7dc6964736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e45760003560e01c8063715018a61161010f578063cad96cca116100a2578063f242432a11610071578063f242432a1461040f578063f2fde38b14610422578063f5298aca14610435578063ffc4e0a714610448576101e4565b8063cad96cca146103ce578063e07f2319146103e1578063e8a3d485146103f4578063e985e9c5146103fc576101e4565b806395d89b41116100de57806395d89b411461038d578063983b2d5614610395578063a22cb465146103a8578063aa271e1a146103bb576101e4565b8063715018a61461033d57806371e2a65714610345578063891be974146103585780638da5cb5b14610378576101e4565b80632a55205a1161018757806355f804b31161015657806355f804b3146102fc57806361e054591461030f5780636b20c454146103225780636c0360eb14610335576101e4565b80632a55205a146102955780632eb2c2d6146102b65780633092afd5146102c95780634e1273f4146102dc576101e4565b80630e89341c116101c35780630e89341c146102475780630eaead671461025a578063173c43d21461026f578063220e4d7314610282576101e4565b8062fdd58e146101e957806301ffc9a71461021257806306fdde0314610232575b600080fd5b6101fc6101f73660046148bc565b61045b565b60405161020991906151e5565b60405180910390f35b6102256102203660046149b5565b6104cd565b6040516102099190614f36565b61023a6104e0565b6040516102099190614f41565b61023a610255366004614d3d565b61056f565b61026d610268366004614ce6565b61057a565b005b61026d61027d366004614a0f565b61061e565b61026d610290366004614ad6565b610681565b6102a86102a3366004614d96565b6106e7565b604051610209929190614ed2565b61026d6102c436600461470a565b6107f5565b61026d6102d73660046146b6565b610af3565b6102ef6102ea366004614955565b610ba3565b6040516102099190614efe565b61026d61030a3660046149dd565b610c8e565b61026d61031d366004614baf565b610d33565b61026d610330366004614819565b610d89565b61023a610f0f565b61026d610fa7565b61026d61035336600461491b565b611053565b61036b610366366004614d3d565b61113c565b6040516102099190614eeb565b6103806111cc565b6040516102099190614e88565b61023a6111db565b61026d6103a33660046146b6565b611237565b61026d6103b636600461488b565b6112ec565b6102256103c93660046146b6565b6113db565b61036b6103dc366004614d3d565b6113fa565b61026d6103ef366004614d55565b611475565b61023a6114b8565b61022561040a3660046146d2565b611514565b61026d61041d3660046147b3565b611527565b61026d6104303660046146b6565b6116e0565b61026d6104433660046148e7565b6117e3565b61026d610456366004614c7f565b61185f565b60006001600160a01b0383166104a25760405162461bcd60e51b815260040180806020018281038252602b815260200180615391602b913960400191505060405180910390fd5b5060008181526097602090815260408083206001600160a01b03861684529091529020545b92915050565b60006104d882611907565b90505b919050565b610262805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105675780601f1061053c57610100808354040283529160200191610567565b820191906000526020600020905b81548152906001019060200180831161054a57829003601f168201915b505050505081565b60606104d8826119a6565b6102965460ff161561060e57826060015160008151811061059757fe5b6020026020010151600001516001600160a01b03166105b46111cc565b6001600160a01b031614806105e957506105e983606001516000815181106105d857fe5b6020026020010151600001516113db565b61060e5760405162461bcd60e51b815260040161060590614f7f565b60405180910390fd5b610619838383611b3c565b505050565b61062c868686868686611e38565b610296805460ff191690557fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e610660611f6a565b878760405161067193929190614e9c565b60405180910390a1505050505050565b61068f878787878787611e38565b610296805460ff191690556106a3816116e0565b7fcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e8188886040516106d693929190614e9c565b60405180910390a150505050505050565b60008281526101fa60205260408120548190610708575060009050806107ee565b60008481526101fa6020908152604080832080548251818502810185019093528083529192909190849084015b8282101561078457600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610735565b5050505090508060008151811061079757fe5b60209081029190910101515192506000805b82518110156107e2578281815181106107be57fe5b6020026020010151602001516001600160601b0316820191508060010190506107a9565b50612710908502049150505b9250929050565b81518351146108355760405162461bcd60e51b81526004018080602001828103825260288152602001806155dc6028913960400191505060405180910390fd5b6001600160a01b03841661087a5760405162461bcd60e51b81526004018080602001828103825260258152602001806154516025913960400191505060405180910390fd5b610882611f6a565b6001600160a01b0316856001600160a01b031614806108a857506108a88561040a611f6a565b6108e35760405162461bcd60e51b81526004018080602001828103825260328152602001806154766032913960400191505060405180910390fd5b60006108ed611f6a565b90506108fd818787878787610aeb565b60005b8451811015610a0357600085828151811061091757fe5b60200260200101519050600085838151811061092f57fe5b6020026020010151905061099c816040518060600160405280602a815260200161551b602a91396097600086815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002054611f6e9092919063ffffffff16565b60008381526097602090815260408083206001600160a01b038e811685529252808320939093558a16815220546109d39082612005565b60009283526097602090815260408085206001600160a01b038c1686529091529092209190915550600101610900565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015610a89578181015183820152602001610a71565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015610ac8578181015183820152602001610ab0565b5050505090500194505050505060405180910390a4610aeb81878787878761205f565b505050505050565b610afb611f6a565b6001600160a01b0316610b0c6111cc565b6001600160a01b031614610b55576040805162461bcd60e51b81526020600482018190526024820152600080516020615545833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b60608151835114610be55760405162461bcd60e51b81526004018080602001828103825260298152602001806155b36029913960400191505060405180910390fd5b600083516001600160401b0381118015610bfe57600080fd5b50604051908082528060200260200182016040528015610c28578160200160208202803683370190505b50905060005b8451811015610c8657610c67858281518110610c4657fe5b6020026020010151858381518110610c5a57fe5b602002602001015161045b565b828281518110610c7357fe5b6020908102919091010152600101610c2e565b509392505050565b610c96611f6a565b6001600160a01b0316610ca76111cc565b6001600160a01b031614610cf0576040805162461bcd60e51b81526020600482018190526024820152600080516020615545833981519152604482015290519081900360640190fd5b610cf9816122d5565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d681604051610d289190614f41565b60405180910390a150565b610d41878787878686611e38565b610296805460ff191660011790557f7da6bc204c8c4856a6aff786a6cb81c59477c782191dc51837d644a8ad50f2cc610d78611f6a565b88886040516106d693929190614e9c565b8051825114610daa5760405162461bcd60e51b81526004016106059061512e565b600082516001600160401b0381118015610dc357600080fd5b50604051908082528060200260200182016040528015610ded578160200160208202803683370190505b509050600083516001600160401b0381118015610e0957600080fd5b50604051908082528060200260200182016040528015610e33578160200160208202803683370190505b50905060005b8451811015610ea857610e72858281518110610e5157fe5b6020026020010151858381518110610e6557fe5b60200260200101516122e9565b848381518110610e7e57fe5b60200260200101848481518110610e9157fe5b602090810291909101019190915252600101610e39565b50610eb485858461235e565b846001600160a01b0316610ec6611f6a565b6001600160a01b03167fcf3391513e21a9d4a0348f8e890080170eba18dc62db35b60d8a518b7088eb3a8684604051610f00929190614f11565b60405180910390a35050505050565b61012f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610f9c5780601f10610f7157610100808354040283529160200191610f9c565b820191906000526020600020905b815481529060010190602001808311610f7f57829003601f168201915b505050505090505b90565b610faf611f6a565b6001600160a01b0316610fc06111cc565b6001600160a01b031614611009576040805162461bcd60e51b81526020600482018190526024820152600080516020615545833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b61105b611f6a565b6001600160a01b031661106c6111cc565b6001600160a01b0316146110b5576040805162461bcd60e51b81526020600482018190526024820152600080516020615545833981519152604482015290519081900360640190fd5b60005b81518110156111385760008282815181106110cf57fe5b6020908102919091018101516001600160a01b03811660008181526102c89093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a3506001016110b8565b5050565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156111c157600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101611172565b505050509050919050565b6033546001600160a01b031690565b610263805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105675780601f1061053c57610100808354040283529160200191610567565b61123f611f6a565b6001600160a01b03166112506111cc565b6001600160a01b031614611299576040805162461bcd60e51b81526020600482018190526024820152600080516020615545833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c86020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b816001600160a01b03166112fe611f6a565b6001600160a01b031614156113445760405162461bcd60e51b815260040180806020018281038252602981526020018061558a6029913960400191505060405180910390fd5b8060986000611351611f6a565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611395611f6a565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c8602052604090205460ff1690565b60008181526101fa602090815260408083208054825181850281018501909352808352606094929391929091840182156111c157600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101611172565b816001600160a01b0316611487611f6a565b6001600160a01b0316146114ad5760405162461bcd60e51b815260040161060590615036565b6106198383836123d2565b610230805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156105675780601f1061053c57610100808354040283529160200191610567565b6000611520838361247e565b9392505050565b6001600160a01b03841661156c5760405162461bcd60e51b81526004018080602001828103825260258152602001806154516025913960400191505060405180910390fd5b611574611f6a565b6001600160a01b0316856001600160a01b0316148061159a575061159a8561040a611f6a565b6115d55760405162461bcd60e51b81526004018080602001828103825260298152602001806154066029913960400191505060405180910390fd5b60006115df611f6a565b90506115ff8187876115f0886124aa565b6115f9886124aa565b87610aeb565b611646836040518060600160405280602a815260200161551b602a913960008781526097602090815260408083206001600160a01b038d1684529091529020549190611f6e565b60008581526097602090815260408083206001600160a01b038b8116855292528083209390935587168152205461167d9084612005565b60008581526097602090815260408083206001600160a01b03808b168086529184529382902094909455805188815291820187905280518a84169386169260008051602061537183398151915292908290030190a4610aeb8187878787876124ef565b6116e8611f6a565b6001600160a01b03166116f96111cc565b6001600160a01b031614611742576040805162461bcd60e51b81526020600482018190526024820152600080516020615545833981519152604482015290519081900360640190fd5b6001600160a01b0381166117875760405162461bcd60e51b81526004018080602001828103825260268152602001806153bc6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b6000806117f084846122e9565b9092509050811561180657611806858584612660565b801561185857846001600160a01b031661181e611f6a565b6001600160a01b03167f5110a21391aa55386de41fe7a3e3dffb40132d38d629a113a7f4afff251b1a018684604051610f00929190615207565b5050505050565b600061186f84866000015161045b565b90508181156118a95782808310156118845750815b6118a4868689600001518460405180602001604052806000815250611527565b830390505b8015610aeb5785606001516000815181106118c057fe5b6020026020010151600001516001600160a01b0316856001600160a01b0316146118fc5760405162461bcd60e51b815260040161060590614f54565b610aeb86858361057a565b60006001600160e01b03198216636db15a0f60e01b148061193857506001600160e01b0319821663656cb66560e11b145b8061195357506001600160e01b0319821663152a902d60e11b145b8061196e57506001600160e01b031982166301ffc9a760e01b145b8061198957506001600160e01b03198216636cdb3d1360e11b145b806104d85750506001600160e01b0319166303a24d0760e21b1490565b600081815261012e6020908152604080832080548251601f6002600019610100600186161502019093169290920491820185900485028101850190935280835260609493830182828015611a3b5780601f10611a1057610100808354040283529160200191611a3b565b820191906000526020600020905b815481529060010190602001808311611a1e57829003601f168201915b505050505090506000611a4c610f0f565b9050805160001415611a60575090506104db565b815115611a7a57611a7181836126d4565b925050506104db565b80611a84856128b9565b6040516020018083805190602001908083835b60208310611ab65780518252601f199092019160209182019101611a97565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310611afe5780518252601f199092019160209182019101611adf565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b825160601c6000611b4b611f6a565b9050806001600160a01b0316826001600160a01b03161480611b725750611b728282611514565b611b8e5760405162461bcd60e51b815260040161060590615085565b60008311611bae5760405162461bcd60e51b81526004016106059061505b565b845160009081526101fc6020526040902054611d17578460600151600081518110611bd557fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614611c115760405162461bcd60e51b81526004016106059061500b565b6000856040015111611c355760405162461bcd60e51b815260040161060590614fac565b8460a001515185606001515114611c4b57600080fd5b6000611c5686612993565b905060005b866060015151811015611ccc57600087606001518281518110611c7a57fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b031614611cc357611cc381848a60a001518581518110611cb657fe5b6020026020010151612be6565b50600101611c5b565b50611cdf86600001518760400151612bf1565b611cf186600001518760800151612c5b565b611d0386600001518760600151612e4a565b611d1586600001518760200151612ff9565b505b611d3684866000015185604051806020016040528060008152506130bd565b836001600160a01b0316826001600160a01b031614611de757816001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615371833981519152886000015187604051611d91929190615207565b60405180910390a4836001600160a01b0316826001600160a01b0316826001600160a01b0316600080516020615371833981519152886000015187604051611dda929190615207565b60405180910390a4611858565b836001600160a01b031660006001600160a01b0316826001600160a01b0316600080516020615371833981519152886000015187604051611e29929190615207565b60405180910390a45050505050565b600054610100900460ff1680611e515750611e516130cf565b80611e5f575060005460ff16155b611e9a5760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff16158015611ec5576000805460ff1961ff0019909116610100171660011790555b611ecd6130e0565b611ed56131da565b611edd6131dc565b611ee561328d565b611eed61332d565b611f0560405180602001604052806000815250613370565b611f0e8461343b565b611f166131da565b611f1e613460565b611f2887876134fd565b611f306131da565b611f39856122d5565b611f44836001613526565b611f4f826001613526565b8015611f61576000805461ff00191690555b50505050505050565b3390565b60008184841115611ffd5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611fc2578181015183820152602001611faa565b50505050905090810190601f168015611fef5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611520576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b612071846001600160a01b0316613586565b15610aeb57836001600160a01b031663bc197c8187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b03168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b838110156120ff5781810151838201526020016120e7565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561213e578181015183820152602001612126565b50505050905001848103825285818151815260200191508051906020019080838360005b8381101561217a578181015183820152602001612162565b50505050905090810190601f1680156121a75780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b1580156121cc57600080fd5b505af19250505080156121f157506040513d60208110156121ec57600080fd5b505160015b612286576121fd61525b565b80612208575061224f565b60405162461bcd60e51b8152602060048201818152835160248401528351849391928392604401919085019080838360008315611fc2578181015183820152602001611faa565b60405162461bcd60e51b81526004018080602001828103825260348152602001806153156034913960400191505060405180910390fd5b6001600160e01b0319811663bc197c8160e01b14611f615760405162461bcd60e51b81526004018080602001828103825260288152602001806153496028913960400191505060405180910390fd5b80516111389061012f9060208401906142fa565b806000606084901c6122f9611f6a565b6001600160a01b0316816001600160a01b031614156123565783915060006123208661358c565b905080156123455760006123338761359f565b8203905080861115612343578093505b505b61234f86846135b2565b8285039350505b509250929050565b612366611f6a565b6001600160a01b0316836001600160a01b0316148061238c575061238c8361040a611f6a565b6123c75760405162461bcd60e51b81526004018080602001828103825260298152602001806154066029913960400191505060405180910390fd5b6106198383836135cb565b60008381526101fa6020526040812054905b818110156118585760008581526101fa6020526040902080546001600160a01b03861691908390811061241357fe5b6000918252602090912001546001600160a01b031614156124765760008581526101fa6020526040902080548491908390811061244c57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b6001016123e4565b6001600160a01b038116600090815260c9602052604081205460ff168061152057506115208383613839565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106124de57fe5b602090810291909101015292915050565b612501846001600160a01b0316613586565b15610aeb57836001600160a01b031663f23a6e6187878686866040518663ffffffff1660e01b815260040180866001600160a01b03168152602001856001600160a01b0316815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612590578181015183820152602001612578565b50505050905090810190601f1680156125bd5780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b1580156125e057600080fd5b505af192505050801561260557506040513d602081101561260057600080fd5b505160015b612611576121fd61525b565b6001600160e01b0319811663f23a6e6160e01b14611f615760405162461bcd60e51b81526004018080602001828103825260288152602001806153496028913960400191505060405180910390fd5b612668611f6a565b6001600160a01b0316836001600160a01b0316148061268e575061268e8361040a611f6a565b6126c95760405162461bcd60e51b81526004018080602001828103825260298152602001806154066029913960400191505060405180910390fd5b610619838383613867565b8051825160609184918491101561279f5784846040516020018083805190602001908083835b602083106127195780518252601f1990920191602091820191016126fa565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106127615780518252601f199092019160209182019101612742565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052925050506104c7565b60005b82518110156128af578281815181106127b757fe5b602001015160f81c60f81b6001600160f81b0319168282815181106127d857fe5b01602001516001600160f81b031916146128a75785856040516020018083805190602001908083835b602083106128205780518252601f199092019160209182019101612801565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106128685780518252601f199092019160209182019101612849565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405293505050506104c7565b6001016127a2565b5092949350505050565b6060816128de57506040805180820190915260018152600360fc1b60208201526104db565b8160005b81156128f657600101600a820491506128e2565b6000816001600160401b038111801561290e57600080fd5b506040519080825280601f01601f191660200182016040528015612939576020820181803683370190505b50859350905060001982015b831561298a57600a840660300160f81b8282806001900393508151811061296857fe5b60200101906001600160f81b031916908160001a905350600a84049350612945565b50949350505050565b6000808260800151516001600160401b03811180156129b157600080fd5b506040519080825280602002602001820160405280156129db578160200160208202803683370190505b50905060005b836080015151811015612a2d57612a0e84608001518281518110612a0157fe5b6020026020010151613988565b828281518110612a1a57fe5b60209081029190910101526001016129e1565b5060008360600151516001600160401b0381118015612a4b57600080fd5b50604051908082528060200260200182016040528015612a75578160200160208202803683370190505b50905060005b846060015151811015612aba57612a9b85606001518281518110612a0157fe5b828281518110612aa757fe5b6020908102919091010152600101612a7b565b507ffb988707ebb338694f318760b0fd5cfe756d00a2ade251fda110b80c336a3c7f846000015185604001518660200151805190602001208460405160200180828051906020019060200280838360005b83811015612b23578181015183820152602001612b0b565b50505050905001915050604051602081830303815290604052805190602001208660405160200180828051906020019060200280838360005b83811015612b74578181015183820152602001612b5c565b50505050905001915050604051602081830303815290604052805190602001206040516020018087815260200186815260200185815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012092505050919050565b6106198383836139f5565b60008281526101fc602052604090205415612c0b57600080fd5b60008281526101fc602052604090819020829055517f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c90612c4f9084908490615207565b60405180910390a15050565b6000805b8251811015612dff5760006001600160a01b0316838281518110612c7f57fe5b6020026020010151600001516001600160a01b03161415612ce7576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b828181518110612cf357fe5b6020026020010151602001516001600160601b031660001415612d5d576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b828181518110612d6957fe5b6020026020010151602001516001600160601b0316820191506101fa6000858152602001908152602001600020838281518110612da257fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501612c5f565b506127108110612e405760405162461bcd60e51b81526004018080602001828103825260258152602001806155656025913960400191505060405180910390fd5b6106198383613c37565b60008281526101fb6020526040812090805b8351811015612f985760006001600160a01b0316848281518110612e7c57fe5b6020026020010151600001516001600160a01b03161415612eaf5760405162461bcd60e51b8152600401610605906150f7565b838181518110612ebb57fe5b6020026020010151602001516001600160601b031660001415612ef05760405162461bcd60e51b815260040161060590614fd6565b82848281518110612efd57fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b0319909216919091179092169190911790558351612f8e90859083908110612f6a57fe5b6020026020010151602001516001600160601b03168361200590919063ffffffff16565b9150600101612e5c565b508061271014612fba5760405162461bcd60e51b815260040161060590615197565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f8484604051612feb9291906151ee565b60405180910390a150505050565b600082815261012e602090815260409091208251613019928401906142fa565b50817f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b613045846119a6565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561307f578181015183820152602001613067565b50505050905090810190601f1680156130ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390a25050565b6130c984848484613c68565b50505050565b60006130da30613586565b15905090565b600054610100900460ff16806130f957506130f96130cf565b80613107575060005460ff16155b6131425760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff1615801561316d576000805460ff1961ff0019909116610100171660011790555b6000613177611f6a565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156131d7576000805461ff00191690555b50565b565b600054610100900460ff16806131f557506131f56130cf565b80613203575060005460ff16155b61323e5760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff16158015613269576000805460ff1961ff0019909116610100171660011790555b6132796301ffc9a760e01b613d7a565b80156131d7576000805461ff001916905550565b600054610100900460ff16806132a657506132a66130cf565b806132b4575060005460ff16155b6132ef5760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff16158015613279576000805460ff1961ff00199091166101001716600117905580156131d7576000805461ff001916905550565b6131da604051806040016040528060088152602001674d696e743131353560c01b815250604051806040016040528060018152602001603160f81b815250613dfe565b600054610100900460ff168061338957506133896130cf565b80613397575060005460ff16155b6133d25760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff161580156133fd576000805460ff1961ff0019909116610100171660011790555b61340682613ec0565b613416636cdb3d1360e11b613d7a565b6134266303a24d0760e21b613d7a565b8015611138576000805461ff00191690555050565b805161344f906102309060208401906142fa565b506131d763e8a3d48560e01b613d7a565b600054610100900460ff168061347957506134796130cf565b80613487575060005460ff16155b6134c25760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff161580156134ed576000805460ff1961ff0019909116610100171660011790555b61327963656cb66560e11b613d7a565b8151613511906102629060208501906142fa565b508051610619906102639060208401906142fa565b6001600160a01b038216600081815260c96020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b3b151590565b60009081526101fc602052604090205490565b60009081526101fd602052604090205490565b60009182526101fd602052604090912080549091019055565b6001600160a01b0383166136105760405162461bcd60e51b81526004018080602001828103825260238152602001806154f86023913960400191505060405180910390fd5b80518251146136505760405162461bcd60e51b81526004018080602001828103825260288152602001806155dc6028913960400191505060405180910390fd5b600061365a611f6a565b905061367a81856000868660405180602001604052806000815250610aeb565b60005b83518110156137585761370f83828151811061369557fe5b60200260200101516040518060600160405280602481526020016153e260249139609760008886815181106136c657fe5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b0316815260200190815260200160002054611f6e9092919063ffffffff16565b6097600086848151811061371f57fe5b602090810291909101810151825281810192909252604090810160009081206001600160a01b038a16825290925290205560010161367d565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b838110156137df5781810151838201526020016137c7565b50505050905001838103825284818151815260200191508051906020019060200280838360005b8381101561381e578181015183820152602001613806565b5050505090500194505050505060405180910390a450505050565b6001600160a01b03918216600090815260986020908152604080832093909416825291909152205460ff1690565b6001600160a01b0383166138ac5760405162461bcd60e51b81526004018080602001828103825260238152602001806154f86023913960400191505060405180910390fd5b60006138b6611f6a565b90506138e6818560006138c8876124aa565b6138d1876124aa565b60405180602001604052806000815250610aeb565b61392d826040518060600160405280602481526020016153e26024913960008681526097602090815260408083206001600160a01b038b1684529091529020549190611f6e565b60008481526097602090815260408083206001600160a01b03808a168086529184528285209590955581518881529283018790528151939490939086169260008051602061537183398151915292908290030190a450505050565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000613a0083613ed3565b90506000825160411415613a1b57613a188284613f1f565b90505b846001600160a01b0316816001600160a01b03161461185857613a46856001600160a01b0316613586565b15613bbf5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b83811015613ab5578181015183820152602001613a9d565b50505050905090810190601f168015613ae25780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015613b0057600080fd5b505afa158015613b14573d6000803e3d6000fd5b505050506040513d6020811015613b2a57600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b031990911614613bb95760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611fc2578181015183820152602001611faa565b50611858565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315611fc2578181015183820152602001611faa565b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612c4f9291906151ee565b60008381526101fd6020526040812054613c83908490612005565b60008581526101fc6020526040902054909150811115613cb55760405162461bcd60e51b8152600401610605906150cd565b60008481526101fd602052604090208190556001600160a01b038516613ced5760405162461bcd60e51b815260040161060590615156565b6000613cf7611f6a565b9050613d1881600088613d09896124aa565b613d12896124aa565b88610aeb565b60008581526097602090815260408083206001600160a01b038a168452909152902054613d459085612005565b60008681526097602090815260408083206001600160a01b038b168452909152812091909155610aeb908290888888886124ef565b6001600160e01b03198082161415613dd9576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff1680613e175750613e176130cf565b80613e25575060005460ff16155b613e605760405162461bcd60e51b815260040180806020018281038252602e8152602001806154a8602e913960400191505060405180910390fd5b600054610100900460ff16158015613e8b576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912061016291909155610163558015610619576000805461ff0019169055505050565b80516111389060999060208401906142fa565b6000613edd613f9f565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60008151604114613f77576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a613f9586828585613fdf565b9695505050505050565b6000613fda7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613fcd614235565b613fd561423c565b614243565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156140405760405162461bcd60e51b815260040180806020018281038252602281526020018061542f6022913960400191505060405180910390fd5b6000601e8560ff16111561411a576004850360ff16601b148061406957506004850360ff16601c145b6140a45760405162461bcd60e51b81526004018080602001828103825260228152602001806154d66022913960400191505060405180910390fd5b60016140af876142a5565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015614109573d6000803e3d6000fd5b5050506020604051035190506141d1565b8460ff16601b148061412f57508460ff16601c145b61416a5760405162461bcd60e51b81526004018080602001828103825260228152602001806154d66022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156141c4573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b03811661422c576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6101625490565b6101635490565b60008383836142506142f6565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b4690565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826143305760008555614376565b82601f1061434957805160ff1916838001178555614376565b82800160010185558215614376579182015b8281111561437657825182559160200191906001019061435b565b50614382929150614386565b5090565b5b808211156143825760008155600101614387565b80356104db816152ff565b600082601f8301126143b6578081fd5b813560206143cb6143c683615238565b615215565b82815281810190858301838502870184018810156143e7578586fd5b855b8581101561440e5781356143fc816152ff565b845292840192908401906001016143e9565b5090979650505050505050565b600082601f83011261442b578081fd5b8135602061443b6143c683615238565b82815281810190858301855b8581101561440e5761445e898684358b0101614585565b84529284019290840190600101614447565b600082601f830112614480578081fd5b813560206144906143c683615238565b828152818101908583016040808602880185018910156144ae578687fd5b865b8681101561451d5781838b0312156144c6578788fd5b81518281018181106001600160401b03821117156144e057fe5b835283356144ed816152ff565b8152838701356001600160601b038116811461450757898afd5b81880152855293850193918101916001016144b0565b509198975050505050505050565b600082601f83011261453b578081fd5b8135602061454b6143c683615238565b8281528181019085830183850287018401881015614567578586fd5b855b8581101561440e57813584529284019290840190600101614569565b600082601f830112614595578081fd5b81356001600160401b038111156145a857fe5b6145bb601f8201601f1916602001615215565b8181528460208386010111156145cf578283fd5b816020850160208301379081016020019190915292915050565b600060c082840312156145fa578081fd5b61460460c0615215565b90508135815260208201356001600160401b038082111561462457600080fd5b61463085838601614585565b602084015260408401356040840152606084013591508082111561465357600080fd5b61465f85838601614470565b6060840152608084013591508082111561467857600080fd5b61468485838601614470565b608084015260a084013591508082111561469d57600080fd5b506146aa8482850161441b565b60a08301525092915050565b6000602082840312156146c7578081fd5b8135611520816152ff565b600080604083850312156146e4578081fd5b82356146ef816152ff565b915060208301356146ff816152ff565b809150509250929050565b600080600080600060a08688031215614721578081fd5b853561472c816152ff565b9450602086013561473c816152ff565b935060408601356001600160401b0380821115614757578283fd5b61476389838a0161452b565b94506060880135915080821115614778578283fd5b61478489838a0161452b565b93506080880135915080821115614799578283fd5b506147a688828901614585565b9150509295509295909350565b600080600080600060a086880312156147ca578283fd5b85356147d5816152ff565b945060208601356147e5816152ff565b9350604086013592506060860135915060808601356001600160401b0381111561480d578182fd5b6147a688828901614585565b60008060006060848603121561482d578081fd5b8335614838816152ff565b925060208401356001600160401b0380821115614853578283fd5b61485f8783880161452b565b93506040860135915080821115614874578283fd5b506148818682870161452b565b9150509250925092565b6000806040838503121561489d578182fd5b82356148a8816152ff565b9150602083013580151581146146ff578182fd5b600080604083850312156148ce578182fd5b82356148d9816152ff565b946020939093013593505050565b6000806000606084860312156148fb578081fd5b8335614906816152ff565b95602085013595506040909401359392505050565b60006020828403121561492c578081fd5b81356001600160401b03811115614941578182fd5b61494d848285016143a6565b949350505050565b60008060408385031215614967578182fd5b82356001600160401b038082111561497d578384fd5b614989868387016143a6565b9350602085013591508082111561499e578283fd5b506149ab8582860161452b565b9150509250929050565b6000602082840312156149c6578081fd5b81356001600160e01b031981168114611520578182fd5b6000602082840312156149ee578081fd5b81356001600160401b03811115614a03578182fd5b61494d84828501614585565b60008060008060008060c08789031215614a27578384fd5b86356001600160401b0380821115614a3d578586fd5b614a498a838b01614585565b97506020890135915080821115614a5e578586fd5b614a6a8a838b01614585565b96506040890135915080821115614a7f578586fd5b614a8b8a838b01614585565b95506060890135915080821115614aa0578283fd5b50614aad89828a01614585565b935050614abc6080880161439b565b9150614aca60a0880161439b565b90509295509295509295565b600080600080600080600060e0888a031215614af0578485fd5b87356001600160401b0380821115614b06578687fd5b614b128b838c01614585565b985060208a0135915080821115614b27578687fd5b614b338b838c01614585565b975060408a0135915080821115614b48578687fd5b614b548b838c01614585565b965060608a0135915080821115614b69578283fd5b50614b768a828b01614585565b945050614b856080890161439b565b9250614b9360a0890161439b565b9150614ba160c0890161439b565b905092959891949750929550565b600080600080600080600060e0888a031215614bc9578081fd5b87356001600160401b0380821115614bdf578283fd5b614beb8b838c01614585565b985060208a0135915080821115614c00578283fd5b614c0c8b838c01614585565b975060408a0135915080821115614c21578283fd5b614c2d8b838c01614585565b965060608a0135915080821115614c42578283fd5b614c4e8b838c01614585565b955060808a0135915080821115614c63578283fd5b50614c708a828b016143a6565b935050614b9360a0890161439b565b60008060008060808587031215614c94578182fd5b84356001600160401b03811115614ca9578283fd5b614cb5878288016145e9565b9450506020850135614cc6816152ff565b92506040850135614cd6816152ff565b9396929550929360600135925050565b600080600060608486031215614cfa578081fd5b83356001600160401b03811115614d0f578182fd5b614d1b868287016145e9565b9350506020840135614d2c816152ff565b929592945050506040919091013590565b600060208284031215614d4e578081fd5b5035919050565b600080600060608486031215614d69578081fd5b833592506020840135614d7b816152ff565b91506040840135614d8b816152ff565b809150509250925092565b60008060408385031215614da8578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b83811015614e0357815180516001600160a01b031688528301516001600160601b03168388015260409096019590820190600101614dca565b509495945050505050565b6000815180845260208085019450808401835b83811015614e0357815187529582019590820190600101614e21565b60008151808452815b81811015614e6257602081850181015186830182015201614e46565b81811115614e735782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614ec090830185614e3d565b8281036040840152613f958185614e3d565b6001600160a01b03929092168252602082015260400190565b6000602082526115206020830184614db7565b6000602082526115206020830184614e0e565b600060408252614f246040830185614e0e565b828103602084015261422c8185614e0e565b901515815260200190565b6000602082526115206020830184614e3d565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b60208082526010908201526f1cdd5c1c1b1e481a5b98dbdc9c9958dd60821b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526010908201526f185b5bdd5b9d081a5b98dbdc9c9958dd60821b604082015260600190565b60208082526028908201527f455243313135353a207472616e736665722063616c6c6572206973206e6f7420604082015267185c1c1c9bdd995960c21b606082015260800190565b60208082526010908201526f6d6f7265207468616e20737570706c7960801b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b6020808252600e908201526d69647320213d20616d6f756e747360901b604082015260600190565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b60008382526040602083015261494d6040830184614db7565b918252602082015260400190565b6040518181016001600160401b038111828210171561523057fe5b604052919050565b60006001600160401b0382111561524b57fe5b5060209081020190565b60e01c90565b600060443d101561526b57610fa4565b600481823e6308c379a061527f8251615255565b1461528957610fa4565b6040513d600319016004823e80513d6001600160401b0381602484011181841117156152b85750505050610fa4565b828401925082519150808211156152d25750505050610fa4565b503d830160208284010111156152ea57505050610fa4565b601f01601f1916810160200160405291505090565b6001600160a01b03811681146131d757600080fdfe455243313135353a207472616e7366657220746f206e6f6e2045524331313535526563656976657220696d706c656d656e746572455243313135353a204552433131353552656365697665722072656a656374656420746f6b656e73c3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62455243313135353a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656445434453413a20696e76616c6964207369676e6174757265202773272076616c7565455243313135353a207472616e7366657220746f20746865207a65726f2061646472657373455243313135353a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565455243313135353a206275726e2066726f6d20746865207a65726f2061646472657373455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572526f79616c747920746f74616c2076616c75652073686f756c64206265203c203130303030455243313135353a2073657474696e6720617070726f76616c2073746174757320666f722073656c66455243313135353a206163636f756e747320616e6420696473206c656e677468206d69736d61746368455243313135353a2069647320616e6420616d6f756e7473206c656e677468206d69736d61746368a2646970667358221220a980104437ed4ee22910047efa705a42d7f1272c6edf093fe8eb6a0243c7dc6964736f6c63430007060033", "devdoc": { "kind": "dev", "methods": { @@ -1268,7 +1311,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 24197, + "astId": 25039, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "_balances", "offset": 0, @@ -1276,7 +1319,7 @@ "type": "t_mapping(t_uint256,t_mapping(t_address,t_uint256))" }, { - "astId": 24203, + "astId": 25045, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "_operatorApprovals", "offset": 0, @@ -1284,7 +1327,7 @@ "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" }, { - "astId": 24205, + "astId": 25047, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "_uri", "offset": 0, @@ -1292,7 +1335,7 @@ "type": "t_string_storage" }, { - "astId": 25198, + "astId": 26040, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "__gap", "offset": 0, @@ -1300,7 +1343,7 @@ "type": "t_array(t_uint256)47_storage" }, { - "astId": 23240, + "astId": 24041, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "defaultApprovals", "offset": 0, @@ -1308,7 +1351,7 @@ "type": "t_mapping(t_address,t_bool)" }, { - "astId": 23290, + "astId": 24091, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "__gap", "offset": 0, @@ -1316,7 +1359,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 23230, + "astId": 24031, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "__gap", "offset": 0, @@ -1324,7 +1367,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 23020, + "astId": 23834, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "_tokenURIs", "offset": 0, @@ -1332,7 +1375,7 @@ "type": "t_mapping(t_uint256,t_string_storage)" }, { - "astId": 23022, + "astId": 23836, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "_baseURI", "offset": 0, @@ -1340,7 +1383,7 @@ "type": "t_string_storage" }, { - "astId": 23137, + "astId": 23951, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "__gap", "offset": 0, @@ -1372,7 +1415,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 25561, + "astId": 26448, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "__gap", "offset": 0, @@ -1380,7 +1423,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 25236, + "astId": 26076, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "__gap", "offset": 0, @@ -1388,23 +1431,23 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 20712, + "astId": 21496, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "royalties", "offset": 0, "slot": "506", - "type": "t_mapping(t_uint256,t_array(t_struct(Part)18518_storage)dyn_storage)" + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" }, { - "astId": 23327, + "astId": 24128, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "creators", "offset": 0, "slot": "507", - "type": "t_mapping(t_uint256,t_array(t_struct(Part)18518_storage)dyn_storage)" + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" }, { - "astId": 23331, + "astId": 24132, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "supply", "offset": 0, @@ -1412,7 +1455,7 @@ "type": "t_mapping(t_uint256,t_uint256)" }, { - "astId": 23335, + "astId": 24136, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "minted", "offset": 0, @@ -1420,7 +1463,7 @@ "type": "t_mapping(t_uint256,t_uint256)" }, { - "astId": 23948, + "astId": 24749, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "__gap", "offset": 0, @@ -1428,7 +1471,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 21537, + "astId": 22321, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "contractURI", "offset": 0, @@ -1436,7 +1479,7 @@ "type": "t_string_storage" }, { - "astId": 21571, + "astId": 22353, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "__gap", "offset": 0, @@ -1444,7 +1487,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 22644, + "astId": 23458, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "name", "offset": 0, @@ -1452,7 +1495,7 @@ "type": "t_string_storage" }, { - "astId": 22646, + "astId": 23460, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "symbol", "offset": 0, @@ -1460,7 +1503,7 @@ "type": "t_string_storage" }, { - "astId": 23005, + "astId": 23819, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "__gap", "offset": 0, @@ -1468,7 +1511,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 21577, + "astId": 22359, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "isPrivate", "offset": 0, @@ -1476,7 +1519,7 @@ "type": "t_bool" }, { - "astId": 21581, + "astId": 22363, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "__gap", "offset": 0, @@ -1484,7 +1527,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 21706, + "astId": 22488, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "_minters", "offset": 0, @@ -1492,7 +1535,7 @@ "type": "t_mapping(t_address,t_bool)" }, { - "astId": 21827, + "astId": 22605, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "__gap", "offset": 0, @@ -1511,8 +1554,8 @@ "label": "address payable", "numberOfBytes": "20" }, - "t_array(t_struct(Part)18518_storage)dyn_storage": { - "base": "t_struct(Part)18518_storage", + "t_array(t_struct(Part)19269_storage)dyn_storage": { + "base": "t_struct(Part)19269_storage", "encoding": "dynamic_array", "label": "struct LibPart.Part[]", "numberOfBytes": "32" @@ -1578,12 +1621,12 @@ "numberOfBytes": "32", "value": "t_bool" }, - "t_mapping(t_uint256,t_array(t_struct(Part)18518_storage)dyn_storage)": { + "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)": { "encoding": "mapping", "key": "t_uint256", "label": "mapping(uint256 => struct LibPart.Part[])", "numberOfBytes": "32", - "value": "t_array(t_struct(Part)18518_storage)dyn_storage" + "value": "t_array(t_struct(Part)19269_storage)dyn_storage" }, "t_mapping(t_uint256,t_mapping(t_address,t_uint256))": { "encoding": "mapping", @@ -1611,12 +1654,12 @@ "label": "string", "numberOfBytes": "32" }, - "t_struct(Part)18518_storage": { + "t_struct(Part)19269_storage": { "encoding": "inplace", "label": "struct LibPart.Part", "members": [ { - "astId": 18515, + "astId": 19266, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "account", "offset": 0, @@ -1624,7 +1667,7 @@ "type": "t_address_payable" }, { - "astId": 18517, + "astId": 19268, "contract": "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol:ERC1155Rarible", "label": "value", "offset": 20, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Proxy.json b/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Proxy.json index 4465ae9bc..c7e1a60c3 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Proxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "abi": [ { "inputs": [ @@ -146,107 +146,121 @@ "type": "receive" } ], - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", - "transactionIndex": 38, - "gasUsed": "1059427", - "logsBloom": "0x00000000000000002000000000000000400000000000000000800010000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000200000000002080001000000000800000000000000000000000000020000000000001000000800000000800000040000000000000001500000000000000400000000000000000000000000000000000000000000800000000040000000000000000000000000000000100040000000000000000000000000800020000000000000000000080000000000000400000000000000400020000000000000000010000000000000000000000000000000001100000001000000", - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175", - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", + "contractAddress": null, + "transactionIndex": 42, + "gasUsed": "1101785", + "logsBloom": "0x00000400000000000000000000000000400000000400800000800000000000000000000000000000000000000000000000000000000040001000000040000000000000000000008000000000000002000001000000000800004000000000000000000000020000000000001080000800000000800000000000000000000001400000004000000000000000000000000000000000000000000000000000880000000000000000000000000000000000100004000000000000000000000000000000000020000200000000000001000020000000000480000000000000000020000000000000000010000000000000800000000000000000001000000001000000", + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa", + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", "logs": [ { - "transactionIndex": 38, - "blockNumber": 4793881, - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x00000000000000000000000018a2553ef1aae12d9cd158821319e26a62fee90e" + "0x00000000000000000000000097f85b5cd51c89beb91a3c621c2954858429dfd4" ], "data": "0x", - "logIndex": 31, - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175" + "logIndex": 110, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" }, { - "transactionIndex": 38, - "blockNumber": 4793881, - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 32, - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175" + "logIndex": 111, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" }, { - "transactionIndex": 38, - "blockNumber": 4793881, - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a094e566b61b3c2d88acf7cc15e3dd0fa83f32af" + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 33, - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175" + "logIndex": 112, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" }, { - "transactionIndex": 38, - "blockNumber": 4793881, - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000c5bbd75789bd007784a0046094d19acea1a79eb1" + "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 34, - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175" + "logIndex": 113, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" }, { - "transactionIndex": 38, - "blockNumber": 4793881, - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 114, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + }, + { + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "topics": [ "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" ], - "data": "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", - "logIndex": 35, - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175" + "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 115, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" }, { - "transactionIndex": 38, - "blockNumber": 4793881, - "transactionHash": "0x23039930f7f0e73fc4d88fac6f63bdd3099a4652a0722fe82312dcfd5524abbe", - "address": "0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e", + "transactionIndex": 42, + "blockNumber": 5783757, + "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1f689646861870d44b33dbbb413fa7d06a2b52f", - "logIndex": 36, - "blockHash": "0x683bb3bdbe4fb5790fff65e93d2d5fb04278ddeeff1e10dd478819dbbba60175" + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 116, + "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" } ], - "blockNumber": 4793881, - "cumulativeGasUsed": "4375835", + "blockNumber": 5783757, + "cumulativeGasUsed": "9475477", "status": 1, "byzantium": true }, "args": [ - "0x18a2553ef1aaE12d9cd158821319e26A62feE90E", - "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", - "0x173c43d200000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000a094e566b61b3c2d88acf7cc15e3dd0fa83f32af000000000000000000000000c5bbd75789bd007784a0046094d19acea1a79eb1000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0x97F85b5cD51C89bEB91a3C621C2954858429DFD4", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC20TransferProxy.json b/projects/hardhat-deploy/deployments/sepolia/ERC20TransferProxy.json index 3b14946b4..f0dcc7add 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC20TransferProxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC20TransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0xB8863180CAC2d0Ab665e5968C0De25298A1D8CEe", + "address": "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", "abi": [ { "anonymous": false, @@ -27,6 +27,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ERC20TransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "__OperatorRole_init", @@ -34,6 +47,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -122,28 +148,28 @@ "type": "function" } ], - "transactionHash": "0x6092549c2c7e5de426faae115f04b4d601a296ffd7b847ef4d9f48db4ceac9a5", + "transactionHash": "0x99e409900d39afaa1485d06151ebc9d66276c9129d9fd3277d920bce35f6f675", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0xB8863180CAC2d0Ab665e5968C0De25298A1D8CEe", - "transactionIndex": 31, - "gasUsed": "570547", + "contractAddress": null, + "transactionIndex": 37, + "gasUsed": "697645", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xc54ae29feeca841747794111b77a4ae6023300c3d97a8d6f7edd70857ab0fde7", - "transactionHash": "0x6092549c2c7e5de426faae115f04b4d601a296ffd7b847ef4d9f48db4ceac9a5", + "blockHash": "0xc860d4ab7fa5162eeb8c6ddd953bc53936f80c59b01bad5430153bf36ef229fa", + "transactionHash": "0x99e409900d39afaa1485d06151ebc9d66276c9129d9fd3277d920bce35f6f675", "logs": [], - "blockNumber": 4793860, - "cumulativeGasUsed": "3004766", + "blockNumber": 5783732, + "cumulativeGasUsed": "9517824", "status": 1, "byzantium": true }, "args": [], "numDeployments": 1, - "solcInputHash": "1e83608a8d677752f3c67873d3574235", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__ERC20TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"erc20safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":\"ERC20TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x363fa1f25a41aa7d7b3fb9e2d182dec04c3774d06d9eed428b3fe48140fa4b7e\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5061095c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100e35780639870d7fe14610107578063ac8a584a1461012d578063f2fde38b1461015357610088565b80632ff26a0a1461008d578063715018a614610097578063759781271461009f578063776062c3146100a7575b600080fd5b610095610179565b005b61009561022b565b6100956102d7565b610095600480360360808110156100bd57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561036c565b6100eb6104bb565b604080516001600160a01b039092168252519081900360200190f35b6100956004803603602081101561011d57600080fd5b50356001600160a01b03166104ca565b6100956004803603602081101561014357600080fd5b50356001600160a01b0316610550565b6100956004803603602081101561016957600080fd5b50356001600160a01b03166105d3565b600054610100900460ff168061019257506101926106d6565b806101a0575060005460ff16155b6101db5760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610206576000805460ff1961ff0019909116610100171660011790555b61020e6106e7565b610216610787565b8015610228576000805461ff00191690555b50565b610233610880565b6001600160a01b03166102446104bb565b6001600160a01b03161461028d576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806102f057506102f06106d6565b806102fe575060005460ff16155b6103395760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610364576000805460ff1961ff0019909116610100171660011790555b610216610179565b60656000610378610880565b6001600160a01b0316815260208101919091526040016000205460ff166103d05760405162461bcd60e51b81526004018080602001828103825260288152602001806108ff6028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561043857600080fd5b505af115801561044c573d6000803e3d6000fd5b505050506040513d602081101561046257600080fd5b50516104b5576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b6104d2610880565b6001600160a01b03166104e36104bb565b6001600160a01b03161461052c576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b610558610880565b6001600160a01b03166105696104bb565b6001600160a01b0316146105b2576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b6105db610880565b6001600160a01b03166105ec6104bb565b6001600160a01b031614610635576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03811661067a5760405162461bcd60e51b815260040180806020018281038252602681526020018061088b6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006106e130610884565b15905090565b600054610100900460ff168061070057506107006106d6565b8061070e575060005460ff16155b6107495760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610216576000805460ff1961ff0019909116610100171660011790558015610228576000805461ff001916905550565b600054610100900460ff16806107a057506107a06106d6565b806107ae575060005460ff16155b6107e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610814576000805460ff1961ff0019909116610100171660011790555b600061081e610880565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610228576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212202973a98c7cda54d291a78bc2c1e7767938d5273d121da56e402b35febf3f882c64736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100e35780639870d7fe14610107578063ac8a584a1461012d578063f2fde38b1461015357610088565b80632ff26a0a1461008d578063715018a614610097578063759781271461009f578063776062c3146100a7575b600080fd5b610095610179565b005b61009561022b565b6100956102d7565b610095600480360360808110156100bd57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561036c565b6100eb6104bb565b604080516001600160a01b039092168252519081900360200190f35b6100956004803603602081101561011d57600080fd5b50356001600160a01b03166104ca565b6100956004803603602081101561014357600080fd5b50356001600160a01b0316610550565b6100956004803603602081101561016957600080fd5b50356001600160a01b03166105d3565b600054610100900460ff168061019257506101926106d6565b806101a0575060005460ff16155b6101db5760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610206576000805460ff1961ff0019909116610100171660011790555b61020e6106e7565b610216610787565b8015610228576000805461ff00191690555b50565b610233610880565b6001600160a01b03166102446104bb565b6001600160a01b03161461028d576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806102f057506102f06106d6565b806102fe575060005460ff16155b6103395760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610364576000805460ff1961ff0019909116610100171660011790555b610216610179565b60656000610378610880565b6001600160a01b0316815260208101919091526040016000205460ff166103d05760405162461bcd60e51b81526004018080602001828103825260288152602001806108ff6028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561043857600080fd5b505af115801561044c573d6000803e3d6000fd5b505050506040513d602081101561046257600080fd5b50516104b5576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b6104d2610880565b6001600160a01b03166104e36104bb565b6001600160a01b03161461052c576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b610558610880565b6001600160a01b03166105696104bb565b6001600160a01b0316146105b2576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b6105db610880565b6001600160a01b03166105ec6104bb565b6001600160a01b031614610635576040805162461bcd60e51b815260206004820181905260248201526000805160206108df833981519152604482015290519081900360640190fd5b6001600160a01b03811661067a5760405162461bcd60e51b815260040180806020018281038252602681526020018061088b6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006106e130610884565b15905090565b600054610100900460ff168061070057506107006106d6565b8061070e575060005460ff16155b6107495760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610216576000805460ff1961ff0019909116610100171660011790558015610228576000805461ff001916905550565b600054610100900460ff16806107a057506107a06106d6565b806107ae575060005460ff16155b6107e95760405162461bcd60e51b815260040180806020018281038252602e8152602001806108b1602e913960400191505060405180910390fd5b600054610100900460ff16158015610814576000805460ff1961ff0019909116610100171660011790555b600061081e610880565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610228576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212202973a98c7cda54d291a78bc2c1e7767938d5273d121da56e402b35febf3f882c64736f6c63430007060033", + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__ERC20TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC20TransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"erc20safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":\"ERC20TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __ERC20TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x2fce5fa6025c24a87072eed4cec6ff8e9172ec7b72ca211286904847adf4a324\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610b0f806100206000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c80639870d7fe116100665780639870d7fe1461011d5780639d5c7b6b14610143578063ac8a584a14610169578063e814f46d1461018f578063f2fde38b146101b55761009e565b80632ff26a0a146100a3578063715018a6146100ad57806375978127146100b5578063776062c3146100bd5780638da5cb5b146100f9575b600080fd5b6100ab6101db565b005b6100ab61028d565b6100ab610339565b6100ab600480360360808110156100d357600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356103ce565b61010161051d565b604080516001600160a01b039092168252519081900360200190f35b6100ab6004803603602081101561013357600080fd5b50356001600160a01b031661052c565b6100ab6004803603602081101561015957600080fd5b50356001600160a01b03166105b2565b6100ab6004803603602081101561017f57600080fd5b50356001600160a01b0316610666565b6100ab600480360360208110156101a557600080fd5b50356001600160a01b03166106e9565b6100ab600480360360208110156101cb57600080fd5b50356001600160a01b0316610786565b600054610100900460ff16806101f457506101f4610889565b80610202575060005460ff16155b61023d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610268576000805460ff1961ff0019909116610100171660011790555b61027061089a565b61027861093a565b801561028a576000805461ff00191690555b50565b610295610a33565b6001600160a01b03166102a661051d565b6001600160a01b0316146102ef576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103525750610352610889565b80610360575060005460ff16155b61039b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156103c6576000805460ff1961ff0019909116610100171660011790555b6102786101db565b606560006103da610a33565b6001600160a01b0316815260208101919091526040016000205460ff166104325760405162461bcd60e51b8152600401808060200182810382526028815260200180610ab26028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561049a57600080fd5b505af11580156104ae573d6000803e3d6000fd5b505050506040513d60208110156104c457600080fd5b5051610517576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b610534610a33565b6001600160a01b031661054561051d565b6001600160a01b03161461058e576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806105cb57506105cb610889565b806105d9575060005460ff16155b6106145760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff1615801561063f576000805460ff1961ff0019909116610100171660011790555b6106476101db565b61065082610786565b8015610662576000805461ff00191690555b5050565b61066e610a33565b6001600160a01b031661067f61051d565b6001600160a01b0316146106c8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806107025750610702610889565b80610710575060005460ff16155b61074b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610776576000805460ff1961ff0019909116610100171660011790555b61077e61089a565b61064761093a565b61078e610a33565b6001600160a01b031661079f61051d565b6001600160a01b0316146107e8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03811661082d5760405162461bcd60e51b8152600401808060200182810382526026815260200180610a3e6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061089430610a37565b15905090565b600054610100900460ff16806108b357506108b3610889565b806108c1575060005460ff16155b6108fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610278576000805460ff1961ff001990911661010017166001179055801561028a576000805461ff001916905550565b600054610100900460ff16806109535750610953610889565b80610961575060005460ff16155b61099c5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156109c7576000805460ff1961ff0019909116610100171660011790555b60006109d1610a33565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561028a576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220597fa1b0869f6e9a9c201e77b523de7b663d5ce8e581f4023871dace183130a564736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c80639870d7fe116100665780639870d7fe1461011d5780639d5c7b6b14610143578063ac8a584a14610169578063e814f46d1461018f578063f2fde38b146101b55761009e565b80632ff26a0a146100a3578063715018a6146100ad57806375978127146100b5578063776062c3146100bd5780638da5cb5b146100f9575b600080fd5b6100ab6101db565b005b6100ab61028d565b6100ab610339565b6100ab600480360360808110156100d357600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356103ce565b61010161051d565b604080516001600160a01b039092168252519081900360200190f35b6100ab6004803603602081101561013357600080fd5b50356001600160a01b031661052c565b6100ab6004803603602081101561015957600080fd5b50356001600160a01b03166105b2565b6100ab6004803603602081101561017f57600080fd5b50356001600160a01b0316610666565b6100ab600480360360208110156101a557600080fd5b50356001600160a01b03166106e9565b6100ab600480360360208110156101cb57600080fd5b50356001600160a01b0316610786565b600054610100900460ff16806101f457506101f4610889565b80610202575060005460ff16155b61023d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610268576000805460ff1961ff0019909116610100171660011790555b61027061089a565b61027861093a565b801561028a576000805461ff00191690555b50565b610295610a33565b6001600160a01b03166102a661051d565b6001600160a01b0316146102ef576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103525750610352610889565b80610360575060005460ff16155b61039b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156103c6576000805460ff1961ff0019909116610100171660011790555b6102786101db565b606560006103da610a33565b6001600160a01b0316815260208101919091526040016000205460ff166104325760405162461bcd60e51b8152600401808060200182810382526028815260200180610ab26028913960400191505060405180910390fd5b836001600160a01b03166323b872dd8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050602060405180830381600087803b15801561049a57600080fd5b505af11580156104ae573d6000803e3d6000fd5b505050506040513d60208110156104c457600080fd5b5051610517576040805162461bcd60e51b815260206004820152601a60248201527f6661696c757265207768696c65207472616e7366657272696e67000000000000604482015290519081900360640190fd5b50505050565b6033546001600160a01b031690565b610534610a33565b6001600160a01b031661054561051d565b6001600160a01b03161461058e576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b600054610100900460ff16806105cb57506105cb610889565b806105d9575060005460ff16155b6106145760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff1615801561063f576000805460ff1961ff0019909116610100171660011790555b6106476101db565b61065082610786565b8015610662576000805461ff00191690555b5050565b61066e610a33565b6001600160a01b031661067f61051d565b6001600160a01b0316146106c8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff16806107025750610702610889565b80610710575060005460ff16155b61074b5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610776576000805460ff1961ff0019909116610100171660011790555b61077e61089a565b61064761093a565b61078e610a33565b6001600160a01b031661079f61051d565b6001600160a01b0316146107e8576040805162461bcd60e51b81526020600482018190526024820152600080516020610a92833981519152604482015290519081900360640190fd5b6001600160a01b03811661082d5760405162461bcd60e51b8152600401808060200182810382526026815260200180610a3e6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061089430610a37565b15905090565b600054610100900460ff16806108b357506108b3610889565b806108c1575060005460ff16155b6108fc5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff16158015610278576000805460ff1961ff001990911661010017166001179055801561028a576000805461ff001916905550565b600054610100900460ff16806109535750610953610889565b80610961575060005460ff16155b61099c5760405162461bcd60e51b815260040180806020018281038252602e815260200180610a64602e913960400191505060405180910390fd5b600054610100900460ff161580156109c7576000805460ff1961ff0019909116610100171660011790555b60006109d1610a33565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561028a576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220597fa1b0869f6e9a9c201e77b523de7b663d5ce8e581f4023871dace183130a564736f6c63430007060033", "devdoc": { "kind": "dev", "methods": { @@ -207,7 +233,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 19133, + "astId": 19884, "contract": "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol:ERC20TransferProxy", "label": "operators", "offset": 0, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC721LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/sepolia/ERC721LazyMintTransferProxy.json index 49b63f050..ba982521d 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC721LazyMintTransferProxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC721LazyMintTransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0xa2eEBb837aEF89369Ad117568d75348e6174520e", + "address": "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", "abi": [ { "anonymous": false, @@ -20,6 +20,19 @@ "name": "OwnershipTransferred", "type": "event" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ERC721LazyMintTransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "__OperatorRole_init", @@ -27,6 +40,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -134,28 +160,28 @@ "type": "function" } ], - "transactionHash": "0xe21a4120932d1274eaeedc4fdd2d5b72f7dedd5353ae10debb1a2dac367a751c", + "transactionHash": "0x377b11189535801566181e410a5db2a19c150f8f123d164d16730db513976879", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0xa2eEBb837aEF89369Ad117568d75348e6174520e", - "transactionIndex": 41, - "gasUsed": "849243", + "contractAddress": null, + "transactionIndex": 37, + "gasUsed": "935371", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x56249e1485a46ccc27465fbdffa8bff30ef30da3f4a83b9782ef94773bc6e14c", - "transactionHash": "0xe21a4120932d1274eaeedc4fdd2d5b72f7dedd5353ae10debb1a2dac367a751c", + "blockHash": "0x829099d11190ec4dd530d882c0055202eeb63590f13bb3b1b48f438b6a92068d", + "transactionHash": "0x377b11189535801566181e410a5db2a19c150f8f123d164d16730db513976879", "logs": [], - "blockNumber": 4793862, - "cumulativeGasUsed": "14792075", + "blockNumber": 5783736, + "cumulativeGasUsed": "11605603", "status": 1, "byzantium": true }, "args": [], "numDeployments": 1, - "solcInputHash": "1e83608a8d677752f3c67873d3574235", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":\"ERC721LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\\n }\\n}\\n\",\"keccak256\":\"0x39f9db52acb6155394c2e91f3ef71c9027fcd4b7ec0f48bb4307cc115aa715f5\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50610e65806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109fb565b6101b0565b61008a6102ce565b6100af61037a565b6040516100bc9190610bc4565b60405180910390f35b61008a6100d33660046108eb565b610389565b61008a6100e63660046108eb565b61040f565b61008a6100f93660046108eb565b610492565b600054610100900460ff16806101175750610117610595565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b6101936105a6565b61019b610646565b80156101ad576000805461ff00191690555b50565b606560006101bc61073f565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610e086028913960400191505060405180910390fd5b82602001516001146102415760405162461bcd60e51b815260040161023890610bd8565b60405180910390fd5b6000808460000151602001518060200190518101906102609190610907565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb299061029590849088908890600401610c04565b600060405180830381600087803b1580156102af57600080fd5b505af11580156102c3573d6000803e3d6000fd5b505050505050505050565b6102d661073f565b6001600160a01b03166102e761037a565b6001600160a01b031614610330576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61039161073f565b6001600160a01b03166103a261037a565b6001600160a01b0316146103eb576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b61041761073f565b6001600160a01b031661042861037a565b6001600160a01b031614610471576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61049a61073f565b6001600160a01b03166104ab61037a565b6001600160a01b0316146104f4576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b0381166105395760405162461bcd60e51b8152600401808060200182810382526026815260200180610d946026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105a030610743565b15905090565b600054610100900460ff16806105bf57506105bf610595565b806105cd575060005460ff16155b6106085760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff168061065f575061065f610595565b8061066d575060005460ff16155b6106a85760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff161580156106d3576000805460ff1961ff0019909116610100171660011790555b60006106dd61073f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061076061075b84610d2c565b610cea565b905082815283838301111561077457600080fd5b610782836020830184610d4e565b9392505050565b803561074881610d7e565b600082601f8301126107a4578081fd5b815160206107b461075b83610d0e565b82815281810190858301855b858110156107fe578151880189603f8201126107da578788fd5b6107eb8a878301516040840161074d565b85525092840192908401906001016107c0565b5090979650505050505050565b600082601f83011261081b578081fd5b8151602061082b61075b83610d0e565b82815281810190858301604080860288018501891015610849578687fd5b865b868110156108be5781838b031215610861578788fd5b815182810181811067ffffffffffffffff8211171561087c57fe5b8352835161088981610d7e565b8152838701516bffffffffffffffffffffffff811681146108a857898afd5b818801528552938501939181019160010161084b565b509198975050505050505050565b600082601f8301126108dc578081fd5b6107828383516020850161074d565b6000602082840312156108fc578081fd5b813561078281610d7e565b60008060408385031215610919578081fd5b825161092481610d7e565b602084015190925067ffffffffffffffff80821115610941578283fd5b9084019060a08287031215610954578283fd5b61095e60a0610cea565b82518152602083015182811115610973578485fd5b61097f888286016108cc565b602083015250604083015182811115610996578485fd5b6109a28882860161080b565b6040830152506060830151828111156109b9578485fd5b6109c58882860161080b565b6060830152506080830151828111156109dc578485fd5b6109e888828601610794565b6080830152508093505050509250929050565b600080600060608486031215610a0f578081fd5b833567ffffffffffffffff80821115610a26578283fd5b81860191506040808389031215610a3b578384fd5b80518181018181108482111715610a4e57fe5b808352843584811115610a5f578687fd5b8501808b03841315610a6f578687fd5b608083018281108682111715610a8157fe5b845280356001600160e01b031981168114610a9a578788fd5b825260208181013586811115610aae578889fd5b82019550601f86018c13610ac0578788fd5b85359150610ad061075b83610d2c565b8281528c82848901011115610ae3578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610b12818c01610789565b985050505050610b23818801610789565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b8d57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b4f565b509495945050505050565b60008151808452610bb0816020860160208601610d4e565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610c2c610100850182610b98565b90506040870151605f19808684030160a0870152610c4a8383610b3c565b925060608901519150808684030160c0870152610c678383610b3c565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610cbf57601f19868303018452610cad828651610b98565b94870194938701939150600101610c91565b508096505050505050610cd481840186610b2f565b50610ce26040830184610b2f565b949350505050565b60405181810167ffffffffffffffff81118282101715610d0657fe5b604052919050565b600067ffffffffffffffff821115610d2257fe5b5060209081020190565b600067ffffffffffffffff821115610d4057fe5b50601f01601f191660200190565b60005b83811015610d69578181015183820152602001610d51565b83811115610d78576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a264697066735822122022780bcbc2a56161a6a3722e0e0c474492ff0b09629887f64b03fb1768e170fe64736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100a75780639870d7fe146100c5578063ac8a584a146100d8578063f2fde38b146100eb5761007d565b80632ff26a0a1461008257806354bc0cf11461008c578063715018a61461009f575b600080fd5b61008a6100fe565b005b61008a61009a3660046109fb565b6101b0565b61008a6102ce565b6100af61037a565b6040516100bc9190610bc4565b60405180910390f35b61008a6100d33660046108eb565b610389565b61008a6100e63660046108eb565b61040f565b61008a6100f93660046108eb565b610492565b600054610100900460ff16806101175750610117610595565b80610125575060005460ff16155b6101605760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561018b576000805460ff1961ff0019909116610100171660011790555b6101936105a6565b61019b610646565b80156101ad576000805461ff00191690555b50565b606560006101bc61073f565b6001600160a01b0316815260208101919091526040016000205460ff166102145760405162461bcd60e51b8152600401808060200182810382526028815260200180610e086028913960400191505060405180910390fd5b82602001516001146102415760405162461bcd60e51b815260040161023890610bd8565b60405180910390fd5b6000808460000151602001518060200190518101906102609190610907565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb299061029590849088908890600401610c04565b600060405180830381600087803b1580156102af57600080fd5b505af11580156102c3573d6000803e3d6000fd5b505050505050505050565b6102d661073f565b6001600160a01b03166102e761037a565b6001600160a01b031614610330576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61039161073f565b6001600160a01b03166103a261037a565b6001600160a01b0316146103eb576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b61041761073f565b6001600160a01b031661042861037a565b6001600160a01b031614610471576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61049a61073f565b6001600160a01b03166104ab61037a565b6001600160a01b0316146104f4576040805162461bcd60e51b81526020600482018190526024820152600080516020610de8833981519152604482015290519081900360640190fd5b6001600160a01b0381166105395760405162461bcd60e51b8152600401808060200182810382526026815260200180610d946026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006105a030610743565b15905090565b600054610100900460ff16806105bf57506105bf610595565b806105cd575060005460ff16155b6106085760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff1615801561019b576000805460ff1961ff00199091166101001716600117905580156101ad576000805461ff001916905550565b600054610100900460ff168061065f575061065f610595565b8061066d575060005460ff16155b6106a85760405162461bcd60e51b815260040180806020018281038252602e815260200180610dba602e913960400191505060405180910390fd5b600054610100900460ff161580156106d3576000805460ff1961ff0019909116610100171660011790555b60006106dd61073f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101ad576000805461ff001916905550565b3390565b803b15155b919050565b600061076061075b84610d2c565b610cea565b905082815283838301111561077457600080fd5b610782836020830184610d4e565b9392505050565b803561074881610d7e565b600082601f8301126107a4578081fd5b815160206107b461075b83610d0e565b82815281810190858301855b858110156107fe578151880189603f8201126107da578788fd5b6107eb8a878301516040840161074d565b85525092840192908401906001016107c0565b5090979650505050505050565b600082601f83011261081b578081fd5b8151602061082b61075b83610d0e565b82815281810190858301604080860288018501891015610849578687fd5b865b868110156108be5781838b031215610861578788fd5b815182810181811067ffffffffffffffff8211171561087c57fe5b8352835161088981610d7e565b8152838701516bffffffffffffffffffffffff811681146108a857898afd5b818801528552938501939181019160010161084b565b509198975050505050505050565b600082601f8301126108dc578081fd5b6107828383516020850161074d565b6000602082840312156108fc578081fd5b813561078281610d7e565b60008060408385031215610919578081fd5b825161092481610d7e565b602084015190925067ffffffffffffffff80821115610941578283fd5b9084019060a08287031215610954578283fd5b61095e60a0610cea565b82518152602083015182811115610973578485fd5b61097f888286016108cc565b602083015250604083015182811115610996578485fd5b6109a28882860161080b565b6040830152506060830151828111156109b9578485fd5b6109c58882860161080b565b6060830152506080830151828111156109dc578485fd5b6109e888828601610794565b6080830152508093505050509250929050565b600080600060608486031215610a0f578081fd5b833567ffffffffffffffff80821115610a26578283fd5b81860191506040808389031215610a3b578384fd5b80518181018181108482111715610a4e57fe5b808352843584811115610a5f578687fd5b8501808b03841315610a6f578687fd5b608083018281108682111715610a8157fe5b845280356001600160e01b031981168114610a9a578788fd5b825260208181013586811115610aae578889fd5b82019550601f86018c13610ac0578788fd5b85359150610ad061075b83610d2c565b8281528c82848901011115610ae3578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610b12818c01610789565b985050505050610b23818801610789565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610b8d57815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b4f565b509495945050505050565b60008151808452610bb0816020860160208601610d4e565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610c2c610100850182610b98565b90506040870151605f19808684030160a0870152610c4a8383610b3c565b925060608901519150808684030160c0870152610c678383610b3c565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610cbf57601f19868303018452610cad828651610b98565b94870194938701939150600101610c91565b508096505050505050610cd481840186610b2f565b50610ce26040830184610b2f565b949350505050565b60405181810167ffffffffffffffff81118282101715610d0657fe5b604052919050565b600067ffffffffffffffff821115610d2257fe5b5060209081020190565b600067ffffffffffffffff821115610d4057fe5b50601f01601f191660200190565b60005b83811015610d69578181015183820152602001610d51565b83811115610d78576000848401525b50505050565b6001600160a01b03811681146101ad57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a264697066735822122022780bcbc2a56161a6a3722e0e0c474492ff0b09629887f64b03fb1768e170fe64736f6c63430007060033", + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC721LazyMintTransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"asset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":\"ERC721LazyMintTransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\n\\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\\n\\n function __ERC721LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\\n }\\n}\\n\",\"keccak256\":\"0x454e275be5d03f236ad96f9a2392e928d3397aad056dad7640fc1500867911a4\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610f4a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100d05780639870d7fe146100ee578063ac8a584a14610101578063e814f46d146100bd578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b5578063795c7aaa146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ae0565b6101d9565b6100a06102f7565b6100a06100cb3660046109d0565b6103a3565b6100d861045f565b6040516100e59190610ca9565b60405180910390f35b6100a06100fc3660046109d0565b61046e565b6100a061010f3660046109d0565b6104f4565b6100a06101223660046109d0565b610577565b600054610100900460ff1680610140575061014061067a565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc61068b565b6101c461072b565b80156101d6576000805461ff00191690555b50565b606560006101e5610824565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eed6028913960400191505060405180910390fd5b826020015160011461026a5760405162461bcd60e51b815260040161026190610cbd565b60405180910390fd5b60008084600001516020015180602001905181019061028991906109ec565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb29906102be90849088908890600401610ce9565b600060405180830381600087803b1580156102d857600080fd5b505af11580156102ec573d6000803e3d6000fd5b505050505050505050565b6102ff610824565b6001600160a01b031661031061045f565b6001600160a01b031614610359576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103bc57506103bc61067a565b806103ca575060005460ff16155b6104055760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff16158015610430576000805460ff1961ff0019909116610100171660011790555b61043861068b565b61044061072b565b61044982610577565b801561045b576000805461ff00191690555b5050565b6033546001600160a01b031690565b610476610824565b6001600160a01b031661048761045f565b6001600160a01b0316146104d0576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104fc610824565b6001600160a01b031661050d61045f565b6001600160a01b031614610556576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61057f610824565b6001600160a01b031661059061045f565b6001600160a01b0316146105d9576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03811661061e5760405162461bcd60e51b8152600401808060200182810382526026815260200180610e796026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061068530610828565b15905090565b600054610100900460ff16806106a457506106a461067a565b806106b2575060005460ff16155b6106ed5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff1680610744575061074461067a565b80610752575060005460ff16155b61078d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156107b8576000805460ff1961ff0019909116610100171660011790555b60006107c2610824565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061084561084084610e11565b610dcf565b905082815283838301111561085957600080fd5b610867836020830184610e33565b9392505050565b803561082d81610e63565b600082601f830112610889578081fd5b8151602061089961084083610df3565b82815281810190858301855b858110156108e3578151880189603f8201126108bf578788fd5b6108d08a8783015160408401610832565b85525092840192908401906001016108a5565b5090979650505050505050565b600082601f830112610900578081fd5b8151602061091061084083610df3565b8281528181019085830160408086028801850189101561092e578687fd5b865b868110156109a35781838b031215610946578788fd5b815182810181811067ffffffffffffffff8211171561096157fe5b8352835161096e81610e63565b8152838701516bffffffffffffffffffffffff8116811461098d57898afd5b8188015285529385019391810191600101610930565b509198975050505050505050565b600082601f8301126109c1578081fd5b61086783835160208501610832565b6000602082840312156109e1578081fd5b813561086781610e63565b600080604083850312156109fe578081fd5b8251610a0981610e63565b602084015190925067ffffffffffffffff80821115610a26578283fd5b9084019060a08287031215610a39578283fd5b610a4360a0610dcf565b82518152602083015182811115610a58578485fd5b610a64888286016109b1565b602083015250604083015182811115610a7b578485fd5b610a87888286016108f0565b604083015250606083015182811115610a9e578485fd5b610aaa888286016108f0565b606083015250608083015182811115610ac1578485fd5b610acd88828601610879565b6080830152508093505050509250929050565b600080600060608486031215610af4578081fd5b833567ffffffffffffffff80821115610b0b578283fd5b81860191506040808389031215610b20578384fd5b80518181018181108482111715610b3357fe5b808352843584811115610b44578687fd5b8501808b03841315610b54578687fd5b608083018281108682111715610b6657fe5b845280356001600160e01b031981168114610b7f578788fd5b825260208181013586811115610b93578889fd5b82019550601f86018c13610ba5578788fd5b85359150610bb561084083610e11565b8281528c82848901011115610bc8578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bf7818c0161086e565b985050505050610c0881880161086e565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c7257815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c34565b509495945050505050565b60008151808452610c95816020860160208601610e33565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610d11610100850182610c7d565b90506040870151605f19808684030160a0870152610d2f8383610c21565b925060608901519150808684030160c0870152610d4c8383610c21565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610da457601f19868303018452610d92828651610c7d565b94870194938701939150600101610d76565b508096505050505050610db981840186610c14565b50610dc76040830184610c14565b949350505050565b60405181810167ffffffffffffffff81118282101715610deb57fe5b604052919050565b600067ffffffffffffffff821115610e0757fe5b5060209081020190565b600067ffffffffffffffff821115610e2557fe5b50601f01601f191660200190565b60005b83811015610e4e578181015183820152602001610e36565b83811115610e5d576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a70ad50617bc7d86721e59644bb144857ba8df35926720d11f324896d0ef12f264736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80638da5cb5b116100665780638da5cb5b146100d05780639870d7fe146100ee578063ac8a584a14610101578063e814f46d146100bd578063f2fde38b1461011457610093565b80632ff26a0a1461009857806354bc0cf1146100a2578063715018a6146100b5578063795c7aaa146100bd575b600080fd5b6100a0610127565b005b6100a06100b0366004610ae0565b6101d9565b6100a06102f7565b6100a06100cb3660046109d0565b6103a3565b6100d861045f565b6040516100e59190610ca9565b60405180910390f35b6100a06100fc3660046109d0565b61046e565b6100a061010f3660046109d0565b6104f4565b6100a06101223660046109d0565b610577565b600054610100900460ff1680610140575061014061067a565b8061014e575060005460ff16155b6101895760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101b4576000805460ff1961ff0019909116610100171660011790555b6101bc61068b565b6101c461072b565b80156101d6576000805461ff00191690555b50565b606560006101e5610824565b6001600160a01b0316815260208101919091526040016000205460ff1661023d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610eed6028913960400191505060405180910390fd5b826020015160011461026a5760405162461bcd60e51b815260040161026190610cbd565b60405180910390fd5b60008084600001516020015180602001905181019061028991906109ec565b60405163832fbb2960e01b815291935091506001600160a01b0383169063832fbb29906102be90849088908890600401610ce9565b600060405180830381600087803b1580156102d857600080fd5b505af11580156102ec573d6000803e3d6000fd5b505050505050505050565b6102ff610824565b6001600160a01b031661031061045f565b6001600160a01b031614610359576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff16806103bc57506103bc61067a565b806103ca575060005460ff16155b6104055760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff16158015610430576000805460ff1961ff0019909116610100171660011790555b61043861068b565b61044061072b565b61044982610577565b801561045b576000805461ff00191690555b5050565b6033546001600160a01b031690565b610476610824565b6001600160a01b031661048761045f565b6001600160a01b0316146104d0576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b6104fc610824565b6001600160a01b031661050d61045f565b6001600160a01b031614610556576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61057f610824565b6001600160a01b031661059061045f565b6001600160a01b0316146105d9576040805162461bcd60e51b81526020600482018190526024820152600080516020610ecd833981519152604482015290519081900360640190fd5b6001600160a01b03811661061e5760405162461bcd60e51b8152600401808060200182810382526026815260200180610e796026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b600061068530610828565b15905090565b600054610100900460ff16806106a457506106a461067a565b806106b2575060005460ff16155b6106ed5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156101c4576000805460ff1961ff00199091166101001716600117905580156101d6576000805461ff001916905550565b600054610100900460ff1680610744575061074461067a565b80610752575060005460ff16155b61078d5760405162461bcd60e51b815260040180806020018281038252602e815260200180610e9f602e913960400191505060405180910390fd5b600054610100900460ff161580156107b8576000805460ff1961ff0019909116610100171660011790555b60006107c2610824565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156101d6576000805461ff001916905550565b3390565b803b15155b919050565b600061084561084084610e11565b610dcf565b905082815283838301111561085957600080fd5b610867836020830184610e33565b9392505050565b803561082d81610e63565b600082601f830112610889578081fd5b8151602061089961084083610df3565b82815281810190858301855b858110156108e3578151880189603f8201126108bf578788fd5b6108d08a8783015160408401610832565b85525092840192908401906001016108a5565b5090979650505050505050565b600082601f830112610900578081fd5b8151602061091061084083610df3565b8281528181019085830160408086028801850189101561092e578687fd5b865b868110156109a35781838b031215610946578788fd5b815182810181811067ffffffffffffffff8211171561096157fe5b8352835161096e81610e63565b8152838701516bffffffffffffffffffffffff8116811461098d57898afd5b8188015285529385019391810191600101610930565b509198975050505050505050565b600082601f8301126109c1578081fd5b61086783835160208501610832565b6000602082840312156109e1578081fd5b813561086781610e63565b600080604083850312156109fe578081fd5b8251610a0981610e63565b602084015190925067ffffffffffffffff80821115610a26578283fd5b9084019060a08287031215610a39578283fd5b610a4360a0610dcf565b82518152602083015182811115610a58578485fd5b610a64888286016109b1565b602083015250604083015182811115610a7b578485fd5b610a87888286016108f0565b604083015250606083015182811115610a9e578485fd5b610aaa888286016108f0565b606083015250608083015182811115610ac1578485fd5b610acd88828601610879565b6080830152508093505050509250929050565b600080600060608486031215610af4578081fd5b833567ffffffffffffffff80821115610b0b578283fd5b81860191506040808389031215610b20578384fd5b80518181018181108482111715610b3357fe5b808352843584811115610b44578687fd5b8501808b03841315610b54578687fd5b608083018281108682111715610b6657fe5b845280356001600160e01b031981168114610b7f578788fd5b825260208181013586811115610b93578889fd5b82019550601f86018c13610ba5578788fd5b85359150610bb561084083610e11565b8281528c82848901011115610bc8578889fd5b828288018383013788828483010152806060860152508284528087013581850152839950610bf7818c0161086e565b985050505050610c0881880161086e565b93505050509250925092565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015610c7257815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610c34565b509495945050505050565b60008151808452610c95816020860160208601610e33565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6000606082528451606083015260208086015160a06080850152610d11610100850182610c7d565b90506040870151605f19808684030160a0870152610d2f8383610c21565b925060608901519150808684030160c0870152610d4c8383610c21565b60808a015187820390920160e0880152815180825290935090840191508383019084810284018501865b82811015610da457601f19868303018452610d92828651610c7d565b94870194938701939150600101610d76565b508096505050505050610db981840186610c14565b50610dc76040830184610c14565b949350505050565b60405181810167ffffffffffffffff81118282101715610deb57fe5b604052919050565b600067ffffffffffffffff821115610e0757fe5b5060209081020190565b600067ffffffffffffffff821115610e2557fe5b50601f01601f191660200190565b60005b83811015610e4e578181015183820152602001610e36565b83811115610e5d576000848401525b50505050565b6001600160a01b03811681146101d657600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220a70ad50617bc7d86721e59644bb144857ba8df35926720d11f324896d0ef12f264736f6c63430007060033", "devdoc": { "kind": "dev", "methods": { @@ -219,7 +245,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 19133, + "astId": 19884, "contract": "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol:ERC721LazyMintTransferProxy", "label": "operators", "offset": 0, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleFactoryC2.json index b5e389bb5..091e071bd 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleFactoryC2.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleFactoryC2.json @@ -1,5 +1,5 @@ { - "address": "0xB020bA7fcF43DCc59eF0103624BD6FADE66d105E", + "address": "0x8FC558fa7667ee5729306A51c27DEd6732D41B9c", "abi": [ { "inputs": [ @@ -17,6 +17,11 @@ "internalType": "address", "name": "_lazyTransferProxy", "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" } ], "stateMutability": "nonpayable", @@ -268,47 +273,62 @@ "type": "function" } ], - "transactionHash": "0x858bb4e32b398b2919d50c2060ab57e33bbac340a973a57ff7ff675c76ba57b2", + "transactionHash": "0x871ca0f97acd9f578e61ccc3a8aff098a4c48bfa80ce66515f5c3109fae2cf93", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0xB020bA7fcF43DCc59eF0103624BD6FADE66d105E", - "transactionIndex": 34, - "gasUsed": "1322013", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080001000020000000000000000000000000000000020000000000000000000800000000000000000000000000000000580000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000040000000000", - "blockHash": "0x8223891074e9f95d7098b77c35debbb6a920f2a79d9079d0238651dc7ff3824f", - "transactionHash": "0x858bb4e32b398b2919d50c2060ab57e33bbac340a973a57ff7ff675c76ba57b2", + "contractAddress": null, + "transactionIndex": 22, + "gasUsed": "1374604", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000100000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000100020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000400001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xd2b93684b6683c91875c4db30253a761fa876103e78be7331e93ead979e0c062", + "transactionHash": "0x871ca0f97acd9f578e61ccc3a8aff098a4c48bfa80ce66515f5c3109fae2cf93", "logs": [ { - "transactionIndex": 34, - "blockNumber": 4793879, - "transactionHash": "0x858bb4e32b398b2919d50c2060ab57e33bbac340a973a57ff7ff675c76ba57b2", - "address": "0xB020bA7fcF43DCc59eF0103624BD6FADE66d105E", + "transactionIndex": 22, + "blockNumber": 5783755, + "transactionHash": "0x871ca0f97acd9f578e61ccc3a8aff098a4c48bfa80ce66515f5c3109fae2cf93", + "address": "0x8FC558fa7667ee5729306A51c27DEd6732D41B9c", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 57, + "blockHash": "0xd2b93684b6683c91875c4db30253a761fa876103e78be7331e93ead979e0c062" + }, + { + "transactionIndex": 22, + "blockNumber": 5783755, + "transactionHash": "0x871ca0f97acd9f578e61ccc3a8aff098a4c48bfa80ce66515f5c3109fae2cf93", + "address": "0x8FC558fa7667ee5729306A51c27DEd6732D41B9c", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 27, - "blockHash": "0x8223891074e9f95d7098b77c35debbb6a920f2a79d9079d0238651dc7ff3824f" + "logIndex": 58, + "blockHash": "0xd2b93684b6683c91875c4db30253a761fa876103e78be7331e93ead979e0c062" } ], - "blockNumber": 4793879, - "cumulativeGasUsed": "6128469", + "blockNumber": 5783755, + "cumulativeGasUsed": "7118833", "status": 1, "byzantium": true }, "args": [ - "0x41407B447Fb5425187A9BCA3a062644EF2410F8D", - "0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af", - "0xa2eEBb837aEF89369Ad117568d75348e6174520e" + "0xF4873a12132C87F96535059402b9EcE709a06c72", + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, - "solcInputHash": "1e83608a8d677752f3c67873d3574235", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":\"ERC721RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-721-minimal/ERC721RaribleMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC721Rarible token.\\n *\\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC721RaribleFactoryC2 is Ownable {\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create721RaribleProxy(address proxy);\\n event Create721RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleProxy(beaconProxy);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that private contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n}\\n\",\"keccak256\":\"0x4f3333862394062fca2a044f5dda27e9520739988f72127f95a6ad911248cc25\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721BaseMinimal.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = true;\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x189d72b3e2bae68029d2341c9a6f7e98dcbd94cc47703b3ae4e25f89facb9f29\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5060405161167638038061167683398101604081905261002f916100e5565b60006100396100c5565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039485166001600160a01b031991821617909155600280549385169382169390931790925560038054919093169116179055610127565b3390565b80516001600160a01b03811681146100e057600080fd5b919050565b6000806000606084860312156100f9578283fd5b610102846100c9565b9250610110602085016100c9565b915061011e604085016100c9565b90509250925092565b611540806101366000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220eddea18042d9f39d17b0a1fd61e2ed79324248e73c5a11bf15501760c458070264736f6c63430007060033", - "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220eddea18042d9f39d17b0a1fd61e2ed79324248e73c5a11bf15501760c458070264736f6c63430007060033", + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_beacon\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"Create721RaribleUserProxy\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"beacon\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"}],\"name\":\"createToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"_salt\",\"type\":\"uint256\"}],\"name\":\"getAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":\"ERC721RaribleFactoryC2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/BeaconProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./Proxy.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\nimport \\\"./IBeacon.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\\n *\\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\\n * conflict with the storage layout of the implementation behind the proxy.\\n *\\n * _Available since v3.4._\\n */\\ncontract BeaconProxy is Proxy {\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Initializes the proxy with `beacon`.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\\n * constructor.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract with the interface {IBeacon}.\\n */\\n constructor(address beacon, bytes memory data) public payable {\\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.beacon\\\")) - 1));\\n _setBeacon(beacon, data);\\n }\\n\\n /**\\n * @dev Returns the current beacon address.\\n */\\n function _beacon() internal view virtual returns (address beacon) {\\n bytes32 slot = _BEACON_SLOT;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n beacon := sload(slot)\\n }\\n }\\n\\n /**\\n * @dev Returns the current implementation address of the associated beacon.\\n */\\n function _implementation() internal view virtual override returns (address) {\\n return IBeacon(_beacon()).implementation();\\n }\\n\\n /**\\n * @dev Changes the proxy to use a new beacon.\\n *\\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\\n *\\n * Requirements:\\n *\\n * - `beacon` must be a contract.\\n * - The implementation returned by `beacon` must be a contract.\\n */\\n function _setBeacon(address beacon, bytes memory data) internal virtual {\\n require(\\n Address.isContract(beacon),\\n \\\"BeaconProxy: beacon is not a contract\\\"\\n );\\n require(\\n Address.isContract(IBeacon(beacon).implementation()),\\n \\\"BeaconProxy: beacon implementation is not a contract\\\"\\n );\\n bytes32 slot = _BEACON_SLOT;\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(slot, beacon)\\n }\\n\\n if (data.length > 0) {\\n Address.functionDelegateCall(_implementation(), data, \\\"BeaconProxy: function call failed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xb4bc4f87445593e5c371454feb723d6977609c20958dfcd032668b476477a0ce\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 { revert(0, returndatasize()) }\\n default { return(0, returndatasize()) }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive () external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {\\n }\\n}\\n\",\"keccak256\":\"0x0414d54056b3d8f9102ae1142264e9361408397878148203ab7a25cbf6248f08\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../erc-721-minimal/ERC721RaribleMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts/proxy/BeaconProxy.sol\\\";\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\n/**\\n * @dev This contract is for creating proxy to access ERC721Rarible token.\\n *\\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\\n *\\n */\\ncontract ERC721RaribleFactoryC2 is Ownable {\\n address public beacon;\\n address transferProxy;\\n address lazyTransferProxy;\\n\\n event Create721RaribleProxy(address proxy);\\n event Create721RaribleUserProxy(address proxy);\\n\\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\\n beacon = _beacon;\\n transferProxy = _transferProxy;\\n lazyTransferProxy = _lazyTransferProxy;\\n transferOwnership(initialOwner);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleProxy(beaconProxy);\\n }\\n\\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\\n token.transferOwnership(_msgSender());\\n emit Create721RaribleUserProxy(beaconProxy);\\n }\\n\\n //deploying BeaconProxy contract with create2\\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\\n bytes memory bytecode = getCreationBytecode(data);\\n assembly {\\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\\n if iszero(extcodesize(proxy)) {\\n revert(0, 0)\\n }\\n }\\n }\\n\\n //adding constructor arguments to BeaconProxy bytecode\\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\\n }\\n\\n //returns address that contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n }\\n\\n //returns address that private contract with such arguments will be deployed on\\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\\n public\\n view\\n returns (address)\\n { \\n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\\n\\n bytes32 hash = keccak256(\\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\\n );\\n\\n return address(uint160(uint(hash)));\\n }\\n\\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\\n }\\n}\\n\",\"keccak256\":\"0x6fd15e5905a37d0a07d5ca73e818d8a54f29b58b241c3ea82255e3ef98f83043\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721BaseMinimal.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = true;\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x6d5c6aa0e1b36eb2bde4584ff91f87a5411e4931e022b55966bda85c169008b9\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x60806040523480156200001157600080fd5b50604051620017f7380380620017f7833981016040819052620000349162000205565b600062000040620000cb565b600080546001600160a01b0319166001600160a01b038316908117825560405192935091600080516020620017d7833981519152908290a350600180546001600160a01b038087166001600160a01b031992831617909255600280548684169083161790556003805492851692909116919091179055620000c181620000cf565b5050505062000261565b3390565b620000d9620000cb565b6001600160a01b0316620000ec620001d9565b6001600160a01b03161462000148576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166200018f5760405162461bcd60e51b8152600401808060200182810382526026815260200180620017b16026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020620017d783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b80516001600160a01b03811681146200020057600080fd5b919050565b600080600080608085870312156200021b578384fd5b6200022685620001e8565b93506200023660208601620001e8565b92506200024660408601620001e8565b91506200025660608601620001e8565b905092959194509250565b61154080620002716000396000f3fe60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220c6da39aa047c7bcc743388596f3312d9e6c5276f87af5dbcc961f12ecaecb5ef64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000945760003560e01c806372397ad5116200006357806372397ad514620000f55780638da5cb5b146200010c5780639cf3178b1462000116578063f2fde38b146200012d5762000094565b806327050d1f14620000995780633928069514620000b257806359659e9014620000e1578063715018a614620000eb575b600080fd5b620000b0620000aa3660046200087b565b62000144565b005b620000c9620000c33660046200087b565b62000211565b604051620000d8919062000ac3565b60405180910390f35b620000c96200027a565b620000b062000289565b620000b0620001063660046200095f565b6200034c565b620000c962000410565b620000c9620001273660046200095f565b6200041f565b620000b06200013e36600462000857565b62000480565b6000620001606200015988888888886200059b565b8362000614565b9050806001600160a01b03811663f2fde38b6200017c62000643565b6040518263ffffffff1660e01b81526004016200019a919062000ac3565b600060405180830381600087803b158015620001b557600080fd5b505af1158015620001ca573d6000803e3d6000fd5b505050507f4768a3e06654c109507892e111851106a07f51f57cc0cfc3374a141e03c3f08f82604051620001ff919062000ac3565b60405180910390a15050505050505050565b6000806200022d6200022789898989896200059b565b62000647565b9050600060ff60f81b3085848051906020012060405160200162000255949392919062000a57565b60408051808303601f1901815291905280516020909101209998505050505050505050565b6001546001600160a01b031681565b6200029362000643565b6001600160a01b0316620002a662000410565b6001600160a01b03161462000302576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000620003606200015987878787620006c6565b9050806001600160a01b03811663f2fde38b6200037c62000643565b6040518263ffffffff1660e01b81526004016200039a919062000ac3565b600060405180830381600087803b158015620003b557600080fd5b505af1158015620003ca573d6000803e3d6000fd5b505050507fcc1a02f08b4aa92a7d307d9c65aec395a00ed50d5575adbd7447a85dfefdaf9282604051620003ff919062000ac3565b60405180910390a150505050505050565b6000546001600160a01b031690565b600080620004346200022788888888620006c6565b9050600060ff60f81b308584805190602001206040516020016200045c949392919062000a57565b60408051808303601f19018152919052805160209091012098975050505050505050565b6200048a62000643565b6001600160a01b03166200049d62000410565b6001600160a01b031614620004f9576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620005405760405162461bcd60e51b8152600401808060200182810382526026815260200180620014e56026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600254600354604051606092634648eb9d60e01b92620005d7928a928a928a928a928a926001600160a01b039182169291169060240162000b81565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152905095945050505050565b600080620006228462000647565b9050828151602083016000f59150813b6200063c57600080fd5b5092915050565b3390565b6060604051806020016200065b906200073b565b601f1982820381018352601f9091011660408190526001546200068f916001600160a01b0390911690859060200162000ad7565b60408051601f1981840301815290829052620006af929160200162000a90565b60405160208183030381529060405290505b919050565b600254600354604051606092631ed9cbe360e11b92620006ff9289928992899289926001600160a01b0390811692169060240162000b05565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050949350505050565b6108448062000ca183390190565b80356001600160a01b0381168114620006c157600080fd5b600082601f83011262000772578081fd5b8135602067ffffffffffffffff8211156200078957fe5b8082026200079982820162000c48565b838152828101908684018388018501891015620007b4578687fd5b8693505b85841015620007e157620007cc8162000749565b835260019390930192918401918401620007b8565b50979650505050505050565b600082601f830112620007fe578081fd5b813567ffffffffffffffff8111156200081357fe5b62000828601f8201601f191660200162000c48565b8181528460208386010111156200083d578283fd5b816020850160208301379081016020019190915292915050565b60006020828403121562000869578081fd5b620008748262000749565b9392505050565b60008060008060008060c0878903121562000894578182fd5b863567ffffffffffffffff80821115620008ac578384fd5b620008ba8a838b01620007ed565b97506020890135915080821115620008d0578384fd5b620008de8a838b01620007ed565b96506040890135915080821115620008f4578384fd5b620009028a838b01620007ed565b9550606089013591508082111562000918578384fd5b620009268a838b01620007ed565b945060808901359150808211156200093c578384fd5b506200094b89828a0162000761565b92505060a087013590509295509295509295565b600080600080600060a0868803121562000977578081fd5b853567ffffffffffffffff808211156200098f578283fd5b6200099d89838a01620007ed565b96506020880135915080821115620009b3578283fd5b620009c189838a01620007ed565b95506040880135915080821115620009d7578283fd5b620009e589838a01620007ed565b94506060880135915080821115620009fb578283fd5b5062000a0a88828901620007ed565b95989497509295608001359392505050565b6001600160a01b03169052565b6000815180845262000a4381602086016020860162000c6d565b601f01601f19169290920160200192915050565b6001600160f81b031994909416845260609290921b6bffffffffffffffffffffffff191660018401526015830152603582015260550190565b6000835162000aa481846020880162000c6d565b83519083019062000aba81836020880162000c6d565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b038316815260406020820181905260009062000afd9083018462000a29565b949350505050565b600060c0825262000b1a60c083018962000a29565b828103602084015262000b2e818962000a29565b9050828103604084015262000b44818862000a29565b9050828103606084015262000b5a818762000a29565b6001600160a01b0395861660808501529390941660a0909201919091525095945050505050565b600060e0825262000b9660e083018a62000a29565b60208382038185015262000bab828b62000a29565b9150838203604085015262000bc1828a62000a29565b9150838203606085015262000bd7828962000a29565b84810360808601528751808252828901935090820190845b8181101562000c165784516001600160a01b03168352938301939183019160010162000bef565b505080935050505062000c2d60a083018562000a1c565b62000c3c60c083018462000a1c565b98975050505050505050565b60405181810167ffffffffffffffff8111828210171562000c6557fe5b604052919050565b60005b8381101562000c8a57818101518382015260200162000c70565b8381111562000c9a576000848401525b5050505056fe60806040526040516108443803806108448339818101604052604081101561002657600080fd5b81516020830180516040519294929383019291908464010000000082111561004d57600080fd5b90830190602082018581111561006257600080fd5b825164010000000081118282018810171561007c57600080fd5b82525081516020918201929091019080838360005b838110156100a9578181015183820152602001610091565b50505050905090810190601f1680156100d65780820380516001836020036101000a031916815260200191505b50604052506100e3915050565b6100ed82826100f4565b505061047e565b6101078261024960201b6100311760201c565b6101425760405162461bcd60e51b81526004018080602001828103825260258152602001806107c56025913960400191505060405180910390fd5b6101ba826001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017e57600080fd5b505afa158015610192573d6000803e3d6000fd5b505050506040513d60208110156101a857600080fd5b5051610249602090811b61003117901c565b6101f55760405162461bcd60e51b81526004018080602001828103825260348152602001806108106034913960400191505060405180910390fd5b6000805160206107848339815191528281558151156102445761024261021961024f565b836040518060600160405280602181526020016107a4602191396102c260201b6100371760201c565b505b505050565b3b151590565b60006102596103c7565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561029157600080fd5b505afa1580156102a5573d6000803e3d6000fd5b505050506040513d60208110156102bb57600080fd5b5051905090565b60606102cd84610249565b6103085760405162461bcd60e51b81526004018080602001828103825260268152602001806107ea6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106103455780518252601f199092019160209182019101610326565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146103a5576040519150601f19603f3d011682016040523d82523d6000602084013e6103aa565b606091505b5090925090506103bb8282866103da565b925050505b9392505050565b6000805160206107848339815191525490565b606083156103e95750816103c0565b8251156103f95782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561044357818101518382015260200161042b565b50505050905090810190601f1680156104705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b6102f78061048d6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f61002f565b61002f61002a61013b565b6101ae565b565b3b151590565b606061004284610031565b61007d5760405162461bcd60e51b815260040180806020018281038252602681526020018061029c6026913960400191505060405180910390fd5b600080856001600160a01b0316856040518082805190602001908083835b602083106100ba5780518252601f19909201916020918201910161009b565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d806000811461011a576040519150601f19603f3d011682016040523d82523d6000602084013e61011f565b606091505b509150915061012f8282866101d2565b925050505b9392505050565b6000610145610276565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561017d57600080fd5b505afa158015610191573d6000803e3d6000fd5b505050506040513d60208110156101a757600080fd5b5051905090565b3660008037600080366000845af43d6000803e8080156101cd573d6000f35b3d6000fd5b606083156101e1575081610134565b8251156101f15782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561023b578181015183820152602001610223565b50505050905090810190601f1680156102685780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50549056fe416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374a26469706673582212200d13fbc9dd1124e596f23eb7f271a5a242d59277784a0254458aae2e0fa4bbd364736f6c63430007060033a3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50426561636f6e50726f78793a2066756e6374696f6e2063616c6c206661696c6564426561636f6e50726f78793a20626561636f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374426561636f6e50726f78793a20626561636f6e20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163744f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373a2646970667358221220c6da39aa047c7bcc743388596f3312d9e6c5276f87af5dbcc961f12ecaecb5ef64736f6c63430007060033", "devdoc": { "details": "This contract is for creating proxy to access ERC721Rarible token. The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.", "kind": "dev", @@ -341,7 +361,7 @@ "type": "t_address" }, { - "astId": 22273, + "astId": 23081, "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", "label": "beacon", "offset": 0, @@ -349,7 +369,7 @@ "type": "t_address" }, { - "astId": 22275, + "astId": 23083, "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", "label": "transferProxy", "offset": 0, @@ -357,7 +377,7 @@ "type": "t_address" }, { - "astId": 22277, + "astId": 23085, "contract": "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol:ERC721RaribleFactoryC2", "label": "lazyTransferProxy", "offset": 0, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal.json b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal.json index f60040c69..be9d5dee2 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal.json @@ -1,5 +1,5 @@ { - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "abi": [ { "anonymous": false, @@ -462,6 +462,49 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC721Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1139,122 +1182,137 @@ "type": "constructor" } ], - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", - "transactionIndex": 40, - "gasUsed": "1057484", - "logsBloom": "0x00000000000000000000800000000000400000000000000010800000000000000000000000000000000000000000000000000040000400001000000000000100000000000000000000200800080002080001000000000000000000000000000000000000020000000000001000000800000000800000020000100000000001500000000000000400000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000080000000000000400000000000000000420000000000000000020000000000000000000000000000000000000000001000100", - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec", - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", + "contractAddress": null, + "transactionIndex": 92, + "gasUsed": "1100227", + "logsBloom": "0x00000400000000000000000000000000400000000400800010800000000000000000000000000080000000000000000000000000000440000000004000000000000000000000000000000000000002000001000000000000004000000000200000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000002800000000000000000000002000000001040100004000000000000000000000000000100000020000200000000000001000000000000000400000000000000000020000000000000000060000000000000000000000000000000000000000001000000", + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd", + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", "logs": [ { - "transactionIndex": 40, - "blockNumber": 4793877, - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000002fce8435f0455edc702199741411dbcd1b7606ca" + "0x0000000000000000000000008c3b16c348ed4f0fb991f2be6ac3bfa16836a5e5" ], "data": "0x", - "logIndex": 62, - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec" + "logIndex": 204, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" }, { - "transactionIndex": 40, - "blockNumber": 4793877, - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 63, - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec" + "logIndex": 205, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" }, { - "transactionIndex": 40, - "blockNumber": 4793877, - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a094e566b61b3c2d88acf7cc15e3dd0fa83f32af" + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 64, - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec" + "logIndex": 206, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" }, { - "transactionIndex": 40, - "blockNumber": 4793877, - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a2eebb837aef89369ad117568d75348e6174520e" + "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 65, - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec" + "logIndex": 207, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + }, + { + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 208, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" }, { - "transactionIndex": 40, - "blockNumber": 4793877, - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "topics": [ "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" ], - "data": "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", - "logIndex": 66, - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec" + "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 209, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" }, { - "transactionIndex": 40, - "blockNumber": 4793877, - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1f689646861870d44b33dbbb413fa7d06a2b52f", - "logIndex": 67, - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec" + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 210, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" } ], - "blockNumber": 4793877, - "cumulativeGasUsed": "7178498", + "blockNumber": 5783753, + "cumulativeGasUsed": "10415903", "status": 1, "byzantium": true }, "args": [ - "0x2FCE8435F0455eDc702199741411dbcD1B7606cA", - "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", - "0x3db397c600000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000a094e566b61b3c2d88acf7cc15e3dd0fa83f32af000000000000000000000000a2eebb837aef89369ad117568d75348e6174520e000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0x8C3b16c348eD4f0fB991f2Be6AC3bFA16836A5E5", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", "execute": { - "methodName": "__ERC721Rarible_init", + "methodName": "__ERC721Rarible_init_proxy", "args": [ "Rarible", "RARI", "ipfs:/", "", - "0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af", - "0xa2eEBb837aEF89369Ad117568d75348e6174520e" + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ] }, - "implementation": "0x2FCE8435F0455eDc702199741411dbcD1B7606cA", + "implementation": "0x8C3b16c348eD4f0fB991f2Be6AC3bFA16836A5E5", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimalBeacon.json b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimalBeacon.json index 96263509a..0e1dcff34 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimalBeacon.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimalBeacon.json @@ -1,5 +1,5 @@ { - "address": "0x41407B447Fb5425187A9BCA3a062644EF2410F8D", + "address": "0xF4873a12132C87F96535059402b9EcE709a06c72", "abi": [ { "inputs": [ @@ -7,6 +7,11 @@ "internalType": "address", "name": "impl", "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" } ], "stateMutability": "nonpayable", @@ -104,45 +109,60 @@ "type": "function" } ], - "transactionHash": "0xf478551b7c15bc982683a57247c1ab273aba353a18f228df6d0b3526f5c74ae4", + "transactionHash": "0xaa4c1d4f97e1e09ba324221032ba61fcc50730e5365d29ba12ad8c7652fa27e8", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x41407B447Fb5425187A9BCA3a062644EF2410F8D", - "transactionIndex": 7, - "gasUsed": "356388", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000000000000000000020000040000000000000800000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000200000000000000000000000000000000000000000000", - "blockHash": "0x0433c655e733a99c6e012ca0793ebc9708a85266e815974f69b8485bf5a9f7bb", - "transactionHash": "0xf478551b7c15bc982683a57247c1ab273aba353a18f228df6d0b3526f5c74ae4", + "contractAddress": null, + "transactionIndex": 27, + "gasUsed": "394703", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040080000000000000000000000000000000000000000000000000001000000000000004000000000000001000000020000000000000000000800000000000000000000000000000000400000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xfeae486fc05c32a21a57f0d382303c1bf54a47bba9c3e1c655b11d483a9074bd", + "transactionHash": "0xaa4c1d4f97e1e09ba324221032ba61fcc50730e5365d29ba12ad8c7652fa27e8", "logs": [ { - "transactionIndex": 7, - "blockNumber": 4793878, - "transactionHash": "0xf478551b7c15bc982683a57247c1ab273aba353a18f228df6d0b3526f5c74ae4", - "address": "0x41407B447Fb5425187A9BCA3a062644EF2410F8D", + "transactionIndex": 27, + "blockNumber": 5783754, + "transactionHash": "0xaa4c1d4f97e1e09ba324221032ba61fcc50730e5365d29ba12ad8c7652fa27e8", + "address": "0xF4873a12132C87F96535059402b9EcE709a06c72", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 85, + "blockHash": "0xfeae486fc05c32a21a57f0d382303c1bf54a47bba9c3e1c655b11d483a9074bd" + }, + { + "transactionIndex": 27, + "blockNumber": 5783754, + "transactionHash": "0xaa4c1d4f97e1e09ba324221032ba61fcc50730e5365d29ba12ad8c7652fa27e8", + "address": "0xF4873a12132C87F96535059402b9EcE709a06c72", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 8, - "blockHash": "0x0433c655e733a99c6e012ca0793ebc9708a85266e815974f69b8485bf5a9f7bb" + "logIndex": 86, + "blockHash": "0xfeae486fc05c32a21a57f0d382303c1bf54a47bba9c3e1c655b11d483a9074bd" } ], - "blockNumber": 4793878, - "cumulativeGasUsed": "2983604", + "blockNumber": 5783754, + "cumulativeGasUsed": "4326620", "status": 1, "byzantium": true }, "args": [ - "0x2FCE8435F0455eDc702199741411dbcD1B7606cA" + "0x8C3b16c348eD4f0fB991f2Be6AC3bFA16836A5E5", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, - "solcInputHash": "1e83608a8d677752f3c67873d3574235", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\":\"ERC721RaribleMinimalBeacon\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\\n constructor(address impl) UpgradeableBeacon(impl) {\\n\\n }\\n}\\n\",\"keccak256\":\"0x373664a30cbe44e442d055cae5ae935c7c3a9bcddb6f9f8fa79cb0e767a93f0c\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506040516105d73803806105d78339818101604052602081101561003357600080fd5b505180600061004061009a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506100938161009e565b5050610114565b3390565b6100b18161010e60201b6103821760201c565b6100ec5760405162461bcd60e51b81526004018080602001828103825260338152602001806105a46033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b610481806101236000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212201ca8157d439eba6d8f9274010072e0c311e6540da8a0fa6f2029a22e6097d10964736f6c634300070600335570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a26469706673582212201ca8157d439eba6d8f9274010072e0c311e6540da8a0fa6f2029a22e6097d10964736f6c63430007060033", + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"impl\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"implementation()\":{\"details\":\"Returns the current implementation address.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeTo(address)\":{\"details\":\"Upgrades the beacon to a new implementation. Emits an {Upgraded} event. Requirements: - msg.sender must be the owner of the contract. - `newImplementation` must be a contract.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\":\"ERC721RaribleMinimalBeacon\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0x77c167740c8227e2569064dabdb2d683800f409743bda1bab8d66d5a2dae3674\",\"license\":\"MIT\"},\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IBeacon.sol\\\";\\nimport \\\"../access/Ownable.sol\\\";\\nimport \\\"../utils/Address.sol\\\";\\n\\n/**\\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\\n * implementation contract, which is where they will delegate all function calls.\\n *\\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\\n */\\ncontract UpgradeableBeacon is IBeacon, Ownable {\\n address private _implementation;\\n\\n /**\\n * @dev Emitted when the implementation returned by the beacon is changed.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\\n * beacon.\\n */\\n constructor(address implementation_) public {\\n _setImplementation(implementation_);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function implementation() public view virtual override returns (address) {\\n return _implementation;\\n }\\n\\n /**\\n * @dev Upgrades the beacon to a new implementation.\\n *\\n * Emits an {Upgraded} event.\\n *\\n * Requirements:\\n *\\n * - msg.sender must be the owner of the contract.\\n * - `newImplementation` must be a contract.\\n */\\n function upgradeTo(address newImplementation) public virtual onlyOwner {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Sets the implementation contract address for this beacon\\n *\\n * Requirements:\\n *\\n * - `newImplementation` must be a contract.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"UpgradeableBeacon: implementation is not a contract\\\");\\n _implementation = newImplementation;\\n }\\n}\\n\",\"keccak256\":\"0xf847ef1384c87c1484b3989ce81c6dab106a9b4e519eb587ad0e897bdf62c3f4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x28911e614500ae7c607a432a709d35da25f3bc5ddc8bd12b278b66358070c0ea\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nimport \\\"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\\\";\\n\\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\\n transferOwnership(initialOwner);\\n }\\n}\\n\",\"keccak256\":\"0x77cf934f2fb1f2658d912865ed8c387c02ca2b44178fee4b07b6005773b6ea42\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5060405161072d38038061072d8339818101604052604081101561003357600080fd5b508051602090910151816000610047610099565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602061070d833981519152908290a3506100888161009d565b506100928161010d565b5050610224565b3390565b6100b08161020f60201b6103821760201c565b6100eb5760405162461bcd60e51b81526004018080602001828103825260338152602001806106da6033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610115610099565b6001600160a01b0316610126610215565b6001600160a01b031614610181576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166101c65760405162461bcd60e51b81526004018080602001828103825260268152602001806106b46026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061070d83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b6000546001600160a01b031690565b610481806102336000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220c172e9a9b4a368f199c712213814e72ba087879684ebf2d4522578c23b9f624c64736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e74726163748be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610084578063715018a6146100a85780638da5cb5b146100b0578063f2fde38b146100b8575b600080fd5b6100826004803603602081101561007257600080fd5b50356001600160a01b03166100de565b005b61008c610192565b604080516001600160a01b039092168252519081900360200190f35b6100826101a1565b61008c61025f565b610082600480360360208110156100ce57600080fd5b50356001600160a01b031661026e565b6100e6610388565b6001600160a01b03166100f761025f565b6001600160a01b031614610152576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b61015b8161038c565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001546001600160a01b031690565b6101a9610388565b6001600160a01b03166101ba61025f565b6001600160a01b031614610215576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b610276610388565b6001600160a01b031661028761025f565b6001600160a01b0316146102e2576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166103275760405162461bcd60e51b81526004018080602001828103825260268152602001806103f36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3b151590565b3390565b61039581610382565b6103d05760405162461bcd60e51b81526004018080602001828103825260338152602001806104196033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b039290921691909117905556fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374a2646970667358221220c172e9a9b4a368f199c712213814e72ba087879684ebf2d4522578c23b9f624c64736f6c63430007060033", "devdoc": { "kind": "dev", "methods": { @@ -180,7 +200,7 @@ "type": "t_address" }, { - "astId": 6181, + "astId": 6517, "contract": "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol:ERC721RaribleMinimalBeacon", "label": "_implementation", "offset": 0, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Implementation.json b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Implementation.json index 375638be0..416eb5ecb 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Implementation.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0x2FCE8435F0455eDc702199741411dbcD1B7606cA", + "address": "0x8C3b16c348eD4f0fB991f2Be6AC3bFA16836A5E5", "abi": [ { "anonymous": false, @@ -339,6 +339,49 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "baseURI", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "address", + "name": "transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "lazyTransferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__ERC721Rarible_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -995,28 +1038,28 @@ "type": "function" } ], - "transactionHash": "0x675cbdf7dff4ad1337afeb684d9b0db0561b0db028bb8d6762b119b8ca9a8ecb", + "transactionHash": "0xa3dc30a51c919692e5cb42f0d9bdba04708526dc2eaef79e4ae3b6e99ce3da7f", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x2FCE8435F0455eDc702199741411dbcD1B7606cA", - "transactionIndex": 59, - "gasUsed": "4120702", + "contractAddress": null, + "transactionIndex": 67, + "gasUsed": "4238220", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x9fcae78fbf564db49e92c80a9eddfcc91c2c0aff2fe5af9f38d5d9452a166dc0", - "transactionHash": "0x675cbdf7dff4ad1337afeb684d9b0db0561b0db028bb8d6762b119b8ca9a8ecb", + "blockHash": "0x0c1b9ebdeab203b31a70fbb2eeb072a90eee42d860045931f6abcf2ba959ea4d", + "transactionHash": "0xa3dc30a51c919692e5cb42f0d9bdba04708526dc2eaef79e4ae3b6e99ce3da7f", "logs": [], - "blockNumber": 4793876, - "cumulativeGasUsed": "8861573", + "blockNumber": 5783752, + "cumulativeGasUsed": "13292081", "status": 1, "byzantium": true }, "args": [], "numDeployments": 1, - "solcInputHash": "1e83608a8d677752f3c67873d3574235", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"burn(uint256)\":{\"details\":\"Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":\"ERC721RaribleMinimal\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3c7253e5d93ae74f4a010f612f7078682877d4590ef2e09780a5d14d08b3e224\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal initializer {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal initializer {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xe08567223d4fd1193d2b69bca23140aaf4d6e664f934c02b861f7c39b02c5771\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721BaseMinimal.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = true;\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x189d72b3e2bae68029d2341c9a6f7e98dcbd94cc47703b3ae4e25f89facb9f29\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b5061498b806100206000396000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f578063aa271e1a116100a2578063e07f231911610071578063e07f23191461042c578063e8a3d4851461043f578063e985e9c514610447578063f2fde38b1461045a576101f0565b8063aa271e1a146103e0578063b88d4fde146103f3578063c87b56dd14610406578063cad96cca14610419576101f0565b80638da5cb5b116100de5780638da5cb5b146103aa57806395d89b41146103b2578063983b2d56146103ba578063a22cb465146103cd576101f0565b8063715018a61461035c57806371e2a65714610364578063832fbb2914610377578063891be9741461038a576101f0565b80633db397c61161018757806355f804b31161015657806355f804b31461030e5780636352211e146103215780636c0360eb1461033457806370a082311461033c576101f0565b80633db397c6146102c257806342842e0e146102d557806342966c68146102e85780634648eb9d146102fb576101f0565b806322a775b6116101c357806322a775b61461026857806323b872dd1461027b5780632a55205a1461028e5780633092afd5146102af576101f0565b806301ffc9a7146101f557806306fdde031461021e578063081812fc14610233578063095ea7b314610253575b600080fd5b610208610203366004613f7b565b61046d565b60405161021591906143a4565b60405180910390f35b610226610480565b60405161021591906143af565b61024661024136600461422d565b610516565b604051610215919061432e565b610266610261366004613f1e565b610579565b005b610266610276366004614188565b61064f565b610266610289366004613e44565b6106f1565b6102a161029c36600461426b565b610748565b604051610215929190614378565b6102666102bd366004613df0565b610856565b6102666102d0366004613fd5565b610906565b6102666102e3366004613e44565b610969565b6102666102f636600461422d565b610984565b61026661030936600461409c565b610a4e565b61026661031c366004613fa3565b610ab5565b61024661032f36600461422d565b610b5a565b610226610bae565b61034f61034a366004613df0565b610c10565b6040516102159190614575565b610266610c74565b610266610372366004613f49565b610d20565b6102666103853660046141cc565b610e05565b61039d61039836600461422d565b610e80565b6040516102159190614391565b610246610f10565b610226610f1f565b6102666103c8366004613df0565b610f80565b6102666103db366004613eed565b611035565b6102086103ee366004613df0565b61113b565b610266610401366004613e84565b61115a565b61022661041436600461422d565b6111b8565b61039d61042736600461422d565b6111c3565b61026661043a366004614245565b61123e565b610226611281565b610208610455366004613e0c565b611310565b610266610468366004613df0565b611325565b600061047882611428565b90505b919050565b60fd8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561050c5780601f106104e15761010080835404028352916020019161050c565b820191906000526020600020905b8154815290600101906020018083116104ef57829003601f168201915b5050505050905090565b6000610521826114e2565b61055c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806147bf602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b600061058482610b5a565b9050806001600160a01b0316836001600160a01b031614156105d75760405162461bcd60e51b81526004018080602001828103825260218152602001806148af6021913960400191505060405180910390fd5b806001600160a01b03166105e96114ff565b6001600160a01b031614806106055750610605816104556114ff565b6106405760405162461bcd60e51b81526004018080602001828103825260388152602001806146b76038913960400191505060405180910390fd5b61064a8383611503565b505050565b6102925460ff16156106e357816040015160008151811061066c57fe5b6020026020010151600001516001600160a01b0316610689610f10565b6001600160a01b031614806106be57506106be82604001516000815181106106ad57fe5b60200260200101516000015161113b565b6106e35760405162461bcd60e51b81526004016106da906143ed565b60405180910390fd5b6106ed8282611572565b5050565b6107026106fc6114ff565b826116f4565b61073d5760405162461bcd60e51b81526004018080602001828103825260318152602001806148d06031913960400191505060405180910390fd5b61064a838383611700565b60008281526101c6602052604081205481906107695750600090508061084f565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b828210156107e557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610796565b505050509050806000815181106107f857fe5b60209081029190910101515192506000805b82518110156108435782818151811061081f57fe5b6020026020010151602001516001600160601b03168201915080600101905061080a565b50612710908502049150505b9250929050565b61085e6114ff565b6001600160a01b031661086f610f10565b6001600160a01b0316146108b8576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b61091486868686868661181f565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd6109486114ff565b878760405161095993929190614342565b60405180910390a1505050505050565b61064a8383836040518060200160405280600081525061115a565b61098d816114e2565b6109fc57606081901c61099e6114ff565b6001600160a01b0316816001600160a01b0316146109ed5760405162461bcd60e51b815260040180806020018281038252602d815260200180614792602d913960400191505060405180910390fd5b6109f682611939565b50610a4b565b610a076106fc6114ff565b610a425760405162461bcd60e51b81526004018080602001828103825260308152602001806149266030913960400191505060405180910390fd5b610a4b81611955565b50565b610a5c87878787868661181f565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e9913610a936114ff565b8888604051610aa493929190614342565b60405180910390a150505050505050565b610abd6114ff565b6001600160a01b0316610ace610f10565b6001600160a01b031614610b17576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b610b20816119f1565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d681604051610b4f91906143af565b60405180910390a150565b600081815260ff60205260408120546001600160a01b0316806104785760405162461bcd60e51b81526004018080602001828103825260298152602001806147196029913960400191505060405180910390fd5b6101c88054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561050c5780601f106104e15761010080835404028352916020019161050c565b60006001600160a01b038216610c575760405162461bcd60e51b815260040180806020018281038252602a8152602001806146ef602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b610c7c6114ff565b6001600160a01b0316610c8d610f10565b6001600160a01b031614610cd6576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b610d286114ff565b6001600160a01b0316610d39610f10565b6001600160a01b031614610d82576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b60005b81518110156106ed576000828281518110610d9c57fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a350600101610d85565b8251610e10906114e2565b15610e2957610e2482828560000151610969565b61064a565b8260400151600081518110610e3a57fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614610e765760405162461bcd60e51b81526004016106da906143c2565b61064a838261064f565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f0557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610eb6565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561050c5780601f106104e15761010080835404028352916020019161050c565b610f886114ff565b6001600160a01b0316610f99610f10565b6001600160a01b031614610fe2576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b61103d6114ff565b6001600160a01b0316826001600160a01b031614156110a3576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006110b16114ff565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556110f56114ff565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b61116b6111656114ff565b836116f4565b6111a65760405162461bcd60e51b81526004018080602001828103825260318152602001806148d06031913960400191505060405180910390fd5b6111b284848484611a05565b50505050565b606061047882611a57565b60008181526101c660209081526040808320805482518185028101850190935280835260609492939192909184018215610f0557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610eb6565b816001600160a01b03166112506114ff565b6001600160a01b0316146112765760405162461bcd60e51b81526004016106da9061447a565b61064a838383611a62565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156113085780601f106112dd57610100808354040283529160200191611308565b820191906000526020600020905b8154815290600101906020018083116112eb57829003601f168201915b505050505081565b600061131c8383611b0e565b90505b92915050565b61132d6114ff565b6001600160a01b031661133e610f10565b6001600160a01b031614611387576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6001600160a01b0381166113cc5760405162461bcd60e51b815260040180806020018281038252602681526020018061461f6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b03198216638486f69f60e01b148061145957506001600160e01b0319821663656cb66560e11b145b8061147457506001600160e01b0319821663152a902d60e11b145b8061148f57506001600160e01b031982166301ffc9a760e01b145b806114aa57506001600160e01b031982166380ac58cd60e01b145b806114c557506001600160e01b03198216635b5e139f60e01b145b806104785750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b3390565b60008181526101016020526040902080546001600160a01b0319166001600160a01b038416908117909155819061153982610b5a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b815160601c60006115816114ff565b9050836040015160008151811061159457fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146115d05760405162461bcd60e51b81526004016106da9061444f565b836080015151846040015151146115e657600080fd5b806001600160a01b0316826001600160a01b0316148061160b575061160b8282611310565b6116275760405162461bcd60e51b81526004016106da906144d6565b600061163285611b3b565b905060005b8560400151518110156116a85760008660400151828151811061165657fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b03161461169f5761169f81848960800151858151811061169257fe5b6020026020010151611d82565b50600101611637565b506116b7848660000151611d8d565b6116c985600001518660600151611da7565b6116db85600001518660400151611f96565b6116ed85600001518660200151612145565b5050505050565b600061131c83836121a9565b826001600160a01b031661171382610b5a565b6001600160a01b0316146117585760405162461bcd60e51b81526004018080602001828103825260298152602001806148376029913960400191505060405180910390fd5b6001600160a01b03821661179d5760405162461bcd60e51b81526004018080602001828103825260248152602001806146456024913960400191505060405180910390fd5b6117a883838361064a565b6117b3600082611503565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b0319168217905592518493929160008051602061488f83398151915291a4505050565b600054610100900460ff168061183857506118386121d6565b80611846575060005460ff16155b6118815760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156118ac576000805460ff1961ff0019909116610100171660011790555b6118b5856119f1565b6118bd6121e7565b6118c5612288565b6118cd6121e7565b6118d5612325565b6118dd6123c2565b6118e56121e7565b6118ed6124bb565b6118f56121e7565b6118fe8461258a565b6119088787612651565b61191383600161273c565b61191e82600161273c565b8015611930576000805461ff00191690555b50505050505050565b600090815261010360205260409020805460ff19166001179055565b600061196082610b5a565b905061196e8160008461064a565b611979600083611503565b6119828261279d565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b03191690556119c782611939565b60405182906000906001600160a01b0384169060008051602061488f833981519152908390a45050565b80516106ed906101c8906020840190613a58565b611a10848484611700565b611a1c848484846127a6565b6111b25760405162461bcd60e51b81526004018080602001828103825260328152602001806145ed6032913960400191505060405180910390fd5b60606104788261295c565b60008381526101c66020526040812054905b818110156116ed5760008581526101c66020526040902080546001600160a01b038616919083908110611aa357fe5b6000918252602090912001546001600160a01b03161415611b065760008581526101c660205260409020805484919083908110611adc57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101611a74565b6001600160a01b038116600090815261012f602052604081205460ff168061131c575061131c8383612b37565b6000808260600151516001600160401b0381118015611b5957600080fd5b50604051908082528060200260200182016040528015611b83578160200160208202803683370190505b50905060005b836060015151811015611bd557611bb684606001518281518110611ba957fe5b6020026020010151612b66565b828281518110611bc257fe5b6020908102919091010152600101611b89565b5060008360400151516001600160401b0381118015611bf357600080fd5b50604051908082528060200260200182016040528015611c1d578160200160208202803683370190505b50905060005b846040015151811015611c6257611c4385604001518281518110611ba957fe5b828281518110611c4f57fe5b6020908102919091010152600101611c23565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b83811015611cc6578181015183820152602001611cae565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b83811015611d17578181015183820152602001611cff565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b61064a838383612bd3565b6106ed828260405180602001604052806000815250612e52565b6000805b8251811015611f4b5760006001600160a01b0316838281518110611dcb57fe5b6020026020010151600001516001600160a01b03161415611e33576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b828181518110611e3f57fe5b6020026020010151602001516001600160601b031660001415611ea9576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b828181518110611eb557fe5b6020026020010151602001516001600160601b0316820191506101c66000858152602001908152602001600020838281518110611eee57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501611dab565b506127108110611f8c5760405162461bcd60e51b81526004018080602001828103825260258152602001806149016025913960400191505060405180910390fd5b61064a8383612ea4565b60008281526101fb6020526040812090805b83518110156120e45760006001600160a01b0316848281518110611fc857fe5b6020026020010151600001516001600160a01b03161415611ffb5760405162461bcd60e51b81526004016106da9061449f565b83818151811061200757fe5b6020026020010151602001516001600160601b03166000141561203c5760405162461bcd60e51b81526004016106da9061441a565b8284828151811061204957fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b03199092169190911790921691909117905583516120da908590839081106120b657fe5b6020026020010151602001516001600160601b031683612ee190919063ffffffff16565b9150600101611fa8565b5080612710146121065760405162461bcd60e51b81526004016106da90614527565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f848460405161213792919061457e565b60405180910390a150505050565b61214e826114e2565b6121895760405162461bcd60e51b815260040180806020018281038252602c8152602001806147eb602c913960400191505060405180910390fd5b60008281526101c760209081526040909120825161064a92840190613a58565b6001600160a01b038216600090815261012f602052604081205460ff168061131c575061131c8383612f3b565b60006121e130612fd7565b15905090565b600054610100900460ff168061220057506122006121d6565b8061220e575060005460ff16155b6122495760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612274576000805460ff1961ff0019909116610100171660011790555b8015610a4b576000805461ff001916905550565b600054610100900460ff16806122a157506122a16121d6565b806122af575060005460ff16155b6122ea5760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612315576000805460ff1961ff0019909116610100171660011790555b61227463656cb66560e11b612fdd565b600054610100900460ff168061233e575061233e6121d6565b8061234c575060005460ff16155b6123875760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156123b2576000805460ff1961ff0019909116610100171660011790555b6122746301ffc9a760e01b612fdd565b600054610100900460ff16806123db57506123db6121d6565b806123e9575060005460ff16155b6124245760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff1615801561244f576000805460ff1961ff0019909116610100171660011790555b60006124596114ff565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610a4b576000805461ff001916905550565b600054610100900460ff16806124d457506124d46121d6565b806124e2575060005460ff16155b61251d5760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612548576000805460ff1961ff0019909116610100171660011790555b612274604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b815250613061565b600054610100900460ff16806125a357506125a36121d6565b806125b1575060005460ff16155b6125ec5760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612617576000805460ff1961ff0019909116610100171660011790555b815161262b9061022e906020850190613a58565b5061263c63e8a3d48560e01b612fdd565b80156106ed576000805461ff00191690555050565b600054610100900460ff168061266a575061266a6121d6565b80612678575060005460ff16155b6126b35760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156126de576000805460ff1961ff0019909116610100171660011790555b82516126f19060fd906020860190613a58565b5081516127059060fe906020850190613a58565b506127166380ac58cd60e01b612fdd565b612726635b5e139f60e01b612fdd565b801561064a576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b610a4b81613121565b60006127ba846001600160a01b0316612fd7565b1561295057836001600160a01b031663150b7a026127d66114ff565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612849578181015183820152602001612831565b50505050905090810190601f1680156128765780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561289857600080fd5b505af19250505080156128bd57506040513d60208110156128b857600080fd5b505160015b612936573d8080156128eb576040519150601f19603f3d011682016040523d82523d6000602084013e6128f0565b606091505b50805161292e5760405162461bcd60e51b81526004018080602001828103825260328152602001806145ed6032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612954565b5060015b949350505050565b6060612967826114e2565b6129a25760405162461bcd60e51b815260040180806020018281038252602f815260200180614860602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f810185900485028201850190935282815292909190830182828015612a365780601f10612a0b57610100808354040283529160200191612a36565b820191906000526020600020905b815481529060010190602001808311612a1957829003601f168201915b505050505090506000612a47610bae565b9050805160001415612a5b5750905061047b565b815115612a7557612a6c818361312a565b9250505061047b565b80612a7f8561330f565b6040516020018083805190602001908083835b60208310612ab15780518252601f199092019160209182019101612a92565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612af95780518252601f199092019160209182019101612ada565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000612bde836133e9565b90506000825160411415612bf957612bf68284613435565b90505b846001600160a01b0316816001600160a01b0316146116ed57612c24856001600160a01b0316612fd7565b15612dda5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b83811015612c93578181015183820152602001612c7b565b50505050905090810190601f168015612cc05780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015612cde57600080fd5b505afa158015612cf2573d6000803e3d6000fd5b505050506040513d6020811015612d0857600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b031990911614612dd45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d99578181015183820152602001612d81565b50505050905090810190601f168015612dc65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506116ed565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315612d99578181015183820152602001612d81565b612e5c83836134b5565b612e6960008484846127a6565b61064a5760405162461bcd60e51b81526004018080602001828103825260328152602001806145ed6032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612ed592919061457e565b60405180910390a15050565b60008282018381101561131c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000612f46826114e2565b612f815760405162461bcd60e51b815260040180806020018281038252602c81526020018061468b602c913960400191505060405180910390fd5b6000612f8c83610b5a565b9050806001600160a01b0316846001600160a01b03161480612fc75750836001600160a01b0316612fbc84610516565b6001600160a01b0316145b8061295457506129548185611310565b3b151590565b6001600160e01b0319808216141561303c576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff168061307a575061307a6121d6565b80613088575060005460ff16155b6130c35760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156130ee576000805460ff1961ff0019909116610100171660011790555b8251602080850191909120835191840191909120609791909155609855801561064a576000805461ff0019169055505050565b610a4b8161361b565b805182516060918491849110156131f55784846040516020018083805190602001908083835b6020831061316f5780518252601f199092019160209182019101613150565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106131b75780518252601f199092019160209182019101613198565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529250505061131f565b60005b82518110156133055782818151811061320d57fe5b602001015160f81c60f81b6001600160f81b03191682828151811061322e57fe5b01602001516001600160f81b031916146132fd5785856040516020018083805190602001908083835b602083106132765780518252601f199092019160209182019101613257565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106132be5780518252601f19909201916020918201910161329f565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052935050505061131f565b6001016131f8565b5092949350505050565b60608161333457506040805180820190915260018152600360fc1b602082015261047b565b8160005b811561334c57600101600a82049150613338565b6000816001600160401b038111801561336457600080fd5b506040519080825280601f01601f19166020018201604052801561338f576020820181803683370190505b50859350905060001982015b83156133e057600a840660300160f81b828280600190039350815181106133be57fe5b60200101906001600160f81b031916908160001a905350600a8404935061339b565b50949350505050565b60006133f361365b565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000815160411461348d576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6134ab8682858561369b565b9695505050505050565b6001600160a01b038216613510576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff161561356c576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b613575816114e2565b156135c7576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b6135d36000838361064a565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b03191690911790556106ed82826138f1565b60008181526101c760205260409020546002600019610100600184161502019091160415610a4b5760008181526101c760205260408120610a4b91613ae4565b60006136967f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6136896138fb565b613691613901565b613907565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156136fc5760405162461bcd60e51b81526004018080602001828103825260228152602001806146696022913960400191505060405180910390fd5b6000601e8560ff1611156137d6576004850360ff16601b148061372557506004850360ff16601c145b6137605760405162461bcd60e51b81526004018080602001828103825260228152602001806147706022913960400191505060405180910390fd5b600161376b87613969565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156137c5573d6000803e3d6000fd5b50505060206040510351905061388d565b8460ff16601b14806137eb57508460ff16601c145b6138265760405162461bcd60e51b81526004018080602001828103825260228152602001806147706022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613880573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166138e8576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6106ed82826139ba565b60975490565b60985490565b6000838383613914613a54565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b0383168114613a295760405182906001600160a01b0383169060009060008051602061488f833981519152908290a481836001600160a01b0316826001600160a01b031660008051602061488f83398151915260405160405180910390a461064a565b60405182906001600160a01b0385169060009060008051602061488f833981519152908290a4505050565b4690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613a8e5760008555613ad4565b82601f10613aa757805160ff1916838001178555613ad4565b82800160010185558215613ad4579182015b82811115613ad4578251825591602001919060010190613ab9565b50613ae0929150613b24565b5090565b50805460018160011615610100020316600290046000825580601f10613b0a5750610a4b565b601f016020900490600052602060002090810190610a4b91905b5b80821115613ae05760008155600101613b25565b803561047b816145d7565b600082601f830112613b54578081fd5b81356020613b69613b64836145ba565b614597565b8281528181019085830183850287018401881015613b85578586fd5b855b85811015613bac578135613b9a816145d7565b84529284019290840190600101613b87565b5090979650505050505050565b600082601f830112613bc9578081fd5b81356020613bd9613b64836145ba565b82815281810190858301855b85811015613bac57613bfc898684358b0101613cc9565b84529284019290840190600101613be5565b600082601f830112613c1e578081fd5b81356020613c2e613b64836145ba565b82815281810190858301604080860288018501891015613c4c578687fd5b865b86811015613cbb5781838b031215613c64578788fd5b81518281018181106001600160401b0382111715613c7e57fe5b83528335613c8b816145d7565b8152838701356001600160601b0381168114613ca557898afd5b8188015285529385019391810191600101613c4e565b509198975050505050505050565b600082601f830112613cd9578081fd5b81356001600160401b03811115613cec57fe5b613cff601f8201601f1916602001614597565b818152846020838601011115613d13578283fd5b816020850160208301379081016020019190915292915050565b600060a08284031215613d3e578081fd5b613d4860a0614597565b90508135815260208201356001600160401b0380821115613d6857600080fd5b613d7485838601613cc9565b60208401526040840135915080821115613d8d57600080fd5b613d9985838601613c0e565b60408401526060840135915080821115613db257600080fd5b613dbe85838601613c0e565b60608401526080840135915080821115613dd757600080fd5b50613de484828501613bb9565b60808301525092915050565b600060208284031215613e01578081fd5b813561131c816145d7565b60008060408385031215613e1e578081fd5b8235613e29816145d7565b91506020830135613e39816145d7565b809150509250929050565b600080600060608486031215613e58578081fd5b8335613e63816145d7565b92506020840135613e73816145d7565b929592945050506040919091013590565b60008060008060808587031215613e99578081fd5b8435613ea4816145d7565b93506020850135613eb4816145d7565b92506040850135915060608501356001600160401b03811115613ed5578182fd5b613ee187828801613cc9565b91505092959194509250565b60008060408385031215613eff578182fd5b8235613f0a816145d7565b915060208301358015158114613e39578182fd5b60008060408385031215613f30578182fd5b8235613f3b816145d7565b946020939093013593505050565b600060208284031215613f5a578081fd5b81356001600160401b03811115613f6f578182fd5b61295484828501613b44565b600060208284031215613f8c578081fd5b81356001600160e01b03198116811461131c578182fd5b600060208284031215613fb4578081fd5b81356001600160401b03811115613fc9578182fd5b61295484828501613cc9565b60008060008060008060c08789031215613fed578384fd5b86356001600160401b0380821115614003578586fd5b61400f8a838b01613cc9565b97506020890135915080821115614024578586fd5b6140308a838b01613cc9565b96506040890135915080821115614045578586fd5b6140518a838b01613cc9565b95506060890135915080821115614066578384fd5b5061407389828a01613cc9565b93505061408260808801613b39565b915061409060a08801613b39565b90509295509295509295565b600080600080600080600060e0888a0312156140b6578485fd5b87356001600160401b03808211156140cc578687fd5b6140d88b838c01613cc9565b985060208a01359150808211156140ed578687fd5b6140f98b838c01613cc9565b975060408a013591508082111561410e578687fd5b61411a8b838c01613cc9565b965060608a013591508082111561412f578283fd5b61413b8b838c01613cc9565b955060808a0135915080821115614150578283fd5b5061415d8a828b01613b44565b93505061416c60a08901613b39565b915061417a60c08901613b39565b905092959891949750929550565b6000806040838503121561419a578182fd5b82356001600160401b038111156141af578283fd5b6141bb85828601613d2d565b9250506020830135613e39816145d7565b6000806000606084860312156141e0578081fd5b83356001600160401b038111156141f5578182fd5b61420186828701613d2d565b9350506020840135614212816145d7565b91506040840135614222816145d7565b809150509250925092565b60006020828403121561423e578081fd5b5035919050565b600080600060608486031215614259578081fd5b833592506020840135614212816145d7565b6000806040838503121561427d578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156142d857815180516001600160a01b031688528301516001600160601b0316838801526040909601959082019060010161429f565b509495945050505050565b60008151808452815b81811015614308576020818501810151868301820152016142ec565b818111156143195782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614366908301856142e3565b82810360408401526134ab81856142e3565b6001600160a01b03929092168252602082015260400190565b60006020825261131c602083018461428c565b901515815260200190565b60006020825261131c60208301846142e3565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b600083825260406020830152612954604083018461428c565b6040518181016001600160401b03811182821017156145b257fe5b604052919050565b60006001600160401b038211156145cd57fe5b5060209081020190565b6001600160a01b0381168114610a4b57600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220872bc930150cac441fe8e7a9d3bc2a73c62da627ee61bc24187073649c45a4a564736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101f05760003560e01c8063715018a61161010f578063aa271e1a116100a2578063e07f231911610071578063e07f23191461042c578063e8a3d4851461043f578063e985e9c514610447578063f2fde38b1461045a576101f0565b8063aa271e1a146103e0578063b88d4fde146103f3578063c87b56dd14610406578063cad96cca14610419576101f0565b80638da5cb5b116100de5780638da5cb5b146103aa57806395d89b41146103b2578063983b2d56146103ba578063a22cb465146103cd576101f0565b8063715018a61461035c57806371e2a65714610364578063832fbb2914610377578063891be9741461038a576101f0565b80633db397c61161018757806355f804b31161015657806355f804b31461030e5780636352211e146103215780636c0360eb1461033457806370a082311461033c576101f0565b80633db397c6146102c257806342842e0e146102d557806342966c68146102e85780634648eb9d146102fb576101f0565b806322a775b6116101c357806322a775b61461026857806323b872dd1461027b5780632a55205a1461028e5780633092afd5146102af576101f0565b806301ffc9a7146101f557806306fdde031461021e578063081812fc14610233578063095ea7b314610253575b600080fd5b610208610203366004613f7b565b61046d565b60405161021591906143a4565b60405180910390f35b610226610480565b60405161021591906143af565b61024661024136600461422d565b610516565b604051610215919061432e565b610266610261366004613f1e565b610579565b005b610266610276366004614188565b61064f565b610266610289366004613e44565b6106f1565b6102a161029c36600461426b565b610748565b604051610215929190614378565b6102666102bd366004613df0565b610856565b6102666102d0366004613fd5565b610906565b6102666102e3366004613e44565b610969565b6102666102f636600461422d565b610984565b61026661030936600461409c565b610a4e565b61026661031c366004613fa3565b610ab5565b61024661032f36600461422d565b610b5a565b610226610bae565b61034f61034a366004613df0565b610c10565b6040516102159190614575565b610266610c74565b610266610372366004613f49565b610d20565b6102666103853660046141cc565b610e05565b61039d61039836600461422d565b610e80565b6040516102159190614391565b610246610f10565b610226610f1f565b6102666103c8366004613df0565b610f80565b6102666103db366004613eed565b611035565b6102086103ee366004613df0565b61113b565b610266610401366004613e84565b61115a565b61022661041436600461422d565b6111b8565b61039d61042736600461422d565b6111c3565b61026661043a366004614245565b61123e565b610226611281565b610208610455366004613e0c565b611310565b610266610468366004613df0565b611325565b600061047882611428565b90505b919050565b60fd8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561050c5780601f106104e15761010080835404028352916020019161050c565b820191906000526020600020905b8154815290600101906020018083116104ef57829003601f168201915b5050505050905090565b6000610521826114e2565b61055c5760405162461bcd60e51b815260040180806020018281038252602c8152602001806147bf602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b600061058482610b5a565b9050806001600160a01b0316836001600160a01b031614156105d75760405162461bcd60e51b81526004018080602001828103825260218152602001806148af6021913960400191505060405180910390fd5b806001600160a01b03166105e96114ff565b6001600160a01b031614806106055750610605816104556114ff565b6106405760405162461bcd60e51b81526004018080602001828103825260388152602001806146b76038913960400191505060405180910390fd5b61064a8383611503565b505050565b6102925460ff16156106e357816040015160008151811061066c57fe5b6020026020010151600001516001600160a01b0316610689610f10565b6001600160a01b031614806106be57506106be82604001516000815181106106ad57fe5b60200260200101516000015161113b565b6106e35760405162461bcd60e51b81526004016106da906143ed565b60405180910390fd5b6106ed8282611572565b5050565b6107026106fc6114ff565b826116f4565b61073d5760405162461bcd60e51b81526004018080602001828103825260318152602001806148d06031913960400191505060405180910390fd5b61064a838383611700565b60008281526101c6602052604081205481906107695750600090508061084f565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b828210156107e557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610796565b505050509050806000815181106107f857fe5b60209081029190910101515192506000805b82518110156108435782818151811061081f57fe5b6020026020010151602001516001600160601b03168201915080600101905061080a565b50612710908502049150505b9250929050565b61085e6114ff565b6001600160a01b031661086f610f10565b6001600160a01b0316146108b8576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b61091486868686868661181f565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd6109486114ff565b878760405161095993929190614342565b60405180910390a1505050505050565b61064a8383836040518060200160405280600081525061115a565b61098d816114e2565b6109fc57606081901c61099e6114ff565b6001600160a01b0316816001600160a01b0316146109ed5760405162461bcd60e51b815260040180806020018281038252602d815260200180614792602d913960400191505060405180910390fd5b6109f682611939565b50610a4b565b610a076106fc6114ff565b610a425760405162461bcd60e51b81526004018080602001828103825260308152602001806149266030913960400191505060405180910390fd5b610a4b81611955565b50565b610a5c87878787868661181f565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e9913610a936114ff565b8888604051610aa493929190614342565b60405180910390a150505050505050565b610abd6114ff565b6001600160a01b0316610ace610f10565b6001600160a01b031614610b17576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b610b20816119f1565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d681604051610b4f91906143af565b60405180910390a150565b600081815260ff60205260408120546001600160a01b0316806104785760405162461bcd60e51b81526004018080602001828103825260298152602001806147196029913960400191505060405180910390fd5b6101c88054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561050c5780601f106104e15761010080835404028352916020019161050c565b60006001600160a01b038216610c575760405162461bcd60e51b815260040180806020018281038252602a8152602001806146ef602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b610c7c6114ff565b6001600160a01b0316610c8d610f10565b6001600160a01b031614610cd6576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b610d286114ff565b6001600160a01b0316610d39610f10565b6001600160a01b031614610d82576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b60005b81518110156106ed576000828281518110610d9c57fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a350600101610d85565b8251610e10906114e2565b15610e2957610e2482828560000151610969565b61064a565b8260400151600081518110610e3a57fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614610e765760405162461bcd60e51b81526004016106da906143c2565b61064a838261064f565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f0557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610eb6565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561050c5780601f106104e15761010080835404028352916020019161050c565b610f886114ff565b6001600160a01b0316610f99610f10565b6001600160a01b031614610fe2576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b61103d6114ff565b6001600160a01b0316826001600160a01b031614156110a3576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006110b16114ff565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556110f56114ff565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b61116b6111656114ff565b836116f4565b6111a65760405162461bcd60e51b81526004018080602001828103825260318152602001806148d06031913960400191505060405180910390fd5b6111b284848484611a05565b50505050565b606061047882611a57565b60008181526101c660209081526040808320805482518185028101850190935280835260609492939192909184018215610f0557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610eb6565b816001600160a01b03166112506114ff565b6001600160a01b0316146112765760405162461bcd60e51b81526004016106da9061447a565b61064a838383611a62565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156113085780601f106112dd57610100808354040283529160200191611308565b820191906000526020600020905b8154815290600101906020018083116112eb57829003601f168201915b505050505081565b600061131c8383611b0e565b90505b92915050565b61132d6114ff565b6001600160a01b031661133e610f10565b6001600160a01b031614611387576040805162461bcd60e51b81526020600482018190526024820152600080516020614817833981519152604482015290519081900360640190fd5b6001600160a01b0381166113cc5760405162461bcd60e51b815260040180806020018281038252602681526020018061461f6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160e01b03198216638486f69f60e01b148061145957506001600160e01b0319821663656cb66560e11b145b8061147457506001600160e01b0319821663152a902d60e11b145b8061148f57506001600160e01b031982166301ffc9a760e01b145b806114aa57506001600160e01b031982166380ac58cd60e01b145b806114c557506001600160e01b03198216635b5e139f60e01b145b806104785750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b3390565b60008181526101016020526040902080546001600160a01b0319166001600160a01b038416908117909155819061153982610b5a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b815160601c60006115816114ff565b9050836040015160008151811061159457fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146115d05760405162461bcd60e51b81526004016106da9061444f565b836080015151846040015151146115e657600080fd5b806001600160a01b0316826001600160a01b0316148061160b575061160b8282611310565b6116275760405162461bcd60e51b81526004016106da906144d6565b600061163285611b3b565b905060005b8560400151518110156116a85760008660400151828151811061165657fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b03161461169f5761169f81848960800151858151811061169257fe5b6020026020010151611d82565b50600101611637565b506116b7848660000151611d8d565b6116c985600001518660600151611da7565b6116db85600001518660400151611f96565b6116ed85600001518660200151612145565b5050505050565b600061131c83836121a9565b826001600160a01b031661171382610b5a565b6001600160a01b0316146117585760405162461bcd60e51b81526004018080602001828103825260298152602001806148376029913960400191505060405180910390fd5b6001600160a01b03821661179d5760405162461bcd60e51b81526004018080602001828103825260248152602001806146456024913960400191505060405180910390fd5b6117a883838361064a565b6117b3600082611503565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b0319168217905592518493929160008051602061488f83398151915291a4505050565b600054610100900460ff168061183857506118386121d6565b80611846575060005460ff16155b6118815760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156118ac576000805460ff1961ff0019909116610100171660011790555b6118b5856119f1565b6118bd6121e7565b6118c5612288565b6118cd6121e7565b6118d5612325565b6118dd6123c2565b6118e56121e7565b6118ed6124bb565b6118f56121e7565b6118fe8461258a565b6119088787612651565b61191383600161273c565b61191e82600161273c565b8015611930576000805461ff00191690555b50505050505050565b600090815261010360205260409020805460ff19166001179055565b600061196082610b5a565b905061196e8160008461064a565b611979600083611503565b6119828261279d565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b03191690556119c782611939565b60405182906000906001600160a01b0384169060008051602061488f833981519152908390a45050565b80516106ed906101c8906020840190613a58565b611a10848484611700565b611a1c848484846127a6565b6111b25760405162461bcd60e51b81526004018080602001828103825260328152602001806145ed6032913960400191505060405180910390fd5b60606104788261295c565b60008381526101c66020526040812054905b818110156116ed5760008581526101c66020526040902080546001600160a01b038616919083908110611aa357fe5b6000918252602090912001546001600160a01b03161415611b065760008581526101c660205260409020805484919083908110611adc57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101611a74565b6001600160a01b038116600090815261012f602052604081205460ff168061131c575061131c8383612b37565b6000808260600151516001600160401b0381118015611b5957600080fd5b50604051908082528060200260200182016040528015611b83578160200160208202803683370190505b50905060005b836060015151811015611bd557611bb684606001518281518110611ba957fe5b6020026020010151612b66565b828281518110611bc257fe5b6020908102919091010152600101611b89565b5060008360400151516001600160401b0381118015611bf357600080fd5b50604051908082528060200260200182016040528015611c1d578160200160208202803683370190505b50905060005b846040015151811015611c6257611c4385604001518281518110611ba957fe5b828281518110611c4f57fe5b6020908102919091010152600101611c23565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b83811015611cc6578181015183820152602001611cae565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b83811015611d17578181015183820152602001611cff565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b61064a838383612bd3565b6106ed828260405180602001604052806000815250612e52565b6000805b8251811015611f4b5760006001600160a01b0316838281518110611dcb57fe5b6020026020010151600001516001600160a01b03161415611e33576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b828181518110611e3f57fe5b6020026020010151602001516001600160601b031660001415611ea9576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b828181518110611eb557fe5b6020026020010151602001516001600160601b0316820191506101c66000858152602001908152602001600020838281518110611eee57fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501611dab565b506127108110611f8c5760405162461bcd60e51b81526004018080602001828103825260258152602001806149016025913960400191505060405180910390fd5b61064a8383612ea4565b60008281526101fb6020526040812090805b83518110156120e45760006001600160a01b0316848281518110611fc857fe5b6020026020010151600001516001600160a01b03161415611ffb5760405162461bcd60e51b81526004016106da9061449f565b83818151811061200757fe5b6020026020010151602001516001600160601b03166000141561203c5760405162461bcd60e51b81526004016106da9061441a565b8284828151811061204957fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b03199092169190911790921691909117905583516120da908590839081106120b657fe5b6020026020010151602001516001600160601b031683612ee190919063ffffffff16565b9150600101611fa8565b5080612710146121065760405162461bcd60e51b81526004016106da90614527565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f848460405161213792919061457e565b60405180910390a150505050565b61214e826114e2565b6121895760405162461bcd60e51b815260040180806020018281038252602c8152602001806147eb602c913960400191505060405180910390fd5b60008281526101c760209081526040909120825161064a92840190613a58565b6001600160a01b038216600090815261012f602052604081205460ff168061131c575061131c8383612f3b565b60006121e130612fd7565b15905090565b600054610100900460ff168061220057506122006121d6565b8061220e575060005460ff16155b6122495760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612274576000805460ff1961ff0019909116610100171660011790555b8015610a4b576000805461ff001916905550565b600054610100900460ff16806122a157506122a16121d6565b806122af575060005460ff16155b6122ea5760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612315576000805460ff1961ff0019909116610100171660011790555b61227463656cb66560e11b612fdd565b600054610100900460ff168061233e575061233e6121d6565b8061234c575060005460ff16155b6123875760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156123b2576000805460ff1961ff0019909116610100171660011790555b6122746301ffc9a760e01b612fdd565b600054610100900460ff16806123db57506123db6121d6565b806123e9575060005460ff16155b6124245760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff1615801561244f576000805460ff1961ff0019909116610100171660011790555b60006124596114ff565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610a4b576000805461ff001916905550565b600054610100900460ff16806124d457506124d46121d6565b806124e2575060005460ff16155b61251d5760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612548576000805460ff1961ff0019909116610100171660011790555b612274604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b815250613061565b600054610100900460ff16806125a357506125a36121d6565b806125b1575060005460ff16155b6125ec5760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff16158015612617576000805460ff1961ff0019909116610100171660011790555b815161262b9061022e906020850190613a58565b5061263c63e8a3d48560e01b612fdd565b80156106ed576000805461ff00191690555050565b600054610100900460ff168061266a575061266a6121d6565b80612678575060005460ff16155b6126b35760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156126de576000805460ff1961ff0019909116610100171660011790555b82516126f19060fd906020860190613a58565b5081516127059060fe906020850190613a58565b506127166380ac58cd60e01b612fdd565b612726635b5e139f60e01b612fdd565b801561064a576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b610a4b81613121565b60006127ba846001600160a01b0316612fd7565b1561295057836001600160a01b031663150b7a026127d66114ff565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612849578181015183820152602001612831565b50505050905090810190601f1680156128765780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561289857600080fd5b505af19250505080156128bd57506040513d60208110156128b857600080fd5b505160015b612936573d8080156128eb576040519150601f19603f3d011682016040523d82523d6000602084013e6128f0565b606091505b50805161292e5760405162461bcd60e51b81526004018080602001828103825260328152602001806145ed6032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612954565b5060015b949350505050565b6060612967826114e2565b6129a25760405162461bcd60e51b815260040180806020018281038252602f815260200180614860602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f810185900485028201850190935282815292909190830182828015612a365780601f10612a0b57610100808354040283529160200191612a36565b820191906000526020600020905b815481529060010190602001808311612a1957829003601f168201915b505050505090506000612a47610bae565b9050805160001415612a5b5750905061047b565b815115612a7557612a6c818361312a565b9250505061047b565b80612a7f8561330f565b6040516020018083805190602001908083835b60208310612ab15780518252601f199092019160209182019101612a92565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612af95780518252601f199092019160209182019101612ada565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000612bde836133e9565b90506000825160411415612bf957612bf68284613435565b90505b846001600160a01b0316816001600160a01b0316146116ed57612c24856001600160a01b0316612fd7565b15612dda5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b83811015612c93578181015183820152602001612c7b565b50505050905090810190601f168015612cc05780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015612cde57600080fd5b505afa158015612cf2573d6000803e3d6000fd5b505050506040513d6020811015612d0857600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b031990911614612dd45760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d99578181015183820152602001612d81565b50505050905090810190601f168015612dc65780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506116ed565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315612d99578181015183820152602001612d81565b612e5c83836134b5565b612e6960008484846127a6565b61064a5760405162461bcd60e51b81526004018080602001828103825260328152602001806145ed6032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612ed592919061457e565b60405180910390a15050565b60008282018381101561131c576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000612f46826114e2565b612f815760405162461bcd60e51b815260040180806020018281038252602c81526020018061468b602c913960400191505060405180910390fd5b6000612f8c83610b5a565b9050806001600160a01b0316846001600160a01b03161480612fc75750836001600160a01b0316612fbc84610516565b6001600160a01b0316145b8061295457506129548185611310565b3b151590565b6001600160e01b0319808216141561303c576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff168061307a575061307a6121d6565b80613088575060005460ff16155b6130c35760405162461bcd60e51b815260040180806020018281038252602e815260200180614742602e913960400191505060405180910390fd5b600054610100900460ff161580156130ee576000805460ff1961ff0019909116610100171660011790555b8251602080850191909120835191840191909120609791909155609855801561064a576000805461ff0019169055505050565b610a4b8161361b565b805182516060918491849110156131f55784846040516020018083805190602001908083835b6020831061316f5780518252601f199092019160209182019101613150565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106131b75780518252601f199092019160209182019101613198565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529250505061131f565b60005b82518110156133055782818151811061320d57fe5b602001015160f81c60f81b6001600160f81b03191682828151811061322e57fe5b01602001516001600160f81b031916146132fd5785856040516020018083805190602001908083835b602083106132765780518252601f199092019160209182019101613257565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106132be5780518252601f19909201916020918201910161329f565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052935050505061131f565b6001016131f8565b5092949350505050565b60608161333457506040805180820190915260018152600360fc1b602082015261047b565b8160005b811561334c57600101600a82049150613338565b6000816001600160401b038111801561336457600080fd5b506040519080825280601f01601f19166020018201604052801561338f576020820181803683370190505b50859350905060001982015b83156133e057600a840660300160f81b828280600190039350815181106133be57fe5b60200101906001600160f81b031916908160001a905350600a8404935061339b565b50949350505050565b60006133f361365b565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6000815160411461348d576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6134ab8682858561369b565b9695505050505050565b6001600160a01b038216613510576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff161561356c576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b613575816114e2565b156135c7576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b6135d36000838361064a565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b03191690911790556106ed82826138f1565b60008181526101c760205260409020546002600019610100600184161502019091160415610a4b5760008181526101c760205260408120610a4b91613ae4565b60006136967f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6136896138fb565b613691613901565b613907565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156136fc5760405162461bcd60e51b81526004018080602001828103825260228152602001806146696022913960400191505060405180910390fd5b6000601e8560ff1611156137d6576004850360ff16601b148061372557506004850360ff16601c145b6137605760405162461bcd60e51b81526004018080602001828103825260228152602001806147706022913960400191505060405180910390fd5b600161376b87613969565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156137c5573d6000803e3d6000fd5b50505060206040510351905061388d565b8460ff16601b14806137eb57508460ff16601c145b6138265760405162461bcd60e51b81526004018080602001828103825260228152602001806147706022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613880573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166138e8576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b6106ed82826139ba565b60975490565b60985490565b6000838383613914613a54565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b0383168114613a295760405182906001600160a01b0383169060009060008051602061488f833981519152908290a481836001600160a01b0316826001600160a01b031660008051602061488f83398151915260405160405180910390a461064a565b60405182906001600160a01b0385169060009060008051602061488f833981519152908290a4505050565b4690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613a8e5760008555613ad4565b82601f10613aa757805160ff1916838001178555613ad4565b82800160010185558215613ad4579182015b82811115613ad4578251825591602001919060010190613ab9565b50613ae0929150613b24565b5090565b50805460018160011615610100020316600290046000825580601f10613b0a5750610a4b565b601f016020900490600052602060002090810190610a4b91905b5b80821115613ae05760008155600101613b25565b803561047b816145d7565b600082601f830112613b54578081fd5b81356020613b69613b64836145ba565b614597565b8281528181019085830183850287018401881015613b85578586fd5b855b85811015613bac578135613b9a816145d7565b84529284019290840190600101613b87565b5090979650505050505050565b600082601f830112613bc9578081fd5b81356020613bd9613b64836145ba565b82815281810190858301855b85811015613bac57613bfc898684358b0101613cc9565b84529284019290840190600101613be5565b600082601f830112613c1e578081fd5b81356020613c2e613b64836145ba565b82815281810190858301604080860288018501891015613c4c578687fd5b865b86811015613cbb5781838b031215613c64578788fd5b81518281018181106001600160401b0382111715613c7e57fe5b83528335613c8b816145d7565b8152838701356001600160601b0381168114613ca557898afd5b8188015285529385019391810191600101613c4e565b509198975050505050505050565b600082601f830112613cd9578081fd5b81356001600160401b03811115613cec57fe5b613cff601f8201601f1916602001614597565b818152846020838601011115613d13578283fd5b816020850160208301379081016020019190915292915050565b600060a08284031215613d3e578081fd5b613d4860a0614597565b90508135815260208201356001600160401b0380821115613d6857600080fd5b613d7485838601613cc9565b60208401526040840135915080821115613d8d57600080fd5b613d9985838601613c0e565b60408401526060840135915080821115613db257600080fd5b613dbe85838601613c0e565b60608401526080840135915080821115613dd757600080fd5b50613de484828501613bb9565b60808301525092915050565b600060208284031215613e01578081fd5b813561131c816145d7565b60008060408385031215613e1e578081fd5b8235613e29816145d7565b91506020830135613e39816145d7565b809150509250929050565b600080600060608486031215613e58578081fd5b8335613e63816145d7565b92506020840135613e73816145d7565b929592945050506040919091013590565b60008060008060808587031215613e99578081fd5b8435613ea4816145d7565b93506020850135613eb4816145d7565b92506040850135915060608501356001600160401b03811115613ed5578182fd5b613ee187828801613cc9565b91505092959194509250565b60008060408385031215613eff578182fd5b8235613f0a816145d7565b915060208301358015158114613e39578182fd5b60008060408385031215613f30578182fd5b8235613f3b816145d7565b946020939093013593505050565b600060208284031215613f5a578081fd5b81356001600160401b03811115613f6f578182fd5b61295484828501613b44565b600060208284031215613f8c578081fd5b81356001600160e01b03198116811461131c578182fd5b600060208284031215613fb4578081fd5b81356001600160401b03811115613fc9578182fd5b61295484828501613cc9565b60008060008060008060c08789031215613fed578384fd5b86356001600160401b0380821115614003578586fd5b61400f8a838b01613cc9565b97506020890135915080821115614024578586fd5b6140308a838b01613cc9565b96506040890135915080821115614045578586fd5b6140518a838b01613cc9565b95506060890135915080821115614066578384fd5b5061407389828a01613cc9565b93505061408260808801613b39565b915061409060a08801613b39565b90509295509295509295565b600080600080600080600060e0888a0312156140b6578485fd5b87356001600160401b03808211156140cc578687fd5b6140d88b838c01613cc9565b985060208a01359150808211156140ed578687fd5b6140f98b838c01613cc9565b975060408a013591508082111561410e578687fd5b61411a8b838c01613cc9565b965060608a013591508082111561412f578283fd5b61413b8b838c01613cc9565b955060808a0135915080821115614150578283fd5b5061415d8a828b01613b44565b93505061416c60a08901613b39565b915061417a60c08901613b39565b905092959891949750929550565b6000806040838503121561419a578182fd5b82356001600160401b038111156141af578283fd5b6141bb85828601613d2d565b9250506020830135613e39816145d7565b6000806000606084860312156141e0578081fd5b83356001600160401b038111156141f5578182fd5b61420186828701613d2d565b9350506020840135614212816145d7565b91506040840135614222816145d7565b809150509250925092565b60006020828403121561423e578081fd5b5035919050565b600080600060608486031215614259578081fd5b833592506020840135614212816145d7565b6000806040838503121561427d578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b838110156142d857815180516001600160a01b031688528301516001600160601b0316838801526040909601959082019060010161429f565b509495945050505050565b60008151808452815b81811015614308576020818501810151868301820152016142ec565b818111156143195782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0384168152606060208201819052600090614366908301856142e3565b82810360408401526134ab81856142e3565b6001600160a01b03929092168252602082015260400190565b60006020825261131c602083018461428c565b901515815260200190565b60006020825261131c60208301846142e3565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b600083825260406020830152612954604083018461428c565b6040518181016001600160401b03811182821017156145b257fe5b604052919050565b60006001600160401b038211156145cd57fe5b5060209081020190565b6001600160a01b0381168114610a4b57600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a2646970667358221220872bc930150cac441fe8e7a9d3bc2a73c62da627ee61bc24187073649c45a4a564736f6c63430007060033", + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"approved\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"BaseUriChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721Rarible\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreateERC721RaribleUser\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"}],\"name\":\"Creators\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"hasApproval\",\"type\":\"bool\"}],\"name\":\"DefaultApproval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"MinterStatusChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address[]\",\"name\":\"operators\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721RaribleUser_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"}],\"name\":\"__ERC721Rarible_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"baseURI\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"lazyTransferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__ERC721Rarible_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"minter\",\"type\":\"address\"}],\"name\":\"addMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"minters\",\"type\":\"address[]\"}],\"name\":\"addMinters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"}],\"name\":\"getCreators\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"getRaribleV2Royalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isMinter\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"mintAndTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_minter\",\"type\":\"address\"}],\"name\":\"removeMinter\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_salePrice\",\"type\":\"uint256\"}],\"name\":\"royaltyInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltyAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"newBaseURI\",\"type\":\"string\"}],\"name\":\"setBaseURI\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"tokenURI\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferFromOrMint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_id\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"updateAccount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addMinter(address)\":{\"details\":\"Add `minter` to the list of allowed minters.\"},\"addMinters(address[])\":{\"details\":\"Add `minters` to the list of allowed minters.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC721-approve}.\"},\"balanceOf(address)\":{\"details\":\"See {IERC721-balanceOf}.\"},\"baseURI()\":{\"details\":\"Returns the base URI set via {_setBaseURI}. This will be automatically added as a prefix in {tokenURI} to each token's URI, or to the token ID if no specific URI is set for that token ID.\"},\"burn(uint256)\":{\"details\":\"Burns `tokenId`. See {ERC721-_burn}. Requirements: - The caller must own `tokenId` or be an approved operator.\"},\"getApproved(uint256)\":{\"details\":\"See {IERC721-getApproved}.\"},\"isMinter(address)\":{\"details\":\"Returns `true` if `account` has been granted to minters.\"},\"name()\":{\"details\":\"See {IERC721Metadata-name}.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"ownerOf(uint256)\":{\"details\":\"See {IERC721-ownerOf}.\"},\"removeMinter(address)\":{\"details\":\"Revoke `_minter` from the list of allowed minters.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"safeTransferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"safeTransferFrom(address,address,uint256,bytes)\":{\"details\":\"See {IERC721-safeTransferFrom}.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"See {IERC721-setApprovalForAll}.\"},\"symbol()\":{\"details\":\"See {IERC721Metadata-symbol}.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC721-transferFrom}.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":\"ERC721RaribleMinimal\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165Upgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n function __ERC165_init() internal initializer {\\n __ERC165_init_unchained();\\n }\\n\\n function __ERC165_init_unchained() internal initializer {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"./IERC721Upgradeable.sol\\\";\\n\\n/**\\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\\n * @dev See https://eips.ethereum.org/EIPS/eip-721\\n */\\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\\n\\n /**\\n * @dev Returns the token collection name.\\n */\\n function name() external view returns (string memory);\\n\\n /**\\n * @dev Returns the token collection symbol.\\n */\\n function symbol() external view returns (string memory);\\n\\n /**\\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\\n */\\n function tokenURI(uint256 tokenId) external view returns (string memory);\\n}\\n\",\"keccak256\":\"0xa981b1f67f60771c18d39e21bad0a2f0f952e2c3faa90b45b982060fc14ee2bd\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721ReceiverUpgradeable {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev String operations.\\n */\\nlibrary StringsUpgradeable {\\n /**\\n * @dev Converts a `uint256` to its ASCII `string` representation.\\n */\\n function toString(uint256 value) internal pure returns (string memory) {\\n // Inspired by OraclizeAPI's implementation - MIT licence\\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\\n\\n if (value == 0) {\\n return \\\"0\\\";\\n }\\n uint256 temp = value;\\n uint256 digits;\\n while (temp != 0) {\\n digits++;\\n temp /= 10;\\n }\\n bytes memory buffer = new bytes(digits);\\n uint256 index = digits - 1;\\n temp = value;\\n while (temp != 0) {\\n buffer[index--] = bytes1(uint8(48 + temp % 10));\\n temp /= 10;\\n }\\n return string(buffer);\\n }\\n}\\n\",\"keccak256\":\"0x8d1ac29b8a8ed3cfebe5d8774b465441ae8931aaca549f84408e0b29a1191964\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"./LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IERC721LazyMint is IERC721Upgradeable {\\n\\n event Creators(\\n uint256 tokenId,\\n LibPart.Part[] creators\\n );\\n\\n function mintAndTransfer(\\n LibERC721LazyMint.Mint721Data memory data,\\n address to\\n ) external;\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) external;\\n}\\n\",\"keccak256\":\"0x52f0934084889c5245fdd3c56d01e5613e687b415669133e12eb104513a00a31\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/ERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nabstract contract ERC1271 {\\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\\n\\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\\n\\n /**\\n * @dev Function must be implemented by deriving contract\\n * @param _hash Arbitrary length data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\\n *\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\\n\\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\\n }\\n}\",\"keccak256\":\"0xc28d1c48e7da71d46b3578ac4669e36c1bfad910d4dd4bd6da0c1e950d1f5f01\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\n\\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\\n }\\n}\\n\",\"keccak256\":\"0x4f3d5737488618b3501156e39e3f8367da43e810dc8c942f3a3caf4f35f831f6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/AbstractRoyalties.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nabstract contract AbstractRoyalties {\\n mapping (uint256 => LibPart.Part[]) internal royalties;\\n\\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\\n uint256 totalValue;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n require(_royalties[i].account != address(0x0), \\\"Recipient should be present\\\");\\n require(_royalties[i].value != 0, \\\"Royalty value should be positive\\\");\\n totalValue += _royalties[i].value;\\n royalties[id].push(_royalties[i]);\\n }\\n require(totalValue < 10000, \\\"Royalty total value should be < 10000\\\");\\n _onRoyaltiesSet(id, _royalties);\\n }\\n\\n function _updateAccount(uint256 _id, address _from, address _to) internal {\\n uint length = royalties[_id].length;\\n for(uint i = 0; i < length; ++i) {\\n if (royalties[_id][i].account == _from) {\\n royalties[_id][i].account = payable(address(uint160(_to)));\\n }\\n }\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\\n}\\n\",\"keccak256\":\"0x5d7f92e6d83f0f10e62518b79ef163f6785440ddc80b60bbe25d63db3c959c6e\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"./AbstractRoyalties.sol\\\";\\nimport \\\"../RoyaltiesV2.sol\\\";\\nimport \\\"../IERC2981.sol\\\";\\nimport \\\"../LibRoyalties2981.sol\\\";\\n\\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\\n\\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\\n return royalties[id];\\n }\\n\\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\\n emit RoyaltiesSet(id, _royalties);\\n }\\n\\n /*\\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\\n */\\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\\n if (royalties[id].length == 0) {\\n receiver = address(0);\\n royaltyAmount = 0;\\n return(receiver, royaltyAmount);\\n }\\n LibPart.Part[] memory _royalties = royalties[id];\\n receiver = _royalties[0].account;\\n uint percent;\\n for (uint i = 0; i < _royalties.length; ++i) {\\n percent += _royalties[i].value;\\n }\\n //don`t need require(percent < 10000, \\\"Token royalty > 100%\\\"); here, because check later in calculateRoyalties\\n royaltyAmount = percent * _salePrice / 10000;\\n }\\n}\\n\",\"keccak256\":\"0x26db06f697bc6adc32d58e60f2a87ba1f716d4042efaffcaf01224e76284c773\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/HasContractURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\nabstract contract HasContractURI is ERC165Upgradeable {\\n\\n string public contractURI;\\n\\n /*\\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\\n */\\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\\n\\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\\n }\\n\\n /**\\n * @dev Internal function to set the contract URI\\n * @param _contractURI string URI prefix to assign\\n */\\n function _setContractURI(string memory _contractURI) internal {\\n contractURI = _contractURI;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x2ab83de645a8ef096a0f3b546cfc625044afda82f4be79a7704842feca3369d4\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/IsPrivateCollection.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ncontract IsPrivateCollection {\\n /// @dev true if collection is private, false if public\\n bool isPrivate;\\n\\n uint256[49] private __gap;\\n}\",\"keccak256\":\"0x004f0cedb717192188cc264bc6b81f9c42f41b197dc92a17e1ddfb933982b583\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/LibURI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibURI {\\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\\n function checkPrefix(string memory base, string memory _tokenURI)\\n internal\\n pure\\n returns (string memory)\\n {\\n bytes memory whatBytes = bytes(base);\\n bytes memory whereBytes = bytes(_tokenURI);\\n\\n if (whatBytes.length > whereBytes.length) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n\\n for (uint256 j = 0; j < whatBytes.length; j++) {\\n if (whereBytes[j] != whatBytes[j]) {\\n return string(abi.encodePacked(base, _tokenURI));\\n }\\n }\\n\\n return _tokenURI;\\n }\\n}\\n\",\"keccak256\":\"0x2ad5368bf0c2398366f813ae7ced6342a819a6ec207d346df10f11fa143c21af\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/Mint721Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./erc-1271/ERC1271Validator.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\n\\ncontract Mint721Validator is ERC1271Validator {\\n function __Mint721Validator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Mint721\\\", \\\"1\\\");\\n }\\n\\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\\n validate1271(account, hash, signature);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x9b334d35fa79c6d964ca87b38ce274f194ecab1bdac38ae543f117b770efa52f\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/access/MinterAccessControl.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract MinterAccessControl is OwnableUpgradeable {\\n mapping(address => bool) private _minters;\\n \\n event MinterStatusChanged(address indexed minter, bool indexed status);\\n\\n function __MinterAccessControl_init() internal {\\n __Ownable_init_unchained();\\n __MinterAccessControl_init_unchained();\\n }\\n\\n function __MinterAccessControl_init_unchained() internal {\\n }\\n\\n /**\\n * @dev Add `minter` to the list of allowed minters.\\n */\\n function addMinter(address minter) external onlyOwner {\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n\\n /**\\n * @dev Add `minters` to the list of allowed minters.\\n */\\n function addMinters(address[] memory minters) external onlyOwner {\\n for (uint i = 0; i < minters.length; ++i) {\\n address minter = minters[i];\\n _minters[minter] = true;\\n emit MinterStatusChanged(minter, true);\\n }\\n }\\n\\n /**\\n * @dev Revoke `_minter` from the list of allowed minters.\\n */\\n function removeMinter(address _minter) external onlyOwner {\\n _minters[_minter] = false;\\n emit MinterStatusChanged(_minter, false);\\n }\\n\\n /**\\n * @dev Returns `true` if `account` has been granted to minters.\\n */\\n function isMinter(address account) public view returns (bool) {\\n return _minters[account];\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x7f5df77cd6604730afcd5381d34c2057eb481bc835a2a6cc7fb254a28cc6b433\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-signature/contracts/ERC1271.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nabstract contract ERC1271Validator is EIP712Upgradeable {\\n using AddressUpgradeable for address;\\n using LibSignature for bytes32;\\n\\n string constant SIGNATURE_ERROR = \\\"signature verification error\\\";\\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\\n bytes32 hash = _hashTypedDataV4(structHash);\\n\\n address signerFromSig;\\n if (signature.length == 65) {\\n signerFromSig = hash.recover(signature);\\n }\\n if (signerFromSig != signer) {\\n if (signer.isContract()) {\\n require(\\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\\n SIGNATURE_ERROR\\n );\\n } else {\\n revert(SIGNATURE_ERROR);\\n }\\n }\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xeeac3f2aea49d6a697fce4dd4ce1deca701045cfc294a14172d19fdde80c7e2b\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./ERC721BurnableUpgradeableMinimal.sol\\\";\\nimport \\\"./ERC721DefaultApprovalMinimal.sol\\\";\\nimport \\\"./ERC721LazyMinimal.sol\\\";\\nimport \\\"../HasContractURI.sol\\\";\\n\\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\\n event BaseUriChanged(string newBaseURI);\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\\n return super.supportsInterface(interfaceId);\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\\n return ERC721LazyMinimal.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._clearMetadata(tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\\n }\\n\\n function setBaseURI(string memory newBaseURI) external onlyOwner {\\n super._setBaseURI(newBaseURI);\\n\\n emit BaseUriChanged(newBaseURI);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x1504e3d02e4e36871b398c148bc1e193f60048d65d63b011ff9d1af2c8db9c2d\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\\n function __ERC721Burnable_init() internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721Burnable_init_unchained();\\n }\\n\\n function __ERC721Burnable_init_unchained() internal initializer {\\n }\\n /**\\n * @dev Burns `tokenId`. See {ERC721-_burn}.\\n *\\n * Requirements:\\n *\\n * - The caller must own `tokenId` or be an approved operator.\\n */\\n function burn(uint256 tokenId) public virtual {\\n if(!_exists(tokenId)) {\\n address owner = address(tokenId >> 96);\\n require(owner == _msgSender(), \\\"ERC721Burnable: caller is not owner, not burn\\\");\\n _setBurned(tokenId);\\n } else {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721Burnable: caller is not owner nor approved\\\");\\n _burn(tokenId);\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0xedd6d6edf0ebc96e490efc5aa0c9ebd6af66b74255175dd20131f92806706b75\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\n\\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\\n mapping(address => bool) private defaultApprovals;\\n\\n event DefaultApproval(address indexed operator, bool hasApproval);\\n\\n function _setDefaultApproval(address operator, bool hasApproval) internal {\\n defaultApprovals[operator] = hasApproval;\\n emit DefaultApproval(operator, hasApproval);\\n }\\n\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\\n }\\n\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xc60591cbe1969d8b15cfbb84c248b90025e38a22e98e4943a4ff597810731d78\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\\\";\\nimport \\\"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\\\";\\nimport \\\"../Mint721Validator.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\nimport \\\"./ERC721URI.sol\\\";\\n\\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\\n using SafeMathUpgradeable for uint;\\n\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\\n\\n // tokenId => creators\\n mapping(uint256 => LibPart.Part[]) private creators;\\n\\n function __ERC721Lazy_init_unchained() internal initializer {\\n\\n }\\n\\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\\n || interfaceId == _INTERFACE_ID_ERC165\\n || interfaceId == _INTERFACE_ID_ERC721\\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\\n }\\n\\n function transferFromOrMint(\\n LibERC721LazyMint.Mint721Data memory data,\\n address from,\\n address to\\n ) override external {\\n if (_exists(data.tokenId)) {\\n safeTransferFrom(from, to, data.tokenId);\\n } else {\\n require(from == data.creators[0].account, \\\"wrong order maker\\\");\\n mintAndTransfer(data, to);\\n }\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n address minter = address(data.tokenId >> 96);\\n address sender = _msgSender();\\n\\n require(minter == data.creators[0].account, \\\"tokenId incorrect\\\");\\n require(data.creators.length == data.signatures.length);\\n require(minter == sender || isApprovedForAll(minter, sender), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n bytes32 hash = LibERC721LazyMint.hash(data);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n address creator = data.creators[i].account;\\n if (creator != sender) {\\n validate(creator, hash, data.signatures[i]);\\n }\\n }\\n\\n _safeMint(to, data.tokenId);\\n _saveRoyalties(data.tokenId, data.royalties);\\n _saveCreators(data.tokenId, data.creators);\\n _setTokenURI(data.tokenId, data.tokenURI);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\\n address minter = address(tokenId >> 96);\\n if (minter != to) {\\n emit Transfer(address(0), minter, tokenId);\\n emit Transfer(minter, to, tokenId);\\n } else {\\n emit Transfer(address(0), to, tokenId);\\n }\\n }\\n\\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\\n uint total = 0;\\n for (uint i = 0; i < _creators.length; ++i) {\\n require(_creators[i].account != address(0x0), \\\"Account should be present\\\");\\n require(_creators[i].value != 0, \\\"Creator share should be positive\\\");\\n creatorsOfToken.push(_creators[i]);\\n total = total.add(_creators[i].value);\\n }\\n require(total == 10000, \\\"total amount of creators share should be 10000\\\");\\n emit Creators(tokenId, _creators);\\n }\\n\\n function updateAccount(uint256 _id, address _from, address _to) external {\\n require(_msgSender() == _from, \\\"not allowed\\\");\\n super._updateAccount(_id, _from, _to);\\n }\\n\\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\\n return creators[_id];\\n }\\n\\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\\n return ERC721URI.tokenURI(tokenId);\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\\n return ERC721URI._clearMetadata(tokenId);\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x853e56c3886107c00f7c5b475c66466f74f6b7fd83e04055c4efa68c43b94649\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ERC721BaseMinimal.sol\\\";\\nimport \\\"../IsPrivateCollection.sol\\\";\\nimport \\\"../access/MinterAccessControl.sol\\\";\\n\\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\\n event CreateERC721Rarible(address owner, string name, string symbol);\\n event CreateERC721RaribleUser(address owner, string name, string symbol);\\n\\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = true;\\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\\n\\n isPrivate = false;\\n\\n transferOwnership(initialOwner);\\n\\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\\n }\\n\\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\\n _setBaseURI(baseURI);\\n __ERC721Lazy_init_unchained();\\n __RoyaltiesV2Upgradeable_init_unchained();\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __Ownable_init_unchained();\\n __ERC721Burnable_init_unchained();\\n __Mint721Validator_init_unchained();\\n __MinterAccessControl_init_unchained();\\n __HasContractURI_init_unchained(contractURI);\\n __ERC721_init_unchained(_name, _symbol);\\n\\n //setting default approver for transferProxies\\n _setDefaultApproval(transferProxy, true);\\n _setDefaultApproval(lazyTransferProxy, true);\\n }\\n\\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\\n if (isPrivate){\\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \\\"not owner or minter\\\");\\n }\\n super.mintAndTransfer(data, to);\\n }\\n}\\n\",\"keccak256\":\"0x6d5c6aa0e1b36eb2bde4584ff91f87a5411e4931e022b55966bda85c169008b9\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"./ERC721UpgradeableMinimal.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"../LibURI.sol\\\";\\n\\n/**\\n * @title ERC721 Burnable Token\\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\\n */\\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\\n using StringsUpgradeable for uint256;\\n\\n // Optional mapping for token URIs\\n mapping (uint256 => string) private _tokenURIs;\\n\\n // Base URI\\n string private _baseURI;\\n\\n /**\\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI set of nonexistent token\\\");\\n _tokenURIs[tokenId] = _tokenURI;\\n }\\n\\n /**\\n * @dev Internal function to set the base URI for all token IDs. It is\\n * automatically added as a prefix to the value returned in {tokenURI},\\n * or to the token ID if {tokenURI} is empty.\\n */\\n function _setBaseURI(string memory baseURI_) internal virtual {\\n _baseURI = baseURI_;\\n }\\n\\n /**\\n * @dev Returns the base URI set via {_setBaseURI}. This will be\\n * automatically added as a prefix in {tokenURI} to each token's URI, or\\n * to the token ID if no specific URI is set for that token ID.\\n */\\n function baseURI() public view virtual returns (string memory) {\\n return _baseURI;\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _clearMetadata(uint256 tokenId) internal override virtual {\\n // Clear metadata (if any)\\n if (bytes(_tokenURIs[tokenId]).length != 0) {\\n delete _tokenURIs[tokenId];\\n }\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n require(_exists(tokenId), \\\"ERC721Metadata: URI query for nonexistent token\\\");\\n\\n string memory _tokenURI = _tokenURIs[tokenId];\\n string memory base = baseURI();\\n\\n // If there is no base URI, return the token URI.\\n if (bytes(base).length == 0) {\\n return _tokenURI;\\n }\\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\\n if (bytes(_tokenURI).length > 0) {\\n return LibURI.checkPrefix(base, _tokenURI);\\n }\\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\\n return string(abi.encodePacked(base, tokenId.toString()));\\n }\\n\\n uint256[50] private __gap;\\n}\",\"keccak256\":\"0x43c480ea338e5b43290a9ab25851154d12802a22bca119987ce3b924e7340c7e\",\"license\":\"MIT\"},\"@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\\n * {ERC721Enumerable}.\\n */\\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\\n using AddressUpgradeable for address;\\n using StringsUpgradeable for uint256;\\n\\n // Token name\\n string private _name;\\n\\n // Token symbol\\n string private _symbol;\\n\\n // Mapping from token ID to owner address\\n mapping(uint256 => address) private _owners;\\n\\n // Mapping owner address to token count\\n mapping(address => uint256) private _balances;\\n\\n // Mapping from token ID to approved address\\n mapping(uint256 => address) private _tokenApprovals;\\n\\n // Mapping from owner to operator approvals\\n mapping(address => mapping(address => bool)) private _operatorApprovals;\\n\\n /*\\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\\n *\\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\\n\\n /*\\n * bytes4(keccak256('name()')) == 0x06fdde03\\n * bytes4(keccak256('symbol()')) == 0x95d89b41\\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\\n *\\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\\n */\\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\\n\\n // Mapping from token ID to flag == true, means token already burned\\n mapping(uint256 => bool) private _burnedTokens;\\n\\n /**\\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\\n */\\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\\n __Context_init_unchained();\\n __ERC165_init_unchained();\\n __ERC721_init_unchained(name_, symbol_);\\n }\\n\\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\\n _name = name_;\\n _symbol = symbol_;\\n\\n // register the supported interfaces to conform to ERC721 via ERC165\\n _registerInterface(_INTERFACE_ID_ERC721);\\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\\n }\\n\\n /**\\n * @dev See {IERC721-balanceOf}.\\n */\\n function balanceOf(address owner) public view virtual override returns (uint256) {\\n require(owner != address(0), \\\"ERC721: balance query for the zero address\\\");\\n return _balances[owner];\\n }\\n\\n /**\\n * @dev See {IERC721-ownerOf}.\\n */\\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\\n address owner = _owners[tokenId];\\n require(owner != address(0), \\\"ERC721: owner query for nonexistent token\\\");\\n return owner;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-name}.\\n */\\n function name() public view virtual override returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-symbol}.\\n */\\n function symbol() public view virtual override returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @dev See {IERC721Metadata-tokenURI}.\\n */\\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\\n }\\n\\n /**\\n * @dev See {IERC721-approve}.\\n */\\n function approve(address to, uint256 tokenId) public virtual override {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n require(to != owner, \\\"ERC721: approval to current owner\\\");\\n\\n require(\\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\\n \\\"ERC721: approve caller is not owner nor approved for all\\\"\\n );\\n\\n _approve(to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-getApproved}.\\n */\\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\\n require(_exists(tokenId), \\\"ERC721: approved query for nonexistent token\\\");\\n\\n return _tokenApprovals[tokenId];\\n }\\n\\n /**\\n * @dev See {IERC721-setApprovalForAll}.\\n */\\n function setApprovalForAll(address operator, bool approved) public virtual override {\\n require(operator != _msgSender(), \\\"ERC721: approve to caller\\\");\\n\\n _operatorApprovals[_msgSender()][operator] = approved;\\n emit ApprovalForAll(_msgSender(), operator, approved);\\n }\\n\\n /**\\n * @dev See {IERC721-isApprovedForAll}.\\n */\\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\\n return _operatorApprovals[owner][operator];\\n }\\n\\n /**\\n * @dev See {IERC721-transferFrom}.\\n */\\n function transferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n //solhint-disable-next-line max-line-length\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n\\n _transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId\\n ) public virtual override {\\n safeTransferFrom(from, to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev See {IERC721-safeTransferFrom}.\\n */\\n function safeTransferFrom(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) public virtual override {\\n require(_isApprovedOrOwner(_msgSender(), tokenId), \\\"ERC721: transfer caller is not owner nor approved\\\");\\n _safeTransfer(from, to, tokenId, _data);\\n }\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\\n *\\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\\n * implement alternative mechanisms to perform token transfer, such as signature-based.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeTransfer(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _transfer(from, to, tokenId);\\n require(_checkOnERC721Received(from, to, tokenId, _data), \\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n }\\n\\n /**\\n * @dev Returns whether `tokenId` exists.\\n *\\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\\n *\\n * Tokens start existing when they are minted (`_mint`),\\n * and stop existing when they are burned (`_burn`).\\n */\\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\\n return _owners[tokenId] != address(0);\\n }\\n\\n /**\\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\\n require(_exists(tokenId), \\\"ERC721: operator query for nonexistent token\\\");\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\\n }\\n\\n /**\\n * @dev Safely mints `tokenId` and transfers it to `to`.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _safeMint(address to, uint256 tokenId) internal virtual {\\n _safeMint(to, tokenId, \\\"\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\\n */\\n function _safeMint(\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) internal virtual {\\n _mint(to, tokenId);\\n require(\\n _checkOnERC721Received(address(0), to, tokenId, _data),\\n \\\"ERC721: transfer to non ERC721Receiver implementer\\\"\\n );\\n }\\n\\n /**\\n * @dev Mints `tokenId` and transfers it to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\\n *\\n * Requirements:\\n *\\n * - `tokenId` must not exist.\\n * - `to` cannot be the zero address.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _mint(address to, uint256 tokenId) internal virtual {\\n require(to != address(0), \\\"ERC721: mint to the zero address\\\");\\n require(!_burnedTokens[tokenId], \\\"token already burned\\\");\\n require(!_exists(tokenId), \\\"ERC721: token already minted\\\");\\n\\n _beforeTokenTransfer(address(0), to, tokenId);\\n\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n _emitMintEvent(to, tokenId);\\n }\\n\\n function _emitMintEvent(address to, uint tokenId) internal virtual {\\n emit Transfer(address(0), to, tokenId);\\n }\\n\\n /**\\n * @dev Destroys `tokenId`.\\n * The approval is cleared when the token is burned.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _burn(uint256 tokenId) internal virtual {\\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\\n\\n _beforeTokenTransfer(owner, address(0), tokenId);\\n\\n // Clear approvals\\n _approve(address(0), tokenId);\\n\\n _clearMetadata(tokenId);\\n\\n _balances[owner] -= 1;\\n delete _owners[tokenId];\\n //set token is burned\\n _setBurned(tokenId);\\n\\n emit Transfer(owner, address(0), tokenId);\\n }\\n\\n /*Set token with tokenId burned*/\\n function _setBurned(uint256 tokenId) internal {\\n _burnedTokens[tokenId] = true;\\n }\\n\\n function _clearMetadata(uint256 tokenId) internal virtual {\\n }\\n\\n /**\\n * @dev Transfers `tokenId` from `from` to `to`.\\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n *\\n * Emits a {Transfer} event.\\n */\\n function _transfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {\\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \\\"ERC721: transfer of token that is not own\\\");\\n require(to != address(0), \\\"ERC721: transfer to the zero address\\\");\\n\\n _beforeTokenTransfer(from, to, tokenId);\\n\\n // Clear approvals from the previous owner\\n _approve(address(0), tokenId);\\n\\n _balances[from] -= 1;\\n _balances[to] += 1;\\n _owners[tokenId] = to;\\n\\n emit Transfer(from, to, tokenId);\\n }\\n\\n /**\\n * @dev Approve `to` to operate on `tokenId`\\n *\\n * Emits a {Approval} event.\\n */\\n function _approve(address to, uint256 tokenId) internal virtual {\\n _tokenApprovals[tokenId] = to;\\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\\n }\\n\\n /**\\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\\n * The call is not executed if the target address is not a contract.\\n *\\n * @param from address representing the previous owner of the given token ID\\n * @param to target address that will receive the tokens\\n * @param tokenId uint256 ID of the token to be transferred\\n * @param _data bytes optional data to send along with the call\\n * @return bool whether the call correctly returned the expected magic value\\n */\\n function _checkOnERC721Received(\\n address from,\\n address to,\\n uint256 tokenId,\\n bytes memory _data\\n ) private returns (bool) {\\n if (to.isContract()) {\\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\\n } catch (bytes memory reason) {\\n if (reason.length == 0) {\\n revert(\\\"ERC721: transfer to non ERC721Receiver implementer\\\");\\n } else {\\n assembly {\\n revert(add(32, reason), mload(reason))\\n }\\n }\\n }\\n } else {\\n return true;\\n }\\n }\\n\\n /**\\n * @dev Hook that is called before any token transfer. This includes minting\\n * and burning.\\n *\\n * Calling conditions:\\n *\\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\\n * transferred to `to`.\\n * - When `from` is zero, `tokenId` will be minted for `to`.\\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\\n * - `from` and `to` are never both zero.\\n *\\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\\n */\\n function _beforeTokenTransfer(\\n address from,\\n address to,\\n uint256 tokenId\\n ) internal virtual {}\\n uint256[43] private __gap;\\n}\",\"keccak256\":\"0x338b4107ff4d25b3ec0823e08e0198f7d0c1bde43a4d6a08686a39378733b837\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50614a1b806100206000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063aa271e1a116100ad578063e07f23191161007c578063e07f231914610437578063e8a3d4851461044a578063e985e9c514610452578063f2fde38b14610465578063ff14a35414610478576101fb565b8063aa271e1a146103eb578063b88d4fde146103fe578063c87b56dd14610411578063cad96cca14610424576101fb565b80638da5cb5b116100e95780638da5cb5b146103b557806395d89b41146103bd578063983b2d56146103c5578063a22cb465146103d8576101fb565b8063715018a61461036757806371e2a6571461036f578063832fbb2914610382578063891be97414610395576101fb565b80633db397c61161019257806355f804b31161016157806355f804b3146103195780636352211e1461032c5780636c0360eb1461033f57806370a0823114610347576101fb565b80633db397c6146102cd57806342842e0e146102e057806342966c68146102f35780634648eb9d14610306576101fb565b806322a775b6116101ce57806322a775b61461027357806323b872dd146102865780632a55205a146102995780633092afd5146102ba576101fb565b806301ffc9a71461020057806306fdde0314610229578063081812fc1461023e578063095ea7b31461025e575b600080fd5b61021361020e366004613f4e565b61048b565b6040516102209190614434565b60405180910390f35b61023161049e565b604051610220919061443f565b61025161024c3660046142bd565b610534565b60405161022091906143be565b61027161026c366004613ef1565b610597565b005b610271610281366004614218565b61066d565b610271610294366004613e17565b61070f565b6102ac6102a73660046142fb565b610766565b604051610220929190614408565b6102716102c8366004613dc3565b610874565b6102716102db366004613fa8565b610924565b6102716102ee366004613e17565b610987565b6102716103013660046142bd565b6109a2565b610271610314366004614148565b610a6c565b610271610327366004613f76565b610ad3565b61025161033a3660046142bd565b610b78565b610231610bcc565b61035a610355366004613dc3565b610c2e565b6040516102209190614605565b610271610c92565b61027161037d366004613f1c565b610d3e565b61027161039036600461425c565b610e23565b6103a86103a33660046142bd565b610e9e565b6040516102209190614421565b610251610f2e565b610231610f3d565b6102716103d3366004613dc3565b610f9e565b6102716103e6366004613ec0565b611053565b6102136103f9366004613dc3565b611159565b61027161040c366004613e57565b611178565b61023161041f3660046142bd565b6111d6565b6103a86104323660046142bd565b6111e1565b6102716104453660046142d5565b61125c565b61023161129f565b610213610460366004613ddf565b61132e565b610271610473366004613dc3565b611343565b61027161048636600461406f565b611446565b60006104968261149b565b90505b919050565b60fd8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561052a5780601f106104ff5761010080835404028352916020019161052a565b820191906000526020600020905b81548152906001019060200180831161050d57829003601f168201915b5050505050905090565b600061053f82611555565b61057a5760405162461bcd60e51b815260040180806020018281038252602c81526020018061484f602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b60006105a282610b78565b9050806001600160a01b0316836001600160a01b031614156105f55760405162461bcd60e51b815260040180806020018281038252602181526020018061493f6021913960400191505060405180910390fd5b806001600160a01b0316610607611572565b6001600160a01b03161480610623575061062381610460611572565b61065e5760405162461bcd60e51b81526004018080602001828103825260388152602001806147476038913960400191505060405180910390fd5b6106688383611576565b505050565b6102925460ff161561070157816040015160008151811061068a57fe5b6020026020010151600001516001600160a01b03166106a7610f2e565b6001600160a01b031614806106dc57506106dc82604001516000815181106106cb57fe5b602002602001015160000151611159565b6107015760405162461bcd60e51b81526004016106f89061447d565b60405180910390fd5b61070b82826115e5565b5050565b61072061071a611572565b82611767565b61075b5760405162461bcd60e51b81526004018080602001828103825260318152602001806149606031913960400191505060405180910390fd5b610668838383611773565b60008281526101c6602052604081205481906107875750600090508061086d565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b8282101561080357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016107b4565b5050505090508060008151811061081657fe5b60209081029190910101515192506000805b82518110156108615782818151811061083d57fe5b6020026020010151602001516001600160601b031682019150806001019050610828565b50612710908502049150505b9250929050565b61087c611572565b6001600160a01b031661088d610f2e565b6001600160a01b0316146108d6576040805162461bcd60e51b815260206004820181905260248201526000805160206148a7833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b610932868686868686611892565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd610966611572565b8787604051610977939291906143d2565b60405180910390a1505050505050565b61066883838360405180602001604052806000815250611178565b6109ab81611555565b610a1a57606081901c6109bc611572565b6001600160a01b0316816001600160a01b031614610a0b5760405162461bcd60e51b815260040180806020018281038252602d815260200180614822602d913960400191505060405180910390fd5b610a14826119ac565b50610a69565b610a2561071a611572565b610a605760405162461bcd60e51b81526004018080602001828103825260308152602001806149b66030913960400191505060405180910390fd5b610a69816119c8565b50565b610a7a878787878686611892565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e9913610ab1611572565b8888604051610ac2939291906143d2565b60405180910390a150505050505050565b610adb611572565b6001600160a01b0316610aec610f2e565b6001600160a01b031614610b35576040805162461bcd60e51b815260206004820181905260248201526000805160206148a7833981519152604482015290519081900360640190fd5b610b3e81611a64565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d681604051610b6d919061443f565b60405180910390a150565b600081815260ff60205260408120546001600160a01b0316806104965760405162461bcd60e51b81526004018080602001828103825260298152602001806147a96029913960400191505060405180910390fd5b6101c88054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561052a5780601f106104ff5761010080835404028352916020019161052a565b60006001600160a01b038216610c755760405162461bcd60e51b815260040180806020018281038252602a81526020018061477f602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b610c9a611572565b6001600160a01b0316610cab610f2e565b6001600160a01b031614610cf4576040805162461bcd60e51b815260206004820181905260248201526000805160206148a7833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b610d46611572565b6001600160a01b0316610d57610f2e565b6001600160a01b031614610da0576040805162461bcd60e51b815260206004820181905260248201526000805160206148a7833981519152604482015290519081900360640190fd5b60005b815181101561070b576000828281518110610dba57fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a350600101610da3565b8251610e2e90611555565b15610e4757610e4282828560000151610987565b610668565b8260400151600081518110610e5857fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614610e945760405162461bcd60e51b81526004016106f890614452565b610668838261066d565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f2357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610ed4565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561052a5780601f106104ff5761010080835404028352916020019161052a565b610fa6611572565b6001600160a01b0316610fb7610f2e565b6001600160a01b031614611000576040805162461bcd60e51b815260206004820181905260248201526000805160206148a7833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b61105b611572565b6001600160a01b0316826001600160a01b031614156110c1576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006110cf611572565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611113611572565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b611189611183611572565b83611767565b6111c45760405162461bcd60e51b81526004018080602001828103825260318152602001806149606031913960400191505060405180910390fd5b6111d084848484611a78565b50505050565b606061049682611aca565b60008181526101c660209081526040808320805482518185028101850190935280835260609492939192909184018215610f2357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610ed4565b816001600160a01b031661126e611572565b6001600160a01b0316146112945760405162461bcd60e51b81526004016106f89061450a565b610668838383611ad5565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156113265780601f106112fb57610100808354040283529160200191611326565b820191906000526020600020905b81548152906001019060200180831161130957829003601f168201915b505050505081565b600061133a8383611b81565b90505b92915050565b61134b611572565b6001600160a01b031661135c610f2e565b6001600160a01b0316146113a5576040805162461bcd60e51b815260206004820181905260248201526000805160206148a7833981519152604482015290519081900360640190fd5b6001600160a01b0381166113ea5760405162461bcd60e51b81526004018080602001828103825260268152602001806146af6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b611454878787878787611892565b610292805460ff1916905561146881611343565b7ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd818888604051610ac2939291906143d2565b60006001600160e01b03198216638486f69f60e01b14806114cc57506001600160e01b0319821663656cb66560e11b145b806114e757506001600160e01b0319821663152a902d60e11b145b8061150257506001600160e01b031982166301ffc9a760e01b145b8061151d57506001600160e01b031982166380ac58cd60e01b145b8061153857506001600160e01b03198216635b5e139f60e01b145b806104965750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b3390565b60008181526101016020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115ac82610b78565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b815160601c60006115f4611572565b9050836040015160008151811061160757fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146116435760405162461bcd60e51b81526004016106f8906144df565b8360800151518460400151511461165957600080fd5b806001600160a01b0316826001600160a01b0316148061167e575061167e828261132e565b61169a5760405162461bcd60e51b81526004016106f890614566565b60006116a585611bae565b905060005b85604001515181101561171b576000866040015182815181106116c957fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b0316146117125761171281848960800151858151811061170557fe5b6020026020010151611df5565b506001016116aa565b5061172a848660000151611e00565b61173c85600001518660600151611e1a565b61174e85600001518660400151612009565b611760856000015186602001516121b8565b5050505050565b600061133a838361221c565b826001600160a01b031661178682610b78565b6001600160a01b0316146117cb5760405162461bcd60e51b81526004018080602001828103825260298152602001806148c76029913960400191505060405180910390fd5b6001600160a01b0382166118105760405162461bcd60e51b81526004018080602001828103825260248152602001806146d56024913960400191505060405180910390fd5b61181b838383610668565b611826600082611576565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b0319168217905592518493929160008051602061491f83398151915291a4505050565b600054610100900460ff16806118ab57506118ab612249565b806118b9575060005460ff16155b6118f45760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561191f576000805460ff1961ff0019909116610100171660011790555b61192885611a64565b61193061225a565b6119386122fb565b61194061225a565b611948612398565b611950612435565b61195861225a565b61196061252e565b6119686125fd565b611971846125ff565b61197b8787612624565b61198683600161270f565b61199182600161270f565b80156119a3576000805461ff00191690555b50505050505050565b600090815261010360205260409020805460ff19166001179055565b60006119d382610b78565b90506119e181600084610668565b6119ec600083611576565b6119f582612770565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b0319169055611a3a826119ac565b60405182906000906001600160a01b0384169060008051602061491f833981519152908390a45050565b805161070b906101c8906020840190613a2b565b611a83848484611773565b611a8f84848484612779565b6111d05760405162461bcd60e51b815260040180806020018281038252603281526020018061467d6032913960400191505060405180910390fd5b60606104968261292f565b60008381526101c66020526040812054905b818110156117605760008581526101c66020526040902080546001600160a01b038616919083908110611b1657fe5b6000918252602090912001546001600160a01b03161415611b795760008581526101c660205260409020805484919083908110611b4f57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101611ae7565b6001600160a01b038116600090815261012f602052604081205460ff168061133a575061133a8383612b0a565b6000808260600151516001600160401b0381118015611bcc57600080fd5b50604051908082528060200260200182016040528015611bf6578160200160208202803683370190505b50905060005b836060015151811015611c4857611c2984606001518281518110611c1c57fe5b6020026020010151612b39565b828281518110611c3557fe5b6020908102919091010152600101611bfc565b5060008360400151516001600160401b0381118015611c6657600080fd5b50604051908082528060200260200182016040528015611c90578160200160208202803683370190505b50905060005b846040015151811015611cd557611cb685604001518281518110611c1c57fe5b828281518110611cc257fe5b6020908102919091010152600101611c96565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b83811015611d39578181015183820152602001611d21565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b83811015611d8a578181015183820152602001611d72565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b610668838383612ba6565b61070b828260405180602001604052806000815250612e25565b6000805b8251811015611fbe5760006001600160a01b0316838281518110611e3e57fe5b6020026020010151600001516001600160a01b03161415611ea6576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b828181518110611eb257fe5b6020026020010151602001516001600160601b031660001415611f1c576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b828181518110611f2857fe5b6020026020010151602001516001600160601b0316820191506101c66000858152602001908152602001600020838281518110611f6157fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501611e1e565b506127108110611fff5760405162461bcd60e51b81526004018080602001828103825260258152602001806149916025913960400191505060405180910390fd5b6106688383612e77565b60008281526101fb6020526040812090805b83518110156121575760006001600160a01b031684828151811061203b57fe5b6020026020010151600001516001600160a01b0316141561206e5760405162461bcd60e51b81526004016106f89061452f565b83818151811061207a57fe5b6020026020010151602001516001600160601b0316600014156120af5760405162461bcd60e51b81526004016106f8906144aa565b828482815181106120bc57fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055835161214d9085908390811061212957fe5b6020026020010151602001516001600160601b031683612eb490919063ffffffff16565b915060010161201b565b5080612710146121795760405162461bcd60e51b81526004016106f8906145b7565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f84846040516121aa92919061460e565b60405180910390a150505050565b6121c182611555565b6121fc5760405162461bcd60e51b815260040180806020018281038252602c81526020018061487b602c913960400191505060405180910390fd5b60008281526101c760209081526040909120825161066892840190613a2b565b6001600160a01b038216600090815261012f602052604081205460ff168061133a575061133a8383612f0e565b600061225430612faa565b15905090565b600054610100900460ff16806122735750612273612249565b80612281575060005460ff16155b6122bc5760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff161580156122e7576000805460ff1961ff0019909116610100171660011790555b8015610a69576000805461ff001916905550565b600054610100900460ff16806123145750612314612249565b80612322575060005460ff16155b61235d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff16158015612388576000805460ff1961ff0019909116610100171660011790555b6122e763656cb66560e11b612fb0565b600054610100900460ff16806123b157506123b1612249565b806123bf575060005460ff16155b6123fa5760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff16158015612425576000805460ff1961ff0019909116610100171660011790555b6122e76301ffc9a760e01b612fb0565b600054610100900460ff168061244e575061244e612249565b8061245c575060005460ff16155b6124975760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff161580156124c2576000805460ff1961ff0019909116610100171660011790555b60006124cc611572565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610a69576000805461ff001916905550565b600054610100900460ff16806125475750612547612249565b80612555575060005460ff16155b6125905760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff161580156125bb576000805460ff1961ff0019909116610100171660011790555b6122e7604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b815250613034565b565b80516126139061022e906020840190613a2b565b50610a6963e8a3d48560e01b612fb0565b600054610100900460ff168061263d575061263d612249565b8061264b575060005460ff16155b6126865760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff161580156126b1576000805460ff1961ff0019909116610100171660011790555b82516126c49060fd906020860190613a2b565b5081516126d89060fe906020850190613a2b565b506126e96380ac58cd60e01b612fb0565b6126f9635b5e139f60e01b612fb0565b8015610668576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b610a69816130f4565b600061278d846001600160a01b0316612faa565b1561292357836001600160a01b031663150b7a026127a9611572565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561281c578181015183820152602001612804565b50505050905090810190601f1680156128495780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561286b57600080fd5b505af192505050801561289057506040513d602081101561288b57600080fd5b505160015b612909573d8080156128be576040519150601f19603f3d011682016040523d82523d6000602084013e6128c3565b606091505b5080516129015760405162461bcd60e51b815260040180806020018281038252603281526020018061467d6032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612927565b5060015b949350505050565b606061293a82611555565b6129755760405162461bcd60e51b815260040180806020018281038252602f8152602001806148f0602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f810185900485028201850190935282815292909190830182828015612a095780601f106129de57610100808354040283529160200191612a09565b820191906000526020600020905b8154815290600101906020018083116129ec57829003601f168201915b505050505090506000612a1a610bcc565b9050805160001415612a2e57509050610499565b815115612a4857612a3f81836130fd565b92505050610499565b80612a52856132e2565b6040516020018083805190602001908083835b60208310612a845780518252601f199092019160209182019101612a65565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612acc5780518252601f199092019160209182019101612aad565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000612bb1836133bc565b90506000825160411415612bcc57612bc98284613408565b90505b846001600160a01b0316816001600160a01b03161461176057612bf7856001600160a01b0316612faa565b15612dad5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b83811015612c66578181015183820152602001612c4e565b50505050905090810190601f168015612c935780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015612cb157600080fd5b505afa158015612cc5573d6000803e3d6000fd5b505050506040513d6020811015612cdb57600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b031990911614612da75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d6c578181015183820152602001612d54565b50505050905090810190601f168015612d995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611760565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315612d6c578181015183820152602001612d54565b612e2f8383613488565b612e3c6000848484612779565b6106685760405162461bcd60e51b815260040180806020018281038252603281526020018061467d6032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612ea892919061460e565b60405180910390a15050565b60008282018381101561133a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000612f1982611555565b612f545760405162461bcd60e51b815260040180806020018281038252602c81526020018061471b602c913960400191505060405180910390fd5b6000612f5f83610b78565b9050806001600160a01b0316846001600160a01b03161480612f9a5750836001600160a01b0316612f8f84610534565b6001600160a01b0316145b806129275750612927818561132e565b3b151590565b6001600160e01b0319808216141561300f576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff168061304d575061304d612249565b8061305b575060005460ff16155b6130965760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff161580156130c1576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015610668576000805461ff0019169055505050565b610a69816135ee565b805182516060918491849110156131c85784846040516020018083805190602001908083835b602083106131425780518252601f199092019160209182019101613123565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061318a5780518252601f19909201916020918201910161316b565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529250505061133d565b60005b82518110156132d8578281815181106131e057fe5b602001015160f81c60f81b6001600160f81b03191682828151811061320157fe5b01602001516001600160f81b031916146132d05785856040516020018083805190602001908083835b602083106132495780518252601f19909201916020918201910161322a565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106132915780518252601f199092019160209182019101613272565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052935050505061133d565b6001016131cb565b5092949350505050565b60608161330757506040805180820190915260018152600360fc1b6020820152610499565b8160005b811561331f57600101600a8204915061330b565b6000816001600160401b038111801561333757600080fd5b506040519080825280601f01601f191660200182016040528015613362576020820181803683370190505b50859350905060001982015b83156133b357600a840660300160f81b8282806001900393508151811061339157fe5b60200101906001600160f81b031916908160001a905350600a8404935061336e565b50949350505050565b60006133c661362e565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60008151604114613460576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61347e8682858561366e565b9695505050505050565b6001600160a01b0382166134e3576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff161561353f576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b61354881611555565b1561359a576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b6135a660008383610668565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b031916909117905561070b82826138c4565b60008181526101c760205260409020546002600019610100600184161502019091160415610a695760008181526101c760205260408120610a6991613ab7565b60006136697f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61365c6138ce565b6136646138d4565b6138da565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156136cf5760405162461bcd60e51b81526004018080602001828103825260228152602001806146f96022913960400191505060405180910390fd5b6000601e8560ff1611156137a9576004850360ff16601b14806136f857506004850360ff16601c145b6137335760405162461bcd60e51b81526004018080602001828103825260228152602001806148006022913960400191505060405180910390fd5b600161373e8761393c565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613798573d6000803e3d6000fd5b505050602060405103519050613860565b8460ff16601b14806137be57508460ff16601c145b6137f95760405162461bcd60e51b81526004018080602001828103825260228152602001806148006022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613853573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166138bb576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b61070b828261398d565b60975490565b60985490565b60008383836138e7613a27565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b03831681146139fc5760405182906001600160a01b0383169060009060008051602061491f833981519152908290a481836001600160a01b0316826001600160a01b031660008051602061491f83398151915260405160405180910390a4610668565b60405182906001600160a01b0385169060009060008051602061491f833981519152908290a4505050565b4690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613a615760008555613aa7565b82601f10613a7a57805160ff1916838001178555613aa7565b82800160010185558215613aa7579182015b82811115613aa7578251825591602001919060010190613a8c565b50613ab3929150613af7565b5090565b50805460018160011615610100020316600290046000825580601f10613add5750610a69565b601f016020900490600052602060002090810190610a6991905b5b80821115613ab35760008155600101613af8565b803561049981614667565b600082601f830112613b27578081fd5b81356020613b3c613b378361464a565b614627565b8281528181019085830183850287018401881015613b58578586fd5b855b85811015613b7f578135613b6d81614667565b84529284019290840190600101613b5a565b5090979650505050505050565b600082601f830112613b9c578081fd5b81356020613bac613b378361464a565b82815281810190858301855b85811015613b7f57613bcf898684358b0101613c9c565b84529284019290840190600101613bb8565b600082601f830112613bf1578081fd5b81356020613c01613b378361464a565b82815281810190858301604080860288018501891015613c1f578687fd5b865b86811015613c8e5781838b031215613c37578788fd5b81518281018181106001600160401b0382111715613c5157fe5b83528335613c5e81614667565b8152838701356001600160601b0381168114613c7857898afd5b8188015285529385019391810191600101613c21565b509198975050505050505050565b600082601f830112613cac578081fd5b81356001600160401b03811115613cbf57fe5b613cd2601f8201601f1916602001614627565b818152846020838601011115613ce6578283fd5b816020850160208301379081016020019190915292915050565b600060a08284031215613d11578081fd5b613d1b60a0614627565b90508135815260208201356001600160401b0380821115613d3b57600080fd5b613d4785838601613c9c565b60208401526040840135915080821115613d6057600080fd5b613d6c85838601613be1565b60408401526060840135915080821115613d8557600080fd5b613d9185838601613be1565b60608401526080840135915080821115613daa57600080fd5b50613db784828501613b8c565b60808301525092915050565b600060208284031215613dd4578081fd5b813561133a81614667565b60008060408385031215613df1578081fd5b8235613dfc81614667565b91506020830135613e0c81614667565b809150509250929050565b600080600060608486031215613e2b578081fd5b8335613e3681614667565b92506020840135613e4681614667565b929592945050506040919091013590565b60008060008060808587031215613e6c578081fd5b8435613e7781614667565b93506020850135613e8781614667565b92506040850135915060608501356001600160401b03811115613ea8578182fd5b613eb487828801613c9c565b91505092959194509250565b60008060408385031215613ed2578182fd5b8235613edd81614667565b915060208301358015158114613e0c578182fd5b60008060408385031215613f03578182fd5b8235613f0e81614667565b946020939093013593505050565b600060208284031215613f2d578081fd5b81356001600160401b03811115613f42578182fd5b61292784828501613b17565b600060208284031215613f5f578081fd5b81356001600160e01b03198116811461133a578182fd5b600060208284031215613f87578081fd5b81356001600160401b03811115613f9c578182fd5b61292784828501613c9c565b60008060008060008060c08789031215613fc0578384fd5b86356001600160401b0380821115613fd6578586fd5b613fe28a838b01613c9c565b97506020890135915080821115613ff7578586fd5b6140038a838b01613c9c565b96506040890135915080821115614018578586fd5b6140248a838b01613c9c565b95506060890135915080821115614039578384fd5b5061404689828a01613c9c565b93505061405560808801613b0c565b915061406360a08801613b0c565b90509295509295509295565b600080600080600080600060e0888a031215614089578485fd5b87356001600160401b038082111561409f578687fd5b6140ab8b838c01613c9c565b985060208a01359150808211156140c0578687fd5b6140cc8b838c01613c9c565b975060408a01359150808211156140e1578687fd5b6140ed8b838c01613c9c565b965060608a0135915080821115614102578283fd5b5061410f8a828b01613c9c565b94505061411e60808901613b0c565b925061412c60a08901613b0c565b915061413a60c08901613b0c565b905092959891949750929550565b600080600080600080600060e0888a031215614162578081fd5b87356001600160401b0380821115614178578283fd5b6141848b838c01613c9c565b985060208a0135915080821115614199578283fd5b6141a58b838c01613c9c565b975060408a01359150808211156141ba578283fd5b6141c68b838c01613c9c565b965060608a01359150808211156141db578283fd5b6141e78b838c01613c9c565b955060808a01359150808211156141fc578283fd5b506142098a828b01613b17565b93505061412c60a08901613b0c565b6000806040838503121561422a578182fd5b82356001600160401b0381111561423f578283fd5b61424b85828601613d00565b9250506020830135613e0c81614667565b600080600060608486031215614270578081fd5b83356001600160401b03811115614285578182fd5b61429186828701613d00565b93505060208401356142a281614667565b915060408401356142b281614667565b809150509250925092565b6000602082840312156142ce578081fd5b5035919050565b6000806000606084860312156142e9578081fd5b8335925060208401356142a281614667565b6000806040838503121561430d578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561436857815180516001600160a01b031688528301516001600160601b0316838801526040909601959082019060010161432f565b509495945050505050565b60008151808452815b818110156143985760208185018101518683018201520161437c565b818111156143a95782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03841681526060602082018190526000906143f690830185614373565b828103604084015261347e8185614373565b6001600160a01b03929092168252602082015260400190565b60006020825261133a602083018461431c565b901515815260200190565b60006020825261133a6020830184614373565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b600083825260406020830152612927604083018461431c565b6040518181016001600160401b038111828210171561464257fe5b604052919050565b60006001600160401b0382111561465d57fe5b5060209081020190565b6001600160a01b0381168114610a6957600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a26469706673582212205c5514330465c7180a2219dfec855ff3fa08b66d2482efc7ed880cfcc8be4a7264736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063aa271e1a116100ad578063e07f23191161007c578063e07f231914610437578063e8a3d4851461044a578063e985e9c514610452578063f2fde38b14610465578063ff14a35414610478576101fb565b8063aa271e1a146103eb578063b88d4fde146103fe578063c87b56dd14610411578063cad96cca14610424576101fb565b80638da5cb5b116100e95780638da5cb5b146103b557806395d89b41146103bd578063983b2d56146103c5578063a22cb465146103d8576101fb565b8063715018a61461036757806371e2a6571461036f578063832fbb2914610382578063891be97414610395576101fb565b80633db397c61161019257806355f804b31161016157806355f804b3146103195780636352211e1461032c5780636c0360eb1461033f57806370a0823114610347576101fb565b80633db397c6146102cd57806342842e0e146102e057806342966c68146102f35780634648eb9d14610306576101fb565b806322a775b6116101ce57806322a775b61461027357806323b872dd146102865780632a55205a146102995780633092afd5146102ba576101fb565b806301ffc9a71461020057806306fdde0314610229578063081812fc1461023e578063095ea7b31461025e575b600080fd5b61021361020e366004613f4e565b61048b565b6040516102209190614434565b60405180910390f35b61023161049e565b604051610220919061443f565b61025161024c3660046142bd565b610534565b60405161022091906143be565b61027161026c366004613ef1565b610597565b005b610271610281366004614218565b61066d565b610271610294366004613e17565b61070f565b6102ac6102a73660046142fb565b610766565b604051610220929190614408565b6102716102c8366004613dc3565b610874565b6102716102db366004613fa8565b610924565b6102716102ee366004613e17565b610987565b6102716103013660046142bd565b6109a2565b610271610314366004614148565b610a6c565b610271610327366004613f76565b610ad3565b61025161033a3660046142bd565b610b78565b610231610bcc565b61035a610355366004613dc3565b610c2e565b6040516102209190614605565b610271610c92565b61027161037d366004613f1c565b610d3e565b61027161039036600461425c565b610e23565b6103a86103a33660046142bd565b610e9e565b6040516102209190614421565b610251610f2e565b610231610f3d565b6102716103d3366004613dc3565b610f9e565b6102716103e6366004613ec0565b611053565b6102136103f9366004613dc3565b611159565b61027161040c366004613e57565b611178565b61023161041f3660046142bd565b6111d6565b6103a86104323660046142bd565b6111e1565b6102716104453660046142d5565b61125c565b61023161129f565b610213610460366004613ddf565b61132e565b610271610473366004613dc3565b611343565b61027161048636600461406f565b611446565b60006104968261149b565b90505b919050565b60fd8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561052a5780601f106104ff5761010080835404028352916020019161052a565b820191906000526020600020905b81548152906001019060200180831161050d57829003601f168201915b5050505050905090565b600061053f82611555565b61057a5760405162461bcd60e51b815260040180806020018281038252602c81526020018061484f602c913960400191505060405180910390fd5b50600090815261010160205260409020546001600160a01b031690565b60006105a282610b78565b9050806001600160a01b0316836001600160a01b031614156105f55760405162461bcd60e51b815260040180806020018281038252602181526020018061493f6021913960400191505060405180910390fd5b806001600160a01b0316610607611572565b6001600160a01b03161480610623575061062381610460611572565b61065e5760405162461bcd60e51b81526004018080602001828103825260388152602001806147476038913960400191505060405180910390fd5b6106688383611576565b505050565b6102925460ff161561070157816040015160008151811061068a57fe5b6020026020010151600001516001600160a01b03166106a7610f2e565b6001600160a01b031614806106dc57506106dc82604001516000815181106106cb57fe5b602002602001015160000151611159565b6107015760405162461bcd60e51b81526004016106f89061447d565b60405180910390fd5b61070b82826115e5565b5050565b61072061071a611572565b82611767565b61075b5760405162461bcd60e51b81526004018080602001828103825260318152602001806149606031913960400191505060405180910390fd5b610668838383611773565b60008281526101c6602052604081205481906107875750600090508061086d565b60008481526101c66020908152604080832080548251818502810185019093528083529192909190849084015b8282101561080357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b0316818301528252600190920191016107b4565b5050505090508060008151811061081657fe5b60209081029190910101515192506000805b82518110156108615782818151811061083d57fe5b6020026020010151602001516001600160601b031682019150806001019050610828565b50612710908502049150505b9250929050565b61087c611572565b6001600160a01b031661088d610f2e565b6001600160a01b0316146108d6576040805162461bcd60e51b815260206004820181905260248201526000805160206148a7833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff19169055519091907f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd908390a350565b610932868686868686611892565b610292805460ff191690557ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd610966611572565b8787604051610977939291906143d2565b60405180910390a1505050505050565b61066883838360405180602001604052806000815250611178565b6109ab81611555565b610a1a57606081901c6109bc611572565b6001600160a01b0316816001600160a01b031614610a0b5760405162461bcd60e51b815260040180806020018281038252602d815260200180614822602d913960400191505060405180910390fd5b610a14826119ac565b50610a69565b610a2561071a611572565b610a605760405162461bcd60e51b81526004018080602001828103825260308152602001806149b66030913960400191505060405180910390fd5b610a69816119c8565b50565b610a7a878787878686611892565b610292805460ff191660011790557fd901a467fa419f379a67636a1de44cc2ed772beb43a0c05fa1ddcad5d59e9913610ab1611572565b8888604051610ac2939291906143d2565b60405180910390a150505050505050565b610adb611572565b6001600160a01b0316610aec610f2e565b6001600160a01b031614610b35576040805162461bcd60e51b815260206004820181905260248201526000805160206148a7833981519152604482015290519081900360640190fd5b610b3e81611a64565b7f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d681604051610b6d919061443f565b60405180910390a150565b600081815260ff60205260408120546001600160a01b0316806104965760405162461bcd60e51b81526004018080602001828103825260298152602001806147a96029913960400191505060405180910390fd5b6101c88054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561052a5780601f106104ff5761010080835404028352916020019161052a565b60006001600160a01b038216610c755760405162461bcd60e51b815260040180806020018281038252602a81526020018061477f602a913960400191505060405180910390fd5b506001600160a01b03166000908152610100602052604090205490565b610c9a611572565b6001600160a01b0316610cab610f2e565b6001600160a01b031614610cf4576040805162461bcd60e51b815260206004820181905260248201526000805160206148a7833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b610d46611572565b6001600160a01b0316610d57610f2e565b6001600160a01b031614610da0576040805162461bcd60e51b815260206004820181905260248201526000805160206148a7833981519152604482015290519081900360640190fd5b60005b815181101561070b576000828281518110610dba57fe5b6020908102919091018101516001600160a01b03811660008181526102c49093526040808420805460ff1916600190811790915590519294509290917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd9190a350600101610da3565b8251610e2e90611555565b15610e4757610e4282828560000151610987565b610668565b8260400151600081518110610e5857fe5b6020026020010151600001516001600160a01b0316826001600160a01b031614610e945760405162461bcd60e51b81526004016106f890614452565b610668838261066d565b60606101fb6000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610f2357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610ed4565b505050509050919050565b6033546001600160a01b031690565b60fe8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561052a5780601f106104ff5761010080835404028352916020019161052a565b610fa6611572565b6001600160a01b0316610fb7610f2e565b6001600160a01b031614611000576040805162461bcd60e51b815260206004820181905260248201526000805160206148a7833981519152604482015290519081900360640190fd5b6001600160a01b03811660008181526102c46020526040808220805460ff1916600190811790915590519092917f3042b80e435ae46c334b2cfec51a66d64c9a8a8af4cd0c279a124c35a09e91dd91a350565b61105b611572565b6001600160a01b0316826001600160a01b031614156110c1576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8061010260006110cf611572565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611113611572565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6001600160a01b031660009081526102c4602052604090205460ff1690565b611189611183611572565b83611767565b6111c45760405162461bcd60e51b81526004018080602001828103825260318152602001806149606031913960400191505060405180910390fd5b6111d084848484611a78565b50505050565b606061049682611aca565b60008181526101c660209081526040808320805482518185028101850190935280835260609492939192909184018215610f2357600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b031681830152825260019092019101610ed4565b816001600160a01b031661126e611572565b6001600160a01b0316146112945760405162461bcd60e51b81526004016106f89061450a565b610668838383611ad5565b61022e805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156113265780601f106112fb57610100808354040283529160200191611326565b820191906000526020600020905b81548152906001019060200180831161130957829003601f168201915b505050505081565b600061133a8383611b81565b90505b92915050565b61134b611572565b6001600160a01b031661135c610f2e565b6001600160a01b0316146113a5576040805162461bcd60e51b815260206004820181905260248201526000805160206148a7833981519152604482015290519081900360640190fd5b6001600160a01b0381166113ea5760405162461bcd60e51b81526004018080602001828103825260268152602001806146af6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b611454878787878787611892565b610292805460ff1916905561146881611343565b7ff05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd818888604051610ac2939291906143d2565b60006001600160e01b03198216638486f69f60e01b14806114cc57506001600160e01b0319821663656cb66560e11b145b806114e757506001600160e01b0319821663152a902d60e11b145b8061150257506001600160e01b031982166301ffc9a760e01b145b8061151d57506001600160e01b031982166380ac58cd60e01b145b8061153857506001600160e01b03198216635b5e139f60e01b145b806104965750506001600160e01b03191663780e9d6360e01b1490565b600090815260ff60205260409020546001600160a01b0316151590565b3390565b60008181526101016020526040902080546001600160a01b0319166001600160a01b03841690811790915581906115ac82610b78565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b815160601c60006115f4611572565b9050836040015160008151811061160757fe5b6020026020010151600001516001600160a01b0316826001600160a01b0316146116435760405162461bcd60e51b81526004016106f8906144df565b8360800151518460400151511461165957600080fd5b806001600160a01b0316826001600160a01b0316148061167e575061167e828261132e565b61169a5760405162461bcd60e51b81526004016106f890614566565b60006116a585611bae565b905060005b85604001515181101561171b576000866040015182815181106116c957fe5b6020026020010151600001519050836001600160a01b0316816001600160a01b0316146117125761171281848960800151858151811061170557fe5b6020026020010151611df5565b506001016116aa565b5061172a848660000151611e00565b61173c85600001518660600151611e1a565b61174e85600001518660400151612009565b611760856000015186602001516121b8565b5050505050565b600061133a838361221c565b826001600160a01b031661178682610b78565b6001600160a01b0316146117cb5760405162461bcd60e51b81526004018080602001828103825260298152602001806148c76029913960400191505060405180910390fd5b6001600160a01b0382166118105760405162461bcd60e51b81526004018080602001828103825260248152602001806146d56024913960400191505060405180910390fd5b61181b838383610668565b611826600082611576565b6001600160a01b0380841660008181526101006020908152604080832080546000190190559386168083528483208054600101905585835260ff90915283822080546001600160a01b0319168217905592518493929160008051602061491f83398151915291a4505050565b600054610100900460ff16806118ab57506118ab612249565b806118b9575060005460ff16155b6118f45760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff1615801561191f576000805460ff1961ff0019909116610100171660011790555b61192885611a64565b61193061225a565b6119386122fb565b61194061225a565b611948612398565b611950612435565b61195861225a565b61196061252e565b6119686125fd565b611971846125ff565b61197b8787612624565b61198683600161270f565b61199182600161270f565b80156119a3576000805461ff00191690555b50505050505050565b600090815261010360205260409020805460ff19166001179055565b60006119d382610b78565b90506119e181600084610668565b6119ec600083611576565b6119f582612770565b6001600160a01b038116600090815261010060209081526040808320805460001901905584835260ff909152902080546001600160a01b0319169055611a3a826119ac565b60405182906000906001600160a01b0384169060008051602061491f833981519152908390a45050565b805161070b906101c8906020840190613a2b565b611a83848484611773565b611a8f84848484612779565b6111d05760405162461bcd60e51b815260040180806020018281038252603281526020018061467d6032913960400191505060405180910390fd5b60606104968261292f565b60008381526101c66020526040812054905b818110156117605760008581526101c66020526040902080546001600160a01b038616919083908110611b1657fe5b6000918252602090912001546001600160a01b03161415611b795760008581526101c660205260409020805484919083908110611b4f57fe5b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790555b600101611ae7565b6001600160a01b038116600090815261012f602052604081205460ff168061133a575061133a8383612b0a565b6000808260600151516001600160401b0381118015611bcc57600080fd5b50604051908082528060200260200182016040528015611bf6578160200160208202803683370190505b50905060005b836060015151811015611c4857611c2984606001518281518110611c1c57fe5b6020026020010151612b39565b828281518110611c3557fe5b6020908102919091010152600101611bfc565b5060008360400151516001600160401b0381118015611c6657600080fd5b50604051908082528060200260200182016040528015611c90578160200160208202803683370190505b50905060005b846040015151811015611cd557611cb685604001518281518110611c1c57fe5b828281518110611cc257fe5b6020908102919091010152600101611c96565b507ff64326045af5fd7e15297ba939f85b550474d3899daa47d2bc1ffbdb9ced344e84600001518560200151805190602001208360405160200180828051906020019060200280838360005b83811015611d39578181015183820152602001611d21565b50505050905001915050604051602081830303815290604052805190602001208560405160200180828051906020019060200280838360005b83811015611d8a578181015183820152602001611d72565b505050509050019150506040516020818303038152906040528051906020012060405160200180868152602001858152602001848152602001838152602001828152602001955050505050506040516020818303038152906040528051906020012092505050919050565b610668838383612ba6565b61070b828260405180602001604052806000815250612e25565b6000805b8251811015611fbe5760006001600160a01b0316838281518110611e3e57fe5b6020026020010151600001516001600160a01b03161415611ea6576040805162461bcd60e51b815260206004820152601b60248201527f526563697069656e742073686f756c642062652070726573656e740000000000604482015290519081900360640190fd5b828181518110611eb257fe5b6020026020010151602001516001600160601b031660001415611f1c576040805162461bcd60e51b815260206004820181905260248201527f526f79616c74792076616c75652073686f756c6420626520706f736974697665604482015290519081900360640190fd5b828181518110611f2857fe5b6020026020010151602001516001600160601b0316820191506101c66000858152602001908152602001600020838281518110611f6157fe5b60209081029190910181015182546001818101855560009485529383902082519101805492909301516001600160601b0316600160a01b026001600160a01b039182166001600160a01b0319909316929092171617905501611e1e565b506127108110611fff5760405162461bcd60e51b81526004018080602001828103825260258152602001806149916025913960400191505060405180910390fd5b6106688383612e77565b60008281526101fb6020526040812090805b83518110156121575760006001600160a01b031684828151811061203b57fe5b6020026020010151600001516001600160a01b0316141561206e5760405162461bcd60e51b81526004016106f89061452f565b83818151811061207a57fe5b6020026020010151602001516001600160601b0316600014156120af5760405162461bcd60e51b81526004016106f8906144aa565b828482815181106120bc57fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055835161214d9085908390811061212957fe5b6020026020010151602001516001600160601b031683612eb490919063ffffffff16565b915060010161201b565b5080612710146121795760405162461bcd60e51b81526004016106f8906145b7565b7f841ffb90d4cabdd1f16034f3fa831d79060febbb8167bdd54a49269365bdf78f84846040516121aa92919061460e565b60405180910390a150505050565b6121c182611555565b6121fc5760405162461bcd60e51b815260040180806020018281038252602c81526020018061487b602c913960400191505060405180910390fd5b60008281526101c760209081526040909120825161066892840190613a2b565b6001600160a01b038216600090815261012f602052604081205460ff168061133a575061133a8383612f0e565b600061225430612faa565b15905090565b600054610100900460ff16806122735750612273612249565b80612281575060005460ff16155b6122bc5760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff161580156122e7576000805460ff1961ff0019909116610100171660011790555b8015610a69576000805461ff001916905550565b600054610100900460ff16806123145750612314612249565b80612322575060005460ff16155b61235d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff16158015612388576000805460ff1961ff0019909116610100171660011790555b6122e763656cb66560e11b612fb0565b600054610100900460ff16806123b157506123b1612249565b806123bf575060005460ff16155b6123fa5760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff16158015612425576000805460ff1961ff0019909116610100171660011790555b6122e76301ffc9a760e01b612fb0565b600054610100900460ff168061244e575061244e612249565b8061245c575060005460ff16155b6124975760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff161580156124c2576000805460ff1961ff0019909116610100171660011790555b60006124cc611572565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610a69576000805461ff001916905550565b600054610100900460ff16806125475750612547612249565b80612555575060005460ff16155b6125905760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff161580156125bb576000805460ff1961ff0019909116610100171660011790555b6122e7604051806040016040528060078152602001664d696e7437323160c81b815250604051806040016040528060018152602001603160f81b815250613034565b565b80516126139061022e906020840190613a2b565b50610a6963e8a3d48560e01b612fb0565b600054610100900460ff168061263d575061263d612249565b8061264b575060005460ff16155b6126865760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff161580156126b1576000805460ff1961ff0019909116610100171660011790555b82516126c49060fd906020860190613a2b565b5081516126d89060fe906020850190613a2b565b506126e96380ac58cd60e01b612fb0565b6126f9635b5e139f60e01b612fb0565b8015610668576000805461ff0019169055505050565b6001600160a01b038216600081815261012f6020908152604091829020805460ff1916851515908117909155825190815291517f270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b9281900390910190a25050565b610a69816130f4565b600061278d846001600160a01b0316612faa565b1561292357836001600160a01b031663150b7a026127a9611572565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561281c578181015183820152602001612804565b50505050905090810190601f1680156128495780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561286b57600080fd5b505af192505050801561289057506040513d602081101561288b57600080fd5b505160015b612909573d8080156128be576040519150601f19603f3d011682016040523d82523d6000602084013e6128c3565b606091505b5080516129015760405162461bcd60e51b815260040180806020018281038252603281526020018061467d6032913960400191505060405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612927565b5060015b949350505050565b606061293a82611555565b6129755760405162461bcd60e51b815260040180806020018281038252602f8152602001806148f0602f913960400191505060405180910390fd5b60008281526101c7602090815260408083208054825160026001831615610100026000190190921691909104601f810185900485028201850190935282815292909190830182828015612a095780601f106129de57610100808354040283529160200191612a09565b820191906000526020600020905b8154815290600101906020018083116129ec57829003601f168201915b505050505090506000612a1a610bcc565b9050805160001415612a2e57509050610499565b815115612a4857612a3f81836130fd565b92505050610499565b80612a52856132e2565b6040516020018083805190602001908083835b60208310612a845780518252601f199092019160209182019101612a65565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310612acc5780518252601f199092019160209182019101612aad565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b6001600160a01b0391821660009081526101026020908152604080832093909416825291909152205460ff1690565b8051602091820151604080517f397e04204c1e1a60ee8724b71f8244e10ab5f2e9009854d80f602bda21b59ebb818601526001600160a01b03909316838201526001600160601b039091166060808401919091528151808403909101815260809092019052805191012090565b6000612bb1836133bc565b90506000825160411415612bcc57612bc98284613408565b90505b846001600160a01b0316816001600160a01b03161461176057612bf7856001600160a01b0316612faa565b15612dad5760408051630b135d3f60e11b808252600482018581526024830193845286516044840152865191936001600160a01b038a1693631626ba7e9388938a9390929091606490910190602085019080838360005b83811015612c66578181015183820152602001612c4e565b50505050905090810190601f168015612c935780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015612cb157600080fd5b505afa158015612cc5573d6000803e3d6000fd5b505050506040513d6020811015612cdb57600080fd5b505160408051808201909152601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020820152916001600160e01b031990911614612da75760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d6c578181015183820152602001612d54565b50505050905090810190601f168015612d995780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50611760565b604080518082018252601c81527f7369676e617475726520766572696669636174696f6e206572726f72000000006020808301918252925162461bcd60e51b81526004810193845282516024820152825192939283926044909201919080838360008315612d6c578181015183820152602001612d54565b612e2f8383613488565b612e3c6000848484612779565b6106685760405162461bcd60e51b815260040180806020018281038252603281526020018061467d6032913960400191505060405180910390fd5b7f3fa96d7b6bcbfe71ef171666d84db3cf52fa2d1c8afdb1cc8e486177f208b7df8282604051612ea892919061460e565b60405180910390a15050565b60008282018381101561133a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000612f1982611555565b612f545760405162461bcd60e51b815260040180806020018281038252602c81526020018061471b602c913960400191505060405180910390fd5b6000612f5f83610b78565b9050806001600160a01b0316846001600160a01b03161480612f9a5750836001600160a01b0316612f8f84610534565b6001600160a01b0316145b806129275750612927818561132e565b3b151590565b6001600160e01b0319808216141561300f576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152606560205260409020805460ff19166001179055565b600054610100900460ff168061304d575061304d612249565b8061305b575060005460ff16155b6130965760405162461bcd60e51b815260040180806020018281038252602e8152602001806147d2602e913960400191505060405180910390fd5b600054610100900460ff161580156130c1576000805460ff1961ff0019909116610100171660011790555b82516020808501919091208351918401919091206097919091556098558015610668576000805461ff0019169055505050565b610a69816135ee565b805182516060918491849110156131c85784846040516020018083805190602001908083835b602083106131425780518252601f199092019160209182019101613123565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b6020831061318a5780518252601f19909201916020918201910161316b565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529250505061133d565b60005b82518110156132d8578281815181106131e057fe5b602001015160f81c60f81b6001600160f81b03191682828151811061320157fe5b01602001516001600160f81b031916146132d05785856040516020018083805190602001908083835b602083106132495780518252601f19909201916020918201910161322a565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106132915780518252601f199092019160209182019101613272565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052935050505061133d565b6001016131cb565b5092949350505050565b60608161330757506040805180820190915260018152600360fc1b6020820152610499565b8160005b811561331f57600101600a8204915061330b565b6000816001600160401b038111801561333757600080fd5b506040519080825280601f01601f191660200182016040528015613362576020820181803683370190505b50859350905060001982015b83156133b357600a840660300160f81b8282806001900393508151811061339157fe5b60200101906001600160f81b031916908160001a905350600a8404935061336e565b50949350505050565b60006133c661362e565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60008151604114613460576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61347e8682858561366e565b9695505050505050565b6001600160a01b0382166134e3576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6000818152610103602052604090205460ff161561353f576040805162461bcd60e51b81526020600482015260146024820152731d1bdad95b88185b1c9958591e48189d5c9b995960621b604482015290519081900360640190fd5b61354881611555565b1561359a576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b6135a660008383610668565b6001600160a01b0382166000818152610100602090815260408083208054600101905584835260ff909152902080546001600160a01b031916909117905561070b82826138c4565b60008181526101c760205260409020546002600019610100600184161502019091160415610a695760008181526101c760205260408120610a6991613ab7565b60006136697f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61365c6138ce565b6136646138d4565b6138da565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156136cf5760405162461bcd60e51b81526004018080602001828103825260228152602001806146f96022913960400191505060405180910390fd5b6000601e8560ff1611156137a9576004850360ff16601b14806136f857506004850360ff16601c145b6137335760405162461bcd60e51b81526004018080602001828103825260228152602001806148006022913960400191505060405180910390fd5b600161373e8761393c565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613798573d6000803e3d6000fd5b505050602060405103519050613860565b8460ff16601b14806137be57508460ff16601c145b6137f95760405162461bcd60e51b81526004018080602001828103825260228152602001806148006022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613853573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b0381166138bb576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b61070b828261398d565b60975490565b60985490565b60008383836138e7613a27565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b606081901c6001600160a01b03831681146139fc5760405182906001600160a01b0383169060009060008051602061491f833981519152908290a481836001600160a01b0316826001600160a01b031660008051602061491f83398151915260405160405180910390a4610668565b60405182906001600160a01b0385169060009060008051602061491f833981519152908290a4505050565b4690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613a615760008555613aa7565b82601f10613a7a57805160ff1916838001178555613aa7565b82800160010185558215613aa7579182015b82811115613aa7578251825591602001919060010190613a8c565b50613ab3929150613af7565b5090565b50805460018160011615610100020316600290046000825580601f10613add5750610a69565b601f016020900490600052602060002090810190610a6991905b5b80821115613ab35760008155600101613af8565b803561049981614667565b600082601f830112613b27578081fd5b81356020613b3c613b378361464a565b614627565b8281528181019085830183850287018401881015613b58578586fd5b855b85811015613b7f578135613b6d81614667565b84529284019290840190600101613b5a565b5090979650505050505050565b600082601f830112613b9c578081fd5b81356020613bac613b378361464a565b82815281810190858301855b85811015613b7f57613bcf898684358b0101613c9c565b84529284019290840190600101613bb8565b600082601f830112613bf1578081fd5b81356020613c01613b378361464a565b82815281810190858301604080860288018501891015613c1f578687fd5b865b86811015613c8e5781838b031215613c37578788fd5b81518281018181106001600160401b0382111715613c5157fe5b83528335613c5e81614667565b8152838701356001600160601b0381168114613c7857898afd5b8188015285529385019391810191600101613c21565b509198975050505050505050565b600082601f830112613cac578081fd5b81356001600160401b03811115613cbf57fe5b613cd2601f8201601f1916602001614627565b818152846020838601011115613ce6578283fd5b816020850160208301379081016020019190915292915050565b600060a08284031215613d11578081fd5b613d1b60a0614627565b90508135815260208201356001600160401b0380821115613d3b57600080fd5b613d4785838601613c9c565b60208401526040840135915080821115613d6057600080fd5b613d6c85838601613be1565b60408401526060840135915080821115613d8557600080fd5b613d9185838601613be1565b60608401526080840135915080821115613daa57600080fd5b50613db784828501613b8c565b60808301525092915050565b600060208284031215613dd4578081fd5b813561133a81614667565b60008060408385031215613df1578081fd5b8235613dfc81614667565b91506020830135613e0c81614667565b809150509250929050565b600080600060608486031215613e2b578081fd5b8335613e3681614667565b92506020840135613e4681614667565b929592945050506040919091013590565b60008060008060808587031215613e6c578081fd5b8435613e7781614667565b93506020850135613e8781614667565b92506040850135915060608501356001600160401b03811115613ea8578182fd5b613eb487828801613c9c565b91505092959194509250565b60008060408385031215613ed2578182fd5b8235613edd81614667565b915060208301358015158114613e0c578182fd5b60008060408385031215613f03578182fd5b8235613f0e81614667565b946020939093013593505050565b600060208284031215613f2d578081fd5b81356001600160401b03811115613f42578182fd5b61292784828501613b17565b600060208284031215613f5f578081fd5b81356001600160e01b03198116811461133a578182fd5b600060208284031215613f87578081fd5b81356001600160401b03811115613f9c578182fd5b61292784828501613c9c565b60008060008060008060c08789031215613fc0578384fd5b86356001600160401b0380821115613fd6578586fd5b613fe28a838b01613c9c565b97506020890135915080821115613ff7578586fd5b6140038a838b01613c9c565b96506040890135915080821115614018578586fd5b6140248a838b01613c9c565b95506060890135915080821115614039578384fd5b5061404689828a01613c9c565b93505061405560808801613b0c565b915061406360a08801613b0c565b90509295509295509295565b600080600080600080600060e0888a031215614089578485fd5b87356001600160401b038082111561409f578687fd5b6140ab8b838c01613c9c565b985060208a01359150808211156140c0578687fd5b6140cc8b838c01613c9c565b975060408a01359150808211156140e1578687fd5b6140ed8b838c01613c9c565b965060608a0135915080821115614102578283fd5b5061410f8a828b01613c9c565b94505061411e60808901613b0c565b925061412c60a08901613b0c565b915061413a60c08901613b0c565b905092959891949750929550565b600080600080600080600060e0888a031215614162578081fd5b87356001600160401b0380821115614178578283fd5b6141848b838c01613c9c565b985060208a0135915080821115614199578283fd5b6141a58b838c01613c9c565b975060408a01359150808211156141ba578283fd5b6141c68b838c01613c9c565b965060608a01359150808211156141db578283fd5b6141e78b838c01613c9c565b955060808a01359150808211156141fc578283fd5b506142098a828b01613b17565b93505061412c60a08901613b0c565b6000806040838503121561422a578182fd5b82356001600160401b0381111561423f578283fd5b61424b85828601613d00565b9250506020830135613e0c81614667565b600080600060608486031215614270578081fd5b83356001600160401b03811115614285578182fd5b61429186828701613d00565b93505060208401356142a281614667565b915060408401356142b281614667565b809150509250925092565b6000602082840312156142ce578081fd5b5035919050565b6000806000606084860312156142e9578081fd5b8335925060208401356142a281614667565b6000806040838503121561430d578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561436857815180516001600160a01b031688528301516001600160601b0316838801526040909601959082019060010161432f565b509495945050505050565b60008151808452815b818110156143985760208185018101518683018201520161437c565b818111156143a95782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03841681526060602082018190526000906143f690830185614373565b828103604084015261347e8185614373565b6001600160a01b03929092168252602082015260400190565b60006020825261133a602083018461431c565b901515815260200190565b60006020825261133a6020830184614373565b6020808252601190820152703bb937b7339037b93232b91036b0b5b2b960791b604082015260600190565b6020808252601390820152723737ba1037bbb732b91037b91036b4b73a32b960691b604082015260600190565b6020808252818101527f43726561746f722073686172652073686f756c6420626520706f736974697665604082015260600190565b6020808252601190820152701d1bdad95b9259081a5b98dbdc9c9958dd607a1b604082015260600190565b6020808252600b908201526a1b9bdd08185b1b1bddd95960aa1b604082015260600190565b60208082526019908201527f4163636f756e742073686f756c642062652070726573656e7400000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602e908201527f746f74616c20616d6f756e74206f662063726561746f7273207368617265207360408201526d0686f756c642062652031303030360941b606082015260800190565b90815260200190565b600083825260406020830152612927604083018461431c565b6040518181016001600160401b038111828210171561464257fe5b604052919050565b60006001600160401b0382111561465d57fe5b5060209081020190565b6001600160a01b0381168114610a6957600080fdfe4552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a207472616e7366657220746f20746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75654552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c75654552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e65722c206e6f74206275726e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732314d657461646174613a2055524920736574206f66206e6f6e6578697374656e7420746f6b656e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656eddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564526f79616c747920746f74616c2076616c75652073686f756c64206265203c2031303030304552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564a26469706673582212205c5514330465c7180a2219dfec855ff3fa08b66d2482efc7ed880cfcc8be4a7264736f6c63430007060033", "devdoc": { "kind": "dev", "methods": { @@ -1168,7 +1211,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 25561, + "astId": 26448, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "__gap", "offset": 0, @@ -1176,7 +1219,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 26737, + "astId": 27665, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "_name", "offset": 0, @@ -1184,7 +1227,7 @@ "type": "t_string_storage" }, { - "astId": 26739, + "astId": 27667, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "_symbol", "offset": 0, @@ -1192,7 +1235,7 @@ "type": "t_string_storage" }, { - "astId": 26743, + "astId": 27671, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "_owners", "offset": 0, @@ -1200,7 +1243,7 @@ "type": "t_mapping(t_uint256,t_address)" }, { - "astId": 26747, + "astId": 27675, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "_balances", "offset": 0, @@ -1208,7 +1251,7 @@ "type": "t_mapping(t_address,t_uint256)" }, { - "astId": 26751, + "astId": 27679, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "_tokenApprovals", "offset": 0, @@ -1216,7 +1259,7 @@ "type": "t_mapping(t_uint256,t_address)" }, { - "astId": 26757, + "astId": 27685, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "_operatorApprovals", "offset": 0, @@ -1224,7 +1267,7 @@ "type": "t_mapping(t_address,t_mapping(t_address,t_bool))" }, { - "astId": 26767, + "astId": 27695, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "_burnedTokens", "offset": 0, @@ -1232,7 +1275,7 @@ "type": "t_mapping(t_uint256,t_bool)" }, { - "astId": 27546, + "astId": 28474, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "__gap", "offset": 0, @@ -1240,7 +1283,7 @@ "type": "t_array(t_uint256)43_storage" }, { - "astId": 25804, + "astId": 26691, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "defaultApprovals", "offset": 0, @@ -1248,7 +1291,7 @@ "type": "t_mapping(t_address,t_bool)" }, { - "astId": 25875, + "astId": 26762, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "__gap", "offset": 0, @@ -1256,7 +1299,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 25794, + "astId": 26681, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "__gap", "offset": 0, @@ -1264,7 +1307,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 21696, + "astId": 22478, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "__gap", "offset": 0, @@ -1272,15 +1315,15 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 20712, + "astId": 21496, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "royalties", "offset": 0, "slot": "454", - "type": "t_mapping(t_uint256,t_array(t_struct(Part)18518_storage)dyn_storage)" + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" }, { - "astId": 26571, + "astId": 27499, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "_tokenURIs", "offset": 0, @@ -1288,7 +1331,7 @@ "type": "t_mapping(t_uint256,t_string_storage)" }, { - "astId": 26573, + "astId": 27501, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "_baseURI", "offset": 0, @@ -1296,7 +1339,7 @@ "type": "t_string_storage" }, { - "astId": 26708, + "astId": 27636, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "__gap", "offset": 0, @@ -1304,15 +1347,15 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 25918, + "astId": 26805, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "creators", "offset": 0, "slot": "507", - "type": "t_mapping(t_uint256,t_array(t_struct(Part)18518_storage)dyn_storage)" + "type": "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)" }, { - "astId": 26343, + "astId": 27230, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "__gap", "offset": 0, @@ -1320,7 +1363,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 21537, + "astId": 22321, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "contractURI", "offset": 0, @@ -1328,7 +1371,7 @@ "type": "t_string_storage" }, { - "astId": 21571, + "astId": 22353, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "__gap", "offset": 0, @@ -1336,7 +1379,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 25708, + "astId": 26595, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "__gap", "offset": 0, @@ -1344,7 +1387,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 21577, + "astId": 22359, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "isPrivate", "offset": 0, @@ -1352,7 +1395,7 @@ "type": "t_bool" }, { - "astId": 21581, + "astId": 22363, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "__gap", "offset": 0, @@ -1360,7 +1403,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 21706, + "astId": 22488, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "_minters", "offset": 0, @@ -1368,7 +1411,7 @@ "type": "t_mapping(t_address,t_bool)" }, { - "astId": 21827, + "astId": 22605, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "__gap", "offset": 0, @@ -1387,8 +1430,8 @@ "label": "address payable", "numberOfBytes": "20" }, - "t_array(t_struct(Part)18518_storage)dyn_storage": { - "base": "t_struct(Part)18518_storage", + "t_array(t_struct(Part)19269_storage)dyn_storage": { + "base": "t_struct(Part)19269_storage", "encoding": "dynamic_array", "label": "struct LibPart.Part[]", "numberOfBytes": "32" @@ -1461,12 +1504,12 @@ "numberOfBytes": "32", "value": "t_address" }, - "t_mapping(t_uint256,t_array(t_struct(Part)18518_storage)dyn_storage)": { + "t_mapping(t_uint256,t_array(t_struct(Part)19269_storage)dyn_storage)": { "encoding": "mapping", "key": "t_uint256", "label": "mapping(uint256 => struct LibPart.Part[])", "numberOfBytes": "32", - "value": "t_array(t_struct(Part)18518_storage)dyn_storage" + "value": "t_array(t_struct(Part)19269_storage)dyn_storage" }, "t_mapping(t_uint256,t_bool)": { "encoding": "mapping", @@ -1487,12 +1530,12 @@ "label": "string", "numberOfBytes": "32" }, - "t_struct(Part)18518_storage": { + "t_struct(Part)19269_storage": { "encoding": "inplace", "label": "struct LibPart.Part", "members": [ { - "astId": 18515, + "astId": 19266, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "account", "offset": 0, @@ -1500,7 +1543,7 @@ "type": "t_address_payable" }, { - "astId": 18517, + "astId": 19268, "contract": "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol:ERC721RaribleMinimal", "label": "value", "offset": 20, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Proxy.json b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Proxy.json index 5aebd7baf..1714a75d5 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Proxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "abi": [ { "inputs": [ @@ -146,107 +146,121 @@ "type": "receive" } ], - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", - "transactionIndex": 40, - "gasUsed": "1057484", - "logsBloom": "0x00000000000000000000800000000000400000000000000010800000000000000000000000000000000000000000000000000040000400001000000000000100000000000000000000200800080002080001000000000000000000000000000000000000020000000000001000000800000000800000020000100000000001500000000000000400000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000080000000000000400000000000000000420000000000000000020000000000000000000000000000000000000000001000100", - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec", - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", + "contractAddress": null, + "transactionIndex": 92, + "gasUsed": "1100227", + "logsBloom": "0x00000400000000000000000000000000400000000400800010800000000000000000000000000080000000000000000000000000000440000000004000000000000000000000000000000000000002000001000000000000004000000000200000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000002800000000000000000000002000000001040100004000000000000000000000000000100000020000200000000000001000000000000000400000000000000000020000000000000000060000000000000000000000000000000000000000001000000", + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd", + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", "logs": [ { - "transactionIndex": 40, - "blockNumber": 4793877, - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000002fce8435f0455edc702199741411dbcd1b7606ca" + "0x0000000000000000000000008c3b16c348ed4f0fb991f2be6ac3bfa16836a5e5" ], "data": "0x", - "logIndex": 62, - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec" + "logIndex": 204, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" }, { - "transactionIndex": 40, - "blockNumber": 4793877, - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 63, - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec" + "logIndex": 205, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" }, { - "transactionIndex": 40, - "blockNumber": 4793877, - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a094e566b61b3c2d88acf7cc15e3dd0fa83f32af" + "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 64, - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec" + "logIndex": 206, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" }, { - "transactionIndex": 40, - "blockNumber": 4793877, - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a2eebb837aef89369ad117568d75348e6174520e" + "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 65, - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec" + "logIndex": 207, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" }, { - "transactionIndex": 40, - "blockNumber": 4793877, - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 208, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + }, + { + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "topics": [ "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" ], - "data": "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", - "logIndex": 66, - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec" + "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", + "logIndex": 209, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" }, { - "transactionIndex": 40, - "blockNumber": 4793877, - "transactionHash": "0xad0f5a491182a8169b4157f6433d004f35a2104e1596b338c29efd5c0127e0b8", - "address": "0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494", + "transactionIndex": 92, + "blockNumber": 5783753, + "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1f689646861870d44b33dbbb413fa7d06a2b52f", - "logIndex": 67, - "blockHash": "0x78018c23024cd0af1e18843525fd1350110f977493ae35497d29265b772410ec" + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 210, + "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" } ], - "blockNumber": 4793877, - "cumulativeGasUsed": "7178498", + "blockNumber": 5783753, + "cumulativeGasUsed": "10415903", "status": 1, "byzantium": true }, "args": [ - "0x2FCE8435F0455eDc702199741411dbcD1B7606cA", - "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", - "0x3db397c600000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000a094e566b61b3c2d88acf7cc15e3dd0fa83f32af000000000000000000000000a2eebb837aef89369ad117568d75348e6174520e000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0x8C3b16c348eD4f0fB991f2Be6AC3bFA16836A5E5", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", diff --git a/projects/hardhat-deploy/deployments/sepolia/ExchangeV2.json b/projects/hardhat-deploy/deployments/sepolia/ExchangeV2.json index e4c3e9b06..73e2c0158 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ExchangeV2.json +++ b/projects/hardhat-deploy/deployments/sepolia/ExchangeV2.json @@ -1,5 +1,5 @@ { - "address": "0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", "abi": [ { "anonymous": false, @@ -315,6 +315,64 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "assetTypes", + "type": "bytes4[]" + }, + { + "internalType": "address[]", + "name": "proxies", + "type": "address[]" + }, + { + "internalType": "bytes4", + "name": "assetMatcherType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "assetMatcher", + "type": "address" + } + ], + "name": "__ExchangeV2_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -1042,73 +1100,147 @@ "type": "constructor" } ], - "transactionHash": "0xed27d08ff4ca90af3a643b4deb553cf1f43660058a71e84eb6f2c3be096330fe", + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77", - "transactionIndex": 34, - "gasUsed": "906062", - "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080001000000000000000000000000000000000000020000000000000000000800000000800000000000000000200000500000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000020000200000000000000000000020000000000000000000080000000000000400000000000000000020000000000000000000000000000080000000000000000000000000080000000000", - "blockHash": "0x1aad7760e0defaf4768e0e43557b8e8968d3f24f2124e8997576062a5d17b780", - "transactionHash": "0xed27d08ff4ca90af3a643b4deb553cf1f43660058a71e84eb6f2c3be096330fe", + "contractAddress": null, + "transactionIndex": 21, + "gasUsed": "1026836", + "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000010000000000000000000000400008000000000000000000800000000000000010000000020000010000000000000040004000000000000000000200020000000800000008004002008000000000000000000000004004000000000001000000000000000000000000000000000000000000008000200000000000000000000000000000000000040000000000000000000000000000000000a0000008000000000001000000000000000400000002000000000020000000000000000000000000000000000000000000000000000000300000000000", + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c", + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", "logs": [ { - "transactionIndex": 34, - "blockNumber": 4793867, - "transactionHash": "0xed27d08ff4ca90af3a643b4deb553cf1f43660058a71e84eb6f2c3be096330fe", - "address": "0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77", + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000000fe65b68eb627c21eaf3cfe8183c4f946f3d48bd" + "0x0000000000000000000000002c4d12cb96b25727d6869b9d4750d70e3a6a8553" ], "data": "0x", - "logIndex": 50, - "blockHash": "0x1aad7760e0defaf4768e0e43557b8e8968d3f24f2124e8997576062a5d17b780" + "logIndex": 37, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" }, { - "transactionIndex": 34, - "blockNumber": 4793867, - "transactionHash": "0xed27d08ff4ca90af3a643b4deb553cf1f43660058a71e84eb6f2c3be096330fe", - "address": "0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77", + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 38, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + }, + { + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0xd8f960c100000000000000000000000000000000000000000000000000000000" + ], + "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", + "logIndex": 39, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + }, + { + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", + "logIndex": 40, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + }, + { + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "topics": [ + "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", + "0xf63c282500000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", + "logIndex": 41, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + }, + { + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 51, - "blockHash": "0x1aad7760e0defaf4768e0e43557b8e8968d3f24f2124e8997576062a5d17b780" + "logIndex": 42, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" }, { - "transactionIndex": 34, - "blockNumber": 4793867, - "transactionHash": "0xed27d08ff4ca90af3a643b4deb553cf1f43660058a71e84eb6f2c3be096330fe", - "address": "0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77", + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1f689646861870d44b33dbbb413fa7d06a2b52f", - "logIndex": 52, - "blockHash": "0x1aad7760e0defaf4768e0e43557b8e8968d3f24f2124e8997576062a5d17b780" + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 43, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" } ], - "blockNumber": 4793867, - "cumulativeGasUsed": "7109459", + "blockNumber": 5783743, + "cumulativeGasUsed": "2837740", "status": 1, "byzantium": true }, "args": [ - "0x0fE65B68Eb627c21EAF3cfe8183C4F946F3d48BD", - "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", - "0x1372a625000000000000000000000000a094e566b61b3c2d88acf7cc15e3dd0fa83f32af000000000000000000000000b8863180cac2d0ab665e5968c0de25298a1d8cee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f4cc63d7f2bc894078d41f284453062842afa46" + "0x2C4D12cb96B25727d6869B9D4750d70E3A6a8553", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" ], - "numDeployments": 3, - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", - "implementation": "0xe9f4A9Cb8737e2AD2f82d65d085Ef7faB3f6241D", + "execute": { + "methodName": "__ExchangeV2_init_proxy", + "args": [ + "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", + 0, + "0x0000000000000000000000000000000000000000", + "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893", + [ + "0xd8f960c1", + "0x1cdfaa40" + ], + [ + "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2" + ], + "0xf63c2825", + "0xc4F5FCD96e3b37A31f871F0968206F47294a4471" + ] + }, + "implementation": "0x2C4D12cb96B25727d6869B9D4750d70E3A6a8553", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Implementation.json b/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Implementation.json index d3d43c4d0..69f75f565 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Implementation.json +++ b/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0xe9f4A9Cb8737e2AD2f82d65d085Ef7faB3f6241D", + "address": "0x2C4D12cb96B25727d6869B9D4750d70E3A6a8553", "abi": [ { "anonymous": false, @@ -192,6 +192,64 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_transferProxy", + "type": "address" + }, + { + "internalType": "address", + "name": "_erc20TransferProxy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newProtocolFee", + "type": "uint256" + }, + { + "internalType": "address", + "name": "newDefaultFeeReceiver", + "type": "address" + }, + { + "internalType": "contract IRoyaltiesProvider", + "name": "newRoyaltiesProvider", + "type": "address" + }, + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + }, + { + "internalType": "bytes4[]", + "name": "assetTypes", + "type": "bytes4[]" + }, + { + "internalType": "address[]", + "name": "proxies", + "type": "address[]" + }, + { + "internalType": "bytes4", + "name": "assetMatcherType", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "assetMatcher", + "type": "address" + } + ], + "name": "__ExchangeV2_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -898,28 +956,28 @@ "type": "function" } ], - "transactionHash": "0x4bdfe15a7318f7a0c3d8354aad43c788cb0c91e3482f40651c6c8b4ef13b433a", + "transactionHash": "0x31ad297aafc58c5fcc466ce05b9c3be583fa67665702f8ed2bbea00552f5901e", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0xe9f4A9Cb8737e2AD2f82d65d085Ef7faB3f6241D", - "transactionIndex": 1, - "gasUsed": "4637186", + "contractAddress": null, + "transactionIndex": 12, + "gasUsed": "4900394", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x474d65e49d452ab1e594d4f37276657536d312bcf00e2f0e7a409d90b7064c1d", - "transactionHash": "0x4bdfe15a7318f7a0c3d8354aad43c788cb0c91e3482f40651c6c8b4ef13b433a", + "blockHash": "0x63e75ffd5257cd9e9ccfe001c7c86738b40fbc82ba61b0e9ff6fbdb6bdffcefc", + "transactionHash": "0x31ad297aafc58c5fcc466ce05b9c3be583fa67665702f8ed2bbea00552f5901e", "logs": [], - "blockNumber": 5556741, - "cumulativeGasUsed": "4658186", + "blockNumber": 5783742, + "cumulativeGasUsed": "6493382", "status": 1, "byzantium": true }, "args": [], - "numDeployments": 3, - "solcInputHash": "7238d10cc6d9b157a0ebb0f70bc36233", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"BuyerFeeAmountChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"Cancel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"}],\"name\":\"FeeReceiverChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leftHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"rightHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLeftFill\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRightFill\",\"type\":\"uint256\"}],\"name\":\"Match\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"MatcherChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"SellerFeeAmountChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_erc20TransferProxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newDefaultFeeReceiver\",\"type\":\"address\"},{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesProvider\",\"type\":\"address\"}],\"name\":\"__ExchangeV2_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"bidMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"bidPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"bidDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"bidData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bidSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.AcceptBid\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directAcceptBid\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sellOrderMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"sellOrderDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"buyOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.Purchase\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"fills\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderLeft\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureLeft\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderRight\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureRight\",\"type\":\"bytes\"}],\"name\":\"matchOrders\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"sellerAmount\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"royaltiesRegistry\",\"outputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setAllProtocolFeeData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"setAssetMatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeBuyerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"setPrtocolFeeReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeSellerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesRegistry\",\"type\":\"address\"}],\"name\":\"setRoyaltiesRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"setTransferProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\",\"params\":{\"direct\":\"struct with parameters for accept bid operation\"}},\"directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":\"ExchangeV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3a89b0a6ff66280e8e48f9f2c862d5c0e8ab23ee306ae5b204cd588931661a93\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n}\\n\",\"keccak256\":\"0xa9d02b9e22ffb9d25f412979951822d56b05d857de1f47ce82ad7b4a8d4601f6\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x5e982ad688493d9c729757c2ebd98efecd0bf3b33992f7342edf6c349874b86c\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b506152e1806100206000396000f3fe6080604052600436106101095760003560e01c8063b0e21e8a11610095578063d6ca6ab711610064578063d6ca6ab71461029c578063e2864fe3146102bc578063e99a3f80146102dc578063eae3ad6f146102ef578063f2fde38b1461030f57610109565b8063b0e21e8a14610218578063b39deb461461023c578063b74c8e9a1461025c578063bc158c2d1461027c57610109565b80633be89922116100dc5780633be899221461019957806367d49a3b146101b95780636d8f0694146101cc578063715018a6146101ee5780638da5cb5b1461020357610109565b80630d5f7d351461010e5780631372a6251461012357806320158c441461014357806330c642f114610179575b600080fd5b61012161011c366004614876565b61032f565b005b34801561012f57600080fd5b5061012161013e366004614713565b61064c565b34801561014f57600080fd5b5061016361015e36600461480a565b610720565b6040516101709190614c73565b60405180910390f35b34801561018557600080fd5b5061012161019436600461483e565b610733565b3480156101a557600080fd5b506101216101b43660046144be565b610803565b6101216101c7366004614876565b610888565b3480156101d857600080fd5b506101e1610b68565b6040516101709190614ba7565b3480156101fa57600080fd5b50610121610b78565b34801561020f57600080fd5b506101e1610c24565b34801561022457600080fd5b5061022d610c33565b60405161017093929190614c4a565b34801561024857600080fd5b5061012161025736600461483e565b610c5e565b34801561026857600080fd5b5061012161027736600461477a565b610d22565b34801561028857600080fd5b506101216102973660046144be565b610da4565b3480156102a857600080fd5b506101216102b7366004614b44565b610e71565b3480156102c857600080fd5b506101216102d7366004614a6b565b610f4b565b6101216102ea366004614a9d565b61100c565b3480156102fb57600080fd5b5061012161030a366004614b44565b611022565b34801561031b57600080fd5b5061012161032a3660046144be565b6110f9565b600061034961034460c0840160a085016144be565b6111fc565b6040805161012081019091529091506000908061036960208601866144be565b6001600160a01b03168152602001604051806040016040528060405180604001604052808860400160208101906103a09190614822565b6001600160e01b03191681526020016103bc60608a018a615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a08301520161045f61014086016101208701614822565b6001600160e01b031916815260200161047c610140860186615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815180830183528781526101808901356020828101919091528201528082018390528151608081018352949550919391925060608084019291829182820191829161051091908c01908c01614822565b6001600160e01b031916815260200161052c60608b018b615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a0890135602092830152918352820181905260408201819052606082015260800161059b61014087016101208801614822565b6001600160e01b03191681526020016105b86101c0870187615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250905061063c82610602610160870187615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061126292505050565b6106468282611279565b50505050565b600054610100900460ff168061066557506106656114cb565b80610673575060005460ff16155b6106ae5760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff161580156106d9576000805460ff1961ff0019909116610100171660011790555b6106e16114dc565b6106e961157e565b6106f38686611677565b6106fe848484611721565b6107066117e1565b8015610718576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b61073b6118b1565b6001600160a01b031661074c610c24565b6001600160a01b031614610795576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593906107f7908490614ba7565b60405180910390a25050565b61080b6118b1565b6001600160a01b031661081c610c24565b6001600160a01b031614610865576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b600061089d61034460c0840160a085016144be565b604080516101208101909152909150600090806108bd60208601866144be565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b03168152602001604051806040016040528060405180604001604052808860400160208101906109229190614822565b6001600160e01b031916815260200161093e60608a018a615089565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e0850135604082015261010085013560608201526080016109b961014086016101208701614822565b6001600160e01b03191681526020016109d6610140860186615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815160808101835294955091939192506020830191908190818101908190610a489060608c01908c01614822565b6001600160e01b0319168152602001610a6460608b018b615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c001610af761014087016101208801614822565b6001600160e01b0319168152602001610b146101c0870187615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610b5e82610602610160870187615089565b6106468183611279565b610162546001600160a01b031681565b610b806118b1565b6001600160a01b0316610b91610c24565b6001600160a01b031614610bda576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b610c666118b1565b6001600160a01b0316610c77610c24565b6001600160a01b031614610cc0576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f906107f7908490614ba7565b610d2a6118b1565b6001600160a01b0316610d3b610c24565b6001600160a01b031614610d84576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610d8d83610da4565b610d9682610e71565b610d9f81611022565b505050565b610dac6118b1565b6001600160a01b0316610dbd610c24565b6001600160a01b031614610e06576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd0391610e46916001600160a01b03909116908490614bbb565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b610e796118b1565b6001600160a01b0316610e8a610c24565b6001600160a01b031614610ed3576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e91610f1891600160a01b90910465ffffffffffff16908490615070565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316610f5e6118b1565b6001600160a01b031614610f8d5760405162461bcd60e51b8152600401610f8490614fe0565b60405180910390fd5b6080810151610fae5760405162461bcd60e51b8152600401610f8490614d72565b6000610fb9826118b5565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a90611000908390614c73565b60405180910390a15050565b61101884848484611a3d565b6106468483611279565b61102a6118b1565b6001600160a01b031661103b610c24565b6001600160a01b031614611084576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916110c991600160d01b90910465ffffffffffff16908490615070565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b6111016118b1565b6001600160a01b0316611112610c24565b6001600160a01b03161461115b576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6001600160a01b0381166111a05760405162461bcd60e51b81526004018080602001828103825260268152602001806151866026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b6112046140b3565b61120c6140b3565b6001600160a01b038316611229576355575f5d60e11b815261125a565b6322ba176160e21b8152604051611244908490602001614ba7565b60408051601f1981840301815291905260208201525b90505b919050565b61126b82611b09565b6112758282611bd3565b5050565b6000806112868484611e82565b9150915060008060006112998787611f1b565b9250925092506000806113f26040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506113ed8a600001518a60000151611fca565b61209c565b885191935091506001600160e01b0319166355575f5d60e11b14156114715785516001600160e01b0319166355575f5d60e11b141561143057600080fd5b813410156114505760405162461bcd60e51b8152600401610f8490614fb8565b8134111561146c5761146c6114653484612213565b3390612270565b6114c0565b85516001600160e01b0319166355575f5d60e11b14156114c057803410156114ab5760405162461bcd60e51b8152600401610f8490614fb8565b803411156114c0576114c06114653483612213565b505050505050505050565b60006114d630612308565b15905090565b600054610100900460ff16806114f557506114f56114cb565b80611503575060005460ff16155b61153e5760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff16158015611569576000805460ff1961ff0019909116610100171660011790555b801561157b576000805461ff00191690555b50565b600054610100900460ff168061159757506115976114cb565b806115a5575060005460ff16155b6115e05760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff1615801561160b576000805460ff1961ff0019909116610100171660011790555b60006116156118b1565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561157b576000805461ff001916905550565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff168061173a575061173a6114cb565b80611748575060005460ff16155b6117835760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff161580156117ae576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610646576000805461ff001916905550505050565b600054610100900460ff16806117fa57506117fa6114cb565b80611808575060005460ff16155b6118435760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff1615801561186e576000805460ff1961ff0019909116610100171660011790555b6115696040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b81525061230e565b3390565b60e08101516000906001600160e01b031916632611a13360e11b14806118e9575060e08201516001600160e01b0319908116145b1561195e5781516020830151516118ff906123ce565b60608401515161190e906123ce565b846080015160405160200180856001600160a01b0316815260200184815260200183815260200182815260200194505050505060405160208183030381529060405280519060200120905061125d565b815160208301515161196f906123ce565b60608401515161197e906123ce565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156119ea5781810151838201526020016119d2565b50505050905090810190601f168015611a175780820380516001836020036101000a031916815260200191505b50965050505050505060405160208183030381529060405280519060200120905061125d565b611a478484611262565b611a518282611262565b60408401516001600160a01b031615611aad5781516001600160a01b031615611aad5783604001516001600160a01b031682600001516001600160a01b031614611aad5760405162461bcd60e51b8152600401610f8490614f75565b60408201516001600160a01b0316156106465783516001600160a01b0316156106465783600001516001600160a01b031682604001516001600160a01b0316146106465760405162461bcd60e51b8152600401610f8490614de4565b60a08101511580611b1d5750428160a00151105b611b6e576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c08101511580611b825750428160c00151115b61157b576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b6080820151611c585781516001600160a01b031615611c535781516001600160a01b0316611bff6118b1565b6001600160a01b031614611c53576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b611275565b81516001600160a01b0316611c6b6118b1565b6001600160a01b031614611275576000611c8483612438565b9050611c9c83600001516001600160a01b0316612308565b15611dd8578251630b135d3f60e11b906001600160a01b0316631626ba7e611cc384612528565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611d16578181015183820152602001611cfe565b50505050905090810190601f168015611d435780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611d6157600080fd5b505afa158015611d75573d6000803e3d6000fd5b505050506040513d6020811015611d8b57600080fd5b50516001600160e01b03191614611dd35760405162461bcd60e51b815260040180806020018281038252602b8152602001806151f0602b913960400191505060405180910390fd5b610d9f565b82516001600160a01b0316611df683611df084612528565b90612574565b6001600160a01b031614611e3b5760405162461bcd60e51b81526004018080602001828103825260228152602001806151ce6022913960400191505060405180910390fd5b82516001600160a01b0316610d9f576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b611e8a6140b3565b611e926140b3565b602084015151606084015151611ea891906125f4565b80519092506001600160e01b031916611ed35760405162461bcd60e51b8152600401610f8490614f49565b606084015151602084015151611ee991906125f4565b80519091506001600160e01b031916611f145760405162461bcd60e51b8152600401610f8490614f49565b9250929050565b611f236140cb565b611f2b6140cb565b611f336140ee565b6000611f3e866118b5565b90506000611f4b866118b5565b90506000611f576118b1565b88519091506001600160a01b0316611f76576001600160a01b03811688525b86516001600160a01b0316611f92576001600160a01b03811687525b611f9b88612634565b9550611fa687612634565b9450611fbe888885858a604001518a6040015161272d565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b1415611fed57506001612096565b6001600160e01b031982166355575f5d60e11b141561200e57506002612096565b6001600160e01b031983166322ba176160e21b141561202f57506001612096565b6001600160e01b031982166322ba176160e21b141561205057506002612096565b6001600160e01b0319831663025ceed960e61b141561207157506001612096565b6001600160e01b0319821663025ceed960e61b141561209257506002612096565b5060005b92915050565b825160209081015183519091015160018360028111156120b857fe5b141561213a5760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b909104169181019190915261210a90869086906128e8565b9150612135846000015160000151856000015160200151866080015188602001518860600151612b62565b61220b565b600283600281111561214857fe5b14156121c55760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b909104169181019190915261219a90859087906128e8565b9050612135856000015160000151866000015160200151876080015187602001518960600151612b62565b8451805160209182015160808801519287015160608901516121e8949190612b62565b83518051602091820151608087015192880151606088015161220b949190612b62565b935093915050565b60008282111561226a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146122bb576040519150601f19603f3d011682016040523d82523d6000602084013e6122c0565b606091505b5050905080610d9f576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff168061232757506123276114cb565b80612335575060005460ff16155b6123705760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff1615801561239b576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca558015610d9f576000805461ff0019169055505050565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d826000015161246d8460200151612ce6565b846040015161247f8660600151612ce6565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b6000612532612d56565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b600081516041146125cc576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6125ea86828585612d96565b9695505050505050565b6125fc6140b3565b60006126088484612fec565b80519091506001600160e01b03191661262d576126258385612fec565b915050612096565b9050612096565b61263c6140cb565b60e08201516001600160e01b031916632611a13360e11b14156126885760008261010001518060200190518101906126749190614933565b805183526020908101519083015250612714565b60e08201516001600160e01b0319166323d235ef60e01b14156126e05760008261010001518060200190518101906126c091906149bf565b805183526020808201519084015260409081015115159083015250612714565b60e08201516001600160e01b031990811614156126fc57612714565b60405162461bcd60e51b8152600401610f8490614edb565b80515161125d57815161272690613208565b8152919050565b6127356140ee565b60006127458860800151876132a3565b905060006127578860800151876132a3565b905060006127698a8a85858a8a6132c8565b9050896020015160200151600014158061278a575060608901516020015115155b156127ad5780516127ad5760405162461bcd60e51b8152600401610f8490614e54565b60608a0151602001511515806127c957506020808a0151015115155b156127f25760008160200151116127f25760405162461bcd60e51b8152600401610f8490614e54565b60808a01511561284557851561282457805161280f908490613361565b600089815261012f6020526040902055612845565b6020810151612834908490613361565b600089815261012f60205260409020555b60808901511561289857841561287a576020810151612865908390613361565b600088815261012f6020526040902055612898565b8051612887908390613361565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c450926128d3928c928c929190614c7c565b60405180910390a19998505050505050505050565b60006129018460000151602001518386604001516133c2565b9050600061292b828660000151602001518760800151868960000151600001518a60600151613464565b8551805186515160208089015193015160808a015160608b01519596506129599593949293879291906134c1565b9050846040015151600114801561297557508360400151516001145b80156129ca5750846040015160008151811061298d57fe5b6020026020010151600001516001600160a01b031684604001516000815181106129b357fe5b6020026020010151600001516001600160a01b0316145b15612ae057604080516001808252818301909252600091816020015b6129ee614108565b8152602001906001900390816129e65790505090508460400151600081518110612a1457fe5b60200260200101516000015181600081518110612a2d57fe5b60209081029190910101516001600160a01b03909116905260408601518051600090612a5557fe5b6020026020010151602001518560400151600081518110612a7257fe5b6020026020010151602001510181600081518110612a8c57fe5b6020026020010151602001906001600160601b031690816001600160601b031681525050612ad686600001516000015183886000015160200151848a608001518b606001516135c6565b509150612b399050565b612b0a85600001516000015182876000015160200151886040015189608001518a606001516135c6565b50855180516020909101516040870151608089015160608a0151949550612b359486939291906135c6565b5090505b612b5a85600001516000015182876080015187602001518960600151612b62565b509392505050565b6000825111612b835760405162461bcd60e51b8152600401610f8490614da0565b600084815b6001855103811015612c52576000612bc9868381518110612ba557fe5b6020026020010151602001516001600160601b03168961367b90919063ffffffff16565b9050612bfe868381518110612bda57fe5b6020026020010151602001516001600160601b03168561336190919063ffffffff16565b93508015612c4957612c108382612213565b9250612c4960405180604001604052808b81526020018381525088888581518110612c3757fe5b60200260200101516000015188613693565b50600101612b88565b50600084600186510381518110612c6557fe5b60200260200101519050612c8f81602001516001600160601b03168461336190919063ffffffff16565b92508261271014612cb25760405162461bcd60e51b8152600401610f8490614f12565b8115612cdc57612cdc60405180604001604052808a81526020018481525087836000015187613693565b5050505050505050565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b08612d1683600001516123ce565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b6000612d917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612d84613a9b565b612d8c613aa1565b613aa7565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612df75760405162461bcd60e51b81526004018080602001828103825260228152602001806151ac6022913960400191505060405180910390fd5b6000601e8560ff161115612ed1576004850360ff16601b1480612e2057506004850360ff16601c145b612e5b5760405162461bcd60e51b81526004018080602001828103825260228152602001806152496022913960400191505060405180910390fd5b6001612e6687613b09565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612ec0573d6000803e3d6000fd5b505050602060405103519050612f88565b8460ff16601b1480612ee657508460ff16601c145b612f215760405162461bcd60e51b81526004018080602001828103825260228152602001806152496022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612f7b573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116612fe3576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b612ff46140b3565b825182516001600160e01b031982166355575f5d60e11b141561305f576001600160e01b031981166355575f5d60e11b1415613034578492505050612096565b5050604080518082018252600080825282516020818101909452908152918101919091529050612096565b6001600160e01b031982166322ba176160e21b14156130a4576001600160e01b031981166322ba176160e21b14156130345761309b8585613b5a565b92505050612096565b6001600160e01b031982166339d690a360e11b14156130e0576001600160e01b031981166339d690a360e11b14156130345761309b8585613b5a565b6001600160e01b0319821663025ceed960e61b141561311c576001600160e01b0319811663025ceed960e61b14156130345761309b8585613b5a565b6001600160e01b031982166000908152606560205260409020546001600160a01b031680156131d1576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb0906131739089908990600401615005565b60006040518083038186803b15801561318b57600080fd5b505afa15801561319f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131c791908101906148a8565b9350505050612096565b6001600160e01b031983811690831614156131f0576131c78686613b5a565b60405162461bcd60e51b8152600401610f8490614d04565b60408051600180825281830190925260609160009190816020015b61322b614108565b815260200190600190039081613223579050509050828160008151811061324e57fe5b6020026020010151600001906001600160a01b031690816001600160a01b0316815250506127108160008151811061328257fe5b6020908102919091018101516001600160601b039092169101529050919050565b6000826132b257506000612096565b50600090815261012f6020526040902054919050565b6132d06140ee565b6000806132de898887613bb7565b915091506000806132f08a8988613bb7565b915091508381118061330a5750838114801561330a575083155b156133365761332b84848c60200151602001518d6060015160200151613c30565b9450505050506125ea565b6133528b60200151602001518c60600151602001518484613cb5565b9b9a5050505050505050505050565b6000828201838110156133bb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b602082015160009065ffffffffffff16815b835181101561344f576127108482815181106133ec57fe5b6020026020010151602001516001600160601b0316111561341f5760405162461bcd60e51b8152600401610f8490614eac565b83818151811061342b57fe5b6020026020010151602001516001600160601b0316820191508060010190506133d4565b50612fe361345d868361367b565b8690613361565b60008060006134868989886040015189602001510165ffffffffffff16613d3b565b909250905080156134b5576134b560405180604001604052808781526020018381525088886000015187613693565b50979650505050505050565b6000806134cd88613d5d565b9050805160011480156134e1575086516001145b801561352e5750866000815181106134f557fe5b6020026020010151600001516001600160a01b03168160008151811061351757fe5b6020026020010151600001516001600160a01b0316145b1561357f576113888160008151811061354357fe5b6020026020010151602001516001600160601b031611156135765760405162461bcd60e51b8152600401610f8490614d3b565b859150506135bb565b6000806135908b8989868a8a6135c6565b915091506113888111156135b65760405162461bcd60e51b8152600401610f8490614d3b565b509150505b979650505050505050565b846000805b855181101561366f576136078682815181106135e357fe5b6020026020010151602001516001600160601b03168361336190919063ffffffff16565b91506000613636848989858151811061361c57fe5b6020026020010151602001516001600160601b0316613d3b565b909450905080156136665761366660405180604001604052808c81526020018381525087898581518110612c3757fe5b506001016135cb565b50965096945050505050565b60006133bb61271061368d8585613ed2565b90613f2b565b8351516001600160e01b0319166339d690a360e11b14156137d9576000808560000151602001518060200190518101906136cd91906146e6565b9150915085602001516001146136f55760405162461bcd60e51b8152600401610f8490614e28565b6001600160a01b03851630141561376d57604051632142170760e11b81526001600160a01b038316906342842e0e9061373690309088908690600401614bd5565b600060405180830381600087803b15801561375057600080fd5b505af1158015613764573d6000803e3d6000fd5b505050506137d2565b604051637b84dc8360e11b81526001600160a01b0384169063f709b9069061379f908590899089908790600401614cda565b600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050505b5050610646565b8351516001600160e01b0319166322ba176160e21b141561393757600084600001516020015180602001905181019061381291906144da565b90506001600160a01b0384163014156138c957602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb91613856918791600401614c31565b602060405180830381600087803b15801561387057600080fd5b505af1158015613884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a891906147f0565b6138c45760405162461bcd60e51b8152600401610f8490614e7d565b613931565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c3916138fe91859189918991600401614cda565b600060405180830381600087803b15801561391857600080fd5b505af115801561392c573d6000803e3d6000fd5b505050505b50610646565b8351516001600160e01b03191663025ceed960e61b14156139f45760008085600001516020015180602001905181019061397191906146e6565b90925090506001600160a01b0385163014156139bc576020860151604051637921219560e11b81526001600160a01b0384169163f242432a9161373691309189918791600401614bf9565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee99161379f9186918a918a91889190600401614c97565b8351516001600160e01b0319166355575f5d60e11b1415613a3d576001600160a01b0382163014613a38576020840151613a38906001600160a01b03841690612270565b610646565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf190613a6d9087908790879060040161502a565b600060405180830381600087803b158015613a8757600080fd5b505af1158015612cdc573d6000803e3d6000fd5b60c95490565b60ca5490565b6000838383613ab4613f92565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b613b626140b3565b60208084015180519082012083820151805192019190912080821415613b8c578492505050612096565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b6000808215613bf6576020808601510151613bd29085612213565b9150613bef85606001516020015186602001516020015184613f96565b905061220b565b606085015160200151613c099085612213565b9050613c2685602001516020015186606001516020015183613f96565b9150935093915050565b613c386140ee565b6000613c45858585613f96565b905085811115613c9c576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b613cbd6140ee565b6000613cca838787613f96565b905083811115613d21576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b600080613d5185613d4c868661367b565b613ffc565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480613d91575081516001600160e01b0319166339d690a360e11b145b15613e47576000808360200151806020019051810190613db191906146e6565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a90613de89085908590600401614c31565b600060405180830381600087803b158015613e0257600080fd5b505af1158015613e16573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e3e91908101906147be565b9250505061125d565b81516001600160e01b03191662737ea960e61b1415613e885760008260200151806020019051810190613e7a91906144f6565b60800151925061125d915050565b81516001600160e01b03191663d8f960c160e01b1415613eca5760008260200151806020019051810190613ebc91906145f3565b60600151925061125d915050565b506060919050565b600082613ee157506000612096565b82820282848281613eee57fe5b04146133bb5760405162461bcd60e51b815260040180806020018281038252602181526020018061526b6021913960400191505060405180910390fd5b6000808211613f81576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381613f8a57fe5b049392505050565b4690565b6000613fa3848484614024565b15613fe6576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b613ff48361368d8685613ed2565b949350505050565b6000808284111561401b576140118484612213565b9150829050611f14565b50600093915050565b60008261406b576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b811580614076575083155b15614083575060006133bb565b6000838061408d57fe5b858409905061409c8584613ed2565b6140a8826103e8613ed2565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b803561125d8161515a565b600082601f83011261413a578081fd5b8151602061414f61414a836150f0565b6150cd565b82815281810190858301855b8581101561418457614172898684518b01016142b3565b8452928401929084019060010161415b565b5090979650505050505050565b600082601f8301126141a1578081fd5b815160206141b161414a836150f0565b828152818101908583016040808602880185018910156141cf578687fd5b865b8681101561423e5781838b0312156141e7578788fd5b81518281018181106001600160401b038211171561420157fe5b8352835161420e8161515a565b8152838701516001600160601b038116811461422857898afd5b81880152855293850193918101916001016141d1565b509198975050505050505050565b8051801515811461125d57600080fd5b803561125d8161516f565b600082601f830112614277578081fd5b813561428561414a8261510d565b818152846020838601011115614299578283fd5b816020850160208301379081016020019190915292915050565b600082601f8301126142c3578081fd5b81516142d161414a8261510d565b8181528460208386010111156142e5578283fd5b613ff482602083016020870161512e565b60006101e08284031215614308578081fd5b50919050565b60006040808385031215614320578182fd5b80518181016001600160401b03828210818311171561433b57fe5b81845282945085358181111561435057600080fd5b860180880385131561436157600080fd5b60808401838110838211171561437357fe5b9094528335936143828561516f565b9382526020840135938185111561439857600080fd5b6143a488868301614267565b60608501525050815260209384013593019290925292915050565b60006101208083850312156143d2578182fd5b6143db816150cd565b9150506143e78261411f565b815260208201356001600160401b038082111561440357600080fd5b61440f8583860161430e565b60208401526144206040850161411f565b6040840152606084013591508082111561443957600080fd5b6144458583860161430e565b60608401526080840135608084015260a084013560a084015260c084013560c084015261447460e0850161425c565b60e08401526101009150818401358181111561448f57600080fd5b61449b86828701614267565b8385015250505092915050565b803565ffffffffffff8116811461125d57600080fd5b6000602082840312156144cf578081fd5b81356133bb8161515a565b6000602082840312156144eb578081fd5b81516133bb8161515a565b60008060408385031215614508578081fd5b82516145138161515a565b60208401519092506001600160401b038082111561452f578283fd5b9084019060c08287031215614542578283fd5b61454c60c06150cd565b82518152602083015182811115614561578485fd5b61456d888286016142b3565b6020830152506040830151604082015260608301518281111561458e578485fd5b61459a88828601614191565b6060830152506080830151828111156145b1578485fd5b6145bd88828601614191565b60808301525060a0830151828111156145d4578485fd5b6145e08882860161412a565b60a0830152508093505050509250929050565b60008060408385031215614605578182fd5b82516146108161515a565b60208401519092506001600160401b038082111561462c578283fd5b9084019060a0828703121561463f578283fd5b61464960a06150cd565b8251815260208301518281111561465e578485fd5b61466a888286016142b3565b602083015250604083015182811115614681578485fd5b61468d88828601614191565b6040830152506060830151828111156146a4578485fd5b6146b088828601614191565b6060830152506080830151828111156146c7578485fd5b6146d38882860161412a565b6080830152508093505050509250929050565b600080604083850312156146f8578182fd5b82516147038161515a565b6020939093015192949293505050565b600080600080600060a0868803121561472a578081fd5b85356147358161515a565b945060208601356147458161515a565b935060408601359250606086013561475c8161515a565b9150608086013561476c8161515a565b809150509295509295909350565b60008060006060848603121561478e578081fd5b83356147998161515a565b92506147a7602085016144a8565b91506147b5604085016144a8565b90509250925092565b6000602082840312156147cf578081fd5b81516001600160401b038111156147e4578182fd5b613ff484828501614191565b600060208284031215614801578081fd5b6133bb8261424c565b60006020828403121561481b578081fd5b5035919050565b600060208284031215614833578081fd5b81356133bb8161516f565b60008060408385031215614850578182fd5b823561485b8161516f565b9150602083013561486b8161515a565b809150509250929050565b600060208284031215614887578081fd5b81356001600160401b0381111561489c578182fd5b613ff4848285016142f6565b6000602082840312156148b9578081fd5b81516001600160401b03808211156148cf578283fd5b90830190604082860312156148e2578283fd5b6040516040810181811083821117156148f757fe5b60405282516149058161516f565b8152602083015182811115614918578485fd5b614924878286016142b3565b60208301525095945050505050565b600060208284031215614944578081fd5b81516001600160401b038082111561495a578283fd5b908301906040828603121561496d578283fd5b60405160408101818110838211171561498257fe5b604052825182811115614993578485fd5b61499f87828601614191565b8252506020830151828111156149b3578485fd5b61492487828601614191565b6000602082840312156149d0578081fd5b81516001600160401b03808211156149e6578283fd5b90830190606082860312156149f9578283fd5b604051606081018181108382111715614a0e57fe5b604052825182811115614a1f578485fd5b614a2b87828601614191565b825250602083015182811115614a3f578485fd5b614a4b87828601614191565b602083015250614a5d6040840161424c565b604082015295945050505050565b600060208284031215614a7c578081fd5b81356001600160401b03811115614a91578182fd5b613ff4848285016143bf565b60008060008060808587031215614ab2578182fd5b84356001600160401b0380821115614ac8578384fd5b614ad4888389016143bf565b95506020870135915080821115614ae9578384fd5b614af588838901614267565b94506040870135915080821115614b0a578384fd5b614b16888389016143bf565b93506060870135915080821115614b2b578283fd5b50614b3887828801614267565b91505092959194509250565b600060208284031215614b55578081fd5b6133bb826144a8565b600063ffffffff60e01b82511683526020820151604060208501528051806040860152614b9281606087016020850161512e565b601f01601f1916939093016060019392505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b6000604082526150186040830185614b5e565b8281036020840152612fe38185614b5e565b60006060825284516040606084015261504660a0840182614b5e565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e1984360301811261509f578283fd5b8301803591506001600160401b038211156150b8578283fd5b602001915036819003821315611f1457600080fd5b6040518181016001600160401b03811182821017156150e857fe5b604052919050565b60006001600160401b0382111561510357fe5b5060209081020190565b60006001600160401b0382111561512057fe5b50601f01601f191660200190565b60005b83811015615149578181015183820152602001615131565b838111156106465750506000910152565b6001600160a01b038116811461157b57600080fd5b6001600160e01b03198116811461157b57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220afb45cb0b68502f6c2ce48c7b8d3e776771b70a03d2365b57f0f0085b66e5eae64736f6c63430007060033", - "deployedBytecode": "0x6080604052600436106101095760003560e01c8063b0e21e8a11610095578063d6ca6ab711610064578063d6ca6ab71461029c578063e2864fe3146102bc578063e99a3f80146102dc578063eae3ad6f146102ef578063f2fde38b1461030f57610109565b8063b0e21e8a14610218578063b39deb461461023c578063b74c8e9a1461025c578063bc158c2d1461027c57610109565b80633be89922116100dc5780633be899221461019957806367d49a3b146101b95780636d8f0694146101cc578063715018a6146101ee5780638da5cb5b1461020357610109565b80630d5f7d351461010e5780631372a6251461012357806320158c441461014357806330c642f114610179575b600080fd5b61012161011c366004614876565b61032f565b005b34801561012f57600080fd5b5061012161013e366004614713565b61064c565b34801561014f57600080fd5b5061016361015e36600461480a565b610720565b6040516101709190614c73565b60405180910390f35b34801561018557600080fd5b5061012161019436600461483e565b610733565b3480156101a557600080fd5b506101216101b43660046144be565b610803565b6101216101c7366004614876565b610888565b3480156101d857600080fd5b506101e1610b68565b6040516101709190614ba7565b3480156101fa57600080fd5b50610121610b78565b34801561020f57600080fd5b506101e1610c24565b34801561022457600080fd5b5061022d610c33565b60405161017093929190614c4a565b34801561024857600080fd5b5061012161025736600461483e565b610c5e565b34801561026857600080fd5b5061012161027736600461477a565b610d22565b34801561028857600080fd5b506101216102973660046144be565b610da4565b3480156102a857600080fd5b506101216102b7366004614b44565b610e71565b3480156102c857600080fd5b506101216102d7366004614a6b565b610f4b565b6101216102ea366004614a9d565b61100c565b3480156102fb57600080fd5b5061012161030a366004614b44565b611022565b34801561031b57600080fd5b5061012161032a3660046144be565b6110f9565b600061034961034460c0840160a085016144be565b6111fc565b6040805161012081019091529091506000908061036960208601866144be565b6001600160a01b03168152602001604051806040016040528060405180604001604052808860400160208101906103a09190614822565b6001600160e01b03191681526020016103bc60608a018a615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a08301520161045f61014086016101208701614822565b6001600160e01b031916815260200161047c610140860186615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815180830183528781526101808901356020828101919091528201528082018390528151608081018352949550919391925060608084019291829182820191829161051091908c01908c01614822565b6001600160e01b031916815260200161052c60608b018b615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a0890135602092830152918352820181905260408201819052606082015260800161059b61014087016101208801614822565b6001600160e01b03191681526020016105b86101c0870187615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250905061063c82610602610160870187615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061126292505050565b6106468282611279565b50505050565b600054610100900460ff168061066557506106656114cb565b80610673575060005460ff16155b6106ae5760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff161580156106d9576000805460ff1961ff0019909116610100171660011790555b6106e16114dc565b6106e961157e565b6106f38686611677565b6106fe848484611721565b6107066117e1565b8015610718576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b61073b6118b1565b6001600160a01b031661074c610c24565b6001600160a01b031614610795576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593906107f7908490614ba7565b60405180910390a25050565b61080b6118b1565b6001600160a01b031661081c610c24565b6001600160a01b031614610865576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b600061089d61034460c0840160a085016144be565b604080516101208101909152909150600090806108bd60208601866144be565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b03168152602001604051806040016040528060405180604001604052808860400160208101906109229190614822565b6001600160e01b031916815260200161093e60608a018a615089565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e0850135604082015261010085013560608201526080016109b961014086016101208701614822565b6001600160e01b03191681526020016109d6610140860186615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815160808101835294955091939192506020830191908190818101908190610a489060608c01908c01614822565b6001600160e01b0319168152602001610a6460608b018b615089565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c001610af761014087016101208801614822565b6001600160e01b0319168152602001610b146101c0870187615089565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610b5e82610602610160870187615089565b6106468183611279565b610162546001600160a01b031681565b610b806118b1565b6001600160a01b0316610b91610c24565b6001600160a01b031614610bda576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b610c666118b1565b6001600160a01b0316610c77610c24565b6001600160a01b031614610cc0576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f906107f7908490614ba7565b610d2a6118b1565b6001600160a01b0316610d3b610c24565b6001600160a01b031614610d84576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610d8d83610da4565b610d9682610e71565b610d9f81611022565b505050565b610dac6118b1565b6001600160a01b0316610dbd610c24565b6001600160a01b031614610e06576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd0391610e46916001600160a01b03909116908490614bbb565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b610e796118b1565b6001600160a01b0316610e8a610c24565b6001600160a01b031614610ed3576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e91610f1891600160a01b90910465ffffffffffff16908490615070565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b0316610f5e6118b1565b6001600160a01b031614610f8d5760405162461bcd60e51b8152600401610f8490614fe0565b60405180910390fd5b6080810151610fae5760405162461bcd60e51b8152600401610f8490614d72565b6000610fb9826118b5565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a90611000908390614c73565b60405180910390a15050565b61101884848484611a3d565b6106468483611279565b61102a6118b1565b6001600160a01b031661103b610c24565b6001600160a01b031614611084576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f131916110c991600160d01b90910465ffffffffffff16908490615070565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b6111016118b1565b6001600160a01b0316611112610c24565b6001600160a01b03161461115b576040805162461bcd60e51b8152602060048201819052602482015260008051602061528c833981519152604482015290519081900360640190fd5b6001600160a01b0381166111a05760405162461bcd60e51b81526004018080602001828103825260268152602001806151866026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b6112046140b3565b61120c6140b3565b6001600160a01b038316611229576355575f5d60e11b815261125a565b6322ba176160e21b8152604051611244908490602001614ba7565b60408051601f1981840301815291905260208201525b90505b919050565b61126b82611b09565b6112758282611bd3565b5050565b6000806112868484611e82565b9150915060008060006112998787611f1b565b9250925092506000806113f26040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506113ed8a600001518a60000151611fca565b61209c565b885191935091506001600160e01b0319166355575f5d60e11b14156114715785516001600160e01b0319166355575f5d60e11b141561143057600080fd5b813410156114505760405162461bcd60e51b8152600401610f8490614fb8565b8134111561146c5761146c6114653484612213565b3390612270565b6114c0565b85516001600160e01b0319166355575f5d60e11b14156114c057803410156114ab5760405162461bcd60e51b8152600401610f8490614fb8565b803411156114c0576114c06114653483612213565b505050505050505050565b60006114d630612308565b15905090565b600054610100900460ff16806114f557506114f56114cb565b80611503575060005460ff16155b61153e5760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff16158015611569576000805460ff1961ff0019909116610100171660011790555b801561157b576000805461ff00191690555b50565b600054610100900460ff168061159757506115976114cb565b806115a5575060005460ff16155b6115e05760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff1615801561160b576000805460ff1961ff0019909116610100171660011790555b60006116156118b1565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561157b576000805461ff001916905550565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff168061173a575061173a6114cb565b80611748575060005460ff16155b6117835760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff161580156117ae576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610646576000805461ff001916905550505050565b600054610100900460ff16806117fa57506117fa6114cb565b80611808575060005460ff16155b6118435760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff1615801561186e576000805460ff1961ff0019909116610100171660011790555b6115696040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b81525061230e565b3390565b60e08101516000906001600160e01b031916632611a13360e11b14806118e9575060e08201516001600160e01b0319908116145b1561195e5781516020830151516118ff906123ce565b60608401515161190e906123ce565b846080015160405160200180856001600160a01b0316815260200184815260200183815260200182815260200194505050505060405160208183030381529060405280519060200120905061125d565b815160208301515161196f906123ce565b60608401515161197e906123ce565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156119ea5781810151838201526020016119d2565b50505050905090810190601f168015611a175780820380516001836020036101000a031916815260200191505b50965050505050505060405160208183030381529060405280519060200120905061125d565b611a478484611262565b611a518282611262565b60408401516001600160a01b031615611aad5781516001600160a01b031615611aad5783604001516001600160a01b031682600001516001600160a01b031614611aad5760405162461bcd60e51b8152600401610f8490614f75565b60408201516001600160a01b0316156106465783516001600160a01b0316156106465783600001516001600160a01b031682604001516001600160a01b0316146106465760405162461bcd60e51b8152600401610f8490614de4565b60a08101511580611b1d5750428160a00151105b611b6e576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c08101511580611b825750428160c00151115b61157b576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b6080820151611c585781516001600160a01b031615611c535781516001600160a01b0316611bff6118b1565b6001600160a01b031614611c53576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b611275565b81516001600160a01b0316611c6b6118b1565b6001600160a01b031614611275576000611c8483612438565b9050611c9c83600001516001600160a01b0316612308565b15611dd8578251630b135d3f60e11b906001600160a01b0316631626ba7e611cc384612528565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611d16578181015183820152602001611cfe565b50505050905090810190601f168015611d435780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611d6157600080fd5b505afa158015611d75573d6000803e3d6000fd5b505050506040513d6020811015611d8b57600080fd5b50516001600160e01b03191614611dd35760405162461bcd60e51b815260040180806020018281038252602b8152602001806151f0602b913960400191505060405180910390fd5b610d9f565b82516001600160a01b0316611df683611df084612528565b90612574565b6001600160a01b031614611e3b5760405162461bcd60e51b81526004018080602001828103825260228152602001806151ce6022913960400191505060405180910390fd5b82516001600160a01b0316610d9f576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b611e8a6140b3565b611e926140b3565b602084015151606084015151611ea891906125f4565b80519092506001600160e01b031916611ed35760405162461bcd60e51b8152600401610f8490614f49565b606084015151602084015151611ee991906125f4565b80519091506001600160e01b031916611f145760405162461bcd60e51b8152600401610f8490614f49565b9250929050565b611f236140cb565b611f2b6140cb565b611f336140ee565b6000611f3e866118b5565b90506000611f4b866118b5565b90506000611f576118b1565b88519091506001600160a01b0316611f76576001600160a01b03811688525b86516001600160a01b0316611f92576001600160a01b03811687525b611f9b88612634565b9550611fa687612634565b9450611fbe888885858a604001518a6040015161272d565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b1415611fed57506001612096565b6001600160e01b031982166355575f5d60e11b141561200e57506002612096565b6001600160e01b031983166322ba176160e21b141561202f57506001612096565b6001600160e01b031982166322ba176160e21b141561205057506002612096565b6001600160e01b0319831663025ceed960e61b141561207157506001612096565b6001600160e01b0319821663025ceed960e61b141561209257506002612096565b5060005b92915050565b825160209081015183519091015160018360028111156120b857fe5b141561213a5760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b909104169181019190915261210a90869086906128e8565b9150612135846000015160000151856000015160200151866080015188602001518860600151612b62565b61220b565b600283600281111561214857fe5b14156121c55760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b909104169181019190915261219a90859087906128e8565b9050612135856000015160000151866000015160200151876080015187602001518960600151612b62565b8451805160209182015160808801519287015160608901516121e8949190612b62565b83518051602091820151608087015192880151606088015161220b949190612b62565b935093915050565b60008282111561226a576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146122bb576040519150601f19603f3d011682016040523d82523d6000602084013e6122c0565b606091505b5050905080610d9f576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff168061232757506123276114cb565b80612335575060005460ff16155b6123705760405162461bcd60e51b815260040180806020018281038252602e81526020018061521b602e913960400191505060405180910390fd5b600054610100900460ff1615801561239b576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca558015610d9f576000805461ff0019169055505050565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d826000015161246d8460200151612ce6565b846040015161247f8660600151612ce6565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b6000612532612d56565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b600081516041146125cc576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6125ea86828585612d96565b9695505050505050565b6125fc6140b3565b60006126088484612fec565b80519091506001600160e01b03191661262d576126258385612fec565b915050612096565b9050612096565b61263c6140cb565b60e08201516001600160e01b031916632611a13360e11b14156126885760008261010001518060200190518101906126749190614933565b805183526020908101519083015250612714565b60e08201516001600160e01b0319166323d235ef60e01b14156126e05760008261010001518060200190518101906126c091906149bf565b805183526020808201519084015260409081015115159083015250612714565b60e08201516001600160e01b031990811614156126fc57612714565b60405162461bcd60e51b8152600401610f8490614edb565b80515161125d57815161272690613208565b8152919050565b6127356140ee565b60006127458860800151876132a3565b905060006127578860800151876132a3565b905060006127698a8a85858a8a6132c8565b9050896020015160200151600014158061278a575060608901516020015115155b156127ad5780516127ad5760405162461bcd60e51b8152600401610f8490614e54565b60608a0151602001511515806127c957506020808a0151015115155b156127f25760008160200151116127f25760405162461bcd60e51b8152600401610f8490614e54565b60808a01511561284557851561282457805161280f908490613361565b600089815261012f6020526040902055612845565b6020810151612834908490613361565b600089815261012f60205260409020555b60808901511561289857841561287a576020810151612865908390613361565b600088815261012f6020526040902055612898565b8051612887908390613361565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c450926128d3928c928c929190614c7c565b60405180910390a19998505050505050505050565b60006129018460000151602001518386604001516133c2565b9050600061292b828660000151602001518760800151868960000151600001518a60600151613464565b8551805186515160208089015193015160808a015160608b01519596506129599593949293879291906134c1565b9050846040015151600114801561297557508360400151516001145b80156129ca5750846040015160008151811061298d57fe5b6020026020010151600001516001600160a01b031684604001516000815181106129b357fe5b6020026020010151600001516001600160a01b0316145b15612ae057604080516001808252818301909252600091816020015b6129ee614108565b8152602001906001900390816129e65790505090508460400151600081518110612a1457fe5b60200260200101516000015181600081518110612a2d57fe5b60209081029190910101516001600160a01b03909116905260408601518051600090612a5557fe5b6020026020010151602001518560400151600081518110612a7257fe5b6020026020010151602001510181600081518110612a8c57fe5b6020026020010151602001906001600160601b031690816001600160601b031681525050612ad686600001516000015183886000015160200151848a608001518b606001516135c6565b509150612b399050565b612b0a85600001516000015182876000015160200151886040015189608001518a606001516135c6565b50855180516020909101516040870151608089015160608a0151949550612b359486939291906135c6565b5090505b612b5a85600001516000015182876080015187602001518960600151612b62565b509392505050565b6000825111612b835760405162461bcd60e51b8152600401610f8490614da0565b600084815b6001855103811015612c52576000612bc9868381518110612ba557fe5b6020026020010151602001516001600160601b03168961367b90919063ffffffff16565b9050612bfe868381518110612bda57fe5b6020026020010151602001516001600160601b03168561336190919063ffffffff16565b93508015612c4957612c108382612213565b9250612c4960405180604001604052808b81526020018381525088888581518110612c3757fe5b60200260200101516000015188613693565b50600101612b88565b50600084600186510381518110612c6557fe5b60200260200101519050612c8f81602001516001600160601b03168461336190919063ffffffff16565b92508261271014612cb25760405162461bcd60e51b8152600401610f8490614f12565b8115612cdc57612cdc60405180604001604052808a81526020018481525087836000015187613693565b5050505050505050565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b08612d1683600001516123ce565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b6000612d917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612d84613a9b565b612d8c613aa1565b613aa7565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612df75760405162461bcd60e51b81526004018080602001828103825260228152602001806151ac6022913960400191505060405180910390fd5b6000601e8560ff161115612ed1576004850360ff16601b1480612e2057506004850360ff16601c145b612e5b5760405162461bcd60e51b81526004018080602001828103825260228152602001806152496022913960400191505060405180910390fd5b6001612e6687613b09565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612ec0573d6000803e3d6000fd5b505050602060405103519050612f88565b8460ff16601b1480612ee657508460ff16601c145b612f215760405162461bcd60e51b81526004018080602001828103825260228152602001806152496022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612f7b573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b038116612fe3576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b612ff46140b3565b825182516001600160e01b031982166355575f5d60e11b141561305f576001600160e01b031981166355575f5d60e11b1415613034578492505050612096565b5050604080518082018252600080825282516020818101909452908152918101919091529050612096565b6001600160e01b031982166322ba176160e21b14156130a4576001600160e01b031981166322ba176160e21b14156130345761309b8585613b5a565b92505050612096565b6001600160e01b031982166339d690a360e11b14156130e0576001600160e01b031981166339d690a360e11b14156130345761309b8585613b5a565b6001600160e01b0319821663025ceed960e61b141561311c576001600160e01b0319811663025ceed960e61b14156130345761309b8585613b5a565b6001600160e01b031982166000908152606560205260409020546001600160a01b031680156131d1576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb0906131739089908990600401615005565b60006040518083038186803b15801561318b57600080fd5b505afa15801561319f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526131c791908101906148a8565b9350505050612096565b6001600160e01b031983811690831614156131f0576131c78686613b5a565b60405162461bcd60e51b8152600401610f8490614d04565b60408051600180825281830190925260609160009190816020015b61322b614108565b815260200190600190039081613223579050509050828160008151811061324e57fe5b6020026020010151600001906001600160a01b031690816001600160a01b0316815250506127108160008151811061328257fe5b6020908102919091018101516001600160601b039092169101529050919050565b6000826132b257506000612096565b50600090815261012f6020526040902054919050565b6132d06140ee565b6000806132de898887613bb7565b915091506000806132f08a8988613bb7565b915091508381118061330a5750838114801561330a575083155b156133365761332b84848c60200151602001518d6060015160200151613c30565b9450505050506125ea565b6133528b60200151602001518c60600151602001518484613cb5565b9b9a5050505050505050505050565b6000828201838110156133bb576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b602082015160009065ffffffffffff16815b835181101561344f576127108482815181106133ec57fe5b6020026020010151602001516001600160601b0316111561341f5760405162461bcd60e51b8152600401610f8490614eac565b83818151811061342b57fe5b6020026020010151602001516001600160601b0316820191508060010190506133d4565b50612fe361345d868361367b565b8690613361565b60008060006134868989886040015189602001510165ffffffffffff16613d3b565b909250905080156134b5576134b560405180604001604052808781526020018381525088886000015187613693565b50979650505050505050565b6000806134cd88613d5d565b9050805160011480156134e1575086516001145b801561352e5750866000815181106134f557fe5b6020026020010151600001516001600160a01b03168160008151811061351757fe5b6020026020010151600001516001600160a01b0316145b1561357f576113888160008151811061354357fe5b6020026020010151602001516001600160601b031611156135765760405162461bcd60e51b8152600401610f8490614d3b565b859150506135bb565b6000806135908b8989868a8a6135c6565b915091506113888111156135b65760405162461bcd60e51b8152600401610f8490614d3b565b509150505b979650505050505050565b846000805b855181101561366f576136078682815181106135e357fe5b6020026020010151602001516001600160601b03168361336190919063ffffffff16565b91506000613636848989858151811061361c57fe5b6020026020010151602001516001600160601b0316613d3b565b909450905080156136665761366660405180604001604052808c81526020018381525087898581518110612c3757fe5b506001016135cb565b50965096945050505050565b60006133bb61271061368d8585613ed2565b90613f2b565b8351516001600160e01b0319166339d690a360e11b14156137d9576000808560000151602001518060200190518101906136cd91906146e6565b9150915085602001516001146136f55760405162461bcd60e51b8152600401610f8490614e28565b6001600160a01b03851630141561376d57604051632142170760e11b81526001600160a01b038316906342842e0e9061373690309088908690600401614bd5565b600060405180830381600087803b15801561375057600080fd5b505af1158015613764573d6000803e3d6000fd5b505050506137d2565b604051637b84dc8360e11b81526001600160a01b0384169063f709b9069061379f908590899089908790600401614cda565b600060405180830381600087803b1580156137b957600080fd5b505af11580156137cd573d6000803e3d6000fd5b505050505b5050610646565b8351516001600160e01b0319166322ba176160e21b141561393757600084600001516020015180602001905181019061381291906144da565b90506001600160a01b0384163014156138c957602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb91613856918791600401614c31565b602060405180830381600087803b15801561387057600080fd5b505af1158015613884573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138a891906147f0565b6138c45760405162461bcd60e51b8152600401610f8490614e7d565b613931565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c3916138fe91859189918991600401614cda565b600060405180830381600087803b15801561391857600080fd5b505af115801561392c573d6000803e3d6000fd5b505050505b50610646565b8351516001600160e01b03191663025ceed960e61b14156139f45760008085600001516020015180602001905181019061397191906146e6565b90925090506001600160a01b0385163014156139bc576020860151604051637921219560e11b81526001600160a01b0384169163f242432a9161373691309189918791600401614bf9565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee99161379f9186918a918a91889190600401614c97565b8351516001600160e01b0319166355575f5d60e11b1415613a3d576001600160a01b0382163014613a38576020840151613a38906001600160a01b03841690612270565b610646565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf190613a6d9087908790879060040161502a565b600060405180830381600087803b158015613a8757600080fd5b505af1158015612cdc573d6000803e3d6000fd5b60c95490565b60ca5490565b6000838383613ab4613f92565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b613b626140b3565b60208084015180519082012083820151805192019190912080821415613b8c578492505050612096565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b6000808215613bf6576020808601510151613bd29085612213565b9150613bef85606001516020015186602001516020015184613f96565b905061220b565b606085015160200151613c099085612213565b9050613c2685602001516020015186606001516020015183613f96565b9150935093915050565b613c386140ee565b6000613c45858585613f96565b905085811115613c9c576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b613cbd6140ee565b6000613cca838787613f96565b905083811115613d21576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b600080613d5185613d4c868661367b565b613ffc565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480613d91575081516001600160e01b0319166339d690a360e11b145b15613e47576000808360200151806020019051810190613db191906146e6565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a90613de89085908590600401614c31565b600060405180830381600087803b158015613e0257600080fd5b505af1158015613e16573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613e3e91908101906147be565b9250505061125d565b81516001600160e01b03191662737ea960e61b1415613e885760008260200151806020019051810190613e7a91906144f6565b60800151925061125d915050565b81516001600160e01b03191663d8f960c160e01b1415613eca5760008260200151806020019051810190613ebc91906145f3565b60600151925061125d915050565b506060919050565b600082613ee157506000612096565b82820282848281613eee57fe5b04146133bb5760405162461bcd60e51b815260040180806020018281038252602181526020018061526b6021913960400191505060405180910390fd5b6000808211613f81576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381613f8a57fe5b049392505050565b4690565b6000613fa3848484614024565b15613fe6576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b613ff48361368d8685613ed2565b949350505050565b6000808284111561401b576140118484612213565b9150829050611f14565b50600093915050565b60008261406b576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b811580614076575083155b15614083575060006133bb565b6000838061408d57fe5b858409905061409c8584613ed2565b6140a8826103e8613ed2565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b803561125d8161515a565b600082601f83011261413a578081fd5b8151602061414f61414a836150f0565b6150cd565b82815281810190858301855b8581101561418457614172898684518b01016142b3565b8452928401929084019060010161415b565b5090979650505050505050565b600082601f8301126141a1578081fd5b815160206141b161414a836150f0565b828152818101908583016040808602880185018910156141cf578687fd5b865b8681101561423e5781838b0312156141e7578788fd5b81518281018181106001600160401b038211171561420157fe5b8352835161420e8161515a565b8152838701516001600160601b038116811461422857898afd5b81880152855293850193918101916001016141d1565b509198975050505050505050565b8051801515811461125d57600080fd5b803561125d8161516f565b600082601f830112614277578081fd5b813561428561414a8261510d565b818152846020838601011115614299578283fd5b816020850160208301379081016020019190915292915050565b600082601f8301126142c3578081fd5b81516142d161414a8261510d565b8181528460208386010111156142e5578283fd5b613ff482602083016020870161512e565b60006101e08284031215614308578081fd5b50919050565b60006040808385031215614320578182fd5b80518181016001600160401b03828210818311171561433b57fe5b81845282945085358181111561435057600080fd5b860180880385131561436157600080fd5b60808401838110838211171561437357fe5b9094528335936143828561516f565b9382526020840135938185111561439857600080fd5b6143a488868301614267565b60608501525050815260209384013593019290925292915050565b60006101208083850312156143d2578182fd5b6143db816150cd565b9150506143e78261411f565b815260208201356001600160401b038082111561440357600080fd5b61440f8583860161430e565b60208401526144206040850161411f565b6040840152606084013591508082111561443957600080fd5b6144458583860161430e565b60608401526080840135608084015260a084013560a084015260c084013560c084015261447460e0850161425c565b60e08401526101009150818401358181111561448f57600080fd5b61449b86828701614267565b8385015250505092915050565b803565ffffffffffff8116811461125d57600080fd5b6000602082840312156144cf578081fd5b81356133bb8161515a565b6000602082840312156144eb578081fd5b81516133bb8161515a565b60008060408385031215614508578081fd5b82516145138161515a565b60208401519092506001600160401b038082111561452f578283fd5b9084019060c08287031215614542578283fd5b61454c60c06150cd565b82518152602083015182811115614561578485fd5b61456d888286016142b3565b6020830152506040830151604082015260608301518281111561458e578485fd5b61459a88828601614191565b6060830152506080830151828111156145b1578485fd5b6145bd88828601614191565b60808301525060a0830151828111156145d4578485fd5b6145e08882860161412a565b60a0830152508093505050509250929050565b60008060408385031215614605578182fd5b82516146108161515a565b60208401519092506001600160401b038082111561462c578283fd5b9084019060a0828703121561463f578283fd5b61464960a06150cd565b8251815260208301518281111561465e578485fd5b61466a888286016142b3565b602083015250604083015182811115614681578485fd5b61468d88828601614191565b6040830152506060830151828111156146a4578485fd5b6146b088828601614191565b6060830152506080830151828111156146c7578485fd5b6146d38882860161412a565b6080830152508093505050509250929050565b600080604083850312156146f8578182fd5b82516147038161515a565b6020939093015192949293505050565b600080600080600060a0868803121561472a578081fd5b85356147358161515a565b945060208601356147458161515a565b935060408601359250606086013561475c8161515a565b9150608086013561476c8161515a565b809150509295509295909350565b60008060006060848603121561478e578081fd5b83356147998161515a565b92506147a7602085016144a8565b91506147b5604085016144a8565b90509250925092565b6000602082840312156147cf578081fd5b81516001600160401b038111156147e4578182fd5b613ff484828501614191565b600060208284031215614801578081fd5b6133bb8261424c565b60006020828403121561481b578081fd5b5035919050565b600060208284031215614833578081fd5b81356133bb8161516f565b60008060408385031215614850578182fd5b823561485b8161516f565b9150602083013561486b8161515a565b809150509250929050565b600060208284031215614887578081fd5b81356001600160401b0381111561489c578182fd5b613ff4848285016142f6565b6000602082840312156148b9578081fd5b81516001600160401b03808211156148cf578283fd5b90830190604082860312156148e2578283fd5b6040516040810181811083821117156148f757fe5b60405282516149058161516f565b8152602083015182811115614918578485fd5b614924878286016142b3565b60208301525095945050505050565b600060208284031215614944578081fd5b81516001600160401b038082111561495a578283fd5b908301906040828603121561496d578283fd5b60405160408101818110838211171561498257fe5b604052825182811115614993578485fd5b61499f87828601614191565b8252506020830151828111156149b3578485fd5b61492487828601614191565b6000602082840312156149d0578081fd5b81516001600160401b03808211156149e6578283fd5b90830190606082860312156149f9578283fd5b604051606081018181108382111715614a0e57fe5b604052825182811115614a1f578485fd5b614a2b87828601614191565b825250602083015182811115614a3f578485fd5b614a4b87828601614191565b602083015250614a5d6040840161424c565b604082015295945050505050565b600060208284031215614a7c578081fd5b81356001600160401b03811115614a91578182fd5b613ff4848285016143bf565b60008060008060808587031215614ab2578182fd5b84356001600160401b0380821115614ac8578384fd5b614ad4888389016143bf565b95506020870135915080821115614ae9578384fd5b614af588838901614267565b94506040870135915080821115614b0a578384fd5b614b16888389016143bf565b93506060870135915080821115614b2b578283fd5b50614b3887828801614267565b91505092959194509250565b600060208284031215614b55578081fd5b6133bb826144a8565b600063ffffffff60e01b82511683526020820151604060208501528051806040860152614b9281606087016020850161512e565b601f01601f1916939093016060019392505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b6000604082526150186040830185614b5e565b8281036020840152612fe38185614b5e565b60006060825284516040606084015261504660a0840182614b5e565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e1984360301811261509f578283fd5b8301803591506001600160401b038211156150b8578283fd5b602001915036819003821315611f1457600080fd5b6040518181016001600160401b03811182821017156150e857fe5b604052919050565b60006001600160401b0382111561510357fe5b5060209081020190565b60006001600160401b0382111561512057fe5b50601f01601f191660200190565b60005b83811015615149578181015183820152602001615131565b838111156106465750506000910152565b6001600160a01b038116811461157b57600080fd5b6001600160e01b03198116811461157b57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220afb45cb0b68502f6c2ce48c7b8d3e776771b70a03d2365b57f0f0085b66e5eae64736f6c63430007060033", + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"BuyerFeeAmountChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"Cancel\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldValue\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newValue\",\"type\":\"address\"}],\"name\":\"FeeReceiverChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"leftHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"rightHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newLeftFill\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newRightFill\",\"type\":\"uint256\"}],\"name\":\"Match\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"MatcherChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"ProxyChange\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldValue\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newValue\",\"type\":\"uint256\"}],\"name\":\"SellerFeeAmountChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_erc20TransferProxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newDefaultFeeReceiver\",\"type\":\"address\"},{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesProvider\",\"type\":\"address\"}],\"name\":\"__ExchangeV2_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_transferProxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_erc20TransferProxy\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolFee\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newDefaultFeeReceiver\",\"type\":\"address\"},{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesProvider\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"assetTypes\",\"type\":\"bytes4[]\"},{\"internalType\":\"address[]\",\"name\":\"proxies\",\"type\":\"address[]\"},{\"internalType\":\"bytes4\",\"name\":\"assetMatcherType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"assetMatcher\",\"type\":\"address\"}],\"name\":\"__ExchangeV2_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"cancel\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"bidMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"bidPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bidSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bidEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"bidDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"bidData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"bidSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.AcceptBid\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directAcceptBid\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sellOrderMaker\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"nftAssetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"nftData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"paymentToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderSalt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"sellOrderEnd\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"sellOrderDataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"sellOrderSignature\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderPaymentAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"buyOrderNftAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"buyOrderData\",\"type\":\"bytes\"}],\"internalType\":\"struct LibDirectTransfer.Purchase\",\"name\":\"direct\",\"type\":\"tuple\"}],\"name\":\"directPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"fills\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderLeft\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureLeft\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"orderRight\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signatureRight\",\"type\":\"bytes\"}],\"name\":\"matchOrders\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"protocolFee\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"sellerAmount\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"royaltiesRegistry\",\"outputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setAllProtocolFeeData\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"matcher\",\"type\":\"address\"}],\"name\":\"setAssetMatcher\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_buyerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeBuyerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_receiver\",\"type\":\"address\"}],\"name\":\"setPrtocolFeeReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint48\",\"name\":\"_sellerAmount\",\"type\":\"uint48\"}],\"name\":\"setPrtocolFeeSellerAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IRoyaltiesProvider\",\"name\":\"newRoyaltiesRegistry\",\"type\":\"address\"}],\"name\":\"setRoyaltiesRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"assetType\",\"type\":\"bytes4\"},{\"internalType\":\"address\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"setTransferProxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"directAcceptBid((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\",\"params\":{\"direct\":\"struct with parameters for accept bid operation\"}},\"directPurchase((address,uint256,bytes4,bytes,uint256,address,uint256,uint256,uint256,bytes4,bytes,bytes,uint256,uint256,bytes))\":{\"details\":\"function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":\"ExchangeV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function _setAssetMatcher(bytes4 assetType, address matcher) internal {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x8fceb04eec1c1b32bea097a019b57e9422c31fa2e020e9957db91d5b03edb1bb\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n function __ExchangeV2_init_proxy(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider,\\n address _initialOwner,\\n bytes4[] memory assetTypes, \\n address[] memory proxies,\\n bytes4 assetMatcherType,\\n address assetMatcher\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n for (uint i = 0; i < assetTypes.length; i++) {\\n _setTransferProxy(assetTypes[i], proxies[i]);\\n }\\n _setAssetMatcher(assetMatcherType, assetMatcher);\\n transferOwnership(_initialOwner);\\n }\\n}\\n\",\"keccak256\":\"0x8b5d108d1e027792fd3494dda7feb79937b5bb68cec82109f3ce69fe1f01c59a\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function _setTransferProxy(bytes4 assetType, address proxy) internal {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xea639616c66696b5ae9b278d3c6c9a85839bb5e815a4db046b4fd0225cd86625\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506155e3806100206000396000f3fe6080604052600436106101145760003560e01c80638da5cb5b116100a0578063d6ca6ab711610064578063d6ca6ab7146102c7578063e2864fe3146102e7578063e99a3f8014610307578063eae3ad6f1461031a578063f2fde38b1461033a57610114565b80638da5cb5b1461022e578063b0e21e8a14610243578063b39deb4614610267578063b74c8e9a14610287578063bc158c2d146102a757610114565b806330c642f1116100e757806330c642f1146101a45780633be89922146101c457806367d49a3b146101e45780636d8f0694146101f7578063715018a61461021957610114565b80630d5f7d35146101195780631372a6251461012e57806320158c441461014e5780632bed54d614610184575b600080fd5b61012c610127366004614b78565b61035a565b005b34801561013a57600080fd5b5061012c610149366004614935565b610677565b34801561015a57600080fd5b5061016e610169366004614b0c565b61074b565b60405161017b9190614f75565b60405180910390f35b34801561019057600080fd5b5061012c61019f36600461499c565b61075e565b3480156101b057600080fd5b5061012c6101bf366004614b40565b61088f565b3480156101d057600080fd5b5061012c6101df3660046146e0565b61095f565b61012c6101f2366004614b78565b6109e4565b34801561020357600080fd5b5061020c610cc4565b60405161017b9190614ea9565b34801561022557600080fd5b5061012c610cd4565b34801561023a57600080fd5b5061020c610d80565b34801561024f57600080fd5b50610258610d8f565b60405161017b93929190614f4c565b34801561027357600080fd5b5061012c610282366004614b40565b610dba565b34801561029357600080fd5b5061012c6102a2366004614a7c565b610e7e565b3480156102b357600080fd5b5061012c6102c23660046146e0565b610f00565b3480156102d357600080fd5b5061012c6102e2366004614e46565b610fcd565b3480156102f357600080fd5b5061012c610302366004614d6d565b6110a7565b61012c610315366004614d9f565b611168565b34801561032657600080fd5b5061012c610335366004614e46565b61117e565b34801561034657600080fd5b5061012c6103553660046146e0565b611255565b600061037461036f60c0840160a085016146e0565b611358565b6040805161012081019091529091506000908061039460208601866146e0565b6001600160a01b03168152602001604051806040016040528060405180604001604052808860400160208101906103cb9190614b24565b6001600160e01b03191681526020016103e760608a018a61538b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a08301520161048a61014086016101208701614b24565b6001600160e01b03191681526020016104a761014086018661538b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815180830183528781526101808901356020828101919091528201528082018390528151608081018352949550919391925060608084019291829182820191829161053b91908c01908c01614b24565b6001600160e01b031916815260200161055760608b018b61538b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a089013560209283015291835282018190526040820181905260608201526080016105c661014087016101208801614b24565b6001600160e01b03191681526020016105e36101c087018761538b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506106678261062d61016087018761538b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113be92505050565b61067182826113d5565b50505050565b600054610100900460ff16806106905750610690611627565b8061069e575060005460ff16155b6106d95760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff16158015610704576000805460ff1961ff0019909116610100171660011790555b61070c611638565b6107146116da565b61071e86866117d3565b61072984848461187d565b61073161193d565b8015610743576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b600054610100900460ff16806107775750610777611627565b80610785575060005460ff16155b6107c05760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff161580156107eb576000805460ff1961ff0019909116610100171660011790555b6107f3611638565b6107fb6116da565b6108058b8b6117d3565b61081089898961187d565b61081861193d565b60005b855181101561085c5761085486828151811061083357fe5b602002602001015186838151811061084757fe5b60200260200101516108f1565b60010161081b565b506108678383610e1c565b61087086611255565b8015610882576000805461ff00191690555b5050505050505050505050565b610897611a0d565b6001600160a01b03166108a8610d80565b6001600160a01b0316146108f1576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c315359390610953908490614ea9565b60405180910390a25050565b610967611a0d565b6001600160a01b0316610978610d80565b6001600160a01b0316146109c1576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b60006109f961036f60c0840160a085016146e0565b60408051610120810190915290915060009080610a1960208601866146e0565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b0316815260200160405180604001604052806040518060400160405280886040016020810190610a7e9190614b24565b6001600160e01b0319168152602001610a9a60608a018a61538b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e085013560408201526101008501356060820152608001610b1561014086016101208701614b24565b6001600160e01b0319168152602001610b3261014086018661538b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815160808101835294955091939192506020830191908190818101908190610ba49060608c01908c01614b24565b6001600160e01b0319168152602001610bc060608b018b61538b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c001610c5361014087016101208801614b24565b6001600160e01b0319168152602001610c706101c087018761538b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610cba8261062d61016087018761538b565b61067181836113d5565b610162546001600160a01b031681565b610cdc611a0d565b6001600160a01b0316610ced610d80565b6001600160a01b031614610d36576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b610dc2611a0d565b6001600160a01b0316610dd3610d80565b6001600160a01b031614610e1c576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f90610953908490614ea9565b610e86611a0d565b6001600160a01b0316610e97610d80565b6001600160a01b031614610ee0576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b610ee983610f00565b610ef282610fcd565b610efb8161117e565b505050565b610f08611a0d565b6001600160a01b0316610f19610d80565b6001600160a01b031614610f62576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd0391610fa2916001600160a01b03909116908490614ebd565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b610fd5611a0d565b6001600160a01b0316610fe6610d80565b6001600160a01b03161461102f576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e9161107491600160a01b90910465ffffffffffff16908490615372565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b03166110ba611a0d565b6001600160a01b0316146110e95760405162461bcd60e51b81526004016110e0906152e2565b60405180910390fd5b608081015161110a5760405162461bcd60e51b81526004016110e090615074565b600061111582611a11565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a9061115c908390614f75565b60405180910390a15050565b61117484848484611b99565b61067184836113d5565b611186611a0d565b6001600160a01b0316611197610d80565b6001600160a01b0316146111e0576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f1319161122591600160d01b90910465ffffffffffff16908490615372565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b61125d611a0d565b6001600160a01b031661126e610d80565b6001600160a01b0316146112b7576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b6001600160a01b0381166112fc5760405162461bcd60e51b81526004018080602001828103825260268152602001806154886026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b61136061420f565b61136861420f565b6001600160a01b038316611385576355575f5d60e11b81526113b6565b6322ba176160e21b81526040516113a0908490602001614ea9565b60408051601f1981840301815291905260208201525b90505b919050565b6113c782611c65565b6113d18282611d2f565b5050565b6000806113e28484611fde565b9150915060008060006113f58787612077565b92509250925060008061154e6040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506115498a600001518a60000151612126565b6121f8565b885191935091506001600160e01b0319166355575f5d60e11b14156115cd5785516001600160e01b0319166355575f5d60e11b141561158c57600080fd5b813410156115ac5760405162461bcd60e51b81526004016110e0906152ba565b813411156115c8576115c86115c1348461236f565b33906123cc565b61161c565b85516001600160e01b0319166355575f5d60e11b141561161c57803410156116075760405162461bcd60e51b81526004016110e0906152ba565b8034111561161c5761161c6115c1348361236f565b505050505050505050565b600061163230612464565b15905090565b600054610100900460ff16806116515750611651611627565b8061165f575060005460ff16155b61169a5760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff161580156116c5576000805460ff1961ff0019909116610100171660011790555b80156116d7576000805461ff00191690555b50565b600054610100900460ff16806116f357506116f3611627565b80611701575060005460ff16155b61173c5760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff16158015611767576000805460ff1961ff0019909116610100171660011790555b6000611771611a0d565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156116d7576000805461ff001916905550565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff16806118965750611896611627565b806118a4575060005460ff16155b6118df5760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff1615801561190a576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610671576000805461ff001916905550505050565b600054610100900460ff16806119565750611956611627565b80611964575060005460ff16155b61199f5760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff161580156119ca576000805460ff1961ff0019909116610100171660011790555b6116c56040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b81525061246a565b3390565b60e08101516000906001600160e01b031916632611a13360e11b1480611a45575060e08201516001600160e01b0319908116145b15611aba578151602083015151611a5b9061252a565b606084015151611a6a9061252a565b846080015160405160200180856001600160a01b031681526020018481526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506113b9565b8151602083015151611acb9061252a565b606084015151611ada9061252a565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611b46578181015183820152602001611b2e565b50505050905090810190601f168015611b735780820380516001836020036101000a031916815260200191505b5096505050505050506040516020818303038152906040528051906020012090506113b9565b611ba384846113be565b611bad82826113be565b60408401516001600160a01b031615611c095781516001600160a01b031615611c095783604001516001600160a01b031682600001516001600160a01b031614611c095760405162461bcd60e51b81526004016110e090615277565b60408201516001600160a01b0316156106715783516001600160a01b0316156106715783600001516001600160a01b031682604001516001600160a01b0316146106715760405162461bcd60e51b81526004016110e0906150e6565b60a08101511580611c795750428160a00151105b611cca576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c08101511580611cde5750428160c00151115b6116d7576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b6080820151611db45781516001600160a01b031615611daf5781516001600160a01b0316611d5b611a0d565b6001600160a01b031614611daf576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b6113d1565b81516001600160a01b0316611dc7611a0d565b6001600160a01b0316146113d1576000611de083612594565b9050611df883600001516001600160a01b0316612464565b15611f34578251630b135d3f60e11b906001600160a01b0316631626ba7e611e1f84612684565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611e72578181015183820152602001611e5a565b50505050905090810190601f168015611e9f5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611ebd57600080fd5b505afa158015611ed1573d6000803e3d6000fd5b505050506040513d6020811015611ee757600080fd5b50516001600160e01b03191614611f2f5760405162461bcd60e51b815260040180806020018281038252602b8152602001806154f2602b913960400191505060405180910390fd5b610efb565b82516001600160a01b0316611f5283611f4c84612684565b906126d0565b6001600160a01b031614611f975760405162461bcd60e51b81526004018080602001828103825260228152602001806154d06022913960400191505060405180910390fd5b82516001600160a01b0316610efb576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b611fe661420f565b611fee61420f565b6020840151516060840151516120049190612750565b80519092506001600160e01b03191661202f5760405162461bcd60e51b81526004016110e09061524b565b6060840151516020840151516120459190612750565b80519091506001600160e01b0319166120705760405162461bcd60e51b81526004016110e09061524b565b9250929050565b61207f614227565b612087614227565b61208f61424a565b600061209a86611a11565b905060006120a786611a11565b905060006120b3611a0d565b88519091506001600160a01b03166120d2576001600160a01b03811688525b86516001600160a01b03166120ee576001600160a01b03811687525b6120f788612790565b955061210287612790565b945061211a888885858a604001518a60400151612889565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b1415612149575060016121f2565b6001600160e01b031982166355575f5d60e11b141561216a575060026121f2565b6001600160e01b031983166322ba176160e21b141561218b575060016121f2565b6001600160e01b031982166322ba176160e21b14156121ac575060026121f2565b6001600160e01b0319831663025ceed960e61b14156121cd575060016121f2565b6001600160e01b0319821663025ceed960e61b14156121ee575060026121f2565b5060005b92915050565b8251602090810151835190910151600183600281111561221457fe5b14156122965760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526122669086908690612a44565b9150612291846000015160000151856000015160200151866080015188602001518860600151612cbe565b612367565b60028360028111156122a457fe5b14156123215760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526122f69085908790612a44565b9050612291856000015160000151866000015160200151876080015187602001518960600151612cbe565b845180516020918201516080880151928701516060890151612344949190612cbe565b835180516020918201516080870151928801516060880151612367949190612cbe565b935093915050565b6000828211156123c6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612417576040519150601f19603f3d011682016040523d82523d6000602084013e61241c565b606091505b5050905080610efb576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff16806124835750612483611627565b80612491575060005460ff16155b6124cc5760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff161580156124f7576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca558015610efb576000805461ff0019169055505050565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d82600001516125c98460200151612e42565b84604001516125db8660600151612e42565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b600061268e612eb2565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60008151604114612728576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61274686828585612ef2565b9695505050505050565b61275861420f565b60006127648484613148565b80519091506001600160e01b031916612789576127818385613148565b9150506121f2565b90506121f2565b612798614227565b60e08201516001600160e01b031916632611a13360e11b14156127e45760008261010001518060200190518101906127d09190614c35565b805183526020908101519083015250612870565b60e08201516001600160e01b0319166323d235ef60e01b141561283c57600082610100015180602001905181019061281c9190614cc1565b805183526020808201519084015260409081015115159083015250612870565b60e08201516001600160e01b0319908116141561285857612870565b60405162461bcd60e51b81526004016110e0906151dd565b8051516113b957815161288290613364565b8152919050565b61289161424a565b60006128a18860800151876133ff565b905060006128b38860800151876133ff565b905060006128c58a8a85858a8a613424565b905089602001516020015160001415806128e6575060608901516020015115155b156129095780516129095760405162461bcd60e51b81526004016110e090615156565b60608a01516020015115158061292557506020808a0151015115155b1561294e57600081602001511161294e5760405162461bcd60e51b81526004016110e090615156565b60808a0151156129a157851561298057805161296b9084906134bd565b600089815261012f60205260409020556129a1565b60208101516129909084906134bd565b600089815261012f60205260409020555b6080890151156129f45784156129d65760208101516129c19083906134bd565b600088815261012f60205260409020556129f4565b80516129e39083906134bd565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c45092612a2f928c928c929190614f7e565b60405180910390a19998505050505050505050565b6000612a5d84600001516020015183866040015161351e565b90506000612a87828660000151602001518760800151868960000151600001518a606001516135c0565b8551805186515160208089015193015160808a015160608b0151959650612ab595939492938792919061361d565b90508460400151516001148015612ad157508360400151516001145b8015612b2657508460400151600081518110612ae957fe5b6020026020010151600001516001600160a01b03168460400151600081518110612b0f57fe5b6020026020010151600001516001600160a01b0316145b15612c3c57604080516001808252818301909252600091816020015b612b4a614264565b815260200190600190039081612b425790505090508460400151600081518110612b7057fe5b60200260200101516000015181600081518110612b8957fe5b60209081029190910101516001600160a01b03909116905260408601518051600090612bb157fe5b6020026020010151602001518560400151600081518110612bce57fe5b6020026020010151602001510181600081518110612be857fe5b6020026020010151602001906001600160601b031690816001600160601b031681525050612c3286600001516000015183886000015160200151848a608001518b60600151613722565b509150612c959050565b612c6685600001516000015182876000015160200151886040015189608001518a60600151613722565b50855180516020909101516040870151608089015160608a0151949550612c91948693929190613722565b5090505b612cb685600001516000015182876080015187602001518960600151612cbe565b509392505050565b6000825111612cdf5760405162461bcd60e51b81526004016110e0906150a2565b600084815b6001855103811015612dae576000612d25868381518110612d0157fe5b6020026020010151602001516001600160601b0316896137d790919063ffffffff16565b9050612d5a868381518110612d3657fe5b6020026020010151602001516001600160601b0316856134bd90919063ffffffff16565b93508015612da557612d6c838261236f565b9250612da560405180604001604052808b81526020018381525088888581518110612d9357fe5b602002602001015160000151886137ef565b50600101612ce4565b50600084600186510381518110612dc157fe5b60200260200101519050612deb81602001516001600160601b0316846134bd90919063ffffffff16565b92508261271014612e0e5760405162461bcd60e51b81526004016110e090615214565b8115612e3857612e3860405180604001604052808a815260200184815250878360000151876137ef565b5050505050505050565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b08612e72836000015161252a565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b6000612eed7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612ee0613bf7565b612ee8613bfd565b613c03565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612f535760405162461bcd60e51b81526004018080602001828103825260228152602001806154ae6022913960400191505060405180910390fd5b6000601e8560ff16111561302d576004850360ff16601b1480612f7c57506004850360ff16601c145b612fb75760405162461bcd60e51b815260040180806020018281038252602281526020018061554b6022913960400191505060405180910390fd5b6001612fc287613c65565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561301c573d6000803e3d6000fd5b5050506020604051035190506130e4565b8460ff16601b148061304257508460ff16601c145b61307d5760405162461bcd60e51b815260040180806020018281038252602281526020018061554b6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156130d7573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b03811661313f576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b61315061420f565b825182516001600160e01b031982166355575f5d60e11b14156131bb576001600160e01b031981166355575f5d60e11b14156131905784925050506121f2565b50506040805180820182526000808252825160208181019094529081529181019190915290506121f2565b6001600160e01b031982166322ba176160e21b1415613200576001600160e01b031981166322ba176160e21b1415613190576131f78585613cb6565b925050506121f2565b6001600160e01b031982166339d690a360e11b141561323c576001600160e01b031981166339d690a360e11b1415613190576131f78585613cb6565b6001600160e01b0319821663025ceed960e61b1415613278576001600160e01b0319811663025ceed960e61b1415613190576131f78585613cb6565b6001600160e01b031982166000908152606560205260409020546001600160a01b0316801561332d576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb0906132cf9089908990600401615307565b60006040518083038186803b1580156132e757600080fd5b505afa1580156132fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526133239190810190614baa565b93505050506121f2565b6001600160e01b0319838116908316141561334c576133238686613cb6565b60405162461bcd60e51b81526004016110e090615006565b60408051600180825281830190925260609160009190816020015b613387614264565b81526020019060019003908161337f57905050905082816000815181106133aa57fe5b6020026020010151600001906001600160a01b031690816001600160a01b031681525050612710816000815181106133de57fe5b6020908102919091018101516001600160601b039092169101529050919050565b60008261340e575060006121f2565b50600090815261012f6020526040902054919050565b61342c61424a565b60008061343a898887613d13565b9150915060008061344c8a8988613d13565b915091508381118061346657508381148015613466575083155b156134925761348784848c60200151602001518d6060015160200151613d8c565b945050505050612746565b6134ae8b60200151602001518c60600151602001518484613e11565b9b9a5050505050505050505050565b600082820183811015613517576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b602082015160009065ffffffffffff16815b83518110156135ab5761271084828151811061354857fe5b6020026020010151602001516001600160601b0316111561357b5760405162461bcd60e51b81526004016110e0906151ae565b83818151811061358757fe5b6020026020010151602001516001600160601b031682019150806001019050613530565b5061313f6135b986836137d7565b86906134bd565b60008060006135e28989886040015189602001510165ffffffffffff16613e97565b9092509050801561361157613611604051806040016040528087815260200183815250888860000151876137ef565b50979650505050505050565b60008061362988613eb9565b90508051600114801561363d575086516001145b801561368a57508660008151811061365157fe5b6020026020010151600001516001600160a01b03168160008151811061367357fe5b6020026020010151600001516001600160a01b0316145b156136db576113888160008151811061369f57fe5b6020026020010151602001516001600160601b031611156136d25760405162461bcd60e51b81526004016110e09061503d565b85915050613717565b6000806136ec8b8989868a8a613722565b915091506113888111156137125760405162461bcd60e51b81526004016110e09061503d565b509150505b979650505050505050565b846000805b85518110156137cb5761376386828151811061373f57fe5b6020026020010151602001516001600160601b0316836134bd90919063ffffffff16565b91506000613792848989858151811061377857fe5b6020026020010151602001516001600160601b0316613e97565b909450905080156137c2576137c260405180604001604052808c81526020018381525087898581518110612d9357fe5b50600101613727565b50965096945050505050565b60006135176127106137e9858561402e565b90614087565b8351516001600160e01b0319166339d690a360e11b1415613935576000808560000151602001518060200190518101906138299190614908565b9150915085602001516001146138515760405162461bcd60e51b81526004016110e09061512a565b6001600160a01b0385163014156138c957604051632142170760e11b81526001600160a01b038316906342842e0e9061389290309088908690600401614ed7565b600060405180830381600087803b1580156138ac57600080fd5b505af11580156138c0573d6000803e3d6000fd5b5050505061392e565b604051637b84dc8360e11b81526001600160a01b0384169063f709b906906138fb908590899089908790600401614fdc565b600060405180830381600087803b15801561391557600080fd5b505af1158015613929573d6000803e3d6000fd5b505050505b5050610671565b8351516001600160e01b0319166322ba176160e21b1415613a9357600084600001516020015180602001905181019061396e91906146fc565b90506001600160a01b038416301415613a2557602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb916139b2918791600401614f33565b602060405180830381600087803b1580156139cc57600080fd5b505af11580156139e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a049190614af2565b613a205760405162461bcd60e51b81526004016110e09061517f565b613a8d565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c391613a5a91859189918991600401614fdc565b600060405180830381600087803b158015613a7457600080fd5b505af1158015613a88573d6000803e3d6000fd5b505050505b50610671565b8351516001600160e01b03191663025ceed960e61b1415613b5057600080856000015160200151806020019051810190613acd9190614908565b90925090506001600160a01b038516301415613b18576020860151604051637921219560e11b81526001600160a01b0384169163f242432a9161389291309189918791600401614efb565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee9916138fb9186918a918a91889190600401614f99565b8351516001600160e01b0319166355575f5d60e11b1415613b99576001600160a01b0382163014613b94576020840151613b94906001600160a01b038416906123cc565b610671565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf190613bc99087908790879060040161532c565b600060405180830381600087803b158015613be357600080fd5b505af1158015612e38573d6000803e3d6000fd5b60c95490565b60ca5490565b6000838383613c106140ee565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b613cbe61420f565b60208084015180519082012083820151805192019190912080821415613ce85784925050506121f2565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b6000808215613d52576020808601510151613d2e908561236f565b9150613d4b856060015160200151866020015160200151846140f2565b9050612367565b606085015160200151613d65908561236f565b9050613d82856020015160200151866060015160200151836140f2565b9150935093915050565b613d9461424a565b6000613da18585856140f2565b905085811115613df8576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b613e1961424a565b6000613e268387876140f2565b905083811115613e7d576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b600080613ead85613ea886866137d7565b614158565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480613eed575081516001600160e01b0319166339d690a360e11b145b15613fa3576000808360200151806020019051810190613f0d9190614908565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a90613f449085908590600401614f33565b600060405180830381600087803b158015613f5e57600080fd5b505af1158015613f72573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f9a9190810190614ac0565b925050506113b9565b81516001600160e01b03191662737ea960e61b1415613fe45760008260200151806020019051810190613fd69190614718565b6080015192506113b9915050565b81516001600160e01b03191663d8f960c160e01b141561402657600082602001518060200190518101906140189190614815565b6060015192506113b9915050565b506060919050565b60008261403d575060006121f2565b8282028284828161404a57fe5b04146135175760405162461bcd60e51b815260040180806020018281038252602181526020018061556d6021913960400191505060405180910390fd5b60008082116140dd576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816140e657fe5b049392505050565b4690565b60006140ff848484614180565b15614142576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b614150836137e9868561402e565b949350505050565b600080828411156141775761416d848461236f565b9150829050612070565b50600093915050565b6000826141c7576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8115806141d2575083155b156141df57506000613517565b600083806141e957fe5b85840990506141f8858461402e565b614204826103e861402e565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b80356113b98161545c565b600082601f830112614296578081fd5b813560206142ab6142a6836153f2565b6153cf565b82815281810190858301838502870184018810156142c7578586fd5b855b858110156142ee5781356142dc8161545c565b845292840192908401906001016142c9565b5090979650505050505050565b600082601f83011261430b578081fd5b8135602061431b6142a6836153f2565b8281528181019085830183850287018401881015614337578586fd5b855b858110156142ee57813561434c81615471565b84529284019290840190600101614339565b600082601f83011261436e578081fd5b8151602061437e6142a6836153f2565b82815281810190858301855b858110156142ee576143a1898684518b01016144d5565b8452928401929084019060010161438a565b600082601f8301126143c3578081fd5b815160206143d36142a6836153f2565b828152818101908583016040808602880185018910156143f1578687fd5b865b868110156144605781838b031215614409578788fd5b81518281018181106001600160401b038211171561442357fe5b835283516144308161545c565b8152838701516001600160601b038116811461444a57898afd5b81880152855293850193918101916001016143f3565b509198975050505050505050565b805180151581146113b957600080fd5b80356113b981615471565b600082601f830112614499578081fd5b81356144a76142a68261540f565b8181528460208386010111156144bb578283fd5b816020850160208301379081016020019190915292915050565b600082601f8301126144e5578081fd5b81516144f36142a68261540f565b818152846020838601011115614507578283fd5b614150826020830160208701615430565b60006101e0828403121561452a578081fd5b50919050565b60006040808385031215614542578182fd5b80518181016001600160401b03828210818311171561455d57fe5b81845282945085358181111561457257600080fd5b860180880385131561458357600080fd5b60808401838110838211171561459557fe5b9094528335936145a485615471565b938252602084013593818511156145ba57600080fd5b6145c688868301614489565b60608501525050815260209384013593019290925292915050565b60006101208083850312156145f4578182fd5b6145fd816153cf565b9150506146098261427b565b815260208201356001600160401b038082111561462557600080fd5b61463185838601614530565b60208401526146426040850161427b565b6040840152606084013591508082111561465b57600080fd5b61466785838601614530565b60608401526080840135608084015260a084013560a084015260c084013560c084015261469660e0850161447e565b60e0840152610100915081840135818111156146b157600080fd5b6146bd86828701614489565b8385015250505092915050565b803565ffffffffffff811681146113b957600080fd5b6000602082840312156146f1578081fd5b81356135178161545c565b60006020828403121561470d578081fd5b81516135178161545c565b6000806040838503121561472a578081fd5b82516147358161545c565b60208401519092506001600160401b0380821115614751578283fd5b9084019060c08287031215614764578283fd5b61476e60c06153cf565b82518152602083015182811115614783578485fd5b61478f888286016144d5565b602083015250604083015160408201526060830151828111156147b0578485fd5b6147bc888286016143b3565b6060830152506080830151828111156147d3578485fd5b6147df888286016143b3565b60808301525060a0830151828111156147f6578485fd5b6148028882860161435e565b60a0830152508093505050509250929050565b60008060408385031215614827578182fd5b82516148328161545c565b60208401519092506001600160401b038082111561484e578283fd5b9084019060a08287031215614861578283fd5b61486b60a06153cf565b82518152602083015182811115614880578485fd5b61488c888286016144d5565b6020830152506040830151828111156148a3578485fd5b6148af888286016143b3565b6040830152506060830151828111156148c6578485fd5b6148d2888286016143b3565b6060830152506080830151828111156148e9578485fd5b6148f58882860161435e565b6080830152508093505050509250929050565b6000806040838503121561491a578182fd5b82516149258161545c565b6020939093015192949293505050565b600080600080600060a0868803121561494c578081fd5b85356149578161545c565b945060208601356149678161545c565b935060408601359250606086013561497e8161545c565b9150608086013561498e8161545c565b809150509295509295909350565b6000806000806000806000806000806101408b8d0312156149bb578788fd5b6149c48b61427b565b99506149d260208c0161427b565b985060408b013597506149e760608c0161427b565b96506149f560808c0161427b565b9550614a0360a08c0161427b565b945060c08b01356001600160401b0380821115614a1e578586fd5b614a2a8e838f016142fb565b955060e08d0135915080821115614a3f578485fd5b50614a4c8d828e01614286565b935050614a5c6101008c0161447e565b9150614a6b6101208c0161427b565b90509295989b9194979a5092959850565b600080600060608486031215614a90578081fd5b8335614a9b8161545c565b9250614aa9602085016146ca565b9150614ab7604085016146ca565b90509250925092565b600060208284031215614ad1578081fd5b81516001600160401b03811115614ae6578182fd5b614150848285016143b3565b600060208284031215614b03578081fd5b6135178261446e565b600060208284031215614b1d578081fd5b5035919050565b600060208284031215614b35578081fd5b813561351781615471565b60008060408385031215614b52578182fd5b8235614b5d81615471565b91506020830135614b6d8161545c565b809150509250929050565b600060208284031215614b89578081fd5b81356001600160401b03811115614b9e578182fd5b61415084828501614518565b600060208284031215614bbb578081fd5b81516001600160401b0380821115614bd1578283fd5b9083019060408286031215614be4578283fd5b604051604081018181108382111715614bf957fe5b6040528251614c0781615471565b8152602083015182811115614c1a578485fd5b614c26878286016144d5565b60208301525095945050505050565b600060208284031215614c46578081fd5b81516001600160401b0380821115614c5c578283fd5b9083019060408286031215614c6f578283fd5b604051604081018181108382111715614c8457fe5b604052825182811115614c95578485fd5b614ca1878286016143b3565b825250602083015182811115614cb5578485fd5b614c26878286016143b3565b600060208284031215614cd2578081fd5b81516001600160401b0380821115614ce8578283fd5b9083019060608286031215614cfb578283fd5b604051606081018181108382111715614d1057fe5b604052825182811115614d21578485fd5b614d2d878286016143b3565b825250602083015182811115614d41578485fd5b614d4d878286016143b3565b602083015250614d5f6040840161446e565b604082015295945050505050565b600060208284031215614d7e578081fd5b81356001600160401b03811115614d93578182fd5b614150848285016145e1565b60008060008060808587031215614db4578182fd5b84356001600160401b0380821115614dca578384fd5b614dd6888389016145e1565b95506020870135915080821115614deb578384fd5b614df788838901614489565b94506040870135915080821115614e0c578384fd5b614e18888389016145e1565b93506060870135915080821115614e2d578283fd5b50614e3a87828801614489565b91505092959194509250565b600060208284031215614e57578081fd5b613517826146ca565b600063ffffffff60e01b82511683526020820151604060208501528051806040860152614e94816060870160208501615430565b601f01601f1916939093016060019392505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b60006040825261531a6040830185614e60565b828103602084015261313f8185614e60565b60006060825284516040606084015261534860a0840182614e60565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e198436030181126153a1578283fd5b8301803591506001600160401b038211156153ba578283fd5b60200191503681900382131561207057600080fd5b6040518181016001600160401b03811182821017156153ea57fe5b604052919050565b60006001600160401b0382111561540557fe5b5060209081020190565b60006001600160401b0382111561542257fe5b50601f01601f191660200190565b60005b8381101561544b578181015183820152602001615433565b838111156106715750506000910152565b6001600160a01b03811681146116d757600080fd5b6001600160e01b0319811681146116d757600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122049f18c54ded4ab683a0ee0077157546cfeee4c95c67388ee015f890225860da764736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101145760003560e01c80638da5cb5b116100a0578063d6ca6ab711610064578063d6ca6ab7146102c7578063e2864fe3146102e7578063e99a3f8014610307578063eae3ad6f1461031a578063f2fde38b1461033a57610114565b80638da5cb5b1461022e578063b0e21e8a14610243578063b39deb4614610267578063b74c8e9a14610287578063bc158c2d146102a757610114565b806330c642f1116100e757806330c642f1146101a45780633be89922146101c457806367d49a3b146101e45780636d8f0694146101f7578063715018a61461021957610114565b80630d5f7d35146101195780631372a6251461012e57806320158c441461014e5780632bed54d614610184575b600080fd5b61012c610127366004614b78565b61035a565b005b34801561013a57600080fd5b5061012c610149366004614935565b610677565b34801561015a57600080fd5b5061016e610169366004614b0c565b61074b565b60405161017b9190614f75565b60405180910390f35b34801561019057600080fd5b5061012c61019f36600461499c565b61075e565b3480156101b057600080fd5b5061012c6101bf366004614b40565b61088f565b3480156101d057600080fd5b5061012c6101df3660046146e0565b61095f565b61012c6101f2366004614b78565b6109e4565b34801561020357600080fd5b5061020c610cc4565b60405161017b9190614ea9565b34801561022557600080fd5b5061012c610cd4565b34801561023a57600080fd5b5061020c610d80565b34801561024f57600080fd5b50610258610d8f565b60405161017b93929190614f4c565b34801561027357600080fd5b5061012c610282366004614b40565b610dba565b34801561029357600080fd5b5061012c6102a2366004614a7c565b610e7e565b3480156102b357600080fd5b5061012c6102c23660046146e0565b610f00565b3480156102d357600080fd5b5061012c6102e2366004614e46565b610fcd565b3480156102f357600080fd5b5061012c610302366004614d6d565b6110a7565b61012c610315366004614d9f565b611168565b34801561032657600080fd5b5061012c610335366004614e46565b61117e565b34801561034657600080fd5b5061012c6103553660046146e0565b611255565b600061037461036f60c0840160a085016146e0565b611358565b6040805161012081019091529091506000908061039460208601866146e0565b6001600160a01b03168152602001604051806040016040528060405180604001604052808860400160208101906103cb9190614b24565b6001600160e01b03191681526020016103e760608a018a61538b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506020888101359281019290925291835282810191909152604080518082018252868152608080890135938201939093529083015260c080870135606084015260e08701359183019190915261010086013560a08301520161048a61014086016101208701614b24565b6001600160e01b03191681526020016104a761014086018661538b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815180830183528781526101808901356020828101919091528201528082018390528151608081018352949550919391925060608084019291829182820191829161053b91908c01908c01614b24565b6001600160e01b031916815260200161055760608b018b61538b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a089013560209283015291835282018190526040820181905260608201526080016105c661014087016101208801614b24565b6001600160e01b03191681526020016105e36101c087018761538b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525090506106678261062d61016087018761538b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506113be92505050565b61067182826113d5565b50505050565b600054610100900460ff16806106905750610690611627565b8061069e575060005460ff16155b6106d95760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff16158015610704576000805460ff1961ff0019909116610100171660011790555b61070c611638565b6107146116da565b61071e86866117d3565b61072984848461187d565b61073161193d565b8015610743576000805461ff00191690555b505050505050565b61012f6020526000908152604090205481565b600054610100900460ff16806107775750610777611627565b80610785575060005460ff16155b6107c05760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff161580156107eb576000805460ff1961ff0019909116610100171660011790555b6107f3611638565b6107fb6116da565b6108058b8b6117d3565b61081089898961187d565b61081861193d565b60005b855181101561085c5761085486828151811061083357fe5b602002602001015186838151811061084757fe5b60200260200101516108f1565b60010161081b565b506108678383610e1c565b61087086611255565b8015610882576000805461ff00191690555b5050505050505050505050565b610897611a0d565b6001600160a01b03166108a8610d80565b6001600160a01b0316146108f1576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152609760205260409081902080546001600160a01b0319166001600160a01b038516179055517f4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c315359390610953908490614ea9565b60405180910390a25050565b610967611a0d565b6001600160a01b0316610978610d80565b6001600160a01b0316146109c1576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b61016280546001600160a01b0319166001600160a01b0392909216919091179055565b60006109f961036f60c0840160a085016146e0565b60408051610120810190915290915060009080610a1960208601866146e0565b6001600160a01b0316815260200160405180604001604052808581526020018660800135815250815260200160006001600160a01b0316815260200160405180604001604052806040518060400160405280886040016020810190610a7e9190614b24565b6001600160e01b0319168152602001610a9a60608a018a61538b565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505091525081526020878101359181019190915290825260c08601359082015260e085013560408201526101008501356060820152608001610b1561014086016101208701614b24565b6001600160e01b0319168152602001610b3261014086018661538b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506040805161012081018252828152815160808101835294955091939192506020830191908190818101908190610ba49060608c01908c01614b24565b6001600160e01b0319168152602001610bc060608b018b61538b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050918352506101a08901356020928301529183528281018290526040805180820182528881526101808a013592810192909252830152606082018190526080820181905260a082015260c001610c5361014087016101208801614b24565b6001600160e01b0319168152602001610c706101c087018761538b565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509050610cba8261062d61016087018761538b565b61067181836113d5565b610162546001600160a01b031681565b610cdc611a0d565b6001600160a01b0316610ced610d80565b6001600160a01b031614610d36576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b610161546001600160a01b0381169065ffffffffffff600160a01b8204811691600160d01b90041683565b610dc2611a0d565b6001600160a01b0316610dd3610d80565b6001600160a01b031614610e1c576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b6001600160e01b031982166000818152606560205260409081902080546001600160a01b0319166001600160a01b038516179055517fd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f90610953908490614ea9565b610e86611a0d565b6001600160a01b0316610e97610d80565b6001600160a01b031614610ee0576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b610ee983610f00565b610ef282610fcd565b610efb8161117e565b505050565b610f08611a0d565b6001600160a01b0316610f19610d80565b6001600160a01b031614610f62576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b610161546040517fa4b009cc442411b602eaf94bc0579b6abdb8fd90b4ef5b9426e270038906bd0391610fa2916001600160a01b03909116908490614ebd565b60405180910390a161016180546001600160a01b0319166001600160a01b0392909216919091179055565b610fd5611a0d565b6001600160a01b0316610fe6610d80565b6001600160a01b03161461102f576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b610161546040517f70bba4f904a93ba5c1af3a1bb602bc9c058551dbe963dfe0b6cb5bc11c5fea9e9161107491600160a01b90910465ffffffffffff16908490615372565b60405180910390a1610161805465ffffffffffff909216600160a01b0265ffffffffffff60a01b19909216919091179055565b80516001600160a01b03166110ba611a0d565b6001600160a01b0316146110e95760405162461bcd60e51b81526004016110e0906152e2565b60405180910390fd5b608081015161110a5760405162461bcd60e51b81526004016110e090615074565b600061111582611a11565b600081815261012f6020526040908190206000199055519091507fe8d9861dbc9c663ed3accd261bbe2fe01e0d3d9e5f51fa38523b265c7757a93a9061115c908390614f75565b60405180910390a15050565b61117484848484611b99565b61067184836113d5565b611186611a0d565b6001600160a01b0316611197610d80565b6001600160a01b0316146111e0576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b610161546040517fa8af9093caa9beb61d20432227c66258ceef926f21879b80f3adf22a4d19f1319161122591600160d01b90910465ffffffffffff16908490615372565b60405180910390a1610161805465ffffffffffff909216600160d01b026001600160d01b03909216919091179055565b61125d611a0d565b6001600160a01b031661126e610d80565b6001600160a01b0316146112b7576040805162461bcd60e51b8152602060048201819052602482015260008051602061558e833981519152604482015290519081900360640190fd5b6001600160a01b0381166112fc5760405162461bcd60e51b81526004018080602001828103825260268152602001806154886026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b61136061420f565b61136861420f565b6001600160a01b038316611385576355575f5d60e11b81526113b6565b6322ba176160e21b81526040516113a0908490602001614ea9565b60408051601f1981840301815291905260208201525b90505b919050565b6113c782611c65565b6113d18282611d2f565b5050565b6000806113e28484611fde565b9150915060008060006113f58787612077565b92509250925060008061154e6040518060a0016040528060405180604001604052808b8152602001876000015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506040518060a0016040528060405180604001604052808b8152602001886020015181525081526020018760000151815260200187602001518152602001609760008b600001516001600160e01b0319166001600160e01b031916815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031681526020018b600001516001600160a01b03168152506115498a600001518a60000151612126565b6121f8565b885191935091506001600160e01b0319166355575f5d60e11b14156115cd5785516001600160e01b0319166355575f5d60e11b141561158c57600080fd5b813410156115ac5760405162461bcd60e51b81526004016110e0906152ba565b813411156115c8576115c86115c1348461236f565b33906123cc565b61161c565b85516001600160e01b0319166355575f5d60e11b141561161c57803410156116075760405162461bcd60e51b81526004016110e0906152ba565b8034111561161c5761161c6115c1348361236f565b505050505050505050565b600061163230612464565b15905090565b600054610100900460ff16806116515750611651611627565b8061165f575060005460ff16155b61169a5760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff161580156116c5576000805460ff1961ff0019909116610100171660011790555b80156116d7576000805461ff00191690555b50565b600054610100900460ff16806116f357506116f3611627565b80611701575060005460ff16155b61173c5760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff16158015611767576000805460ff1961ff0019909116610100171660011790555b6000611771611a0d565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156116d7576000805461ff001916905550565b60976020527f4532fa16f071d6234e30e1a1e69b9806f04095edf37a1ca7a25c8d6af7861cc080546001600160a01b039283166001600160a01b0319918216179091557f30a684095c937b5aa064dcf94f9903a7d808e3efb22d8389dbd43080ad4ed3d5805493909216928116831790915563025ceed960e61b6000527f4b5822151ea34b7c8d9e37c3e466bcecb631efe6a9f26a4a4054110a93dd316f80549091169091179055565b600054610100900460ff16806118965750611896611627565b806118a4575060005460ff16155b6118df5760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff1615801561190a576000805460ff1961ff0019909116610100171660011790555b61016280546001600160a01b0319166001600160a01b0384161790558015610671576000805461ff001916905550505050565b600054610100900460ff16806119565750611956611627565b80611964575060005460ff16155b61199f5760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff161580156119ca576000805460ff1961ff0019909116610100171660011790555b6116c56040518060400160405280600881526020016745786368616e676560c01b815250604051806040016040528060018152602001601960f91b81525061246a565b3390565b60e08101516000906001600160e01b031916632611a13360e11b1480611a45575060e08201516001600160e01b0319908116145b15611aba578151602083015151611a5b9061252a565b606084015151611a6a9061252a565b846080015160405160200180856001600160a01b031681526020018481526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506113b9565b8151602083015151611acb9061252a565b606084015151611ada9061252a565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611b46578181015183820152602001611b2e565b50505050905090810190601f168015611b735780820380516001836020036101000a031916815260200191505b5096505050505050506040516020818303038152906040528051906020012090506113b9565b611ba384846113be565b611bad82826113be565b60408401516001600160a01b031615611c095781516001600160a01b031615611c095783604001516001600160a01b031682600001516001600160a01b031614611c095760405162461bcd60e51b81526004016110e090615277565b60408201516001600160a01b0316156106715783516001600160a01b0316156106715783600001516001600160a01b031682604001516001600160a01b0316146106715760405162461bcd60e51b81526004016110e0906150e6565b60a08101511580611c795750428160a00151105b611cca576040805162461bcd60e51b815260206004820152601d60248201527f4f726465722073746172742076616c69646174696f6e206661696c6564000000604482015290519081900360640190fd5b60c08101511580611cde5750428160c00151115b6116d7576040805162461bcd60e51b815260206004820152601b60248201527f4f7264657220656e642076616c69646174696f6e206661696c65640000000000604482015290519081900360640190fd5b6080820151611db45781516001600160a01b031615611daf5781516001600160a01b0316611d5b611a0d565b6001600160a01b031614611daf576040805162461bcd60e51b815260206004820152601660248201527536b0b5b2b91034b9903737ba103a3c1039b2b73232b960511b604482015290519081900360640190fd5b6113d1565b81516001600160a01b0316611dc7611a0d565b6001600160a01b0316146113d1576000611de083612594565b9050611df883600001516001600160a01b0316612464565b15611f34578251630b135d3f60e11b906001600160a01b0316631626ba7e611e1f84612684565b856040518363ffffffff1660e01b81526004018083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611e72578181015183820152602001611e5a565b50505050905090810190601f168015611e9f5780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b158015611ebd57600080fd5b505afa158015611ed1573d6000803e3d6000fd5b505050506040513d6020811015611ee757600080fd5b50516001600160e01b03191614611f2f5760405162461bcd60e51b815260040180806020018281038252602b8152602001806154f2602b913960400191505060405180910390fd5b610efb565b82516001600160a01b0316611f5283611f4c84612684565b906126d0565b6001600160a01b031614611f975760405162461bcd60e51b81526004018080602001828103825260228152602001806154d06022913960400191505060405180910390fd5b82516001600160a01b0316610efb576040805162461bcd60e51b815260206004820152600860248201526737379036b0b5b2b960c11b604482015290519081900360640190fd5b611fe661420f565b611fee61420f565b6020840151516060840151516120049190612750565b80519092506001600160e01b03191661202f5760405162461bcd60e51b81526004016110e09061524b565b6060840151516020840151516120459190612750565b80519091506001600160e01b0319166120705760405162461bcd60e51b81526004016110e09061524b565b9250929050565b61207f614227565b612087614227565b61208f61424a565b600061209a86611a11565b905060006120a786611a11565b905060006120b3611a0d565b88519091506001600160a01b03166120d2576001600160a01b03811688525b86516001600160a01b03166120ee576001600160a01b03811687525b6120f788612790565b955061210287612790565b945061211a888885858a604001518a60400151612889565b93505050509250925092565b60006001600160e01b031983166355575f5d60e11b1415612149575060016121f2565b6001600160e01b031982166355575f5d60e11b141561216a575060026121f2565b6001600160e01b031983166322ba176160e21b141561218b575060016121f2565b6001600160e01b031982166322ba176160e21b14156121ac575060026121f2565b6001600160e01b0319831663025ceed960e61b14156121cd575060016121f2565b6001600160e01b0319821663025ceed960e61b14156121ee575060026121f2565b5060005b92915050565b8251602090810151835190910151600183600281111561221457fe5b14156122965760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526122669086908690612a44565b9150612291846000015160000151856000015160200151866080015188602001518860600151612cbe565b612367565b60028360028111156122a457fe5b14156123215760408051606081018252610161546001600160a01b038116825265ffffffffffff600160a01b820481166020840152600160d01b90910416918101919091526122f69085908790612a44565b9050612291856000015160000151866000015160200151876080015187602001518960600151612cbe565b845180516020918201516080880151928701516060890151612344949190612cbe565b835180516020918201516080870151928801516060880151612367949190612cbe565b935093915050565b6000828211156123c6576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612417576040519150601f19603f3d011682016040523d82523d6000602084013e61241c565b606091505b5050905080610efb576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b3b151590565b600054610100900460ff16806124835750612483611627565b80612491575060005460ff16155b6124cc5760405162461bcd60e51b815260040180806020018281038252602e81526020018061551d602e913960400191505060405180910390fd5b600054610100900460ff161580156124f7576000805460ff1961ff0019909116610100171660011790555b825160208085019190912083519184019190912060c99190915560ca558015610efb576000805461ff0019169055505050565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b60007f477ed43b8020849b755512278536c3766a3b4ab547519949a75f483372493f8d82600001516125c98460200151612e42565b84604001516125db8660600151612e42565b86608001518760a001518860c001518960e001518a610100015180519060200120604051602001808b81526020018a6001600160a01b03168152602001898152602001886001600160a01b03168152602001878152602001868152602001858152602001848152602001836001600160e01b03191681526020018281526020019a5050505050505050505050604051602081830303815290604052805190602001209050919050565b600061268e612eb2565b82604051602001808061190160f01b81525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b60008151604114612728576040805162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a61274686828585612ef2565b9695505050505050565b61275861420f565b60006127648484613148565b80519091506001600160e01b031916612789576127818385613148565b9150506121f2565b90506121f2565b612798614227565b60e08201516001600160e01b031916632611a13360e11b14156127e45760008261010001518060200190518101906127d09190614c35565b805183526020908101519083015250612870565b60e08201516001600160e01b0319166323d235ef60e01b141561283c57600082610100015180602001905181019061281c9190614cc1565b805183526020808201519084015260409081015115159083015250612870565b60e08201516001600160e01b0319908116141561285857612870565b60405162461bcd60e51b81526004016110e0906151dd565b8051516113b957815161288290613364565b8152919050565b61289161424a565b60006128a18860800151876133ff565b905060006128b38860800151876133ff565b905060006128c58a8a85858a8a613424565b905089602001516020015160001415806128e6575060608901516020015115155b156129095780516129095760405162461bcd60e51b81526004016110e090615156565b60608a01516020015115158061292557506020808a0151015115155b1561294e57600081602001511161294e5760405162461bcd60e51b81526004016110e090615156565b60808a0151156129a157851561298057805161296b9084906134bd565b600089815261012f60205260409020556129a1565b60208101516129909084906134bd565b600089815261012f60205260409020555b6080890151156129f45784156129d65760208101516129c19083906134bd565b600088815261012f60205260409020556129f4565b80516129e39083906134bd565b600088815261012f60205260409020555b602081015181516040517f956cd63ee4cdcd81fda5f0ec7c6c36dceda99e1b412f4a650a5d26055dc3c45092612a2f928c928c929190614f7e565b60405180910390a19998505050505050505050565b6000612a5d84600001516020015183866040015161351e565b90506000612a87828660000151602001518760800151868960000151600001518a606001516135c0565b8551805186515160208089015193015160808a015160608b0151959650612ab595939492938792919061361d565b90508460400151516001148015612ad157508360400151516001145b8015612b2657508460400151600081518110612ae957fe5b6020026020010151600001516001600160a01b03168460400151600081518110612b0f57fe5b6020026020010151600001516001600160a01b0316145b15612c3c57604080516001808252818301909252600091816020015b612b4a614264565b815260200190600190039081612b425790505090508460400151600081518110612b7057fe5b60200260200101516000015181600081518110612b8957fe5b60209081029190910101516001600160a01b03909116905260408601518051600090612bb157fe5b6020026020010151602001518560400151600081518110612bce57fe5b6020026020010151602001510181600081518110612be857fe5b6020026020010151602001906001600160601b031690816001600160601b031681525050612c3286600001516000015183886000015160200151848a608001518b60600151613722565b509150612c959050565b612c6685600001516000015182876000015160200151886040015189608001518a60600151613722565b50855180516020909101516040870151608089015160608a0151949550612c91948693929190613722565b5090505b612cb685600001516000015182876080015187602001518960600151612cbe565b509392505050565b6000825111612cdf5760405162461bcd60e51b81526004016110e0906150a2565b600084815b6001855103811015612dae576000612d25868381518110612d0157fe5b6020026020010151602001516001600160601b0316896137d790919063ffffffff16565b9050612d5a868381518110612d3657fe5b6020026020010151602001516001600160601b0316856134bd90919063ffffffff16565b93508015612da557612d6c838261236f565b9250612da560405180604001604052808b81526020018381525088888581518110612d9357fe5b602002602001015160000151886137ef565b50600101612ce4565b50600084600186510381518110612dc157fe5b60200260200101519050612deb81602001516001600160601b0316846134bd90919063ffffffff16565b92508261271014612e0e5760405162461bcd60e51b81526004016110e090615214565b8115612e3857612e3860405180604001604052808a815260200184815250878360000151876137ef565b5050505050505050565b60007fdb6f72e915676cfc289da13bc4ece054fd17b1df6d77ffc4a60510718c236b08612e72836000015161252a565b8360200151604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050919050565b6000612eed7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f612ee0613bf7565b612ee8613bfd565b613c03565b905090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612f535760405162461bcd60e51b81526004018080602001828103825260228152602001806154ae6022913960400191505060405180910390fd5b6000601e8560ff16111561302d576004850360ff16601b1480612f7c57506004850360ff16601c145b612fb75760405162461bcd60e51b815260040180806020018281038252602281526020018061554b6022913960400191505060405180910390fd5b6001612fc287613c65565b60048703868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561301c573d6000803e3d6000fd5b5050506020604051035190506130e4565b8460ff16601b148061304257508460ff16601c145b61307d5760405162461bcd60e51b815260040180806020018281038252602281526020018061554b6022913960400191505060405180910390fd5b60018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156130d7573d6000803e3d6000fd5b5050506020604051035190505b6001600160a01b03811661313f576040805162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b61315061420f565b825182516001600160e01b031982166355575f5d60e11b14156131bb576001600160e01b031981166355575f5d60e11b14156131905784925050506121f2565b50506040805180820182526000808252825160208181019094529081529181019190915290506121f2565b6001600160e01b031982166322ba176160e21b1415613200576001600160e01b031981166322ba176160e21b1415613190576131f78585613cb6565b925050506121f2565b6001600160e01b031982166339d690a360e11b141561323c576001600160e01b031981166339d690a360e11b1415613190576131f78585613cb6565b6001600160e01b0319821663025ceed960e61b1415613278576001600160e01b0319811663025ceed960e61b1415613190576131f78585613cb6565b6001600160e01b031982166000908152606560205260409020546001600160a01b0316801561332d576040516306d3f7cb60e41b81526001600160a01b03821690636d3f7cb0906132cf9089908990600401615307565b60006040518083038186803b1580156132e757600080fd5b505afa1580156132fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526133239190810190614baa565b93505050506121f2565b6001600160e01b0319838116908316141561334c576133238686613cb6565b60405162461bcd60e51b81526004016110e090615006565b60408051600180825281830190925260609160009190816020015b613387614264565b81526020019060019003908161337f57905050905082816000815181106133aa57fe5b6020026020010151600001906001600160a01b031690816001600160a01b031681525050612710816000815181106133de57fe5b6020908102919091018101516001600160601b039092169101529050919050565b60008261340e575060006121f2565b50600090815261012f6020526040902054919050565b61342c61424a565b60008061343a898887613d13565b9150915060008061344c8a8988613d13565b915091508381118061346657508381148015613466575083155b156134925761348784848c60200151602001518d6060015160200151613d8c565b945050505050612746565b6134ae8b60200151602001518c60600151602001518484613e11565b9b9a5050505050505050505050565b600082820183811015613517576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b602082015160009065ffffffffffff16815b83518110156135ab5761271084828151811061354857fe5b6020026020010151602001516001600160601b0316111561357b5760405162461bcd60e51b81526004016110e0906151ae565b83818151811061358757fe5b6020026020010151602001516001600160601b031682019150806001019050613530565b5061313f6135b986836137d7565b86906134bd565b60008060006135e28989886040015189602001510165ffffffffffff16613e97565b9092509050801561361157613611604051806040016040528087815260200183815250888860000151876137ef565b50979650505050505050565b60008061362988613eb9565b90508051600114801561363d575086516001145b801561368a57508660008151811061365157fe5b6020026020010151600001516001600160a01b03168160008151811061367357fe5b6020026020010151600001516001600160a01b0316145b156136db576113888160008151811061369f57fe5b6020026020010151602001516001600160601b031611156136d25760405162461bcd60e51b81526004016110e09061503d565b85915050613717565b6000806136ec8b8989868a8a613722565b915091506113888111156137125760405162461bcd60e51b81526004016110e09061503d565b509150505b979650505050505050565b846000805b85518110156137cb5761376386828151811061373f57fe5b6020026020010151602001516001600160601b0316836134bd90919063ffffffff16565b91506000613792848989858151811061377857fe5b6020026020010151602001516001600160601b0316613e97565b909450905080156137c2576137c260405180604001604052808c81526020018381525087898581518110612d9357fe5b50600101613727565b50965096945050505050565b60006135176127106137e9858561402e565b90614087565b8351516001600160e01b0319166339d690a360e11b1415613935576000808560000151602001518060200190518101906138299190614908565b9150915085602001516001146138515760405162461bcd60e51b81526004016110e09061512a565b6001600160a01b0385163014156138c957604051632142170760e11b81526001600160a01b038316906342842e0e9061389290309088908690600401614ed7565b600060405180830381600087803b1580156138ac57600080fd5b505af11580156138c0573d6000803e3d6000fd5b5050505061392e565b604051637b84dc8360e11b81526001600160a01b0384169063f709b906906138fb908590899089908790600401614fdc565b600060405180830381600087803b15801561391557600080fd5b505af1158015613929573d6000803e3d6000fd5b505050505b5050610671565b8351516001600160e01b0319166322ba176160e21b1415613a9357600084600001516020015180602001905181019061396e91906146fc565b90506001600160a01b038416301415613a2557602085015160405163a9059cbb60e01b81526001600160a01b0383169163a9059cbb916139b2918791600401614f33565b602060405180830381600087803b1580156139cc57600080fd5b505af11580156139e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a049190614af2565b613a205760405162461bcd60e51b81526004016110e09061517f565b613a8d565b602085015160405163776062c360e01b81526001600160a01b0384169163776062c391613a5a91859189918991600401614fdc565b600060405180830381600087803b158015613a7457600080fd5b505af1158015613a88573d6000803e3d6000fd5b505050505b50610671565b8351516001600160e01b03191663025ceed960e61b1415613b5057600080856000015160200151806020019051810190613acd9190614908565b90925090506001600160a01b038516301415613b18576020860151604051637921219560e11b81526001600160a01b0384169163f242432a9161389291309189918791600401614efb565b6020860151604051639c1c2ee960e01b81526001600160a01b03851691639c1c2ee9916138fb9186918a918a91889190600401614f99565b8351516001600160e01b0319166355575f5d60e11b1415613b99576001600160a01b0382163014613b94576020840151613b94906001600160a01b038416906123cc565b610671565b6040516354bc0cf160e01b81526001600160a01b038216906354bc0cf190613bc99087908790879060040161532c565b600060405180830381600087803b158015613be357600080fd5b505af1158015612e38573d6000803e3d6000fd5b60c95490565b60ca5490565b6000838383613c106140ee565b3060405160200180868152602001858152602001848152602001838152602001826001600160a01b03168152602001955050505050506040516020818303038152906040528051906020012090509392505050565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b613cbe61420f565b60208084015180519082012083820151805192019190912080821415613ce85784925050506121f2565b5050604080518082018252600080825282516020808201909452908152918101919091529392505050565b6000808215613d52576020808601510151613d2e908561236f565b9150613d4b856060015160200151866020015160200151846140f2565b9050612367565b606085015160200151613d65908561236f565b9050613d82856020015160200151866060015160200151836140f2565b9150935093915050565b613d9461424a565b6000613da18585856140f2565b905085811115613df8576040805162461bcd60e51b815260206004820152601860248201527f66696c6c4c6566743a20756e61626c6520746f2066696c6c0000000000000000604482015290519081900360640190fd5b5050604080518082019091529384525050602082015290565b613e1961424a565b6000613e268387876140f2565b905083811115613e7d576040805162461bcd60e51b815260206004820152601960248201527f66696c6c52696768743a20756e61626c6520746f2066696c6c00000000000000604482015290519081900360640190fd5b604080518082019091529283526020830152509392505050565b600080613ead85613ea886866137d7565b614158565b91509150935093915050565b80516060906001600160e01b03191663025ceed960e61b1480613eed575081516001600160e01b0319166339d690a360e11b145b15613fa3576000808360200151806020019051810190613f0d9190614908565b61016254604051634e53ee3d60e11b81529294509092506001600160a01b031690639ca7dc7a90613f449085908590600401614f33565b600060405180830381600087803b158015613f5e57600080fd5b505af1158015613f72573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613f9a9190810190614ac0565b925050506113b9565b81516001600160e01b03191662737ea960e61b1415613fe45760008260200151806020019051810190613fd69190614718565b6080015192506113b9915050565b81516001600160e01b03191663d8f960c160e01b141561402657600082602001518060200190518101906140189190614815565b6060015192506113b9915050565b506060919050565b60008261403d575060006121f2565b8282028284828161404a57fe5b04146135175760405162461bcd60e51b815260040180806020018281038252602181526020018061556d6021913960400191505060405180910390fd5b60008082116140dd576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816140e657fe5b049392505050565b4690565b60006140ff848484614180565b15614142576040805162461bcd60e51b815260206004820152600e60248201526d3937bab73234b7339032b93937b960911b604482015290519081900360640190fd5b614150836137e9868561402e565b949350505050565b600080828411156141775761416d848461236f565b9150829050612070565b50600093915050565b6000826141c7576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b8115806141d2575083155b156141df57506000613517565b600083806141e957fe5b85840990506141f8858461402e565b614204826103e861402e565b101595945050505050565b60408051808201909152600081526060602082015290565b604051806060016040528060608152602001606081526020016000151581525090565b604051806040016040528060008152602001600081525090565b604080518082019091526000808252602082015290565b80356113b98161545c565b600082601f830112614296578081fd5b813560206142ab6142a6836153f2565b6153cf565b82815281810190858301838502870184018810156142c7578586fd5b855b858110156142ee5781356142dc8161545c565b845292840192908401906001016142c9565b5090979650505050505050565b600082601f83011261430b578081fd5b8135602061431b6142a6836153f2565b8281528181019085830183850287018401881015614337578586fd5b855b858110156142ee57813561434c81615471565b84529284019290840190600101614339565b600082601f83011261436e578081fd5b8151602061437e6142a6836153f2565b82815281810190858301855b858110156142ee576143a1898684518b01016144d5565b8452928401929084019060010161438a565b600082601f8301126143c3578081fd5b815160206143d36142a6836153f2565b828152818101908583016040808602880185018910156143f1578687fd5b865b868110156144605781838b031215614409578788fd5b81518281018181106001600160401b038211171561442357fe5b835283516144308161545c565b8152838701516001600160601b038116811461444a57898afd5b81880152855293850193918101916001016143f3565b509198975050505050505050565b805180151581146113b957600080fd5b80356113b981615471565b600082601f830112614499578081fd5b81356144a76142a68261540f565b8181528460208386010111156144bb578283fd5b816020850160208301379081016020019190915292915050565b600082601f8301126144e5578081fd5b81516144f36142a68261540f565b818152846020838601011115614507578283fd5b614150826020830160208701615430565b60006101e0828403121561452a578081fd5b50919050565b60006040808385031215614542578182fd5b80518181016001600160401b03828210818311171561455d57fe5b81845282945085358181111561457257600080fd5b860180880385131561458357600080fd5b60808401838110838211171561459557fe5b9094528335936145a485615471565b938252602084013593818511156145ba57600080fd5b6145c688868301614489565b60608501525050815260209384013593019290925292915050565b60006101208083850312156145f4578182fd5b6145fd816153cf565b9150506146098261427b565b815260208201356001600160401b038082111561462557600080fd5b61463185838601614530565b60208401526146426040850161427b565b6040840152606084013591508082111561465b57600080fd5b61466785838601614530565b60608401526080840135608084015260a084013560a084015260c084013560c084015261469660e0850161447e565b60e0840152610100915081840135818111156146b157600080fd5b6146bd86828701614489565b8385015250505092915050565b803565ffffffffffff811681146113b957600080fd5b6000602082840312156146f1578081fd5b81356135178161545c565b60006020828403121561470d578081fd5b81516135178161545c565b6000806040838503121561472a578081fd5b82516147358161545c565b60208401519092506001600160401b0380821115614751578283fd5b9084019060c08287031215614764578283fd5b61476e60c06153cf565b82518152602083015182811115614783578485fd5b61478f888286016144d5565b602083015250604083015160408201526060830151828111156147b0578485fd5b6147bc888286016143b3565b6060830152506080830151828111156147d3578485fd5b6147df888286016143b3565b60808301525060a0830151828111156147f6578485fd5b6148028882860161435e565b60a0830152508093505050509250929050565b60008060408385031215614827578182fd5b82516148328161545c565b60208401519092506001600160401b038082111561484e578283fd5b9084019060a08287031215614861578283fd5b61486b60a06153cf565b82518152602083015182811115614880578485fd5b61488c888286016144d5565b6020830152506040830151828111156148a3578485fd5b6148af888286016143b3565b6040830152506060830151828111156148c6578485fd5b6148d2888286016143b3565b6060830152506080830151828111156148e9578485fd5b6148f58882860161435e565b6080830152508093505050509250929050565b6000806040838503121561491a578182fd5b82516149258161545c565b6020939093015192949293505050565b600080600080600060a0868803121561494c578081fd5b85356149578161545c565b945060208601356149678161545c565b935060408601359250606086013561497e8161545c565b9150608086013561498e8161545c565b809150509295509295909350565b6000806000806000806000806000806101408b8d0312156149bb578788fd5b6149c48b61427b565b99506149d260208c0161427b565b985060408b013597506149e760608c0161427b565b96506149f560808c0161427b565b9550614a0360a08c0161427b565b945060c08b01356001600160401b0380821115614a1e578586fd5b614a2a8e838f016142fb565b955060e08d0135915080821115614a3f578485fd5b50614a4c8d828e01614286565b935050614a5c6101008c0161447e565b9150614a6b6101208c0161427b565b90509295989b9194979a5092959850565b600080600060608486031215614a90578081fd5b8335614a9b8161545c565b9250614aa9602085016146ca565b9150614ab7604085016146ca565b90509250925092565b600060208284031215614ad1578081fd5b81516001600160401b03811115614ae6578182fd5b614150848285016143b3565b600060208284031215614b03578081fd5b6135178261446e565b600060208284031215614b1d578081fd5b5035919050565b600060208284031215614b35578081fd5b813561351781615471565b60008060408385031215614b52578182fd5b8235614b5d81615471565b91506020830135614b6d8161545c565b809150509250929050565b600060208284031215614b89578081fd5b81356001600160401b03811115614b9e578182fd5b61415084828501614518565b600060208284031215614bbb578081fd5b81516001600160401b0380821115614bd1578283fd5b9083019060408286031215614be4578283fd5b604051604081018181108382111715614bf957fe5b6040528251614c0781615471565b8152602083015182811115614c1a578485fd5b614c26878286016144d5565b60208301525095945050505050565b600060208284031215614c46578081fd5b81516001600160401b0380821115614c5c578283fd5b9083019060408286031215614c6f578283fd5b604051604081018181108382111715614c8457fe5b604052825182811115614c95578485fd5b614ca1878286016143b3565b825250602083015182811115614cb5578485fd5b614c26878286016143b3565b600060208284031215614cd2578081fd5b81516001600160401b0380821115614ce8578283fd5b9083019060608286031215614cfb578283fd5b604051606081018181108382111715614d1057fe5b604052825182811115614d21578485fd5b614d2d878286016143b3565b825250602083015182811115614d41578485fd5b614d4d878286016143b3565b602083015250614d5f6040840161446e565b604082015295945050505050565b600060208284031215614d7e578081fd5b81356001600160401b03811115614d93578182fd5b614150848285016145e1565b60008060008060808587031215614db4578182fd5b84356001600160401b0380821115614dca578384fd5b614dd6888389016145e1565b95506020870135915080821115614deb578384fd5b614df788838901614489565b94506040870135915080821115614e0c578384fd5b614e18888389016145e1565b93506060870135915080821115614e2d578283fd5b50614e3a87828801614489565b91505092959194509250565b600060208284031215614e57578081fd5b613517826146ca565b600063ffffffff60e01b82511683526020820151604060208501528051806040860152614e94816060870160208501615430565b601f01601f1916939093016060019392505050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393909316835265ffffffffffff918216602084015216604082015260600190565b90815260200190565b93845260208401929092526040830152606082015260800190565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260c060a0820181905260009082015260e00190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b60208082526017908201527f6e6f7420666f756e64204941737365744d617463686572000000000000000000604082015260600190565b6020808252601d908201527f526f79616c746965732061726520746f6f206869676820283e35302529000000604082015260600190565b6020808252601490820152730c081cd85b1d0818d85b89dd081899481d5cd95960621b604082015260600190565b60208082526024908201527f7472616e736665725061796f7574733a206e6f7468696e6720746f207472616e60408201526339b332b960e11b606082015260800190565b60208082526024908201527f72696768744f726465722e74616b657220766572696669636174696f6e2066616040820152631a5b195960e21b606082015260800190565b60208082526012908201527132b9319b9918903b30b63ab29032b93937b960711b604082015260600190565b6020808252600f908201526e1b9bdd1a1a5b99c81d1bc8199a5b1b608a1b604082015260600190565b602080825260159082015274195c98cc8c081d1c985b9cd9995c8819985a5b1959605a1b604082015260600190565b6020808252601590820152746f726967696e2066656520697320746f6f2062696760581b604082015260600190565b60208082526017908201527f556e6b6e6f776e204f7264657220646174612074797065000000000000000000604082015260600190565b6020808252601e908201527f53756d207061796f75747320427073206e6f7420657175616c20313030250000604082015260600190565b6020808252601290820152710c2e6e6cae8e640c8dedc4ee840dac2e8c6d60731b604082015260600190565b60208082526023908201527f6c6566744f726465722e74616b657220766572696669636174696f6e206661696040820152621b195960ea1b606082015260800190565b6020808252600e908201526d0dcdee840cadcdeeaced040cae8d60931b604082015260600190565b6020808252600b908201526a3737ba10309036b0b5b2b960a91b604082015260600190565b60006040825261531a6040830185614e60565b828103602084015261313f8185614e60565b60006060825284516040606084015261534860a0840182614e60565b60209687015160808501526001600160a01b03958616968401969096525050911660409091015290565b65ffffffffffff92831681529116602082015260400190565b6000808335601e198436030181126153a1578283fd5b8301803591506001600160401b038211156153ba578283fd5b60200191503681900382131561207057600080fd5b6040518181016001600160401b03811182821017156153ea57fe5b604052919050565b60006001600160401b0382111561540557fe5b5060209081020190565b60006001600160401b0382111561542257fe5b50601f01601f191660200190565b60005b8381101561544b578181015183820152602001615433565b838111156106715750506000910152565b6001600160a01b03811681146116d757600080fd5b6001600160e01b0319811681146116d757600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c75656f72646572207369676e617475726520766572696669636174696f6e206572726f72636f6e7472616374206f72646572207369676e617475726520766572696669636174696f6e206572726f72496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122049f18c54ded4ab683a0ee0077157546cfeee4c95c67388ee015f890225860da764736f6c63430007060033", "devdoc": { "kind": "dev", "methods": { @@ -1000,7 +1058,7 @@ "type": "t_mapping(t_bytes4,t_address)" }, { - "astId": 12199, + "astId": 12218, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "__gap", "offset": 0, @@ -1008,7 +1066,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 31255, + "astId": 31747, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "proxies", "offset": 0, @@ -1016,7 +1074,7 @@ "type": "t_mapping(t_bytes4,t_address)" }, { - "astId": 31552, + "astId": 32063, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "__gap", "offset": 0, @@ -1048,7 +1106,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 13421, + "astId": 13603, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "__gap", "offset": 0, @@ -1056,7 +1114,7 @@ "type": "t_array(t_uint256)50_storage" }, { - "astId": 12353, + "astId": 12535, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "fills", "offset": 0, @@ -1064,7 +1122,7 @@ "type": "t_mapping(t_bytes32,t_uint256)" }, { - "astId": 13285, + "astId": 13467, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "__gap", "offset": 0, @@ -1072,15 +1130,15 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 30182, + "astId": 30674, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "protocolFee", "offset": 0, "slot": "353", - "type": "t_struct(ProtocolFeeData)30218_storage" + "type": "t_struct(ProtocolFeeData)30710_storage" }, { - "astId": 30184, + "astId": 30676, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "royaltiesRegistry", "offset": 0, @@ -1088,7 +1146,7 @@ "type": "t_contract(IRoyaltiesProvider)11922" }, { - "astId": 30186, + "astId": 30678, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "defaultFeeReceiver", "offset": 0, @@ -1096,7 +1154,7 @@ "type": "t_address" }, { - "astId": 30190, + "astId": 30682, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "feeReceivers", "offset": 0, @@ -1104,7 +1162,7 @@ "type": "t_mapping(t_address,t_address)" }, { - "astId": 31231, + "astId": 31723, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "__gap", "offset": 0, @@ -1177,12 +1235,12 @@ "numberOfBytes": "32", "value": "t_address" }, - "t_struct(ProtocolFeeData)30218_storage": { + "t_struct(ProtocolFeeData)30710_storage": { "encoding": "inplace", "label": "struct RaribleTransferManager.ProtocolFeeData", "members": [ { - "astId": 30213, + "astId": 30705, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "receiver", "offset": 0, @@ -1190,7 +1248,7 @@ "type": "t_address" }, { - "astId": 30215, + "astId": 30707, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "buyerAmount", "offset": 20, @@ -1198,7 +1256,7 @@ "type": "t_uint48" }, { - "astId": 30217, + "astId": 30709, "contract": "@rarible/exchange-v2/contracts/ExchangeV2.sol:ExchangeV2", "label": "sellerAmount", "offset": 26, diff --git a/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Proxy.json b/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Proxy.json index 9a21f8f7e..6a2ccb4a7 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Proxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", "abi": [ { "inputs": [ @@ -146,69 +146,122 @@ "type": "receive" } ], - "transactionHash": "0xed27d08ff4ca90af3a643b4deb553cf1f43660058a71e84eb6f2c3be096330fe", + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77", - "transactionIndex": 34, - "gasUsed": "906062", - "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080001000000000000000000000000000000000000020000000000000000000800000000800000000000000000200000500000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000020000200000000000000000000020000000000000000000080000000000000400000000000000000020000000000000000000000000000080000000000000000000000000080000000000", - "blockHash": "0x1aad7760e0defaf4768e0e43557b8e8968d3f24f2124e8997576062a5d17b780", - "transactionHash": "0xed27d08ff4ca90af3a643b4deb553cf1f43660058a71e84eb6f2c3be096330fe", + "contractAddress": null, + "transactionIndex": 21, + "gasUsed": "1026836", + "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000010000000000000000000000400008000000000000000000800000000000000010000000020000010000000000000040004000000000000000000200020000000800000008004002008000000000000000000000004004000000000001000000000000000000000000000000000000000000008000200000000000000000000000000000000000040000000000000000000000000000000000a0000008000000000001000000000000000400000002000000000020000000000000000000000000000000000000000000000000000000300000000000", + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c", + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", "logs": [ { - "transactionIndex": 34, - "blockNumber": 4793867, - "transactionHash": "0xed27d08ff4ca90af3a643b4deb553cf1f43660058a71e84eb6f2c3be096330fe", - "address": "0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77", + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000000fe65b68eb627c21eaf3cfe8183c4f946f3d48bd" + "0x0000000000000000000000002c4d12cb96b25727d6869b9d4750d70e3a6a8553" ], "data": "0x", - "logIndex": 50, - "blockHash": "0x1aad7760e0defaf4768e0e43557b8e8968d3f24f2124e8997576062a5d17b780" + "logIndex": 37, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" }, { - "transactionIndex": 34, - "blockNumber": 4793867, - "transactionHash": "0xed27d08ff4ca90af3a643b4deb553cf1f43660058a71e84eb6f2c3be096330fe", - "address": "0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77", + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 51, - "blockHash": "0x1aad7760e0defaf4768e0e43557b8e8968d3f24f2124e8997576062a5d17b780" + "logIndex": 38, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" }, { - "transactionIndex": 34, - "blockNumber": 4793867, - "transactionHash": "0xed27d08ff4ca90af3a643b4deb553cf1f43660058a71e84eb6f2c3be096330fe", - "address": "0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77", + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0xd8f960c100000000000000000000000000000000000000000000000000000000" + ], + "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", + "logIndex": 39, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + }, + { + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "topics": [ + "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", + "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", + "logIndex": 40, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + }, + { + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "topics": [ + "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", + "0xf63c282500000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", + "logIndex": 41, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + }, + { + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 42, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + }, + { + "transactionIndex": 21, + "blockNumber": 5783743, + "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1f689646861870d44b33dbbb413fa7d06a2b52f", - "logIndex": 52, - "blockHash": "0x1aad7760e0defaf4768e0e43557b8e8968d3f24f2124e8997576062a5d17b780" + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 43, + "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" } ], - "blockNumber": 4793867, - "cumulativeGasUsed": "7109459", + "blockNumber": 5783743, + "cumulativeGasUsed": "2837740", "status": 1, "byzantium": true }, "args": [ - "0x0fE65B68Eb627c21EAF3cfe8183C4F946F3d48BD", - "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", - "0x1372a625000000000000000000000000a094e566b61b3c2d88acf7cc15e3dd0fa83f32af000000000000000000000000b8863180cac2d0ab665e5968c0de25298a1d8cee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f4cc63d7f2bc894078d41f284453062842afa46" + "0x2C4D12cb96B25727d6869B9D4750d70E3A6a8553", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" ], "numDeployments": 1, - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", diff --git a/projects/hardhat-deploy/deployments/sepolia/RaribleExchangeWrapper.json b/projects/hardhat-deploy/deployments/sepolia/RaribleExchangeWrapper.json index 0e495d514..51aa70606 100644 --- a/projects/hardhat-deploy/deployments/sepolia/RaribleExchangeWrapper.json +++ b/projects/hardhat-deploy/deployments/sepolia/RaribleExchangeWrapper.json @@ -1,5 +1,5 @@ { - "address": "0x1554aDA53194B961016931A2E86C80D09a816209", + "address": "0x38E6f5015267bAEfb739253fbB4D7c173CCD1891", "abi": [ { "inputs": [ @@ -17,6 +17,11 @@ "internalType": "address[]", "name": "transferProxies", "type": "address[]" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" } ], "stateMutability": "nonpayable", @@ -526,55 +531,69 @@ "type": "receive" } ], - "transactionHash": "0x05f72ac7d8a614b380eeefa14269d7be167ac6e0982a4f20bca2585db4ea1f90", + "transactionHash": "0x814f4abd2555bdfb8ea0541c9773495193f93639188546f48017d5e5e279d933", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x1554aDA53194B961016931A2E86C80D09a816209", - "transactionIndex": 114, - "gasUsed": "4238587", - "logsBloom": "0x00000000000000000000000000000000080008000000000000800004000000000000000000000000000000000000000000000000040000000000000000200000020004000000000000000000000004080001000040000000000000000000000000000000020000000000000000000800000000000000000000000000000000500000000000000000000000000001000000000000000000000000000000000000020000000000000000000000000000080000000000000000200000000000000000000002000000000000000000080000000000000000000000000000000020000010000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x16f7d906dd7a8e290518a76f3b47f82e8b861d5d4e897202e609d0c6a25a8995", - "transactionHash": "0x05f72ac7d8a614b380eeefa14269d7be167ac6e0982a4f20bca2585db4ea1f90", + "contractAddress": null, + "transactionIndex": 37, + "gasUsed": "4340841", + "logsBloom": "0x00000000000000000000800000000000000000000400800000800004000002000000000000000000000000000000000000000000000040000000000000200000000800000000000000000000000000000001000000000000004000000000000000000000020004000000000000000800000000000100000000000000000000c00000000000000000000000000000000000000000000020000000000000000000020000000000000000000000000000080004000000000000000000000000000000000002000000000000000001000000000000200000000000000000000020000010000000000000000000000000000100000000000000000000000000000000", + "blockHash": "0x63b22ef2fa4133e55a8cba1bfe6786fc52f610ad5c0f9695cc971d7a9a3a4fa6", + "transactionHash": "0x814f4abd2555bdfb8ea0541c9773495193f93639188546f48017d5e5e279d933", "logs": [ { - "transactionIndex": 114, - "blockNumber": 5620448, - "transactionHash": "0x05f72ac7d8a614b380eeefa14269d7be167ac6e0982a4f20bca2585db4ea1f90", - "address": "0x1554aDA53194B961016931A2E86C80D09a816209", + "transactionIndex": 37, + "blockNumber": 5783760, + "transactionHash": "0x814f4abd2555bdfb8ea0541c9773495193f93639188546f48017d5e5e279d933", + "address": "0x38E6f5015267bAEfb739253fbB4D7c173CCD1891", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 167, - "blockHash": "0x16f7d906dd7a8e290518a76f3b47f82e8b861d5d4e897202e609d0c6a25a8995" + "logIndex": 111, + "blockHash": "0x63b22ef2fa4133e55a8cba1bfe6786fc52f610ad5c0f9695cc971d7a9a3a4fa6" }, { - "transactionIndex": 114, - "blockNumber": 5620448, - "transactionHash": "0x05f72ac7d8a614b380eeefa14269d7be167ac6e0982a4f20bca2585db4ea1f90", + "transactionIndex": 37, + "blockNumber": 5783760, + "transactionHash": "0x814f4abd2555bdfb8ea0541c9773495193f93639188546f48017d5e5e279d933", "address": "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9", "topics": [ "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - "0x0000000000000000000000001554ada53194b961016931a2e86c80d09a816209", - "0x000000000000000000000000b8863180cac2d0ab665e5968c0de25298a1d8cee" + "0x00000000000000000000000038e6f5015267baefb739253fbb4d7c173ccd1891", + "0x000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a509731" ], "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "logIndex": 168, - "blockHash": "0x16f7d906dd7a8e290518a76f3b47f82e8b861d5d4e897202e609d0c6a25a8995" + "logIndex": 112, + "blockHash": "0x63b22ef2fa4133e55a8cba1bfe6786fc52f610ad5c0f9695cc971d7a9a3a4fa6" + }, + { + "transactionIndex": 37, + "blockNumber": 5783760, + "transactionHash": "0x814f4abd2555bdfb8ea0541c9773495193f93639188546f48017d5e5e279d933", + "address": "0x38E6f5015267bAEfb739253fbB4D7c173CCD1891", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 113, + "blockHash": "0x63b22ef2fa4133e55a8cba1bfe6786fc52f610ad5c0f9695cc971d7a9a3a4fa6" } ], - "blockNumber": 5620448, - "cumulativeGasUsed": "19778766", + "blockNumber": 5783760, + "cumulativeGasUsed": "9616125", "status": 1, "byzantium": true }, "args": [ [ "0x0000000000000000000000000000000000000000", - "0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77", + "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", "0x00000000006c3852cbEf3e08E8dF289169EdE581", "0x0000000000000000000000000000000000000000", "0xD112466471b5438C1ca2D218694200e49d81D047", @@ -587,14 +606,15 @@ ], "0x7b79995e5f793a07bc00c21412e50ecae098e7f9", [ - "0xB8863180CAC2d0Ab665e5968C0De25298A1D8CEe" - ] + "0xA3d49c7e2c845b792e422696FE0D9ef17a509731" + ], + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], - "numDeployments": 3, - "solcInputHash": "5fd82e04a71dd28dcf06afe03af2d381", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[11]\",\"name\":\"marketplaces\",\"type\":\"address[11]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_6\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":\"RaribleExchangeWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165 is IERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n constructor () internal {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Receiver.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\ncontract ERC1155Holder is ERC1155Receiver {\\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155BatchReceived.selector;\\n }\\n}\\n\",\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155Receiver.sol\\\";\\nimport \\\"../../introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\\n constructor() internal {\\n _registerInterface(\\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n}\\n\",\"keccak256\":\"0x57a0e246fb1c8f9cccf91c508eafe474e40260a31de3a39019ba8312cfdf9b2d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155Receiver is IERC165 {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC721Receiver.sol\\\";\\n\\n /**\\n * @dev Implementation of the {IERC721Receiver} interface.\\n *\\n * Accepts all token transfers. \\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\\n */\\ncontract ERC721Holder is IERC721Receiver {\\n\\n /**\\n * @dev See {IERC721Receiver-onERC721Received}.\\n *\\n * Always returns `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n}\\n\",\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x3a89b0a6ff66280e8e48f9f2c862d5c0e8ab23ee306ae5b204cd588931661a93\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n}\\n\",\"keccak256\":\"0xa9d02b9e22ffb9d25f412979951822d56b05d857de1f47ce82ad7b4a8d4601f6\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\\\";\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport \\\"./interfaces/IWyvernExchange.sol\\\";\\nimport \\\"./interfaces/IExchangeV2.sol\\\";\\nimport \\\"./interfaces/ISeaPort.sol\\\";\\nimport \\\"./interfaces/Ix2y2.sol\\\";\\nimport \\\"./interfaces/ILooksRare.sol\\\";\\nimport \\\"./interfaces/IBlur.sol\\\";\\n\\nimport \\\"./libraries/IsPausable.sol\\\";\\n\\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\\n using LibTransfer for address;\\n using BpLibrary for uint;\\n using SafeMath for uint;\\n\\n //marketplaces\\n address public immutable wyvernExchange;\\n address public immutable exchangeV2;\\n address public immutable seaPort_1_1;\\n address public immutable x2y2;\\n address public immutable looksRare;\\n address public immutable sudoswap;\\n address public immutable seaPort_1_4;\\n address public immutable looksRareV2;\\n address public immutable blur;\\n address public immutable seaPort_1_5;\\n address public immutable seaPort_1_6;\\n\\n //currencties\\n address public immutable weth;\\n\\n //constants\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n event Execution(bool result);\\n\\n enum Markets {\\n ExchangeV2,//0\\n WyvernExchange,//1\\n SeaPort_1_1,//2\\n X2Y2,//3\\n LooksRareOrders,//4\\n SudoSwap,//5\\n SeaPort_1_4,//6\\n LooksRareV2,//7\\n Blur,//8\\n SeaPort_1_5,//9\\n SeaPort_1_6//10\\n }\\n\\n enum AdditionalDataTypes {\\n NoAdditionalData,\\n RoyaltiesAdditionalData\\n }\\n\\n enum Currencies {\\n ETH,\\n WETH\\n }\\n\\n /**\\n @notice struct for the purchase data\\n @param marketId - market key from Markets enum (what market to use)\\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\\n bytes (27,28) used for dataType\\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\\n @param data - data for market call\\n */\\n struct PurchaseDetails {\\n Markets marketId;\\n uint256 amount;\\n uint fees;\\n bytes data;\\n }\\n\\n /**\\n @notice struct for the data with additional Ddta\\n @param data - data for market call\\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\\n */\\n struct AdditionalData {\\n bytes data;\\n uint[] additionalRoyalties;\\n }\\n\\n constructor(\\n address[11] memory marketplaces,\\n //address _wyvernExchange, 0\\n //address _exchangeV2, 1\\n //address _seaPort_1_1, 2\\n //address _x2y2, 3\\n //address _looksRare, 4\\n //address _sudoswap, 5\\n //address _seaPort_1_4, 6\\n //address _looksRareV2, 7\\n //address _blur, 8\\n //address _seaPort_1_5, 9\\n //address _seaPort_1_6, 10\\n address _weth,\\n address[] memory transferProxies\\n ) {\\n wyvernExchange = marketplaces[0];\\n exchangeV2 = marketplaces[1];\\n seaPort_1_1 = marketplaces[2];\\n x2y2 = marketplaces[3];\\n looksRare = marketplaces[4];\\n sudoswap = marketplaces[5];\\n seaPort_1_4 = marketplaces[6];\\n looksRareV2 = marketplaces[7];\\n blur = marketplaces[8];\\n seaPort_1_5 = marketplaces[9];\\n seaPort_1_6 = marketplaces[10];\\n\\n weth = _weth;\\n\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n if (_weth != address(0)){\\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n }\\n\\n /**\\n @notice executes a single purchase\\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n */\\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\\n requireNotPaused();\\n \\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\\n \\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n Currencies currency = getCurrency(purchaseDetails.fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n emit Execution(success);\\n \\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes an array of purchases\\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\\n */\\n \\n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\\n requireNotPaused();\\n\\n uint sumFirstFeesETH = 0;\\n uint sumSecondFeesETH = 0;\\n uint sumFirstFeesWETH = 0;\\n uint sumSecondFeesWETH = 0;\\n bool result = false;\\n\\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = 0;\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\\n }\\n\\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n Currencies currency = getCurrency(purchaseDetails[i].fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n result = result || success;\\n emit Execution(success);\\n }\\n\\n require(result, \\\"no successful executions\\\");\\n\\n //pay fees in ETH \\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\\n\\n //pay fees in WETH\\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\\n\\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes one purchase in ETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n uint paymentAmount = purchaseDetails.amount;\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase wyvernExchange failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\\n\\n if (allowFail) {\\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n Ix2y2(x2y2).run{value : paymentAmount}(input);\\n }\\n\\n //for every element in input.details[] getting\\n // order = input.details[i].orderIdx\\n // and from that order getting item = input.details[i].itemId\\n for (uint i = 0; i < input.details.length; ++i) {\\n uint orderId = input.details[i].orderIdx;\\n uint itemId = input.details[i].itemIdx;\\n bytes memory data = input.orders[orderId].items[itemId].data;\\n {\\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\\n }\\n }\\n\\n // 1 = erc-721\\n if (input.orders[orderId].delegateType == 1) {\\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair721 memory p = pairs[j];\\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\\n }\\n } else if (input.orders[orderId].delegateType == 2) {\\n // 2 = erc-1155\\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair1155 memory p = pairs[j];\\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \\\"\\\");\\n }\\n } else {\\n revert(\\\"unknown delegateType x2y2\\\");\\n }\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\\n if (allowFail) {\\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase sudoswap failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase LooksRareV2 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.Blur){\\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\\n if (allowFail) {\\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId ETH\\\");\\n }\\n\\n //transferring royalties\\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\\n \\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice executes one purchase in WETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n\\n //buying\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed WETH\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId WETH\\\");\\n }\\n \\n //transfer royalties\\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\\n\\n //get fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice transfers ETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n LibTransfer.transferEth(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers WETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers change back to sender\\n */\\n function transferChange() internal {\\n uint ethAmount = address(this).balance;\\n if (ethAmount > 0) {\\n address(msg.sender).transferEth(ethAmount);\\n }\\n }\\n\\n /**\\n @notice transfers weth change back to sender\\n */\\n function transferChangeWETH() internal {\\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\\n if (wethAmount > 0) {\\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\\n }\\n }\\n\\n /**\\n @notice parses fees in base points from one uint and calculates real amount of fees\\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\\n @param amount price of the order\\n @return firstFeeAmount real amount for the first fee\\n @return secondFeeAmount real amount for the second fee\\n */\\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\\n uint firstFee = uint(uint16(fees >> 16));\\n uint secondFee = uint(uint16(fees));\\n return (amount.bp(firstFee), amount.bp(secondFee));\\n }\\n\\n /**\\n @notice parses \\\"fees\\\" field to find the currency for the purchase\\n @param fees field with encoded data\\n @return 0 if ETH, 1 if WETH ERC-20\\n */\\n function getCurrency(uint fees) internal pure returns(Currencies) {\\n return Currencies(uint16(fees >> 48));\\n }\\n\\n\\n /**\\n @notice parses _data to data for market call and additionalData\\n @param feesAndDataType 27 and 28 bytes for dataType\\n @return marketData data for market call\\n @return additionalRoyalties array uint256, (base point + address)\\n */\\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\\n uint[] memory additionalRoyalties;\\n\\n //return no royalties if wrong data type\\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\\n return (_data, additionalRoyalties);\\n }\\n\\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\\n\\n //return no royalties if market doesn't support royalties\\n if (supportsRoyalties(marketId)) {\\n return (additionalData.data, additionalData.additionalRoyalties);\\n } else {\\n return (additionalData.data, additionalRoyalties);\\n } \\n }\\n \\n revert(\\\"unknown additionalDataType\\\");\\n }\\n\\n /**\\n @notice transfer additional royalties in ETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeETH(value, account);\\n }\\n }\\n }\\n\\n /**\\n @notice transfer additional royalties in WETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeWETH(value, account);\\n }\\n }\\n }\\n\\n // modifies `src`\\n function _arrayReplace(\\n bytes memory src,\\n bytes memory replacement,\\n bytes memory mask\\n ) internal view virtual {\\n require(src.length == replacement.length);\\n require(src.length == mask.length);\\n\\n for (uint256 i = 0; i < src.length; ++i) {\\n if (mask[i] != 0) {\\n src[i] = replacement[i];\\n }\\n }\\n }\\n\\n /**\\n @notice returns true if this contract supports additional royalties for the marketplace;\\n now royalties are supported for:\\n 1. SudoSwap\\n 2. LooksRare old\\n 3. LooksRare V2\\n */\\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\\n if (\\n marketId == Markets.SudoSwap ||\\n marketId == Markets.LooksRareOrders ||\\n marketId == Markets.LooksRareV2\\n ) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\\n uint result = 0;\\n\\n Currencies currency = getCurrency(detail.fees);\\n\\n //for every purchase with WETH we sum amount, fees and royalties needed\\n if (currency == Currencies.WETH) {\\n\\n //add amount\\n result = result + detail.amount;\\n\\n //add fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\\n result = result + firstFeeAmount + secondFeeAmount;\\n\\n //add royalties\\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\\n for (uint j = 0; j < royalties.length; ++j) {\\n uint royaltyBasePoint = uint(royalties[j] >> 160);\\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\\n result = result + royaltyValue;\\n }\\n }\\n\\n return result;\\n }\\n\\n /**\\n @notice approves weth for a list of the addresses\\n @param transferProxies - array of addresses to approve WETH for\\n */\\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n receive() external payable {}\\n}\",\"keccak256\":\"0xe2bc3642e9df1b789a04dadbb81842deef698616ecc68aa2a4d89252dda77783\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\n\\ninterface IBlur {\\n enum Side { Buy, Sell }\\n enum SignatureVersion { Single, Bulk }\\n enum AssetType { ERC721, ERC1155 }\\n\\n struct Fee {\\n uint16 rate;\\n address payable recipient;\\n }\\n \\n struct Order {\\n address trader;\\n Side side;\\n address matchingPolicy;\\n address collection;\\n uint256 tokenId;\\n uint256 amount;\\n address paymentToken;\\n uint256 price;\\n uint256 listingTime;\\n /* Order expiration timestamp - 0 for oracle cancellations. */\\n uint256 expirationTime;\\n Fee[] fees;\\n uint256 salt;\\n bytes extraParams;\\n }\\n\\n struct Input {\\n Order order;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n bytes extraSignature;\\n SignatureVersion signatureVersion;\\n uint256 blockNumber;\\n }\\n\\n function execute(Input calldata sell, Input calldata buy)\\n external\\n payable;\\n}\\n\",\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-v2/contracts/ExchangeV2.sol\\\";\\n\\nimport {RoyaltiesRegistry} from \\\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\\\";\\nimport {TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\\\";\\nimport {ERC20TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\\\";\\n\\ninterface IExchangeV2 {\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable;\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable;\\n}\",\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibLooksRare.sol\\\";\\n\\ninterface ILooksRare {\\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\\n\\n /**\\n * @notice This function allows a user to execute a taker bid (against a maker ask).\\n * @param takerBid Taker bid struct\\n * @param makerAsk Maker ask struct\\n * @param makerSignature Maker signature\\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\\n * @param affiliate Affiliate address\\n */\\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\\n}\\n\",\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibSeaPort.sol\\\";\\n\\ninterface ISeaPort {\\n function fulfillAdvancedOrder(\\n LibSeaPort.AdvancedOrder calldata advancedOrder,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n bytes32 fulfillerConduitKey,\\n address recipient\\n ) external payable returns (bool fulfilled);\\n\\n function fulfillAvailableAdvancedOrders(\\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\\n bytes32 fulfillerConduitKey,\\n address recipient,\\n uint256 maximumFulfilled\\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\\n\\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\\n external\\n payable\\n returns (bool fulfilled);\\n}\",\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface IWyvernExchange {\\n function atomicMatch_(\\n address[14] memory addrs,\\n uint[18] memory uints,\\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\\n bytes memory calldataBuy,\\n bytes memory calldataSell,\\n bytes memory replacementPatternBuy,\\n bytes memory replacementPatternSell,\\n bytes memory staticExtradataBuy,\\n bytes memory staticExtradataSell,\\n uint8[2] memory vs,\\n bytes32[5] memory rssMetadata)\\n external\\n payable;\\n\\n enum Side {\\n Buy,\\n Sell\\n }\\n\\n enum SaleKind {\\n FixedPrice,\\n DutchAuction\\n }\\n\\n function calculateFinalPrice(\\n Side side,\\n SaleKind saleKind,\\n uint256 basePrice,\\n uint256 extra,\\n uint256 listingTime,\\n uint256 expirationTime\\n ) external view returns (uint256);\\n}\",\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface Ix2y2 {\\n\\n struct OrderItem {\\n uint256 price;\\n bytes data;\\n }\\n\\n struct Pair721 {\\n address token;\\n uint256 tokenId;\\n }\\n\\n struct Pair1155 {\\n address token;\\n uint256 tokenId;\\n uint256 amount;\\n }\\n\\n struct Order {\\n uint256 salt;\\n address user;\\n uint256 network;\\n uint256 intent;\\n uint256 delegateType;\\n uint256 deadline;\\n address currency;\\n bytes dataMask;\\n OrderItem[] items;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n uint8 signVersion;\\n }\\n\\n struct Fee {\\n uint256 percentage;\\n address to;\\n }\\n\\n struct SettleDetail {\\n Op op;\\n uint256 orderIdx;\\n uint256 itemIdx;\\n uint256 price;\\n bytes32 itemHash;\\n address executionDelegate;\\n bytes dataReplacement;\\n uint256 bidIncentivePct;\\n uint256 aucMinIncrementPct;\\n uint256 aucIncDurationSecs;\\n Fee[] fees;\\n }\\n\\n struct SettleShared {\\n uint256 salt;\\n uint256 deadline;\\n uint256 amountToEth;\\n uint256 amountToWeth;\\n address user;\\n bool canFail;\\n }\\n\\n struct RunInput {\\n Order[] orders;\\n SettleDetail[] details;\\n SettleShared shared;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n }\\n\\n enum Op {\\n INVALID,\\n // off-chain\\n COMPLETE_SELL_OFFER,\\n COMPLETE_BUY_OFFER,\\n CANCEL_OFFER,\\n // auction\\n BID,\\n COMPLETE_AUCTION,\\n REFUND_AUCTION,\\n REFUND_AUCTION_STUCK_ITEM\\n }\\n\\n function run(RunInput memory input) external payable;\\n}\",\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nabstract contract IsPausable is Ownable {\\n bool public paused;\\n\\n event Paused(bool paused);\\n\\n function pause(bool _paused) external onlyOwner {\\n paused = _paused;\\n emit Paused(_paused);\\n }\\n\\n function requireNotPaused() internal view {\\n require (!paused, \\\"the contract is paused\\\");\\n }\\n\\n}\\n\",\"keccak256\":\"0xd0ea1d6838dd79b8cfe64e777e4f84456928f0e3621fbb6acd00492e738b2b61\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibLooksRare {\\n struct MakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address signer; // signer of the maker order\\n address collection; // collection address\\n uint256 price; // price (used as )\\n uint256 tokenId; // id of the token\\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\\n address currency; // currency (e.g., WETH)\\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\\n uint256 startTime; // startTime in timestamp\\n uint256 endTime; // endTime in timestamp\\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // additional parameters\\n uint8 v; // v: parameter (27 or 28)\\n bytes32 r; // r: parameter\\n bytes32 s; // s: parameter\\n }\\n\\n struct TakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address taker; // msg.sender\\n uint256 price; // final price for the purchase\\n uint256 tokenId;\\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // other params (e.g., tokenId)\\n }\\n\\n /**\\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\\n */\\n enum CollectionType {\\n ERC721,\\n ERC1155\\n }\\n\\n /**\\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\\n */\\n enum QuoteType {\\n Bid,\\n Ask\\n }\\n /**\\n * 1. Maker struct\\n */\\n\\n /**\\n * @notice Maker is the struct for a maker order.\\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\\n * @param globalNonce Global user order nonce for maker orders\\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\\n * @param strategyId Strategy id\\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\\n * @param collection Collection address\\n * @param currency Currency address (@dev address(0) = ETH)\\n * @param signer Signer address\\n * @param startTime Start timestamp\\n * @param endTime End timestamp\\n * @param price Minimum price for maker ask, maximum price for maker bid\\n * @param itemIds Array of itemIds\\n * @param amounts Array of amounts\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Maker {\\n QuoteType quoteType;\\n uint256 globalNonce;\\n uint256 subsetNonce;\\n uint256 orderNonce;\\n uint256 strategyId;\\n CollectionType collectionType;\\n address collection;\\n address currency;\\n address signer;\\n uint256 startTime;\\n uint256 endTime;\\n uint256 price;\\n uint256[] itemIds;\\n uint256[] amounts;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 2. Taker struct\\n */\\n\\n /**\\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Taker {\\n address recipient;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 3. Merkle tree struct\\n */\\n\\n enum MerkleTreeNodePosition {\\n Left,\\n Right\\n }\\n\\n /**\\n * @notice MerkleTreeNode is a MerkleTree's node.\\n * @param value It can be an order hash or a proof\\n * @param position The node's position in its branch.\\n * It can be left or right or none\\n * (before the tree is sorted).\\n */\\n struct MerkleTreeNode {\\n bytes32 value;\\n MerkleTreeNodePosition position;\\n }\\n\\n /**\\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\\n * @dev A Merkle tree can be computed with order hashes.\\n * It can contain order hashes from both maker bid and maker ask structs.\\n * @param root Merkle root\\n * @param proof Array containing the merkle proof\\n */\\n struct MerkleTree {\\n bytes32 root;\\n MerkleTreeNode[] proof;\\n }\\n}\\n\",\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibSeaPort {\\n /**\\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\\n * matching, a group of six functions may be called that only requires a\\n * subset of the usual order arguments. Note the use of a \\\"basicOrderType\\\"\\n * enum; this represents both the usual order type as well as the \\\"route\\\"\\n * of the basic order (a simple derivation function for the basic order\\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\\n */\\n struct BasicOrderParameters {\\n address considerationToken; // 0x24\\n uint256 considerationIdentifier; // 0x44\\n uint256 considerationAmount; // 0x64\\n address payable offerer; // 0x84\\n address zone; // 0xa4\\n address offerToken; // 0xc4\\n uint256 offerIdentifier; // 0xe4\\n uint256 offerAmount; // 0x104\\n BasicOrderType basicOrderType; // 0x124\\n uint256 startTime; // 0x144\\n uint256 endTime; // 0x164\\n bytes32 zoneHash; // 0x184\\n uint256 salt; // 0x1a4\\n bytes32 offererConduitKey; // 0x1c4\\n bytes32 fulfillerConduitKey; // 0x1e4\\n uint256 totalOriginalAdditionalRecipients; // 0x204\\n AdditionalRecipient[] additionalRecipients; // 0x224\\n bytes signature; // 0x244\\n }\\n /**\\n * @dev Basic orders can supply any number of additional recipients, with the\\n * implied assumption that they are supplied from the offered ETH (or other\\n * native token) or ERC20 token for the order.\\n */\\n struct AdditionalRecipient {\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum BasicOrderType {\\n // 0: no partial fills, anyone can execute\\n ETH_TO_ERC721_FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n ETH_TO_ERC721_PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC721_FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 4: no partial fills, anyone can execute\\n ETH_TO_ERC1155_FULL_OPEN,\\n\\n // 5: partial fills supported, anyone can execute\\n ETH_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 6: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 7: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 8: no partial fills, anyone can execute\\n ERC20_TO_ERC721_FULL_OPEN,\\n\\n // 9: partial fills supported, anyone can execute\\n ERC20_TO_ERC721_PARTIAL_OPEN,\\n\\n // 10: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC721_FULL_RESTRICTED,\\n\\n // 11: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 12: no partial fills, anyone can execute\\n ERC20_TO_ERC1155_FULL_OPEN,\\n\\n // 13: partial fills supported, anyone can execute\\n ERC20_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 14: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 15: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 16: no partial fills, anyone can execute\\n ERC721_TO_ERC20_FULL_OPEN,\\n\\n // 17: partial fills supported, anyone can execute\\n ERC721_TO_ERC20_PARTIAL_OPEN,\\n\\n // 18: no partial fills, only offerer or zone can execute\\n ERC721_TO_ERC20_FULL_RESTRICTED,\\n\\n // 19: partial fills supported, only offerer or zone can execute\\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\\n\\n // 20: no partial fills, anyone can execute\\n ERC1155_TO_ERC20_FULL_OPEN,\\n\\n // 21: partial fills supported, anyone can execute\\n ERC1155_TO_ERC20_PARTIAL_OPEN,\\n\\n // 22: no partial fills, only offerer or zone can execute\\n ERC1155_TO_ERC20_FULL_RESTRICTED,\\n\\n // 23: partial fills supported, only offerer or zone can execute\\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\\n }\\n\\n /**\\n * @dev The full set of order components, with the exception of the counter,\\n * must be supplied when fulfilling more sophisticated orders or groups of\\n * orders. The total number of original consideration items must also be\\n * supplied, as the caller may specify additional consideration items.\\n */\\n struct OrderParameters {\\n address offerer; // 0x00\\n address zone; // 0x20\\n OfferItem[] offer; // 0x40\\n ConsiderationItem[] consideration; // 0x60\\n OrderType orderType; // 0x80\\n uint256 startTime; // 0xa0\\n uint256 endTime; // 0xc0\\n bytes32 zoneHash; // 0xe0\\n uint256 salt; // 0x100\\n bytes32 conduitKey; // 0x120\\n uint256 totalOriginalConsiderationItems; // 0x140\\n // offer.length // 0x160\\n }\\n\\n /**\\n * @dev Orders require a signature in addition to the other order parameters.\\n */\\n struct Order {\\n OrderParameters parameters;\\n bytes signature;\\n }\\n\\n struct AdvancedOrder {\\n OrderParameters parameters;\\n uint120 numerator;\\n uint120 denominator;\\n bytes signature;\\n bytes extraData;\\n }\\n\\n struct OfferItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n }\\n\\n /**\\n * @dev A consideration item has the same five components as an offer item and\\n * an additional sixth component designating the required recipient of the\\n * item.\\n */\\n struct ConsiderationItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum OrderType {\\n // 0: no partial fills, anyone can execute\\n FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n PARTIAL_RESTRICTED\\n }\\n\\n // prettier-ignore\\n enum ItemType {\\n // 0: ETH on mainnet, MATIC on polygon, etc.\\n NATIVE,\\n\\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\\n ERC20,\\n\\n // 2: ERC721 items\\n ERC721,\\n\\n // 3: ERC1155 items\\n ERC1155,\\n\\n // 4: ERC721 items where a number of tokenIds are supported\\n ERC721_WITH_CRITERIA,\\n\\n // 5: ERC1155 items where a number of ids are supported\\n ERC1155_WITH_CRITERIA\\n }\\n\\n /**\\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\\n * offer and consideration items, then generates a single execution\\n * element. A given fulfillment can be applied to as many offer and\\n * consideration items as desired, but must contain at least one offer and\\n * at least one consideration that match. The fulfillment must also remain\\n * consistent on all key parameters across all offer items (same offerer,\\n * token, type, tokenId, and conduit preference) as well as across all\\n * consideration items (token, type, tokenId, and recipient).\\n */\\n struct Fulfillment {\\n FulfillmentComponent[] offerComponents;\\n FulfillmentComponent[] considerationComponents;\\n }\\n\\n /**\\n * @dev Each fulfillment component contains one index referencing a specific\\n * order and another referencing a specific offer or consideration item.\\n */\\n struct FulfillmentComponent {\\n uint256 orderIndex;\\n uint256 itemIndex;\\n }\\n\\n /**\\n * @dev An execution is triggered once all consideration items have been zeroed\\n * out. It sends the item in question from the offerer to the item's\\n * recipient, optionally sourcing approvals from either this contract\\n * directly or from the offerer's chosen conduit if one is specified. An\\n * execution is not provided as an argument, but rather is derived via\\n * orders, criteria resolvers, and fulfillments (where the total number of\\n * executions will be less than or equal to the total number of indicated\\n * fulfillments) and returned as part of `matchOrders`.\\n */\\n struct Execution {\\n ReceivedItem item;\\n address offerer;\\n bytes32 conduitKey;\\n }\\n\\n /**\\n * @dev A received item is translated from a utilized consideration item and has\\n * the same four components as a spent item, as well as an additional fifth\\n * component designating the required recipient of the item.\\n */\\n struct ReceivedItem {\\n ItemType itemType;\\n address token;\\n uint256 identifier;\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n struct CriteriaResolver {\\n uint256 orderIndex;\\n Side side;\\n uint256 index;\\n uint256 identifier;\\n bytes32[] criteriaProof;\\n }\\n\\n // prettier-ignore\\n enum Side {\\n // 0: Items that can be spent\\n OFFER,\\n\\n // 1: Items that must be received\\n CONSIDERATION\\n }\\n}\\n\",\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x7f99c2e0828bbba57e1599d92f1368b62ef0e9cd62bda3c4091e108d1fbc35b6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x5e982ad688493d9c729757c2ebd98efecd0bf3b33992f7342edf6c349874b86c\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x363fa1f25a41aa7d7b3fb9e2d182dec04c3774d06d9eed428b3fe48140fa4b7e\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x87cd179c900495ee44c1b9c7fa57f4da0228217d78792bd6d6a6fde6c32be2b2\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x6102006040523480156200001257600080fd5b5060405162004f4738038062004f47833981016040819052620000359162000352565b6000620000416200021e565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200009d6301ffc9a760e01b62000222565b620000af630271189760e51b62000222565b82516001600160601b0319606091821b811660809081526020860151831b821660a09081526040870151841b831660c090815284880151851b841660e090815292880151851b841661010090815291880151851b841661012090815290880151851b841661014090815292880151851b84166101605290870151841b831661018052860151831b82166101a052850151821b81166101c0529083901b166101e05260005b815181101562000214576001600160a01b038316156200020b57826001600160a01b031663095ea7b38383815181106200018957fe5b60200260200101516000196040518363ffffffff1660e01b8152600401620001b392919062000437565b602060405180830381600087803b158015620001ce57600080fd5b505af1158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020991906200040e565b505b60010162000153565b5050505062000474565b3390565b6001600160e01b0319808216141562000282576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b80516001600160a01b0381168114620002c257600080fd5b919050565b600082601f830112620002d8578081fd5b815160206001600160401b03821115620002ee57fe5b808202620002fe82820162000450565b83815282810190868401838801850189101562000319578687fd5b8693505b8584101562000346576200033181620002aa565b8352600193909301929184019184016200031d565b50979650505050505050565b60008060006101a0848603121562000368578283fd5b84601f85011262000377578283fd5b610160620003858162000450565b9085019080868884111562000398578687fd5b865b600b811015620003c557620003af82620002aa565b845260209384019391909101906001016200039a565b50508095505050620003d781620002aa565b61018086015190935090506001600160401b03811115620003f6578182fd5b6200040486828701620002c7565b9150509250925092565b60006020828403121562000420578081fd5b8151801515811462000430578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b03811182821017156200046c57fe5b604052919050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6149ac6200059b60003980610517528061062f528061084c52806109bf52806123e3528061249a5280612529525080610d8c5280611dee52806122ab5250806104cf5280611d1c52806121db525080610c555280611b375280611bd15250806104f35280611a2d525080610c0d528061195b528061210b525080610544528061188952508061092b528061165d52806116f7525080610db05280611204528061129a5250806103cf5280610f525280611f6052508061094f5280611101528061203b525080610c31528061102f52506149ac6000f3fe60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204ccd56ab995869fdbc4ed21f23f9fabaa9ca715a97c76cb58a753eac8de130ff64736f6c63430007060033", - "deployedBytecode": "0x60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212204ccd56ab995869fdbc4ed21f23f9fabaa9ca715a97c76cb58a753eac8de130ff64736f6c63430007060033", + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address[11]\",\"name\":\"marketplaces\",\"type\":\"address[11]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_paused\",\"type\":\"bool\"}],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_6\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapper.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapper.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":\"RaribleExchangeWrapper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/**\\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\\n *\\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\\n *\\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\\n * ({_hashTypedDataV4}).\\n *\\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\\n * the chain id to protect against replay attacks on an eventual fork of the chain.\\n *\\n * NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method\\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\\n *\\n * _Available since v3.4._\\n */\\nabstract contract EIP712Upgradeable is Initializable {\\n /* solhint-disable var-name-mixedcase */\\n bytes32 private _HASHED_NAME;\\n bytes32 private _HASHED_VERSION;\\n bytes32 private constant _TYPE_HASH = keccak256(\\\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\\\");\\n /* solhint-enable var-name-mixedcase */\\n\\n /**\\n * @dev Initializes the domain separator and parameter caches.\\n *\\n * The meaning of `name` and `version` is specified in\\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\\n *\\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\\n * - `version`: the current major version of the signing domain.\\n *\\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\\n * contract upgrade].\\n */\\n function __EIP712_init(string memory name, string memory version) internal initializer {\\n __EIP712_init_unchained(name, version);\\n }\\n\\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\\n bytes32 hashedName = keccak256(bytes(name));\\n bytes32 hashedVersion = keccak256(bytes(version));\\n _HASHED_NAME = hashedName;\\n _HASHED_VERSION = hashedVersion;\\n }\\n\\n /**\\n * @dev Returns the domain separator for the current chain.\\n */\\n function _domainSeparatorV4() internal view returns (bytes32) {\\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\\n }\\n\\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\\n return keccak256(\\n abi.encode(\\n typeHash,\\n name,\\n version,\\n _getChainId(),\\n address(this)\\n )\\n );\\n }\\n\\n /**\\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\\n * function returns the hash of the fully encoded EIP712 message for this domain.\\n *\\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\\n *\\n * ```solidity\\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\\n * keccak256(\\\"Mail(address to,string contents)\\\"),\\n * mailTo,\\n * keccak256(bytes(mailContents))\\n * )));\\n * address signer = ECDSA.recover(digest, signature);\\n * ```\\n */\\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\\n return keccak256(abi.encodePacked(\\\"\\\\x19\\\\x01\\\", _domainSeparatorV4(), structHash));\\n }\\n\\n function _getChainId() private view returns (uint256 chainId) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n chainId := chainid()\\n }\\n }\\n\\n /**\\n * @dev The hash of the name parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712NameHash() internal virtual view returns (bytes32) {\\n return _HASHED_NAME;\\n }\\n\\n /**\\n * @dev The hash of the version parameter for the EIP712 domain.\\n *\\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\\n * are a concern.\\n */\\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\\n return _HASHED_VERSION;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMathUpgradeable {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20Upgradeable {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor () internal {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n}\\n\",\"keccak256\":\"0x15e2d5bd4c28a88548074c54d220e8086f638a71ed07e6b3ba5a70066fcf458d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/ERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC165.sol\\\";\\n\\n/**\\n * @dev Implementation of the {IERC165} interface.\\n *\\n * Contracts may inherit from this and call {_registerInterface} to declare\\n * their support of an interface.\\n */\\nabstract contract ERC165 is IERC165 {\\n /*\\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\\n */\\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\\n\\n /**\\n * @dev Mapping of interface ids to whether or not it's supported.\\n */\\n mapping(bytes4 => bool) private _supportedInterfaces;\\n\\n constructor () internal {\\n // Derived contracts need only register support for their own interfaces,\\n // we register support for ERC165 itself here\\n _registerInterface(_INTERFACE_ID_ERC165);\\n }\\n\\n /**\\n * @dev See {IERC165-supportsInterface}.\\n *\\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\\n return _supportedInterfaces[interfaceId];\\n }\\n\\n /**\\n * @dev Registers the contract as an implementer of the interface defined by\\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\\n * registering its interface id is not required.\\n *\\n * See {IERC165-supportsInterface}.\\n *\\n * Requirements:\\n *\\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\\n */\\n function _registerInterface(bytes4 interfaceId) internal virtual {\\n require(interfaceId != 0xffffffff, \\\"ERC165: invalid interface id\\\");\\n _supportedInterfaces[interfaceId] = true;\\n }\\n}\\n\",\"keccak256\":\"0x24141d2f6b98d4cb77a8936eae8cbaad2e261d9062bdc08036096f4550092501\",\"license\":\"MIT\"},\"@openzeppelin/contracts/introspection/IERC165.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165 {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0xf70bc25d981e4ec9673a995ad2995d5d493ea188d3d8f388bba9c227ce09fb82\",\"license\":\"MIT\"},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\\n * checks.\\n *\\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\\n * in bugs, because programmers usually assume that an overflow raises an\\n * error, which is the standard behavior in high level programming languages.\\n * `SafeMath` restores this intuition by reverting the transaction when an\\n * operation overflows.\\n *\\n * Using this library instead of the unchecked operations eliminates an entire\\n * class of bugs, so it's recommended to use it always.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n uint256 c = a + b;\\n require(c >= a, \\\"SafeMath: addition overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b <= a, \\\"SafeMath: subtraction overflow\\\");\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n if (a == 0) return 0;\\n uint256 c = a * b;\\n require(c / a == b, \\\"SafeMath: multiplication overflow\\\");\\n return c;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: division by zero\\\");\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n require(b > 0, \\\"SafeMath: modulo by zero\\\");\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryDiv}.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n}\\n\",\"keccak256\":\"0xcc78a17dd88fa5a2edc60c8489e2f405c0913b377216a5b26b35656b2d0dab52\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./ERC1155Receiver.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\ncontract ERC1155Holder is ERC1155Receiver {\\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155Received.selector;\\n }\\n\\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC1155BatchReceived.selector;\\n }\\n}\\n\",\"keccak256\":\"0x21428ca879b2437107322dfc1e214d25ecd6b966344961025ee412c3acfd5fc0\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC1155Receiver.sol\\\";\\nimport \\\"../../introspection/ERC165.sol\\\";\\n\\n/**\\n * @dev _Available since v3.1._\\n */\\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\\n constructor() internal {\\n _registerInterface(\\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\\n );\\n }\\n}\\n\",\"keccak256\":\"0x57a0e246fb1c8f9cccf91c508eafe474e40260a31de3a39019ba8312cfdf9b2d\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165.sol\\\";\\n\\n/**\\n * _Available since v3.1._\\n */\\ninterface IERC1155Receiver is IERC165 {\\n\\n /**\\n @dev Handles the receipt of a single ERC1155 token type. This function is\\n called at the end of a `safeTransferFrom` after the balance has been updated.\\n To accept the transfer, this must return\\n `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))`\\n (i.e. 0xf23a6e61, or its own function selector).\\n @param operator The address which initiated the transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param id The ID of the token being transferred\\n @param value The amount of tokens being transferred\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155Received(address,address,uint256,uint256,bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155Received(\\n address operator,\\n address from,\\n uint256 id,\\n uint256 value,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n\\n /**\\n @dev Handles the receipt of a multiple ERC1155 token types. This function\\n is called at the end of a `safeBatchTransferFrom` after the balances have\\n been updated. To accept the transfer(s), this must return\\n `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))`\\n (i.e. 0xbc197c81, or its own function selector).\\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\\n @param from The address which previously owned the token\\n @param ids An array containing ids of each token being transferred (order and length must match values array)\\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\\n @param data Additional data with no specified format\\n @return `bytes4(keccak256(\\\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\\\"))` if transfer is allowed\\n */\\n function onERC1155BatchReceived(\\n address operator,\\n address from,\\n uint256[] calldata ids,\\n uint256[] calldata values,\\n bytes calldata data\\n )\\n external\\n returns(bytes4);\\n}\\n\",\"keccak256\":\"0x2690a9b7f4f7489b8d25a4fc6bffc02ec3971fb41ed6c8b59adef2833bdab07c\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"./IERC721Receiver.sol\\\";\\n\\n /**\\n * @dev Implementation of the {IERC721Receiver} interface.\\n *\\n * Accepts all token transfers. \\n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\\n */\\ncontract ERC721Holder is IERC721Receiver {\\n\\n /**\\n * @dev See {IERC721Receiver-onERC721Received}.\\n *\\n * Always returns `IERC721Receiver.onERC721Received.selector`.\\n */\\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\\n return this.onERC721Received.selector;\\n }\\n}\\n\",\"keccak256\":\"0xdb2133d55b8f3a94313af8f4371ae0501a58e412d471b03d8581214c5ea2ce33\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @title ERC721 token receiver interface\\n * @dev Interface for any contract that wants to support safeTransfers\\n * from ERC721 asset contracts.\\n */\\ninterface IERC721Receiver {\\n /**\\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\\n * by `operator` from `from`, this function is called.\\n *\\n * It must return its Solidity selector to confirm the token transfer.\\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\\n *\\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\\n */\\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\\n}\\n\",\"keccak256\":\"0x52146049d6709c870e8ddcd988b5155cb6c5d640cfcd8978aee52bc1ba2ec4eb\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0x8d3cb350f04ff49cfb10aef08d87f19dcbaecc8027b0bed12f3275cd12f38cf0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface IAssetMatcher {\\n function matchAssets(\\n LibAsset.AssetType memory leftAssetType,\\n LibAsset.AssetType memory rightAssetType\\n ) external view returns (LibAsset.AssetType memory);\\n}\\n\",\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\ninterface IERC20TransferProxy {\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\\n}\\n\",\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\ninterface ITransferProxy {\\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\\n}\\n\",\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\\n\\n bytes constant EMPTY = \\\"\\\";\\n mapping(bytes4 => address) internal matchers;\\n\\n event MatcherChange(bytes4 indexed assetType, address matcher);\\n\\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function _setAssetMatcher(bytes4 assetType, address matcher) internal {\\n matchers[assetType] = matcher;\\n emit MatcherChange(assetType, matcher);\\n }\\n\\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\\n if (result.assetClass == 0) {\\n return matchAssetOneSide(rightAssetType, leftAssetType);\\n } else {\\n return result;\\n }\\n }\\n\\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\\n bytes4 classLeft = leftAssetType.assetClass;\\n bytes4 classRight = rightAssetType.assetClass;\\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n address matcher = matchers[classLeft];\\n if (matcher != address(0)) {\\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\\n }\\n if (classLeft == classRight) {\\n return simpleMatch(leftAssetType, rightAssetType);\\n }\\n revert(\\\"not found IAssetMatcher\\\");\\n }\\n\\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\\n bytes32 leftHash = keccak256(leftAssetType.data);\\n bytes32 rightHash = keccak256(rightAssetType.data);\\n if (leftHash == rightHash) {\\n return leftAssetType;\\n }\\n return LibAsset.AssetType(0, EMPTY);\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x8fceb04eec1c1b32bea097a019b57e9422c31fa2e020e9957db91d5b03edb1bb\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./ExchangeV2Core.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\\\";\\n\\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\\n function __ExchangeV2_init(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n }\\n\\n function __ExchangeV2_init_proxy(\\n address _transferProxy,\\n address _erc20TransferProxy,\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider,\\n address _initialOwner,\\n bytes4[] memory assetTypes, \\n address[] memory proxies,\\n bytes4 assetMatcherType,\\n address assetMatcher\\n ) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\\n __OrderValidator_init_unchained();\\n for (uint i = 0; i < assetTypes.length; i++) {\\n _setTransferProxy(assetTypes[i], proxies[i]);\\n }\\n _setAssetMatcher(assetMatcherType, assetMatcher);\\n transferOwnership(_initialOwner);\\n }\\n}\\n\",\"keccak256\":\"0x8b5d108d1e027792fd3494dda7feb79937b5bb68cec82109f3ce69fe1f01c59a\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./libraries/LibFill.sol\\\";\\nimport \\\"./libraries/LibOrderData.sol\\\";\\nimport \\\"./libraries/LibDirectTransfer.sol\\\";\\nimport \\\"./OrderValidator.sol\\\";\\nimport \\\"./AssetMatcher.sol\\\";\\n\\nimport \\\"@rarible/transfer-manager/contracts/TransferExecutor.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\\\";\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\\\";\\n\\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\\n using SafeMathUpgradeable for uint;\\n using LibTransfer for address;\\n\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n //state of the orders\\n mapping(bytes32 => uint) public fills;\\n\\n //events\\n event Cancel(bytes32 hash);\\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\\n\\n function cancel(LibOrder.Order memory order) external {\\n require(_msgSender() == order.maker, \\\"not a maker\\\");\\n require(order.salt != 0, \\\"0 salt can't be used\\\");\\n bytes32 orderKeyHash = LibOrder.hashKey(order);\\n fills[orderKeyHash] = UINT256_MAX;\\n emit Cancel(orderKeyHash);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\\n \\n */\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable{\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n \\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n direct.sellOrderMaker,\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n direct.sellOrderSalt,\\n direct.sellOrderStart,\\n direct.sellOrderEnd,\\n direct.sellOrderDataType,\\n direct.sellOrderData\\n );\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.buyOrderPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.buyOrderNftAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.sellOrderDataType,\\n direct.buyOrderData\\n );\\n\\n validateFull(sellOrder, direct.sellOrderSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n /**\\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\\n * @param direct struct with parameters for accept bid operation\\n */\\n function directAcceptBid(\\n LibDirectTransfer.AcceptBid calldata direct\\n ) external payable {\\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\\n\\n LibOrder.Order memory buyOrder = LibOrder.Order(\\n direct.bidMaker,\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.bidPaymentAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.bidNftAmount\\n ),\\n direct.bidSalt,\\n direct.bidStart,\\n direct.bidEnd,\\n direct.bidDataType,\\n direct.bidData\\n );\\n\\n LibOrder.Order memory sellOrder = LibOrder.Order(\\n address(0),\\n LibAsset.Asset(\\n LibAsset.AssetType(\\n direct.nftAssetClass,\\n direct.nftData\\n ),\\n direct.sellOrderNftAmount\\n ),\\n address(0),\\n LibAsset.Asset(\\n paymentAssetType,\\n direct.sellOrderPaymentAmount\\n ),\\n 0,\\n 0,\\n 0,\\n direct.bidDataType,\\n direct.sellOrderData\\n );\\n\\n validateFull(buyOrder, direct.bidSignature);\\n\\n matchAndTransfer(sellOrder, buyOrder);\\n }\\n\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable {\\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\\n matchAndTransfer(orderLeft, orderRight);\\n }\\n\\n /**\\n * @dev function, validate orders\\n * @param orderLeft left order\\n * @param signatureLeft order left signature\\n * @param orderRight right order\\n * @param signatureRight order right signature\\n */\\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\\n validateFull(orderLeft, signatureLeft);\\n validateFull(orderRight, signatureRight);\\n if (orderLeft.taker != address(0)) {\\n if (orderRight.maker != address(0))\\n require(orderRight.maker == orderLeft.taker, \\\"leftOrder.taker verification failed\\\");\\n }\\n if (orderRight.taker != address(0)) {\\n if (orderLeft.maker != address(0))\\n require(orderRight.taker == orderLeft.maker, \\\"rightOrder.taker verification failed\\\");\\n }\\n }\\n\\n /**\\n @notice matches valid orders and transfers their assets\\n @param orderLeft the left order of the match\\n @param orderRight the right order of the match\\n */\\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\\n\\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\\n\\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\\n LibDeal.DealSide({\\n asset: LibAsset.Asset({\\n assetType: makeMatch,\\n value: newFill.leftValue\\n }),\\n payouts: leftOrderData.payouts,\\n originFees: leftOrderData.originFees,\\n proxy: proxies[makeMatch.assetClass],\\n from: orderLeft.maker\\n }), \\n LibDeal.DealSide({\\n asset: LibAsset.Asset( \\n takeMatch,\\n newFill.rightValue\\n ),\\n payouts: rightOrderData.payouts,\\n originFees: rightOrderData.originFees,\\n proxy: proxies[takeMatch.assetClass],\\n from: orderRight.maker\\n }),\\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\\n );\\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\\n require(msg.value >= totalMakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalMakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\\n }\\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n require(msg.value >= totalTakeValue, \\\"not enough eth\\\");\\n if (msg.value > totalTakeValue) {\\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\\n }\\n }\\n }\\n\\n function parseOrdersSetFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight\\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\\n\\n address msgSender = _msgSender();\\n if (orderLeft.maker == address(0)) {\\n orderLeft.maker = msgSender;\\n }\\n if (orderRight.maker == address(0)) {\\n orderRight.maker = msgSender;\\n }\\n\\n leftOrderData = LibOrderData.parse(orderLeft);\\n rightOrderData = LibOrderData.parse(orderRight);\\n\\n newFill = setFillEmitMatch(\\n orderLeft,\\n orderRight,\\n leftOrderKeyHash,\\n rightOrderKeyHash,\\n leftOrderData.isMakeFill,\\n rightOrderData.isMakeFill\\n );\\n }\\n\\n /**\\n @notice calculates fills for the matched orders and set them in \\\"fills\\\" mapping\\n @param orderLeft left order of the match\\n @param orderRight right order of the match\\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\\n @return returns change in orders' fills by the match \\n */\\n function setFillEmitMatch(\\n LibOrder.Order memory orderLeft,\\n LibOrder.Order memory orderRight,\\n bytes32 leftOrderKeyHash,\\n bytes32 rightOrderKeyHash,\\n bool leftMakeFill,\\n bool rightMakeFill\\n ) internal returns (LibFill.FillResult memory) {\\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\\n\\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\\n require(newFill.leftValue > 0, \\\"nothing to fill\\\");\\n }\\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\\n require(newFill.rightValue > 0, \\\"nothing to fill\\\");\\n }\\n\\n if (orderLeft.salt != 0) {\\n if (leftMakeFill) {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\\n } else {\\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\\n }\\n }\\n\\n if (orderRight.salt != 0) {\\n if (rightMakeFill) {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\\n } else {\\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\\n }\\n }\\n\\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\\n\\n return newFill;\\n }\\n\\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\\n if (salt == 0) {\\n fill = 0;\\n } else {\\n fill = fills[hash];\\n }\\n }\\n\\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\\n require(makeMatch.assetClass != 0, \\\"assets don't match\\\");\\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\\n require(takeMatch.assetClass != 0, \\\"assets don't match\\\");\\n }\\n\\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\\n LibOrder.validateOrderTime(order);\\n validate(order, signature);\\n }\\n\\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\\n LibAsset.AssetType memory result;\\n if(token == address(0)) {\\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\\n } else {\\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\\n result.data = abi.encode(token);\\n }\\n return result;\\n }\\n\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd9562a650f1f55fd78a6e2cf55b635b09177ffa8b7e2b959d49d251117fb696f\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./libraries/LibOrder.sol\\\";\\n\\nimport \\\"@rarible/lib-signature/contracts/IERC1271.sol\\\";\\nimport \\\"@rarible/lib-signature/contracts/LibSignature.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\\\";\\n\\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\\n using LibSignature for bytes32;\\n using AddressUpgradeable for address;\\n \\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\\n\\n function __OrderValidator_init_unchained() internal initializer {\\n __EIP712_init_unchained(\\\"Exchange\\\", \\\"2\\\");\\n }\\n\\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\\n if (order.salt == 0) {\\n if (order.maker != address(0)) {\\n require(_msgSender() == order.maker, \\\"maker is not tx sender\\\");\\n }\\n } else {\\n if (_msgSender() != order.maker) {\\n bytes32 hash = LibOrder.hash(order);\\n // if maker is contract checking ERC1271 signature\\n if (order.maker.isContract()) {\\n require(\\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\\n \\\"contract order signature verification error\\\"\\n );\\n } else {\\n // if maker is not contract then checking ECDSA signature\\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\\n revert(\\\"order signature verification error\\\");\\n } else {\\n require (order.maker != address(0), \\\"no maker\\\");\\n }\\n }\\n }\\n }\\n }\\n\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibDirectTransfer { //LibDirectTransfers\\n /*All buy parameters need for create buyOrder and sellOrder*/\\n struct Purchase {\\n address sellOrderMaker; //\\n uint256 sellOrderNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 sellOrderPaymentAmount;\\n address paymentToken;\\n uint256 sellOrderSalt;\\n uint sellOrderStart;\\n uint sellOrderEnd;\\n bytes4 sellOrderDataType;\\n bytes sellOrderData;\\n bytes sellOrderSignature;\\n\\n uint256 buyOrderPaymentAmount;\\n uint256 buyOrderNftAmount;\\n bytes buyOrderData;\\n }\\n\\n /*All accept bid parameters need for create buyOrder and sellOrder*/\\n struct AcceptBid {\\n address bidMaker; //\\n uint256 bidNftAmount;\\n bytes4 nftAssetClass;\\n bytes nftData;\\n uint256 bidPaymentAmount;\\n address paymentToken;\\n uint256 bidSalt;\\n uint bidStart;\\n uint bidEnd;\\n bytes4 bidDataType;\\n bytes bidData;\\n bytes bidSignature;\\n\\n uint256 sellOrderPaymentAmount;\\n uint256 sellOrderNftAmount;\\n bytes sellOrderData;\\n }\\n}\\n\",\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibFill {\\n struct FillResult {\\n uint leftValue;\\n uint rightValue;\\n }\\n\\n struct IsMakeFill {\\n bool leftMake;\\n bool rightMake;\\n }\\n\\n /**\\n * @dev Should return filled values\\n * @param leftOrder left order\\n * @param rightOrder right order\\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\\n * @return tuple representing fill of both assets\\n */\\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\\n\\n //We have 3 cases here:\\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\\n }\\n\\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\\n require(makerValue <= rightMakeValue, \\\"fillRight: unable to fill\\\");\\n return FillResult(rightTakeValue, makerValue);\\n }\\n\\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\\n require(rightTake <= leftMakeValue, \\\"fillLeft: unable to fill\\\");\\n return FillResult(leftMakeValue, leftTakeValue);\\n }\\n}\\n\",\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary LibMath {\\n using SafeMathUpgradeable for uint;\\n\\n /// @dev Calculates partial value given a numerator and denominator rounded down.\\n /// Reverts if rounding error is >= 0.1%\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to calculate partial of.\\n /// @return partialAmount value of target rounded down.\\n function safeGetPartialAmountFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorFloor(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding down.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorFloor(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // The absolute rounding error is the difference between the rounded\\n // value and the ideal value. The relative rounding error is the\\n // absolute rounding error divided by the absolute value of the\\n // ideal value. This is undefined when the ideal value is zero.\\n //\\n // The ideal value is `numerator * target / denominator`.\\n // Let's call `numerator * target % denominator` the remainder.\\n // The absolute error is `remainder / denominator`.\\n //\\n // When the ideal value is zero, we require the absolute error to\\n // be zero. Fortunately, this is always the case. The ideal value is\\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\\n // remainder and absolute error are also zero.\\n if (target == 0 || numerator == 0) {\\n return false;\\n }\\n\\n // Otherwise, we want the relative rounding error to be strictly\\n // less than 0.1%.\\n // The relative error is `remainder / (numerator * target)`.\\n // We want the relative error less than 1 / 1000:\\n // remainder / (numerator * target) < 1 / 1000\\n // or equivalently:\\n // 1000 * remainder < numerator * target\\n // so we have a rounding error iff:\\n // 1000 * remainder >= numerator * target\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n }\\n\\n function safeGetPartialAmountCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (uint256 partialAmount) {\\n if (isRoundingErrorCeil(numerator, denominator, target)) {\\n revert(\\\"rounding error\\\");\\n }\\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\\n }\\n\\n /// @dev Checks if rounding error >= 0.1% when rounding up.\\n /// @param numerator Numerator.\\n /// @param denominator Denominator.\\n /// @param target Value to multiply with numerator/denominator.\\n /// @return isError Rounding error is present.\\n function isRoundingErrorCeil(\\n uint256 numerator,\\n uint256 denominator,\\n uint256 target\\n ) internal pure returns (bool isError) {\\n if (denominator == 0) {\\n revert(\\\"division by zero\\\");\\n }\\n\\n // See the comments in `isRoundingError`.\\n if (target == 0 || numerator == 0) {\\n // When either is zero, the ideal value and rounded value are zero\\n // and there is no rounding error. (Although the relative error\\n // is undefined.)\\n return false;\\n }\\n // Compute remainder as before\\n uint256 remainder = mulmod(\\n target,\\n numerator,\\n denominator\\n );\\n remainder = denominator.sub(remainder) % denominator;\\n isError = remainder.mul(1000) >= numerator.mul(target);\\n return isError;\\n }\\n}\\n\",\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nimport \\\"./LibMath.sol\\\";\\nimport \\\"./LibOrderDataV3.sol\\\";\\nimport \\\"./LibOrderDataV2.sol\\\";\\nimport \\\"./LibOrderDataV1.sol\\\";\\n\\nlibrary LibOrder {\\n using SafeMathUpgradeable for uint;\\n\\n bytes32 constant ORDER_TYPEHASH = keccak256(\\n \\\"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\\n\\n struct Order {\\n address maker;\\n LibAsset.Asset makeAsset;\\n address taker;\\n LibAsset.Asset takeAsset;\\n uint salt;\\n uint start;\\n uint end;\\n bytes4 dataType;\\n bytes data;\\n }\\n\\n /**\\n * @dev Calculate remaining make and take values of the order (after partial filling real make and take decrease)\\n * @param order initial order to calculate remaining values for\\n * @param fill current fill of the left order (0 if order is unfilled)\\n * @param isMakeFill true if order fill is calculated from the make side, false if from the take side\\n * @return makeValue remaining make value of the order. if fill = 0 then it's order's make value\\n * @return takeValue remaining take value of the order. if fill = 0 then it's order's take value\\n */\\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\\n if (isMakeFill) {\\n makeValue = order.makeAsset.value.sub(fill);\\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\\n } else {\\n takeValue = order.takeAsset.value.sub(fill);\\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \\n } \\n }\\n\\n function hashKey(Order memory order) internal pure returns (bytes32) {\\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt\\n ));\\n } else {\\n //order.data is in hash for V2, V3 and all new order\\n return keccak256(abi.encode(\\n order.maker,\\n LibAsset.hash(order.makeAsset.assetType),\\n LibAsset.hash(order.takeAsset.assetType),\\n order.salt,\\n order.data\\n ));\\n }\\n }\\n\\n function hash(Order memory order) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ORDER_TYPEHASH,\\n order.maker,\\n LibAsset.hash(order.makeAsset),\\n order.taker,\\n LibAsset.hash(order.takeAsset),\\n order.salt,\\n order.start,\\n order.end,\\n order.dataType,\\n keccak256(order.data)\\n ));\\n }\\n\\n function validateOrderTime(LibOrder.Order memory order) internal view {\\n require(order.start == 0 || order.start < block.timestamp, \\\"Order start validation failed\\\");\\n require(order.end == 0 || order.end > block.timestamp, \\\"Order end validation failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"./LibOrder.sol\\\";\\n\\nlibrary LibOrderData {\\n\\n struct GenericOrderData {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n } \\n\\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\\n if (order.dataType == LibOrderDataV1.V1) {\\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n } else if (order.dataType == LibOrderDataV2.V2) {\\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\\n dataOrder.payouts = data.payouts;\\n dataOrder.originFees = data.originFees;\\n dataOrder.isMakeFill = data.isMakeFill;\\n } else if (order.dataType == 0xffffffff) {\\n } else {\\n revert(\\\"Unknown Order data type\\\");\\n }\\n if (dataOrder.payouts.length == 0) {\\n dataOrder.payouts = payoutSet(order.maker);\\n }\\n }\\n\\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory payout = new LibPart.Part[](1);\\n payout[0].account = payable(orderAddress);\\n payout[0].value = 10000;\\n return payout;\\n }\\n\\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory originFee;\\n\\n if (dataFirst > 0 && dataSecond > 0){\\n originFee = new LibPart.Part[](2);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n originFee[1] = uintToLibPart(dataSecond);\\n }\\n\\n if (dataFirst > 0 && dataSecond == 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataFirst);\\n }\\n\\n if (dataFirst == 0 && dataSecond > 0) {\\n originFee = new LibPart.Part[](1);\\n\\n originFee[0] = uintToLibPart(dataSecond);\\n }\\n\\n return originFee;\\n }\\n\\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\\n LibPart.Part[] memory payouts;\\n\\n if (data > 0) {\\n payouts = new LibPart.Part[](1);\\n payouts[0] = uintToLibPart(data);\\n }\\n\\n return payouts;\\n }\\n\\n /**\\n @notice converts uint to LibPart.Part\\n @param data address and value encoded in uint (first 12 bytes )\\n @return result LibPart.Part \\n */\\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\\n if (data > 0){\\n result.account = payable(address(data));\\n result.value = uint96(data >> 160);\\n }\\n }\\n\\n}\\n\",\"keccak256\":\"0xf14209f07d0936ef3697a06c5d84b514e94fc304aff1bb43cff1b91e85390bb5\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV1 {\\n bytes4 constant public V1 = bytes4(keccak256(\\\"V1\\\"));\\n\\n struct DataV1 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n }\\n\\n}\\n\",\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibOrderDataV2 {\\n bytes4 constant public V2 = bytes4(keccak256(\\\"V2\\\"));\\n\\n struct DataV2 {\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n bool isMakeFill;\\n }\\n\\n}\\n\",\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\"},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\n/// @dev deprecated\\nlibrary LibOrderDataV3 {\\n bytes4 constant public V3_SELL = bytes4(keccak256(\\\"V3_SELL\\\"));\\n bytes4 constant public V3_BUY = bytes4(keccak256(\\\"V3_BUY\\\"));\\n\\n struct DataV3_SELL {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n uint maxFeesBasePoint;\\n bytes32 marketplaceMarker;\\n }\\n\\n struct DataV3_BUY {\\n uint payouts;\\n uint originFeeFirst;\\n uint originFeeSecond;\\n bytes32 marketplaceMarker;\\n }\\n\\n}\\n\",\"keccak256\":\"0x4e7dac710b765717654925350ba0d13d10f526c8524d2e6af6c6cdc85235f918\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\\\";\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/math/SafeMath.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\\\";\\n\\nimport \\\"./interfaces/IWyvernExchange.sol\\\";\\nimport \\\"./interfaces/IExchangeV2.sol\\\";\\nimport \\\"./interfaces/ISeaPort.sol\\\";\\nimport \\\"./interfaces/Ix2y2.sol\\\";\\nimport \\\"./interfaces/ILooksRare.sol\\\";\\nimport \\\"./interfaces/IBlur.sol\\\";\\n\\nimport \\\"./libraries/IsPausable.sol\\\";\\n\\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\\n using LibTransfer for address;\\n using BpLibrary for uint;\\n using SafeMath for uint;\\n\\n //marketplaces\\n address public immutable wyvernExchange;\\n address public immutable exchangeV2;\\n address public immutable seaPort_1_1;\\n address public immutable x2y2;\\n address public immutable looksRare;\\n address public immutable sudoswap;\\n address public immutable seaPort_1_4;\\n address public immutable looksRareV2;\\n address public immutable blur;\\n address public immutable seaPort_1_5;\\n address public immutable seaPort_1_6;\\n\\n //currencties\\n address public immutable weth;\\n\\n //constants\\n uint256 private constant UINT256_MAX = type(uint256).max;\\n\\n event Execution(bool result);\\n\\n enum Markets {\\n ExchangeV2,//0\\n WyvernExchange,//1\\n SeaPort_1_1,//2\\n X2Y2,//3\\n LooksRareOrders,//4\\n SudoSwap,//5\\n SeaPort_1_4,//6\\n LooksRareV2,//7\\n Blur,//8\\n SeaPort_1_5,//9\\n SeaPort_1_6//10\\n }\\n\\n enum AdditionalDataTypes {\\n NoAdditionalData,\\n RoyaltiesAdditionalData\\n }\\n\\n enum Currencies {\\n ETH,\\n WETH\\n }\\n\\n /**\\n @notice struct for the purchase data\\n @param marketId - market key from Markets enum (what market to use)\\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\\n bytes (27,28) used for dataType\\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\\n @param data - data for market call\\n */\\n struct PurchaseDetails {\\n Markets marketId;\\n uint256 amount;\\n uint fees;\\n bytes data;\\n }\\n\\n /**\\n @notice struct for the data with additional Ddta\\n @param data - data for market call\\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\\n */\\n struct AdditionalData {\\n bytes data;\\n uint[] additionalRoyalties;\\n }\\n\\n constructor(\\n address[11] memory marketplaces,\\n //address _wyvernExchange, 0\\n //address _exchangeV2, 1\\n //address _seaPort_1_1, 2\\n //address _x2y2, 3\\n //address _looksRare, 4\\n //address _sudoswap, 5\\n //address _seaPort_1_4, 6\\n //address _looksRareV2, 7\\n //address _blur, 8\\n //address _seaPort_1_5, 9\\n //address _seaPort_1_6, 10\\n address _weth,\\n address[] memory transferProxies,\\n address initialOwner\\n ) {\\n wyvernExchange = marketplaces[0];\\n exchangeV2 = marketplaces[1];\\n seaPort_1_1 = marketplaces[2];\\n x2y2 = marketplaces[3];\\n looksRare = marketplaces[4];\\n sudoswap = marketplaces[5];\\n seaPort_1_4 = marketplaces[6];\\n looksRareV2 = marketplaces[7];\\n blur = marketplaces[8];\\n seaPort_1_5 = marketplaces[9];\\n seaPort_1_6 = marketplaces[10];\\n\\n weth = _weth;\\n\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n if (_weth != address(0)){\\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n transferOwnership(initialOwner);\\n }\\n\\n /**\\n @notice executes a single purchase\\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n */\\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\\n requireNotPaused();\\n \\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\\n \\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n Currencies currency = getCurrency(purchaseDetails.fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n emit Execution(success);\\n \\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes an array of purchases\\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\\n @param feeRecipientFirst - address of the first fee recipient\\n @param feeRecipientSecond - address of the second fee recipient\\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\\n */\\n \\n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\\n requireNotPaused();\\n\\n uint sumFirstFeesETH = 0;\\n uint sumSecondFeesETH = 0;\\n uint sumFirstFeesWETH = 0;\\n uint sumSecondFeesWETH = 0;\\n bool result = false;\\n\\n //amount of WETH needed for purchases: \\n uint wethAmountNeeded = 0;\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\\n }\\n\\n //transfer WETH to this contract (if needed)\\n if (wethAmountNeeded > 0) {\\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\\n }\\n\\n for (uint i = 0; i < purchaseDetails.length; ++i) {\\n Currencies currency = getCurrency(purchaseDetails[i].fees);\\n bool success;\\n uint firstFeeAmount;\\n uint secondFeeAmount;\\n\\n if (currency == Currencies.ETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\\n } else if (currency == Currencies.WETH) {\\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\\n \\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\\n } else {\\n revert(\\\"Unknown purchase currency\\\");\\n }\\n \\n result = result || success;\\n emit Execution(success);\\n }\\n\\n require(result, \\\"no successful executions\\\");\\n\\n //pay fees in ETH \\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\\n\\n //pay fees in WETH\\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\\n\\n //transfer ETH change\\n transferChange();\\n //transfer WETH change\\n if (wethAmountNeeded > 0) {\\n transferChangeWETH();\\n }\\n }\\n\\n /**\\n @notice executes one purchase in ETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n uint paymentAmount = purchaseDetails.amount;\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase wyvernExchange failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\\n\\n if (allowFail) {\\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n Ix2y2(x2y2).run{value : paymentAmount}(input);\\n }\\n\\n //for every element in input.details[] getting\\n // order = input.details[i].orderIdx\\n // and from that order getting item = input.details[i].itemId\\n for (uint i = 0; i < input.details.length; ++i) {\\n uint orderId = input.details[i].orderIdx;\\n uint itemId = input.details[i].itemIdx;\\n bytes memory data = input.orders[orderId].items[itemId].data;\\n {\\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\\n }\\n }\\n\\n // 1 = erc-721\\n if (input.orders[orderId].delegateType == 1) {\\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair721 memory p = pairs[j];\\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\\n }\\n } else if (input.orders[orderId].delegateType == 2) {\\n // 2 = erc-1155\\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\\n\\n for (uint256 j = 0; j < pairs.length; j++) {\\n Ix2y2.Pair1155 memory p = pairs[j];\\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \\\"\\\");\\n }\\n } else {\\n revert(\\\"unknown delegateType x2y2\\\");\\n }\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\\n if (allowFail) {\\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase sudoswap failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase LooksRareV2 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.Blur){\\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\\n if (allowFail) {\\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\\n } catch {\\n return (false, 0, 0);\\n }\\n } else {\\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\\n }\\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \\\"\\\");\\n } else {\\n revert(\\\"Unknown token type\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId ETH\\\");\\n }\\n\\n //transferring royalties\\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\\n \\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice executes one purchase in WETH\\n @param purchaseDetails - details about the purchase\\n @param allowFail - true if errors are handled, false if revert on errors\\n @return result false if execution failed, true if succeded\\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\\n */\\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\\n\\n //buying\\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\\n (bool success,) = address(seaPort_1_1).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_1 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\\n (bool success,) = address(exchangeV2).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase rarible failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\\n (bool success,) = address(seaPort_1_4).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_4 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\\n (bool success,) = address(seaPort_1_5).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_5 failed WETH\\\");\\n }\\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\\n (bool success,) = address(seaPort_1_6).call(marketData);\\n if (allowFail) {\\n if (!success) {\\n return (false, 0, 0);\\n }\\n } else {\\n require(success, \\\"Purchase SeaPort_1_6 failed WETH\\\");\\n }\\n } else {\\n revert(\\\"Unknown marketId WETH\\\");\\n }\\n \\n //transfer royalties\\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\\n\\n //get fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\\n return (true, firstFeeAmount, secondFeeAmount);\\n }\\n\\n /**\\n @notice transfers ETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n LibTransfer.transferEth(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers WETH fee to feeRecipient\\n @param feeAmount - amount to be transfered\\n @param feeRecipient - address of the recipient\\n */\\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\\n if (feeAmount > 0 && feeRecipient != address(0)) {\\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\\n }\\n }\\n\\n /**\\n @notice transfers change back to sender\\n */\\n function transferChange() internal {\\n uint ethAmount = address(this).balance;\\n if (ethAmount > 0) {\\n address(msg.sender).transferEth(ethAmount);\\n }\\n }\\n\\n /**\\n @notice transfers weth change back to sender\\n */\\n function transferChangeWETH() internal {\\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\\n if (wethAmount > 0) {\\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\\n }\\n }\\n\\n /**\\n @notice parses fees in base points from one uint and calculates real amount of fees\\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\\n @param amount price of the order\\n @return firstFeeAmount real amount for the first fee\\n @return secondFeeAmount real amount for the second fee\\n */\\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\\n uint firstFee = uint(uint16(fees >> 16));\\n uint secondFee = uint(uint16(fees));\\n return (amount.bp(firstFee), amount.bp(secondFee));\\n }\\n\\n /**\\n @notice parses \\\"fees\\\" field to find the currency for the purchase\\n @param fees field with encoded data\\n @return 0 if ETH, 1 if WETH ERC-20\\n */\\n function getCurrency(uint fees) internal pure returns(Currencies) {\\n return Currencies(uint16(fees >> 48));\\n }\\n\\n\\n /**\\n @notice parses _data to data for market call and additionalData\\n @param feesAndDataType 27 and 28 bytes for dataType\\n @return marketData data for market call\\n @return additionalRoyalties array uint256, (base point + address)\\n */\\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\\n uint[] memory additionalRoyalties;\\n\\n //return no royalties if wrong data type\\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\\n return (_data, additionalRoyalties);\\n }\\n\\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\\n\\n //return no royalties if market doesn't support royalties\\n if (supportsRoyalties(marketId)) {\\n return (additionalData.data, additionalData.additionalRoyalties);\\n } else {\\n return (additionalData.data, additionalRoyalties);\\n } \\n }\\n \\n revert(\\\"unknown additionalDataType\\\");\\n }\\n\\n /**\\n @notice transfer additional royalties in ETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeETH(value, account);\\n }\\n }\\n }\\n\\n /**\\n @notice transfer additional royalties in WETH\\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\\n */\\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\\n if (_additionalRoyalties[i] > 0) {\\n address payable account = payable(address(_additionalRoyalties[i]));\\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\\n uint value = amount.bp(basePoint);\\n transferFeeWETH(value, account);\\n }\\n }\\n }\\n\\n // modifies `src`\\n function _arrayReplace(\\n bytes memory src,\\n bytes memory replacement,\\n bytes memory mask\\n ) internal view virtual {\\n require(src.length == replacement.length);\\n require(src.length == mask.length);\\n\\n for (uint256 i = 0; i < src.length; ++i) {\\n if (mask[i] != 0) {\\n src[i] = replacement[i];\\n }\\n }\\n }\\n\\n /**\\n @notice returns true if this contract supports additional royalties for the marketplace;\\n now royalties are supported for:\\n 1. SudoSwap\\n 2. LooksRare old\\n 3. LooksRare V2\\n */\\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\\n if (\\n marketId == Markets.SudoSwap ||\\n marketId == Markets.LooksRareOrders ||\\n marketId == Markets.LooksRareV2\\n ) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\\n uint result = 0;\\n\\n Currencies currency = getCurrency(detail.fees);\\n\\n //for every purchase with WETH we sum amount, fees and royalties needed\\n if (currency == Currencies.WETH) {\\n\\n //add amount\\n result = result + detail.amount;\\n\\n //add fees\\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\\n result = result + firstFeeAmount + secondFeeAmount;\\n\\n //add royalties\\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\\n for (uint j = 0; j < royalties.length; ++j) {\\n uint royaltyBasePoint = uint(royalties[j] >> 160);\\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\\n result = result + royaltyValue;\\n }\\n }\\n\\n return result;\\n }\\n\\n /**\\n @notice approves weth for a list of the addresses\\n @param transferProxies - array of addresses to approve WETH for\\n */\\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\\n for (uint i = 0; i < transferProxies.length; ++i) {\\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\\n }\\n }\\n\\n receive() external payable {}\\n}\",\"keccak256\":\"0xef372314c49c4a4c44c2956a8d3e875e4c1016963969f5a867cd9d6162a920c2\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\n\\ninterface IBlur {\\n enum Side { Buy, Sell }\\n enum SignatureVersion { Single, Bulk }\\n enum AssetType { ERC721, ERC1155 }\\n\\n struct Fee {\\n uint16 rate;\\n address payable recipient;\\n }\\n \\n struct Order {\\n address trader;\\n Side side;\\n address matchingPolicy;\\n address collection;\\n uint256 tokenId;\\n uint256 amount;\\n address paymentToken;\\n uint256 price;\\n uint256 listingTime;\\n /* Order expiration timestamp - 0 for oracle cancellations. */\\n uint256 expirationTime;\\n Fee[] fees;\\n uint256 salt;\\n bytes extraParams;\\n }\\n\\n struct Input {\\n Order order;\\n uint8 v;\\n bytes32 r;\\n bytes32 s;\\n bytes extraSignature;\\n SignatureVersion signatureVersion;\\n uint256 blockNumber;\\n }\\n\\n function execute(Input calldata sell, Input calldata buy)\\n external\\n payable;\\n}\\n\",\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-v2/contracts/ExchangeV2.sol\\\";\\n\\nimport {RoyaltiesRegistry} from \\\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\\\";\\nimport {TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\\\";\\nimport {ERC20TransferProxy} from \\\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\\\";\\n\\ninterface IExchangeV2 {\\n function matchOrders(\\n LibOrder.Order memory orderLeft,\\n bytes memory signatureLeft,\\n LibOrder.Order memory orderRight,\\n bytes memory signatureRight\\n ) external payable;\\n\\n function directPurchase(\\n LibDirectTransfer.Purchase calldata direct\\n ) external payable;\\n}\",\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibLooksRare.sol\\\";\\n\\ninterface ILooksRare {\\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\\n\\n /**\\n * @notice This function allows a user to execute a taker bid (against a maker ask).\\n * @param takerBid Taker bid struct\\n * @param makerAsk Maker ask struct\\n * @param makerSignature Maker signature\\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\\n * @param affiliate Affiliate address\\n */\\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\\n}\\n\",\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"../libraries/LibSeaPort.sol\\\";\\n\\ninterface ISeaPort {\\n function fulfillAdvancedOrder(\\n LibSeaPort.AdvancedOrder calldata advancedOrder,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n bytes32 fulfillerConduitKey,\\n address recipient\\n ) external payable returns (bool fulfilled);\\n\\n function fulfillAvailableAdvancedOrders(\\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\\n bytes32 fulfillerConduitKey,\\n address recipient,\\n uint256 maximumFulfilled\\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\\n\\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\\n external\\n payable\\n returns (bool fulfilled);\\n}\",\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface IWyvernExchange {\\n function atomicMatch_(\\n address[14] memory addrs,\\n uint[18] memory uints,\\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\\n bytes memory calldataBuy,\\n bytes memory calldataSell,\\n bytes memory replacementPatternBuy,\\n bytes memory replacementPatternSell,\\n bytes memory staticExtradataBuy,\\n bytes memory staticExtradataSell,\\n uint8[2] memory vs,\\n bytes32[5] memory rssMetadata)\\n external\\n payable;\\n\\n enum Side {\\n Buy,\\n Sell\\n }\\n\\n enum SaleKind {\\n FixedPrice,\\n DutchAuction\\n }\\n\\n function calculateFinalPrice(\\n Side side,\\n SaleKind saleKind,\\n uint256 basePrice,\\n uint256 extra,\\n uint256 listingTime,\\n uint256 expirationTime\\n ) external view returns (uint256);\\n}\",\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\ninterface Ix2y2 {\\n\\n struct OrderItem {\\n uint256 price;\\n bytes data;\\n }\\n\\n struct Pair721 {\\n address token;\\n uint256 tokenId;\\n }\\n\\n struct Pair1155 {\\n address token;\\n uint256 tokenId;\\n uint256 amount;\\n }\\n\\n struct Order {\\n uint256 salt;\\n address user;\\n uint256 network;\\n uint256 intent;\\n uint256 delegateType;\\n uint256 deadline;\\n address currency;\\n bytes dataMask;\\n OrderItem[] items;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n uint8 signVersion;\\n }\\n\\n struct Fee {\\n uint256 percentage;\\n address to;\\n }\\n\\n struct SettleDetail {\\n Op op;\\n uint256 orderIdx;\\n uint256 itemIdx;\\n uint256 price;\\n bytes32 itemHash;\\n address executionDelegate;\\n bytes dataReplacement;\\n uint256 bidIncentivePct;\\n uint256 aucMinIncrementPct;\\n uint256 aucIncDurationSecs;\\n Fee[] fees;\\n }\\n\\n struct SettleShared {\\n uint256 salt;\\n uint256 deadline;\\n uint256 amountToEth;\\n uint256 amountToWeth;\\n address user;\\n bool canFail;\\n }\\n\\n struct RunInput {\\n Order[] orders;\\n SettleDetail[] details;\\n SettleShared shared;\\n // signature\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n }\\n\\n enum Op {\\n INVALID,\\n // off-chain\\n COMPLETE_SELL_OFFER,\\n COMPLETE_BUY_OFFER,\\n CANCEL_OFFER,\\n // auction\\n BID,\\n COMPLETE_AUCTION,\\n REFUND_AUCTION,\\n REFUND_AUCTION_STUCK_ITEM\\n }\\n\\n function run(RunInput memory input) external payable;\\n}\",\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts/access/Ownable.sol\\\";\\n\\nabstract contract IsPausable is Ownable {\\n bool public paused;\\n\\n event Paused(bool paused);\\n\\n function pause(bool _paused) external onlyOwner {\\n paused = _paused;\\n emit Paused(_paused);\\n }\\n\\n function requireNotPaused() internal view {\\n require (!paused, \\\"the contract is paused\\\");\\n }\\n\\n}\\n\",\"keccak256\":\"0xd0ea1d6838dd79b8cfe64e777e4f84456928f0e3621fbb6acd00492e738b2b61\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibLooksRare {\\n struct MakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address signer; // signer of the maker order\\n address collection; // collection address\\n uint256 price; // price (used as )\\n uint256 tokenId; // id of the token\\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\\n address currency; // currency (e.g., WETH)\\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\\n uint256 startTime; // startTime in timestamp\\n uint256 endTime; // endTime in timestamp\\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // additional parameters\\n uint8 v; // v: parameter (27 or 28)\\n bytes32 r; // r: parameter\\n bytes32 s; // s: parameter\\n }\\n\\n struct TakerOrder {\\n bool isOrderAsk; // true --> ask / false --> bid\\n address taker; // msg.sender\\n uint256 price; // final price for the purchase\\n uint256 tokenId;\\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\\n bytes params; // other params (e.g., tokenId)\\n }\\n\\n /**\\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\\n */\\n enum CollectionType {\\n ERC721,\\n ERC1155\\n }\\n\\n /**\\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\\n */\\n enum QuoteType {\\n Bid,\\n Ask\\n }\\n /**\\n * 1. Maker struct\\n */\\n\\n /**\\n * @notice Maker is the struct for a maker order.\\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\\n * @param globalNonce Global user order nonce for maker orders\\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\\n * @param strategyId Strategy id\\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\\n * @param collection Collection address\\n * @param currency Currency address (@dev address(0) = ETH)\\n * @param signer Signer address\\n * @param startTime Start timestamp\\n * @param endTime End timestamp\\n * @param price Minimum price for maker ask, maximum price for maker bid\\n * @param itemIds Array of itemIds\\n * @param amounts Array of amounts\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Maker {\\n QuoteType quoteType;\\n uint256 globalNonce;\\n uint256 subsetNonce;\\n uint256 orderNonce;\\n uint256 strategyId;\\n CollectionType collectionType;\\n address collection;\\n address currency;\\n address signer;\\n uint256 startTime;\\n uint256 endTime;\\n uint256 price;\\n uint256[] itemIds;\\n uint256[] amounts;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 2. Taker struct\\n */\\n\\n /**\\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\\n * @param additionalParameters Extra data specific for the order\\n */\\n struct Taker {\\n address recipient;\\n bytes additionalParameters;\\n }\\n\\n /**\\n * 3. Merkle tree struct\\n */\\n\\n enum MerkleTreeNodePosition {\\n Left,\\n Right\\n }\\n\\n /**\\n * @notice MerkleTreeNode is a MerkleTree's node.\\n * @param value It can be an order hash or a proof\\n * @param position The node's position in its branch.\\n * It can be left or right or none\\n * (before the tree is sorted).\\n */\\n struct MerkleTreeNode {\\n bytes32 value;\\n MerkleTreeNodePosition position;\\n }\\n\\n /**\\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\\n * @dev A Merkle tree can be computed with order hashes.\\n * It can contain order hashes from both maker bid and maker ask structs.\\n * @param root Merkle root\\n * @param proof Array containing the merkle proof\\n */\\n struct MerkleTree {\\n bytes32 root;\\n MerkleTreeNode[] proof;\\n }\\n}\\n\",\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\"},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nlibrary LibSeaPort {\\n /**\\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\\n * matching, a group of six functions may be called that only requires a\\n * subset of the usual order arguments. Note the use of a \\\"basicOrderType\\\"\\n * enum; this represents both the usual order type as well as the \\\"route\\\"\\n * of the basic order (a simple derivation function for the basic order\\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\\n */\\n struct BasicOrderParameters {\\n address considerationToken; // 0x24\\n uint256 considerationIdentifier; // 0x44\\n uint256 considerationAmount; // 0x64\\n address payable offerer; // 0x84\\n address zone; // 0xa4\\n address offerToken; // 0xc4\\n uint256 offerIdentifier; // 0xe4\\n uint256 offerAmount; // 0x104\\n BasicOrderType basicOrderType; // 0x124\\n uint256 startTime; // 0x144\\n uint256 endTime; // 0x164\\n bytes32 zoneHash; // 0x184\\n uint256 salt; // 0x1a4\\n bytes32 offererConduitKey; // 0x1c4\\n bytes32 fulfillerConduitKey; // 0x1e4\\n uint256 totalOriginalAdditionalRecipients; // 0x204\\n AdditionalRecipient[] additionalRecipients; // 0x224\\n bytes signature; // 0x244\\n }\\n /**\\n * @dev Basic orders can supply any number of additional recipients, with the\\n * implied assumption that they are supplied from the offered ETH (or other\\n * native token) or ERC20 token for the order.\\n */\\n struct AdditionalRecipient {\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum BasicOrderType {\\n // 0: no partial fills, anyone can execute\\n ETH_TO_ERC721_FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n ETH_TO_ERC721_PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC721_FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 4: no partial fills, anyone can execute\\n ETH_TO_ERC1155_FULL_OPEN,\\n\\n // 5: partial fills supported, anyone can execute\\n ETH_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 6: no partial fills, only offerer or zone can execute\\n ETH_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 7: partial fills supported, only offerer or zone can execute\\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 8: no partial fills, anyone can execute\\n ERC20_TO_ERC721_FULL_OPEN,\\n\\n // 9: partial fills supported, anyone can execute\\n ERC20_TO_ERC721_PARTIAL_OPEN,\\n\\n // 10: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC721_FULL_RESTRICTED,\\n\\n // 11: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\\n\\n // 12: no partial fills, anyone can execute\\n ERC20_TO_ERC1155_FULL_OPEN,\\n\\n // 13: partial fills supported, anyone can execute\\n ERC20_TO_ERC1155_PARTIAL_OPEN,\\n\\n // 14: no partial fills, only offerer or zone can execute\\n ERC20_TO_ERC1155_FULL_RESTRICTED,\\n\\n // 15: partial fills supported, only offerer or zone can execute\\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\\n\\n // 16: no partial fills, anyone can execute\\n ERC721_TO_ERC20_FULL_OPEN,\\n\\n // 17: partial fills supported, anyone can execute\\n ERC721_TO_ERC20_PARTIAL_OPEN,\\n\\n // 18: no partial fills, only offerer or zone can execute\\n ERC721_TO_ERC20_FULL_RESTRICTED,\\n\\n // 19: partial fills supported, only offerer or zone can execute\\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\\n\\n // 20: no partial fills, anyone can execute\\n ERC1155_TO_ERC20_FULL_OPEN,\\n\\n // 21: partial fills supported, anyone can execute\\n ERC1155_TO_ERC20_PARTIAL_OPEN,\\n\\n // 22: no partial fills, only offerer or zone can execute\\n ERC1155_TO_ERC20_FULL_RESTRICTED,\\n\\n // 23: partial fills supported, only offerer or zone can execute\\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\\n }\\n\\n /**\\n * @dev The full set of order components, with the exception of the counter,\\n * must be supplied when fulfilling more sophisticated orders or groups of\\n * orders. The total number of original consideration items must also be\\n * supplied, as the caller may specify additional consideration items.\\n */\\n struct OrderParameters {\\n address offerer; // 0x00\\n address zone; // 0x20\\n OfferItem[] offer; // 0x40\\n ConsiderationItem[] consideration; // 0x60\\n OrderType orderType; // 0x80\\n uint256 startTime; // 0xa0\\n uint256 endTime; // 0xc0\\n bytes32 zoneHash; // 0xe0\\n uint256 salt; // 0x100\\n bytes32 conduitKey; // 0x120\\n uint256 totalOriginalConsiderationItems; // 0x140\\n // offer.length // 0x160\\n }\\n\\n /**\\n * @dev Orders require a signature in addition to the other order parameters.\\n */\\n struct Order {\\n OrderParameters parameters;\\n bytes signature;\\n }\\n\\n struct AdvancedOrder {\\n OrderParameters parameters;\\n uint120 numerator;\\n uint120 denominator;\\n bytes signature;\\n bytes extraData;\\n }\\n\\n struct OfferItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n }\\n\\n /**\\n * @dev A consideration item has the same five components as an offer item and\\n * an additional sixth component designating the required recipient of the\\n * item.\\n */\\n struct ConsiderationItem {\\n ItemType itemType;\\n address token;\\n uint256 identifierOrCriteria;\\n uint256 startAmount;\\n uint256 endAmount;\\n address payable recipient;\\n }\\n\\n // prettier-ignore\\n enum OrderType {\\n // 0: no partial fills, anyone can execute\\n FULL_OPEN,\\n\\n // 1: partial fills supported, anyone can execute\\n PARTIAL_OPEN,\\n\\n // 2: no partial fills, only offerer or zone can execute\\n FULL_RESTRICTED,\\n\\n // 3: partial fills supported, only offerer or zone can execute\\n PARTIAL_RESTRICTED\\n }\\n\\n // prettier-ignore\\n enum ItemType {\\n // 0: ETH on mainnet, MATIC on polygon, etc.\\n NATIVE,\\n\\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\\n ERC20,\\n\\n // 2: ERC721 items\\n ERC721,\\n\\n // 3: ERC1155 items\\n ERC1155,\\n\\n // 4: ERC721 items where a number of tokenIds are supported\\n ERC721_WITH_CRITERIA,\\n\\n // 5: ERC1155 items where a number of ids are supported\\n ERC1155_WITH_CRITERIA\\n }\\n\\n /**\\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\\n * offer and consideration items, then generates a single execution\\n * element. A given fulfillment can be applied to as many offer and\\n * consideration items as desired, but must contain at least one offer and\\n * at least one consideration that match. The fulfillment must also remain\\n * consistent on all key parameters across all offer items (same offerer,\\n * token, type, tokenId, and conduit preference) as well as across all\\n * consideration items (token, type, tokenId, and recipient).\\n */\\n struct Fulfillment {\\n FulfillmentComponent[] offerComponents;\\n FulfillmentComponent[] considerationComponents;\\n }\\n\\n /**\\n * @dev Each fulfillment component contains one index referencing a specific\\n * order and another referencing a specific offer or consideration item.\\n */\\n struct FulfillmentComponent {\\n uint256 orderIndex;\\n uint256 itemIndex;\\n }\\n\\n /**\\n * @dev An execution is triggered once all consideration items have been zeroed\\n * out. It sends the item in question from the offerer to the item's\\n * recipient, optionally sourcing approvals from either this contract\\n * directly or from the offerer's chosen conduit if one is specified. An\\n * execution is not provided as an argument, but rather is derived via\\n * orders, criteria resolvers, and fulfillments (where the total number of\\n * executions will be less than or equal to the total number of indicated\\n * fulfillments) and returned as part of `matchOrders`.\\n */\\n struct Execution {\\n ReceivedItem item;\\n address offerer;\\n bytes32 conduitKey;\\n }\\n\\n /**\\n * @dev A received item is translated from a utilized consideration item and has\\n * the same four components as a spent item, as well as an additional fifth\\n * component designating the required recipient of the item.\\n */\\n struct ReceivedItem {\\n ItemType itemType;\\n address token;\\n uint256 identifier;\\n uint256 amount;\\n address payable recipient;\\n }\\n\\n struct CriteriaResolver {\\n uint256 orderIndex;\\n Side side;\\n uint256 index;\\n uint256 identifier;\\n bytes32[] criteriaProof;\\n }\\n\\n // prettier-ignore\\n enum Side {\\n // 0: Items that can be spent\\n OFFER,\\n\\n // 1: Items that must be received\\n CONSIDERATION\\n }\\n}\\n\",\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC1155LazyMint {\\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\\n\\n struct Mint1155Data {\\n uint tokenId;\\n string tokenURI;\\n uint supply;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n data.supply,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n}\\n\",\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\"},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibERC721LazyMint {\\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\\\"ERC721_LAZY\\\"));\\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\\n\\n struct Mint721Data {\\n uint tokenId;\\n string tokenURI;\\n LibPart.Part[] creators;\\n LibPart.Part[] royalties;\\n bytes[] signatures;\\n }\\n\\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\\\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\\\");\\n\\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\\n for (uint i = 0; i < data.royalties.length; ++i) {\\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\\n }\\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\\n for (uint i = 0; i < data.creators.length; ++i) {\\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\\n }\\n return keccak256(abi.encode(\\n MINT_AND_TRANSFER_TYPEHASH,\\n data.tokenId,\\n keccak256(bytes(data.tokenURI)),\\n keccak256(abi.encodePacked(creatorsBytes)),\\n keccak256(abi.encodePacked(royaltiesBytes))\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\"},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibAsset {\\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\\\"ETH\\\"));\\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\\\"ERC20\\\"));\\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\\\"ERC721\\\"));\\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\\\"ERC1155\\\"));\\n bytes4 constant public COLLECTION = bytes4(keccak256(\\\"COLLECTION\\\"));\\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\\\"CRYPTO_PUNKS\\\"));\\n\\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\\n \\\"AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n bytes32 constant ASSET_TYPEHASH = keccak256(\\n \\\"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\\\"\\n );\\n\\n struct AssetType {\\n bytes4 assetClass;\\n bytes data;\\n }\\n\\n struct Asset {\\n AssetType assetType;\\n uint value;\\n }\\n\\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPE_TYPEHASH,\\n assetType.assetClass,\\n keccak256(assetType.data)\\n ));\\n }\\n\\n function hash(Asset memory asset) internal pure returns (bytes32) {\\n return keccak256(abi.encode(\\n ASSET_TYPEHASH,\\n hash(asset.assetType),\\n asset.value\\n ));\\n }\\n\\n}\\n\",\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\"},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\\\";\\n\\nlibrary BpLibrary {\\n using SafeMathUpgradeable for uint;\\n\\n function bp(uint value, uint bpValue) internal pure returns (uint) {\\n return value.mul(bpValue).div(10000);\\n }\\n}\\n\",\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\ninterface IERC1271 {\\n\\n /**\\n * @dev Should return whether the signature provided is valid for the provided data\\n * @param _hash Hash of the data signed on the behalf of address(this)\\n * @param _signature Signature byte array associated with _data\\n *\\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\\n * MUST allow external calls\\n */\\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\\n}\",\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\"},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.7.0;\\n\\nlibrary LibSignature {\\n /**\\n * @dev Returns the address that signed a hashed message (`hash`) with\\n * `signature`. This address can then be used for verification purposes.\\n *\\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\\n * this function rejects them by requiring the `s` value to be in the lower\\n * half order, and the `v` value to be either 27 or 28.\\n *\\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\\n * verification to be secure: it is possible to craft signatures that\\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\\n * this is by receiving a hash of the original message (which may otherwise\\n * be too long), and then calling {toEthSignedMessageHash} on it.\\n */\\n function recover(bytes32 hash, bytes memory signature)\\n internal\\n pure\\n returns (address)\\n {\\n // Check the signature length\\n if (signature.length != 65) {\\n revert(\\\"ECDSA: invalid signature length\\\");\\n }\\n\\n // Divide the signature in r, s and v variables\\n bytes32 r;\\n bytes32 s;\\n uint8 v;\\n\\n // ecrecover takes the signature parameters, and the only way to get them\\n // currently is to use assembly.\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n r := mload(add(signature, 0x20))\\n s := mload(add(signature, 0x40))\\n v := byte(0, mload(add(signature, 0x60)))\\n }\\n\\n return recover(hash, v, r, s);\\n }\\n\\n /**\\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\\n * `r` and `s` signature fields separately.\\n */\\n function recover(\\n bytes32 hash,\\n uint8 v,\\n bytes32 r,\\n bytes32 s\\n ) internal pure returns (address) {\\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\\n // the valid range for s in (281): 0 < s < secp256k1n \\u00f7 2 + 1, and for v in (282): v \\u2208 {27, 28}. Most\\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\\n //\\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\\n // these malleable signatures as well.\\n require(\\n uint256(s) <=\\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\\n \\\"ECDSA: invalid signature 's' value\\\"\\n );\\n\\n // If the signature is valid (and not malleable), return the signer address\\n // v > 30 is a special case, we need to adjust hash with \\\"\\\\x19Ethereum Signed Message:\\\\n32\\\"\\n // and v = v - 4\\n address signer;\\n if (v > 30) {\\n require(\\n v - 4 == 27 || v - 4 == 28,\\n \\\"ECDSA: invalid signature 'v' value\\\"\\n );\\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\\n } else {\\n require(v == 27 || v == 28, \\\"ECDSA: invalid signature 'v' value\\\");\\n signer = ecrecover(hash, v, r, s);\\n }\\n\\n require(signer != address(0), \\\"ECDSA: invalid signature\\\");\\n\\n return signer;\\n }\\n\\n /**\\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\\n * replicates the behavior of the\\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\\n * JSON-RPC method.\\n *\\n * See {recover}.\\n */\\n function toEthSignedMessageHash(bytes32 hash)\\n internal\\n pure\\n returns (bytes32)\\n {\\n // 32 is the length in bytes of hash,\\n // enforced by the type signature above\\n return\\n keccak256(\\n abi.encodePacked(\\\"\\\\x19Ethereum Signed Message:\\\\n32\\\", hash)\\n );\\n }\\n}\\n\",\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n function __RoyaltiesRegistry_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0xe0ea605e62d7b65dae93684b5102383b3b9fec0ade21efca0f2831d468738f50\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\\\";\\nimport \\\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\\\";\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\n\\nimport \\\"@rarible/lib-bp/contracts/BpLibrary.sol\\\";\\n\\nimport \\\"./interfaces/ITransferManager.sol\\\";\\n\\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\\n using BpLibrary for uint;\\n using SafeMathUpgradeable for uint;\\n\\n ProtocolFeeData public protocolFee;\\n IRoyaltiesProvider public royaltiesRegistry;\\n\\n //deprecated\\n address private defaultFeeReceiver;\\n // deprecated\\n mapping(address => address) private feeReceivers;\\n\\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\\n\\n /// @dev event that's emitted when ProtocolFeeData receiver changes\\n event FeeReceiverChanged(address oldValue, address newValue);\\n\\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\\n struct ProtocolFeeData {\\n address receiver;\\n uint48 buyerAmount;\\n uint48 sellerAmount;\\n }\\n\\n /**\\n @notice initialises RaribleTransferManager state\\n @param newProtocolFee deprecated\\n @param newDefaultFeeReceiver deprecated\\n @param newRoyaltiesProvider royaltiesRegistry contract address\\n */\\n function __RaribleTransferManager_init_unchained(\\n uint newProtocolFee,\\n address newDefaultFeeReceiver,\\n IRoyaltiesProvider newRoyaltiesProvider\\n ) internal initializer {\\n royaltiesRegistry = newRoyaltiesProvider;\\n }\\n\\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\\n royaltiesRegistry = newRoyaltiesRegistry;\\n }\\n\\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\\n protocolFee.receiver = _receiver;\\n }\\n\\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\\n protocolFee.buyerAmount = _buyerAmount;\\n }\\n\\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\\n protocolFee.sellerAmount = _sellerAmount;\\n }\\n\\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\\n setPrtocolFeeReceiver(_receiver);\\n setPrtocolFeeBuyerAmount(_buyerAmount);\\n setPrtocolFeeSellerAmount(_sellerAmount);\\n }\\n\\n /**\\n @notice executes transfers for 2 matched orders\\n @param left DealSide from the left order (see LibDeal.sol)\\n @param right DealSide from the right order (see LibDeal.sol)\\n @param feeSide feeSide of the match\\n @return totalLeftValue - total amount for the left order\\n @return totalRightValue - total amout for the right order\\n */\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\\n totalLeftValue = left.asset.value;\\n totalRightValue = right.asset.value;\\n\\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n } else {\\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\\n }\\n }\\n\\n /**\\n @notice executes the fee-side transfers (payment + fees)\\n @param paymentSide DealSide of the fee-side order\\n @param nftSide DealSide of the nft-side order\\n @param _protocolFee protocol fee data\\n @return totalAmount of fee-side asset\\n */\\n function doTransfersWithFees(\\n LibDeal.DealSide memory paymentSide,\\n LibDeal.DealSide memory nftSide,\\n ProtocolFeeData memory _protocolFee\\n ) internal returns (uint totalAmount) {\\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\\n\\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\\n if (\\n paymentSide.originFees.length == 1 &&\\n nftSide.originFees.length == 1 &&\\n nftSide.originFees[0].account == paymentSide.originFees[0].account\\n ) { \\n LibPart.Part[] memory origin = new LibPart.Part[](1);\\n origin[0].account = nftSide.originFees[0].account;\\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\\n } else {\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\\n }\\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\\n }\\n\\n function transferProtocolFee(\\n uint totalAmount,\\n uint amount,\\n address from,\\n ProtocolFeeData memory _protocolFee,\\n LibAsset.AssetType memory matchCalculate,\\n address proxy\\n ) internal returns (uint) {\\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\\n if (fee > 0) {\\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\\n }\\n return rest;\\n }\\n\\n /**\\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\\n nothing is transferred in this function\\n @param paymentAssetType Asset Type which represents payment\\n @param nftAssetType Asset Type which represents NFT to pay royalties for\\n @param payouts Payouts to be made\\n @param rest How much of the amount left after previous transfers\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return How much left after transferring royalties\\n */\\n function transferRoyalties(\\n LibAsset.AssetType memory paymentAssetType,\\n LibAsset.AssetType memory nftAssetType,\\n LibPart.Part[] memory payouts,\\n uint rest,\\n uint amount,\\n address from,\\n address proxy\\n ) internal returns (uint) {\\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\\n if (\\n royalties.length == 1 &&\\n payouts.length == 1 &&\\n royalties[0].account == payouts[0].account\\n ) {\\n require(royalties[0].value <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return rest;\\n }\\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\\n require(totalRoyalties <= 5000, \\\"Royalties are too high (>50%)\\\");\\n return result;\\n }\\n\\n /**\\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\\n @param nftAssetType NFT Asset Type to calculate royalties for\\n @return calculated royalties (Array of LibPart.Part)\\n */\\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\\n return royaltiesRegistry.getRoyalties(token, tokenId);\\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\\n return data.royalties;\\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\\n return data.royalties;\\n }\\n LibPart.Part[] memory empty;\\n return empty;\\n }\\n\\n /**\\n @notice Transfer fees\\n @param assetType Asset Type to transfer\\n @param rest How much of the amount left after previous transfers\\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\\n @param fees Array of LibPart.Part which represents fees to pay\\n @param from owner of the Asset to transfer\\n @param proxy Transfer proxy to use\\n @return newRest how much left after transferring fees\\n @return totalFees total number of fees in bp\\n */\\n function transferFees(\\n LibAsset.AssetType memory assetType,\\n uint rest,\\n uint amount,\\n LibPart.Part[] memory fees,\\n address from,\\n address proxy\\n ) internal returns (uint newRest, uint totalFees) {\\n totalFees = 0;\\n newRest = rest;\\n for (uint256 i = 0; i < fees.length; ++i) {\\n totalFees = totalFees.add(fees[i].value);\\n uint feeValue;\\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\\n if (feeValue > 0) {\\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\\n }\\n }\\n }\\n\\n /**\\n @notice transfers main part of the asset (payout)\\n @param assetType Asset Type to transfer\\n @param amount Amount of the asset to transfer\\n @param from Current owner of the asset\\n @param payouts List of payouts - receivers of the Asset\\n @param proxy Transfer Proxy to use\\n */\\n function transferPayouts(\\n LibAsset.AssetType memory assetType,\\n uint amount,\\n address from,\\n LibPart.Part[] memory payouts,\\n address proxy\\n ) internal {\\n require(payouts.length > 0, \\\"transferPayouts: nothing to transfer\\\");\\n uint sumBps = 0;\\n uint rest = amount;\\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\\n uint currentAmount = amount.bp(payouts[i].value);\\n sumBps = sumBps.add(payouts[i].value);\\n if (currentAmount > 0) {\\n rest = rest.sub(currentAmount);\\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\\n }\\n }\\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\\n sumBps = sumBps.add(lastPayout.value);\\n require(sumBps == 10000, \\\"Sum payouts Bps not equal 100%\\\");\\n if (rest > 0) {\\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\\n }\\n }\\n \\n /**\\n @notice calculates total amount of fee-side asset that is going to be used in match\\n @param amount fee-side order value\\n @param _protocolFee protocol fee\\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\\n @return total amount of fee-side asset\\n */\\n function calculateTotalAmount(\\n uint amount,\\n ProtocolFeeData memory _protocolFee,\\n LibPart.Part[] memory orderOriginFees\\n ) internal pure returns (uint) {\\n \\n uint fees = _protocolFee.buyerAmount;\\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\\n require(orderOriginFees[i].value <= 10000, \\\"origin fee is too big\\\");\\n fees = fees + orderOriginFees[i].value;\\n }\\n\\n return amount.add(amount.bp(fees));\\n }\\n\\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\\n return subFee(value, total.bp(feeInBp));\\n }\\n\\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\\n if (value > fee) {\\n newValue = value.sub(fee);\\n realFee = fee;\\n } else {\\n newValue = 0;\\n realFee = value;\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x6ff9cb17b44f520b917e2bd113a6c03db0ab4fed76badb374ed5946b387e9862\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\nimport \\\"./interfaces/ITransferExecutor.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\nimport \\\"./lib/LibTransfer.sol\\\";\\n\\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\\n using LibTransfer for address;\\n\\n mapping (bytes4 => address) internal proxies;\\n\\n event ProxyChange(bytes4 indexed assetType, address proxy);\\n\\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \\n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\\n }\\n\\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function _setTransferProxy(bytes4 assetType, address proxy) internal {\\n proxies[assetType] = proxy;\\n emit ProxyChange(assetType, proxy);\\n }\\n\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal override {\\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n require(asset.value == 1, \\\"erc721 value error\\\");\\n if (from == address(this)){\\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\\n } else {\\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token) = abi.decode(asset.assetType.data, (address));\\n if (from == address(this)){\\n require(IERC20Upgradeable(token).transfer(to, asset.value), \\\"erc20 transfer failed\\\");\\n } else {\\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\\n }\\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\\n //not using transfer proxy when transfering from this contract\\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\\n if (from == address(this)){\\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \\\"\\\");\\n } else {\\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \\\"\\\"); \\n }\\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\\n if (to != address(this)) {\\n to.transferEth(asset.value);\\n }\\n } else {\\n ITransferProxy(proxy).transfer(asset, from, to);\\n }\\n }\\n \\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xea639616c66696b5ae9b278d3c6c9a85839bb5e815a4db046b4fd0225cd86625\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nabstract contract ITransferExecutor {\\n function transfer(\\n LibAsset.Asset memory asset,\\n address from,\\n address to,\\n address proxy\\n ) internal virtual;\\n}\\n\",\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"../lib/LibDeal.sol\\\";\\nimport \\\"./ITransferExecutor.sol\\\";\\n\\nabstract contract ITransferManager is ITransferExecutor {\\n\\n function doTransfers(\\n LibDeal.DealSide memory left,\\n LibDeal.DealSide memory right,\\n LibFeeSide.FeeSide feeSide\\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\\n}\",\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\nimport \\\"./LibFeeSide.sol\\\";\\n\\nlibrary LibDeal {\\n struct DealSide {\\n LibAsset.Asset asset;\\n LibPart.Part[] payouts;\\n LibPart.Part[] originFees;\\n address proxy;\\n address from;\\n }\\n}\\n\",\"keccak256\":\"0xb80d953b7854e95b87e8596732c18e3cc244d4b4d3318a2304ee5167302e2006\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nimport \\\"@rarible/lib-asset/contracts/LibAsset.sol\\\";\\n\\nlibrary LibFeeSide {\\n\\n enum FeeSide {NONE, LEFT, RIGHT}\\n\\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.LEFT;\\n }\\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\\n return FeeSide.RIGHT;\\n }\\n return FeeSide.NONE;\\n }\\n}\\n\",\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\"},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity 0.7.6;\\n\\nlibrary LibTransfer {\\n function transferEth(address to, uint value) internal {\\n (bool success,) = to.call{ value: value }(\\\"\\\");\\n require(success, \\\"transfer failed\\\");\\n }\\n}\\n\",\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\\\";\\n\\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\\n\\n function __ERC20TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __ERC20TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\\n require(token.transferFrom(from, to, value), \\\"failure while transferring\\\");\\n }\\n}\\n\",\"keccak256\":\"0x2fce5fa6025c24a87072eed4cec6ff8e9172ec7b72ca211286904847adf4a324\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x23a035508922fbe29dfb91796175b391943f830eead313134142a01bd776f848\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6102006040523480156200001257600080fd5b50604051620050b5380380620050b5833981016040819052620000359162000466565b60006200004162000219565b600080546001600160a01b0319166001600160a01b03831690811782556040519293509160008051602062005095833981519152908290a3506200008c6301ffc9a760e01b6200021d565b6200009e630271189760e51b6200021d565b83516001600160601b0319606091821b811660809081526020870151831b821660a09081526040880151841b831660c090815284890151851b841660e090815292890151851b841661010090815291890151851b841661012090815290890151851b841661014090815292890151851b84166101605290880151841b831661018052870151831b82166101a052860151821b81166101c0529084901b166101e05260005b825181101562000203576001600160a01b03841615620001fa57836001600160a01b031663095ea7b38483815181106200017857fe5b60200260200101516000196040518363ffffffff1660e01b8152600401620001a29291906200055f565b602060405180830381600087803b158015620001bd57600080fd5b505af1158015620001d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f8919062000536565b505b60010162000142565b506200020f81620002a5565b505050506200059c565b3390565b6001600160e01b031980821614156200027d576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b620002af62000219565b6001600160a01b0316620002c2620003af565b6001600160a01b0316146200031e576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620003655760405162461bcd60e51b81526004018080602001828103825260268152602001806200506f6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216916000805160206200509583398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b80516001600160a01b0381168114620003d657600080fd5b919050565b600082601f830112620003ec578081fd5b815160206001600160401b038211156200040257fe5b8082026200041282820162000578565b8381528281019086840183880185018910156200042d578687fd5b8693505b858410156200045a576200044581620003be565b83526001939093019291840191840162000431565b50979650505050505050565b6000806000806101c085870312156200047d578384fd5b85601f8601126200048c578384fd5b6101606200049a8162000578565b90860190808789841115620004ad578788fd5b875b600b811015620004da57620004c482620003be565b84526020938401939190910190600101620004af565b50508096505050620004ec81620003be565b61018087015190945090506001600160401b038111156200050b578283fd5b6200051987828801620003db565b9250506200052b6101a08601620003be565b905092959194509250565b60006020828403121562000548578081fd5b8151801515811462000558578182fd5b9392505050565b6001600160a01b03929092168252602082015260400190565b6040518181016001600160401b03811182821017156200059457fe5b604052919050565b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c6101205160601c6101405160601c6101605160601c6101805160601c6101a05160601c6101c05160601c6101e05160601c6149ac620006c360003980610517528061062f528061084c52806109bf52806123e3528061249a5280612529525080610d8c5280611dee52806122ab5250806104cf5280611d1c52806121db525080610c555280611b375280611bd15250806104f35280611a2d525080610c0d528061195b528061210b525080610544528061188952508061092b528061165d52806116f7525080610db05280611204528061129a5250806103cf5280610f525280611f6052508061094f5280611101528061203b525080610c31528061102f52506149ac6000f3fe60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200c805bd259b6e7fc099e514b3de13443a4ec4de2e14c673f7017d1283feec1a764736f6c634300070600334f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573738be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "deployedBytecode": "0x60806040526004361061014e5760003560e01c80638da5cb5b116100b6578063c9f0a2fa1161006f578063c9f0a2fa14610339578063df6c25581461034e578063f23a6e6114610363578063f2fde38b14610383578063f66ac0cb146103a3578063fc40c9c7146103b857610155565b80638da5cb5b146102b25780639110c777146102c7578063a05f32dc146102dc578063b94ee332146102f1578063bc197c8114610304578063bd4486ee1461032457610155565b80633fc8cef3116101085780633fc8cef31461022b5780635c975abb146102405780635ea1e4c914610255578063715018a61461026a57806386496e7a1461027f57806386dcbd271461029257610155565b80628534f71461015a57806301ffc9a71461018557806302329a29146101b2578063150b7a02146101d4578063349d6a85146102015780633733b82b1461021657610155565b3661015557005b600080fd5b34801561016657600080fd5b5061016f6103cd565b60405161017c9190614066565b60405180910390f35b34801561019157600080fd5b506101a56101a03660046138ca565b6103f1565b60405161017c91906140ef565b3480156101be57600080fd5b506101d26101cd366004613892565b610414565b005b3480156101e057600080fd5b506101f46101ef3660046134fc565b6104bd565b60405161017c91906140fa565b34801561020d57600080fd5b5061016f6104cd565b34801561022257600080fd5b5061016f6104f1565b34801561023757600080fd5b5061016f610515565b34801561024c57600080fd5b506101a5610539565b34801561026157600080fd5b5061016f610542565b34801561027657600080fd5b506101d2610566565b6101d261028d366004613a4e565b610612565b34801561029e57600080fd5b506101d26102ad3660046135cb565b6107dd565b3480156102be57600080fd5b5061016f61091a565b3480156102d357600080fd5b5061016f610929565b3480156102e857600080fd5b5061016f61094d565b6101d26102ff3660046137d7565b610971565b34801561031057600080fd5b506101f461031f366004613453565b610bfa565b34801561033057600080fd5b5061016f610c0b565b34801561034557600080fd5b5061016f610c2f565b34801561035a57600080fd5b5061016f610c53565b34801561036f57600080fd5b506101f461037e366004613565565b610c77565b34801561038f57600080fd5b506101d261039e366004613437565b610c88565b3480156103af57600080fd5b5061016f610d8a565b3480156103c457600080fd5b5061016f610dae565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160e01b0319811660009081526001602052604090205460ff165b919050565b61041c610dd2565b6001600160a01b031661042d61091a565b6001600160a01b031614610476576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6002805482151560ff19909116811790915560408051918252517f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd29181900360200190a150565b630a85bd0160e11b949350505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b61056e610dd2565b6001600160a01b031661057f61091a565b6001600160a01b0316146105c8576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b61061a610dd6565b600061062584610e29565b905080156106d8577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd610664610dd2565b30846040518463ffffffff1660e01b81526004016106849392919061407a565b602060405180830381600087803b15801561069e57600080fd5b505af11580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906138ae565b505b60006106e78560400151610ef4565b905060008080808460018111156106fa57fe5b141561072b5761070b886000610f10565b9194509250905061071c8288611ef8565b6107268187611ef8565b610786565b600184600181111561073957fe5b14156107655761074a886000611f23565b9194509250905061075b82886123af565b61072681876123af565b60405162461bcd60e51b815260040161077d906142ba565b60405180910390fd5b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc0836040516107b591906140ef565b60405180910390a16107c561246c565b84156107d3576107d3612480565b5050505050505050565b6107e5610dd2565b6001600160a01b03166107f661091a565b6001600160a01b03161461083f576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b60005b81811015610915577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663095ea7b384848481811061088557fe5b905060200201602081019061089a9190613437565b6000196040518363ffffffff1660e01b81526004016108ba9291906140d6565b602060405180830381600087803b1580156108d457600080fd5b505af11580156108e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090c91906138ae565b50600101610842565b505050565b6000546001600160a01b031690565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b610979610dd6565b60008060008060008060005b8a518110156109b6576109aa8b828151811061099d57fe5b6020026020010151610e29565b90910190600101610985565b508015610a68577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd6109f4610dd2565b30846040518463ffffffff1660e01b8152600401610a149392919061407a565b602060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6691906138ae565b505b60005b8a51811015610b92576000610a968c8381518110610a8557fe5b602002602001015160400151610ef4565b90506000808080846001811115610aa957fe5b1415610af057610acc8f8681518110610abe57fe5b60200260200101518d610f10565b91945092509050610add8b836125ce565b9a50610ae98a826125ce565b9950610b41565b6001846001811115610afe57fe5b141561076557610b218f8681518110610b1357fe5b60200260200101518d611f23565b91945092509050610b3289836125ce565b9850610b3e88826125ce565b97505b8680610b4a5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610b7b91906140ef565b60405180910390a150505050806001019050610a6b565b5081610bb05760405162461bcd60e51b815260040161077d90614500565b610bba868a611ef8565b610bc48589611ef8565b610bce848a6123af565b610bd883896123af565b610be061246c565b8015610bee57610bee612480565b50505050505050505050565b63bc197c8160e01b95945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b63f23a6e6160e01b95945050505050565b610c90610dd2565b6001600160a01b0316610ca161091a565b6001600160a01b031614610cea576040805162461bcd60e51b81526020600482018190526024820152600080516020614957833981519152604482015290519081900360640190fd5b6001600160a01b038116610d2f5760405162461bcd60e51b81526004018080602001828103825260268152602001806149106026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b3390565b60025460ff1615610e27576040805162461bcd60e51b81526020600482015260166024820152751d1a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604482015290519081900360640190fd5b565b600080600090506000610e3f8460400151610ef4565b90506001816001811115610e4f57fe5b1415610eed5760208401516040850151928101926000918291610e719161262f565b91509150808285010193506000610e95876060015188604001518960000151612660565b91505060005b8151811015610ee857600060a0838381518110610eb457fe5b6020026020010151901c90506000610ed9828b6020015161271990919063ffffffff16565b97909701965050600101610e9b565b505050505b5092915050565b6000603082901c61ffff166001811115610f0a57fe5b92915050565b6000806000806000610f2f876060015188604001518960000151612660565b6020890151919350915060028851600a811115610f4857fe5b14156110165760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051610f89919061404a565b60006040518083038185875af1925050503d8060008114610fc6576040519150601f19603f3d011682016040523d82523d6000602084013e610fcb565b606091505b505090508715610ff35780610fee57600080600096509650965050505050611ef1565b611010565b806110105760405162461bcd60e51b815260040161077d90614320565b50611ebf565b60018851600a81111561102557fe5b14156110e85760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611066919061404a565b60006040518083038185875af1925050503d80600081146110a3576040519150601f19603f3d011682016040523d82523d6000602084013e6110a8565b606091505b5050905087156110cb5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614179565b60008851600a8111156110f757fe5b14156111ba5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611138919061404a565b60006040518083038185875af1925050503d8060008114611175576040519150601f19603f3d011682016040523d82523d6000602084013e61117a565b606091505b50509050871561119d5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141e7565b60038851600a8111156111c957fe5b141561160c576000838060200190518101906111e59190613aa4565b905087156112835760405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b90849061123b908590600401614565565b6000604051808303818588803b15801561125457600080fd5b505af193505050508015611266575060015b61127e57600080600096509650965050505050611ef1565b611304565b60405163357a150b60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063357a150b9084906112d1908590600401614565565b6000604051808303818588803b1580156112ea57600080fd5b505af11580156112fe573d6000803e3d6000fd5b50505050505b60005b8160200151518110156116055760008260200151828151811061132657fe5b602002602001015160200151905060008360200151838151811061134657fe5b602002602001015160400151905060008460000151838151811061136657fe5b60200260200101516101000151828151811061137e57fe5b602002602001015160200151905060008560000151848151811061139e57fe5b602002602001015160e00151511180156113d457506000856020015185815181106113c557fe5b602002602001015160c0015151115b1561141a5761141a81866020015186815181106113ed57fe5b602002602001015160c001518760000151868151811061140957fe5b602002602001015160e00151612731565b845180518490811061142857fe5b602002602001015160800151600114156114fd576000818060200190518101906114529190613716565b905060005b81518110156114f657600082828151811061146e57fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611494610dd2565b84602001516040518463ffffffff1660e01b81526004016114b79392919061407a565b600060405180830381600087803b1580156114d157600080fd5b505af11580156114e5573d6000803e3d6000fd5b505060019093019250611457915050565b50506115f7565b845180518490811061150b57fe5b602002602001015160800151600214156115df576000818060200190518101906115359190613639565b905060005b81518110156114f657600082828151811061155157fe5b6020026020010151905080600001516001600160a01b031663f242432a30611577610dd2565b846020015185604001516040518563ffffffff1660e01b81526004016115a0949392919061409e565b600060405180830381600087803b1580156115ba57600080fd5b505af11580156115ce573d6000803e3d6000fd5b50506001909301925061153a915050565b60405162461bcd60e51b815260040161077d9061442f565b505050806001019050611307565b5050611ebf565b60048851600a81111561161b57fe5b14156118705760008060008580602001905181019061163a9190613b6c565b92509250925089156116e057604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061169690879087906004016146ec565b6000604051808303818588803b1580156116af57600080fd5b505af1935050505080156116c1575060015b6116db576000806000985098509850505050505050611ef1565b611763565b604051635a72594b60e11b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b4e4b29690869061173090879087906004016146ec565b6000604051808303818588803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b14156117f25781604001516001600160a01b03166342842e0e30611798610dd2565b85608001516040518463ffffffff1660e01b81526004016117bb9392919061407a565b600060405180830381600087803b1580156117d557600080fd5b505af11580156117e9573d6000803e3d6000fd5b50505050611868565b6001600160e01b0319811663025ceed960e61b14156118505781604001516001600160a01b031663f242432a30611827610dd2565b85608001518660a001516040518563ffffffff1660e01b81526004016117bb949392919061409e565b60405162461bcd60e51b815260040161077d9061449d565b505050611ebf565b60058851600a81111561187f57fe5b14156119425760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682856040516118c0919061404a565b60006040518083038185875af1925050503d80600081146118fd576040519150601f19603f3d011682016040523d82523d6000602084013e611902565b606091505b5050905087156119255780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906143f8565b60068851600a81111561195157fe5b1415611a145760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611992919061404a565b60006040518083038185875af1925050503d80600081146119cf576040519150601f19603f3d011682016040523d82523d6000602084013e6119d4565b606091505b5050905087156119f75780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d906141b0565b60078851600a811115611a2357fe5b1415611ae65760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611a64919061404a565b60006040518083038185875af1925050503d8060008114611aa1576040519150601f19603f3d011682016040523d82523d6000602084013e611aa6565b606091505b505090508715611ac95780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614466565b60088851600a811115611af557fe5b1415611d0357600080600085806020019051810190611b1491906139da565b9250925092508915611bba57604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611b709087908790600401614537565b6000604051808303818588803b158015611b8957600080fd5b505af193505050508015611b9b575060015b611bb5576000806000985098509850505050505050611ef1565b611c3d565b604051639a1fc3a760e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690639a1fc3a7908690611c0a9087908790600401614537565b6000604051808303818588803b158015611c2357600080fd5b505af1158015611c37573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611c9c578251606001516001600160a01b03166342842e0e30611c73610dd2565b8651608001516040516001600160e01b031960e086901b1681526117bb9392919060040161407a565b6001600160e01b0319811663025ceed960e61b1415611850578251606001516001600160a01b031663f242432a30611cd2610dd2565b8651608081015160a0909101516040516001600160e01b031960e087901b1681526117bb949392919060040161409e565b60098851600a811115611d1257fe5b1415611dd55760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611d53919061404a565b60006040518083038185875af1925050503d8060008114611d90576040519150601f19603f3d011682016040523d82523d6000602084013e611d95565b606091505b505090508715611db85780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d9061438c565b600a8851600a811115611de457fe5b1415611ea75760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168285604051611e25919061404a565b60006040518083038185875af1925050503d8060008114611e62576040519150601f19603f3d011682016040523d82523d6000602084013e611e67565b606091505b505090508715611e8a5780610fee57600080600096509650965050505050611ef1565b806110105760405162461bcd60e51b815260040161077d90614283565b60405162461bcd60e51b815260040161077d90614255565b611ecd8289602001516127c2565b600080611ee28a604001518b6020015161262f565b60019950909750955050505050505b9250925092565b600082118015611f1057506001600160a01b03811615155b15611f1f57611f1f818361284b565b5050565b6000806000806000611f42876060015188604001518960000151612660565b909250905060028751600a811115611f5657fe5b14156120225760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051611f96919061404a565b6000604051808303816000865af19150503d8060008114611fd3576040519150601f19603f3d011682016040523d82523d6000602084013e611fd8565b606091505b505090508615611fff5780611ffa576000806000955095509550505050611ef1565b61201c565b8061201c5760405162461bcd60e51b815260040161077d906143c3565b5061237a565b60008751600a81111561203157fe5b14156120f25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612071919061404a565b6000604051808303816000865af19150503d80600081146120ae576040519150601f19603f3d011682016040523d82523d6000602084013e6120b3565b606091505b5050905086156120d55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061421e565b60068751600a81111561210157fe5b14156121c25760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612141919061404a565b6000604051808303816000865af19150503d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b5050905086156121a55780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d9061410f565b60098751600a8111156121d157fe5b14156122925760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683604051612211919061404a565b6000604051808303816000865af19150503d806000811461224e576040519150601f19603f3d011682016040523d82523d6000602084013e612253565b606091505b5050905086156122755780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614144565b600a8751600a8111156122a157fe5b14156123625760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836040516122e1919061404a565b6000604051808303816000865af19150503d806000811461231e576040519150601f19603f3d011682016040523d82523d6000602084013e612323565b606091505b5050905086156123455780611ffa576000806000955095509550505050611ef1565b8061201c5760405162461bcd60e51b815260040161077d90614357565b60405162461bcd60e51b815260040161077d906142f1565b6123888188602001516128e3565b60008061239d89604001518a6020015161262f565b60019b919a5098509650505050505050565b6000821180156123c757506001600160a01b03811615155b15611f1f5760405163a9059cbb60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb9061241a90849086906004016140d6565b602060405180830381600087803b15801561243457600080fd5b505af1158015612448573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091591906138ae565b47801561247d5761247d338261284b565b50565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906124cf903090600401614066565b60206040518083038186803b1580156124e757600080fd5b505afa1580156124fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251f9190613c59565b9050801561247d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb61255e610dd2565b836040518363ffffffff1660e01b815260040161257c9291906140d6565b602060405180830381600087803b15801561259657600080fd5b505af11580156125aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1f91906138ae565b600082820183811015612628576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008061ffff601085901c81169085166126498583612719565b6126538683612719565b9350935050509250929050565b6060806000602085901c61ffff16600181111561267957fe5b90506060600082600181111561268b57fe5b141561269d5786935091506127119050565b60018260018111156126ab57fe5b14156126f9576000878060200190518101906126c791906138e6565b90506126d28661296c565b156126ed578060000151816020015194509450505050612711565b51935091506127119050565b60405162461bcd60e51b815260040161077d906144c9565b935093915050565b600061262861271061272b85856129be565b90612a17565b815183511461273f57600080fd5b805183511461274d57600080fd5b60005b83518110156127bc5781818151811061276557fe5b01602001516001600160f81b031916156127b45782818151811061278557fe5b602001015160f81c60f81b84828151811061279c57fe5b60200101906001600160f81b031916908160001a9053505b600101612750565b50505050565b60005b82518110156109155760008382815181106127dc57fe5b602002602001015111156128435760008382815181106127f857fe5b60200260200101519050600060a085848151811061281257fe5b6020026020010151901c90506000612833828661271990919063ffffffff16565b905061283f8184611ef8565b5050505b6001016127c5565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612896576040519150601f19603f3d011682016040523d82523d6000602084013e61289b565b606091505b5050905080610915576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b82518110156109155760008382815181106128fd57fe5b6020026020010151111561296457600083828151811061291957fe5b60200260200101519050600060a085848151811061293357fe5b6020026020010151901c90506000612954828661271990919063ffffffff16565b905061296081846123af565b5050505b6001016128e6565b6000600582600a81111561297c57fe5b14806129935750600482600a81111561299157fe5b145b806129a95750600782600a8111156129a757fe5b145b156129b65750600161040f565b506000919050565b6000826129cd57506000610f0a565b828202828482816129da57fe5b04146126285760405162461bcd60e51b81526004018080602001828103825260218152602001806149366021913960400191505060405180910390fd5b6000808211612a6d576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381612a7657fe5b049392505050565b803561040f816148d6565b805161040f816148d6565b600082601f830112612aa4578081fd5b81516020612ab9612ab48361486c565b614849565b82815281810190858301604080860288018501891015612ad7578687fd5b865b86811015612b415781838b031215612aef578788fd5b81518281018181106001600160401b0382111715612b0957fe5b8352835161ffff81168114612b1c57898afd5b815283870151612b2b816148d6565b8188015285529385019391810191600101612ad9565b509198975050505050505050565b600082601f830112612b5f578081fd5b81516020612b6f612ab48361486c565b82815281810190858301604080860288018501891015612b8d578687fd5b865b86811015612b415781838b031215612ba5578788fd5b81518281018181106001600160401b0382111715612bbf57fe5b83528351815286840151612bd2816148d6565b8188015285529385019391810191600101612b8f565b600082601f830112612bf8578081fd5b81516020612c08612ab48361486c565b82815281810190858301855b85811015612c915781518801604080601f19838d03011215612c34578889fd5b80518181016001600160401b038282108183111715612c4f57fe5b818452848a01518352928401519280841115612c69578b8cfd5b5050612c798c8984860101612fdd565b81890152865250509284019290840190600101612c14565b5090979650505050505050565b600082601f830112612cae578081fd5b81516020612cbe612ab48361486c565b82815281810190858301855b85811015612c9157815188016101a080601f19838d03011215612ceb578889fd5b612cf481614849565b878301518152612d0660408401612a89565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a0820152612d3e60e08401612a89565b60c08201526101008301516001600160401b0380821115612d5d578b8cfd5b612d6b8e8b84880101612fdd565b60e084015261012091508185015181811115612d85578c8dfd5b612d938f8c83890101612be8565b61010085015250506101408401518183015250610160830151610140820152612dbf6101808401613426565b610160820152612dd0828401613426565b610180820152865250509284019290840190600101612cca565b600082601f830112612dfa578081fd5b81516020612e0a612ab48361486c565b82815281810190858301855b85811015612c91578151880161016080601f19838d03011215612e37578889fd5b612e4081614849565b612e4b888401613028565b815260408301518882015260608084015160408301526080808501518284015260a09150818501518184015250612e8460c08501612a89565b9082015260e0838101516001600160401b0380821115612ea2578c8dfd5b612eb08f8c84890101612fdd565b60c085015261010091508186015183850152610120925082860151828501526101409150818601518385015284860151945080851115612eee578c8dfd5b50612efd8e8b86880101612b4f565b9083015250865250509284019290840190600101612e16565b600082601f830112612f26578081fd5b81356020612f36612ab48361486c565b8281528181019085830183850287018401881015612f52578586fd5b855b85811015612c9157813584529284019290840190600101612f54565b803561040f816148eb565b805161040f816148eb565b805161040f816148f9565b600082601f830112612fa1578081fd5b8135612faf612ab482614889565b818152846020838601011115612fc3578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112612fed578081fd5b8151612ffb612ab482614889565b81815284602083860101111561300f578283fd5b6130208260208301602087016148aa565b949350505050565b80516008811061040f57600080fd5b80516002811061040f57600080fd5b600060e08284031215613057578081fd5b61306160e0614849565b905081516001600160401b038082111561307a57600080fd5b6130868583860161320a565b835261309460208501613426565b6020840152604084015160408401526060840151606084015260808401519150808211156130c157600080fd5b506130ce84828501612fdd565b6080830152506130e060a08301613037565b60a082015260c082015160c082015292915050565b6000610200808385031215613108578182fd5b61311181614849565b91505061311d82612f7b565b815261312b60208301612a89565b602082015261313c60408301612a89565b6040820152606082015160608201526080820151608082015260a082015160a082015261316b60c08301612a89565b60c082015261317c60e08301612a89565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b038111156131c857600080fd5b6131d485828601612fdd565b8284015250506101a06131e8818401613426565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a080838503121561321d578182fd5b61322681614849565b91505061323282612a89565b815261324060208301613037565b602082015261325160408301612a89565b604082015261326260608301612a89565b60608201526080820151608082015260a082015160a082015261328760c08301612a89565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b03808211156132c857600080fd5b6132d486838701612a94565b83850152610160925082850151838501526101809250828501519150808211156132fd57600080fd5b5061330a85828601612fdd565b82840152505092915050565b600060808284031215613327578081fd5b604051608081016001600160401b03828210818311171561334457fe5b8160405282935084359150600b821061335c57600080fd5b8183526020850135602084015260408501356040840152606085013591508082111561338757600080fd5b5061339485828601612f91565b6060830152505092915050565b600060c082840312156133b2578081fd5b60405160c081018181106001600160401b03821117156133ce57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613406816148d6565b608082015260a0830151613419816148eb565b60a0919091015292915050565b805160ff8116811461040f57600080fd5b600060208284031215613448578081fd5b8135612628816148d6565b600080600080600060a0868803121561346a578081fd5b8535613475816148d6565b94506020860135613485816148d6565b935060408601356001600160401b03808211156134a0578283fd5b6134ac89838a01612f16565b945060608801359150808211156134c1578283fd5b6134cd89838a01612f16565b935060808801359150808211156134e2578283fd5b506134ef88828901612f91565b9150509295509295909350565b60008060008060808587031215613511578182fd5b843561351c816148d6565b9350602085013561352c816148d6565b92506040850135915060608501356001600160401b0381111561354d578182fd5b61355987828801612f91565b91505092959194509250565b600080600080600060a0868803121561357c578283fd5b8535613587816148d6565b94506020860135613597816148d6565b9350604086013592506060860135915060808601356001600160401b038111156135bf578182fd5b6134ef88828901612f91565b600080602083850312156135dd578182fd5b82356001600160401b03808211156135f3578384fd5b818501915085601f830112613606578384fd5b813581811115613614578485fd5b8660208083028501011115613627578485fd5b60209290920196919550909350505050565b6000602080838503121561364b578182fd5b82516001600160401b0380821115613661578384fd5b818501915085601f830112613674578384fd5b8151613682612ab48261486c565b818152848101908486016060808502870188018b10156136a0578889fd5b8896505b848710156137075780828c0312156136ba578889fd5b6040805182810181811089821117156136cf57fe5b825283516136dc816148d6565b8152838a01518a820152818401519181019190915284526001969096019592870192908101906136a4565b50909998505050505050505050565b60006020808385031215613728578182fd5b82516001600160401b038082111561373e578384fd5b818501915085601f830112613751578384fd5b815161375f612ab48261486c565b818152848101908486016040808502870188018b101561377d578889fd5b8896505b848710156137075780828c031215613797578889fd5b805181810181811088821117156137aa57fe5b825282516137b7816148d6565b815282890151898201528452600196909601959287019290810190613781565b600080600080608085870312156137ec578182fd5b84356001600160401b03811115613801578283fd5b8501601f81018713613811578283fd5b80356020613821612ab48361486c565b82815281810190848301875b85811015613856576138448d8684358a0101613316565b8452928401929084019060010161382d565b50508098505050613868818901612a7e565b955050505061387960408601612a7e565b915061388760608601612f70565b905092959194509250565b6000602082840312156138a3578081fd5b8135612628816148eb565b6000602082840312156138bf578081fd5b8151612628816148eb565b6000602082840312156138db578081fd5b8135612628816148f9565b600060208083850312156138f8578182fd5b82516001600160401b038082111561390e578384fd5b9084019060408287031215613921578384fd5b60405160408101818110838211171561393657fe5b604052825182811115613947578586fd5b61395388828601612fdd565b8252508383015182811115613966578586fd5b80840193505086601f84011261397a578485fd5b8251915061398a612ab48361486c565b82815284810190848601868502860187018a10156139a6578788fd5b8795505b848610156139c85780518352600195909501949186019186016139aa565b50948201949094529695505050505050565b6000806000606084860312156139ee578081fd5b83516001600160401b0380821115613a04578283fd5b613a1087838801613046565b94506020860151915080821115613a25578283fd5b50613a3286828701613046565b9250506040840151613a43816148f9565b809150509250925092565b600080600060608486031215613a62578081fd5b83356001600160401b03811115613a77578182fd5b613a8386828701613316565b9350506020840135613a94816148d6565b91506040840135613a43816148d6565b600060208284031215613ab5578081fd5b81516001600160401b0380821115613acb578283fd5b908301906101608286031215613adf578283fd5b613ae960c0614849565b825182811115613af7578485fd5b613b0387828601612c9e565b825250602083015182811115613b17578485fd5b613b2387828601612dea565b602083015250613b3686604085016133a1565b604082015261010083015160608201526101208301516080820152613b5e6101408401613426565b60a082015295945050505050565b600080600060608486031215613b80578081fd5b83516001600160401b0380821115613b96578283fd5b9085019060c08288031215613ba9578283fd5b60405160c081018181108382111715613bbe57fe5b604052613bca83612f7b565b8152613bd860208401612a89565b602082015260408301516040820152606083015160608201526080830151608082015260a083015182811115613c0c578485fd5b613c1889828601612fdd565b60a0830152506020870151909550915080821115613c34578283fd5b50613c41868287016130f5565b925050613c5060408501612f86565b90509250925092565b600060208284031215613c6a578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613cc5578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101613c91565b509495945050505050565b6000815180845260208085019450808401835b83811015613cc5578151805188528301516001600160a01b03168388015260409096019590820190600101613ce3565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151805185528501516040868601819052613d5981870183613e5f565b9a87019a9550505090840190600101613d2f565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b85811015613d6d5782840389528151610160613db3868351613e8b565b818701518688015260408083015190870152606080830151908701526080808301519087015260a080830151613deb82890182613c71565b505060c0808301518282890152613e0483890182613e5f565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a01959095529250613e45915082905083613cd0565b9a87019a9550505090840190600101613d96565b15159052565b60008151808452613e778160208601602086016148aa565b601f01601f19169290920160200192915050565b60088110613e9557fe5b9052565b60028110613e9557fe5b6000815160e08452613eb960e085018251613c71565b6020810151610100613ecd81870183613e99565b60408301519150610120613ee381880184613c71565b60608401519250610140613ef981890185613c71565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0613f2d818c0188613c71565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250613f686102808b0187613c7e565b918701516102408b01529095015188860360df19016102608a0152949350613f969250839150849050613e5f565b9150506020830151613fab6020860182614043565b50604083015160408501526060830151606085015260808301518482036080860152613fd78282613e5f565b91505060a0830151613fec60a0860182613e99565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b6000825161405c8184602087016148aa565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60006040825261454a6040830185613ea3565b828103602084015261455c8185613ea3565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b82811015614682578a820361019f19018452855180518352898101516145c28b850182613c71565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516145fd82860182613c71565b505060e08082015189828601526146168a860182613e5f565b91505061010080830151858303828701526146318382613d13565b925050506101208083015181860152506101408083015181860152508682015161465d88860182614043565b50908901519061466f848b0183614043565b968a0196948a019492505060010161459a565b50968a0151898803601f190160408b01529661469e8189613d7a565b9750505050604088015193506146b76060880185614001565b6060880151610120880152608088015161014088015260a088015193506146e081880185614043565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261474682850182613e5f565b9050838103602085015261020061475e828751613e59565b60208601516147706020840182613c71565b5060408601516147836040840182613c71565b50606086015160608301526080860151608083015260a086015160a083015260c08601516147b460c0840182613c71565b5060e08601516147c760e0840182613c71565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061481082840182613e5f565b935050506101a08086015161482782840182614043565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561486457fe5b604052919050565b60006001600160401b0382111561487f57fe5b5060209081020190565b60006001600160401b0382111561489c57fe5b50601f01601f191660200190565b60005b838110156148c55781810151838201526020016148ad565b838111156127bc5750506000910152565b6001600160a01b038116811461247d57600080fd5b801515811461247d57600080fd5b6001600160e01b03198116811461247d57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a26469706673582212200c805bd259b6e7fc099e514b3de13443a4ec4de2e14c673f7017d1283feec1a764736f6c63430007060033", "devdoc": { "kind": "dev", "methods": { @@ -670,7 +690,7 @@ "type": "t_mapping(t_bytes4,t_bool)" }, { - "astId": 17316, + "astId": 17504, "contract": "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol:RaribleExchangeWrapper", "label": "paused", "offset": 0, diff --git a/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry.json b/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry.json index f1279f083..1cf7841e4 100644 --- a/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry.json +++ b/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry.json @@ -1,5 +1,5 @@ { - "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", "abi": [ { "anonymous": false, @@ -218,6 +218,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__RoyaltiesRegistry_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -483,73 +496,93 @@ "type": "constructor" } ], - "transactionHash": "0xc856dfff59fe9094ad159715f3afe5a20ec25b2ba511204931f4869a0c6a0c5f", + "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", - "transactionIndex": 56, - "gasUsed": "768959", - "logsBloom": "0x00000000000000000000400000000000400000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080001000000001000000000000000080000000000020000020000000000000800000000800000000000000000000000500000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000400000000000000020000000000000000000080000000000000400000000000000000020000010000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xb7c2779684b0a2cfd5ee1e303de9ec1ba0504ca6ec39d401c0eedfa3c6c0b8e6", - "transactionHash": "0xc856dfff59fe9094ad159715f3afe5a20ec25b2ba511204931f4869a0c6a0c5f", + "contractAddress": null, + "transactionIndex": 35, + "gasUsed": "811009", + "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", + "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff", + "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", "logs": [ { - "transactionIndex": 56, - "blockNumber": 4793857, - "transactionHash": "0xc856dfff59fe9094ad159715f3afe5a20ec25b2ba511204931f4869a0c6a0c5f", - "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "transactionIndex": 35, + "blockNumber": 5783729, + "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x00000000000000000000000000c74ed067cea48f1d6f7d00ababa3c1d5b2598b" + "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" ], "data": "0x", - "logIndex": 55, - "blockHash": "0xb7c2779684b0a2cfd5ee1e303de9ec1ba0504ca6ec39d401c0eedfa3c6c0b8e6" + "logIndex": 97, + "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" }, { - "transactionIndex": 56, - "blockNumber": 4793857, - "transactionHash": "0xc856dfff59fe9094ad159715f3afe5a20ec25b2ba511204931f4869a0c6a0c5f", - "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "transactionIndex": 35, + "blockNumber": 5783729, + "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 56, - "blockHash": "0xb7c2779684b0a2cfd5ee1e303de9ec1ba0504ca6ec39d401c0eedfa3c6c0b8e6" + "logIndex": 98, + "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" }, { - "transactionIndex": 56, - "blockNumber": 4793857, - "transactionHash": "0xc856dfff59fe9094ad159715f3afe5a20ec25b2ba511204931f4869a0c6a0c5f", - "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "transactionIndex": 35, + "blockNumber": 5783729, + "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 99, + "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" + }, + { + "transactionIndex": 35, + "blockNumber": 5783729, + "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1f689646861870d44b33dbbb413fa7d06a2b52f", - "logIndex": 57, - "blockHash": "0xb7c2779684b0a2cfd5ee1e303de9ec1ba0504ca6ec39d401c0eedfa3c6c0b8e6" + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 100, + "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" } ], - "blockNumber": 4793857, - "cumulativeGasUsed": "7798736", + "blockNumber": 5783729, + "cumulativeGasUsed": "8330548", "status": 1, "byzantium": true }, "args": [ - "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", - "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", - "0x27fff8ab" + "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], - "numDeployments": 3, - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", - "implementation": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "execute": { + "methodName": "__RoyaltiesRegistry_init_proxy", + "args": [ + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" + ] + }, + "implementation": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Implementation.json b/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Implementation.json index 6b49419ba..c0b2abe0a 100644 --- a/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Implementation.json +++ b/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "address": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", "abi": [ { "anonymous": false, @@ -95,6 +95,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__RoyaltiesRegistry_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -339,28 +352,28 @@ "type": "function" } ], - "transactionHash": "0x6a0624f4d51445b8235b7d6f9f51031af622cd236c880e53e2da613be0b30d70", + "transactionHash": "0xffa971d6c107758728ee537a3d76db27721a5a816a5b10c3ad50d3480e86e3fb", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", - "transactionIndex": 0, - "gasUsed": "1571871", + "contractAddress": null, + "transactionIndex": 34, + "gasUsed": "1663864", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xd56a62c842e6b3a6bc270077b091c21288639c93217d50042264df1d0d86d3ca", - "transactionHash": "0x6a0624f4d51445b8235b7d6f9f51031af622cd236c880e53e2da613be0b30d70", + "blockHash": "0x7b515a696da58c16207ca3f05dd890ee0dd0c4cc5d91c44b9f3a2a74fcd788e5", + "transactionHash": "0xffa971d6c107758728ee537a3d76db27721a5a816a5b10c3ad50d3480e86e3fb", "logs": [], - "blockNumber": 4841506, - "cumulativeGasUsed": "1571871", + "blockNumber": 5783728, + "cumulativeGasUsed": "6126546", "status": 1, "byzantium": true }, "args": [], - "numDeployments": 3, - "solcInputHash": "bf917ed004d0f3f4e7ddfe1dd4d0856b", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForToken\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__RoyaltiesRegistry_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"clearRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltiesType\",\"type\":\"uint256\"}],\"name\":\"forceSetRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getRoyalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getRoyaltiesType\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesByToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"royaltiesByTokenAndTokenId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesProviders\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"setProviderByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"setRoyaltiesByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RoyaltiesSetForContract(address,(address,uint96)[])\":{\"details\":\"emitted when royalties set for token in \"},\"RoyaltiesSetForToken(address,uint256,(address,uint96)[])\":{\"details\":\"deprecated\"}},\"kind\":\"dev\",\"methods\":{\"clearRoyaltiesType(address)\":{\"details\":\"clears royalties type for token contract\"},\"forceSetRoyaltiesType(address,uint256)\":{\"details\":\"clears and sets new royalties type for token contract\"},\"getProvider(address)\":{\"details\":\"returns provider address for token contract from royaltiesProviders mapping\"},\"getRoyalties(address,uint256)\":{\"details\":\"returns royalties for token contract and token id\"},\"getRoyaltiesType(address)\":{\"details\":\"returns royalties type for token contract\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setProviderByToken(address,address)\":{\"details\":\"sets external provider for token contract, and royalties type = 4\"},\"setRoyaltiesByToken(address,(address,uint96)[])\":{\"details\":\"sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"royaltiesByToken\":{\"details\":\"stores royalties for token contract, set in setRoyaltiesByToken() method\"},\"royaltiesByTokenAndTokenId\":{\"details\":\"deprecated\"},\"royaltiesProviders\":{\"details\":\"stores external provider and royalties type for token contract\"},\"royaltiesTypesAmount\":{\"details\":\"total amount or supported royalties types\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":\"RoyaltiesRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0x7f99c2e0828bbba57e1599d92f1368b62ef0e9cd62bda3c4091e108d1fbc35b6\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50611b75806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80639ca7dc7a1161008c578063d836f01311610066578063d836f013146101cb578063f2fde38b146101de578063f39cc706146101f1578063fc73be0014610204576100ea565b80639ca7dc7a14610185578063acf14efb146101a5578063d1da3cce146101b8576100ea565b806355f21eb7116100c857806355f21eb714610135578063715018a61461015557806382b19f121461015d5780638da5cb5b1461017d576100ea565b806305df952f146100ef57806327fff8ab1461011857806336eff6c214610122575b600080fd5b6101026100fd366004611449565b610217565b60405161010f91906118be565b60405180910390f35b61012061022c565b005b6101206101303660046115a9565b6102d6565b610148610143366004611449565b6102f6565b60405161010f9190611830565b610120610315565b61017061016b366004611449565b6103d3565b60405161010f9190611a5f565b6101486103fb565b6101986101933660046115a9565b61040a565b60405161010f919061185d565b6101206101b33660046114b9565b6105a8565b6101026101c6366004611818565b6107e4565b6101206101d9366004611481565b6107f9565b6101206101ec366004611449565b61080e565b6101706101ff366004611449565b610923565b610120610212366004611449565b610935565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102455750610245610966565b80610253575060005460ff16155b61028e5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b12602e913960400191505060405180910390fd5b600054610100900460ff161580156102b9576000805460ff1961ff0019909116610100171660011790555b6102c1610977565b80156102d3576000805461ff00191690555b50565b6102df82610a70565b6102f282826102ed856102f6565b610b46565b5050565b6001600160a01b0381166000908152606760205260409020545b919050565b61031d610b9d565b6001600160a01b031661032e6103fb565b6001600160a01b031614610389576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546103f590610ba1565b92915050565b6033546001600160a01b031690565b6001600160a01b038216600090815260676020526040812054606091819061043182610ba1565b90508061044f576104428683610bdf565b905061044f868284610b46565b80600114156104eb576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156104dd57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161048e565b5050505093505050506103f5565b8060021415610508576104fe8686610ded565b93505050506103f5565b806003141561051b576104fe8686610ead565b806004141561052f576104fe868684611161565b8060051415610542576104fe8686611228565b806006141561058757604080516000808252602082019092529061057c565b610569611400565b8152602001906001900390816105615790505b5093505050506103f5565b60405162461bcd60e51b815260040161059f906118de565b60405180910390fd5b6105b182610a70565b6001600160a01b03821660009081526067602052604081208190556105da908390600190610b46565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106086001830182611417565b505060005b82518110156107625760006001600160a01b031683828151811061062d57fe5b6020026020010151600001516001600160a01b031614156106605760405162461bcd60e51b815260040161059f90611915565b82818151811061066c57fe5b6020026020010151602001516001600160601b0316600014156106a15760405162461bcd60e51b815260040161059f906119e2565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106106d557fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061073e57fe5b6020026020010151602001516001600160601b03168201915080600101905061060d565b5061271081106107845760405162461bcd60e51b815260040161059f90611961565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906107d790859061185d565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b61080282610a70565b6102f282600483610b46565b610816610b9d565b6001600160a01b03166108276103fb565b6001600160a01b031614610882576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166108c75760405162461bcd60e51b8152600401808060200182810382526026815260200180611aec6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b61093e81610a70565b610947816102f6565b6001600160a01b03918216600090815260676020526040902091169055565b6000610971306112f2565b15905090565b600054610100900460ff16806109905750610990610966565b8061099e575060005460ff16155b6109d95760405162461bcd60e51b815260040180806020018281038252602e815260200180611b12602e913960400191505060405180910390fd5b600054610100900460ff16158015610a04576000805460ff1961ff0019909116610100171660011790555b6000610a0e610b9d565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d3576000805461ff001916905550565b610a78610b9d565b6001600160a01b0316610a896103fb565b6001600160a01b031614158015610b295750610aa3610b9d565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190611465565b6001600160a01b031614155b156102d35760405162461bcd60e51b815260040161059f906119ab565b600082118015610b57575060068211155b610b735760405162461bcd60e51b815260040161059f90611a32565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610bd657806101000360020a8381610bbe57fe5b0460011415610bce579050610310565b600101610ba6565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610c159063656cb66560e11b906004016118c9565b60206040518083038186803b158015610c2d57600080fd5b505afa925050508015610c5d575060408051601f3d908101601f19168201909252610c5a918101906117f8565b60015b610c6657610c78565b8015610c765760029150506103f5565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610cab90632dde656160e21b906004016118c9565b60206040518083038186803b158015610cc357600080fd5b505afa925050508015610cf3575060408051601f3d908101601f19168201909252610cf0918101906117f8565b60015b610cfc57610d0e565b8015610d0c5760039150506103f5565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d419063152a902d60e11b906004016118c9565b60206040518083038186803b158015610d5957600080fd5b505afa925050508015610d89575060408051601f3d908101601f19168201909252610d86918101906117f8565b60015b610d9257610da4565b8015610da25760059150506103f5565b505b6001600160a01b03821615610dbb575060046103f5565b6001600160a01b03831660009081526066602052604090205460ff1615610de4575060016103f5565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610e1c908590600401611a5f565b60006040518083038186803b158015610e3457600080fd5b505afa925050508015610e6957506040513d6000823e601f3d908101601f19168201604052610e66919081019061169a565b60015b610ea6576040805160008082526020820190925290610e9e565b610e8b611400565b815260200190600190039081610e835790505b5090506103f5565b90506103f5565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610ee0908790600401611a5f565b60006040518083038186803b158015610ef857600080fd5b505afa925050508015610f2d57506040513d6000823e601f3d908101601f19168201604052610f2a9190810190611601565b60015b610f6c576040805160008082526020820190925290610f62565b610f4f611400565b815260200190600190039081610f475790505b50925050506103f5565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f90610f9d908890600401611a5f565b60006040518083038186803b158015610fb557600080fd5b505afa925050508015610fea57506040513d6000823e601f3d908101601f19168201604052610fe79190810190611774565b60015b61102957604080516000808252602082019092529061057c565b61100c611400565b8152602001906001900390816110045790505093505050506103f5565b9050815181511461106f57604080516000808252602082019092529061057c565b611052611400565b81526020019060019003908161104a5790505093505050506103f5565b6000815167ffffffffffffffff8111801561108957600080fd5b506040519080825280602002602001820160405280156110c357816020015b6110b0611400565b8152602001906001900390816110a85790505b50905060005b8251811015611156578281815181106110de57fe5b60200260200101518282815181106110f257fe5b6020026020010151602001906001600160601b031690816001600160601b03168152505083818151811061112257fe5b602002602001015182828151811061113657fe5b60209081029190910101516001600160a01b0390911690526001016110c9565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906111929087908790600401611844565b600060405180830381600087803b1580156111ac57600080fd5b505af19250505080156111e157506040513d6000823e601f3d908101601f191682016040526111de919081019061169a565b60015b61121e576040805160008082526020820190925290611216565b611203611400565b8152602001906001900390816111fb5790505b509050611221565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061125c908590620f424090600401611a68565b604080518083038186803b15801561127357600080fd5b505afa9250505080156112a3575060408051601f3d908101601f191682019092526112a0918101906115d4565b60015b6112df576040805160008082526020820190925290610e9e565b6112c5611400565b8152602001906001900390816112bd5790505090506103f5565b6112e982826112f8565b925050506103f5565b3b151590565b606080826113075790506103f5565b6000620f42406127108502049050612710811061136b576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b611388611400565b81526020019060019003908161138057905050915084826000815181106113ab57fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106113dd57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906102d391905b808211156114455760008155600101611431565b5090565b60006020828403121561145a578081fd5b813561122181611ac1565b600060208284031215611476578081fd5b815161122181611ac1565b60008060408385031215611493578081fd5b823561149e81611ac1565b915060208301356114ae81611ac1565b809150509250929050565b60008060408084860312156114cc578283fd5b83356114d781611ac1565b925060208481013567ffffffffffffffff808211156114f4578485fd5b818701915087601f830112611507578485fd5b813561151a61151582611aa3565b611a7f565b81815284810190848601878402860187018c1015611536578889fd5b8895505b838610156115975787818d031215611550578889fd5b8751888101818110878211171561156357fe5b8952813561157081611ac1565b81528188013561157f81611ad6565b8189015283526001959095019491860191870161153a565b50809750505050505050509250929050565b600080604083850312156115bb578182fd5b82356115c681611ac1565b946020939093013593505050565b600080604083850312156115e6578182fd5b82516115f181611ac1565b6020939093015192949293505050565b60006020808385031215611613578182fd5b825167ffffffffffffffff811115611629578283fd5b8301601f81018513611639578283fd5b805161164761151582611aa3565b8181528381019083850185840285018601891015611663578687fd5b8694505b8385101561168e57805161167a81611ac1565b835260019490940193918501918501611667565b50979650505050505050565b600060208083850312156116ac578182fd5b825167ffffffffffffffff808211156116c3578384fd5b818501915085601f8301126116d6578384fd5b81516116e461151582611aa3565b818152848101908486016040808502870188018b1015611702578889fd5b8896505b848710156117655780828c03121561171c578889fd5b8051818101818110888211171561172f57fe5b8252825161173c81611ac1565b81528289015161174b81611ad6565b818a01528452600196909601959287019290810190611706565b50909998505050505050505050565b60006020808385031215611786578182fd5b825167ffffffffffffffff81111561179c578283fd5b8301601f810185136117ac578283fd5b80516117ba61151582611aa3565b81815283810190838501858402850186018910156117d6578687fd5b8694505b8385101561168e5780518352600194909401939185019185016117da565b600060208284031215611809578081fd5b81518015158114611221578182fd5b600060208284031215611829578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b828110156118b157815180516001600160a01b031685528601516001600160601b031686850152928401929085019060010161187a565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611a9b57fe5b604052919050565b600067ffffffffffffffff821115611ab757fe5b5060209081020190565b6001600160a01b03811681146102d357600080fd5b6001600160601b03811681146102d357600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220a8d9a95d0e54d9cd391a0298f2e795077d686930699f723af9bddda2b85bab9c64736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80639ca7dc7a1161008c578063d836f01311610066578063d836f013146101cb578063f2fde38b146101de578063f39cc706146101f1578063fc73be0014610204576100ea565b80639ca7dc7a14610185578063acf14efb146101a5578063d1da3cce146101b8576100ea565b806355f21eb7116100c857806355f21eb714610135578063715018a61461015557806382b19f121461015d5780638da5cb5b1461017d576100ea565b806305df952f146100ef57806327fff8ab1461011857806336eff6c214610122575b600080fd5b6101026100fd366004611449565b610217565b60405161010f91906118be565b60405180910390f35b61012061022c565b005b6101206101303660046115a9565b6102d6565b610148610143366004611449565b6102f6565b60405161010f9190611830565b610120610315565b61017061016b366004611449565b6103d3565b60405161010f9190611a5f565b6101486103fb565b6101986101933660046115a9565b61040a565b60405161010f919061185d565b6101206101b33660046114b9565b6105a8565b6101026101c6366004611818565b6107e4565b6101206101d9366004611481565b6107f9565b6101206101ec366004611449565b61080e565b6101706101ff366004611449565b610923565b610120610212366004611449565b610935565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102455750610245610966565b80610253575060005460ff16155b61028e5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b12602e913960400191505060405180910390fd5b600054610100900460ff161580156102b9576000805460ff1961ff0019909116610100171660011790555b6102c1610977565b80156102d3576000805461ff00191690555b50565b6102df82610a70565b6102f282826102ed856102f6565b610b46565b5050565b6001600160a01b0381166000908152606760205260409020545b919050565b61031d610b9d565b6001600160a01b031661032e6103fb565b6001600160a01b031614610389576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546103f590610ba1565b92915050565b6033546001600160a01b031690565b6001600160a01b038216600090815260676020526040812054606091819061043182610ba1565b90508061044f576104428683610bdf565b905061044f868284610b46565b80600114156104eb576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156104dd57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161048e565b5050505093505050506103f5565b8060021415610508576104fe8686610ded565b93505050506103f5565b806003141561051b576104fe8686610ead565b806004141561052f576104fe868684611161565b8060051415610542576104fe8686611228565b806006141561058757604080516000808252602082019092529061057c565b610569611400565b8152602001906001900390816105615790505b5093505050506103f5565b60405162461bcd60e51b815260040161059f906118de565b60405180910390fd5b6105b182610a70565b6001600160a01b03821660009081526067602052604081208190556105da908390600190610b46565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106086001830182611417565b505060005b82518110156107625760006001600160a01b031683828151811061062d57fe5b6020026020010151600001516001600160a01b031614156106605760405162461bcd60e51b815260040161059f90611915565b82818151811061066c57fe5b6020026020010151602001516001600160601b0316600014156106a15760405162461bcd60e51b815260040161059f906119e2565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106106d557fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061073e57fe5b6020026020010151602001516001600160601b03168201915080600101905061060d565b5061271081106107845760405162461bcd60e51b815260040161059f90611961565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906107d790859061185d565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b61080282610a70565b6102f282600483610b46565b610816610b9d565b6001600160a01b03166108276103fb565b6001600160a01b031614610882576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166108c75760405162461bcd60e51b8152600401808060200182810382526026815260200180611aec6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b61093e81610a70565b610947816102f6565b6001600160a01b03918216600090815260676020526040902091169055565b6000610971306112f2565b15905090565b600054610100900460ff16806109905750610990610966565b8061099e575060005460ff16155b6109d95760405162461bcd60e51b815260040180806020018281038252602e815260200180611b12602e913960400191505060405180910390fd5b600054610100900460ff16158015610a04576000805460ff1961ff0019909116610100171660011790555b6000610a0e610b9d565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d3576000805461ff001916905550565b610a78610b9d565b6001600160a01b0316610a896103fb565b6001600160a01b031614158015610b295750610aa3610b9d565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ae557600080fd5b505afa158015610af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1d9190611465565b6001600160a01b031614155b156102d35760405162461bcd60e51b815260040161059f906119ab565b600082118015610b57575060068211155b610b735760405162461bcd60e51b815260040161059f90611a32565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610bd657806101000360020a8381610bbe57fe5b0460011415610bce579050610310565b600101610ba6565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610c159063656cb66560e11b906004016118c9565b60206040518083038186803b158015610c2d57600080fd5b505afa925050508015610c5d575060408051601f3d908101601f19168201909252610c5a918101906117f8565b60015b610c6657610c78565b8015610c765760029150506103f5565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610cab90632dde656160e21b906004016118c9565b60206040518083038186803b158015610cc357600080fd5b505afa925050508015610cf3575060408051601f3d908101601f19168201909252610cf0918101906117f8565b60015b610cfc57610d0e565b8015610d0c5760039150506103f5565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d419063152a902d60e11b906004016118c9565b60206040518083038186803b158015610d5957600080fd5b505afa925050508015610d89575060408051601f3d908101601f19168201909252610d86918101906117f8565b60015b610d9257610da4565b8015610da25760059150506103f5565b505b6001600160a01b03821615610dbb575060046103f5565b6001600160a01b03831660009081526066602052604090205460ff1615610de4575060016103f5565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610e1c908590600401611a5f565b60006040518083038186803b158015610e3457600080fd5b505afa925050508015610e6957506040513d6000823e601f3d908101601f19168201604052610e66919081019061169a565b60015b610ea6576040805160008082526020820190925290610e9e565b610e8b611400565b815260200190600190039081610e835790505b5090506103f5565b90506103f5565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610ee0908790600401611a5f565b60006040518083038186803b158015610ef857600080fd5b505afa925050508015610f2d57506040513d6000823e601f3d908101601f19168201604052610f2a9190810190611601565b60015b610f6c576040805160008082526020820190925290610f62565b610f4f611400565b815260200190600190039081610f475790505b50925050506103f5565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f90610f9d908890600401611a5f565b60006040518083038186803b158015610fb557600080fd5b505afa925050508015610fea57506040513d6000823e601f3d908101601f19168201604052610fe79190810190611774565b60015b61102957604080516000808252602082019092529061057c565b61100c611400565b8152602001906001900390816110045790505093505050506103f5565b9050815181511461106f57604080516000808252602082019092529061057c565b611052611400565b81526020019060019003908161104a5790505093505050506103f5565b6000815167ffffffffffffffff8111801561108957600080fd5b506040519080825280602002602001820160405280156110c357816020015b6110b0611400565b8152602001906001900390816110a85790505b50905060005b8251811015611156578281815181106110de57fe5b60200260200101518282815181106110f257fe5b6020026020010151602001906001600160601b031690816001600160601b03168152505083818151811061112257fe5b602002602001015182828151811061113657fe5b60209081029190910101516001600160a01b0390911690526001016110c9565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906111929087908790600401611844565b600060405180830381600087803b1580156111ac57600080fd5b505af19250505080156111e157506040513d6000823e601f3d908101601f191682016040526111de919081019061169a565b60015b61121e576040805160008082526020820190925290611216565b611203611400565b8152602001906001900390816111fb5790505b509050611221565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061125c908590620f424090600401611a68565b604080518083038186803b15801561127357600080fd5b505afa9250505080156112a3575060408051601f3d908101601f191682019092526112a0918101906115d4565b60015b6112df576040805160008082526020820190925290610e9e565b6112c5611400565b8152602001906001900390816112bd5790505090506103f5565b6112e982826112f8565b925050506103f5565b3b151590565b606080826113075790506103f5565b6000620f42406127108502049050612710811061136b576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b611388611400565b81526020019060019003908161138057905050915084826000815181106113ab57fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106113dd57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906102d391905b808211156114455760008155600101611431565b5090565b60006020828403121561145a578081fd5b813561122181611ac1565b600060208284031215611476578081fd5b815161122181611ac1565b60008060408385031215611493578081fd5b823561149e81611ac1565b915060208301356114ae81611ac1565b809150509250929050565b60008060408084860312156114cc578283fd5b83356114d781611ac1565b925060208481013567ffffffffffffffff808211156114f4578485fd5b818701915087601f830112611507578485fd5b813561151a61151582611aa3565b611a7f565b81815284810190848601878402860187018c1015611536578889fd5b8895505b838610156115975787818d031215611550578889fd5b8751888101818110878211171561156357fe5b8952813561157081611ac1565b81528188013561157f81611ad6565b8189015283526001959095019491860191870161153a565b50809750505050505050509250929050565b600080604083850312156115bb578182fd5b82356115c681611ac1565b946020939093013593505050565b600080604083850312156115e6578182fd5b82516115f181611ac1565b6020939093015192949293505050565b60006020808385031215611613578182fd5b825167ffffffffffffffff811115611629578283fd5b8301601f81018513611639578283fd5b805161164761151582611aa3565b8181528381019083850185840285018601891015611663578687fd5b8694505b8385101561168e57805161167a81611ac1565b835260019490940193918501918501611667565b50979650505050505050565b600060208083850312156116ac578182fd5b825167ffffffffffffffff808211156116c3578384fd5b818501915085601f8301126116d6578384fd5b81516116e461151582611aa3565b818152848101908486016040808502870188018b1015611702578889fd5b8896505b848710156117655780828c03121561171c578889fd5b8051818101818110888211171561172f57fe5b8252825161173c81611ac1565b81528289015161174b81611ad6565b818a01528452600196909601959287019290810190611706565b50909998505050505050505050565b60006020808385031215611786578182fd5b825167ffffffffffffffff81111561179c578283fd5b8301601f810185136117ac578283fd5b80516117ba61151582611aa3565b81815283810190838501858402850186018910156117d6578687fd5b8694505b8385101561168e5780518352600194909401939185019185016117da565b600060208284031215611809578081fd5b81518015158114611221578182fd5b600060208284031215611829578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b828110156118b157815180516001600160a01b031685528601516001600160601b031686850152928401929085019060010161187a565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611a9b57fe5b604052919050565b600067ffffffffffffffff821115611ab757fe5b5060209081020190565b6001600160a01b03811681146102d357600080fd5b6001600160601b03811681146102d357600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a2646970667358221220a8d9a95d0e54d9cd391a0298f2e795077d686930699f723af9bddda2b85bab9c64736f6c63430007060033", + "numDeployments": 1, + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForContract\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"RoyaltiesSetForToken\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__RoyaltiesRegistry_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__RoyaltiesRegistry_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"clearRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"royaltiesType\",\"type\":\"uint256\"}],\"name\":\"forceSetRoyaltiesType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getProvider\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"getRoyalties\",\"outputs\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getRoyaltiesType\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesByToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"royaltiesByTokenAndTokenId\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"royaltiesProviders\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"setProviderByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"}],\"name\":\"setRoyaltiesByToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"RoyaltiesSetForContract(address,(address,uint96)[])\":{\"details\":\"emitted when royalties set for token in \"},\"RoyaltiesSetForToken(address,uint256,(address,uint96)[])\":{\"details\":\"deprecated\"}},\"kind\":\"dev\",\"methods\":{\"clearRoyaltiesType(address)\":{\"details\":\"clears royalties type for token contract\"},\"forceSetRoyaltiesType(address,uint256)\":{\"details\":\"clears and sets new royalties type for token contract\"},\"getProvider(address)\":{\"details\":\"returns provider address for token contract from royaltiesProviders mapping\"},\"getRoyalties(address,uint256)\":{\"details\":\"returns royalties for token contract and token id\"},\"getRoyaltiesType(address)\":{\"details\":\"returns royalties type for token contract\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setProviderByToken(address,address)\":{\"details\":\"sets external provider for token contract, and royalties type = 4\"},\"setRoyaltiesByToken(address,(address,uint96)[])\":{\"details\":\"sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"royaltiesByToken\":{\"details\":\"stores royalties for token contract, set in setRoyaltiesByToken() method\"},\"royaltiesByTokenAndTokenId\":{\"details\":\"deprecated\"},\"royaltiesProviders\":{\"details\":\"stores external provider and royalties type for token contract\"},\"royaltiesTypesAmount\":{\"details\":\"total amount or supported royalties types\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":\"RoyaltiesRegistry\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface IRoyaltiesProvider {\\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\"},\"@rarible/lib-part/contracts/LibPart.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibPart {\\n bytes32 public constant TYPE_HASH = keccak256(\\\"Part(address account,uint96 value)\\\");\\n\\n struct Part {\\n address payable account;\\n uint96 value;\\n }\\n\\n function hash(Part memory part) internal pure returns (bytes32) {\\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\\n }\\n}\\n\",\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\"},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/LibRoyalties2981.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV1.sol\\\";\\nimport \\\"@rarible/royalties/contracts/RoyaltiesV2.sol\\\";\\nimport \\\"@rarible/royalties/contracts/IERC2981.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\\n /// @dev deprecated\\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\\n /// @dev emitted when royalties set for token in \\n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\\n\\n /// @dev struct to store royalties in royaltiesByToken\\n struct RoyaltiesSet {\\n bool initialized;\\n LibPart.Part[] royalties;\\n }\\n\\n /// @dev deprecated\\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\\n mapping(address => RoyaltiesSet) public royaltiesByToken;\\n /// @dev stores external provider and royalties type for token contract\\n mapping(address => uint) public royaltiesProviders;\\n\\n /// @dev total amount or supported royalties types\\n // 0 - royalties type is unset\\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\\n // 4 - external provider, 5 - EIP-2981\\n // 6 - unsupported/nonexistent royalties type\\n uint constant royaltiesTypesAmount = 6;\\n\\n function __RoyaltiesRegistry_init() external initializer {\\n __Ownable_init_unchained();\\n }\\n\\n function __RoyaltiesRegistry_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init_unchained();\\n transferOwnership(_initialOwner);\\n }\\n\\n /// @dev sets external provider for token contract, and royalties type = 4\\n function setProviderByToken(address token, address provider) external {\\n checkOwner(token);\\n setRoyaltiesType(token, 4, provider);\\n }\\n\\n /// @dev returns provider address for token contract from royaltiesProviders mapping\\n function getProvider(address token) public view returns(address) {\\n return address(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type for token contract\\n function getRoyaltiesType(address token) external view returns(uint) {\\n return _getRoyaltiesType(royaltiesProviders[token]);\\n }\\n\\n /// @dev returns royalties type from uint\\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\\n if (data / 2**(256-i) == 1) {\\n return i;\\n }\\n }\\n return 0;\\n }\\n\\n /// @dev sets royalties type for token contract\\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \\\"wrong royaltiesType\\\");\\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\\n }\\n\\n /// @dev clears and sets new royalties type for token contract\\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\\n checkOwner(token);\\n setRoyaltiesType(token, royaltiesType, getProvider(token));\\n }\\n\\n /// @dev clears royalties type for token contract\\n function clearRoyaltiesType(address token) external {\\n checkOwner(token);\\n royaltiesProviders[token] = uint(getProvider(token));\\n }\\n\\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\\n checkOwner(token);\\n //clearing royaltiesProviders value for the token\\n delete royaltiesProviders[token];\\n // setting royaltiesType = 1 for the token\\n setRoyaltiesType(token, 1, address(0));\\n uint sumRoyalties = 0;\\n delete royaltiesByToken[token];\\n for (uint i = 0; i < royalties.length; ++i) {\\n require(royalties[i].account != address(0x0), \\\"RoyaltiesByToken recipient should be present\\\");\\n require(royalties[i].value != 0, \\\"Royalty value for RoyaltiesByToken should be > 0\\\");\\n royaltiesByToken[token].royalties.push(royalties[i]);\\n sumRoyalties += royalties[i].value;\\n }\\n require(sumRoyalties < 10000, \\\"Set by token royalties sum more, than 100%\\\");\\n royaltiesByToken[token].initialized = true;\\n emit RoyaltiesSetForContract(token, royalties);\\n }\\n\\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\\n function checkOwner(address token) internal view {\\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\\n revert(\\\"Token owner not detected\\\");\\n }\\n }\\n\\n /// @dev calculates royalties type for token contract\\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 2;\\n }\\n } catch { }\\n\\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\\n if (result) {\\n return 3;\\n }\\n } catch { }\\n \\n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\\n if (result) {\\n return 5;\\n }\\n } catch { }\\n \\n if (royaltiesProvider != address(0)) {\\n return 4;\\n }\\n\\n if (royaltiesByToken[token].initialized) {\\n return 1;\\n }\\n\\n return 6;\\n }\\n\\n /// @dev returns royalties for token contract and token id\\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\\n uint royaltiesProviderData = royaltiesProviders[token];\\n\\n address royaltiesProvider = address(royaltiesProviderData);\\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\\n\\n // case when royaltiesType is not set\\n if (royaltiesType == 0) {\\n // calculating royalties type for token\\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\\n \\n //saving royalties type\\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 1, royalties are set in royaltiesByToken\\n if (royaltiesType == 1) {\\n return royaltiesByToken[token].royalties;\\n }\\n\\n //case royaltiesType = 2, royalties rarible v2\\n if (royaltiesType == 2) {\\n return getRoyaltiesRaribleV2(token,tokenId);\\n }\\n\\n //case royaltiesType = 3, royalties rarible v1\\n if (royaltiesType == 3) {\\n return getRoyaltiesRaribleV1(token, tokenId);\\n }\\n\\n //case royaltiesType = 4, royalties from external provider\\n if (royaltiesType == 4) {\\n return providerExtractor(token, tokenId, royaltiesProvider);\\n }\\n\\n //case royaltiesType = 5, royalties EIP-2981\\n if (royaltiesType == 5) {\\n return getRoyaltiesEIP2981(token, tokenId);\\n }\\n\\n // case royaltiesType = 6, unknown/empty royalties\\n if (royaltiesType == 6) {\\n return new LibPart.Part[](0);\\n } \\n\\n revert(\\\"something wrong in getRoyalties\\\");\\n }\\n\\n /// @dev tries to get royalties rarible-v2 for token and tokenId\\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties rarible-v1 for token and tokenId\\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n RoyaltiesV1 v1 = RoyaltiesV1(token);\\n address payable[] memory recipients;\\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\\n recipients = resultRecipients;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n uint[] memory values;\\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\\n values = resultValues;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n if (values.length != recipients.length) {\\n return new LibPart.Part[](0);\\n }\\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\\n for (uint256 i = 0; i < values.length; ++i) {\\n result[i].value = uint96(values[i]);\\n result[i].account = recipients[i];\\n }\\n return result;\\n }\\n\\n /// @dev tries to get royalties EIP-2981 for token and tokenId\\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\\n return result;\\n } catch {\\n return new LibPart.Part[](0);\\n }\\n }\\n\\n uint256[46] private __gap;\\n}\\n\",\"keccak256\":\"0xe0ea605e62d7b65dae93684b5102383b3b9fec0ade21efca0f2831d468738f50\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/IERC2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n///\\n/// @dev Interface for the NFT Royalty Standard\\n///\\n//interface IERC2981 is IERC165 {\\ninterface IERC2981 {\\n /// ERC165 bytes to add to interface array - set in parent contract\\n /// implementing this standard\\n ///\\n /// bytes4(keccak256(\\\"royaltyInfo(uint256,uint256)\\\")) == 0x2a55205a\\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n /// _registerInterface(_INTERFACE_ID_ERC2981);\\n\\n /// @notice Called with the sale price to determine how much royalty\\n // is owed and to whom.\\n /// @param _tokenId - the NFT asset queried for royalty information\\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\\n /// @return receiver - address of who should be sent the royalty payment\\n /// @return royaltyAmount - the royalty payment amount for _salePrice\\n function royaltyInfo(\\n uint256 _tokenId,\\n uint256 _salePrice\\n ) external view returns (\\n address receiver,\\n uint256 royaltyAmount\\n );\\n}\",\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\nlibrary LibRoyalties2981 {\\n /*\\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\\n uint96 constant _WEIGHT_VALUE = 1000000;\\n\\n /*Method for converting amount to percent and forming LibPart*/\\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\\n LibPart.Part[] memory result;\\n if (amount == 0) {\\n return result;\\n }\\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\\n require(percent < 10000, \\\"Royalties 2981 exceeds 100%\\\");\\n result = new LibPart.Part[](1);\\n result[0].account = payable(to);\\n result[0].value = uint96(percent);\\n return result;\\n }\\n}\\n\",\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV1 {\\n /*\\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\\n *\\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\\n */\\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\\n}\\n\",\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nlibrary LibRoyaltiesV2 {\\n /*\\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\\n */\\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\\n}\\n\",\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\ninterface RoyaltiesV1 {\\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\\n\\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\\n function getFeeBps(uint256 id) external view returns (uint[] memory);\\n}\\n\",\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\"},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@rarible/lib-part/contracts/LibPart.sol\\\";\\n\\ninterface RoyaltiesV2 {\\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\\n\\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\\n}\\n\",\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50611c43806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063d836f01311610066578063d836f013146101e9578063f2fde38b146101fc578063f39cc7061461020f578063fc73be0014610222576100f5565b80638da5cb5b1461019b5780639ca7dc7a146101a3578063acf14efb146101c3578063d1da3cce146101d6576100f5565b806336eff6c2116100d357806336eff6c21461014057806355f21eb714610153578063715018a61461017357806382b19f121461017b576100f5565b806305df952f146100fa57806317c44b171461012357806327fff8ab14610138575b600080fd5b61010d610108366004611517565b610235565b60405161011a919061198c565b60405180910390f35b610136610131366004611517565b61024a565b005b6101366102fe565b61013661014e366004611677565b6103a8565b610166610161366004611517565b6103c4565b60405161011a91906118fe565b6101366103e3565b61018e610189366004611517565b6104a1565b60405161011a9190611b2d565b6101666104c9565b6101b66101b1366004611677565b6104d8565b60405161011a919061192b565b6101366101d1366004611587565b610676565b61010d6101e43660046118e6565b6108b2565b6101366101f736600461154f565b6108c7565b61013661020a366004611517565b6108dc565b61018e61021d366004611517565b6109f1565b610136610230366004611517565b610a03565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102635750610263610a34565b80610271575060005460ff16155b6102ac5760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff161580156102d7576000805460ff1961ff0019909116610100171660011790555b6102df610a45565b6102e8826108dc565b80156102fa576000805461ff00191690555b5050565b600054610100900460ff16806103175750610317610a34565b80610325575060005460ff16155b6103605760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff1615801561038b576000805460ff1961ff0019909116610100171660011790555b610393610a45565b80156103a5576000805461ff00191690555b50565b6103b182610b3e565b6102fa82826103bf856103c4565b610c14565b6001600160a01b0381166000908152606760205260409020545b919050565b6103eb610c6b565b6001600160a01b03166103fc6104c9565b6001600160a01b031614610457576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546104c390610c6f565b92915050565b6033546001600160a01b031690565b6001600160a01b03821660009081526067602052604081205460609181906104ff82610c6f565b90508061051d576105108683610cad565b905061051d868284610c14565b80600114156105b9576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156105ab57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161055c565b5050505093505050506104c3565b80600214156105d6576105cc8686610ebb565b93505050506104c3565b80600314156105e9576105cc8686610f7b565b80600414156105fd576105cc86868461122f565b8060051415610610576105cc86866112f6565b806006141561065557604080516000808252602082019092529061064a565b6106376114ce565b81526020019060019003908161062f5790505b5093505050506104c3565b60405162461bcd60e51b815260040161066d906119ac565b60405180910390fd5b61067f82610b3e565b6001600160a01b03821660009081526067602052604081208190556106a8908390600190610c14565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106d660018301826114e5565b505060005b82518110156108305760006001600160a01b03168382815181106106fb57fe5b6020026020010151600001516001600160a01b0316141561072e5760405162461bcd60e51b815260040161066d906119e3565b82818151811061073a57fe5b6020026020010151602001516001600160601b03166000141561076f5760405162461bcd60e51b815260040161066d90611ab0565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106107a357fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061080c57fe5b6020026020010151602001516001600160601b0316820191508060010190506106db565b5061271081106108525760405162461bcd60e51b815260040161066d90611a2f565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906108a590859061192b565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b6108d082610b3e565b6102fa82600483610c14565b6108e4610c6b565b6001600160a01b03166108f56104c9565b6001600160a01b031614610950576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166109955760405162461bcd60e51b8152600401808060200182810382526026815260200180611bba6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b610a0c81610b3e565b610a15816103c4565b6001600160a01b03918216600090815260676020526040902091169055565b6000610a3f306113c0565b15905090565b600054610100900460ff1680610a5e5750610a5e610a34565b80610a6c575060005460ff16155b610aa75760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad2576000805460ff1961ff0019909116610100171660011790555b6000610adc610c6b565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156103a5576000805461ff001916905550565b610b46610c6b565b6001600160a01b0316610b576104c9565b6001600160a01b031614158015610bf75750610b71610c6b565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb357600080fd5b505afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190611533565b6001600160a01b031614155b156103a55760405162461bcd60e51b815260040161066d90611a79565b600082118015610c25575060068211155b610c415760405162461bcd60e51b815260040161066d90611b00565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610ca457806101000360020a8381610c8c57fe5b0460011415610c9c5790506103de565b600101610c74565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610ce39063656cb66560e11b90600401611997565b60206040518083038186803b158015610cfb57600080fd5b505afa925050508015610d2b575060408051601f3d908101601f19168201909252610d28918101906118c6565b60015b610d3457610d46565b8015610d445760029150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d7990632dde656160e21b90600401611997565b60206040518083038186803b158015610d9157600080fd5b505afa925050508015610dc1575060408051601f3d908101601f19168201909252610dbe918101906118c6565b60015b610dca57610ddc565b8015610dda5760039150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610e0f9063152a902d60e11b90600401611997565b60206040518083038186803b158015610e2757600080fd5b505afa925050508015610e57575060408051601f3d908101601f19168201909252610e54918101906118c6565b60015b610e6057610e72565b8015610e705760059150506104c3565b505b6001600160a01b03821615610e89575060046104c3565b6001600160a01b03831660009081526066602052604090205460ff1615610eb2575060016104c3565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610eea908590600401611b2d565b60006040518083038186803b158015610f0257600080fd5b505afa925050508015610f3757506040513d6000823e601f3d908101601f19168201604052610f349190810190611768565b60015b610f74576040805160008082526020820190925290610f6c565b610f596114ce565b815260200190600190039081610f515790505b5090506104c3565b90506104c3565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610fae908790600401611b2d565b60006040518083038186803b158015610fc657600080fd5b505afa925050508015610ffb57506040513d6000823e601f3d908101601f19168201604052610ff891908101906116cf565b60015b61103a576040805160008082526020820190925290611030565b61101d6114ce565b8152602001906001900390816110155790505b50925050506104c3565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f9061106b908890600401611b2d565b60006040518083038186803b15801561108357600080fd5b505afa9250505080156110b857506040513d6000823e601f3d908101601f191682016040526110b59190810190611842565b60015b6110f757604080516000808252602082019092529061064a565b6110da6114ce565b8152602001906001900390816110d25790505093505050506104c3565b9050815181511461113d57604080516000808252602082019092529061064a565b6111206114ce565b8152602001906001900390816111185790505093505050506104c3565b6000815167ffffffffffffffff8111801561115757600080fd5b5060405190808252806020026020018201604052801561119157816020015b61117e6114ce565b8152602001906001900390816111765790505b50905060005b8251811015611224578281815181106111ac57fe5b60200260200101518282815181106111c057fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250508381815181106111f057fe5b602002602001015182828151811061120457fe5b60209081029190910101516001600160a01b039091169052600101611197565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906112609087908790600401611912565b600060405180830381600087803b15801561127a57600080fd5b505af19250505080156112af57506040513d6000823e601f3d908101601f191682016040526112ac9190810190611768565b60015b6112ec5760408051600080825260208201909252906112e4565b6112d16114ce565b8152602001906001900390816112c95790505b5090506112ef565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061132a908590620f424090600401611b36565b604080518083038186803b15801561134157600080fd5b505afa925050508015611371575060408051601f3d908101601f1916820190925261136e918101906116a2565b60015b6113ad576040805160008082526020820190925290610f6c565b6113936114ce565b81526020019060019003908161138b5790505090506104c3565b6113b782826113c6565b925050506104c3565b3b151590565b606080826113d55790506104c3565b6000620f424061271085020490506127108110611439576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b6114566114ce565b81526020019060019003908161144e579050509150848260008151811061147957fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106114ab57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906103a591905b8082111561151357600081556001016114ff565b5090565b600060208284031215611528578081fd5b81356112ef81611b8f565b600060208284031215611544578081fd5b81516112ef81611b8f565b60008060408385031215611561578081fd5b823561156c81611b8f565b9150602083013561157c81611b8f565b809150509250929050565b600080604080848603121561159a578283fd5b83356115a581611b8f565b925060208481013567ffffffffffffffff808211156115c2578485fd5b818701915087601f8301126115d5578485fd5b81356115e86115e382611b71565b611b4d565b81815284810190848601878402860187018c1015611604578889fd5b8895505b838610156116655787818d03121561161e578889fd5b8751888101818110878211171561163157fe5b8952813561163e81611b8f565b81528188013561164d81611ba4565b81890152835260019590950194918601918701611608565b50809750505050505050509250929050565b60008060408385031215611689578182fd5b823561169481611b8f565b946020939093013593505050565b600080604083850312156116b4578182fd5b82516116bf81611b8f565b6020939093015192949293505050565b600060208083850312156116e1578182fd5b825167ffffffffffffffff8111156116f7578283fd5b8301601f81018513611707578283fd5b80516117156115e382611b71565b8181528381019083850185840285018601891015611731578687fd5b8694505b8385101561175c57805161174881611b8f565b835260019490940193918501918501611735565b50979650505050505050565b6000602080838503121561177a578182fd5b825167ffffffffffffffff80821115611791578384fd5b818501915085601f8301126117a4578384fd5b81516117b26115e382611b71565b818152848101908486016040808502870188018b10156117d0578889fd5b8896505b848710156118335780828c0312156117ea578889fd5b805181810181811088821117156117fd57fe5b8252825161180a81611b8f565b81528289015161181981611ba4565b818a015284526001969096019592870192908101906117d4565b50909998505050505050505050565b60006020808385031215611854578182fd5b825167ffffffffffffffff81111561186a578283fd5b8301601f8101851361187a578283fd5b80516118886115e382611b71565b81815283810190838501858402850186018910156118a4578687fd5b8694505b8385101561175c5780518352600194909401939185019185016118a8565b6000602082840312156118d7578081fd5b815180151581146112ef578182fd5b6000602082840312156118f7578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b8281101561197f57815180516001600160a01b031685528601516001600160601b0316868501529284019290850190600101611948565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611b6957fe5b604052919050565b600067ffffffffffffffff821115611b8557fe5b5060209081020190565b6001600160a01b03811681146103a557600080fd5b6001600160601b03811681146103a557600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a26469706673582212206011445674d35ef28e96f7be2c7e18367ccbf39ba213446ab0ff8093543dc49764736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638da5cb5b11610097578063d836f01311610066578063d836f013146101e9578063f2fde38b146101fc578063f39cc7061461020f578063fc73be0014610222576100f5565b80638da5cb5b1461019b5780639ca7dc7a146101a3578063acf14efb146101c3578063d1da3cce146101d6576100f5565b806336eff6c2116100d357806336eff6c21461014057806355f21eb714610153578063715018a61461017357806382b19f121461017b576100f5565b806305df952f146100fa57806317c44b171461012357806327fff8ab14610138575b600080fd5b61010d610108366004611517565b610235565b60405161011a919061198c565b60405180910390f35b610136610131366004611517565b61024a565b005b6101366102fe565b61013661014e366004611677565b6103a8565b610166610161366004611517565b6103c4565b60405161011a91906118fe565b6101366103e3565b61018e610189366004611517565b6104a1565b60405161011a9190611b2d565b6101666104c9565b6101b66101b1366004611677565b6104d8565b60405161011a919061192b565b6101366101d1366004611587565b610676565b61010d6101e43660046118e6565b6108b2565b6101366101f736600461154f565b6108c7565b61013661020a366004611517565b6108dc565b61018e61021d366004611517565b6109f1565b610136610230366004611517565b610a03565b60666020526000908152604090205460ff1681565b600054610100900460ff16806102635750610263610a34565b80610271575060005460ff16155b6102ac5760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff161580156102d7576000805460ff1961ff0019909116610100171660011790555b6102df610a45565b6102e8826108dc565b80156102fa576000805461ff00191690555b5050565b600054610100900460ff16806103175750610317610a34565b80610325575060005460ff16155b6103605760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff1615801561038b576000805460ff1961ff0019909116610100171660011790555b610393610a45565b80156103a5576000805461ff00191690555b50565b6103b182610b3e565b6102fa82826103bf856103c4565b610c14565b6001600160a01b0381166000908152606760205260409020545b919050565b6103eb610c6b565b6001600160a01b03166103fc6104c9565b6001600160a01b031614610457576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6001600160a01b0381166000908152606760205260408120546104c390610c6f565b92915050565b6033546001600160a01b031690565b6001600160a01b03821660009081526067602052604081205460609181906104ff82610c6f565b90508061051d576105108683610cad565b905061051d868284610c14565b80600114156105b9576001600160a01b038616600090815260666020908152604080832060010180548251818502810185019093528083529193909284015b828210156105ab57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b90046001600160601b03168183015282526001909201910161055c565b5050505093505050506104c3565b80600214156105d6576105cc8686610ebb565b93505050506104c3565b80600314156105e9576105cc8686610f7b565b80600414156105fd576105cc86868461122f565b8060051415610610576105cc86866112f6565b806006141561065557604080516000808252602082019092529061064a565b6106376114ce565b81526020019060019003908161062f5790505b5093505050506104c3565b60405162461bcd60e51b815260040161066d906119ac565b60405180910390fd5b61067f82610b3e565b6001600160a01b03821660009081526067602052604081208190556106a8908390600190610c14565b6001600160a01b0382166000908152606660205260408120805460ff19168155816106d660018301826114e5565b505060005b82518110156108305760006001600160a01b03168382815181106106fb57fe5b6020026020010151600001516001600160a01b0316141561072e5760405162461bcd60e51b815260040161066d906119e3565b82818151811061073a57fe5b6020026020010151602001516001600160601b03166000141561076f5760405162461bcd60e51b815260040161066d90611ab0565b60666000856001600160a01b03166001600160a01b031681526020019081526020016000206001018382815181106107a357fe5b602090810291909101810151825460018101845560009384529282902081519301805491909201516001600160601b0316600160a01b026001600160a01b039384166001600160a01b031990921691909117909216919091179055825183908290811061080c57fe5b6020026020010151602001516001600160601b0316820191508060010190506106db565b5061271081106108525760405162461bcd60e51b815260040161066d90611a2f565b6001600160a01b03831660008181526066602052604090819020805460ff19166001179055517fc026171b9a7c9009d6a748a19a0a3cb877978a585e1647a87a786d724bbde127906108a590859061192b565b60405180910390a2505050565b60656020526000908152604090205460ff1681565b6108d082610b3e565b6102fa82600483610c14565b6108e4610c6b565b6001600160a01b03166108f56104c9565b6001600160a01b031614610950576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166109955760405162461bcd60e51b8152600401808060200182810382526026815260200180611bba6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60676020526000908152604090205481565b610a0c81610b3e565b610a15816103c4565b6001600160a01b03918216600090815260676020526040902091169055565b6000610a3f306113c0565b15905090565b600054610100900460ff1680610a5e5750610a5e610a34565b80610a6c575060005460ff16155b610aa75760405162461bcd60e51b815260040180806020018281038252602e815260200180611be0602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad2576000805460ff1961ff0019909116610100171660011790555b6000610adc610c6b565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156103a5576000805461ff001916905550565b610b46610c6b565b6001600160a01b0316610b576104c9565b6001600160a01b031614158015610bf75750610b71610c6b565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610bb357600080fd5b505afa158015610bc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610beb9190611533565b6001600160a01b031614155b156103a55760405162461bcd60e51b815260040161066d90611a79565b600082118015610c25575060068211155b610c415760405162461bcd60e51b815260040161066d90611b00565b6001600160a01b03928316600090815260676020526040902092166101009190910360020a019055565b3390565b600060015b60068111610ca457806101000360020a8381610c8c57fe5b0460011415610c9c5790506103de565b600101610c74565b50600092915050565b6040516301ffc9a760e01b81526000906001600160a01b038416906301ffc9a790610ce39063656cb66560e11b90600401611997565b60206040518083038186803b158015610cfb57600080fd5b505afa925050508015610d2b575060408051601f3d908101601f19168201909252610d28918101906118c6565b60015b610d3457610d46565b8015610d445760029150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610d7990632dde656160e21b90600401611997565b60206040518083038186803b158015610d9157600080fd5b505afa925050508015610dc1575060408051601f3d908101601f19168201909252610dbe918101906118c6565b60015b610dca57610ddc565b8015610dda5760039150506104c3565b505b6040516301ffc9a760e01b81526001600160a01b038416906301ffc9a790610e0f9063152a902d60e11b90600401611997565b60206040518083038186803b158015610e2757600080fd5b505afa925050508015610e57575060408051601f3d908101601f19168201909252610e54918101906118c6565b60015b610e6057610e72565b8015610e705760059150506104c3565b505b6001600160a01b03821615610e89575060046104c3565b6001600160a01b03831660009081526066602052604090205460ff1615610eb2575060016104c3565b50600692915050565b60405163656cb66560e11b81526060906001600160a01b0384169063cad96cca90610eea908590600401611b2d565b60006040518083038186803b158015610f0257600080fd5b505afa925050508015610f3757506040513d6000823e601f3d908101601f19168201604052610f349190810190611768565b60015b610f74576040805160008082526020820190925290610f6c565b610f596114ce565b815260200190600190039081610f515790505b5090506104c3565b90506104c3565b60405163b9c4d9fb60e01b8152606090839082906001600160a01b0383169063b9c4d9fb90610fae908790600401611b2d565b60006040518083038186803b158015610fc657600080fd5b505afa925050508015610ffb57506040513d6000823e601f3d908101601f19168201604052610ff891908101906116cf565b60015b61103a576040805160008082526020820190925290611030565b61101d6114ce565b8152602001906001900390816110155790505b50925050506104c3565b9050604051630ebd4c7f60e01b81526060906001600160a01b03841690630ebd4c7f9061106b908890600401611b2d565b60006040518083038186803b15801561108357600080fd5b505afa9250505080156110b857506040513d6000823e601f3d908101601f191682016040526110b59190810190611842565b60015b6110f757604080516000808252602082019092529061064a565b6110da6114ce565b8152602001906001900390816110d25790505093505050506104c3565b9050815181511461113d57604080516000808252602082019092529061064a565b6111206114ce565b8152602001906001900390816111185790505093505050506104c3565b6000815167ffffffffffffffff8111801561115757600080fd5b5060405190808252806020026020018201604052801561119157816020015b61117e6114ce565b8152602001906001900390816111765790505b50905060005b8251811015611224578281815181106111ac57fe5b60200260200101518282815181106111c057fe5b6020026020010151602001906001600160601b031690816001600160601b0316815250508381815181106111f057fe5b602002602001015182828151811061120457fe5b60209081029190910101516001600160a01b039091169052600101611197565b509695505050505050565b604051634e53ee3d60e11b81526060906001600160a01b03831690639ca7dc7a906112609087908790600401611912565b600060405180830381600087803b15801561127a57600080fd5b505af19250505080156112af57506040513d6000823e601f3d908101601f191682016040526112ac9190810190611768565b60015b6112ec5760408051600080825260208201909252906112e4565b6112d16114ce565b8152602001906001900390816112c95790505b5090506112ef565b90505b9392505050565b60405163152a902d60e11b81526060906001600160a01b03841690632a55205a9061132a908590620f424090600401611b36565b604080518083038186803b15801561134157600080fd5b505afa925050508015611371575060408051601f3d908101601f1916820190925261136e918101906116a2565b60015b6113ad576040805160008082526020820190925290610f6c565b6113936114ce565b81526020019060019003908161138b5790505090506104c3565b6113b782826113c6565b925050506104c3565b3b151590565b606080826113d55790506104c3565b6000620f424061271085020490506127108110611439576040805162461bcd60e51b815260206004820152601b60248201527f526f79616c746965732032393831206578636565647320313030250000000000604482015290519081900360640190fd5b60408051600180825281830190925290816020015b6114566114ce565b81526020019060019003908161144e579050509150848260008151811061147957fe5b6020026020010151600001906001600160a01b031690816001600160a01b03168152505080826000815181106114ab57fe5b6020908102919091018101516001600160601b0390921691015250905092915050565b604080518082019091526000808252602082015290565b50805460008255906000526020600020908101906103a591905b8082111561151357600081556001016114ff565b5090565b600060208284031215611528578081fd5b81356112ef81611b8f565b600060208284031215611544578081fd5b81516112ef81611b8f565b60008060408385031215611561578081fd5b823561156c81611b8f565b9150602083013561157c81611b8f565b809150509250929050565b600080604080848603121561159a578283fd5b83356115a581611b8f565b925060208481013567ffffffffffffffff808211156115c2578485fd5b818701915087601f8301126115d5578485fd5b81356115e86115e382611b71565b611b4d565b81815284810190848601878402860187018c1015611604578889fd5b8895505b838610156116655787818d03121561161e578889fd5b8751888101818110878211171561163157fe5b8952813561163e81611b8f565b81528188013561164d81611ba4565b81890152835260019590950194918601918701611608565b50809750505050505050509250929050565b60008060408385031215611689578182fd5b823561169481611b8f565b946020939093013593505050565b600080604083850312156116b4578182fd5b82516116bf81611b8f565b6020939093015192949293505050565b600060208083850312156116e1578182fd5b825167ffffffffffffffff8111156116f7578283fd5b8301601f81018513611707578283fd5b80516117156115e382611b71565b8181528381019083850185840285018601891015611731578687fd5b8694505b8385101561175c57805161174881611b8f565b835260019490940193918501918501611735565b50979650505050505050565b6000602080838503121561177a578182fd5b825167ffffffffffffffff80821115611791578384fd5b818501915085601f8301126117a4578384fd5b81516117b26115e382611b71565b818152848101908486016040808502870188018b10156117d0578889fd5b8896505b848710156118335780828c0312156117ea578889fd5b805181810181811088821117156117fd57fe5b8252825161180a81611b8f565b81528289015161181981611ba4565b818a015284526001969096019592870192908101906117d4565b50909998505050505050505050565b60006020808385031215611854578182fd5b825167ffffffffffffffff81111561186a578283fd5b8301601f8101851361187a578283fd5b80516118886115e382611b71565b81815283810190838501858402850186018910156118a4578687fd5b8694505b8385101561175c5780518352600194909401939185019185016118a8565b6000602082840312156118d7578081fd5b815180151581146112ef578182fd5b6000602082840312156118f7578081fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b602080825282518282018190526000919060409081850190868401855b8281101561197f57815180516001600160a01b031685528601516001600160601b0316868501529284019290850190600101611948565b5091979650505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252601f908201527f736f6d657468696e672077726f6e6720696e20676574526f79616c7469657300604082015260600190565b6020808252602c908201527f526f79616c746965734279546f6b656e20726563697069656e742073686f756c60408201526b19081899481c1c995cd95b9d60a21b606082015260800190565b6020808252602a908201527f53657420627920746f6b656e20726f79616c746965732073756d206d6f72652c604082015269207468616e203130302560b01b606082015260800190565b60208082526018908201527f546f6b656e206f776e6572206e6f742064657465637465640000000000000000604082015260600190565b60208082526030908201527f526f79616c74792076616c756520666f7220526f79616c746965734279546f6b60408201526f0656e2073686f756c64206265203e20360841b606082015260800190565b60208082526013908201527277726f6e6720726f79616c746965735479706560681b604082015260600190565b90815260200190565b9182526001600160601b0316602082015260400190565b60405181810167ffffffffffffffff81118282101715611b6957fe5b604052919050565b600067ffffffffffffffff821115611b8557fe5b5060209081020190565b6001600160a01b03811681146103a557600080fd5b6001600160601b03811681146103a557600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564a26469706673582212206011445674d35ef28e96f7be2c7e18367ccbf39ba213446ab0ff8093543dc49764736f6c63430007060033", "devdoc": { "events": { "RoyaltiesSetForContract(address,(address,uint96)[])": { @@ -467,23 +480,23 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 19674, + "astId": 20000, "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", "label": "royaltiesByTokenAndTokenId", "offset": 0, "slot": "101", - "type": "t_mapping(t_bytes32,t_struct(RoyaltiesSet)19669_storage)" + "type": "t_mapping(t_bytes32,t_struct(RoyaltiesSet)19995_storage)" }, { - "astId": 19679, + "astId": 20005, "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", "label": "royaltiesByToken", "offset": 0, "slot": "102", - "type": "t_mapping(t_address,t_struct(RoyaltiesSet)19669_storage)" + "type": "t_mapping(t_address,t_struct(RoyaltiesSet)19995_storage)" }, { - "astId": 19684, + "astId": 20010, "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", "label": "royaltiesProviders", "offset": 0, @@ -491,7 +504,7 @@ "type": "t_mapping(t_address,t_uint256)" }, { - "astId": 20464, + "astId": 20805, "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", "label": "__gap", "offset": 0, @@ -510,8 +523,8 @@ "label": "address payable", "numberOfBytes": "20" }, - "t_array(t_struct(Part)18961_storage)dyn_storage": { - "base": "t_struct(Part)18961_storage", + "t_array(t_struct(Part)19269_storage)dyn_storage": { + "base": "t_struct(Part)19269_storage", "encoding": "dynamic_array", "label": "struct LibPart.Part[]", "numberOfBytes": "32" @@ -544,12 +557,12 @@ "label": "bytes32", "numberOfBytes": "32" }, - "t_mapping(t_address,t_struct(RoyaltiesSet)19669_storage)": { + "t_mapping(t_address,t_struct(RoyaltiesSet)19995_storage)": { "encoding": "mapping", "key": "t_address", "label": "mapping(address => struct RoyaltiesRegistry.RoyaltiesSet)", "numberOfBytes": "32", - "value": "t_struct(RoyaltiesSet)19669_storage" + "value": "t_struct(RoyaltiesSet)19995_storage" }, "t_mapping(t_address,t_uint256)": { "encoding": "mapping", @@ -558,19 +571,19 @@ "numberOfBytes": "32", "value": "t_uint256" }, - "t_mapping(t_bytes32,t_struct(RoyaltiesSet)19669_storage)": { + "t_mapping(t_bytes32,t_struct(RoyaltiesSet)19995_storage)": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => struct RoyaltiesRegistry.RoyaltiesSet)", "numberOfBytes": "32", - "value": "t_struct(RoyaltiesSet)19669_storage" + "value": "t_struct(RoyaltiesSet)19995_storage" }, - "t_struct(Part)18961_storage": { + "t_struct(Part)19269_storage": { "encoding": "inplace", "label": "struct LibPart.Part", "members": [ { - "astId": 18958, + "astId": 19266, "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", "label": "account", "offset": 0, @@ -578,7 +591,7 @@ "type": "t_address_payable" }, { - "astId": 18960, + "astId": 19268, "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", "label": "value", "offset": 20, @@ -588,12 +601,12 @@ ], "numberOfBytes": "32" }, - "t_struct(RoyaltiesSet)19669_storage": { + "t_struct(RoyaltiesSet)19995_storage": { "encoding": "inplace", "label": "struct RoyaltiesRegistry.RoyaltiesSet", "members": [ { - "astId": 19665, + "astId": 19991, "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", "label": "initialized", "offset": 0, @@ -601,12 +614,12 @@ "type": "t_bool" }, { - "astId": 19668, + "astId": 19994, "contract": "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol:RoyaltiesRegistry", "label": "royalties", "offset": 0, "slot": "1", - "type": "t_array(t_struct(Part)18961_storage)dyn_storage" + "type": "t_array(t_struct(Part)19269_storage)dyn_storage" } ], "numberOfBytes": "64" diff --git a/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Proxy.json b/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Proxy.json index a08e57843..75f084ac6 100644 --- a/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Proxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", "abi": [ { "inputs": [ @@ -146,69 +146,83 @@ "type": "receive" } ], - "transactionHash": "0xc856dfff59fe9094ad159715f3afe5a20ec25b2ba511204931f4869a0c6a0c5f", + "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", - "transactionIndex": 56, - "gasUsed": "768959", - "logsBloom": "0x00000000000000000000400000000000400000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002080001000000001000000000000000080000000000020000020000000000000800000000800000000000000000000000500000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000400000000000000020000000000000000000080000000000000400000000000000000020000010000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xb7c2779684b0a2cfd5ee1e303de9ec1ba0504ca6ec39d401c0eedfa3c6c0b8e6", - "transactionHash": "0xc856dfff59fe9094ad159715f3afe5a20ec25b2ba511204931f4869a0c6a0c5f", + "contractAddress": null, + "transactionIndex": 35, + "gasUsed": "811009", + "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", + "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff", + "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", "logs": [ { - "transactionIndex": 56, - "blockNumber": 4793857, - "transactionHash": "0xc856dfff59fe9094ad159715f3afe5a20ec25b2ba511204931f4869a0c6a0c5f", - "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "transactionIndex": 35, + "blockNumber": 5783729, + "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x00000000000000000000000000c74ed067cea48f1d6f7d00ababa3c1d5b2598b" + "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" ], "data": "0x", - "logIndex": 55, - "blockHash": "0xb7c2779684b0a2cfd5ee1e303de9ec1ba0504ca6ec39d401c0eedfa3c6c0b8e6" + "logIndex": 97, + "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" }, { - "transactionIndex": 56, - "blockNumber": 4793857, - "transactionHash": "0xc856dfff59fe9094ad159715f3afe5a20ec25b2ba511204931f4869a0c6a0c5f", - "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "transactionIndex": 35, + "blockNumber": 5783729, + "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 56, - "blockHash": "0xb7c2779684b0a2cfd5ee1e303de9ec1ba0504ca6ec39d401c0eedfa3c6c0b8e6" + "logIndex": 98, + "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" }, { - "transactionIndex": 56, - "blockNumber": 4793857, - "transactionHash": "0xc856dfff59fe9094ad159715f3afe5a20ec25b2ba511204931f4869a0c6a0c5f", - "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "transactionIndex": 35, + "blockNumber": 5783729, + "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" + ], + "data": "0x", + "logIndex": 99, + "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" + }, + { + "transactionIndex": 35, + "blockNumber": 5783729, + "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", + "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1f689646861870d44b33dbbb413fa7d06a2b52f", - "logIndex": 57, - "blockHash": "0xb7c2779684b0a2cfd5ee1e303de9ec1ba0504ca6ec39d401c0eedfa3c6c0b8e6" + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 100, + "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" } ], - "blockNumber": 4793857, - "cumulativeGasUsed": "7798736", + "blockNumber": 5783729, + "cumulativeGasUsed": "8330548", "status": 1, "byzantium": true }, "args": [ - "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", - "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", - "0x27fff8ab" + "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "numDeployments": 1, - "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", diff --git a/projects/hardhat-deploy/deployments/sepolia/TransferProxy.json b/projects/hardhat-deploy/deployments/sepolia/TransferProxy.json index 83986b552..e1b2cdf01 100644 --- a/projects/hardhat-deploy/deployments/sepolia/TransferProxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/TransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af", + "address": "0xA5707153b8AF346e17AF765235B054136eCf99EC", "abi": [ { "anonymous": false, @@ -27,6 +27,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "__OperatorRole_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "__TransferProxy_init", @@ -34,6 +47,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__TransferProxy_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -160,28 +186,28 @@ "type": "function" } ], - "transactionHash": "0x68d627a0370773341af860c5677d707a07b957cb739b9db6047a66b760efa952", + "transactionHash": "0x864ee8c1e815a51c6df727a3f845e7d814a2f0e6f1b10af46702a5c0c3928b1e", "receipt": { - "to": null, + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", - "contractAddress": "0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af", - "transactionIndex": 16, - "gasUsed": "649103", + "contractAddress": null, + "transactionIndex": 21, + "gasUsed": "777214", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x81af3ca6249819837b469ebe6a91dbcecb06eb81380607bbd0c3983377ea8f66", - "transactionHash": "0x68d627a0370773341af860c5677d707a07b957cb739b9db6047a66b760efa952", + "blockHash": "0x0a2946703e7d4a5c89d05780e1bf836dd22277319e4453dae8090f88445283e7", + "transactionHash": "0x864ee8c1e815a51c6df727a3f845e7d814a2f0e6f1b10af46702a5c0c3928b1e", "logs": [], - "blockNumber": 4793858, - "cumulativeGasUsed": "7535945", + "blockNumber": 5783730, + "cumulativeGasUsed": "5397732", "status": 1, "byzantium": true }, "args": [], "numDeployments": 1, - "solcInputHash": "1e83608a8d677752f3c67873d3574235", - "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"erc1155safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC721Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"erc721safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":\"TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x1ea80d73e8d77f49f20b30f41c8808f97a052b34ca522b709a564eb0ba1cc376\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x87cd179c900495ee44c1b9c7fa57f4da0228217d78792bd6d6a6fde6c32be2b2\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50610ac8806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100d65780639c1c2ee9146100fc578063ac8a584a14610199578063f2fde38b146101bf578063f709b906146101e557610093565b80632ff26a0a14610098578063495edf86146100a2578063715018a6146100aa5780638da5cb5b146100b2575b600080fd5b6100a0610221565b005b6100a06102d3565b6100a0610368565b6100ba610414565b604080516001600160a01b039092168252519081900360200190f35b6100a0600480360360208110156100ec57600080fd5b50356001600160a01b0316610423565b6100a0600480360360c081101561011257600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561015a57600080fd5b82018360208201111561016c57600080fd5b8035906020019184600183028401116401000000008311171561018e57600080fd5b5090925090506104a9565b6100a0600480360360208110156101af57600080fd5b50356001600160a01b03166105d2565b6100a0600480360360208110156101d557600080fd5b50356001600160a01b0316610655565b6100a0600480360360808110156101fb57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610758565b600054610100900460ff168061023a575061023a610842565b80610248575060005460ff16155b6102835760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102ae576000805460ff1961ff0019909116610100171660011790555b6102b6610853565b6102be6108f3565b80156102d0576000805461ff00191690555b50565b600054610100900460ff16806102ec57506102ec610842565b806102fa575060005460ff16155b6103355760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610360576000805460ff1961ff0019909116610100171660011790555b6102be610221565b6103706109ec565b6001600160a01b0316610381610414565b6001600160a01b0316146103ca576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61042b6109ec565b6001600160a01b031661043c610414565b6001600160a01b031614610485576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006104b56109ec565b6001600160a01b0316815260208101919091526040016000205460ff1661050d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156105b157600080fd5b505af11580156105c5573d6000803e3d6000fd5b5050505050505050505050565b6105da6109ec565b6001600160a01b03166105eb610414565b6001600160a01b031614610634576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61065d6109ec565b6001600160a01b031661066e610414565b6001600160a01b0316146106b7576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b0381166106fc5760405162461bcd60e51b81526004018080602001828103825260268152602001806109f76026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b606560006107646109ec565b6001600160a01b0316815260208101919091526040016000205460ff166107bc5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b5050505050505050565b600061084d306109f0565b15905090565b600054610100900460ff168061086c575061086c610842565b8061087a575060005460ff16155b6108b55760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102be576000805460ff1961ff00199091166101001716600117905580156102d0576000805461ff001916905550565b600054610100900460ff168061090c575061090c610842565b8061091a575060005460ff16155b6109555760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610980576000805460ff1961ff0019909116610100171660011790555b600061098a6109ec565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d0576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212201ac6cdd7d3dfc55f32f10d13fb14c86d97528121944756ef32d89fb364459cdf64736f6c63430007060033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c80639870d7fe116100665780639870d7fe146100d65780639c1c2ee9146100fc578063ac8a584a14610199578063f2fde38b146101bf578063f709b906146101e557610093565b80632ff26a0a14610098578063495edf86146100a2578063715018a6146100aa5780638da5cb5b146100b2575b600080fd5b6100a0610221565b005b6100a06102d3565b6100a0610368565b6100ba610414565b604080516001600160a01b039092168252519081900360200190f35b6100a0600480360360208110156100ec57600080fd5b50356001600160a01b0316610423565b6100a0600480360360c081101561011257600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561015a57600080fd5b82018360208201111561016c57600080fd5b8035906020019184600183028401116401000000008311171561018e57600080fd5b5090925090506104a9565b6100a0600480360360208110156101af57600080fd5b50356001600160a01b03166105d2565b6100a0600480360360208110156101d557600080fd5b50356001600160a01b0316610655565b6100a0600480360360808110156101fb57600080fd5b506001600160a01b03813581169160208101358216916040820135169060600135610758565b600054610100900460ff168061023a575061023a610842565b80610248575060005460ff16155b6102835760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102ae576000805460ff1961ff0019909116610100171660011790555b6102b6610853565b6102be6108f3565b80156102d0576000805461ff00191690555b50565b600054610100900460ff16806102ec57506102ec610842565b806102fa575060005460ff16155b6103355760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610360576000805460ff1961ff0019909116610100171660011790555b6102be610221565b6103706109ec565b6001600160a01b0316610381610414565b6001600160a01b0316146103ca576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b6033546001600160a01b031690565b61042b6109ec565b6001600160a01b031661043c610414565b6001600160a01b031614610485576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006104b56109ec565b6001600160a01b0316815260208101919091526040016000205460ff1661050d5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156105b157600080fd5b505af11580156105c5573d6000803e3d6000fd5b5050505050505050505050565b6105da6109ec565b6001600160a01b03166105eb610414565b6001600160a01b031614610634576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b61065d6109ec565b6001600160a01b031661066e610414565b6001600160a01b0316146106b7576040805162461bcd60e51b81526020600482018190526024820152600080516020610a4b833981519152604482015290519081900360640190fd5b6001600160a01b0381166106fc5760405162461bcd60e51b81526004018080602001828103825260268152602001806109f76026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b606560006107646109ec565b6001600160a01b0316815260208101919091526040016000205460ff166107bc5760405162461bcd60e51b8152600401808060200182810382526028815260200180610a6b6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b15801561082457600080fd5b505af1158015610838573d6000803e3d6000fd5b5050505050505050565b600061084d306109f0565b15905090565b600054610100900460ff168061086c575061086c610842565b8061087a575060005460ff16155b6108b55760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff161580156102be576000805460ff1961ff00199091166101001716600117905580156102d0576000805461ff001916905550565b600054610100900460ff168061090c575061090c610842565b8061091a575060005460ff16155b6109555760405162461bcd60e51b815260040180806020018281038252602e815260200180610a1d602e913960400191505060405180910390fd5b600054610100900460ff16158015610980576000805460ff1961ff0019909116610100171660011790555b600061098a6109ec565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156102d0576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a26469706673582212201ac6cdd7d3dfc55f32f10d13fb14c86d97528121944756ef32d89fb364459cdf64736f6c63430007060033", + "solcInputHash": "25cec8d3d0ea4b0d6c3f88e02b714495", + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"__OperatorRole_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"__OperatorRole_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"__TransferProxy_init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__TransferProxy_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"addOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC1155Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"erc1155safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC721Upgradeable\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"erc721safeTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":\"TransferProxy\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/Initializable.sol\\\";\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal initializer {\\n address msgSender = _msgSender();\\n _owner = msgSender;\\n emit OwnershipTransferred(address(0), msgSender);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n emit OwnershipTransferred(_owner, address(0));\\n _owner = address(0);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n emit OwnershipTransferred(_owner, newOwner);\\n _owner = newOwner;\\n }\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\n\\n/**\\n * @dev Interface of the ERC165 standard, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\\n *\\n * Implementers can declare support of contract interfaces, which can then be\\n * queried by others ({ERC165Checker}).\\n *\\n * For an implementation, see {ERC165}.\\n */\\ninterface IERC165Upgradeable {\\n /**\\n * @dev Returns true if this contract implements the interface defined by\\n * `interfaceId`. See the corresponding\\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\\n * to learn more about how these ids are created.\\n *\\n * This function call must use less than 30 000 gas.\\n */\\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\n// solhint-disable-next-line compiler-version\\npragma solidity >=0.4.24 <0.8.0;\\n\\nimport \\\"../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n */\\nabstract contract Initializable {\\n\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(_initializing || _isConstructor() || !_initialized, \\\"Initializable: contract is already initialized\\\");\\n\\n bool isTopLevelCall = !_initializing;\\n if (isTopLevelCall) {\\n _initializing = true;\\n _initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n _initializing = false;\\n }\\n }\\n\\n /// @dev Returns true if and only if the function is running in the constructor\\n function _isConstructor() private view returns (bool) {\\n return !AddressUpgradeable.isContract(address(this));\\n }\\n}\\n\",\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\\n *\\n * _Available since v3.1._\\n */\\ninterface IERC1155Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\\n */\\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\\n\\n /**\\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\\n * transfers.\\n */\\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\\n\\n /**\\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\\n * `approved`.\\n */\\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\\n\\n /**\\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\\n *\\n * If an {URI} event was emitted for `id`, the standard\\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\\n * returned by {IERC1155MetadataURI-uri}.\\n */\\n event URI(string value, uint256 indexed id);\\n\\n /**\\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\\n *\\n * Requirements:\\n *\\n * - `account` cannot be the zero address.\\n */\\n function balanceOf(address account, uint256 id) external view returns (uint256);\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\\n *\\n * Requirements:\\n *\\n * - `accounts` and `ids` must have the same length.\\n */\\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\\n\\n /**\\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\\n *\\n * Emits an {ApprovalForAll} event.\\n *\\n * Requirements:\\n *\\n * - `operator` cannot be the caller.\\n */\\n function setApprovalForAll(address operator, bool approved) external;\\n\\n /**\\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\\n *\\n * See {setApprovalForAll}.\\n */\\n function isApprovedForAll(address account, address operator) external view returns (bool);\\n\\n /**\\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\\n *\\n * Emits a {TransferSingle} event.\\n *\\n * Requirements:\\n *\\n * - `to` cannot be the zero address.\\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\\n * acceptance magic value.\\n */\\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\\n\\n /**\\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\\n *\\n * Emits a {TransferBatch} event.\\n *\\n * Requirements:\\n *\\n * - `ids` and `amounts` must have the same length.\\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\\n * acceptance magic value.\\n */\\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\nimport \\\"../../introspection/IERC165Upgradeable.sol\\\";\\n\\n/**\\n * @dev Required interface of an ERC721 compliant contract.\\n */\\ninterface IERC721Upgradeable is IERC165Upgradeable {\\n /**\\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\\n */\\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\\n\\n /**\\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\\n */\\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n /**\\n * @dev Returns the number of tokens in ``owner``'s account.\\n */\\n function balanceOf(address owner) external view returns (uint256 balance);\\n\\n /**\\n * @dev Returns the owner of the `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function ownerOf(uint256 tokenId) external view returns (address owner);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Transfers `tokenId` token from `from` to `to`.\\n *\\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(address from, address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\\n * The approval is cleared when the token is transferred.\\n *\\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\\n *\\n * Requirements:\\n *\\n * - The caller must own the token or be an approved operator.\\n * - `tokenId` must exist.\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address to, uint256 tokenId) external;\\n\\n /**\\n * @dev Returns the account approved for `tokenId` token.\\n *\\n * Requirements:\\n *\\n * - `tokenId` must exist.\\n */\\n function getApproved(uint256 tokenId) external view returns (address operator);\\n\\n /**\\n * @dev Approve or remove `operator` as an operator for the caller.\\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\\n *\\n * Requirements:\\n *\\n * - The `operator` cannot be the caller.\\n *\\n * Emits an {ApprovalForAll} event.\\n */\\n function setApprovalForAll(address operator, bool _approved) external;\\n\\n /**\\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\\n *\\n * See {setApprovalForAll}\\n */\\n function isApprovedForAll(address owner, address operator) external view returns (bool);\\n\\n /**\\n * @dev Safely transfers `tokenId` token from `from` to `to`.\\n *\\n * Requirements:\\n *\\n * - `from` cannot be the zero address.\\n * - `to` cannot be the zero address.\\n * - `tokenId` token must exist and be owned by `from`.\\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\\n *\\n * Emits a {Transfer} event.\\n */\\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.2 <0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n // solhint-disable-next-line no-inline-assembly\\n assembly { size := extcodesize(account) }\\n return size > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain`call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n // solhint-disable-next-line avoid-low-level-calls\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return _verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.0 <0.8.0;\\nimport \\\"../proxy/Initializable.sol\\\";\\n\\n/*\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with GSN meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal initializer {\\n __Context_init_unchained();\\n }\\n\\n function __Context_init_unchained() internal initializer {\\n }\\n function _msgSender() internal view virtual returns (address payable) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes memory) {\\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\\n return msg.data;\\n }\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\"},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\npragma abicoder v2;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\\\";\\n\\ninterface INftTransferProxy {\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\\n}\\n\",\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\"},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\\\";\\n\\ncontract OperatorRole is OwnableUpgradeable {\\n mapping (address => bool) operators;\\n\\n function __OperatorRole_init() external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n }\\n\\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\\n __Context_init_unchained();\\n __Ownable_init_unchained();\\n transferOwnership(initialOwner);\\n }\\n\\n function addOperator(address operator) external onlyOwner {\\n operators[operator] = true;\\n }\\n\\n function removeOperator(address operator) external onlyOwner {\\n operators[operator] = false;\\n }\\n\\n modifier onlyOperator() {\\n require(operators[_msgSender()], \\\"OperatorRole: caller is not the operator\\\");\\n _;\\n }\\n}\\n\",\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\"},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity >=0.6.9 <0.8.0;\\n\\nimport \\\"@rarible/role-operator/contracts/OperatorRole.sol\\\";\\nimport \\\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\\\";\\n\\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\\n\\n function __TransferProxy_init() external initializer {\\n __Ownable_init();\\n }\\n\\n function __TransferProxy_init_proxy(address _initialOwner) external initializer {\\n __Ownable_init();\\n transferOwnership(_initialOwner);\\n }\\n\\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\\n token.safeTransferFrom(from, to, tokenId);\\n }\\n\\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\\n token.safeTransferFrom(from, to, id, value, data);\\n }\\n}\\n\",\"keccak256\":\"0x23a035508922fbe29dfb91796175b391943f830eead313134142a01bd776f848\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610c7b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80639870d7fe116100715780639870d7fe146101125780639c1c2ee914610138578063ac8a584a146101d5578063e814f46d146101fb578063f2fde38b14610221578063f709b90614610247576100a9565b80632ff26a0a146100ae578063495edf86146100b8578063715018a6146100c057806374dc542b146100c85780638da5cb5b146100ee575b600080fd5b6100b6610283565b005b6100b6610335565b6100b66103ca565b6100b6600480360360208110156100de57600080fd5b50356001600160a01b0316610476565b6100f661052a565b604080516001600160a01b039092168252519081900360200190f35b6100b66004803603602081101561012857600080fd5b50356001600160a01b0316610539565b6100b6600480360360c081101561014e57600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561019657600080fd5b8201836020820111156101a857600080fd5b803590602001918460018302840111640100000000831117156101ca57600080fd5b5090925090506105bf565b6100b6600480360360208110156101eb57600080fd5b50356001600160a01b03166106e8565b6100b66004803603602081101561021157600080fd5b50356001600160a01b031661076b565b6100b66004803603602081101561023757600080fd5b50356001600160a01b0316610808565b6100b66004803603608081101561025d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561090b565b600054610100900460ff168061029c575061029c6109f5565b806102aa575060005460ff16155b6102e55760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610310576000805460ff1961ff0019909116610100171660011790555b610318610a06565b610320610aa6565b8015610332576000805461ff00191690555b50565b600054610100900460ff168061034e575061034e6109f5565b8061035c575060005460ff16155b6103975760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156103c2576000805460ff1961ff0019909116610100171660011790555b610320610283565b6103d2610b9f565b6001600160a01b03166103e361052a565b6001600160a01b03161461042c576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff168061048f575061048f6109f5565b8061049d575060005460ff16155b6104d85760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610503576000805460ff1961ff0019909116610100171660011790555b61050b610283565b61051482610808565b8015610526576000805461ff00191690555b5050565b6033546001600160a01b031690565b610541610b9f565b6001600160a01b031661055261052a565b6001600160a01b03161461059b576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006105cb610b9f565b6001600160a01b0316815260208101919091526040016000205460ff166106235760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156106c757600080fd5b505af11580156106db573d6000803e3d6000fd5b5050505050505050505050565b6106f0610b9f565b6001600160a01b031661070161052a565b6001600160a01b03161461074a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff168061078457506107846109f5565b80610792575060005460ff16155b6107cd5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156107f8576000805460ff1961ff0019909116610100171660011790555b610800610a06565b61050b610aa6565b610810610b9f565b6001600160a01b031661082161052a565b6001600160a01b03161461086a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b0381166108af5760405162461bcd60e51b8152600401808060200182810382526026815260200180610baa6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60656000610917610b9f565b6001600160a01b0316815260208101919091526040016000205460ff1661096f5760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156109d757600080fd5b505af11580156109eb573d6000803e3d6000fd5b5050505050505050565b6000610a0030610ba3565b15905090565b600054610100900460ff1680610a1f5750610a1f6109f5565b80610a2d575060005460ff16155b610a685760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610320576000805460ff1961ff0019909116610100171660011790558015610332576000805461ff001916905550565b600054610100900460ff1680610abf5750610abf6109f5565b80610acd575060005460ff16155b610b085760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610b33576000805460ff1961ff0019909116610100171660011790555b6000610b3d610b9f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610332576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220747ec40a8b785524508be701dc7a3088a8e915dd61c7a4cdc61564ce75450d3464736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80639870d7fe116100715780639870d7fe146101125780639c1c2ee914610138578063ac8a584a146101d5578063e814f46d146101fb578063f2fde38b14610221578063f709b90614610247576100a9565b80632ff26a0a146100ae578063495edf86146100b8578063715018a6146100c057806374dc542b146100c85780638da5cb5b146100ee575b600080fd5b6100b6610283565b005b6100b6610335565b6100b66103ca565b6100b6600480360360208110156100de57600080fd5b50356001600160a01b0316610476565b6100f661052a565b604080516001600160a01b039092168252519081900360200190f35b6100b66004803603602081101561012857600080fd5b50356001600160a01b0316610539565b6100b6600480360360c081101561014e57600080fd5b6001600160a01b038235811692602081013582169260408201359092169160608201359160808101359181019060c0810160a082013564010000000081111561019657600080fd5b8201836020820111156101a857600080fd5b803590602001918460018302840111640100000000831117156101ca57600080fd5b5090925090506105bf565b6100b6600480360360208110156101eb57600080fd5b50356001600160a01b03166106e8565b6100b66004803603602081101561021157600080fd5b50356001600160a01b031661076b565b6100b66004803603602081101561023757600080fd5b50356001600160a01b0316610808565b6100b66004803603608081101561025d57600080fd5b506001600160a01b0381358116916020810135821691604082013516906060013561090b565b600054610100900460ff168061029c575061029c6109f5565b806102aa575060005460ff16155b6102e55760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610310576000805460ff1961ff0019909116610100171660011790555b610318610a06565b610320610aa6565b8015610332576000805461ff00191690555b50565b600054610100900460ff168061034e575061034e6109f5565b8061035c575060005460ff16155b6103975760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156103c2576000805460ff1961ff0019909116610100171660011790555b610320610283565b6103d2610b9f565b6001600160a01b03166103e361052a565b6001600160a01b03161461042c576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff168061048f575061048f6109f5565b8061049d575060005460ff16155b6104d85760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610503576000805460ff1961ff0019909116610100171660011790555b61050b610283565b61051482610808565b8015610526576000805461ff00191690555b5050565b6033546001600160a01b031690565b610541610b9f565b6001600160a01b031661055261052a565b6001600160a01b03161461059b576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19166001179055565b606560006105cb610b9f565b6001600160a01b0316815260208101919091526040016000205460ff166106235760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b866001600160a01b031663f242432a8787878787876040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050975050505050505050600060405180830381600087803b1580156106c757600080fd5b505af11580156106db573d6000803e3d6000fd5b5050505050505050505050565b6106f0610b9f565b6001600160a01b031661070161052a565b6001600160a01b03161461074a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152606560205260409020805460ff19169055565b600054610100900460ff168061078457506107846109f5565b80610792575060005460ff16155b6107cd5760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff161580156107f8576000805460ff1961ff0019909116610100171660011790555b610800610a06565b61050b610aa6565b610810610b9f565b6001600160a01b031661082161052a565b6001600160a01b03161461086a576040805162461bcd60e51b81526020600482018190526024820152600080516020610bfe833981519152604482015290519081900360640190fd5b6001600160a01b0381166108af5760405162461bcd60e51b8152600401808060200182810382526026815260200180610baa6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60656000610917610b9f565b6001600160a01b0316815260208101919091526040016000205460ff1661096f5760405162461bcd60e51b8152600401808060200182810382526028815260200180610c1e6028913960400191505060405180910390fd5b836001600160a01b03166342842e0e8484846040518463ffffffff1660e01b815260040180846001600160a01b03168152602001836001600160a01b031681526020018281526020019350505050600060405180830381600087803b1580156109d757600080fd5b505af11580156109eb573d6000803e3d6000fd5b5050505050505050565b6000610a0030610ba3565b15905090565b600054610100900460ff1680610a1f5750610a1f6109f5565b80610a2d575060005460ff16155b610a685760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610320576000805460ff1961ff0019909116610100171660011790558015610332576000805461ff001916905550565b600054610100900460ff1680610abf5750610abf6109f5565b80610acd575060005460ff16155b610b085760405162461bcd60e51b815260040180806020018281038252602e815260200180610bd0602e913960400191505060405180910390fd5b600054610100900460ff16158015610b33576000805460ff1961ff0019909116610100171660011790555b6000610b3d610b9f565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610332576000805461ff001916905550565b3390565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65644f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724f70657261746f72526f6c653a2063616c6c6572206973206e6f7420746865206f70657261746f72a2646970667358221220747ec40a8b785524508be701dc7a3088a8e915dd61c7a4cdc61564ce75450d3464736f6c63430007060033", "devdoc": { "kind": "dev", "methods": { @@ -245,7 +271,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 19133, + "astId": 19884, "contract": "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol:TransferProxy", "label": "operators", "offset": 0, diff --git a/projects/hardhat-deploy/deployments/sepolia/solcInputs/1e83608a8d677752f3c67873d3574235.json b/projects/hardhat-deploy/deployments/sepolia/solcInputs/1e83608a8d677752f3c67873d3574235.json deleted file mode 100644 index 5e7a846a0..000000000 --- a/projects/hardhat-deploy/deployments/sepolia/solcInputs/1e83608a8d677752f3c67873d3574235.json +++ /dev/null @@ -1,605 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal initializer {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n uint256[49] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712Upgradeable is Initializable {\n /* solhint-disable var-name-mixedcase */\n bytes32 private _HASHED_NAME;\n bytes32 private _HASHED_VERSION;\n bytes32 private constant _TYPE_HASH = keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n function __EIP712_init(string memory name, string memory version) internal initializer {\n __EIP712_init_unchained(name, version);\n }\n\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\n }\n\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\n return keccak256(\n abi.encode(\n typeHash,\n name,\n version,\n _getChainId(),\n address(this)\n )\n );\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n }\n\n function _getChainId() private view returns (uint256 chainId) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n\n /**\n * @dev The hash of the name parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712NameHash() internal virtual view returns (bytes32) {\n return _HASHED_NAME;\n }\n\n /**\n * @dev The hash of the version parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\n return _HASHED_VERSION;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165Upgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n function __ERC165_init() internal initializer {\n __ERC165_init_unchained();\n }\n\n function __ERC165_init_unchained() internal initializer {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n uint256[49] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165Upgradeable {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\n// solhint-disable-next-line compiler-version\npragma solidity >=0.4.24 <0.8.0;\n\nimport \"../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n */\nabstract contract Initializable {\n\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(_initializing || _isConstructor() || !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /// @dev Returns true if and only if the function is running in the constructor\n function _isConstructor() private view returns (bool) {\n return !AddressUpgradeable.isContract(address(this));\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155HolderUpgradeable is Initializable, ERC1155ReceiverUpgradeable {\n function __ERC1155Holder_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ERC1155Holder_init_unchained();\n }\n\n function __ERC1155Holder_init_unchained() internal initializer {\n }\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\n function __ERC1155Receiver_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n }\n\n function __ERC1155Receiver_init_unchained() internal initializer {\n _registerInterface(\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\n );\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\nimport \"./IERC1155MetadataURIUpgradeable.sol\";\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC20Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable {\n using SafeMathUpgradeable for uint256;\n\n mapping (address => uint256) private _balances;\n\n mapping (address => mapping (address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n * a default value of 18.\n *\n * To select a different value for {decimals}, use {_setupDecimals}.\n *\n * All three of these values are immutable: they can only be set once during\n * construction.\n */\n function __ERC20_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC20_init_unchained(name_, symbol_);\n }\n\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n _decimals = 18;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n * called.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return _decimals;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * Requirements:\n *\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n * - the caller must have allowance for ``sender``'s tokens of at least\n * `amount`.\n */\n function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n /**\n * @dev Moves tokens `amount` from `sender` to `recipient`.\n *\n * This is internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: mint to the zero address\");\n\n _beforeTokenTransfer(address(0), account, amount);\n\n _totalSupply = _totalSupply.add(amount);\n _balances[account] = _balances[account].add(amount);\n emit Transfer(address(0), account, amount);\n }\n\n /**\n * @dev Destroys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: burn from the zero address\");\n\n _beforeTokenTransfer(account, address(0), amount);\n\n _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n _totalSupply = _totalSupply.sub(amount);\n emit Transfer(account, address(0), amount);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(address owner, address spender, uint256 amount) internal virtual {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Sets {decimals} to a value other than the default one of 18.\n *\n * WARNING: This function should only be called from the constructor. Most\n * applications that interact with token contracts will not expect\n * {decimals} to ever change, and may work incorrectly if it does.\n */\n function _setupDecimals(uint8 decimals_) internal virtual {\n _decimals = decimals_;\n }\n\n /**\n * @dev Hook that is called before any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * will be to transferred to `to`.\n * - when `from` is zero, `amount` tokens will be minted for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n uint256[44] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20Upgradeable {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721HolderUpgradeable is Initializable, IERC721ReceiverUpgradeable {\n function __ERC721Holder_init() internal initializer {\n __ERC721Holder_init_unchained();\n }\n\n function __ERC721Holder_init_unchained() internal initializer {\n }\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC721Upgradeable.sol\";\nimport \"./IERC721MetadataUpgradeable.sol\";\nimport \"./IERC721EnumerableUpgradeable.sol\";\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../utils/EnumerableSetUpgradeable.sol\";\nimport \"../../utils/EnumerableMapUpgradeable.sol\";\nimport \"../../utils/StringsUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) private _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap private _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits an {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[41] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721EnumerableUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the total amount of tokens stored by the contract.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);\n\n /**\n * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n * Use along with {totalSupply} to enumerate all tokens.\n */\n function tokenByIndex(uint256 index) external view returns (uint256);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721ReceiverUpgradeable {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the caller.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool _approved) external;\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal initializer {\n __Context_init_unchained();\n }\n\n function __Context_init_unchained() internal initializer {\n }\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing an enumerable variant of Solidity's\n * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]\n * type.\n *\n * Maps have the following properties:\n *\n * - Entries are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Entries are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableMap for EnumerableMap.UintToAddressMap;\n *\n * // Declare a set state variable\n * EnumerableMap.UintToAddressMap private myMap;\n * }\n * ```\n *\n * As of v3.0.0, only maps of type `uint256 -> address` (`UintToAddressMap`) are\n * supported.\n */\nlibrary EnumerableMapUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Map type with\n // bytes32 keys and values.\n // The Map implementation uses private functions, and user-facing\n // implementations (such as Uint256ToAddressMap) are just wrappers around\n // the underlying Map.\n // This means that we can only create new EnumerableMaps for types that fit\n // in bytes32.\n\n struct MapEntry {\n bytes32 _key;\n bytes32 _value;\n }\n\n struct Map {\n // Storage of map keys and values\n MapEntry[] _entries;\n\n // Position of the entry defined by a key in the `entries` array, plus 1\n // because index 0 means a key is not in the map.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex == 0) { // Equivalent to !contains(map, key)\n map._entries.push(MapEntry({ _key: key, _value: value }));\n // The entry is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n map._indexes[key] = map._entries.length;\n return true;\n } else {\n map._entries[keyIndex - 1]._value = value;\n return false;\n }\n }\n\n /**\n * @dev Removes a key-value pair from a map. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function _remove(Map storage map, bytes32 key) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex != 0) { // Equivalent to contains(map, key)\n // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one\n // in the array, and then remove the last entry (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = keyIndex - 1;\n uint256 lastIndex = map._entries.length - 1;\n\n // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n MapEntry storage lastEntry = map._entries[lastIndex];\n\n // Move the last entry to the index where the entry to delete is\n map._entries[toDeleteIndex] = lastEntry;\n // Update the index for the moved entry\n map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved entry was stored\n map._entries.pop();\n\n // Delete the index for the deleted slot\n delete map._indexes[key];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function _contains(Map storage map, bytes32 key) private view returns (bool) {\n return map._indexes[key] != 0;\n }\n\n /**\n * @dev Returns the number of key-value pairs in the map. O(1).\n */\n function _length(Map storage map) private view returns (uint256) {\n return map._entries.length;\n }\n\n /**\n * @dev Returns the key-value pair stored at position `index` in the map. O(1).\n *\n * Note that there are no guarantees on the ordering of entries inside the\n * array, and it may change when more entries are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {\n require(map._entries.length > index, \"EnumerableMap: index out of bounds\");\n\n MapEntry storage entry = map._entries[index];\n return (entry._key, entry._value);\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n */\n function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {\n uint256 keyIndex = map._indexes[key];\n if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)\n return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function _get(Map storage map, bytes32 key) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, \"EnumerableMap: nonexistent key\"); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n /**\n * @dev Same as {_get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {_tryGet}.\n */\n function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n // UintToAddressMap\n\n struct UintToAddressMap {\n Map _inner;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {\n return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {\n return _remove(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {\n return _contains(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns the number of elements in the map. O(1).\n */\n function length(UintToAddressMap storage map) internal view returns (uint256) {\n return _length(map._inner);\n }\n\n /**\n * @dev Returns the element stored at position `index` in the set. O(1).\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {\n (bytes32 key, bytes32 value) = _at(map._inner, index);\n return (uint256(key), address(uint160(uint256(value))));\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n *\n * _Available since v3.4._\n */\n function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {\n (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));\n return (success, address(uint160(uint256(value))));\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key)))));\n }\n\n /**\n * @dev Same as {get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryGet}.\n */\n function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n */\nlibrary EnumerableSetUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) { // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n bytes32 lastvalue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastvalue;\n // Update the index for the moved value\n set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n require(set._values.length > index, \"EnumerableSet: index out of bounds\");\n return set._values[index];\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuardUpgradeable is Initializable {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n function __ReentrancyGuard_init() internal initializer {\n __ReentrancyGuard_init_unchained();\n }\n\n function __ReentrancyGuard_init_unchained() internal initializer {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n // On the first call to nonReentrant, _notEntered will be true\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n uint256[49] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary StringsUpgradeable {\n /**\n * @dev Converts a `uint256` to its ASCII `string` representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n uint256 index = digits - 1;\n temp = value;\n while (temp != 0) {\n buffer[index--] = bytes1(uint8(48 + temp % 10));\n temp /= 10;\n }\n return string(buffer);\n }\n}\n" - }, - "@openzeppelin/contracts/access/Ownable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" - }, - "@openzeppelin/contracts/introspection/ERC165.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165 is IERC165 {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n constructor () internal {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" - }, - "@openzeppelin/contracts/introspection/IERC165.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" - }, - "@openzeppelin/contracts/math/SafeMath.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/BeaconProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\nimport \"./IBeacon.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy {\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) public payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _setBeacon(beacon, data);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address beacon) {\n bytes32 slot = _BEACON_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n beacon := sload(slot)\n }\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_beacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n require(\n Address.isContract(beacon),\n \"BeaconProxy: beacon is not a contract\"\n );\n require(\n Address.isContract(IBeacon(beacon).implementation()),\n \"BeaconProxy: beacon implementation is not a contract\"\n );\n bytes32 slot = _BEACON_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, beacon)\n }\n\n if (data.length > 0) {\n Address.functionDelegateCall(_implementation(), data, \"BeaconProxy: function call failed\");\n }\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/IBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" - }, - "@openzeppelin/contracts/proxy/Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../access/Ownable.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n constructor(address implementation_) public {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/ERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155.sol\";\nimport \"./IERC1155MetadataURI.sol\";\nimport \"./IERC1155Receiver.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../introspection/ERC165.sol\";\nimport \"../../math/SafeMath.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {\n using SafeMath for uint256;\n using Address for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n constructor (string memory uri_) public {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Receiver.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155Holder is ERC1155Receiver {\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Receiver.sol\";\nimport \"../../introspection/ERC165.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\n constructor() internal {\n _registerInterface(\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\n );\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/IERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155 is IERC165 {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURI is IERC1155 {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155Receiver is IERC165 {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" - }, - "@openzeppelin/contracts/token/ERC721/ERC721Holder.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721Receiver.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721Holder is IERC721Receiver {\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" - }, - "@openzeppelin/contracts/utils/Address.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" - }, - "@openzeppelin/contracts/utils/Context.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" - }, - "@openzeppelin/contracts/utils/Pausable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n bool private _paused;\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n constructor () internal {\n _paused = false;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n require(!paused(), \"Pausable: paused\");\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n require(paused(), \"Pausable: not paused\");\n _;\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" - }, - "@rarible/auction/contracts/1155/AuctionHouse1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase1155.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse1155 is ERC1155HolderUpgradeable, AuctionHouseBase1155 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse1155_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse1155_init_unchained();\n }\n\n function __AuctionHouse1155_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint96 _sellTokenValue,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC1155 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(_sellTokenValue > 0, \"incorrect _sellTokenValue\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenValue,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n\n transferNFT(\n _sellToken, \n _sellTokenId, \n _sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n sender,\n address(this)\n );\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime if it's not set\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId) internal {\n emit AuctionFinished(_auctionId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n address seller = currentAuction.seller;\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n currentAuction.sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n \n deactivateAuction(_auctionId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return this.supportsInterface(interfaceId);\n }\n\n}" - }, - "@rarible/auction/contracts/1155/AuctionHouseBase1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase1155 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint96 sellTokenValue;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n\n}" - }, - "@rarible/auction/contracts/721/AuctionHouse721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase721.sol\";\nimport \"../wrapper/TokenToAuction.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse721 is ERC721HolderUpgradeable, TokenToAuction, AuctionHouseBase721 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse721_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC721Holder_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse721_init_unchained();\n }\n\n function __AuctionHouse721_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC721 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n transferNFT(\n _sellToken, \n _sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n sender,\n address(this)\n );\n setAuctionForToken(_sellToken, _sellTokenId, currentAuctionId);\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId, address token, uint tokenId) internal {\n emit AuctionFinished(_auctionId);\n deleteAuctionForToken(token, tokenId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n address seller = currentAuction.seller;\n require(_checkAuctionExistence(seller), \"there is no auction with this id\");\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n \n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n /// @dev function to call from wrapper to put bid\n function putBidWrapper(uint256 _auctionId) external payable {\n require(auctions[_auctionId].buyAsset == address(0), \"only ETH bids allowed\");\n putBid(_auctionId, Bid(msg.value, LibBidDataV1.V1, \"\"));\n }\n\n}" - }, - "@rarible/auction/contracts/721/AuctionHouseBase721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase721 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n}" - }, - "@rarible/auction/contracts/AuctionHouseBase.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libs/LibAucDataV1.sol\";\nimport \"./libs/LibBidDataV1.sol\";\nimport \"./libs/SafeMathUpgradeable96.sol\";\n\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nabstract contract AuctionHouseBase is OwnableUpgradeable, ReentrancyGuardUpgradeable, RaribleTransferManager, TransferExecutor {\n using LibTransfer for address;\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n /// @dev default minimal auction duration and also the time for that auction is extended when it's about to end (endTime - now < EXTENSION_DURATION)\n uint96 internal constant EXTENSION_DURATION = 15 minutes;\n\n /// @dev maximum auction duration\n uint128 internal constant MAX_DURATION = 1000 days;\n\n /// @dev maximum fee base point\n uint internal constant MAX_FEE_BASE_POINT = 1000;\n\n /// @dev mapping to store eth amount that is ready to be withdrawn (used for faulty eth-bids)\n mapping(address => uint) readyToWithdraw;\n\n /// @dev latest auctionId\n uint256 public auctionId;\n\n /// @dev minimal auction duration\n uint96 public minimalDuration;\n\n /// @dev minimal bid increase in base points\n uint96 public minimalStepBasePoint;\n\n /// @dev bid struct\n struct Bid {\n // the amount \n uint amount;\n // version of Bid to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Bid, can be seen in \"LibBidDataV1.sol\"\n bytes data;\n }\n\n /// @dev event that emits when auction is created\n event AuctionCreated(uint indexed auctionId, address seller);\n /// @dev event that emits when bid is placed\n event BidPlaced(uint indexed auctionId, address buyer, uint endTime);\n /// @dev event that emits when auction is finished\n event AuctionFinished(uint indexed auctionId);\n /// @dev event that emits when auction is canceled\n event AuctionCancelled(uint indexed auctionId);\n /// @dev event that emits when auction is bought out\n event AuctionBuyOut(uint indexed auctionId, address buyer);\n\n /// @dev event that's emitted when user can withdraw ETH from the AuctionHouse\n event AvailableToWithdraw(address indexed owner, uint added, uint total);\n /// @dev event that's emitted when minimal auction duration changes\n event MinimalDurationChanged(uint oldValue, uint newValue);\n\n event MinimalStepChanged(uint oldValue, uint newValue);\n\n function __AuctionHouseBase_init_unchained(\n uint96 _minimalStepBasePoint\n ) internal initializer {\n auctionId = 1;\n minimalDuration = EXTENSION_DURATION;\n minimalStepBasePoint = _minimalStepBasePoint;\n }\n\n /// @dev increments auctionId and returns new value\n function getNextAndIncrementAuctionId() internal returns (uint256) {\n return auctionId++;\n }\n\n function changeMinimalDuration(uint96 newValue) external onlyOwner {\n emit MinimalDurationChanged(minimalDuration, newValue);\n minimalDuration = newValue;\n }\n\n function changeMinimalStep(uint96 newValue) external onlyOwner {\n emit MinimalStepChanged(minimalStepBasePoint, newValue);\n minimalStepBasePoint = newValue;\n }\n\n function transferNFT (\n address token,\n uint tokenId,\n uint value,\n bytes4 assetClass,\n address from,\n address to\n ) internal {\n transfer(\n getSellAsset(\n token,\n tokenId,\n value,\n assetClass\n ),\n from,\n to,\n proxies[assetClass]\n );\n }\n\n function transferBid(\n uint value,\n address token,\n address from,\n address to,\n address proxy\n ) internal {\n transfer(\n getBuyAsset(\n token,\n value\n ),\n from,\n to,\n proxy\n );\n }\n\n function getSellAsset(address token, uint tokenId, uint value, bytes4 assetClass) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n asset.assetType.assetClass = assetClass;\n asset.assetType.data = abi.encode(token, tokenId);\n }\n\n function getBuyAsset(address token, uint value) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n\n if (token == address(0)){\n asset.assetType.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n asset.assetType.assetClass = LibAsset.ERC20_ASSET_CLASS;\n asset.assetType.data = abi.encode(token);\n }\n }\n\n function getPayouts(address maker) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(maker);\n payout[0].value = 10000;\n return payout;\n }\n\n function getOriginFee(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee = new LibPart.Part[](1);\n originFee[0].account = payable(address(data));\n originFee[0].value = uint96(getValueFromData(data));\n return originFee;\n }\n\n function _checkAuctionRangeTime(uint endTime, uint startTime) internal view returns (bool){\n uint currentTime = block.timestamp;\n if (startTime > 0 && startTime > currentTime) {\n return false;\n }\n if (endTime > 0 && endTime <= currentTime){\n return false;\n }\n\n return true;\n }\n\n /// @dev returns true if newAmount is enough for buyOut\n function buyOutVerify(LibAucDataV1.DataV1 memory aucData, uint newAmount) internal pure returns (bool) {\n if (aucData.buyOutPrice > 0 && aucData.buyOutPrice <= newAmount) {\n return true;\n }\n return false;\n }\n\n /// @dev returns true if auction exists, false otherwise\n function _checkAuctionExistence(address seller) internal pure returns (bool){\n return seller != address(0);\n }\n\n /// @dev Used to withdraw faulty bids (bids that failed to return after out-bidding)\n function withdrawFaultyBid(address _to) external {\n address sender = _msgSender();\n uint amount = readyToWithdraw[sender];\n require( amount > 0, \"nothing to withdraw\");\n readyToWithdraw[sender] = 0;\n _to.transferEth(amount);\n }\n\n function _returnBid(\n Bid memory oldBid,\n address buyAsset,\n address oldBuyer,\n address proxy\n ) internal {\n // nothing to return\n if (oldBuyer == address(0)) {\n return;\n }\n if (buyAsset == address(0)) {\n (bool success,) = oldBuyer.call{ value: oldBid.amount }(\"\");\n if (!success) {\n uint currentValueToWithdraw = readyToWithdraw[oldBuyer];\n uint newValueToWithdraw = oldBid.amount.add(currentValueToWithdraw);\n readyToWithdraw[oldBuyer] = newValueToWithdraw;\n emit AvailableToWithdraw(oldBuyer, oldBid.amount, newValueToWithdraw);\n }\n } else {\n transferBid(\n oldBid.amount,\n buyAsset,\n address(this),\n oldBuyer,\n proxy\n );\n }\n }\n\n function _getProxy(address buyAsset) internal view returns(address){\n address proxy;\n if (buyAsset != address(0)){\n proxy = proxies[LibAsset.ERC20_ASSET_CLASS];\n }\n return proxy;\n }\n\n /// @dev check that msg.value more than bid amount with fees and return change\n function checkEthReturnChange(uint totalAmount, address buyer) internal {\n uint msgValue = msg.value;\n require(msgValue >= totalAmount, \"not enough ETH\");\n uint256 change = msgValue.sub(totalAmount);\n if (change > 0) {\n buyer.transferEth(change);\n }\n }\n\n /// @dev returns true if auction in progress, false otherwise\n function checkAuctionInProgress(address seller, uint endTime, uint startTime) internal view{\n require(_checkAuctionExistence(seller) && _checkAuctionRangeTime(endTime, startTime), \"auction is inactive\");\n }\n\n /// @dev reserves new bid and returns the last one if it exists\n function reserveBid(\n address buyAsset,\n address oldBuyer,\n address newBuyer,\n Bid memory oldBid,\n address proxy,\n uint newTotalAmount\n ) internal {\n // return old bid if theres any\n _returnBid(\n oldBid,\n buyAsset,\n oldBuyer,\n proxy\n );\n \n //lock new bid\n transferBid(\n newTotalAmount,\n buyAsset,\n newBuyer,\n address(this),\n proxy\n );\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function _getMinimalNextBid(address buyer, uint96 minimalPrice, uint amount) internal view returns (uint minBid){\n if (buyer == address(0x0)) {\n minBid = minimalPrice;\n } else {\n minBid = amount.add(amount.bp(minimalStepBasePoint));\n }\n }\n\n function getValueFromData(uint data) internal pure returns(uint) {\n return (data >> 160);\n }\n\n uint256[50] private ______gap;\n}" - }, - "@rarible/auction/contracts/libs/LibAucDataV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Auction struct\nlibrary LibAucDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Auction data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n // auction duration\n uint96 duration;\n // auction startTime\n uint96 startTime;\n // auction buyout price\n uint96 buyOutPrice;\n }\n\n /// @dev returns parsed data field of an Auction (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n }\n } else {\n revert(\"wrong auction dataType\");\n }\n }\n}\n\n" - }, - "@rarible/auction/contracts/libs/LibBidDataV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Bid struct\nlibrary LibBidDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Bid data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n }\n\n /// @dev returns parsed data field of a Bid (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n } \n } else {\n revert(\"wrong bid dataType\");\n }\n }\n}\n" - }, - "@rarible/auction/contracts/libs/SafeMathUpgradeable96.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable96 {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint96 a, uint96 b) internal pure returns (uint96) {\n uint96 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint96 a, uint96 b) internal pure returns (uint96) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n}\n" - }, - "@rarible/auction/contracts/wrapper/IMarketWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/**\n * @title IMarketWrapper\n * @author Anna Carroll\n * @notice IMarketWrapper provides a common interface for\n * interacting with NFT auction markets.\n * Contracts can abstract their interactions with\n * different NFT markets using IMarketWrapper.\n * NFT markets can become compatible with any contract\n * using IMarketWrapper by deploying a MarketWrapper contract\n * that implements this interface using the logic of their Market.\n *\n * WARNING: MarketWrapper contracts should NEVER write to storage!\n * When implementing a MarketWrapper, exercise caution; a poorly implemented\n * MarketWrapper contract could permanently lose access to the NFT or user funds.\n */\ninterface IMarketWrapper {\n /**\n * @notice Given the auctionId, nftContract, and tokenId, check that:\n * 1. the auction ID matches the token\n * referred to by tokenId + nftContract\n * 2. the auctionId refers to an *ACTIVE* auction\n * (e.g. an auction that will accept bids)\n * within this market contract\n * 3. any additional validation to ensure that\n * a PartyBid can bid on this auction\n * (ex: if the market allows arbitrary bidding currencies,\n * check that the auction currency is ETH)\n * Note: This function probably should have been named \"isValidAuction\"\n * @dev Called in PartyBid.sol in `initialize` at line 174\n * @return TRUE if the auction is valid\n */\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external view returns (bool);\n\n /**\n * @notice Calculate the minimum next bid for this auction.\n * PartyBid contracts always submit the minimum possible\n * bid that will be accepted by the Market contract.\n * usually, this is either the reserve price (if there are no bids)\n * or a certain percentage increase above the current highest bid\n * @dev Called in PartyBid.sol in `bid` at line 251\n * @return minimum bid amount\n */\n function getMinimumBid(uint256 auctionId) external view returns (uint256);\n\n /**\n * @notice Query the current highest bidder for this auction\n * It is assumed that there is always 1 winning highest bidder for an auction\n * This is used to ensure that PartyBid cannot outbid itself if it is already winning\n * @dev Called in PartyBid.sol in `bid` at line 241\n * @return highest bidder\n */\n function getCurrentHighestBidder(uint256 auctionId)\n external\n view\n returns (address);\n\n /**\n * @notice Submit bid to Market contract\n * @dev Called in PartyBid.sol in `bid` at line 259\n */\n function bid(uint256 auctionId, uint256 bidAmount) external;\n\n /**\n * @notice Determine whether the auction has been finalized\n * Used to check if it is still possible to bid\n * And to determine whether the PartyBid should finalize the auction\n * @dev Called in PartyBid.sol in `bid` at line 247\n * @dev and in `finalize` at line 288\n * @return TRUE if the auction has been finalized\n */\n function isFinalized(uint256 auctionId) external view returns (bool);\n\n /**\n * @notice Finalize the results of the auction\n * on the Market contract\n * It is assumed that this operation is performed once for each auction,\n * that after it is done the auction is over and the NFT has been\n * transferred to the auction winner.\n * @dev Called in PartyBid.sol in `finalize` at line 289\n */\n function finalize(uint256 auctionId) external;\n}" - }, - "@rarible/auction/contracts/wrapper/TokenToAuction.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/// @dev contract to add tokenToAuctionId functionality to auctionHouse\ncontract TokenToAuction {\n /// @dev mapping to store auction ids for token address + token id (only stores erc-721 tokens)\n mapping(address => mapping(uint256 => uint256)) private tokenToAuctionId;\n\n /// @dev returns auction id by token address and token id\n function getAuctionByToken(address _collection, uint tokenId) external view returns(uint) {\n return tokenToAuctionId[_collection][tokenId];\n }\n\n /// @dev sets auction id for token address and token id\n function setAuctionForToken(address token, uint tokenId, uint auctionId) internal {\n tokenToAuctionId[token][tokenId] = auctionId;\n }\n\n /// @dev deletes auctionId from tokenToAuctionId\n function deleteAuctionForToken(address token, uint tokenId) internal {\n delete tokenToAuctionId[token][tokenId];\n }\n \n uint256[50] private ______gap;\n}" - }, - "@rarible/auction/contracts/wrapper/Wrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\nimport \"./IMarketWrapper.sol\";\nimport \"../721/AuctionHouse721.sol\";\n\ncontract Wrapper is IMarketWrapper{\n\n AuctionHouse721 internal immutable auction;\n\n constructor(address _auction) {\n auction = AuctionHouse721(_auction);\n }\n\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external override view returns (bool){\n return auctionId == auction. getAuctionByToken(nftContract, tokenId);\n }\n\n function getMinimumBid(uint256 auctionId) external override view returns (uint256){\n return auction.getMinimalNextBid(auctionId);\n }\n\n function getCurrentHighestBidder(uint256 auctionId)\n external\n override\n view\n returns (address){\n return auction.getCurrentBuyer(auctionId);\n }\n\n function bid(uint256 auctionId, uint256 bidAmount) external override{\n (bool success, bytes memory returnData) =\n address(auction).call{value: bidAmount}(\n abi.encodeWithSignature(\"putBidWrapper(uint256)\", auctionId)\n );\n require(success, string(returnData));\n }\n\n function isFinalized(uint256 auctionId) external override view returns (bool){\n return !auction.checkAuctionExistence(auctionId);\n }\n\n function finalize(uint256 auctionId) external override{\n auction.finishAuction(auctionId);\n }\n}" - }, - "@rarible/custom-matchers/contracts/AssetMatcherCollection.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\n/*\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\n */\ncontract AssetMatcherCollection is IAssetMatcher {\n\n bytes constant EMPTY = \"\";\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\n if (\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\n ) {\n (address leftToken) = abi.decode(leftAssetType.data, (address));\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\n if (leftToken == rightToken) {\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\n }\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n}" - }, - "@rarible/exchange-interfaces/contracts/IAssetMatcher.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface IAssetMatcher {\n function matchAssets(\n LibAsset.AssetType memory leftAssetType,\n LibAsset.AssetType memory rightAssetType\n ) external view returns (LibAsset.AssetType memory);\n}\n" - }, - "@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface ICryptoPunksMarket {\n //to get address punk owner from mapping (uint => address) public punkIndexToAddress;\n function punkIndexToAddress(uint key) external returns (address);\n\n function buyPunk(uint punkIndex) payable external;\n\n function transferPunk(address to, uint punkIndex) external;\n\n function offerPunkForSaleToAddress(uint punkIndex, uint minSalePriceInWei, address toAddress) external;\n}" - }, - "@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\ninterface IERC20TransferProxy {\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\n}\n" - }, - "@rarible/exchange-interfaces/contracts/INftTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\ninterface INftTransferProxy {\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n}\n" - }, - "@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\n}\n" - }, - "@rarible/exchange-interfaces/contracts/ITransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" - }, - "@rarible/exchange-v2/contracts/AssetMatcher.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" - }, - "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/ExchangeV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n require(newFill.rightValue > 0 && newFill.leftValue > 0, \"nothing to fill\");\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibDirectTransfer { //LibDirectTransfers\n /*All buy parameters need for create buyOrder and sellOrder*/\n struct Purchase {\n address sellOrderMaker; //\n uint256 sellOrderNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 sellOrderPaymentAmount;\n address paymentToken;\n uint256 sellOrderSalt;\n uint sellOrderStart;\n uint sellOrderEnd;\n bytes4 sellOrderDataType;\n bytes sellOrderData;\n bytes sellOrderSignature;\n\n uint256 buyOrderPaymentAmount;\n uint256 buyOrderNftAmount;\n bytes buyOrderData;\n }\n\n /*All accept bid parameters need for create buyOrder and sellOrder*/\n struct AcceptBid {\n address bidMaker; //\n uint256 bidNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 bidPaymentAmount;\n address paymentToken;\n uint256 bidSalt;\n uint bidStart;\n uint bidEnd;\n bytes4 bidDataType;\n bytes bidData;\n bytes bidSignature;\n\n uint256 sellOrderPaymentAmount;\n uint256 sellOrderNftAmount;\n bytes sellOrderData;\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibFill.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibMath.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary LibMath {\n using SafeMathUpgradeable for uint;\n\n /// @dev Calculates partial value given a numerator and denominator rounded down.\n /// Reverts if rounding error is >= 0.1%\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return partialAmount value of target rounded down.\n function safeGetPartialAmountFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorFloor(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding down.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // The absolute rounding error is the difference between the rounded\n // value and the ideal value. The relative rounding error is the\n // absolute rounding error divided by the absolute value of the\n // ideal value. This is undefined when the ideal value is zero.\n //\n // The ideal value is `numerator * target / denominator`.\n // Let's call `numerator * target % denominator` the remainder.\n // The absolute error is `remainder / denominator`.\n //\n // When the ideal value is zero, we require the absolute error to\n // be zero. Fortunately, this is always the case. The ideal value is\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\n // remainder and absolute error are also zero.\n if (target == 0 || numerator == 0) {\n return false;\n }\n\n // Otherwise, we want the relative rounding error to be strictly\n // less than 0.1%.\n // The relative error is `remainder / (numerator * target)`.\n // We want the relative error less than 1 / 1000:\n // remainder / (numerator * target) < 1 / 1000\n // or equivalently:\n // 1000 * remainder < numerator * target\n // so we have a rounding error iff:\n // 1000 * remainder >= numerator * target\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n isError = remainder.mul(1000) >= numerator.mul(target);\n }\n\n function safeGetPartialAmountCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorCeil(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding up.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // See the comments in `isRoundingError`.\n if (target == 0 || numerator == 0) {\n // When either is zero, the ideal value and rounded value are zero\n // and there is no rounding error. (Although the relative error\n // is undefined.)\n return false;\n }\n // Compute remainder as before\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n remainder = denominator.sub(remainder) % denominator;\n isError = remainder.mul(1000) >= numerator.mul(target);\n return isError;\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrder.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nimport \"./LibMath.sol\";\nimport \"./LibOrderDataV3.sol\";\nimport \"./LibOrderDataV2.sol\";\nimport \"./LibOrderDataV1.sol\";\n\nlibrary LibOrder {\n using SafeMathUpgradeable for uint;\n\n bytes32 constant ORDER_TYPEHASH = keccak256(\n \"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\n\n struct Order {\n address maker;\n LibAsset.Asset makeAsset;\n address taker;\n LibAsset.Asset takeAsset;\n uint salt;\n uint start;\n uint end;\n bytes4 dataType;\n bytes data;\n }\n\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\n if (isMakeFill){\n makeValue = order.makeAsset.value.sub(fill);\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\n } else {\n takeValue = order.takeAsset.value.sub(fill);\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \n } \n }\n\n function hashKey(Order memory order) internal pure returns (bytes32) {\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt\n ));\n } else {\n //order.data is in hash for V2, V3 and all new order\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt,\n order.data\n ));\n }\n }\n\n function hash(Order memory order) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ORDER_TYPEHASH,\n order.maker,\n LibAsset.hash(order.makeAsset),\n order.taker,\n LibAsset.hash(order.takeAsset),\n order.salt,\n order.start,\n order.end,\n order.dataType,\n keccak256(order.data)\n ));\n }\n\n function validateOrderTime(LibOrder.Order memory order) internal view {\n require(order.start == 0 || order.start < block.timestamp, \"Order start validation failed\");\n require(order.end == 0 || order.end > block.timestamp, \"Order end validation failed\");\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderData.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibOrderData {\n\n struct GenericOrderData {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n } \n\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\n if (order.dataType == LibOrderDataV1.V1) {\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n } else if (order.dataType == LibOrderDataV2.V2) {\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n dataOrder.isMakeFill = data.isMakeFill;\n } else if (order.dataType == 0xffffffff) {\n } else {\n revert(\"Unknown Order data type\");\n }\n if (dataOrder.payouts.length == 0) {\n dataOrder.payouts = payoutSet(order.maker);\n }\n }\n\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(orderAddress);\n payout[0].value = 10000;\n return payout;\n }\n\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee;\n\n if (dataFirst > 0 && dataSecond > 0){\n originFee = new LibPart.Part[](2);\n\n originFee[0] = uintToLibPart(dataFirst);\n originFee[1] = uintToLibPart(dataSecond);\n }\n\n if (dataFirst > 0 && dataSecond == 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataFirst);\n }\n\n if (dataFirst == 0 && dataSecond > 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataSecond);\n }\n\n return originFee;\n }\n\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payouts;\n\n if (data > 0) {\n payouts = new LibPart.Part[](1);\n payouts[0] = uintToLibPart(data);\n }\n\n return payouts;\n }\n\n /**\n @notice converts uint to LibPart.Part\n @param data address and value encoded in uint (first 12 bytes )\n @return result LibPart.Part \n */\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\n if (data > 0){\n result.account = payable(address(data));\n result.value = uint96(data >> 160);\n }\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n struct DataV1 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV2 {\n bytes4 constant public V2 = bytes4(keccak256(\"V2\"));\n\n struct DataV2 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\n/// @dev deprecated\nlibrary LibOrderDataV3 {\n bytes4 constant public V3_SELL = bytes4(keccak256(\"V3_SELL\"));\n bytes4 constant public V3_BUY = bytes4(keccak256(\"V3_BUY\"));\n\n struct DataV3_SELL {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n uint maxFeesBasePoint;\n bytes32 marketplaceMarker;\n }\n\n struct DataV3_BUY {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n bytes32 marketplaceMarker;\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/OrderValidator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./libraries/LibOrder.sol\";\n\nimport \"@rarible/lib-signature/contracts/IERC1271.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\n\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\n using LibSignature for bytes32;\n using AddressUpgradeable for address;\n \n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function __OrderValidator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Exchange\", \"2\");\n }\n\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\n if (order.salt == 0) {\n if (order.maker != address(0)) {\n require(_msgSender() == order.maker, \"maker is not tx sender\");\n }\n } else {\n if (_msgSender() != order.maker) {\n bytes32 hash = LibOrder.hash(order);\n // if maker is contract checking ERC1271 signature\n if (order.maker.isContract()) {\n require(\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\n \"contract order signature verification error\"\n );\n } else {\n // if maker is not contract then checking ECDSA signature\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\n revert(\"order signature verification error\");\n } else {\n require (order.maker != address(0), \"no maker\");\n }\n }\n }\n }\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../../contracts/ExchangeV2.sol\";\n\ncontract RaribleTestHelper {\n function encode(LibOrderDataV1.DataV1 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV2(LibOrderDataV2.DataV2 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_SELL(LibOrderDataV3.DataV3_SELL memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_BUY(LibOrderDataV3.DataV3_BUY memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value)\n external\n pure\n returns (uint256)\n {\n return (uint256(value) << 160) + uint256(account);\n }\n\n function hashKey(LibOrder.Order calldata order)\n external\n pure\n returns (bytes32)\n {\n return LibOrder.hashKey(order);\n }\n\n function hashV2(\n address maker,\n LibAsset.Asset memory makeAsset,\n LibAsset.Asset memory takeAsset,\n uint256 salt,\n bytes memory data\n ) public pure returns (bytes32) {\n return\n keccak256(\n abi.encode(\n maker,\n LibAsset.hash(makeAsset.assetType),\n LibAsset.hash(takeAsset.assetType),\n salt,\n data\n )\n );\n }\n\n function encodeLazy721(LibERC721LazyMint.Mint721Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n function encodeLazy1155(LibERC1155LazyMint.Mint1155Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n}\n" - }, - "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n\ninterface IBlur {\n enum Side { Buy, Sell }\n enum SignatureVersion { Single, Bulk }\n enum AssetType { ERC721, ERC1155 }\n\n struct Fee {\n uint16 rate;\n address payable recipient;\n }\n \n struct Order {\n address trader;\n Side side;\n address matchingPolicy;\n address collection;\n uint256 tokenId;\n uint256 amount;\n address paymentToken;\n uint256 price;\n uint256 listingTime;\n /* Order expiration timestamp - 0 for oracle cancellations. */\n uint256 expirationTime;\n Fee[] fees;\n uint256 salt;\n bytes extraParams;\n }\n\n struct Input {\n Order order;\n uint8 v;\n bytes32 r;\n bytes32 s;\n bytes extraSignature;\n SignatureVersion signatureVersion;\n uint256 blockNumber;\n }\n\n function execute(Input calldata sell, Input calldata buy)\n external\n payable;\n}\n" - }, - "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\n\ninterface IExchangeV2 {\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable;\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable;\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../libraries/LibLooksRare.sol\";\n\ninterface ILooksRare {\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\n\n /**\n * @notice This function allows a user to execute a taker bid (against a maker ask).\n * @param takerBid Taker bid struct\n * @param makerAsk Maker ask struct\n * @param makerSignature Maker signature\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\n * @param affiliate Affiliate address\n */\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\n}\n" - }, - "@rarible/exchange-wrapper/contracts/interfaces/ILSSVMRouter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\ninterface ILSSVMRouter {\n struct PairSwapSpecific {\n address pair;\n uint256[] nftIds;\n }\n\n /**\n @notice Swaps ETH into specific NFTs using multiple pairs.\n @param swapList The list of pairs to trade with and the IDs of the NFTs to buy from each.\n @param ethRecipient The address that will receive the unspent ETH input\n @param nftRecipient The address that will receive the NFT output\n @param deadline The Unix timestamp (in seconds) at/after which the swap will revert\n @return remainingValue The unspent ETH amount\n */\n function swapETHForSpecificNFTs(\n PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n )\n external\n payable\n returns (uint256 remainingValue);\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"../libraries/LibSeaPort.sol\";\n\ninterface ISeaPort {\n function fulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder calldata advancedOrder,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n bytes32 fulfillerConduitKey,\n address recipient\n ) external payable returns (bool fulfilled);\n\n function fulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\n bytes32 fulfillerConduitKey,\n address recipient,\n uint256 maximumFulfilled\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\n\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\n external\n payable\n returns (bool fulfilled);\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface IWyvernExchange {\n function atomicMatch_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n\n enum Side {\n Buy,\n Sell\n }\n\n enum SaleKind {\n FixedPrice,\n DutchAuction\n }\n\n function calculateFinalPrice(\n Side side,\n SaleKind saleKind,\n uint256 basePrice,\n uint256 extra,\n uint256 listingTime,\n uint256 expirationTime\n ) external view returns (uint256);\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface Ix2y2 {\n\n struct OrderItem {\n uint256 price;\n bytes data;\n }\n\n struct Pair721 {\n address token;\n uint256 tokenId;\n }\n\n struct Pair1155 {\n address token;\n uint256 tokenId;\n uint256 amount;\n }\n\n struct Order {\n uint256 salt;\n address user;\n uint256 network;\n uint256 intent;\n uint256 delegateType;\n uint256 deadline;\n address currency;\n bytes dataMask;\n OrderItem[] items;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n uint8 signVersion;\n }\n\n struct Fee {\n uint256 percentage;\n address to;\n }\n\n struct SettleDetail {\n Op op;\n uint256 orderIdx;\n uint256 itemIdx;\n uint256 price;\n bytes32 itemHash;\n address executionDelegate;\n bytes dataReplacement;\n uint256 bidIncentivePct;\n uint256 aucMinIncrementPct;\n uint256 aucIncDurationSecs;\n Fee[] fees;\n }\n\n struct SettleShared {\n uint256 salt;\n uint256 deadline;\n uint256 amountToEth;\n uint256 amountToWeth;\n address user;\n bool canFail;\n }\n\n struct RunInput {\n Order[] orders;\n SettleDetail[] details;\n SettleShared shared;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n }\n\n enum Op {\n INVALID,\n // off-chain\n COMPLETE_SELL_OFFER,\n COMPLETE_BUY_OFFER,\n CANCEL_OFFER,\n // auction\n BID,\n COMPLETE_AUCTION,\n REFUND_AUCTION,\n REFUND_AUCTION_STUCK_ITEM\n }\n\n function run(RunInput memory input) external payable;\n}" - }, - "@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\nabstract contract IsPausable is Ownable {\n bool public paused;\n\n event Paused(bool paused);\n\n function pause(bool _paused) external onlyOwner {\n paused = _paused;\n emit Paused(_paused);\n }\n\n function requireNotPaused() internal view {\n require (!paused, \"the contract is paused\");\n }\n\n}\n" - }, - "@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibLooksRare {\n struct MakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address signer; // signer of the maker order\n address collection; // collection address\n uint256 price; // price (used as )\n uint256 tokenId; // id of the token\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\n address currency; // currency (e.g., WETH)\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\n uint256 startTime; // startTime in timestamp\n uint256 endTime; // endTime in timestamp\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // additional parameters\n uint8 v; // v: parameter (27 or 28)\n bytes32 r; // r: parameter\n bytes32 s; // s: parameter\n }\n\n struct TakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address taker; // msg.sender\n uint256 price; // final price for the purchase\n uint256 tokenId;\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // other params (e.g., tokenId)\n }\n\n /**\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\n */\n enum CollectionType {\n ERC721,\n ERC1155\n }\n\n /**\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\n */\n enum QuoteType {\n Bid,\n Ask\n }\n /**\n * 1. Maker struct\n */\n\n /**\n * @notice Maker is the struct for a maker order.\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\n * @param globalNonce Global user order nonce for maker orders\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\n * @param strategyId Strategy id\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\n * @param collection Collection address\n * @param currency Currency address (@dev address(0) = ETH)\n * @param signer Signer address\n * @param startTime Start timestamp\n * @param endTime End timestamp\n * @param price Minimum price for maker ask, maximum price for maker bid\n * @param itemIds Array of itemIds\n * @param amounts Array of amounts\n * @param additionalParameters Extra data specific for the order\n */\n struct Maker {\n QuoteType quoteType;\n uint256 globalNonce;\n uint256 subsetNonce;\n uint256 orderNonce;\n uint256 strategyId;\n CollectionType collectionType;\n address collection;\n address currency;\n address signer;\n uint256 startTime;\n uint256 endTime;\n uint256 price;\n uint256[] itemIds;\n uint256[] amounts;\n bytes additionalParameters;\n }\n\n /**\n * 2. Taker struct\n */\n\n /**\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\n * @param additionalParameters Extra data specific for the order\n */\n struct Taker {\n address recipient;\n bytes additionalParameters;\n }\n\n /**\n * 3. Merkle tree struct\n */\n\n enum MerkleTreeNodePosition {\n Left,\n Right\n }\n\n /**\n * @notice MerkleTreeNode is a MerkleTree's node.\n * @param value It can be an order hash or a proof\n * @param position The node's position in its branch.\n * It can be left or right or none\n * (before the tree is sorted).\n */\n struct MerkleTreeNode {\n bytes32 value;\n MerkleTreeNodePosition position;\n }\n\n /**\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\n * @dev A Merkle tree can be computed with order hashes.\n * It can contain order hashes from both maker bid and maker ask structs.\n * @param root Merkle root\n * @param proof Array containing the merkle proof\n */\n struct MerkleTree {\n bytes32 root;\n MerkleTreeNode[] proof;\n }\n}\n" - }, - "@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" - }, - "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,\n WyvernExchange,\n SeaPort_1_1,\n X2Y2,\n LooksRareOrders,\n SudoSwap,\n SeaPort_1_4,\n LooksRareV2,\n Blur,\n SeaPort_1_5\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[10] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" - }, - "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" - }, - "@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"./LibERC1155LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC1155LazyMint is IERC1155Upgradeable {\n\n event Supply(\n uint256 tokenId,\n uint256 value\n );\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC1155LazyMint.Mint1155Data memory data,\n address to,\n uint256 _amount\n ) external;\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) external;\n}\n" - }, - "@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC1155LazyMint {\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC1155_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\n\n struct Mint1155Data {\n uint tokenId;\n string tokenURI;\n uint supply;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n data.supply,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n}\n" - }, - "@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"./LibERC721LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC721LazyMint is IERC721Upgradeable {\n\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external;\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external;\n}\n" - }, - "@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC721LazyMint {\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC721_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\n\n struct Mint721Data {\n uint tokenId;\n string tokenURI;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n\n}\n" - }, - "@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/erc-721/IERC721LazyMint.sol\";\n\ncontract ERC721LazyMintTest is IERC721LazyMint, ERC721Upgradeable {\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external override {\n _mint(to, data.tokenId);\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external override {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n this.mintAndTransfer(data, to);\n }\n }\n\n function encode(LibERC721LazyMint.Mint721Data memory data)\n external\n view\n returns (bytes memory)\n {\n return abi.encode(address(this), data);\n }\n}\n" - }, - "@rarible/lib-asset/contracts/LibAsset.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibAsset {\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\"ETH\"));\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\"ERC20\"));\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\"ERC721\"));\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\"ERC1155\"));\n bytes4 constant public COLLECTION = bytes4(keccak256(\"COLLECTION\"));\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\"CRYPTO_PUNKS\"));\n\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\n \"AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes32 constant ASSET_TYPEHASH = keccak256(\n \"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n struct AssetType {\n bytes4 assetClass;\n bytes data;\n }\n\n struct Asset {\n AssetType assetType;\n uint value;\n }\n\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPE_TYPEHASH,\n assetType.assetClass,\n keccak256(assetType.data)\n ));\n }\n\n function hash(Asset memory asset) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPEHASH,\n hash(asset.assetType),\n asset.value\n ));\n }\n\n}\n" - }, - "@rarible/lib-bp/contracts/BpLibrary.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary BpLibrary {\n using SafeMathUpgradeable for uint;\n\n function bp(uint value, uint bpValue) internal pure returns (uint) {\n return value.mul(bpValue).div(10000);\n }\n}\n" - }, - "@rarible/lib-part/contracts/LibPart.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibPart {\n bytes32 public constant TYPE_HASH = keccak256(\"Part(address account,uint96 value)\");\n\n struct Part {\n address payable account;\n uint96 value;\n }\n\n function hash(Part memory part) internal pure returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\n }\n}\n" - }, - "@rarible/lib-signature/contracts/ERC1271.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nabstract contract ERC1271 {\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\n\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\n\n /**\n * @dev Function must be implemented by deriving contract\n * @param _hash Arbitrary length data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\n *\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\n\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\n }\n}" - }, - "@rarible/lib-signature/contracts/IERC1271.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ninterface IERC1271 {\n\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param _hash Hash of the data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n *\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\n}" - }, - "@rarible/lib-signature/contracts/LibSignature.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nlibrary LibSignature {\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature)\n internal\n pure\n returns (address)\n {\n // Check the signature length\n if (signature.length != 65) {\n revert(\"ECDSA: invalid signature length\");\n }\n\n // Divide the signature in r, s and v variables\n bytes32 r;\n bytes32 s;\n uint8 v;\n\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n // solhint-disable-next-line no-inline-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n\n return recover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n require(\n uint256(s) <=\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\n \"ECDSA: invalid signature 's' value\"\n );\n\n // If the signature is valid (and not malleable), return the signer address\n // v > 30 is a special case, we need to adjust hash with \"\\x19Ethereum Signed Message:\\n32\"\n // and v = v - 4\n address signer;\n if (v > 30) {\n require(\n v - 4 == 27 || v - 4 == 28,\n \"ECDSA: invalid signature 'v' value\"\n );\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\n } else {\n require(v == 27 || v == 28, \"ECDSA: invalid signature 'v' value\");\n signer = ecrecover(hash, v, r, s);\n }\n\n require(signer != address(0), \"ECDSA: invalid signature\");\n\n return signer;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * replicates the behavior of the\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n * JSON-RPC method.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash)\n internal\n pure\n returns (bytes32)\n {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return\n keccak256(\n abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash)\n );\n }\n}\n" - }, - "@rarible/meta-tx/contracts/EIP712MetaTransaction.sol": { - "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" - }, - "@rarible/role-operator/contracts/OperatorRole.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocksV2.sol\";\n\ncontract RoyaltiesProviderArtBlocksV2 is IRoyaltiesProvider {\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n RoyaltyArtBlocksV2 artBlocksV2 = RoyaltyArtBlocksV2(token);\n\n (address payable[] memory recipients, uint256[] memory bps) = artBlocksV2.getRoyalties(tokenId);\n \n uint256 len = recipients.length;\n\n LibPart.Part[] memory result = new LibPart.Part[](len);\n \n for (uint i = 0; i < len; i++) {\n result[i].account = recipients[i];\n result[i].value = uint96(bps[i]);\n }\n\n return result;\n }\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyV2Legacy.sol\";\n\ncontract RoyaltiesProviderV2Legacy is IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n return RoyaltyV2Legacy(token).getRoyalties(tokenId);\n }\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocks.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocks {\n \n function getRoyaltyData(uint256 _tokenId) external virtual view returns (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID);\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocksV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocksV2 {\n \n /**\n * @notice Gets royalty Basis Points (BPS) for token ID `_tokenId`.\n * This conforms to the IManifold interface designated in the Royalty\n * Registry's RoyaltyEngineV1.sol contract.\n * ref: https://github.com/manifoldxyz/royalty-registry-solidity\n * @param _tokenId Token ID to be queried.\n * @return recipients Array of royalty payment recipients\n * @return bps Array of Basis Points (BPS) allocated to each recipient,\n * aligned by index.\n * @dev reverts if invalid _tokenId\n * @dev only returns recipients that have a non-zero BPS allocation\n */\n function getRoyalties(uint256 _tokenId) \n external \n view\n virtual\n returns (\n address payable[] memory recipients, \n uint256[] memory bps\n );\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltyV2Legacy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" - }, - "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" - }, - "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" - }, - "@rarible/royalties/contracts/IERC2981.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n///\n/// @dev Interface for the NFT Royalty Standard\n///\n//interface IERC2981 is IERC165 {\ninterface IERC2981 {\n /// ERC165 bytes to add to interface array - set in parent contract\n /// implementing this standard\n ///\n /// bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n /// _registerInterface(_INTERFACE_ID_ERC2981);\n\n /// @notice Called with the sale price to determine how much royalty\n // is owed and to whom.\n /// @param _tokenId - the NFT asset queried for royalty information\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\n /// @return receiver - address of who should be sent the royalty payment\n /// @return royaltyAmount - the royalty payment amount for _salePrice\n function royaltyInfo(\n uint256 _tokenId,\n uint256 _salePrice\n ) external view returns (\n address receiver,\n uint256 royaltyAmount\n );\n}" - }, - "@rarible/royalties/contracts/impl/AbstractRoyalties.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract AbstractRoyalties {\n mapping (uint256 => LibPart.Part[]) internal royalties;\n\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\n uint256 totalValue;\n for (uint i = 0; i < _royalties.length; ++i) {\n require(_royalties[i].account != address(0x0), \"Recipient should be present\");\n require(_royalties[i].value != 0, \"Royalty value should be positive\");\n totalValue += _royalties[i].value;\n royalties[id].push(_royalties[i]);\n }\n require(totalValue < 10000, \"Royalty total value should be < 10000\");\n _onRoyaltiesSet(id, _royalties);\n }\n\n function _updateAccount(uint256 _id, address _from, address _to) internal {\n uint length = royalties[_id].length;\n for(uint i = 0; i < length; ++i) {\n if (royalties[_id][i].account == _from) {\n royalties[_id][i].account = payable(address(uint160(_to)));\n }\n }\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\n}\n" - }, - "@rarible/royalties/contracts/impl/RoyaltiesV1Impl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV1.sol\";\n\ncontract RoyaltiesV1Impl is AbstractRoyalties, RoyaltiesV1 {\n\n function getFeeRecipients(uint256 id) public override view returns (address payable[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n address payable[] memory result = new address payable[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = address(uint160(_royalties[i].account));\n }\n return result;\n }\n\n function getFeeBps(uint256 id) public override view returns (uint[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n uint[] memory result = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = _royalties[i].value;\n }\n return result;\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n address[] memory recipients = new address[](_royalties.length);\n uint[] memory bps = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n recipients[i] = _royalties[i].account;\n bps[i] = _royalties[i].value;\n }\n emit SecondarySaleFees(id, recipients, bps);\n }\n}\n" - }, - "@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV2.sol\";\nimport \"../IERC2981.sol\";\nimport \"../LibRoyalties2981.sol\";\n\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\n\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\n return royalties[id];\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n emit RoyaltiesSet(id, _royalties);\n }\n\n /*\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\n */\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\n if (royalties[id].length == 0) {\n receiver = address(0);\n royaltyAmount = 0;\n return(receiver, royaltyAmount);\n }\n LibPart.Part[] memory _royalties = royalties[id];\n receiver = _royalties[0].account;\n uint percent;\n for (uint i = 0; i < _royalties.length; ++i) {\n percent += _royalties[i].value;\n }\n //don`t need require(percent < 10000, \"Token royalty > 100%\"); here, because check later in calculateRoyalties\n royaltyAmount = percent * _salePrice / 10000;\n }\n}\n" - }, - "@rarible/royalties/contracts/LibRoyalties2981.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibRoyalties2981 {\n /*\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\n uint96 constant _WEIGHT_VALUE = 1000000;\n\n /*Method for converting amount to percent and forming LibPart*/\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\n LibPart.Part[] memory result;\n if (amount == 0) {\n return result;\n }\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\n require(percent < 10000, \"Royalties 2981 exceeds 100%\");\n result = new LibPart.Part[](1);\n result[0].account = payable(to);\n result[0].value = uint96(percent);\n return result;\n }\n}\n" - }, - "@rarible/royalties/contracts/LibRoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV1 {\n /*\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\n *\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\n */\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\n}\n" - }, - "@rarible/royalties/contracts/LibRoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV2 {\n /*\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\n}\n" - }, - "@rarible/royalties/contracts/RoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\ninterface RoyaltiesV1 {\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\n\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\n function getFeeBps(uint256 id) external view returns (uint[] memory);\n}\n" - }, - "@rarible/royalties/contracts/RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltiesV2 {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" - }, - "@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC1155RoyaltiesV2 is RoyaltiesV2Impl, ERC1155Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, uint amount, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId, amount, \"\");\n _saveRoyalties(tokenId, _fees);\n }\n}\n" - }, - "@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV1Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV1.sol\";\n\ncontract TestERC721RoyaltiesV1 is RoyaltiesV1Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV1._INTERFACE_ID_FEES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" - }, - "@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC721RoyaltiesV2 is RoyaltiesV2Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" - }, - "@rarible/test/contracts/TestERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\n\ncontract TestERC1155 is ERC1155, Pausable {\n constructor() ERC1155(\"uri\"){\n\n }\n\n function mint(address to, uint tokenId, uint amount) external {\n _mint(to, tokenId, amount, \"\");\n }\n\n function batchSafeTransferFrom(\n address[] memory froms,\n address[] memory tos,\n uint256[] memory ids,\n uint256[] memory amounts\n ) external {\n require(froms.length == tos.length, \"wrong length 1\");\n require(tos.length == ids.length, \"wrong length 2\");\n require(ids.length == amounts.length, \"wrong length 3\");\n\n for (uint i = 0; i < froms.length; i ++) {\n safeTransferFrom(froms[i], tos[i], ids[i], amounts[i], \"\");\n }\n }\n\n function emitPauseEvent(bool paused) external {\n if (paused) {\n emit Paused(address(0));\n } else {\n emit Unpaused(address(0));\n }\n }\n}\n" - }, - "@rarible/test/contracts/TestERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\n\ncontract TestERC20 is ERC20Upgradeable {\n function mint(address to, uint amount) external {\n _mint(to, amount);\n }\n\n function init() external {\n __ERC20_init(\"TestERC20\", \"TE20\");\n }\n}\n" - }, - "@rarible/test/contracts/TestERC721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\n\ncontract TestERC721 is ERC721Upgradeable {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" - }, - "@rarible/tokens/contracts/access/MinterAccessControl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" - }, - "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n\n uint256[50] private __gap;\n}" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\n\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\n using StringsUpgradeable for uint256;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _clearMetadata(uint256 tokenId) internal override virtual {\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n uint256[50] private __gap;\n}" - }, - "@rarible/tokens/contracts/erc-721/ERC721Base.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeable.sol\";\nimport \"./ERC721DefaultApproval.sol\";\nimport \"./ERC721Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721Base is OwnableUpgradeable, ERC721DefaultApproval, ERC721BurnableUpgradeable, ERC721Lazy, HasContractURI {\n\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721Upgradeable, ERC721DefaultApproval) view returns (bool) {\n return ERC721DefaultApproval._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApproval, ERC721Upgradeable, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApproval.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721Lazy) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function _mint(address to, uint256 tokenId) internal override(ERC721Lazy, ERC721Upgradeable) {\n super._mint(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721BurnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721Upgradeable.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeable is Initializable, ContextUpgradeable, ERC721Upgradeable {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721DefaultApproval.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721Upgradeable.sol\";\n\nabstract contract ERC721DefaultApproval is ERC721Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721Lazy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\n\nabstract contract ERC721Lazy is IERC721LazyMint, ERC721Upgradeable, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _mint(address to, uint256 tokenId) internal virtual override {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burned(tokenId), \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721Rarible.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Base.sol\";\n\ncontract ERC721Rarible is ERC721Base {\n\n event CreateERC721Rarible(address owner, string name, string symbol);\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external initializer {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/HasContractURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/IsPrivateCollection.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" - }, - "@rarible/tokens/contracts/LibURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibURI {\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\n function checkPrefix(string memory base, string memory _tokenURI)\n internal\n pure\n returns (string memory)\n {\n bytes memory whatBytes = bytes(base);\n bytes memory whereBytes = bytes(_tokenURI);\n\n if (whatBytes.length > whereBytes.length) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n\n for (uint256 j = 0; j < whatBytes.length; j++) {\n if (whereBytes[j] != whatBytes[j]) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n }\n\n return _tokenURI;\n }\n}\n" - }, - "@rarible/tokens/contracts/Mint721Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\n\ncontract Mint721Validator is ERC1271Validator {\n function __Mint721Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint721\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nabstract contract ITransferExecutor {\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal virtual;\n}\n" - }, - "@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../lib/LibDeal.sol\";\nimport \"./ITransferExecutor.sol\";\n\nabstract contract ITransferManager is ITransferExecutor {\n\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\n}" - }, - "@rarible/transfer-manager/contracts/lib/LibDeal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\nimport \"./LibFeeSide.sol\";\n\nlibrary LibDeal {\n struct DealSide {\n LibAsset.Asset asset;\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n address proxy;\n address from;\n }\n}\n" - }, - "@rarible/transfer-manager/contracts/lib/LibFeeSide.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibFeeSide {\n\n enum FeeSide {NONE, LEFT, RIGHT}\n\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n return FeeSide.NONE;\n }\n}\n" - }, - "@rarible/transfer-manager/contracts/lib/LibTransfer.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibTransfer {\n function transferEth(address to, uint value) internal {\n (bool success,) = to.call{ value: value }(\"\");\n require(success, \"transfer failed\");\n }\n}\n" - }, - "@rarible/transfer-manager/contracts/RaribleTransferManager.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n ProtocolFeeData memory _protocolFee,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param _protocolFee protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n ProtocolFeeData memory _protocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = _protocolFee.buyerAmount;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" - }, - "@rarible/transfer-manager/contracts/TransferExecutor.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" - }, - "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract PunkTransferProxy is OperatorRole, ITransferProxy {\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, uint punkIndex) = abi.decode(asset.assetType.data, (address, uint));\n ICryptoPunksMarket punkToken = ICryptoPunksMarket(token);\n //check punk from real owner\n require(punkToken.punkIndexToAddress(punkIndex) == from, \"Seller not punk owner\");\n //buy punk to proxy, now proxy is owner\n punkToken.buyPunk(punkIndex);\n //Transfer ownership of a punk to buyer\n punkToken.transferPunk(to, punkIndex);\n }\n}" - }, - "src/AssetMatchersImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { AssetMatcherCollection } from \"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\";\n" - }, - "src/Auction.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {AuctionHouse1155} from \"@rarible/auction/contracts/1155/AuctionHouse1155.sol\";\nimport {AuctionHouse721} from \"@rarible/auction/contracts/721/AuctionHouse721.sol\";\nimport {Wrapper} from \"@rarible/auction/contracts/wrapper/Wrapper.sol\";" - }, - "src/ExchangeV2Import.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ExchangeV2} from \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {ExchangeMetaV2} from \"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\";" - }, - "src/ExchangeWrapperImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" - }, - "src/RaribleExchangeWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {RaribleExchangeWrapper} from \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" - }, - "src/RoyaltiesRegistryImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {RoyaltiesProviderV2Legacy} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol\";\nimport {RoyaltiesProviderArtBlocks} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol\";\nimport {RoyaltiesProviderArtBlocksV2} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol\";\n" - }, - "src/TokensImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\n//tokens 721\nimport {ERC721Rarible} from \"@rarible/tokens/contracts/erc-721/ERC721Rarible.sol\";\nimport {ERC721RaribleMinimal} from \"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport {ERC721RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\";\n\n//tokens 1155\nimport {ERC1155Rarible} from \"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\";\nimport {ERC1155RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\";\n\n//meta tokens\nimport {ERC721RaribleMeta} from \"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\";\nimport {ERC1155RaribleMeta} from \"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\";\n\n//beacons\nimport {ERC1155RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\";\nimport {ERC721RaribleMinimalBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\";\nimport {ERC721RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol\";\nimport {ERC1155RaribleBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\";\nimport {ERC721RaribleMinimalBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\";\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" - }, - "src/TransferProxiesImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ERC721LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\";\nimport {ERC1155LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\nimport {PunkTransferProxy} from \"@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol\";\n" - }, - "test/contracts/ERC721LazyMintTest.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol\";\n" - }, - "test/contracts/RaribleTestHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" - }, - "test/contracts/TestERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155 } from \"@rarible/test/contracts/TestERC1155.sol\";\n\n" - }, - "test/contracts/TestERC1155RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol\";\n\n" - }, - "test/contracts/TestERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" - }, - "test/contracts/TestERC721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721 } from \"@rarible/test/contracts/TestERC721.sol\";\n" - }, - "test/contracts/TestERC721RoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV1 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol\";\n" - }, - "test/contracts/TestERC721RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol\";\n\n" - }, - "test/contracts/WrapperHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport { WrapperHelper } from \"@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol\";" - }, - "test/exchange/contracts/RaribleTestHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" - } - }, - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sepolia/solcInputs/18cf8d0003f91de2c6ccf5af55330880.json b/projects/hardhat-deploy/deployments/sepolia/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json similarity index 89% rename from projects/hardhat-deploy/deployments/sepolia/solcInputs/18cf8d0003f91de2c6ccf5af55330880.json rename to projects/hardhat-deploy/deployments/sepolia/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json index de612632f..cd67d7888 100644 --- a/projects/hardhat-deploy/deployments/sepolia/solcInputs/18cf8d0003f91de2c6ccf5af55330880.json +++ b/projects/hardhat-deploy/deployments/sepolia/solcInputs/25cec8d3d0ea4b0d6c3f88e02b714495.json @@ -200,13 +200,13 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" }, "@rarible/exchange-v2/contracts/AssetMatcher.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function _setAssetMatcher(bytes4 assetType, address matcher) internal {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" }, "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function __ExchangeV2_init_proxy(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _initialOwner,\n bytes4[] memory assetTypes, \n address[] memory proxies,\n bytes4 assetMatcherType,\n address assetMatcher\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n for (uint i = 0; i < assetTypes.length; i++) {\n _setTransferProxy(assetTypes[i], proxies[i]);\n }\n _setAssetMatcher(assetMatcherType, assetMatcher);\n transferOwnership(_initialOwner);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" }, "@rarible/exchange-v2/contracts/ExchangeV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n function __ExchangeV2_init_proxy(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _initialOwner,\n bytes4[] memory assetTypes, \n address[] memory proxies,\n bytes4 assetMatcherType,\n address assetMatcher\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n for (uint i = 0; i < assetTypes.length; i++) {\n _setTransferProxy(assetTypes[i], proxies[i]);\n }\n _setAssetMatcher(assetMatcherType, assetMatcher);\n transferOwnership(_initialOwner);\n }\n}\n" }, "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n if (orderLeft.makeAsset.value != 0 || orderRight.takeAsset.value != 0) {\n require(newFill.leftValue > 0, \"nothing to fill\");\n }\n if (orderLeft.takeAsset.value != 0 || orderRight.makeAsset.value != 0) {\n require(newFill.rightValue > 0, \"nothing to fill\");\n }\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" @@ -215,7 +215,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibDirectTransfer { //LibDirectTransfers\n /*All buy parameters need for create buyOrder and sellOrder*/\n struct Purchase {\n address sellOrderMaker; //\n uint256 sellOrderNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 sellOrderPaymentAmount;\n address paymentToken;\n uint256 sellOrderSalt;\n uint sellOrderStart;\n uint sellOrderEnd;\n bytes4 sellOrderDataType;\n bytes sellOrderData;\n bytes sellOrderSignature;\n\n uint256 buyOrderPaymentAmount;\n uint256 buyOrderNftAmount;\n bytes buyOrderData;\n }\n\n /*All accept bid parameters need for create buyOrder and sellOrder*/\n struct AcceptBid {\n address bidMaker; //\n uint256 bidNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 bidPaymentAmount;\n address paymentToken;\n uint256 bidSalt;\n uint bidStart;\n uint bidEnd;\n bytes4 bidDataType;\n bytes bidData;\n bytes bidSignature;\n\n uint256 sellOrderPaymentAmount;\n uint256 sellOrderNftAmount;\n bytes sellOrderData;\n }\n}\n" }, "@rarible/exchange-v2/contracts/libraries/LibFill.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n * @return tuple representing fill of both assets\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue || (rightTakeValue == rightTakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n * @return tuple representing fill of both assets\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue || (rightTakeValue == leftMakeValue && leftMakeValue == 0)) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" }, "@rarible/exchange-v2/contracts/libraries/LibMath.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary LibMath {\n using SafeMathUpgradeable for uint;\n\n /// @dev Calculates partial value given a numerator and denominator rounded down.\n /// Reverts if rounding error is >= 0.1%\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return partialAmount value of target rounded down.\n function safeGetPartialAmountFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorFloor(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding down.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // The absolute rounding error is the difference between the rounded\n // value and the ideal value. The relative rounding error is the\n // absolute rounding error divided by the absolute value of the\n // ideal value. This is undefined when the ideal value is zero.\n //\n // The ideal value is `numerator * target / denominator`.\n // Let's call `numerator * target % denominator` the remainder.\n // The absolute error is `remainder / denominator`.\n //\n // When the ideal value is zero, we require the absolute error to\n // be zero. Fortunately, this is always the case. The ideal value is\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\n // remainder and absolute error are also zero.\n if (target == 0 || numerator == 0) {\n return false;\n }\n\n // Otherwise, we want the relative rounding error to be strictly\n // less than 0.1%.\n // The relative error is `remainder / (numerator * target)`.\n // We want the relative error less than 1 / 1000:\n // remainder / (numerator * target) < 1 / 1000\n // or equivalently:\n // 1000 * remainder < numerator * target\n // so we have a rounding error iff:\n // 1000 * remainder >= numerator * target\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n isError = remainder.mul(1000) >= numerator.mul(target);\n }\n\n function safeGetPartialAmountCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorCeil(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding up.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // See the comments in `isRoundingError`.\n if (target == 0 || numerator == 0) {\n // When either is zero, the ideal value and rounded value are zero\n // and there is no rounding error. (Although the relative error\n // is undefined.)\n return false;\n }\n // Compute remainder as before\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n remainder = denominator.sub(remainder) % denominator;\n isError = remainder.mul(1000) >= numerator.mul(target);\n return isError;\n }\n}\n" @@ -272,7 +272,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" }, "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,\n WyvernExchange,\n SeaPort_1_1,\n X2Y2,\n LooksRareOrders,\n SudoSwap,\n SeaPort_1_4,\n LooksRareV2,\n Blur,\n SeaPort_1_5\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[10] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n address public immutable seaPort_1_6;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,//0\n WyvernExchange,//1\n SeaPort_1_1,//2\n X2Y2,//3\n LooksRareOrders,//4\n SudoSwap,//5\n SeaPort_1_4,//6\n LooksRareV2,//7\n Blur,//8\n SeaPort_1_5,//9\n SeaPort_1_6//10\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[11] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n //address _seaPort_1_6, 10\n address _weth,\n address[] memory transferProxies,\n address initialOwner\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n seaPort_1_6 = marketplaces[10];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n transferOwnership(initialOwner);\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6){\n (bool success,) = address(seaPort_1_6).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" }, "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" @@ -314,7 +314,7 @@ "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" }, "@rarible/role-operator/contracts/OperatorRole.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __OperatorRole_init_proxy(address initialOwner) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n transferOwnership(initialOwner);\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" }, "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" @@ -335,7 +335,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" }, "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n function __RoyaltiesRegistry_init_proxy(address _initialOwner) external initializer {\n __Ownable_init_unchained();\n transferOwnership(_initialOwner);\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" }, "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" @@ -386,31 +386,31 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\n\ncontract TestERC721 is ERC721Upgradeable {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" }, "@rarible/tokens/contracts/access/MinterAccessControl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl, address initialOwner) UpgradeableBeacon(impl) {\n transferOwnership(initialOwner);\n }\n}\n" }, "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n transferOwnership(initialOwner);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" }, "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n transferOwnership(initialOwner);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" }, "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" @@ -419,7 +419,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" @@ -428,19 +428,19 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC1155Rarible(initialOwner, _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" }, "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" @@ -455,7 +455,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n\n transferOwnership(initialOwner);\n\n emit CreateERC721Rarible(initialOwner, _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" }, "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" @@ -482,7 +482,7 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" }, "@rarible/tokens/contracts/HasContractURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" }, "@rarible/tokens/contracts/IsPrivateCollection.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" @@ -512,19 +512,19 @@ "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n ProtocolFeeData memory _protocolFee,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param _protocolFee protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n ProtocolFeeData memory _protocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = _protocolFee.buyerAmount;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" }, "@rarible/transfer-manager/contracts/TransferExecutor.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function _setTransferProxy(bytes4 assetType, address proxy) internal {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" }, "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n\n function __ERC1155LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n transferOwnership(_initialOwner);\n }\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" }, "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n\n function __ERC721LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n transferOwnership(_initialOwner);\n }\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" }, "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function __ERC20TransferProxy_init_proxy(address _initialOwner) external initializer {\n __Ownable_init();\n transferOwnership(_initialOwner);\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" }, "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function __TransferProxy_init_proxy(address _initialOwner) external initializer {\n __Ownable_init();\n transferOwnership(_initialOwner);\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" }, "@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol": { "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract PunkTransferProxy is OperatorRole, ITransferProxy {\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, uint punkIndex) = abi.decode(asset.assetType.data, (address, uint));\n ICryptoPunksMarket punkToken = ICryptoPunksMarket(token);\n //check punk from real owner\n require(punkToken.punkIndexToAddress(punkIndex) == from, \"Seller not punk owner\");\n //buy punk to proxy, now proxy is owner\n punkToken.buyPunk(punkIndex);\n //Transfer ownership of a punk to buyer\n punkToken.transferPunk(to, punkIndex);\n }\n}" diff --git a/projects/hardhat-deploy/deployments/sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/hardhat-deploy/deployments/sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/hardhat-deploy/deployments/sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sepolia/solcInputs/be0df2e5fbec697d62e922ee14115fa5.json b/projects/hardhat-deploy/deployments/sepolia/solcInputs/be0df2e5fbec697d62e922ee14115fa5.json deleted file mode 100644 index 58433da0f..000000000 --- a/projects/hardhat-deploy/deployments/sepolia/solcInputs/be0df2e5fbec697d62e922ee14115fa5.json +++ /dev/null @@ -1,617 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal initializer {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n uint256[49] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712Upgradeable is Initializable {\n /* solhint-disable var-name-mixedcase */\n bytes32 private _HASHED_NAME;\n bytes32 private _HASHED_VERSION;\n bytes32 private constant _TYPE_HASH = keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n function __EIP712_init(string memory name, string memory version) internal initializer {\n __EIP712_init_unchained(name, version);\n }\n\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\n }\n\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\n return keccak256(\n abi.encode(\n typeHash,\n name,\n version,\n _getChainId(),\n address(this)\n )\n );\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n }\n\n function _getChainId() private view returns (uint256 chainId) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n\n /**\n * @dev The hash of the name parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712NameHash() internal virtual view returns (bytes32) {\n return _HASHED_NAME;\n }\n\n /**\n * @dev The hash of the version parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\n return _HASHED_VERSION;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165Upgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n function __ERC165_init() internal initializer {\n __ERC165_init_unchained();\n }\n\n function __ERC165_init_unchained() internal initializer {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n uint256[49] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165Upgradeable {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\n// solhint-disable-next-line compiler-version\npragma solidity >=0.4.24 <0.8.0;\n\nimport \"../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n */\nabstract contract Initializable {\n\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(_initializing || _isConstructor() || !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /// @dev Returns true if and only if the function is running in the constructor\n function _isConstructor() private view returns (bool) {\n return !AddressUpgradeable.isContract(address(this));\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155HolderUpgradeable is Initializable, ERC1155ReceiverUpgradeable {\n function __ERC1155Holder_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ERC1155Holder_init_unchained();\n }\n\n function __ERC1155Holder_init_unchained() internal initializer {\n }\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\n function __ERC1155Receiver_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n }\n\n function __ERC1155Receiver_init_unchained() internal initializer {\n _registerInterface(\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\n );\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\nimport \"./IERC1155MetadataURIUpgradeable.sol\";\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC20Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable {\n using SafeMathUpgradeable for uint256;\n\n mapping (address => uint256) private _balances;\n\n mapping (address => mapping (address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n * a default value of 18.\n *\n * To select a different value for {decimals}, use {_setupDecimals}.\n *\n * All three of these values are immutable: they can only be set once during\n * construction.\n */\n function __ERC20_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC20_init_unchained(name_, symbol_);\n }\n\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n _decimals = 18;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n * called.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return _decimals;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * Requirements:\n *\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n * - the caller must have allowance for ``sender``'s tokens of at least\n * `amount`.\n */\n function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n /**\n * @dev Moves tokens `amount` from `sender` to `recipient`.\n *\n * This is internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: mint to the zero address\");\n\n _beforeTokenTransfer(address(0), account, amount);\n\n _totalSupply = _totalSupply.add(amount);\n _balances[account] = _balances[account].add(amount);\n emit Transfer(address(0), account, amount);\n }\n\n /**\n * @dev Destroys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: burn from the zero address\");\n\n _beforeTokenTransfer(account, address(0), amount);\n\n _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n _totalSupply = _totalSupply.sub(amount);\n emit Transfer(account, address(0), amount);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(address owner, address spender, uint256 amount) internal virtual {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Sets {decimals} to a value other than the default one of 18.\n *\n * WARNING: This function should only be called from the constructor. Most\n * applications that interact with token contracts will not expect\n * {decimals} to ever change, and may work incorrectly if it does.\n */\n function _setupDecimals(uint8 decimals_) internal virtual {\n _decimals = decimals_;\n }\n\n /**\n * @dev Hook that is called before any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * will be to transferred to `to`.\n * - when `from` is zero, `amount` tokens will be minted for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n uint256[44] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20Upgradeable {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721HolderUpgradeable is Initializable, IERC721ReceiverUpgradeable {\n function __ERC721Holder_init() internal initializer {\n __ERC721Holder_init_unchained();\n }\n\n function __ERC721Holder_init_unchained() internal initializer {\n }\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC721Upgradeable.sol\";\nimport \"./IERC721MetadataUpgradeable.sol\";\nimport \"./IERC721EnumerableUpgradeable.sol\";\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../utils/EnumerableSetUpgradeable.sol\";\nimport \"../../utils/EnumerableMapUpgradeable.sol\";\nimport \"../../utils/StringsUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) private _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap private _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits an {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[41] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721EnumerableUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the total amount of tokens stored by the contract.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);\n\n /**\n * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n * Use along with {totalSupply} to enumerate all tokens.\n */\n function tokenByIndex(uint256 index) external view returns (uint256);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721ReceiverUpgradeable {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the caller.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool _approved) external;\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal initializer {\n __Context_init_unchained();\n }\n\n function __Context_init_unchained() internal initializer {\n }\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing an enumerable variant of Solidity's\n * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]\n * type.\n *\n * Maps have the following properties:\n *\n * - Entries are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Entries are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableMap for EnumerableMap.UintToAddressMap;\n *\n * // Declare a set state variable\n * EnumerableMap.UintToAddressMap private myMap;\n * }\n * ```\n *\n * As of v3.0.0, only maps of type `uint256 -> address` (`UintToAddressMap`) are\n * supported.\n */\nlibrary EnumerableMapUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Map type with\n // bytes32 keys and values.\n // The Map implementation uses private functions, and user-facing\n // implementations (such as Uint256ToAddressMap) are just wrappers around\n // the underlying Map.\n // This means that we can only create new EnumerableMaps for types that fit\n // in bytes32.\n\n struct MapEntry {\n bytes32 _key;\n bytes32 _value;\n }\n\n struct Map {\n // Storage of map keys and values\n MapEntry[] _entries;\n\n // Position of the entry defined by a key in the `entries` array, plus 1\n // because index 0 means a key is not in the map.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex == 0) { // Equivalent to !contains(map, key)\n map._entries.push(MapEntry({ _key: key, _value: value }));\n // The entry is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n map._indexes[key] = map._entries.length;\n return true;\n } else {\n map._entries[keyIndex - 1]._value = value;\n return false;\n }\n }\n\n /**\n * @dev Removes a key-value pair from a map. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function _remove(Map storage map, bytes32 key) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex != 0) { // Equivalent to contains(map, key)\n // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one\n // in the array, and then remove the last entry (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = keyIndex - 1;\n uint256 lastIndex = map._entries.length - 1;\n\n // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n MapEntry storage lastEntry = map._entries[lastIndex];\n\n // Move the last entry to the index where the entry to delete is\n map._entries[toDeleteIndex] = lastEntry;\n // Update the index for the moved entry\n map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved entry was stored\n map._entries.pop();\n\n // Delete the index for the deleted slot\n delete map._indexes[key];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function _contains(Map storage map, bytes32 key) private view returns (bool) {\n return map._indexes[key] != 0;\n }\n\n /**\n * @dev Returns the number of key-value pairs in the map. O(1).\n */\n function _length(Map storage map) private view returns (uint256) {\n return map._entries.length;\n }\n\n /**\n * @dev Returns the key-value pair stored at position `index` in the map. O(1).\n *\n * Note that there are no guarantees on the ordering of entries inside the\n * array, and it may change when more entries are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {\n require(map._entries.length > index, \"EnumerableMap: index out of bounds\");\n\n MapEntry storage entry = map._entries[index];\n return (entry._key, entry._value);\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n */\n function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {\n uint256 keyIndex = map._indexes[key];\n if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)\n return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function _get(Map storage map, bytes32 key) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, \"EnumerableMap: nonexistent key\"); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n /**\n * @dev Same as {_get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {_tryGet}.\n */\n function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n // UintToAddressMap\n\n struct UintToAddressMap {\n Map _inner;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {\n return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {\n return _remove(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {\n return _contains(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns the number of elements in the map. O(1).\n */\n function length(UintToAddressMap storage map) internal view returns (uint256) {\n return _length(map._inner);\n }\n\n /**\n * @dev Returns the element stored at position `index` in the set. O(1).\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {\n (bytes32 key, bytes32 value) = _at(map._inner, index);\n return (uint256(key), address(uint160(uint256(value))));\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n *\n * _Available since v3.4._\n */\n function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {\n (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));\n return (success, address(uint160(uint256(value))));\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key)))));\n }\n\n /**\n * @dev Same as {get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryGet}.\n */\n function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n */\nlibrary EnumerableSetUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) { // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n bytes32 lastvalue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastvalue;\n // Update the index for the moved value\n set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n require(set._values.length > index, \"EnumerableSet: index out of bounds\");\n return set._values[index];\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuardUpgradeable is Initializable {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n function __ReentrancyGuard_init() internal initializer {\n __ReentrancyGuard_init_unchained();\n }\n\n function __ReentrancyGuard_init_unchained() internal initializer {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n // On the first call to nonReentrant, _notEntered will be true\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n uint256[49] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary StringsUpgradeable {\n /**\n * @dev Converts a `uint256` to its ASCII `string` representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n uint256 index = digits - 1;\n temp = value;\n while (temp != 0) {\n buffer[index--] = bytes1(uint8(48 + temp % 10));\n temp /= 10;\n }\n return string(buffer);\n }\n}\n" - }, - "@openzeppelin/contracts/access/Ownable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" - }, - "@openzeppelin/contracts/introspection/ERC165.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165 is IERC165 {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n constructor () internal {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" - }, - "@openzeppelin/contracts/introspection/IERC165.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" - }, - "@openzeppelin/contracts/math/SafeMath.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/BeaconProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\nimport \"./IBeacon.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy {\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) public payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _setBeacon(beacon, data);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address beacon) {\n bytes32 slot = _BEACON_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n beacon := sload(slot)\n }\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_beacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n require(\n Address.isContract(beacon),\n \"BeaconProxy: beacon is not a contract\"\n );\n require(\n Address.isContract(IBeacon(beacon).implementation()),\n \"BeaconProxy: beacon implementation is not a contract\"\n );\n bytes32 slot = _BEACON_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, beacon)\n }\n\n if (data.length > 0) {\n Address.functionDelegateCall(_implementation(), data, \"BeaconProxy: function call failed\");\n }\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/IBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" - }, - "@openzeppelin/contracts/proxy/Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/ProxyAdmin.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../access/Ownable.sol\";\nimport \"./TransparentUpgradeableProxy.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(TransparentUpgradeableProxy proxy, address implementation, bytes memory data) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./UpgradeableProxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\n */\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _setAdmin(admin_);\n }\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _admin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _admin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n require(newAdmin != address(0), \"TransparentUpgradeableProxy: new admin is the zero address\");\n emit AdminChanged(_admin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external virtual ifAdmin {\n _upgradeTo(newImplementation);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\n _upgradeTo(newImplementation);\n Address.functionDelegateCall(newImplementation, data);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address adm) {\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n adm := sload(slot)\n }\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n bytes32 slot = _ADMIN_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newAdmin)\n }\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _admin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../access/Ownable.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n constructor(address implementation_) public {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/UpgradeableProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n *\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\n * {TransparentUpgradeableProxy}.\n */\ncontract UpgradeableProxy is Proxy {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) public payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _setImplementation(_logic);\n if(_data.length > 0) {\n Address.functionDelegateCall(_logic, _data);\n }\n }\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n impl := sload(slot)\n }\n }\n\n /**\n * @dev Upgrades the proxy to a new implementation.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal virtual {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableProxy: new implementation is not a contract\");\n\n bytes32 slot = _IMPLEMENTATION_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newImplementation)\n }\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/ERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155.sol\";\nimport \"./IERC1155MetadataURI.sol\";\nimport \"./IERC1155Receiver.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../introspection/ERC165.sol\";\nimport \"../../math/SafeMath.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {\n using SafeMath for uint256;\n using Address for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n constructor (string memory uri_) public {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Receiver.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155Holder is ERC1155Receiver {\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Receiver.sol\";\nimport \"../../introspection/ERC165.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\n constructor() internal {\n _registerInterface(\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\n );\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/IERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155 is IERC165 {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURI is IERC1155 {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155Receiver is IERC165 {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" - }, - "@openzeppelin/contracts/token/ERC721/ERC721Holder.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721Receiver.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721Holder is IERC721Receiver {\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" - }, - "@openzeppelin/contracts/utils/Address.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" - }, - "@openzeppelin/contracts/utils/Context.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" - }, - "@openzeppelin/contracts/utils/Pausable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n bool private _paused;\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n constructor () internal {\n _paused = false;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n require(!paused(), \"Pausable: paused\");\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n require(paused(), \"Pausable: not paused\");\n _;\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" - }, - "@rarible/auction/contracts/1155/AuctionHouse1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase1155.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse1155 is ERC1155HolderUpgradeable, AuctionHouseBase1155 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse1155_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse1155_init_unchained();\n }\n\n function __AuctionHouse1155_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint96 _sellTokenValue,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC1155 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(_sellTokenValue > 0, \"incorrect _sellTokenValue\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenValue,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n\n transferNFT(\n _sellToken, \n _sellTokenId, \n _sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n sender,\n address(this)\n );\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime if it's not set\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId) internal {\n emit AuctionFinished(_auctionId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n address seller = currentAuction.seller;\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n currentAuction.sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n \n deactivateAuction(_auctionId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return this.supportsInterface(interfaceId);\n }\n\n}" - }, - "@rarible/auction/contracts/1155/AuctionHouseBase1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase1155 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint96 sellTokenValue;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n\n}" - }, - "@rarible/auction/contracts/721/AuctionHouse721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase721.sol\";\nimport \"../wrapper/TokenToAuction.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse721 is ERC721HolderUpgradeable, TokenToAuction, AuctionHouseBase721 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse721_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC721Holder_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse721_init_unchained();\n }\n\n function __AuctionHouse721_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC721 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n transferNFT(\n _sellToken, \n _sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n sender,\n address(this)\n );\n setAuctionForToken(_sellToken, _sellTokenId, currentAuctionId);\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId, address token, uint tokenId) internal {\n emit AuctionFinished(_auctionId);\n deleteAuctionForToken(token, tokenId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n address seller = currentAuction.seller;\n require(_checkAuctionExistence(seller), \"there is no auction with this id\");\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n \n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n /// @dev function to call from wrapper to put bid\n function putBidWrapper(uint256 _auctionId) external payable {\n require(auctions[_auctionId].buyAsset == address(0), \"only ETH bids allowed\");\n putBid(_auctionId, Bid(msg.value, LibBidDataV1.V1, \"\"));\n }\n\n}" - }, - "@rarible/auction/contracts/721/AuctionHouseBase721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase721 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n}" - }, - "@rarible/auction/contracts/AuctionHouseBase.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libs/LibAucDataV1.sol\";\nimport \"./libs/LibBidDataV1.sol\";\nimport \"./libs/SafeMathUpgradeable96.sol\";\n\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nabstract contract AuctionHouseBase is OwnableUpgradeable, ReentrancyGuardUpgradeable, RaribleTransferManager, TransferExecutor {\n using LibTransfer for address;\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n /// @dev default minimal auction duration and also the time for that auction is extended when it's about to end (endTime - now < EXTENSION_DURATION)\n uint96 internal constant EXTENSION_DURATION = 15 minutes;\n\n /// @dev maximum auction duration\n uint128 internal constant MAX_DURATION = 1000 days;\n\n /// @dev maximum fee base point\n uint internal constant MAX_FEE_BASE_POINT = 1000;\n\n /// @dev mapping to store eth amount that is ready to be withdrawn (used for faulty eth-bids)\n mapping(address => uint) readyToWithdraw;\n\n /// @dev latest auctionId\n uint256 public auctionId;\n\n /// @dev minimal auction duration\n uint96 public minimalDuration;\n\n /// @dev minimal bid increase in base points\n uint96 public minimalStepBasePoint;\n\n /// @dev bid struct\n struct Bid {\n // the amount \n uint amount;\n // version of Bid to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Bid, can be seen in \"LibBidDataV1.sol\"\n bytes data;\n }\n\n /// @dev event that emits when auction is created\n event AuctionCreated(uint indexed auctionId, address seller);\n /// @dev event that emits when bid is placed\n event BidPlaced(uint indexed auctionId, address buyer, uint endTime);\n /// @dev event that emits when auction is finished\n event AuctionFinished(uint indexed auctionId);\n /// @dev event that emits when auction is canceled\n event AuctionCancelled(uint indexed auctionId);\n /// @dev event that emits when auction is bought out\n event AuctionBuyOut(uint indexed auctionId, address buyer);\n\n /// @dev event that's emitted when user can withdraw ETH from the AuctionHouse\n event AvailableToWithdraw(address indexed owner, uint added, uint total);\n /// @dev event that's emitted when minimal auction duration changes\n event MinimalDurationChanged(uint oldValue, uint newValue);\n\n event MinimalStepChanged(uint oldValue, uint newValue);\n\n function __AuctionHouseBase_init_unchained(\n uint96 _minimalStepBasePoint\n ) internal initializer {\n auctionId = 1;\n minimalDuration = EXTENSION_DURATION;\n minimalStepBasePoint = _minimalStepBasePoint;\n }\n\n /// @dev increments auctionId and returns new value\n function getNextAndIncrementAuctionId() internal returns (uint256) {\n return auctionId++;\n }\n\n function changeMinimalDuration(uint96 newValue) external onlyOwner {\n emit MinimalDurationChanged(minimalDuration, newValue);\n minimalDuration = newValue;\n }\n\n function changeMinimalStep(uint96 newValue) external onlyOwner {\n emit MinimalStepChanged(minimalStepBasePoint, newValue);\n minimalStepBasePoint = newValue;\n }\n\n function transferNFT (\n address token,\n uint tokenId,\n uint value,\n bytes4 assetClass,\n address from,\n address to\n ) internal {\n transfer(\n getSellAsset(\n token,\n tokenId,\n value,\n assetClass\n ),\n from,\n to,\n proxies[assetClass]\n );\n }\n\n function transferBid(\n uint value,\n address token,\n address from,\n address to,\n address proxy\n ) internal {\n transfer(\n getBuyAsset(\n token,\n value\n ),\n from,\n to,\n proxy\n );\n }\n\n function getSellAsset(address token, uint tokenId, uint value, bytes4 assetClass) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n asset.assetType.assetClass = assetClass;\n asset.assetType.data = abi.encode(token, tokenId);\n }\n\n function getBuyAsset(address token, uint value) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n\n if (token == address(0)){\n asset.assetType.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n asset.assetType.assetClass = LibAsset.ERC20_ASSET_CLASS;\n asset.assetType.data = abi.encode(token);\n }\n }\n\n function getPayouts(address maker) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(maker);\n payout[0].value = 10000;\n return payout;\n }\n\n function getOriginFee(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee = new LibPart.Part[](1);\n originFee[0].account = payable(address(data));\n originFee[0].value = uint96(getValueFromData(data));\n return originFee;\n }\n\n function _checkAuctionRangeTime(uint endTime, uint startTime) internal view returns (bool){\n uint currentTime = block.timestamp;\n if (startTime > 0 && startTime > currentTime) {\n return false;\n }\n if (endTime > 0 && endTime <= currentTime){\n return false;\n }\n\n return true;\n }\n\n /// @dev returns true if newAmount is enough for buyOut\n function buyOutVerify(LibAucDataV1.DataV1 memory aucData, uint newAmount) internal pure returns (bool) {\n if (aucData.buyOutPrice > 0 && aucData.buyOutPrice <= newAmount) {\n return true;\n }\n return false;\n }\n\n /// @dev returns true if auction exists, false otherwise\n function _checkAuctionExistence(address seller) internal pure returns (bool){\n return seller != address(0);\n }\n\n /// @dev Used to withdraw faulty bids (bids that failed to return after out-bidding)\n function withdrawFaultyBid(address _to) external {\n address sender = _msgSender();\n uint amount = readyToWithdraw[sender];\n require( amount > 0, \"nothing to withdraw\");\n readyToWithdraw[sender] = 0;\n _to.transferEth(amount);\n }\n\n function _returnBid(\n Bid memory oldBid,\n address buyAsset,\n address oldBuyer,\n address proxy\n ) internal {\n // nothing to return\n if (oldBuyer == address(0)) {\n return;\n }\n if (buyAsset == address(0)) {\n (bool success,) = oldBuyer.call{ value: oldBid.amount }(\"\");\n if (!success) {\n uint currentValueToWithdraw = readyToWithdraw[oldBuyer];\n uint newValueToWithdraw = oldBid.amount.add(currentValueToWithdraw);\n readyToWithdraw[oldBuyer] = newValueToWithdraw;\n emit AvailableToWithdraw(oldBuyer, oldBid.amount, newValueToWithdraw);\n }\n } else {\n transferBid(\n oldBid.amount,\n buyAsset,\n address(this),\n oldBuyer,\n proxy\n );\n }\n }\n\n function _getProxy(address buyAsset) internal view returns(address){\n address proxy;\n if (buyAsset != address(0)){\n proxy = proxies[LibAsset.ERC20_ASSET_CLASS];\n }\n return proxy;\n }\n\n /// @dev check that msg.value more than bid amount with fees and return change\n function checkEthReturnChange(uint totalAmount, address buyer) internal {\n uint msgValue = msg.value;\n require(msgValue >= totalAmount, \"not enough ETH\");\n uint256 change = msgValue.sub(totalAmount);\n if (change > 0) {\n buyer.transferEth(change);\n }\n }\n\n /// @dev returns true if auction in progress, false otherwise\n function checkAuctionInProgress(address seller, uint endTime, uint startTime) internal view{\n require(_checkAuctionExistence(seller) && _checkAuctionRangeTime(endTime, startTime), \"auction is inactive\");\n }\n\n /// @dev reserves new bid and returns the last one if it exists\n function reserveBid(\n address buyAsset,\n address oldBuyer,\n address newBuyer,\n Bid memory oldBid,\n address proxy,\n uint newTotalAmount\n ) internal {\n // return old bid if theres any\n _returnBid(\n oldBid,\n buyAsset,\n oldBuyer,\n proxy\n );\n \n //lock new bid\n transferBid(\n newTotalAmount,\n buyAsset,\n newBuyer,\n address(this),\n proxy\n );\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function _getMinimalNextBid(address buyer, uint96 minimalPrice, uint amount) internal view returns (uint minBid){\n if (buyer == address(0x0)) {\n minBid = minimalPrice;\n } else {\n minBid = amount.add(amount.bp(minimalStepBasePoint));\n }\n }\n\n function getValueFromData(uint data) internal pure returns(uint) {\n return (data >> 160);\n }\n\n uint256[50] private ______gap;\n}" - }, - "@rarible/auction/contracts/libs/LibAucDataV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Auction struct\nlibrary LibAucDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Auction data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n // auction duration\n uint96 duration;\n // auction startTime\n uint96 startTime;\n // auction buyout price\n uint96 buyOutPrice;\n }\n\n /// @dev returns parsed data field of an Auction (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n }\n } else {\n revert(\"wrong auction dataType\");\n }\n }\n}\n\n" - }, - "@rarible/auction/contracts/libs/LibBidDataV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Bid struct\nlibrary LibBidDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Bid data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n }\n\n /// @dev returns parsed data field of a Bid (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n } \n } else {\n revert(\"wrong bid dataType\");\n }\n }\n}\n" - }, - "@rarible/auction/contracts/libs/SafeMathUpgradeable96.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable96 {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint96 a, uint96 b) internal pure returns (uint96) {\n uint96 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint96 a, uint96 b) internal pure returns (uint96) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n}\n" - }, - "@rarible/auction/contracts/wrapper/IMarketWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/**\n * @title IMarketWrapper\n * @author Anna Carroll\n * @notice IMarketWrapper provides a common interface for\n * interacting with NFT auction markets.\n * Contracts can abstract their interactions with\n * different NFT markets using IMarketWrapper.\n * NFT markets can become compatible with any contract\n * using IMarketWrapper by deploying a MarketWrapper contract\n * that implements this interface using the logic of their Market.\n *\n * WARNING: MarketWrapper contracts should NEVER write to storage!\n * When implementing a MarketWrapper, exercise caution; a poorly implemented\n * MarketWrapper contract could permanently lose access to the NFT or user funds.\n */\ninterface IMarketWrapper {\n /**\n * @notice Given the auctionId, nftContract, and tokenId, check that:\n * 1. the auction ID matches the token\n * referred to by tokenId + nftContract\n * 2. the auctionId refers to an *ACTIVE* auction\n * (e.g. an auction that will accept bids)\n * within this market contract\n * 3. any additional validation to ensure that\n * a PartyBid can bid on this auction\n * (ex: if the market allows arbitrary bidding currencies,\n * check that the auction currency is ETH)\n * Note: This function probably should have been named \"isValidAuction\"\n * @dev Called in PartyBid.sol in `initialize` at line 174\n * @return TRUE if the auction is valid\n */\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external view returns (bool);\n\n /**\n * @notice Calculate the minimum next bid for this auction.\n * PartyBid contracts always submit the minimum possible\n * bid that will be accepted by the Market contract.\n * usually, this is either the reserve price (if there are no bids)\n * or a certain percentage increase above the current highest bid\n * @dev Called in PartyBid.sol in `bid` at line 251\n * @return minimum bid amount\n */\n function getMinimumBid(uint256 auctionId) external view returns (uint256);\n\n /**\n * @notice Query the current highest bidder for this auction\n * It is assumed that there is always 1 winning highest bidder for an auction\n * This is used to ensure that PartyBid cannot outbid itself if it is already winning\n * @dev Called in PartyBid.sol in `bid` at line 241\n * @return highest bidder\n */\n function getCurrentHighestBidder(uint256 auctionId)\n external\n view\n returns (address);\n\n /**\n * @notice Submit bid to Market contract\n * @dev Called in PartyBid.sol in `bid` at line 259\n */\n function bid(uint256 auctionId, uint256 bidAmount) external;\n\n /**\n * @notice Determine whether the auction has been finalized\n * Used to check if it is still possible to bid\n * And to determine whether the PartyBid should finalize the auction\n * @dev Called in PartyBid.sol in `bid` at line 247\n * @dev and in `finalize` at line 288\n * @return TRUE if the auction has been finalized\n */\n function isFinalized(uint256 auctionId) external view returns (bool);\n\n /**\n * @notice Finalize the results of the auction\n * on the Market contract\n * It is assumed that this operation is performed once for each auction,\n * that after it is done the auction is over and the NFT has been\n * transferred to the auction winner.\n * @dev Called in PartyBid.sol in `finalize` at line 289\n */\n function finalize(uint256 auctionId) external;\n}" - }, - "@rarible/auction/contracts/wrapper/TokenToAuction.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/// @dev contract to add tokenToAuctionId functionality to auctionHouse\ncontract TokenToAuction {\n /// @dev mapping to store auction ids for token address + token id (only stores erc-721 tokens)\n mapping(address => mapping(uint256 => uint256)) private tokenToAuctionId;\n\n /// @dev returns auction id by token address and token id\n function getAuctionByToken(address _collection, uint tokenId) external view returns(uint) {\n return tokenToAuctionId[_collection][tokenId];\n }\n\n /// @dev sets auction id for token address and token id\n function setAuctionForToken(address token, uint tokenId, uint auctionId) internal {\n tokenToAuctionId[token][tokenId] = auctionId;\n }\n\n /// @dev deletes auctionId from tokenToAuctionId\n function deleteAuctionForToken(address token, uint tokenId) internal {\n delete tokenToAuctionId[token][tokenId];\n }\n \n uint256[50] private ______gap;\n}" - }, - "@rarible/auction/contracts/wrapper/Wrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\nimport \"./IMarketWrapper.sol\";\nimport \"../721/AuctionHouse721.sol\";\n\ncontract Wrapper is IMarketWrapper{\n\n AuctionHouse721 internal immutable auction;\n\n constructor(address _auction) {\n auction = AuctionHouse721(_auction);\n }\n\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external override view returns (bool){\n return auctionId == auction. getAuctionByToken(nftContract, tokenId);\n }\n\n function getMinimumBid(uint256 auctionId) external override view returns (uint256){\n return auction.getMinimalNextBid(auctionId);\n }\n\n function getCurrentHighestBidder(uint256 auctionId)\n external\n override\n view\n returns (address){\n return auction.getCurrentBuyer(auctionId);\n }\n\n function bid(uint256 auctionId, uint256 bidAmount) external override{\n (bool success, bytes memory returnData) =\n address(auction).call{value: bidAmount}(\n abi.encodeWithSignature(\"putBidWrapper(uint256)\", auctionId)\n );\n require(success, string(returnData));\n }\n\n function isFinalized(uint256 auctionId) external override view returns (bool){\n return !auction.checkAuctionExistence(auctionId);\n }\n\n function finalize(uint256 auctionId) external override{\n auction.finishAuction(auctionId);\n }\n}" - }, - "@rarible/custom-matchers/contracts/AssetMatcherCollection.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\n/*\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\n */\ncontract AssetMatcherCollection is IAssetMatcher {\n\n bytes constant EMPTY = \"\";\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\n if (\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\n ) {\n (address leftToken) = abi.decode(leftAssetType.data, (address));\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\n if (leftToken == rightToken) {\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\n }\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n}" - }, - "@rarible/exchange-interfaces/contracts/IAssetMatcher.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface IAssetMatcher {\n function matchAssets(\n LibAsset.AssetType memory leftAssetType,\n LibAsset.AssetType memory rightAssetType\n ) external view returns (LibAsset.AssetType memory);\n}\n" - }, - "@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface ICryptoPunksMarket {\n //to get address punk owner from mapping (uint => address) public punkIndexToAddress;\n function punkIndexToAddress(uint key) external returns (address);\n\n function buyPunk(uint punkIndex) payable external;\n\n function transferPunk(address to, uint punkIndex) external;\n\n function offerPunkForSaleToAddress(uint punkIndex, uint minSalePriceInWei, address toAddress) external;\n}" - }, - "@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\ninterface IERC20TransferProxy {\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\n}\n" - }, - "@rarible/exchange-interfaces/contracts/INftTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\ninterface INftTransferProxy {\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n}\n" - }, - "@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\n}\n" - }, - "@rarible/exchange-interfaces/contracts/ITransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" - }, - "@rarible/exchange-v2/contracts/AssetMatcher.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" - }, - "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/ExchangeV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n require(newFill.rightValue > 0 && newFill.leftValue > 0, \"nothing to fill\");\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibDirectTransfer { //LibDirectTransfers\n /*All buy parameters need for create buyOrder and sellOrder*/\n struct Purchase {\n address sellOrderMaker; //\n uint256 sellOrderNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 sellOrderPaymentAmount;\n address paymentToken;\n uint256 sellOrderSalt;\n uint sellOrderStart;\n uint sellOrderEnd;\n bytes4 sellOrderDataType;\n bytes sellOrderData;\n bytes sellOrderSignature;\n\n uint256 buyOrderPaymentAmount;\n uint256 buyOrderNftAmount;\n bytes buyOrderData;\n }\n\n /*All accept bid parameters need for create buyOrder and sellOrder*/\n struct AcceptBid {\n address bidMaker; //\n uint256 bidNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 bidPaymentAmount;\n address paymentToken;\n uint256 bidSalt;\n uint bidStart;\n uint bidEnd;\n bytes4 bidDataType;\n bytes bidData;\n bytes bidSignature;\n\n uint256 sellOrderPaymentAmount;\n uint256 sellOrderNftAmount;\n bytes sellOrderData;\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibFill.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibMath.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary LibMath {\n using SafeMathUpgradeable for uint;\n\n /// @dev Calculates partial value given a numerator and denominator rounded down.\n /// Reverts if rounding error is >= 0.1%\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return partialAmount value of target rounded down.\n function safeGetPartialAmountFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorFloor(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding down.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // The absolute rounding error is the difference between the rounded\n // value and the ideal value. The relative rounding error is the\n // absolute rounding error divided by the absolute value of the\n // ideal value. This is undefined when the ideal value is zero.\n //\n // The ideal value is `numerator * target / denominator`.\n // Let's call `numerator * target % denominator` the remainder.\n // The absolute error is `remainder / denominator`.\n //\n // When the ideal value is zero, we require the absolute error to\n // be zero. Fortunately, this is always the case. The ideal value is\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\n // remainder and absolute error are also zero.\n if (target == 0 || numerator == 0) {\n return false;\n }\n\n // Otherwise, we want the relative rounding error to be strictly\n // less than 0.1%.\n // The relative error is `remainder / (numerator * target)`.\n // We want the relative error less than 1 / 1000:\n // remainder / (numerator * target) < 1 / 1000\n // or equivalently:\n // 1000 * remainder < numerator * target\n // so we have a rounding error iff:\n // 1000 * remainder >= numerator * target\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n isError = remainder.mul(1000) >= numerator.mul(target);\n }\n\n function safeGetPartialAmountCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorCeil(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding up.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // See the comments in `isRoundingError`.\n if (target == 0 || numerator == 0) {\n // When either is zero, the ideal value and rounded value are zero\n // and there is no rounding error. (Although the relative error\n // is undefined.)\n return false;\n }\n // Compute remainder as before\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n remainder = denominator.sub(remainder) % denominator;\n isError = remainder.mul(1000) >= numerator.mul(target);\n return isError;\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrder.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nimport \"./LibMath.sol\";\nimport \"./LibOrderDataV3.sol\";\nimport \"./LibOrderDataV2.sol\";\nimport \"./LibOrderDataV1.sol\";\n\nlibrary LibOrder {\n using SafeMathUpgradeable for uint;\n\n bytes32 constant ORDER_TYPEHASH = keccak256(\n \"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\n\n struct Order {\n address maker;\n LibAsset.Asset makeAsset;\n address taker;\n LibAsset.Asset takeAsset;\n uint salt;\n uint start;\n uint end;\n bytes4 dataType;\n bytes data;\n }\n\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\n if (isMakeFill){\n makeValue = order.makeAsset.value.sub(fill);\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\n } else {\n takeValue = order.takeAsset.value.sub(fill);\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \n } \n }\n\n function hashKey(Order memory order) internal pure returns (bytes32) {\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt\n ));\n } else {\n //order.data is in hash for V2, V3 and all new order\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt,\n order.data\n ));\n }\n }\n\n function hash(Order memory order) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ORDER_TYPEHASH,\n order.maker,\n LibAsset.hash(order.makeAsset),\n order.taker,\n LibAsset.hash(order.takeAsset),\n order.salt,\n order.start,\n order.end,\n order.dataType,\n keccak256(order.data)\n ));\n }\n\n function validateOrderTime(LibOrder.Order memory order) internal view {\n require(order.start == 0 || order.start < block.timestamp, \"Order start validation failed\");\n require(order.end == 0 || order.end > block.timestamp, \"Order end validation failed\");\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderData.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibOrderData {\n\n struct GenericOrderData {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n } \n\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\n if (order.dataType == LibOrderDataV1.V1) {\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n } else if (order.dataType == LibOrderDataV2.V2) {\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n dataOrder.isMakeFill = data.isMakeFill;\n } else if (order.dataType == 0xffffffff) {\n } else {\n revert(\"Unknown Order data type\");\n }\n if (dataOrder.payouts.length == 0) {\n dataOrder.payouts = payoutSet(order.maker);\n }\n }\n\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(orderAddress);\n payout[0].value = 10000;\n return payout;\n }\n\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee;\n\n if (dataFirst > 0 && dataSecond > 0){\n originFee = new LibPart.Part[](2);\n\n originFee[0] = uintToLibPart(dataFirst);\n originFee[1] = uintToLibPart(dataSecond);\n }\n\n if (dataFirst > 0 && dataSecond == 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataFirst);\n }\n\n if (dataFirst == 0 && dataSecond > 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataSecond);\n }\n\n return originFee;\n }\n\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payouts;\n\n if (data > 0) {\n payouts = new LibPart.Part[](1);\n payouts[0] = uintToLibPart(data);\n }\n\n return payouts;\n }\n\n /**\n @notice converts uint to LibPart.Part\n @param data address and value encoded in uint (first 12 bytes )\n @return result LibPart.Part \n */\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\n if (data > 0){\n result.account = payable(address(data));\n result.value = uint96(data >> 160);\n }\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n struct DataV1 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV2 {\n bytes4 constant public V2 = bytes4(keccak256(\"V2\"));\n\n struct DataV2 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\n/// @dev deprecated\nlibrary LibOrderDataV3 {\n bytes4 constant public V3_SELL = bytes4(keccak256(\"V3_SELL\"));\n bytes4 constant public V3_BUY = bytes4(keccak256(\"V3_BUY\"));\n\n struct DataV3_SELL {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n uint maxFeesBasePoint;\n bytes32 marketplaceMarker;\n }\n\n struct DataV3_BUY {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n bytes32 marketplaceMarker;\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/OrderValidator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./libraries/LibOrder.sol\";\n\nimport \"@rarible/lib-signature/contracts/IERC1271.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\n\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\n using LibSignature for bytes32;\n using AddressUpgradeable for address;\n \n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function __OrderValidator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Exchange\", \"2\");\n }\n\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\n if (order.salt == 0) {\n if (order.maker != address(0)) {\n require(_msgSender() == order.maker, \"maker is not tx sender\");\n }\n } else {\n if (_msgSender() != order.maker) {\n bytes32 hash = LibOrder.hash(order);\n // if maker is contract checking ERC1271 signature\n if (order.maker.isContract()) {\n require(\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\n \"contract order signature verification error\"\n );\n } else {\n // if maker is not contract then checking ECDSA signature\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\n revert(\"order signature verification error\");\n } else {\n require (order.maker != address(0), \"no maker\");\n }\n }\n }\n }\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../../contracts/ExchangeV2.sol\";\n\ncontract RaribleTestHelper {\n function encode(LibOrderDataV1.DataV1 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV2(LibOrderDataV2.DataV2 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_SELL(LibOrderDataV3.DataV3_SELL memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_BUY(LibOrderDataV3.DataV3_BUY memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value)\n external\n pure\n returns (uint256)\n {\n return (uint256(value) << 160) + uint256(account);\n }\n\n function hashKey(LibOrder.Order calldata order)\n external\n pure\n returns (bytes32)\n {\n return LibOrder.hashKey(order);\n }\n\n function hashV2(\n address maker,\n LibAsset.Asset memory makeAsset,\n LibAsset.Asset memory takeAsset,\n uint256 salt,\n bytes memory data\n ) public pure returns (bytes32) {\n return\n keccak256(\n abi.encode(\n maker,\n LibAsset.hash(makeAsset.assetType),\n LibAsset.hash(takeAsset.assetType),\n salt,\n data\n )\n );\n }\n\n function encodeLazy721(LibERC721LazyMint.Mint721Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n function encodeLazy1155(LibERC1155LazyMint.Mint1155Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n}\n" - }, - "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n\ninterface IBlur {\n enum Side { Buy, Sell }\n enum SignatureVersion { Single, Bulk }\n enum AssetType { ERC721, ERC1155 }\n\n struct Fee {\n uint16 rate;\n address payable recipient;\n }\n \n struct Order {\n address trader;\n Side side;\n address matchingPolicy;\n address collection;\n uint256 tokenId;\n uint256 amount;\n address paymentToken;\n uint256 price;\n uint256 listingTime;\n /* Order expiration timestamp - 0 for oracle cancellations. */\n uint256 expirationTime;\n Fee[] fees;\n uint256 salt;\n bytes extraParams;\n }\n\n struct Input {\n Order order;\n uint8 v;\n bytes32 r;\n bytes32 s;\n bytes extraSignature;\n SignatureVersion signatureVersion;\n uint256 blockNumber;\n }\n\n function execute(Input calldata sell, Input calldata buy)\n external\n payable;\n}\n" - }, - "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\n\ninterface IExchangeV2 {\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable;\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable;\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../libraries/LibLooksRare.sol\";\n\ninterface ILooksRare {\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\n\n /**\n * @notice This function allows a user to execute a taker bid (against a maker ask).\n * @param takerBid Taker bid struct\n * @param makerAsk Maker ask struct\n * @param makerSignature Maker signature\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\n * @param affiliate Affiliate address\n */\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\n}\n" - }, - "@rarible/exchange-wrapper/contracts/interfaces/ILSSVMRouter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\ninterface ILSSVMRouter {\n struct PairSwapSpecific {\n address pair;\n uint256[] nftIds;\n }\n\n /**\n @notice Swaps ETH into specific NFTs using multiple pairs.\n @param swapList The list of pairs to trade with and the IDs of the NFTs to buy from each.\n @param ethRecipient The address that will receive the unspent ETH input\n @param nftRecipient The address that will receive the NFT output\n @param deadline The Unix timestamp (in seconds) at/after which the swap will revert\n @return remainingValue The unspent ETH amount\n */\n function swapETHForSpecificNFTs(\n PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n )\n external\n payable\n returns (uint256 remainingValue);\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"../libraries/LibSeaPort.sol\";\n\ninterface ISeaPort {\n function fulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder calldata advancedOrder,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n bytes32 fulfillerConduitKey,\n address recipient\n ) external payable returns (bool fulfilled);\n\n function fulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\n bytes32 fulfillerConduitKey,\n address recipient,\n uint256 maximumFulfilled\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\n\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\n external\n payable\n returns (bool fulfilled);\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface IWyvernExchange {\n function atomicMatch_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n\n enum Side {\n Buy,\n Sell\n }\n\n enum SaleKind {\n FixedPrice,\n DutchAuction\n }\n\n function calculateFinalPrice(\n Side side,\n SaleKind saleKind,\n uint256 basePrice,\n uint256 extra,\n uint256 listingTime,\n uint256 expirationTime\n ) external view returns (uint256);\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface Ix2y2 {\n\n struct OrderItem {\n uint256 price;\n bytes data;\n }\n\n struct Pair721 {\n address token;\n uint256 tokenId;\n }\n\n struct Pair1155 {\n address token;\n uint256 tokenId;\n uint256 amount;\n }\n\n struct Order {\n uint256 salt;\n address user;\n uint256 network;\n uint256 intent;\n uint256 delegateType;\n uint256 deadline;\n address currency;\n bytes dataMask;\n OrderItem[] items;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n uint8 signVersion;\n }\n\n struct Fee {\n uint256 percentage;\n address to;\n }\n\n struct SettleDetail {\n Op op;\n uint256 orderIdx;\n uint256 itemIdx;\n uint256 price;\n bytes32 itemHash;\n address executionDelegate;\n bytes dataReplacement;\n uint256 bidIncentivePct;\n uint256 aucMinIncrementPct;\n uint256 aucIncDurationSecs;\n Fee[] fees;\n }\n\n struct SettleShared {\n uint256 salt;\n uint256 deadline;\n uint256 amountToEth;\n uint256 amountToWeth;\n address user;\n bool canFail;\n }\n\n struct RunInput {\n Order[] orders;\n SettleDetail[] details;\n SettleShared shared;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n }\n\n enum Op {\n INVALID,\n // off-chain\n COMPLETE_SELL_OFFER,\n COMPLETE_BUY_OFFER,\n CANCEL_OFFER,\n // auction\n BID,\n COMPLETE_AUCTION,\n REFUND_AUCTION,\n REFUND_AUCTION_STUCK_ITEM\n }\n\n function run(RunInput memory input) external payable;\n}" - }, - "@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\nabstract contract IsPausable is Ownable {\n bool public paused;\n\n event Paused(bool paused);\n\n function pause(bool _paused) external onlyOwner {\n paused = _paused;\n emit Paused(_paused);\n }\n\n function requireNotPaused() internal view {\n require (!paused, \"the contract is paused\");\n }\n\n}\n" - }, - "@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibLooksRare {\n struct MakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address signer; // signer of the maker order\n address collection; // collection address\n uint256 price; // price (used as )\n uint256 tokenId; // id of the token\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\n address currency; // currency (e.g., WETH)\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\n uint256 startTime; // startTime in timestamp\n uint256 endTime; // endTime in timestamp\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // additional parameters\n uint8 v; // v: parameter (27 or 28)\n bytes32 r; // r: parameter\n bytes32 s; // s: parameter\n }\n\n struct TakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address taker; // msg.sender\n uint256 price; // final price for the purchase\n uint256 tokenId;\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // other params (e.g., tokenId)\n }\n\n /**\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\n */\n enum CollectionType {\n ERC721,\n ERC1155\n }\n\n /**\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\n */\n enum QuoteType {\n Bid,\n Ask\n }\n /**\n * 1. Maker struct\n */\n\n /**\n * @notice Maker is the struct for a maker order.\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\n * @param globalNonce Global user order nonce for maker orders\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\n * @param strategyId Strategy id\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\n * @param collection Collection address\n * @param currency Currency address (@dev address(0) = ETH)\n * @param signer Signer address\n * @param startTime Start timestamp\n * @param endTime End timestamp\n * @param price Minimum price for maker ask, maximum price for maker bid\n * @param itemIds Array of itemIds\n * @param amounts Array of amounts\n * @param additionalParameters Extra data specific for the order\n */\n struct Maker {\n QuoteType quoteType;\n uint256 globalNonce;\n uint256 subsetNonce;\n uint256 orderNonce;\n uint256 strategyId;\n CollectionType collectionType;\n address collection;\n address currency;\n address signer;\n uint256 startTime;\n uint256 endTime;\n uint256 price;\n uint256[] itemIds;\n uint256[] amounts;\n bytes additionalParameters;\n }\n\n /**\n * 2. Taker struct\n */\n\n /**\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\n * @param additionalParameters Extra data specific for the order\n */\n struct Taker {\n address recipient;\n bytes additionalParameters;\n }\n\n /**\n * 3. Merkle tree struct\n */\n\n enum MerkleTreeNodePosition {\n Left,\n Right\n }\n\n /**\n * @notice MerkleTreeNode is a MerkleTree's node.\n * @param value It can be an order hash or a proof\n * @param position The node's position in its branch.\n * It can be left or right or none\n * (before the tree is sorted).\n */\n struct MerkleTreeNode {\n bytes32 value;\n MerkleTreeNodePosition position;\n }\n\n /**\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\n * @dev A Merkle tree can be computed with order hashes.\n * It can contain order hashes from both maker bid and maker ask structs.\n * @param root Merkle root\n * @param proof Array containing the merkle proof\n */\n struct MerkleTree {\n bytes32 root;\n MerkleTreeNode[] proof;\n }\n}\n" - }, - "@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" - }, - "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,\n WyvernExchange,\n SeaPort_1_1,\n X2Y2,\n LooksRareOrders,\n SudoSwap,\n SeaPort_1_4,\n LooksRareV2,\n Blur,\n SeaPort_1_5\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[10] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" - }, - "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" - }, - "@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"./LibERC1155LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC1155LazyMint is IERC1155Upgradeable {\n\n event Supply(\n uint256 tokenId,\n uint256 value\n );\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC1155LazyMint.Mint1155Data memory data,\n address to,\n uint256 _amount\n ) external;\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) external;\n}\n" - }, - "@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC1155LazyMint {\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC1155_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\n\n struct Mint1155Data {\n uint tokenId;\n string tokenURI;\n uint supply;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n data.supply,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n}\n" - }, - "@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"./LibERC721LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC721LazyMint is IERC721Upgradeable {\n\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external;\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external;\n}\n" - }, - "@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC721LazyMint {\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC721_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\n\n struct Mint721Data {\n uint tokenId;\n string tokenURI;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n\n}\n" - }, - "@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/erc-721/IERC721LazyMint.sol\";\n\ncontract ERC721LazyMintTest is IERC721LazyMint, ERC721Upgradeable {\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external override {\n _mint(to, data.tokenId);\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external override {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n this.mintAndTransfer(data, to);\n }\n }\n\n function encode(LibERC721LazyMint.Mint721Data memory data)\n external\n view\n returns (bytes memory)\n {\n return abi.encode(address(this), data);\n }\n}\n" - }, - "@rarible/lib-asset/contracts/LibAsset.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibAsset {\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\"ETH\"));\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\"ERC20\"));\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\"ERC721\"));\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\"ERC1155\"));\n bytes4 constant public COLLECTION = bytes4(keccak256(\"COLLECTION\"));\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\"CRYPTO_PUNKS\"));\n\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\n \"AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes32 constant ASSET_TYPEHASH = keccak256(\n \"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n struct AssetType {\n bytes4 assetClass;\n bytes data;\n }\n\n struct Asset {\n AssetType assetType;\n uint value;\n }\n\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPE_TYPEHASH,\n assetType.assetClass,\n keccak256(assetType.data)\n ));\n }\n\n function hash(Asset memory asset) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPEHASH,\n hash(asset.assetType),\n asset.value\n ));\n }\n\n}\n" - }, - "@rarible/lib-bp/contracts/BpLibrary.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary BpLibrary {\n using SafeMathUpgradeable for uint;\n\n function bp(uint value, uint bpValue) internal pure returns (uint) {\n return value.mul(bpValue).div(10000);\n }\n}\n" - }, - "@rarible/lib-part/contracts/LibPart.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibPart {\n bytes32 public constant TYPE_HASH = keccak256(\"Part(address account,uint96 value)\");\n\n struct Part {\n address payable account;\n uint96 value;\n }\n\n function hash(Part memory part) internal pure returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\n }\n}\n" - }, - "@rarible/lib-signature/contracts/ERC1271.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nabstract contract ERC1271 {\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\n\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\n\n /**\n * @dev Function must be implemented by deriving contract\n * @param _hash Arbitrary length data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\n *\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\n\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\n }\n}" - }, - "@rarible/lib-signature/contracts/IERC1271.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ninterface IERC1271 {\n\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param _hash Hash of the data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n *\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\n}" - }, - "@rarible/lib-signature/contracts/LibSignature.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nlibrary LibSignature {\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature)\n internal\n pure\n returns (address)\n {\n // Check the signature length\n if (signature.length != 65) {\n revert(\"ECDSA: invalid signature length\");\n }\n\n // Divide the signature in r, s and v variables\n bytes32 r;\n bytes32 s;\n uint8 v;\n\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n // solhint-disable-next-line no-inline-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n\n return recover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n require(\n uint256(s) <=\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\n \"ECDSA: invalid signature 's' value\"\n );\n\n // If the signature is valid (and not malleable), return the signer address\n // v > 30 is a special case, we need to adjust hash with \"\\x19Ethereum Signed Message:\\n32\"\n // and v = v - 4\n address signer;\n if (v > 30) {\n require(\n v - 4 == 27 || v - 4 == 28,\n \"ECDSA: invalid signature 'v' value\"\n );\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\n } else {\n require(v == 27 || v == 28, \"ECDSA: invalid signature 'v' value\");\n signer = ecrecover(hash, v, r, s);\n }\n\n require(signer != address(0), \"ECDSA: invalid signature\");\n\n return signer;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * replicates the behavior of the\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n * JSON-RPC method.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash)\n internal\n pure\n returns (bytes32)\n {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return\n keccak256(\n abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash)\n );\n }\n}\n" - }, - "@rarible/meta-tx/contracts/EIP712MetaTransaction.sol": { - "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" - }, - "@rarible/role-operator/contracts/OperatorRole.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocksV2.sol\";\n\ncontract RoyaltiesProviderArtBlocksV2 is IRoyaltiesProvider {\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n RoyaltyArtBlocksV2 artBlocksV2 = RoyaltyArtBlocksV2(token);\n\n (address payable[] memory recipients, uint256[] memory bps) = artBlocksV2.getRoyalties(tokenId);\n \n uint256 len = recipients.length;\n\n LibPart.Part[] memory result = new LibPart.Part[](len);\n \n for (uint i = 0; i < len; i++) {\n result[i].account = recipients[i];\n result[i].value = uint96(bps[i]);\n }\n\n return result;\n }\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyV2Legacy.sol\";\n\ncontract RoyaltiesProviderV2Legacy is IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n return RoyaltyV2Legacy(token).getRoyalties(tokenId);\n }\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocks.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocks {\n \n function getRoyaltyData(uint256 _tokenId) external virtual view returns (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID);\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocksV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocksV2 {\n \n /**\n * @notice Gets royalty Basis Points (BPS) for token ID `_tokenId`.\n * This conforms to the IManifold interface designated in the Royalty\n * Registry's RoyaltyEngineV1.sol contract.\n * ref: https://github.com/manifoldxyz/royalty-registry-solidity\n * @param _tokenId Token ID to be queried.\n * @return recipients Array of royalty payment recipients\n * @return bps Array of Basis Points (BPS) allocated to each recipient,\n * aligned by index.\n * @dev reverts if invalid _tokenId\n * @dev only returns recipients that have a non-zero BPS allocation\n */\n function getRoyalties(uint256 _tokenId) \n external \n view\n virtual\n returns (\n address payable[] memory recipients, \n uint256[] memory bps\n );\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltyV2Legacy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" - }, - "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n\n uint256 public asdsadas;\n}\n" - }, - "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" - }, - "@rarible/royalties/contracts/IERC2981.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n///\n/// @dev Interface for the NFT Royalty Standard\n///\n//interface IERC2981 is IERC165 {\ninterface IERC2981 {\n /// ERC165 bytes to add to interface array - set in parent contract\n /// implementing this standard\n ///\n /// bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n /// _registerInterface(_INTERFACE_ID_ERC2981);\n\n /// @notice Called with the sale price to determine how much royalty\n // is owed and to whom.\n /// @param _tokenId - the NFT asset queried for royalty information\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\n /// @return receiver - address of who should be sent the royalty payment\n /// @return royaltyAmount - the royalty payment amount for _salePrice\n function royaltyInfo(\n uint256 _tokenId,\n uint256 _salePrice\n ) external view returns (\n address receiver,\n uint256 royaltyAmount\n );\n}" - }, - "@rarible/royalties/contracts/impl/AbstractRoyalties.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract AbstractRoyalties {\n mapping (uint256 => LibPart.Part[]) internal royalties;\n\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\n uint256 totalValue;\n for (uint i = 0; i < _royalties.length; ++i) {\n require(_royalties[i].account != address(0x0), \"Recipient should be present\");\n require(_royalties[i].value != 0, \"Royalty value should be positive\");\n totalValue += _royalties[i].value;\n royalties[id].push(_royalties[i]);\n }\n require(totalValue < 10000, \"Royalty total value should be < 10000\");\n _onRoyaltiesSet(id, _royalties);\n }\n\n function _updateAccount(uint256 _id, address _from, address _to) internal {\n uint length = royalties[_id].length;\n for(uint i = 0; i < length; ++i) {\n if (royalties[_id][i].account == _from) {\n royalties[_id][i].account = payable(address(uint160(_to)));\n }\n }\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\n}\n" - }, - "@rarible/royalties/contracts/impl/RoyaltiesV1Impl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV1.sol\";\n\ncontract RoyaltiesV1Impl is AbstractRoyalties, RoyaltiesV1 {\n\n function getFeeRecipients(uint256 id) public override view returns (address payable[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n address payable[] memory result = new address payable[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = address(uint160(_royalties[i].account));\n }\n return result;\n }\n\n function getFeeBps(uint256 id) public override view returns (uint[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n uint[] memory result = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = _royalties[i].value;\n }\n return result;\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n address[] memory recipients = new address[](_royalties.length);\n uint[] memory bps = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n recipients[i] = _royalties[i].account;\n bps[i] = _royalties[i].value;\n }\n emit SecondarySaleFees(id, recipients, bps);\n }\n}\n" - }, - "@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV2.sol\";\nimport \"../IERC2981.sol\";\nimport \"../LibRoyalties2981.sol\";\n\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\n\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\n return royalties[id];\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n emit RoyaltiesSet(id, _royalties);\n }\n\n /*\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\n */\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\n if (royalties[id].length == 0) {\n receiver = address(0);\n royaltyAmount = 0;\n return(receiver, royaltyAmount);\n }\n LibPart.Part[] memory _royalties = royalties[id];\n receiver = _royalties[0].account;\n uint percent;\n for (uint i = 0; i < _royalties.length; ++i) {\n percent += _royalties[i].value;\n }\n //don`t need require(percent < 10000, \"Token royalty > 100%\"); here, because check later in calculateRoyalties\n royaltyAmount = percent * _salePrice / 10000;\n }\n}\n" - }, - "@rarible/royalties/contracts/LibRoyalties2981.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibRoyalties2981 {\n /*\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\n uint96 constant _WEIGHT_VALUE = 1000000;\n\n /*Method for converting amount to percent and forming LibPart*/\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\n LibPart.Part[] memory result;\n if (amount == 0) {\n return result;\n }\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\n require(percent < 10000, \"Royalties 2981 exceeds 100%\");\n result = new LibPart.Part[](1);\n result[0].account = payable(to);\n result[0].value = uint96(percent);\n return result;\n }\n}\n" - }, - "@rarible/royalties/contracts/LibRoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV1 {\n /*\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\n *\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\n */\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\n}\n" - }, - "@rarible/royalties/contracts/LibRoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV2 {\n /*\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\n}\n" - }, - "@rarible/royalties/contracts/RoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\ninterface RoyaltiesV1 {\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\n\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\n function getFeeBps(uint256 id) external view returns (uint[] memory);\n}\n" - }, - "@rarible/royalties/contracts/RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltiesV2 {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" - }, - "@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC1155RoyaltiesV2 is RoyaltiesV2Impl, ERC1155Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, uint amount, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId, amount, \"\");\n _saveRoyalties(tokenId, _fees);\n }\n}\n" - }, - "@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV1Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV1.sol\";\n\ncontract TestERC721RoyaltiesV1 is RoyaltiesV1Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV1._INTERFACE_ID_FEES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" - }, - "@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC721RoyaltiesV2 is RoyaltiesV2Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" - }, - "@rarible/test/contracts/TestERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\n\ncontract TestERC1155 is ERC1155, Pausable {\n constructor() ERC1155(\"uri\"){\n\n }\n\n function mint(address to, uint tokenId, uint amount) external {\n _mint(to, tokenId, amount, \"\");\n }\n\n function batchSafeTransferFrom(\n address[] memory froms,\n address[] memory tos,\n uint256[] memory ids,\n uint256[] memory amounts\n ) external {\n require(froms.length == tos.length, \"wrong length 1\");\n require(tos.length == ids.length, \"wrong length 2\");\n require(ids.length == amounts.length, \"wrong length 3\");\n\n for (uint i = 0; i < froms.length; i ++) {\n safeTransferFrom(froms[i], tos[i], ids[i], amounts[i], \"\");\n }\n }\n\n function emitPauseEvent(bool paused) external {\n if (paused) {\n emit Paused(address(0));\n } else {\n emit Unpaused(address(0));\n }\n }\n}\n" - }, - "@rarible/test/contracts/TestERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\n\ncontract TestERC20 is ERC20Upgradeable {\n function mint(address to, uint amount) external {\n _mint(to, amount);\n }\n\n function init() external {\n __ERC20_init(\"TestERC20\", \"TE20\");\n }\n}\n" - }, - "@rarible/test/contracts/TestERC721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\n\ncontract TestERC721 is ERC721Upgradeable {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" - }, - "@rarible/tokens/contracts/access/MinterAccessControl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" - }, - "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n\n uint256[50] private __gap;\n}" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\n\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\n using StringsUpgradeable for uint256;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _clearMetadata(uint256 tokenId) internal override virtual {\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n uint256[50] private __gap;\n}" - }, - "@rarible/tokens/contracts/erc-721/ERC721Base.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeable.sol\";\nimport \"./ERC721DefaultApproval.sol\";\nimport \"./ERC721Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721Base is OwnableUpgradeable, ERC721DefaultApproval, ERC721BurnableUpgradeable, ERC721Lazy, HasContractURI {\n\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721Upgradeable, ERC721DefaultApproval) view returns (bool) {\n return ERC721DefaultApproval._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApproval, ERC721Upgradeable, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApproval.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721Lazy) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function _mint(address to, uint256 tokenId) internal override(ERC721Lazy, ERC721Upgradeable) {\n super._mint(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721BurnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721Upgradeable.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeable is Initializable, ContextUpgradeable, ERC721Upgradeable {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721DefaultApproval.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721Upgradeable.sol\";\n\nabstract contract ERC721DefaultApproval is ERC721Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721Lazy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\n\nabstract contract ERC721Lazy is IERC721LazyMint, ERC721Upgradeable, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _mint(address to, uint256 tokenId) internal virtual override {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burned(tokenId), \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721Rarible.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Base.sol\";\n\ncontract ERC721Rarible is ERC721Base {\n\n event CreateERC721Rarible(address owner, string name, string symbol);\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external initializer {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/HasContractURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/IsPrivateCollection.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" - }, - "@rarible/tokens/contracts/LibURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibURI {\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\n function checkPrefix(string memory base, string memory _tokenURI)\n internal\n pure\n returns (string memory)\n {\n bytes memory whatBytes = bytes(base);\n bytes memory whereBytes = bytes(_tokenURI);\n\n if (whatBytes.length > whereBytes.length) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n\n for (uint256 j = 0; j < whatBytes.length; j++) {\n if (whereBytes[j] != whatBytes[j]) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n }\n\n return _tokenURI;\n }\n}\n" - }, - "@rarible/tokens/contracts/Mint721Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\n\ncontract Mint721Validator is ERC1271Validator {\n function __Mint721Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint721\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nabstract contract ITransferExecutor {\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal virtual;\n}\n" - }, - "@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../lib/LibDeal.sol\";\nimport \"./ITransferExecutor.sol\";\n\nabstract contract ITransferManager is ITransferExecutor {\n\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\n}" - }, - "@rarible/transfer-manager/contracts/lib/LibDeal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\nimport \"./LibFeeSide.sol\";\n\nlibrary LibDeal {\n struct DealSide {\n LibAsset.Asset asset;\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n address proxy;\n address from;\n }\n}\n" - }, - "@rarible/transfer-manager/contracts/lib/LibFeeSide.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibFeeSide {\n\n enum FeeSide {NONE, LEFT, RIGHT}\n\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n return FeeSide.NONE;\n }\n}\n" - }, - "@rarible/transfer-manager/contracts/lib/LibTransfer.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibTransfer {\n function transferEth(address to, uint value) internal {\n (bool success,) = to.call{ value: value }(\"\");\n require(success, \"transfer failed\");\n }\n}\n" - }, - "@rarible/transfer-manager/contracts/RaribleTransferManager.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n ProtocolFeeData memory _protocolFee,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param _protocolFee protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n ProtocolFeeData memory _protocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = _protocolFee.buyerAmount;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" - }, - "@rarible/transfer-manager/contracts/TransferExecutor.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" - }, - "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract PunkTransferProxy is OperatorRole, ITransferProxy {\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, uint punkIndex) = abi.decode(asset.assetType.data, (address, uint));\n ICryptoPunksMarket punkToken = ICryptoPunksMarket(token);\n //check punk from real owner\n require(punkToken.punkIndexToAddress(punkIndex) == from, \"Seller not punk owner\");\n //buy punk to proxy, now proxy is owner\n punkToken.buyPunk(punkIndex);\n //Transfer ownership of a punk to buyer\n punkToken.transferPunk(to, punkIndex);\n }\n}" - }, - "src/AssetMatchersImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { AssetMatcherCollection } from \"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\";\n" - }, - "src/Auction.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {AuctionHouse1155} from \"@rarible/auction/contracts/1155/AuctionHouse1155.sol\";\nimport {AuctionHouse721} from \"@rarible/auction/contracts/721/AuctionHouse721.sol\";\nimport {Wrapper} from \"@rarible/auction/contracts/wrapper/Wrapper.sol\";" - }, - "src/ExchangeV2Import.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ExchangeV2} from \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {ExchangeMetaV2} from \"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\";" - }, - "src/ExchangeWrapperImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" - }, - "src/RaribleExchangeWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {RaribleExchangeWrapper} from \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" - }, - "src/RoyaltiesRegistryImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {RoyaltiesProviderV2Legacy} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol\";\nimport {RoyaltiesProviderArtBlocks} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol\";\nimport {RoyaltiesProviderArtBlocksV2} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol\";\n" - }, - "src/TokensImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\n//tokens 721\nimport {ERC721Rarible} from \"@rarible/tokens/contracts/erc-721/ERC721Rarible.sol\";\nimport {ERC721RaribleMinimal} from \"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport {ERC721RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\";\n\n//tokens 1155\nimport {ERC1155Rarible} from \"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\";\nimport {ERC1155RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\";\n\n//meta tokens\nimport {ERC721RaribleMeta} from \"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\";\nimport {ERC1155RaribleMeta} from \"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\";\n\n//beacons\nimport {ERC1155RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\";\nimport {ERC721RaribleMinimalBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\";\nimport {ERC721RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol\";\nimport {ERC1155RaribleBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\";\nimport {ERC721RaribleMinimalBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\";\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" - }, - "src/TransferProxiesImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ERC721LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\";\nimport {ERC1155LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\nimport {PunkTransferProxy} from \"@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol\";\n" - }, - "src/TransparentUpgradeableProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/proxy/ProxyAdmin.sol\";\n" - }, - "test/contracts/ERC721LazyMintTest.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol\";\n" - }, - "test/contracts/RaribleTestHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" - }, - "test/contracts/TestERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155 } from \"@rarible/test/contracts/TestERC1155.sol\";\n\n" - }, - "test/contracts/TestERC1155RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol\";\n\n" - }, - "test/contracts/TestERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" - }, - "test/contracts/TestERC721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721 } from \"@rarible/test/contracts/TestERC721.sol\";\n" - }, - "test/contracts/TestERC721RoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV1 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol\";\n" - }, - "test/contracts/TestERC721RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol\";\n\n" - }, - "test/contracts/WrapperHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport { WrapperHelper } from \"@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol\";" - }, - "test/exchange/contracts/RaribleTestHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" - } - }, - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/deployments/sepolia/solcInputs/bf917ed004d0f3f4e7ddfe1dd4d0856b.json b/projects/hardhat-deploy/deployments/sepolia/solcInputs/bf917ed004d0f3f4e7ddfe1dd4d0856b.json deleted file mode 100644 index afa2c8217..000000000 --- a/projects/hardhat-deploy/deployments/sepolia/solcInputs/bf917ed004d0f3f4e7ddfe1dd4d0856b.json +++ /dev/null @@ -1,617 +0,0 @@ -{ - "language": "Solidity", - "sources": { - "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal initializer {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n uint256[49] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,\n * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding\n * they need in their contracts using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * _Available since v3.4._\n */\nabstract contract EIP712Upgradeable is Initializable {\n /* solhint-disable var-name-mixedcase */\n bytes32 private _HASHED_NAME;\n bytes32 private _HASHED_VERSION;\n bytes32 private constant _TYPE_HASH = keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n /* solhint-enable var-name-mixedcase */\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n function __EIP712_init(string memory name, string memory version) internal initializer {\n __EIP712_init_unchained(name, version);\n }\n\n function __EIP712_init_unchained(string memory name, string memory version) internal initializer {\n bytes32 hashedName = keccak256(bytes(name));\n bytes32 hashedVersion = keccak256(bytes(version));\n _HASHED_NAME = hashedName;\n _HASHED_VERSION = hashedVersion;\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n return _buildDomainSeparator(_TYPE_HASH, _EIP712NameHash(), _EIP712VersionHash());\n }\n\n function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {\n return keccak256(\n abi.encode(\n typeHash,\n name,\n version,\n _getChainId(),\n address(this)\n )\n );\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", _domainSeparatorV4(), structHash));\n }\n\n function _getChainId() private view returns (uint256 chainId) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n // solhint-disable-next-line no-inline-assembly\n assembly {\n chainId := chainid()\n }\n }\n\n /**\n * @dev The hash of the name parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712NameHash() internal virtual view returns (bytes32) {\n return _HASHED_NAME;\n }\n\n /**\n * @dev The hash of the version parameter for the EIP712 domain.\n *\n * NOTE: This function reads from storage by default, but can be redefined to return a constant value if gas costs\n * are a concern.\n */\n function _EIP712VersionHash() internal virtual view returns (bytes32) {\n return _HASHED_VERSION;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165Upgradeable.sol\";\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Upgradeable is Initializable, IERC165Upgradeable {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n function __ERC165_init() internal initializer {\n __ERC165_init_unchained();\n }\n\n function __ERC165_init_unchained() internal initializer {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n uint256[49] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165Upgradeable {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\n// solhint-disable-next-line compiler-version\npragma solidity >=0.4.24 <0.8.0;\n\nimport \"../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since a proxied contract can't have a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {UpgradeableProxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n */\nabstract contract Initializable {\n\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(_initializing || _isConstructor() || !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /// @dev Returns true if and only if the function is running in the constructor\n function _isConstructor() private view returns (bool) {\n return !AddressUpgradeable.isContract(address(this));\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155HolderUpgradeable is Initializable, ERC1155ReceiverUpgradeable {\n function __ERC1155Holder_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ERC1155Holder_init_unchained();\n }\n\n function __ERC1155Holder_init_unchained() internal initializer {\n }\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155ReceiverUpgradeable is Initializable, ERC165Upgradeable, IERC1155ReceiverUpgradeable {\n function __ERC1155Receiver_init() internal initializer {\n __ERC165_init_unchained();\n __ERC1155Receiver_init_unchained();\n }\n\n function __ERC1155Receiver_init_unchained() internal initializer {\n _registerInterface(\n ERC1155ReceiverUpgradeable(address(0)).onERC1155Received.selector ^\n ERC1155ReceiverUpgradeable(address(0)).onERC1155BatchReceived.selector\n );\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\nimport \"./IERC1155MetadataURIUpgradeable.sol\";\nimport \"./IERC1155ReceiverUpgradeable.sol\";\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155Upgradeable.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURIUpgradeable is IERC1155Upgradeable {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155ReceiverUpgradeable is IERC165Upgradeable {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC20Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @dev Implementation of the {IERC20} interface.\n *\n * This implementation is agnostic to the way tokens are created. This means\n * that a supply mechanism has to be added in a derived contract using {_mint}.\n * For a generic mechanism see {ERC20PresetMinterPauser}.\n *\n * TIP: For a detailed writeup see our guide\n * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How\n * to implement supply mechanisms].\n *\n * We have followed general OpenZeppelin guidelines: functions revert instead\n * of returning `false` on failure. This behavior is nonetheless conventional\n * and does not conflict with the expectations of ERC20 applications.\n *\n * Additionally, an {Approval} event is emitted on calls to {transferFrom}.\n * This allows applications to reconstruct the allowance for all accounts just\n * by listening to said events. Other implementations of the EIP may not emit\n * these events, as it isn't required by the specification.\n *\n * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}\n * functions have been added to mitigate the well-known issues around setting\n * allowances. See {IERC20-approve}.\n */\ncontract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable {\n using SafeMathUpgradeable for uint256;\n\n mapping (address => uint256) private _balances;\n\n mapping (address => mapping (address => uint256)) private _allowances;\n\n uint256 private _totalSupply;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for {name} and {symbol}, initializes {decimals} with\n * a default value of 18.\n *\n * To select a different value for {decimals}, use {_setupDecimals}.\n *\n * All three of these values are immutable: they can only be set once during\n * construction.\n */\n function __ERC20_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC20_init_unchained(name_, symbol_);\n }\n\n function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n _decimals = 18;\n }\n\n /**\n * @dev Returns the name of the token.\n */\n function name() public view virtual returns (string memory) {\n return _name;\n }\n\n /**\n * @dev Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view virtual returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is\n * called.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view virtual returns (uint8) {\n return _decimals;\n }\n\n /**\n * @dev See {IERC20-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @dev See {IERC20-balanceOf}.\n */\n function balanceOf(address account) public view virtual override returns (uint256) {\n return _balances[account];\n }\n\n /**\n * @dev See {IERC20-transfer}.\n *\n * Requirements:\n *\n * - `recipient` cannot be the zero address.\n * - the caller must have a balance of at least `amount`.\n */\n function transfer(address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(_msgSender(), recipient, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-allowance}.\n */\n function allowance(address owner, address spender) public view virtual override returns (uint256) {\n return _allowances[owner][spender];\n }\n\n /**\n * @dev See {IERC20-approve}.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function approve(address spender, uint256 amount) public virtual override returns (bool) {\n _approve(_msgSender(), spender, amount);\n return true;\n }\n\n /**\n * @dev See {IERC20-transferFrom}.\n *\n * Emits an {Approval} event indicating the updated allowance. This is not\n * required by the EIP. See the note at the beginning of {ERC20}.\n *\n * Requirements:\n *\n * - `sender` and `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n * - the caller must have allowance for ``sender``'s tokens of at least\n * `amount`.\n */\n function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {\n _transfer(sender, recipient, amount);\n _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, \"ERC20: transfer amount exceeds allowance\"));\n return true;\n }\n\n /**\n * @dev Atomically increases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n */\n function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));\n return true;\n }\n\n /**\n * @dev Atomically decreases the allowance granted to `spender` by the caller.\n *\n * This is an alternative to {approve} that can be used as a mitigation for\n * problems described in {IERC20-approve}.\n *\n * Emits an {Approval} event indicating the updated allowance.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `spender` must have allowance for the caller of at least\n * `subtractedValue`.\n */\n function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {\n _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, \"ERC20: decreased allowance below zero\"));\n return true;\n }\n\n /**\n * @dev Moves tokens `amount` from `sender` to `recipient`.\n *\n * This is internal function is equivalent to {transfer}, and can be used to\n * e.g. implement automatic token fees, slashing mechanisms, etc.\n *\n * Emits a {Transfer} event.\n *\n * Requirements:\n *\n * - `sender` cannot be the zero address.\n * - `recipient` cannot be the zero address.\n * - `sender` must have a balance of at least `amount`.\n */\n function _transfer(address sender, address recipient, uint256 amount) internal virtual {\n require(sender != address(0), \"ERC20: transfer from the zero address\");\n require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n _beforeTokenTransfer(sender, recipient, amount);\n\n _balances[sender] = _balances[sender].sub(amount, \"ERC20: transfer amount exceeds balance\");\n _balances[recipient] = _balances[recipient].add(amount);\n emit Transfer(sender, recipient, amount);\n }\n\n /** @dev Creates `amount` tokens and assigns them to `account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: mint to the zero address\");\n\n _beforeTokenTransfer(address(0), account, amount);\n\n _totalSupply = _totalSupply.add(amount);\n _balances[account] = _balances[account].add(amount);\n emit Transfer(address(0), account, amount);\n }\n\n /**\n * @dev Destroys `amount` tokens from `account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens.\n */\n function _burn(address account, uint256 amount) internal virtual {\n require(account != address(0), \"ERC20: burn from the zero address\");\n\n _beforeTokenTransfer(account, address(0), amount);\n\n _balances[account] = _balances[account].sub(amount, \"ERC20: burn amount exceeds balance\");\n _totalSupply = _totalSupply.sub(amount);\n emit Transfer(account, address(0), amount);\n }\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.\n *\n * This internal function is equivalent to `approve`, and can be used to\n * e.g. set automatic allowances for certain subsystems, etc.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `owner` cannot be the zero address.\n * - `spender` cannot be the zero address.\n */\n function _approve(address owner, address spender, uint256 amount) internal virtual {\n require(owner != address(0), \"ERC20: approve from the zero address\");\n require(spender != address(0), \"ERC20: approve to the zero address\");\n\n _allowances[owner][spender] = amount;\n emit Approval(owner, spender, amount);\n }\n\n /**\n * @dev Sets {decimals} to a value other than the default one of 18.\n *\n * WARNING: This function should only be called from the constructor. Most\n * applications that interact with token contracts will not expect\n * {decimals} to ever change, and may work incorrectly if it does.\n */\n function _setupDecimals(uint8 decimals_) internal virtual {\n _decimals = decimals_;\n }\n\n /**\n * @dev Hook that is called before any transfer of tokens. This includes\n * minting and burning.\n *\n * Calling conditions:\n *\n * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * will be to transferred to `to`.\n * - when `from` is zero, `amount` tokens will be minted for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }\n uint256[44] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20Upgradeable {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721HolderUpgradeable is Initializable, IERC721ReceiverUpgradeable {\n function __ERC721Holder_init() internal initializer {\n __ERC721Holder_init_unchained();\n }\n\n function __ERC721Holder_init_unchained() internal initializer {\n }\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../utils/ContextUpgradeable.sol\";\nimport \"./IERC721Upgradeable.sol\";\nimport \"./IERC721MetadataUpgradeable.sol\";\nimport \"./IERC721EnumerableUpgradeable.sol\";\nimport \"./IERC721ReceiverUpgradeable.sol\";\nimport \"../../introspection/ERC165Upgradeable.sol\";\nimport \"../../math/SafeMathUpgradeable.sol\";\nimport \"../../utils/AddressUpgradeable.sol\";\nimport \"../../utils/EnumerableSetUpgradeable.sol\";\nimport \"../../utils/EnumerableMapUpgradeable.sol\";\nimport \"../../utils/StringsUpgradeable.sol\";\nimport \"../../proxy/Initializable.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) private _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap private _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits an {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[41] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721EnumerableUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the total amount of tokens stored by the contract.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns a token ID owned by `owner` at a given `index` of its token list.\n * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);\n\n /**\n * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.\n * Use along with {totalSupply} to enumerate all tokens.\n */\n function tokenByIndex(uint256 index) external view returns (uint256);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC721Upgradeable.sol\";\n\n/**\n * @title ERC-721 Non-Fungible Token Standard, optional metadata extension\n * @dev See https://eips.ethereum.org/EIPS/eip-721\n */\ninterface IERC721MetadataUpgradeable is IERC721Upgradeable {\n\n /**\n * @dev Returns the token collection name.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the token collection symbol.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.\n */\n function tokenURI(uint256 tokenId) external view returns (string memory);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721ReceiverUpgradeable {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" - }, - "@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165Upgradeable.sol\";\n\n/**\n * @dev Required interface of an ERC721 compliant contract.\n */\ninterface IERC721Upgradeable is IERC165Upgradeable {\n /**\n * @dev Emitted when `tokenId` token is transferred from `from` to `to`.\n */\n event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.\n */\n event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);\n\n /**\n * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.\n */\n event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\n\n /**\n * @dev Returns the number of tokens in ``owner``'s account.\n */\n function balanceOf(address owner) external view returns (uint256 balance);\n\n /**\n * @dev Returns the owner of the `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function ownerOf(uint256 tokenId) external view returns (address owner);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Transfers `tokenId` token from `from` to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 tokenId) external;\n\n /**\n * @dev Gives permission to `to` to transfer `tokenId` token to another account.\n * The approval is cleared when the token is transferred.\n *\n * Only a single account can be approved at a time, so approving the zero address clears previous approvals.\n *\n * Requirements:\n *\n * - The caller must own the token or be an approved operator.\n * - `tokenId` must exist.\n *\n * Emits an {Approval} event.\n */\n function approve(address to, uint256 tokenId) external;\n\n /**\n * @dev Returns the account approved for `tokenId` token.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function getApproved(uint256 tokenId) external view returns (address operator);\n\n /**\n * @dev Approve or remove `operator` as an operator for the caller.\n * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.\n *\n * Requirements:\n *\n * - The `operator` cannot be the caller.\n *\n * Emits an {ApprovalForAll} event.\n */\n function setApprovalForAll(address operator, bool _approved) external;\n\n /**\n * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.\n *\n * See {setApprovalForAll}\n */\n function isApprovedForAll(address owner, address operator) external view returns (bool);\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal initializer {\n __Context_init_unchained();\n }\n\n function __Context_init_unchained() internal initializer {\n }\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n uint256[50] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing an enumerable variant of Solidity's\n * https://solidity.readthedocs.io/en/latest/types.html#mapping-types[`mapping`]\n * type.\n *\n * Maps have the following properties:\n *\n * - Entries are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Entries are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableMap for EnumerableMap.UintToAddressMap;\n *\n * // Declare a set state variable\n * EnumerableMap.UintToAddressMap private myMap;\n * }\n * ```\n *\n * As of v3.0.0, only maps of type `uint256 -> address` (`UintToAddressMap`) are\n * supported.\n */\nlibrary EnumerableMapUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Map type with\n // bytes32 keys and values.\n // The Map implementation uses private functions, and user-facing\n // implementations (such as Uint256ToAddressMap) are just wrappers around\n // the underlying Map.\n // This means that we can only create new EnumerableMaps for types that fit\n // in bytes32.\n\n struct MapEntry {\n bytes32 _key;\n bytes32 _value;\n }\n\n struct Map {\n // Storage of map keys and values\n MapEntry[] _entries;\n\n // Position of the entry defined by a key in the `entries` array, plus 1\n // because index 0 means a key is not in the map.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex == 0) { // Equivalent to !contains(map, key)\n map._entries.push(MapEntry({ _key: key, _value: value }));\n // The entry is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n map._indexes[key] = map._entries.length;\n return true;\n } else {\n map._entries[keyIndex - 1]._value = value;\n return false;\n }\n }\n\n /**\n * @dev Removes a key-value pair from a map. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function _remove(Map storage map, bytes32 key) private returns (bool) {\n // We read and store the key's index to prevent multiple reads from the same storage slot\n uint256 keyIndex = map._indexes[key];\n\n if (keyIndex != 0) { // Equivalent to contains(map, key)\n // To delete a key-value pair from the _entries array in O(1), we swap the entry to delete with the last one\n // in the array, and then remove the last entry (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = keyIndex - 1;\n uint256 lastIndex = map._entries.length - 1;\n\n // When the entry to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n MapEntry storage lastEntry = map._entries[lastIndex];\n\n // Move the last entry to the index where the entry to delete is\n map._entries[toDeleteIndex] = lastEntry;\n // Update the index for the moved entry\n map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved entry was stored\n map._entries.pop();\n\n // Delete the index for the deleted slot\n delete map._indexes[key];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function _contains(Map storage map, bytes32 key) private view returns (bool) {\n return map._indexes[key] != 0;\n }\n\n /**\n * @dev Returns the number of key-value pairs in the map. O(1).\n */\n function _length(Map storage map) private view returns (uint256) {\n return map._entries.length;\n }\n\n /**\n * @dev Returns the key-value pair stored at position `index` in the map. O(1).\n *\n * Note that there are no guarantees on the ordering of entries inside the\n * array, and it may change when more entries are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {\n require(map._entries.length > index, \"EnumerableMap: index out of bounds\");\n\n MapEntry storage entry = map._entries[index];\n return (entry._key, entry._value);\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n */\n function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {\n uint256 keyIndex = map._indexes[key];\n if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)\n return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function _get(Map storage map, bytes32 key) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, \"EnumerableMap: nonexistent key\"); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n /**\n * @dev Same as {_get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {_tryGet}.\n */\n function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {\n uint256 keyIndex = map._indexes[key];\n require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)\n return map._entries[keyIndex - 1]._value; // All indexes are 1-based\n }\n\n // UintToAddressMap\n\n struct UintToAddressMap {\n Map _inner;\n }\n\n /**\n * @dev Adds a key-value pair to a map, or updates the value for an existing\n * key. O(1).\n *\n * Returns true if the key was added to the map, that is if it was not\n * already present.\n */\n function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {\n return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the key was removed from the map, that is if it was present.\n */\n function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {\n return _remove(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns true if the key is in the map. O(1).\n */\n function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {\n return _contains(map._inner, bytes32(key));\n }\n\n /**\n * @dev Returns the number of elements in the map. O(1).\n */\n function length(UintToAddressMap storage map) internal view returns (uint256) {\n return _length(map._inner);\n }\n\n /**\n * @dev Returns the element stored at position `index` in the set. O(1).\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {\n (bytes32 key, bytes32 value) = _at(map._inner, index);\n return (uint256(key), address(uint160(uint256(value))));\n }\n\n /**\n * @dev Tries to returns the value associated with `key`. O(1).\n * Does not revert if `key` is not in the map.\n *\n * _Available since v3.4._\n */\n function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {\n (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));\n return (success, address(uint160(uint256(value))));\n }\n\n /**\n * @dev Returns the value associated with `key`. O(1).\n *\n * Requirements:\n *\n * - `key` must be in the map.\n */\n function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key)))));\n }\n\n /**\n * @dev Same as {get}, with a custom error message when `key` is not in the map.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryGet}.\n */\n function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {\n return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Library for managing\n * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive\n * types.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time\n * (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using EnumerableSet for EnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * EnumerableSet.AddressSet private mySet;\n * }\n * ```\n *\n * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)\n * and `uint256` (`UintSet`) are supported.\n */\nlibrary EnumerableSetUpgradeable {\n // To implement this library for multiple types with as little code\n // repetition as possible, we write it in terms of a generic Set type with\n // bytes32 values.\n // The Set implementation uses private functions, and user-facing\n // implementations (such as AddressSet) are just wrappers around the\n // underlying Set.\n // This means that we can only create new EnumerableSets for types that fit\n // in bytes32.\n\n struct Set {\n // Storage of set values\n bytes32[] _values;\n\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping (bytes32 => uint256) _indexes;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function _add(Set storage set, bytes32 value) private returns (bool) {\n if (!_contains(set, value)) {\n set._values.push(value);\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value\n set._indexes[value] = set._values.length;\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function _remove(Set storage set, bytes32 value) private returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot\n uint256 valueIndex = set._indexes[value];\n\n if (valueIndex != 0) { // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n\n uint256 toDeleteIndex = valueIndex - 1;\n uint256 lastIndex = set._values.length - 1;\n\n // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs\n // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.\n\n bytes32 lastvalue = set._values[lastIndex];\n\n // Move the last value to the index where the value to delete is\n set._values[toDeleteIndex] = lastvalue;\n // Update the index for the moved value\n set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based\n\n // Delete the slot where the moved value was stored\n set._values.pop();\n\n // Delete the index for the deleted slot\n delete set._indexes[value];\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function _contains(Set storage set, bytes32 value) private view returns (bool) {\n return set._indexes[value] != 0;\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function _length(Set storage set) private view returns (uint256) {\n return set._values.length;\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function _at(Set storage set, uint256 index) private view returns (bytes32) {\n require(set._values.length > index, \"EnumerableSet: index out of bounds\");\n return set._values[index];\n }\n\n // Bytes32Set\n\n struct Bytes32Set {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _add(set._inner, value);\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {\n return _remove(set._inner, value);\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {\n return _contains(set._inner, value);\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(Bytes32Set storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {\n return _at(set._inner, index);\n }\n\n // AddressSet\n\n struct AddressSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n return _add(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n return _remove(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _contains(set._inner, bytes32(uint256(uint160(value))));\n }\n\n /**\n * @dev Returns the number of values in the set. O(1).\n */\n function length(AddressSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n return address(uint160(uint256(_at(set._inner, index))));\n }\n\n\n // UintSet\n\n struct UintSet {\n Set _inner;\n }\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, that is if it was not\n * already present.\n */\n function add(UintSet storage set, uint256 value) internal returns (bool) {\n return _add(set._inner, bytes32(value));\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set, that is if it was\n * present.\n */\n function remove(UintSet storage set, uint256 value) internal returns (bool) {\n return _remove(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns true if the value is in the set. O(1).\n */\n function contains(UintSet storage set, uint256 value) internal view returns (bool) {\n return _contains(set._inner, bytes32(value));\n }\n\n /**\n * @dev Returns the number of values on the set. O(1).\n */\n function length(UintSet storage set) internal view returns (uint256) {\n return _length(set._inner);\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(UintSet storage set, uint256 index) internal view returns (uint256) {\n return uint256(_at(set._inner, index));\n }\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\nimport \"../proxy/Initializable.sol\";\n\n/**\n * @dev Contract module that helps prevent reentrant calls to a function.\n *\n * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier\n * available, which can be applied to functions to make sure there are no nested\n * (reentrant) calls to them.\n *\n * Note that because there is a single `nonReentrant` guard, functions marked as\n * `nonReentrant` may not call one another. This can be worked around by making\n * those functions `private`, and then adding `external` `nonReentrant` entry\n * points to them.\n *\n * TIP: If you would like to learn more about reentrancy and alternative ways\n * to protect against it, check out our blog post\n * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].\n */\nabstract contract ReentrancyGuardUpgradeable is Initializable {\n // Booleans are more expensive than uint256 or any type that takes up a full\n // word because each write operation emits an extra SLOAD to first read the\n // slot's contents, replace the bits taken up by the boolean, and then write\n // back. This is the compiler's defense against contract upgrades and\n // pointer aliasing, and it cannot be disabled.\n\n // The values being non-zero value makes deployment a bit more expensive,\n // but in exchange the refund on every call to nonReentrant will be lower in\n // amount. Since refunds are capped to a percentage of the total\n // transaction's gas, it is best to keep them low in cases like this one, to\n // increase the likelihood of the full refund coming into effect.\n uint256 private constant _NOT_ENTERED = 1;\n uint256 private constant _ENTERED = 2;\n\n uint256 private _status;\n\n function __ReentrancyGuard_init() internal initializer {\n __ReentrancyGuard_init_unchained();\n }\n\n function __ReentrancyGuard_init_unchained() internal initializer {\n _status = _NOT_ENTERED;\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n // On the first call to nonReentrant, _notEntered will be true\n require(_status != _ENTERED, \"ReentrancyGuard: reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n _status = _ENTERED;\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n _status = _NOT_ENTERED;\n }\n uint256[49] private __gap;\n}\n" - }, - "@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev String operations.\n */\nlibrary StringsUpgradeable {\n /**\n * @dev Converts a `uint256` to its ASCII `string` representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n // Inspired by OraclizeAPI's implementation - MIT licence\n // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol\n\n if (value == 0) {\n return \"0\";\n }\n uint256 temp = value;\n uint256 digits;\n while (temp != 0) {\n digits++;\n temp /= 10;\n }\n bytes memory buffer = new bytes(digits);\n uint256 index = digits - 1;\n temp = value;\n while (temp != 0) {\n buffer[index--] = bytes1(uint8(48 + temp % 10));\n temp /= 10;\n }\n return string(buffer);\n }\n}\n" - }, - "@openzeppelin/contracts/access/Ownable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../utils/Context.sol\";\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor () internal {\n address msgSender = _msgSender();\n _owner = msgSender;\n emit OwnershipTransferred(address(0), msgSender);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n emit OwnershipTransferred(_owner, address(0));\n _owner = address(0);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n emit OwnershipTransferred(_owner, newOwner);\n _owner = newOwner;\n }\n}\n" - }, - "@openzeppelin/contracts/introspection/ERC165.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165 is IERC165 {\n /*\n * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7\n */\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n constructor () internal {\n // Derived contracts need only register support for their own interfaces,\n // we register support for ERC165 itself here\n _registerInterface(_INTERFACE_ID_ERC165);\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n *\n * Time complexity O(1), guaranteed to always use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" - }, - "@openzeppelin/contracts/introspection/IERC165.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" - }, - "@openzeppelin/contracts/math/SafeMath.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n uint256 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n if (a == 0) return 0;\n uint256 c = a * b;\n require(c / a == b, \"SafeMath: multiplication overflow\");\n return c;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: division by zero\");\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n require(b > 0, \"SafeMath: modulo by zero\");\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b <= a, errorMessage);\n return a - b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryDiv}.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {\n require(b > 0, errorMessage);\n return a % b;\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/BeaconProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\nimport \"./IBeacon.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy {\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 private constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) public payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _setBeacon(beacon, data);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address beacon) {\n bytes32 slot = _BEACON_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n beacon := sload(slot)\n }\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_beacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n require(\n Address.isContract(beacon),\n \"BeaconProxy: beacon is not a contract\"\n );\n require(\n Address.isContract(IBeacon(beacon).implementation()),\n \"BeaconProxy: beacon implementation is not a contract\"\n );\n bytes32 slot = _BEACON_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, beacon)\n }\n\n if (data.length > 0) {\n Address.functionDelegateCall(_implementation(), data, \"BeaconProxy: function call failed\");\n }\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/IBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" - }, - "@openzeppelin/contracts/proxy/Proxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n // solhint-disable-next-line no-inline-assembly\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 { revert(0, returndatasize()) }\n default { return(0, returndatasize()) }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive () external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/ProxyAdmin.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../access/Ownable.sol\";\nimport \"./TransparentUpgradeableProxy.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(TransparentUpgradeableProxy proxy, address implementation, bytes memory data) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/TransparentUpgradeableProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./UpgradeableProxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is UpgradeableProxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {UpgradeableProxy-constructor}.\n */\n constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _setAdmin(admin_);\n }\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _admin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _admin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n require(newAdmin != address(0), \"TransparentUpgradeableProxy: new admin is the zero address\");\n emit AdminChanged(_admin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external virtual ifAdmin {\n _upgradeTo(newImplementation);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin {\n _upgradeTo(newImplementation);\n Address.functionDelegateCall(newImplementation, data);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address adm) {\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n adm := sload(slot)\n }\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n bytes32 slot = _ADMIN_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newAdmin)\n }\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _admin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../access/Ownable.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n constructor(address implementation_) public {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" - }, - "@openzeppelin/contracts/proxy/UpgradeableProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Proxy.sol\";\nimport \"../utils/Address.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n *\n * Upgradeability is only provided internally through {_upgradeTo}. For an externally upgradeable proxy see\n * {TransparentUpgradeableProxy}.\n */\ncontract UpgradeableProxy is Proxy {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) public payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _setImplementation(_logic);\n if(_data.length > 0) {\n Address.functionDelegateCall(_logic, _data);\n }\n }\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n bytes32 slot = _IMPLEMENTATION_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n impl := sload(slot)\n }\n }\n\n /**\n * @dev Upgrades the proxy to a new implementation.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal virtual {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableProxy: new implementation is not a contract\");\n\n bytes32 slot = _IMPLEMENTATION_SLOT;\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, newImplementation)\n }\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/ERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155.sol\";\nimport \"./IERC1155MetadataURI.sol\";\nimport \"./IERC1155Receiver.sol\";\nimport \"../../utils/Context.sol\";\nimport \"../../introspection/ERC165.sol\";\nimport \"../../math/SafeMath.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {\n using SafeMath for uint256;\n using Address for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) private _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n constructor (string memory uri_) public {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; i++) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Receiver.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\ncontract ERC1155Holder is ERC1155Receiver {\n function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155Received.selector;\n }\n\n function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override returns (bytes4) {\n return this.onERC1155BatchReceived.selector;\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/ERC1155Receiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC1155Receiver.sol\";\nimport \"../../introspection/ERC165.sol\";\n\n/**\n * @dev _Available since v3.1._\n */\nabstract contract ERC1155Receiver is ERC165, IERC1155Receiver {\n constructor() internal {\n _registerInterface(\n ERC1155Receiver(address(0)).onERC1155Received.selector ^\n ERC1155Receiver(address(0)).onERC1155BatchReceived.selector\n );\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/IERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * @dev Required interface of an ERC1155 compliant contract, as defined in the\n * https://eips.ethereum.org/EIPS/eip-1155[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155 is IERC165 {\n /**\n * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.\n */\n event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);\n\n /**\n * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all\n * transfers.\n */\n event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);\n\n /**\n * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to\n * `approved`.\n */\n event ApprovalForAll(address indexed account, address indexed operator, bool approved);\n\n /**\n * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.\n *\n * If an {URI} event was emitted for `id`, the standard\n * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value\n * returned by {IERC1155MetadataURI-uri}.\n */\n event URI(string value, uint256 indexed id);\n\n /**\n * @dev Returns the amount of tokens of token type `id` owned by `account`.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) external view returns (uint256);\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);\n\n /**\n * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,\n *\n * Emits an {ApprovalForAll} event.\n *\n * Requirements:\n *\n * - `operator` cannot be the caller.\n */\n function setApprovalForAll(address operator, bool approved) external;\n\n /**\n * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.\n *\n * See {setApprovalForAll}.\n */\n function isApprovedForAll(address account, address operator) external view returns (bool);\n\n /**\n * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.\n * - `from` must have a balance of tokens of type `id` of at least `amount`.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.\n *\n * Emits a {TransferBatch} event.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/IERC1155MetadataURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./IERC1155.sol\";\n\n/**\n * @dev Interface of the optional ERC1155MetadataExtension interface, as defined\n * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].\n *\n * _Available since v3.1._\n */\ninterface IERC1155MetadataURI is IERC1155 {\n /**\n * @dev Returns the URI for token type `id`.\n *\n * If the `\\{id\\}` substring is present in the URI, it must be replaced by\n * clients with the actual token type ID.\n */\n function uri(uint256 id) external view returns (string memory);\n}\n" - }, - "@openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"../../introspection/IERC165.sol\";\n\n/**\n * _Available since v3.1._\n */\ninterface IERC1155Receiver is IERC165 {\n\n /**\n @dev Handles the receipt of a single ERC1155 token type. This function is\n called at the end of a `safeTransferFrom` after the balance has been updated.\n To accept the transfer, this must return\n `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))`\n (i.e. 0xf23a6e61, or its own function selector).\n @param operator The address which initiated the transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param id The ID of the token being transferred\n @param value The amount of tokens being transferred\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155Received(address,address,uint256,uint256,bytes)\"))` if transfer is allowed\n */\n function onERC1155Received(\n address operator,\n address from,\n uint256 id,\n uint256 value,\n bytes calldata data\n )\n external\n returns(bytes4);\n\n /**\n @dev Handles the receipt of a multiple ERC1155 token types. This function\n is called at the end of a `safeBatchTransferFrom` after the balances have\n been updated. To accept the transfer(s), this must return\n `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))`\n (i.e. 0xbc197c81, or its own function selector).\n @param operator The address which initiated the batch transfer (i.e. msg.sender)\n @param from The address which previously owned the token\n @param ids An array containing ids of each token being transferred (order and length must match values array)\n @param values An array containing amounts of each token being transferred (order and length must match ids array)\n @param data Additional data with no specified format\n @return `bytes4(keccak256(\"onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)\"))` if transfer is allowed\n */\n function onERC1155BatchReceived(\n address operator,\n address from,\n uint256[] calldata ids,\n uint256[] calldata values,\n bytes calldata data\n )\n external\n returns(bytes4);\n}\n" - }, - "@openzeppelin/contracts/token/ERC721/ERC721Holder.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./IERC721Receiver.sol\";\n\n /**\n * @dev Implementation of the {IERC721Receiver} interface.\n *\n * Accepts all token transfers. \n * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}.\n */\ncontract ERC721Holder is IERC721Receiver {\n\n /**\n * @dev See {IERC721Receiver-onERC721Received}.\n *\n * Always returns `IERC721Receiver.onERC721Received.selector`.\n */\n function onERC721Received(address, address, uint256, bytes memory) public virtual override returns (bytes4) {\n return this.onERC721Received.selector;\n }\n}\n" - }, - "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @title ERC721 token receiver interface\n * @dev Interface for any contract that wants to support safeTransfers\n * from ERC721 asset contracts.\n */\ninterface IERC721Receiver {\n /**\n * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}\n * by `operator` from `from`, this function is called.\n *\n * It must return its Solidity selector to confirm the token transfer.\n * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.\n *\n * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.\n */\n function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);\n}\n" - }, - "@openzeppelin/contracts/utils/Address.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\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 // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n // solhint-disable-next-line no-inline-assembly\n assembly { size := extcodesize(account) }\n return size > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n // solhint-disable-next-line avoid-low-level-calls, 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 /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain`call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.call{ value: value }(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.staticcall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return _verifyCallResult(success, returndata, errorMessage);\n }\n\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" - }, - "@openzeppelin/contracts/utils/Context.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/*\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with GSN meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address payable) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes memory) {\n this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691\n return msg.data;\n }\n}\n" - }, - "@openzeppelin/contracts/utils/Pausable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n bool private _paused;\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n constructor () internal {\n _paused = false;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n require(!paused(), \"Pausable: paused\");\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n require(paused(), \"Pausable: not paused\");\n _;\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" - }, - "@rarible/auction/contracts/1155/AuctionHouse1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase1155.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse1155 is ERC1155HolderUpgradeable, AuctionHouseBase1155 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse1155_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC1155Receiver_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse1155_init_unchained();\n }\n\n function __AuctionHouse1155_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint96 _sellTokenValue,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC1155 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(_sellTokenValue > 0, \"incorrect _sellTokenValue\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenValue,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n\n transferNFT(\n _sellToken, \n _sellTokenId, \n _sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n sender,\n address(this)\n );\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime if it's not set\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId) internal {\n emit AuctionFinished(_auctionId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n address seller = currentAuction.seller;\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n currentAuction.sellTokenValue, \n LibAsset.ERC1155_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n currentAuction.sellTokenValue,\n LibAsset.ERC1155_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC1155_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n \n deactivateAuction(_auctionId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return this.supportsInterface(interfaceId);\n }\n\n}" - }, - "@rarible/auction/contracts/1155/AuctionHouseBase1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase1155 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint96 sellTokenValue;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n\n}" - }, - "@rarible/auction/contracts/721/AuctionHouse721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./AuctionHouseBase721.sol\";\nimport \"../wrapper/TokenToAuction.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol\";\n\n/// @dev contract to create and interact with auctions\ncontract AuctionHouse721 is ERC721HolderUpgradeable, TokenToAuction, AuctionHouseBase721 {\n using SafeMathUpgradeable96 for uint96;\n using SafeMathUpgradeable for uint;\n\n function __AuctionHouse721_init(\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider,\n address _transferProxy,\n address _erc20TransferProxy,\n uint64 newProtocolFee,\n uint96 _minimalStepBasePoint\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __ERC721Holder_init_unchained();\n __ReentrancyGuard_init_unchained();\n __AuctionHouseBase_init_unchained(_minimalStepBasePoint);\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider); \n __AuctionHouse721_init_unchained();\n }\n\n function __AuctionHouse721_init_unchained() internal initializer { \n }\n\n /// @dev creates an auction and locks sell asset\n function startAuction(\n address _sellToken,\n uint _sellTokenId,\n address _buyAsset,\n uint96 minimalPrice,\n bytes4 dataType,\n bytes memory data\n ) external {\n //todo: check if token contract supports ERC721 interface?\n\n uint _protocolFee;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(data, dataType);\n require(aucData.duration >= minimalDuration && aucData.duration <= MAX_DURATION, \"incorrect duration\");\n require(getValueFromData(aucData.originFee) + _protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n uint currentAuctionId = getNextAndIncrementAuctionId();\n address payable sender = _msgSender();\n Auction memory auc = Auction(\n _sellToken,\n _sellTokenId,\n _buyAsset,\n 0,\n Bid(0, \"\", \"\"),\n sender,\n minimalPrice,\n payable(address(0)),\n uint64(_protocolFee),\n dataType,\n data\n );\n auctions[currentAuctionId] = auc;\n transferNFT(\n _sellToken, \n _sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n sender,\n address(this)\n );\n setAuctionForToken(_sellToken, _sellTokenId, currentAuctionId);\n \n emit AuctionCreated(currentAuctionId, sender);\n }\n\n /// @dev put a bid and return locked assets for the last bid\n function putBid(uint _auctionId, Bid memory bid) payable public nonReentrant {\n address payable newBuyer = _msgSender();\n uint newAmount = bid.amount;\n Auction memory currentAuction = auctions[_auctionId];\n uint96 endTime = currentAuction.endTime;\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, newBuyer);\n }\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n if (buyOutVerify(aucData, newAmount)) {\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n newBuyer\n );\n return;\n }\n \n uint96 currentTime = uint96(block.timestamp);\n //start action if minimal price is met\n if (currentAuction.buyer == address(0x0)) {//no bid at all\n // set endTime\n endTime = currentTime.add(aucData.duration);\n auctions[_auctionId].endTime = endTime;\n require(newAmount >= currentAuction.minimalPrice, \"bid too small\");\n } else {//there is bid in auction\n require(currentAuction.buyer != newBuyer, \"already winning bid\");\n uint256 minAmount = _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n require(newAmount >= minAmount, \"bid too low\");\n }\n\n address proxy = _getProxy(currentAuction.buyAsset);\n reserveBid(\n currentAuction.buyAsset,\n currentAuction.buyer,\n newBuyer,\n currentAuction.lastBid,\n proxy,\n bid.amount\n );\n auctions[_auctionId].lastBid = bid;\n auctions[_auctionId].buyer = newBuyer;\n\n // auction is extended for EXTENSION_DURATION or minimalDuration if (minimalDuration < EXTENSION_DURATION)\n uint96 minDur = minimalDuration;\n uint96 extension = (minDur < EXTENSION_DURATION) ? minDur : EXTENSION_DURATION;\n\n // extends auction time if it's about to end\n if (endTime.sub(currentTime) < extension) {\n endTime = currentTime.add(extension);\n auctions[_auctionId].endTime = endTime;\n }\n emit BidPlaced(_auctionId, newBuyer, endTime);\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function getMinimalNextBid(uint _auctionId) external view returns (uint minBid){\n Auction memory currentAuction = auctions[_auctionId];\n return _getMinimalNextBid(currentAuction.buyer, currentAuction.minimalPrice, currentAuction.lastBid.amount);\n }\n\n /// @dev returns true if auction exists, false otherwise\n function checkAuctionExistence(uint _auctionId) external view returns (bool){\n return _checkAuctionExistence(auctions[_auctionId].seller);\n }\n\n /// @dev finishes, deletes and transfers all assets for an auction if it's ended (it exists, it has at least one bid, now > endTme)\n function finishAuction(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n require(_checkAuctionExistence(currentAuction.seller), \"there is no auction with this id\");\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n require(\n !_checkAuctionRangeTime(currentAuction.endTime, aucData.startTime) &&\n currentAuction.buyer != address(0),\n \"only ended auction with bid can be finished\"\n );\n uint bidOriginFee = LibBidDataV1.parse(currentAuction.lastBid.data, currentAuction.lastBid.dataType).originFee;\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n currentAuction.lastBid.amount\n ),\n getPayouts(currentAuction.buyer),\n getOriginFee(bidOriginFee),\n _getProxy(currentAuction.buyAsset),\n address(this)\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n }\n\n /// @dev returns true if auction started and hasn't finished yet, false otherwise\n function checkAuctionRangeTime(uint _auctionId) external view returns (bool){\n return _checkAuctionRangeTime(auctions[_auctionId].endTime, LibAucDataV1.parse(auctions[_auctionId].data, auctions[_auctionId].dataType).startTime);\n }\n\n /// @dev deletes auction after finalizing\n function deactivateAuction(uint _auctionId, address token, uint tokenId) internal {\n emit AuctionFinished(_auctionId);\n deleteAuctionForToken(token, tokenId);\n delete auctions[_auctionId];\n }\n\n /// @dev cancels existing auction without bid\n function cancel(uint _auctionId) external nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n address seller = currentAuction.seller;\n require(_checkAuctionExistence(seller), \"there is no auction with this id\");\n require(seller == _msgSender(), \"auction owner not detected\");\n require(currentAuction.buyer == address(0), \"can't cancel auction with bid\");\n transferNFT(\n currentAuction.sellToken, \n currentAuction.sellTokenId, \n 1, \n LibAsset.ERC721_ASSET_CLASS,\n address(this),\n seller\n );\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionCancelled(_auctionId);\n }\n\n // todo will there be a problem if buyer is last bidder?\n /// @dev buyout auction if bid satisfies buyout condition\n function buyOut(uint _auctionId, Bid memory bid) external payable nonReentrant {\n Auction memory currentAuction = auctions[_auctionId];\n LibAucDataV1.DataV1 memory aucData = LibAucDataV1.parse(currentAuction.data, currentAuction.dataType);\n checkAuctionInProgress(currentAuction.seller, currentAuction.endTime, aucData.startTime);\n uint bidOriginFee = LibBidDataV1.parse(bid.data, bid.dataType).originFee;\n\n require(buyOutVerify(aucData, bid.amount), \"not enough for buyout\");\n require(getValueFromData(aucData.originFee) + getValueFromData(bidOriginFee) + currentAuction.protocolFee <= MAX_FEE_BASE_POINT, \"wrong fees\");\n \n address sender = _msgSender();\n if (currentAuction.buyAsset == address(0)) {\n checkEthReturnChange(bid.amount, sender);\n }\n _buyOut(\n currentAuction,\n bid,\n aucData,\n _auctionId,\n bidOriginFee,\n sender\n );\n }\n\n function _buyOut(\n Auction memory currentAuction,\n Bid memory bid,\n LibAucDataV1.DataV1 memory aucData,\n uint _auctionId,\n uint newBidOriginFee,\n address sender\n ) internal {\n address proxy = _getProxy(currentAuction.buyAsset);\n\n _returnBid(\n currentAuction.lastBid,\n currentAuction.buyAsset,\n currentAuction.buyer,\n proxy\n );\n\n address from;\n if (currentAuction.buyAsset == address(0)) {\n // if buyAsset = ETH\n from = address(this);\n } else {\n // if buyAsset = ERC20\n from = sender;\n }\n\n doTransfers(\n LibDeal.DealSide(\n getSellAsset(\n currentAuction.sellToken, \n currentAuction.sellTokenId,\n 1,\n LibAsset.ERC721_ASSET_CLASS\n ),\n getPayouts(currentAuction.seller),\n getOriginFee(aucData.originFee),\n proxies[LibAsset.ERC721_ASSET_CLASS],\n address(this)\n ), \n LibDeal.DealSide(\n getBuyAsset(\n currentAuction.buyAsset,\n bid.amount\n ),\n getPayouts(sender),\n getOriginFee(newBidOriginFee),\n proxy,\n from\n ), \n LibFeeSide.FeeSide.RIGHT\n );\n\n deactivateAuction(_auctionId, currentAuction.sellToken, currentAuction.sellTokenId);\n emit AuctionBuyOut(auctionId, sender);\n }\n\n /// @dev returns current highest bidder for an auction\n function getCurrentBuyer(uint _auctionId) external view returns(address) {\n return auctions[_auctionId].buyer;\n }\n\n /// @dev function to call from wrapper to put bid\n function putBidWrapper(uint256 _auctionId) external payable {\n require(auctions[_auctionId].buyAsset == address(0), \"only ETH bids allowed\");\n putBid(_auctionId, Bid(msg.value, LibBidDataV1.V1, \"\"));\n }\n\n}" - }, - "@rarible/auction/contracts/721/AuctionHouseBase721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../AuctionHouseBase.sol\";\n\nabstract contract AuctionHouseBase721 is AuctionHouseBase {\n\n /// @dev mapping to store data of auctions for auctionId\n mapping(uint => Auction) auctions;\n\n /// @dev auction struct\n struct Auction {\n // asset that is being sold at auction\n address sellToken;\n uint sellTokenId;\n // asset type that bids are taken in\n address buyAsset;\n // the time when auction ends\n uint96 endTime;\n // information about the current highest bid\n Bid lastBid;\n // seller address\n address payable seller;\n // the minimal amount of the first bid\n uint96 minimalPrice;\n // buyer address\n address payable buyer;\n // protocolFee at the time of the purchase\n uint64 protocolFee;\n // version of Auction to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Auction, can be seen in \"LibAucDataV1.sol\"\n bytes data;\n }\n}" - }, - "@rarible/auction/contracts/AuctionHouseBase.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libs/LibAucDataV1.sol\";\nimport \"./libs/LibBidDataV1.sol\";\nimport \"./libs/SafeMathUpgradeable96.sol\";\n\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nabstract contract AuctionHouseBase is OwnableUpgradeable, ReentrancyGuardUpgradeable, RaribleTransferManager, TransferExecutor {\n using LibTransfer for address;\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n /// @dev default minimal auction duration and also the time for that auction is extended when it's about to end (endTime - now < EXTENSION_DURATION)\n uint96 internal constant EXTENSION_DURATION = 15 minutes;\n\n /// @dev maximum auction duration\n uint128 internal constant MAX_DURATION = 1000 days;\n\n /// @dev maximum fee base point\n uint internal constant MAX_FEE_BASE_POINT = 1000;\n\n /// @dev mapping to store eth amount that is ready to be withdrawn (used for faulty eth-bids)\n mapping(address => uint) readyToWithdraw;\n\n /// @dev latest auctionId\n uint256 public auctionId;\n\n /// @dev minimal auction duration\n uint96 public minimalDuration;\n\n /// @dev minimal bid increase in base points\n uint96 public minimalStepBasePoint;\n\n /// @dev bid struct\n struct Bid {\n // the amount \n uint amount;\n // version of Bid to correctly decode data field\n bytes4 dataType;\n // field to store additional information for Bid, can be seen in \"LibBidDataV1.sol\"\n bytes data;\n }\n\n /// @dev event that emits when auction is created\n event AuctionCreated(uint indexed auctionId, address seller);\n /// @dev event that emits when bid is placed\n event BidPlaced(uint indexed auctionId, address buyer, uint endTime);\n /// @dev event that emits when auction is finished\n event AuctionFinished(uint indexed auctionId);\n /// @dev event that emits when auction is canceled\n event AuctionCancelled(uint indexed auctionId);\n /// @dev event that emits when auction is bought out\n event AuctionBuyOut(uint indexed auctionId, address buyer);\n\n /// @dev event that's emitted when user can withdraw ETH from the AuctionHouse\n event AvailableToWithdraw(address indexed owner, uint added, uint total);\n /// @dev event that's emitted when minimal auction duration changes\n event MinimalDurationChanged(uint oldValue, uint newValue);\n\n event MinimalStepChanged(uint oldValue, uint newValue);\n\n function __AuctionHouseBase_init_unchained(\n uint96 _minimalStepBasePoint\n ) internal initializer {\n auctionId = 1;\n minimalDuration = EXTENSION_DURATION;\n minimalStepBasePoint = _minimalStepBasePoint;\n }\n\n /// @dev increments auctionId and returns new value\n function getNextAndIncrementAuctionId() internal returns (uint256) {\n return auctionId++;\n }\n\n function changeMinimalDuration(uint96 newValue) external onlyOwner {\n emit MinimalDurationChanged(minimalDuration, newValue);\n minimalDuration = newValue;\n }\n\n function changeMinimalStep(uint96 newValue) external onlyOwner {\n emit MinimalStepChanged(minimalStepBasePoint, newValue);\n minimalStepBasePoint = newValue;\n }\n\n function transferNFT (\n address token,\n uint tokenId,\n uint value,\n bytes4 assetClass,\n address from,\n address to\n ) internal {\n transfer(\n getSellAsset(\n token,\n tokenId,\n value,\n assetClass\n ),\n from,\n to,\n proxies[assetClass]\n );\n }\n\n function transferBid(\n uint value,\n address token,\n address from,\n address to,\n address proxy\n ) internal {\n transfer(\n getBuyAsset(\n token,\n value\n ),\n from,\n to,\n proxy\n );\n }\n\n function getSellAsset(address token, uint tokenId, uint value, bytes4 assetClass) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n asset.assetType.assetClass = assetClass;\n asset.assetType.data = abi.encode(token, tokenId);\n }\n\n function getBuyAsset(address token, uint value) internal pure returns(LibAsset.Asset memory asset) {\n asset.value = value;\n\n if (token == address(0)){\n asset.assetType.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n asset.assetType.assetClass = LibAsset.ERC20_ASSET_CLASS;\n asset.assetType.data = abi.encode(token);\n }\n }\n\n function getPayouts(address maker) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(maker);\n payout[0].value = 10000;\n return payout;\n }\n\n function getOriginFee(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee = new LibPart.Part[](1);\n originFee[0].account = payable(address(data));\n originFee[0].value = uint96(getValueFromData(data));\n return originFee;\n }\n\n function _checkAuctionRangeTime(uint endTime, uint startTime) internal view returns (bool){\n uint currentTime = block.timestamp;\n if (startTime > 0 && startTime > currentTime) {\n return false;\n }\n if (endTime > 0 && endTime <= currentTime){\n return false;\n }\n\n return true;\n }\n\n /// @dev returns true if newAmount is enough for buyOut\n function buyOutVerify(LibAucDataV1.DataV1 memory aucData, uint newAmount) internal pure returns (bool) {\n if (aucData.buyOutPrice > 0 && aucData.buyOutPrice <= newAmount) {\n return true;\n }\n return false;\n }\n\n /// @dev returns true if auction exists, false otherwise\n function _checkAuctionExistence(address seller) internal pure returns (bool){\n return seller != address(0);\n }\n\n /// @dev Used to withdraw faulty bids (bids that failed to return after out-bidding)\n function withdrawFaultyBid(address _to) external {\n address sender = _msgSender();\n uint amount = readyToWithdraw[sender];\n require( amount > 0, \"nothing to withdraw\");\n readyToWithdraw[sender] = 0;\n _to.transferEth(amount);\n }\n\n function _returnBid(\n Bid memory oldBid,\n address buyAsset,\n address oldBuyer,\n address proxy\n ) internal {\n // nothing to return\n if (oldBuyer == address(0)) {\n return;\n }\n if (buyAsset == address(0)) {\n (bool success,) = oldBuyer.call{ value: oldBid.amount }(\"\");\n if (!success) {\n uint currentValueToWithdraw = readyToWithdraw[oldBuyer];\n uint newValueToWithdraw = oldBid.amount.add(currentValueToWithdraw);\n readyToWithdraw[oldBuyer] = newValueToWithdraw;\n emit AvailableToWithdraw(oldBuyer, oldBid.amount, newValueToWithdraw);\n }\n } else {\n transferBid(\n oldBid.amount,\n buyAsset,\n address(this),\n oldBuyer,\n proxy\n );\n }\n }\n\n function _getProxy(address buyAsset) internal view returns(address){\n address proxy;\n if (buyAsset != address(0)){\n proxy = proxies[LibAsset.ERC20_ASSET_CLASS];\n }\n return proxy;\n }\n\n /// @dev check that msg.value more than bid amount with fees and return change\n function checkEthReturnChange(uint totalAmount, address buyer) internal {\n uint msgValue = msg.value;\n require(msgValue >= totalAmount, \"not enough ETH\");\n uint256 change = msgValue.sub(totalAmount);\n if (change > 0) {\n buyer.transferEth(change);\n }\n }\n\n /// @dev returns true if auction in progress, false otherwise\n function checkAuctionInProgress(address seller, uint endTime, uint startTime) internal view{\n require(_checkAuctionExistence(seller) && _checkAuctionRangeTime(endTime, startTime), \"auction is inactive\");\n }\n\n /// @dev reserves new bid and returns the last one if it exists\n function reserveBid(\n address buyAsset,\n address oldBuyer,\n address newBuyer,\n Bid memory oldBid,\n address proxy,\n uint newTotalAmount\n ) internal {\n // return old bid if theres any\n _returnBid(\n oldBid,\n buyAsset,\n oldBuyer,\n proxy\n );\n \n //lock new bid\n transferBid(\n newTotalAmount,\n buyAsset,\n newBuyer,\n address(this),\n proxy\n );\n }\n\n /// @dev returns the minimal amount of the next bid (without fees)\n function _getMinimalNextBid(address buyer, uint96 minimalPrice, uint amount) internal view returns (uint minBid){\n if (buyer == address(0x0)) {\n minBid = minimalPrice;\n } else {\n minBid = amount.add(amount.bp(minimalStepBasePoint));\n }\n }\n\n function getValueFromData(uint data) internal pure returns(uint) {\n return (data >> 160);\n }\n\n uint256[50] private ______gap;\n}" - }, - "@rarible/auction/contracts/libs/LibAucDataV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Auction struct\nlibrary LibAucDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Auction data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n // auction duration\n uint96 duration;\n // auction startTime\n uint96 startTime;\n // auction buyout price\n uint96 buyOutPrice;\n }\n\n /// @dev returns parsed data field of an Auction (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n }\n } else {\n revert(\"wrong auction dataType\");\n }\n }\n}\n\n" - }, - "@rarible/auction/contracts/libs/LibBidDataV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n/// @dev library that works with data field of Bid struct\nlibrary LibBidDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n /// @dev struct of Bid data field, version 1\n struct DataV1 {\n // auction originFees\n uint originFee;\n }\n\n /// @dev returns parsed data field of a Bid (so returns DataV1 struct)\n function parse(bytes memory data, bytes4 dataType) internal pure returns (DataV1 memory aucData) {\n if (dataType == V1) {\n if (data.length > 0){\n aucData = abi.decode(data, (DataV1));\n } \n } else {\n revert(\"wrong bid dataType\");\n }\n }\n}\n" - }, - "@rarible/auction/contracts/libs/SafeMathUpgradeable96.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations with added overflow\n * checks.\n *\n * Arithmetic operations in Solidity wrap on overflow. This can easily result\n * in bugs, because programmers usually assume that an overflow raises an\n * error, which is the standard behavior in high level programming languages.\n * `SafeMath` restores this intuition by reverting the transaction when an\n * operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeMathUpgradeable96 {\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint96 a, uint96 b) internal pure returns (uint96) {\n uint96 c = a + b;\n require(c >= a, \"SafeMath: addition overflow\");\n return c;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint96 a, uint96 b) internal pure returns (uint96) {\n require(b <= a, \"SafeMath: subtraction overflow\");\n return a - b;\n }\n\n}\n" - }, - "@rarible/auction/contracts/wrapper/IMarketWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/**\n * @title IMarketWrapper\n * @author Anna Carroll\n * @notice IMarketWrapper provides a common interface for\n * interacting with NFT auction markets.\n * Contracts can abstract their interactions with\n * different NFT markets using IMarketWrapper.\n * NFT markets can become compatible with any contract\n * using IMarketWrapper by deploying a MarketWrapper contract\n * that implements this interface using the logic of their Market.\n *\n * WARNING: MarketWrapper contracts should NEVER write to storage!\n * When implementing a MarketWrapper, exercise caution; a poorly implemented\n * MarketWrapper contract could permanently lose access to the NFT or user funds.\n */\ninterface IMarketWrapper {\n /**\n * @notice Given the auctionId, nftContract, and tokenId, check that:\n * 1. the auction ID matches the token\n * referred to by tokenId + nftContract\n * 2. the auctionId refers to an *ACTIVE* auction\n * (e.g. an auction that will accept bids)\n * within this market contract\n * 3. any additional validation to ensure that\n * a PartyBid can bid on this auction\n * (ex: if the market allows arbitrary bidding currencies,\n * check that the auction currency is ETH)\n * Note: This function probably should have been named \"isValidAuction\"\n * @dev Called in PartyBid.sol in `initialize` at line 174\n * @return TRUE if the auction is valid\n */\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external view returns (bool);\n\n /**\n * @notice Calculate the minimum next bid for this auction.\n * PartyBid contracts always submit the minimum possible\n * bid that will be accepted by the Market contract.\n * usually, this is either the reserve price (if there are no bids)\n * or a certain percentage increase above the current highest bid\n * @dev Called in PartyBid.sol in `bid` at line 251\n * @return minimum bid amount\n */\n function getMinimumBid(uint256 auctionId) external view returns (uint256);\n\n /**\n * @notice Query the current highest bidder for this auction\n * It is assumed that there is always 1 winning highest bidder for an auction\n * This is used to ensure that PartyBid cannot outbid itself if it is already winning\n * @dev Called in PartyBid.sol in `bid` at line 241\n * @return highest bidder\n */\n function getCurrentHighestBidder(uint256 auctionId)\n external\n view\n returns (address);\n\n /**\n * @notice Submit bid to Market contract\n * @dev Called in PartyBid.sol in `bid` at line 259\n */\n function bid(uint256 auctionId, uint256 bidAmount) external;\n\n /**\n * @notice Determine whether the auction has been finalized\n * Used to check if it is still possible to bid\n * And to determine whether the PartyBid should finalize the auction\n * @dev Called in PartyBid.sol in `bid` at line 247\n * @dev and in `finalize` at line 288\n * @return TRUE if the auction has been finalized\n */\n function isFinalized(uint256 auctionId) external view returns (bool);\n\n /**\n * @notice Finalize the results of the auction\n * on the Market contract\n * It is assumed that this operation is performed once for each auction,\n * that after it is done the auction is over and the NFT has been\n * transferred to the auction winner.\n * @dev Called in PartyBid.sol in `finalize` at line 289\n */\n function finalize(uint256 auctionId) external;\n}" - }, - "@rarible/auction/contracts/wrapper/TokenToAuction.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\n/// @dev contract to add tokenToAuctionId functionality to auctionHouse\ncontract TokenToAuction {\n /// @dev mapping to store auction ids for token address + token id (only stores erc-721 tokens)\n mapping(address => mapping(uint256 => uint256)) private tokenToAuctionId;\n\n /// @dev returns auction id by token address and token id\n function getAuctionByToken(address _collection, uint tokenId) external view returns(uint) {\n return tokenToAuctionId[_collection][tokenId];\n }\n\n /// @dev sets auction id for token address and token id\n function setAuctionForToken(address token, uint tokenId, uint auctionId) internal {\n tokenToAuctionId[token][tokenId] = auctionId;\n }\n\n /// @dev deletes auctionId from tokenToAuctionId\n function deleteAuctionForToken(address token, uint tokenId) internal {\n delete tokenToAuctionId[token][tokenId];\n }\n \n uint256[50] private ______gap;\n}" - }, - "@rarible/auction/contracts/wrapper/Wrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\npragma solidity 0.7.6;\n\nimport \"./IMarketWrapper.sol\";\nimport \"../721/AuctionHouse721.sol\";\n\ncontract Wrapper is IMarketWrapper{\n\n AuctionHouse721 internal immutable auction;\n\n constructor(address _auction) {\n auction = AuctionHouse721(_auction);\n }\n\n function auctionIdMatchesToken(\n uint256 auctionId,\n address nftContract,\n uint256 tokenId\n ) external override view returns (bool){\n return auctionId == auction. getAuctionByToken(nftContract, tokenId);\n }\n\n function getMinimumBid(uint256 auctionId) external override view returns (uint256){\n return auction.getMinimalNextBid(auctionId);\n }\n\n function getCurrentHighestBidder(uint256 auctionId)\n external\n override\n view\n returns (address){\n return auction.getCurrentBuyer(auctionId);\n }\n\n function bid(uint256 auctionId, uint256 bidAmount) external override{\n (bool success, bytes memory returnData) =\n address(auction).call{value: bidAmount}(\n abi.encodeWithSignature(\"putBidWrapper(uint256)\", auctionId)\n );\n require(success, string(returnData));\n }\n\n function isFinalized(uint256 auctionId) external override view returns (bool){\n return !auction.checkAuctionExistence(auctionId);\n }\n\n function finalize(uint256 auctionId) external override{\n auction.finishAuction(auctionId);\n }\n}" - }, - "@rarible/custom-matchers/contracts/AssetMatcherCollection.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\n/*\n * Custom matcher for collection (assetClass, that need any/all elements from collection)\n */\ncontract AssetMatcherCollection is IAssetMatcher {\n\n bytes constant EMPTY = \"\";\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) external view override returns (LibAsset.AssetType memory) {\n if (\n (rightAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) || \n (rightAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) ||\n (rightAssetType.assetClass == LibAsset.CRYPTO_PUNKS)\n ) {\n (address leftToken) = abi.decode(leftAssetType.data, (address));\n (address rightToken,) = abi.decode(rightAssetType.data, (address, uint));\n if (leftToken == rightToken) {\n return LibAsset.AssetType(rightAssetType.assetClass, rightAssetType.data);\n }\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n}" - }, - "@rarible/exchange-interfaces/contracts/IAssetMatcher.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface IAssetMatcher {\n function matchAssets(\n LibAsset.AssetType memory leftAssetType,\n LibAsset.AssetType memory rightAssetType\n ) external view returns (LibAsset.AssetType memory);\n}\n" - }, - "@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface ICryptoPunksMarket {\n //to get address punk owner from mapping (uint => address) public punkIndexToAddress;\n function punkIndexToAddress(uint key) external returns (address);\n\n function buyPunk(uint punkIndex) payable external;\n\n function transferPunk(address to, uint punkIndex) external;\n\n function offerPunkForSaleToAddress(uint punkIndex, uint minSalePriceInWei, address toAddress) external;\n}" - }, - "@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\ninterface IERC20TransferProxy {\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) external;\n}\n" - }, - "@rarible/exchange-interfaces/contracts/INftTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\ninterface INftTransferProxy {\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) external;\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) external;\n}\n" - }, - "@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) external returns (LibPart.Part[] memory);\n}\n" - }, - "@rarible/exchange-interfaces/contracts/ITransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\ninterface ITransferProxy {\n function transfer(LibAsset.Asset calldata asset, address from, address to) external;\n}\n" - }, - "@rarible/exchange-v2/contracts/AssetMatcher.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract AssetMatcher is Initializable, OwnableUpgradeable {\n\n bytes constant EMPTY = \"\";\n mapping(bytes4 => address) internal matchers;\n\n event MatcherChange(bytes4 indexed assetType, address matcher);\n\n function setAssetMatcher(bytes4 assetType, address matcher) external onlyOwner {\n matchers[assetType] = matcher;\n emit MatcherChange(assetType, matcher);\n }\n\n function matchAssets(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) internal view returns (LibAsset.AssetType memory) {\n LibAsset.AssetType memory result = matchAssetOneSide(leftAssetType, rightAssetType);\n if (result.assetClass == 0) {\n return matchAssetOneSide(rightAssetType, leftAssetType);\n } else {\n return result;\n }\n }\n\n function matchAssetOneSide(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private view returns (LibAsset.AssetType memory) {\n bytes4 classLeft = leftAssetType.assetClass;\n bytes4 classRight = rightAssetType.assetClass;\n if (classLeft == LibAsset.ETH_ASSET_CLASS) {\n if (classRight == LibAsset.ETH_ASSET_CLASS) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC20_ASSET_CLASS) {\n if (classRight == LibAsset.ERC20_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC721_ASSET_CLASS) {\n if (classRight == LibAsset.ERC721_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n if (classLeft == LibAsset.ERC1155_ASSET_CLASS) {\n if (classRight == LibAsset.ERC1155_ASSET_CLASS) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n address matcher = matchers[classLeft];\n if (matcher != address(0)) {\n return IAssetMatcher(matcher).matchAssets(leftAssetType, rightAssetType);\n }\n if (classLeft == classRight) {\n return simpleMatch(leftAssetType, rightAssetType);\n }\n revert(\"not found IAssetMatcher\");\n }\n\n function simpleMatch(LibAsset.AssetType memory leftAssetType, LibAsset.AssetType memory rightAssetType) private pure returns (LibAsset.AssetType memory) {\n bytes32 leftHash = keccak256(leftAssetType.data);\n bytes32 rightHash = keccak256(rightAssetType.data);\n if (leftHash == rightHash) {\n return leftAssetType;\n }\n return LibAsset.AssetType(0, EMPTY);\n }\n\n uint256[49] private __gap;\n}\n" - }, - "@rarible/exchange-v2/contracts/ExchangeMetaV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeMetaV2 is ExchangeV2Core, RaribleTransferManager, EIP712MetaTransaction {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __OrderValidator_init_unchained();\n __MetaTransaction_init_unchained(\"ExchangeMetaV2\", \"1\");\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/ExchangeV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ExchangeV2Core.sol\";\nimport \"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\";\n\ncontract ExchangeV2 is ExchangeV2Core, RaribleTransferManager {\n function __ExchangeV2_init(\n address _transferProxy,\n address _erc20TransferProxy,\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n __TransferExecutor_init_unchained(_transferProxy, _erc20TransferProxy);\n __RaribleTransferManager_init_unchained(newProtocolFee, newDefaultFeeReceiver, newRoyaltiesProvider);\n __OrderValidator_init_unchained();\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/ExchangeV2Core.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./libraries/LibFill.sol\";\nimport \"./libraries/LibOrderData.sol\";\nimport \"./libraries/LibDirectTransfer.sol\";\nimport \"./OrderValidator.sol\";\nimport \"./AssetMatcher.sol\";\n\nimport \"@rarible/transfer-manager/contracts/TransferExecutor.sol\";\nimport \"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\";\nimport \"@rarible/transfer-manager/contracts/lib/LibDeal.sol\";\n\nabstract contract ExchangeV2Core is Initializable, OwnableUpgradeable, AssetMatcher, TransferExecutor, OrderValidator, ITransferManager {\n using SafeMathUpgradeable for uint;\n using LibTransfer for address;\n\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n //state of the orders\n mapping(bytes32 => uint) public fills;\n\n //events\n event Cancel(bytes32 hash);\n event Match(bytes32 leftHash, bytes32 rightHash, uint newLeftFill, uint newRightFill);\n\n function cancel(LibOrder.Order memory order) external {\n require(_msgSender() == order.maker, \"not a maker\");\n require(order.salt != 0, \"0 salt can't be used\");\n bytes32 orderKeyHash = LibOrder.hashKey(order);\n fills[orderKeyHash] = UINT256_MAX;\n emit Cancel(orderKeyHash);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for purchase transaction\n \n */\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable{\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n \n LibOrder.Order memory sellOrder = LibOrder.Order(\n direct.sellOrderMaker,\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n direct.sellOrderSalt,\n direct.sellOrderStart,\n direct.sellOrderEnd,\n direct.sellOrderDataType,\n direct.sellOrderData\n );\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.buyOrderPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.buyOrderNftAmount\n ),\n 0,\n 0,\n 0,\n direct.sellOrderDataType,\n direct.buyOrderData\n );\n\n validateFull(sellOrder, direct.sellOrderSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n /**\n * @dev function, generate sellOrder and buyOrder from parameters and call validateAndMatch() for accept bid transaction\n * @param direct struct with parameters for accept bid operation\n */\n function directAcceptBid(\n LibDirectTransfer.AcceptBid calldata direct\n ) external payable {\n LibAsset.AssetType memory paymentAssetType = getPaymentAssetType(direct.paymentToken);\n\n LibOrder.Order memory buyOrder = LibOrder.Order(\n direct.bidMaker,\n LibAsset.Asset(\n paymentAssetType,\n direct.bidPaymentAmount\n ),\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.bidNftAmount\n ),\n direct.bidSalt,\n direct.bidStart,\n direct.bidEnd,\n direct.bidDataType,\n direct.bidData\n );\n\n LibOrder.Order memory sellOrder = LibOrder.Order(\n address(0),\n LibAsset.Asset(\n LibAsset.AssetType(\n direct.nftAssetClass,\n direct.nftData\n ),\n direct.sellOrderNftAmount\n ),\n address(0),\n LibAsset.Asset(\n paymentAssetType,\n direct.sellOrderPaymentAmount\n ),\n 0,\n 0,\n 0,\n direct.bidDataType,\n direct.sellOrderData\n );\n\n validateFull(buyOrder, direct.bidSignature);\n\n matchAndTransfer(sellOrder, buyOrder);\n }\n\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable {\n validateOrders(orderLeft, signatureLeft, orderRight, signatureRight);\n matchAndTransfer(orderLeft, orderRight);\n }\n\n /**\n * @dev function, validate orders\n * @param orderLeft left order\n * @param signatureLeft order left signature\n * @param orderRight right order\n * @param signatureRight order right signature\n */\n function validateOrders(LibOrder.Order memory orderLeft, bytes memory signatureLeft, LibOrder.Order memory orderRight, bytes memory signatureRight) internal view {\n validateFull(orderLeft, signatureLeft);\n validateFull(orderRight, signatureRight);\n if (orderLeft.taker != address(0)) {\n if (orderRight.maker != address(0))\n require(orderRight.maker == orderLeft.taker, \"leftOrder.taker verification failed\");\n }\n if (orderRight.taker != address(0)) {\n if (orderLeft.maker != address(0))\n require(orderRight.taker == orderLeft.maker, \"rightOrder.taker verification failed\");\n }\n }\n\n /**\n @notice matches valid orders and transfers their assets\n @param orderLeft the left order of the match\n @param orderRight the right order of the match\n */\n function matchAndTransfer(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal {\n (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) = matchAssets(orderLeft, orderRight);\n\n (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) =\n parseOrdersSetFillEmitMatch(orderLeft, orderRight);\n\n (uint totalMakeValue, uint totalTakeValue) = doTransfers(\n LibDeal.DealSide({\n asset: LibAsset.Asset({\n assetType: makeMatch,\n value: newFill.leftValue\n }),\n payouts: leftOrderData.payouts,\n originFees: leftOrderData.originFees,\n proxy: proxies[makeMatch.assetClass],\n from: orderLeft.maker\n }), \n LibDeal.DealSide({\n asset: LibAsset.Asset( \n takeMatch,\n newFill.rightValue\n ),\n payouts: rightOrderData.payouts,\n originFees: rightOrderData.originFees,\n proxy: proxies[takeMatch.assetClass],\n from: orderRight.maker\n }),\n LibFeeSide.getFeeSide(makeMatch.assetClass, takeMatch.assetClass)\n );\n if (makeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(takeMatch.assetClass != LibAsset.ETH_ASSET_CLASS);\n require(msg.value >= totalMakeValue, \"not enough eth\");\n if (msg.value > totalMakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalMakeValue));\n }\n } else if (takeMatch.assetClass == LibAsset.ETH_ASSET_CLASS) {\n require(msg.value >= totalTakeValue, \"not enough eth\");\n if (msg.value > totalTakeValue) {\n address(msg.sender).transferEth(msg.value.sub(totalTakeValue));\n }\n }\n }\n\n function parseOrdersSetFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight\n ) internal returns (LibOrderData.GenericOrderData memory leftOrderData, LibOrderData.GenericOrderData memory rightOrderData, LibFill.FillResult memory newFill) {\n bytes32 leftOrderKeyHash = LibOrder.hashKey(orderLeft);\n bytes32 rightOrderKeyHash = LibOrder.hashKey(orderRight);\n\n address msgSender = _msgSender();\n if (orderLeft.maker == address(0)) {\n orderLeft.maker = msgSender;\n }\n if (orderRight.maker == address(0)) {\n orderRight.maker = msgSender;\n }\n\n leftOrderData = LibOrderData.parse(orderLeft);\n rightOrderData = LibOrderData.parse(orderRight);\n\n newFill = setFillEmitMatch(\n orderLeft,\n orderRight,\n leftOrderKeyHash,\n rightOrderKeyHash,\n leftOrderData.isMakeFill,\n rightOrderData.isMakeFill\n );\n }\n\n /**\n @notice calculates fills for the matched orders and set them in \"fills\" mapping\n @param orderLeft left order of the match\n @param orderRight right order of the match\n @param leftMakeFill true if the left orders uses make-side fills, false otherwise\n @param rightMakeFill true if the right orders uses make-side fills, false otherwise\n @return returns change in orders' fills by the match \n */\n function setFillEmitMatch(\n LibOrder.Order memory orderLeft,\n LibOrder.Order memory orderRight,\n bytes32 leftOrderKeyHash,\n bytes32 rightOrderKeyHash,\n bool leftMakeFill,\n bool rightMakeFill\n ) internal returns (LibFill.FillResult memory) {\n uint leftOrderFill = getOrderFill(orderLeft.salt, leftOrderKeyHash);\n uint rightOrderFill = getOrderFill(orderRight.salt, rightOrderKeyHash);\n LibFill.FillResult memory newFill = LibFill.fillOrder(orderLeft, orderRight, leftOrderFill, rightOrderFill, leftMakeFill, rightMakeFill);\n\n require(newFill.rightValue > 0 && newFill.leftValue > 0, \"nothing to fill\");\n\n if (orderLeft.salt != 0) {\n if (leftMakeFill) {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.leftValue);\n } else {\n fills[leftOrderKeyHash] = leftOrderFill.add(newFill.rightValue);\n }\n }\n\n if (orderRight.salt != 0) {\n if (rightMakeFill) {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.rightValue);\n } else {\n fills[rightOrderKeyHash] = rightOrderFill.add(newFill.leftValue);\n }\n }\n\n emit Match(leftOrderKeyHash, rightOrderKeyHash, newFill.rightValue, newFill.leftValue);\n\n return newFill;\n }\n\n function getOrderFill(uint salt, bytes32 hash) internal view returns (uint fill) {\n if (salt == 0) {\n fill = 0;\n } else {\n fill = fills[hash];\n }\n }\n\n function matchAssets(LibOrder.Order memory orderLeft, LibOrder.Order memory orderRight) internal view returns (LibAsset.AssetType memory makeMatch, LibAsset.AssetType memory takeMatch) {\n makeMatch = matchAssets(orderLeft.makeAsset.assetType, orderRight.takeAsset.assetType);\n require(makeMatch.assetClass != 0, \"assets don't match\");\n takeMatch = matchAssets(orderLeft.takeAsset.assetType, orderRight.makeAsset.assetType);\n require(takeMatch.assetClass != 0, \"assets don't match\");\n }\n\n function validateFull(LibOrder.Order memory order, bytes memory signature) internal view {\n LibOrder.validateOrderTime(order);\n validate(order, signature);\n }\n\n function getPaymentAssetType(address token) internal pure returns(LibAsset.AssetType memory){\n LibAsset.AssetType memory result;\n if(token == address(0)) {\n result.assetClass = LibAsset.ETH_ASSET_CLASS;\n } else {\n result.assetClass = LibAsset.ERC20_ASSET_CLASS;\n result.data = abi.encode(token);\n }\n return result;\n }\n\n uint256[49] private __gap;\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibDirectTransfer { //LibDirectTransfers\n /*All buy parameters need for create buyOrder and sellOrder*/\n struct Purchase {\n address sellOrderMaker; //\n uint256 sellOrderNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 sellOrderPaymentAmount;\n address paymentToken;\n uint256 sellOrderSalt;\n uint sellOrderStart;\n uint sellOrderEnd;\n bytes4 sellOrderDataType;\n bytes sellOrderData;\n bytes sellOrderSignature;\n\n uint256 buyOrderPaymentAmount;\n uint256 buyOrderNftAmount;\n bytes buyOrderData;\n }\n\n /*All accept bid parameters need for create buyOrder and sellOrder*/\n struct AcceptBid {\n address bidMaker; //\n uint256 bidNftAmount;\n bytes4 nftAssetClass;\n bytes nftData;\n uint256 bidPaymentAmount;\n address paymentToken;\n uint256 bidSalt;\n uint bidStart;\n uint bidEnd;\n bytes4 bidDataType;\n bytes bidData;\n bytes bidSignature;\n\n uint256 sellOrderPaymentAmount;\n uint256 sellOrderNftAmount;\n bytes sellOrderData;\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibFill.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibFill {\n struct FillResult {\n uint leftValue;\n uint rightValue;\n }\n\n struct IsMakeFill {\n bool leftMake;\n bool rightMake;\n }\n\n /**\n * @dev Should return filled values\n * @param leftOrder left order\n * @param rightOrder right order\n * @param leftOrderFill current fill of the left order (0 if order is unfilled)\n * @param rightOrderFill current fill of the right order (0 if order is unfilled)\n * @param leftIsMakeFill true if left orders fill is calculated from the make side, false if from the take side\n * @param rightIsMakeFill true if right orders fill is calculated from the make side, false if from the take side\n */\n function fillOrder(LibOrder.Order memory leftOrder, LibOrder.Order memory rightOrder, uint leftOrderFill, uint rightOrderFill, bool leftIsMakeFill, bool rightIsMakeFill) internal pure returns (FillResult memory) {\n (uint leftMakeValue, uint leftTakeValue) = LibOrder.calculateRemaining(leftOrder, leftOrderFill, leftIsMakeFill);\n (uint rightMakeValue, uint rightTakeValue) = LibOrder.calculateRemaining(rightOrder, rightOrderFill, rightIsMakeFill);\n\n //We have 3 cases here:\n if (rightTakeValue > leftMakeValue) { //1nd: left order should be fully filled\n return fillLeft(leftMakeValue, leftTakeValue, rightOrder.makeAsset.value, rightOrder.takeAsset.value);\n }//2st: right order should be fully filled or 3d: both should be fully filled if required values are the same\n return fillRight(leftOrder.makeAsset.value, leftOrder.takeAsset.value, rightMakeValue, rightTakeValue);\n }\n\n function fillRight(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint makerValue = LibMath.safeGetPartialAmountFloor(rightTakeValue, leftMakeValue, leftTakeValue);\n require(makerValue <= rightMakeValue, \"fillRight: unable to fill\");\n return FillResult(rightTakeValue, makerValue);\n }\n\n function fillLeft(uint leftMakeValue, uint leftTakeValue, uint rightMakeValue, uint rightTakeValue) internal pure returns (FillResult memory result) {\n uint rightTake = LibMath.safeGetPartialAmountFloor(leftTakeValue, rightMakeValue, rightTakeValue);\n require(rightTake <= leftMakeValue, \"fillLeft: unable to fill\");\n return FillResult(leftMakeValue, leftTakeValue);\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibMath.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary LibMath {\n using SafeMathUpgradeable for uint;\n\n /// @dev Calculates partial value given a numerator and denominator rounded down.\n /// Reverts if rounding error is >= 0.1%\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to calculate partial of.\n /// @return partialAmount value of target rounded down.\n function safeGetPartialAmountFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorFloor(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding down.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorFloor(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // The absolute rounding error is the difference between the rounded\n // value and the ideal value. The relative rounding error is the\n // absolute rounding error divided by the absolute value of the\n // ideal value. This is undefined when the ideal value is zero.\n //\n // The ideal value is `numerator * target / denominator`.\n // Let's call `numerator * target % denominator` the remainder.\n // The absolute error is `remainder / denominator`.\n //\n // When the ideal value is zero, we require the absolute error to\n // be zero. Fortunately, this is always the case. The ideal value is\n // zero iff `numerator == 0` and/or `target == 0`. In this case the\n // remainder and absolute error are also zero.\n if (target == 0 || numerator == 0) {\n return false;\n }\n\n // Otherwise, we want the relative rounding error to be strictly\n // less than 0.1%.\n // The relative error is `remainder / (numerator * target)`.\n // We want the relative error less than 1 / 1000:\n // remainder / (numerator * target) < 1 / 1000\n // or equivalently:\n // 1000 * remainder < numerator * target\n // so we have a rounding error iff:\n // 1000 * remainder >= numerator * target\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n isError = remainder.mul(1000) >= numerator.mul(target);\n }\n\n function safeGetPartialAmountCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (uint256 partialAmount) {\n if (isRoundingErrorCeil(numerator, denominator, target)) {\n revert(\"rounding error\");\n }\n partialAmount = numerator.mul(target).add(denominator.sub(1)).div(denominator);\n }\n\n /// @dev Checks if rounding error >= 0.1% when rounding up.\n /// @param numerator Numerator.\n /// @param denominator Denominator.\n /// @param target Value to multiply with numerator/denominator.\n /// @return isError Rounding error is present.\n function isRoundingErrorCeil(\n uint256 numerator,\n uint256 denominator,\n uint256 target\n ) internal pure returns (bool isError) {\n if (denominator == 0) {\n revert(\"division by zero\");\n }\n\n // See the comments in `isRoundingError`.\n if (target == 0 || numerator == 0) {\n // When either is zero, the ideal value and rounded value are zero\n // and there is no rounding error. (Although the relative error\n // is undefined.)\n return false;\n }\n // Compute remainder as before\n uint256 remainder = mulmod(\n target,\n numerator,\n denominator\n );\n remainder = denominator.sub(remainder) % denominator;\n isError = remainder.mul(1000) >= numerator.mul(target);\n return isError;\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrder.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nimport \"./LibMath.sol\";\nimport \"./LibOrderDataV3.sol\";\nimport \"./LibOrderDataV2.sol\";\nimport \"./LibOrderDataV1.sol\";\n\nlibrary LibOrder {\n using SafeMathUpgradeable for uint;\n\n bytes32 constant ORDER_TYPEHASH = keccak256(\n \"Order(address maker,Asset makeAsset,address taker,Asset takeAsset,uint256 salt,uint256 start,uint256 end,bytes4 dataType,bytes data)Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes4 constant DEFAULT_ORDER_TYPE = 0xffffffff;\n\n struct Order {\n address maker;\n LibAsset.Asset makeAsset;\n address taker;\n LibAsset.Asset takeAsset;\n uint salt;\n uint start;\n uint end;\n bytes4 dataType;\n bytes data;\n }\n\n function calculateRemaining(Order memory order, uint fill, bool isMakeFill) internal pure returns (uint makeValue, uint takeValue) {\n if (isMakeFill){\n makeValue = order.makeAsset.value.sub(fill);\n takeValue = LibMath.safeGetPartialAmountFloor(order.takeAsset.value, order.makeAsset.value, makeValue);\n } else {\n takeValue = order.takeAsset.value.sub(fill);\n makeValue = LibMath.safeGetPartialAmountFloor(order.makeAsset.value, order.takeAsset.value, takeValue); \n } \n }\n\n function hashKey(Order memory order) internal pure returns (bytes32) {\n if (order.dataType == LibOrderDataV1.V1 || order.dataType == DEFAULT_ORDER_TYPE) {\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt\n ));\n } else {\n //order.data is in hash for V2, V3 and all new order\n return keccak256(abi.encode(\n order.maker,\n LibAsset.hash(order.makeAsset.assetType),\n LibAsset.hash(order.takeAsset.assetType),\n order.salt,\n order.data\n ));\n }\n }\n\n function hash(Order memory order) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ORDER_TYPEHASH,\n order.maker,\n LibAsset.hash(order.makeAsset),\n order.taker,\n LibAsset.hash(order.takeAsset),\n order.salt,\n order.start,\n order.end,\n order.dataType,\n keccak256(order.data)\n ));\n }\n\n function validateOrderTime(LibOrder.Order memory order) internal view {\n require(order.start == 0 || order.start < block.timestamp, \"Order start validation failed\");\n require(order.end == 0 || order.end > block.timestamp, \"Order end validation failed\");\n }\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderData.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./LibOrder.sol\";\n\nlibrary LibOrderData {\n\n struct GenericOrderData {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n } \n\n function parse(LibOrder.Order memory order) pure internal returns (GenericOrderData memory dataOrder) {\n if (order.dataType == LibOrderDataV1.V1) {\n LibOrderDataV1.DataV1 memory data = abi.decode(order.data, (LibOrderDataV1.DataV1));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n } else if (order.dataType == LibOrderDataV2.V2) {\n LibOrderDataV2.DataV2 memory data = abi.decode(order.data, (LibOrderDataV2.DataV2));\n dataOrder.payouts = data.payouts;\n dataOrder.originFees = data.originFees;\n dataOrder.isMakeFill = data.isMakeFill;\n } else if (order.dataType == 0xffffffff) {\n } else {\n revert(\"Unknown Order data type\");\n }\n if (dataOrder.payouts.length == 0) {\n dataOrder.payouts = payoutSet(order.maker);\n }\n }\n\n function payoutSet(address orderAddress) pure internal returns (LibPart.Part[] memory) {\n LibPart.Part[] memory payout = new LibPart.Part[](1);\n payout[0].account = payable(orderAddress);\n payout[0].value = 10000;\n return payout;\n }\n\n function parseOriginFeeData(uint dataFirst, uint dataSecond) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory originFee;\n\n if (dataFirst > 0 && dataSecond > 0){\n originFee = new LibPart.Part[](2);\n\n originFee[0] = uintToLibPart(dataFirst);\n originFee[1] = uintToLibPart(dataSecond);\n }\n\n if (dataFirst > 0 && dataSecond == 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataFirst);\n }\n\n if (dataFirst == 0 && dataSecond > 0) {\n originFee = new LibPart.Part[](1);\n\n originFee[0] = uintToLibPart(dataSecond);\n }\n\n return originFee;\n }\n\n function parsePayouts(uint data) internal pure returns(LibPart.Part[] memory) {\n LibPart.Part[] memory payouts;\n\n if (data > 0) {\n payouts = new LibPart.Part[](1);\n payouts[0] = uintToLibPart(data);\n }\n\n return payouts;\n }\n\n /**\n @notice converts uint to LibPart.Part\n @param data address and value encoded in uint (first 12 bytes )\n @return result LibPart.Part \n */\n function uintToLibPart(uint data) internal pure returns(LibPart.Part memory result) {\n if (data > 0){\n result.account = payable(address(data));\n result.value = uint96(data >> 160);\n }\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV1 {\n bytes4 constant public V1 = bytes4(keccak256(\"V1\"));\n\n struct DataV1 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibOrderDataV2 {\n bytes4 constant public V2 = bytes4(keccak256(\"V2\"));\n\n struct DataV2 {\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n bool isMakeFill;\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\n/// @dev deprecated\nlibrary LibOrderDataV3 {\n bytes4 constant public V3_SELL = bytes4(keccak256(\"V3_SELL\"));\n bytes4 constant public V3_BUY = bytes4(keccak256(\"V3_BUY\"));\n\n struct DataV3_SELL {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n uint maxFeesBasePoint;\n bytes32 marketplaceMarker;\n }\n\n struct DataV3_BUY {\n uint payouts;\n uint originFeeFirst;\n uint originFeeSecond;\n bytes32 marketplaceMarker;\n }\n\n}\n" - }, - "@rarible/exchange-v2/contracts/OrderValidator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./libraries/LibOrder.sol\";\n\nimport \"@rarible/lib-signature/contracts/IERC1271.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\n\nabstract contract OrderValidator is Initializable, ContextUpgradeable, EIP712Upgradeable {\n using LibSignature for bytes32;\n using AddressUpgradeable for address;\n \n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function __OrderValidator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Exchange\", \"2\");\n }\n\n function validate(LibOrder.Order memory order, bytes memory signature) internal view {\n if (order.salt == 0) {\n if (order.maker != address(0)) {\n require(_msgSender() == order.maker, \"maker is not tx sender\");\n }\n } else {\n if (_msgSender() != order.maker) {\n bytes32 hash = LibOrder.hash(order);\n // if maker is contract checking ERC1271 signature\n if (order.maker.isContract()) {\n require(\n IERC1271(order.maker).isValidSignature(_hashTypedDataV4(hash), signature) == MAGICVALUE,\n \"contract order signature verification error\"\n );\n } else {\n // if maker is not contract then checking ECDSA signature\n if (_hashTypedDataV4(hash).recover(signature) != order.maker) {\n revert(\"order signature verification error\");\n } else {\n require (order.maker != address(0), \"no maker\");\n }\n }\n }\n }\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../../contracts/ExchangeV2.sol\";\n\ncontract RaribleTestHelper {\n function encode(LibOrderDataV1.DataV1 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV2(LibOrderDataV2.DataV2 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_SELL(LibOrderDataV3.DataV3_SELL memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3_BUY(LibOrderDataV3.DataV3_BUY memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value)\n external\n pure\n returns (uint256)\n {\n return (uint256(value) << 160) + uint256(account);\n }\n\n function hashKey(LibOrder.Order calldata order)\n external\n pure\n returns (bytes32)\n {\n return LibOrder.hashKey(order);\n }\n\n function hashV2(\n address maker,\n LibAsset.Asset memory makeAsset,\n LibAsset.Asset memory takeAsset,\n uint256 salt,\n bytes memory data\n ) public pure returns (bytes32) {\n return\n keccak256(\n abi.encode(\n maker,\n LibAsset.hash(makeAsset.assetType),\n LibAsset.hash(takeAsset.assetType),\n salt,\n data\n )\n );\n }\n\n function encodeLazy721(LibERC721LazyMint.Mint721Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n function encodeLazy1155(LibERC1155LazyMint.Mint1155Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n}\n" - }, - "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\n\ninterface IBlur {\n enum Side { Buy, Sell }\n enum SignatureVersion { Single, Bulk }\n enum AssetType { ERC721, ERC1155 }\n\n struct Fee {\n uint16 rate;\n address payable recipient;\n }\n \n struct Order {\n address trader;\n Side side;\n address matchingPolicy;\n address collection;\n uint256 tokenId;\n uint256 amount;\n address paymentToken;\n uint256 price;\n uint256 listingTime;\n /* Order expiration timestamp - 0 for oracle cancellations. */\n uint256 expirationTime;\n Fee[] fees;\n uint256 salt;\n bytes extraParams;\n }\n\n struct Input {\n Order order;\n uint8 v;\n bytes32 r;\n bytes32 s;\n bytes extraSignature;\n SignatureVersion signatureVersion;\n uint256 blockNumber;\n }\n\n function execute(Input calldata sell, Input calldata buy)\n external\n payable;\n}\n" - }, - "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\n\ninterface IExchangeV2 {\n function matchOrders(\n LibOrder.Order memory orderLeft,\n bytes memory signatureLeft,\n LibOrder.Order memory orderRight,\n bytes memory signatureRight\n ) external payable;\n\n function directPurchase(\n LibDirectTransfer.Purchase calldata direct\n ) external payable;\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../libraries/LibLooksRare.sol\";\n\ninterface ILooksRare {\n function matchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata takerBid, LibLooksRare.MakerOrder calldata makerAsk) external payable;\n\n /**\n * @notice This function allows a user to execute a taker bid (against a maker ask).\n * @param takerBid Taker bid struct\n * @param makerAsk Maker ask struct\n * @param makerSignature Maker signature\n * @param merkleTree Merkle tree struct (if the signature contains multiple maker orders)\n * @param affiliate Affiliate address\n */\n function executeTakerBid(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external payable;\n}\n" - }, - "@rarible/exchange-wrapper/contracts/interfaces/ILSSVMRouter.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\ninterface ILSSVMRouter {\n struct PairSwapSpecific {\n address pair;\n uint256[] nftIds;\n }\n\n /**\n @notice Swaps ETH into specific NFTs using multiple pairs.\n @param swapList The list of pairs to trade with and the IDs of the NFTs to buy from each.\n @param ethRecipient The address that will receive the unspent ETH input\n @param nftRecipient The address that will receive the NFT output\n @param deadline The Unix timestamp (in seconds) at/after which the swap will revert\n @return remainingValue The unspent ETH amount\n */\n function swapETHForSpecificNFTs(\n PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n )\n external\n payable\n returns (uint256 remainingValue);\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"../libraries/LibSeaPort.sol\";\n\ninterface ISeaPort {\n function fulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder calldata advancedOrder,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n bytes32 fulfillerConduitKey,\n address recipient\n ) external payable returns (bool fulfilled);\n\n function fulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory advancedOrders,\n LibSeaPort.CriteriaResolver[] calldata criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] calldata offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] calldata considerationFulfillments,\n bytes32 fulfillerConduitKey,\n address recipient,\n uint256 maximumFulfilled\n ) external payable returns (bool[] memory availableOrders, LibSeaPort.Execution[] memory executions);\n\n function fulfillBasicOrder(LibSeaPort.BasicOrderParameters calldata parameters)\n external\n payable\n returns (bool fulfilled);\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface IWyvernExchange {\n function atomicMatch_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n\n enum Side {\n Buy,\n Sell\n }\n\n enum SaleKind {\n FixedPrice,\n DutchAuction\n }\n\n function calculateFinalPrice(\n Side side,\n SaleKind saleKind,\n uint256 basePrice,\n uint256 extra,\n uint256 listingTime,\n uint256 expirationTime\n ) external view returns (uint256);\n}" - }, - "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\ninterface Ix2y2 {\n\n struct OrderItem {\n uint256 price;\n bytes data;\n }\n\n struct Pair721 {\n address token;\n uint256 tokenId;\n }\n\n struct Pair1155 {\n address token;\n uint256 tokenId;\n uint256 amount;\n }\n\n struct Order {\n uint256 salt;\n address user;\n uint256 network;\n uint256 intent;\n uint256 delegateType;\n uint256 deadline;\n address currency;\n bytes dataMask;\n OrderItem[] items;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n uint8 signVersion;\n }\n\n struct Fee {\n uint256 percentage;\n address to;\n }\n\n struct SettleDetail {\n Op op;\n uint256 orderIdx;\n uint256 itemIdx;\n uint256 price;\n bytes32 itemHash;\n address executionDelegate;\n bytes dataReplacement;\n uint256 bidIncentivePct;\n uint256 aucMinIncrementPct;\n uint256 aucIncDurationSecs;\n Fee[] fees;\n }\n\n struct SettleShared {\n uint256 salt;\n uint256 deadline;\n uint256 amountToEth;\n uint256 amountToWeth;\n address user;\n bool canFail;\n }\n\n struct RunInput {\n Order[] orders;\n SettleDetail[] details;\n SettleShared shared;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n }\n\n enum Op {\n INVALID,\n // off-chain\n COMPLETE_SELL_OFFER,\n COMPLETE_BUY_OFFER,\n CANCEL_OFFER,\n // auction\n BID,\n COMPLETE_AUCTION,\n REFUND_AUCTION,\n REFUND_AUCTION_STUCK_ITEM\n }\n\n function run(RunInput memory input) external payable;\n}" - }, - "@rarible/exchange-wrapper/contracts/libraries/IsPausable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\nabstract contract IsPausable is Ownable {\n bool public paused;\n\n event Paused(bool paused);\n\n function pause(bool _paused) external onlyOwner {\n paused = _paused;\n emit Paused(_paused);\n }\n\n function requireNotPaused() internal view {\n require (!paused, \"the contract is paused\");\n }\n\n}\n" - }, - "@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibLooksRare {\n struct MakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address signer; // signer of the maker order\n address collection; // collection address\n uint256 price; // price (used as )\n uint256 tokenId; // id of the token\n uint256 amount; // amount of tokens to sell/purchase (must be 1 for ERC721, 1+ for ERC1155)\n address strategy; // strategy for trade execution (e.g., DutchAuction, StandardSaleForFixedPrice)\n address currency; // currency (e.g., WETH)\n uint256 nonce; // order nonce (must be unique unless new maker order is meant to override existing one e.g., lower ask price)\n uint256 startTime; // startTime in timestamp\n uint256 endTime; // endTime in timestamp\n uint256 minPercentageToAsk; // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // additional parameters\n uint8 v; // v: parameter (27 or 28)\n bytes32 r; // r: parameter\n bytes32 s; // s: parameter\n }\n\n struct TakerOrder {\n bool isOrderAsk; // true --> ask / false --> bid\n address taker; // msg.sender\n uint256 price; // final price for the purchase\n uint256 tokenId;\n uint256 minPercentageToAsk; // // slippage protection (9000 --> 90% of the final price must return to ask)\n bytes params; // other params (e.g., tokenId)\n }\n\n /**\n * @notice CollectionType is used in OrderStructs.Maker's collectionType to determine the collection type being traded.\n */\n enum CollectionType {\n ERC721,\n ERC1155\n }\n\n /**\n * @notice QuoteType is used in OrderStructs.Maker's quoteType to determine whether the maker order is a bid or an ask.\n */\n enum QuoteType {\n Bid,\n Ask\n }\n /**\n * 1. Maker struct\n */\n\n /**\n * @notice Maker is the struct for a maker order.\n * @param quoteType Quote type (i.e. 0 = BID, 1 = ASK)\n * @param globalNonce Global user order nonce for maker orders\n * @param subsetNonce Subset nonce (shared across bid/ask maker orders)\n * @param orderNonce Order nonce (it can be shared across bid/ask maker orders)\n * @param strategyId Strategy id\n * @param collectionType Collection type (i.e. 0 = ERC721, 1 = ERC1155)\n * @param collection Collection address\n * @param currency Currency address (@dev address(0) = ETH)\n * @param signer Signer address\n * @param startTime Start timestamp\n * @param endTime End timestamp\n * @param price Minimum price for maker ask, maximum price for maker bid\n * @param itemIds Array of itemIds\n * @param amounts Array of amounts\n * @param additionalParameters Extra data specific for the order\n */\n struct Maker {\n QuoteType quoteType;\n uint256 globalNonce;\n uint256 subsetNonce;\n uint256 orderNonce;\n uint256 strategyId;\n CollectionType collectionType;\n address collection;\n address currency;\n address signer;\n uint256 startTime;\n uint256 endTime;\n uint256 price;\n uint256[] itemIds;\n uint256[] amounts;\n bytes additionalParameters;\n }\n\n /**\n * 2. Taker struct\n */\n\n /**\n * @notice Taker is the struct for a taker ask/bid order. It contains the parameters required for a direct purchase.\n * @dev Taker struct is matched against MakerAsk/MakerBid structs at the protocol level.\n * @param recipient Recipient address (to receive NFTs or non-fungible tokens)\n * @param additionalParameters Extra data specific for the order\n */\n struct Taker {\n address recipient;\n bytes additionalParameters;\n }\n\n /**\n * 3. Merkle tree struct\n */\n\n enum MerkleTreeNodePosition {\n Left,\n Right\n }\n\n /**\n * @notice MerkleTreeNode is a MerkleTree's node.\n * @param value It can be an order hash or a proof\n * @param position The node's position in its branch.\n * It can be left or right or none\n * (before the tree is sorted).\n */\n struct MerkleTreeNode {\n bytes32 value;\n MerkleTreeNodePosition position;\n }\n\n /**\n * @notice MerkleTree is the struct for a merkle tree of order hashes.\n * @dev A Merkle tree can be computed with order hashes.\n * It can contain order hashes from both maker bid and maker ask structs.\n * @param root Merkle root\n * @param proof Array containing the merkle proof\n */\n struct MerkleTree {\n bytes32 root;\n MerkleTreeNode[] proof;\n }\n}\n" - }, - "@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nlibrary LibSeaPort {\n /**\n * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155\n * matching, a group of six functions may be called that only requires a\n * subset of the usual order arguments. Note the use of a \"basicOrderType\"\n * enum; this represents both the usual order type as well as the \"route\"\n * of the basic order (a simple derivation function for the basic order\n * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.)\n */\n struct BasicOrderParameters {\n address considerationToken; // 0x24\n uint256 considerationIdentifier; // 0x44\n uint256 considerationAmount; // 0x64\n address payable offerer; // 0x84\n address zone; // 0xa4\n address offerToken; // 0xc4\n uint256 offerIdentifier; // 0xe4\n uint256 offerAmount; // 0x104\n BasicOrderType basicOrderType; // 0x124\n uint256 startTime; // 0x144\n uint256 endTime; // 0x164\n bytes32 zoneHash; // 0x184\n uint256 salt; // 0x1a4\n bytes32 offererConduitKey; // 0x1c4\n bytes32 fulfillerConduitKey; // 0x1e4\n uint256 totalOriginalAdditionalRecipients; // 0x204\n AdditionalRecipient[] additionalRecipients; // 0x224\n bytes signature; // 0x244\n }\n /**\n * @dev Basic orders can supply any number of additional recipients, with the\n * implied assumption that they are supplied from the offered ETH (or other\n * native token) or ERC20 token for the order.\n */\n struct AdditionalRecipient {\n uint256 amount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum BasicOrderType {\n // 0: no partial fills, anyone can execute\n ETH_TO_ERC721_FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n ETH_TO_ERC721_PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n ETH_TO_ERC721_FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 4: no partial fills, anyone can execute\n ETH_TO_ERC1155_FULL_OPEN,\n\n // 5: partial fills supported, anyone can execute\n ETH_TO_ERC1155_PARTIAL_OPEN,\n\n // 6: no partial fills, only offerer or zone can execute\n ETH_TO_ERC1155_FULL_RESTRICTED,\n\n // 7: partial fills supported, only offerer or zone can execute\n ETH_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 8: no partial fills, anyone can execute\n ERC20_TO_ERC721_FULL_OPEN,\n\n // 9: partial fills supported, anyone can execute\n ERC20_TO_ERC721_PARTIAL_OPEN,\n\n // 10: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC721_FULL_RESTRICTED,\n\n // 11: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC721_PARTIAL_RESTRICTED,\n\n // 12: no partial fills, anyone can execute\n ERC20_TO_ERC1155_FULL_OPEN,\n\n // 13: partial fills supported, anyone can execute\n ERC20_TO_ERC1155_PARTIAL_OPEN,\n\n // 14: no partial fills, only offerer or zone can execute\n ERC20_TO_ERC1155_FULL_RESTRICTED,\n\n // 15: partial fills supported, only offerer or zone can execute\n ERC20_TO_ERC1155_PARTIAL_RESTRICTED,\n\n // 16: no partial fills, anyone can execute\n ERC721_TO_ERC20_FULL_OPEN,\n\n // 17: partial fills supported, anyone can execute\n ERC721_TO_ERC20_PARTIAL_OPEN,\n\n // 18: no partial fills, only offerer or zone can execute\n ERC721_TO_ERC20_FULL_RESTRICTED,\n\n // 19: partial fills supported, only offerer or zone can execute\n ERC721_TO_ERC20_PARTIAL_RESTRICTED,\n\n // 20: no partial fills, anyone can execute\n ERC1155_TO_ERC20_FULL_OPEN,\n\n // 21: partial fills supported, anyone can execute\n ERC1155_TO_ERC20_PARTIAL_OPEN,\n\n // 22: no partial fills, only offerer or zone can execute\n ERC1155_TO_ERC20_FULL_RESTRICTED,\n\n // 23: partial fills supported, only offerer or zone can execute\n ERC1155_TO_ERC20_PARTIAL_RESTRICTED\n }\n\n /**\n * @dev The full set of order components, with the exception of the counter,\n * must be supplied when fulfilling more sophisticated orders or groups of\n * orders. The total number of original consideration items must also be\n * supplied, as the caller may specify additional consideration items.\n */\n struct OrderParameters {\n address offerer; // 0x00\n address zone; // 0x20\n OfferItem[] offer; // 0x40\n ConsiderationItem[] consideration; // 0x60\n OrderType orderType; // 0x80\n uint256 startTime; // 0xa0\n uint256 endTime; // 0xc0\n bytes32 zoneHash; // 0xe0\n uint256 salt; // 0x100\n bytes32 conduitKey; // 0x120\n uint256 totalOriginalConsiderationItems; // 0x140\n // offer.length // 0x160\n }\n\n /**\n * @dev Orders require a signature in addition to the other order parameters.\n */\n struct Order {\n OrderParameters parameters;\n bytes signature;\n }\n\n struct AdvancedOrder {\n OrderParameters parameters;\n uint120 numerator;\n uint120 denominator;\n bytes signature;\n bytes extraData;\n }\n\n struct OfferItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n }\n\n /**\n * @dev A consideration item has the same five components as an offer item and\n * an additional sixth component designating the required recipient of the\n * item.\n */\n struct ConsiderationItem {\n ItemType itemType;\n address token;\n uint256 identifierOrCriteria;\n uint256 startAmount;\n uint256 endAmount;\n address payable recipient;\n }\n\n // prettier-ignore\n enum OrderType {\n // 0: no partial fills, anyone can execute\n FULL_OPEN,\n\n // 1: partial fills supported, anyone can execute\n PARTIAL_OPEN,\n\n // 2: no partial fills, only offerer or zone can execute\n FULL_RESTRICTED,\n\n // 3: partial fills supported, only offerer or zone can execute\n PARTIAL_RESTRICTED\n }\n\n // prettier-ignore\n enum ItemType {\n // 0: ETH on mainnet, MATIC on polygon, etc.\n NATIVE,\n\n // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work)\n ERC20,\n\n // 2: ERC721 items\n ERC721,\n\n // 3: ERC1155 items\n ERC1155,\n\n // 4: ERC721 items where a number of tokenIds are supported\n ERC721_WITH_CRITERIA,\n\n // 5: ERC1155 items where a number of ids are supported\n ERC1155_WITH_CRITERIA\n }\n\n /**\n * @dev A fulfillment is applied to a group of orders. It decrements a series of\n * offer and consideration items, then generates a single execution\n * element. A given fulfillment can be applied to as many offer and\n * consideration items as desired, but must contain at least one offer and\n * at least one consideration that match. The fulfillment must also remain\n * consistent on all key parameters across all offer items (same offerer,\n * token, type, tokenId, and conduit preference) as well as across all\n * consideration items (token, type, tokenId, and recipient).\n */\n struct Fulfillment {\n FulfillmentComponent[] offerComponents;\n FulfillmentComponent[] considerationComponents;\n }\n\n /**\n * @dev Each fulfillment component contains one index referencing a specific\n * order and another referencing a specific offer or consideration item.\n */\n struct FulfillmentComponent {\n uint256 orderIndex;\n uint256 itemIndex;\n }\n\n /**\n * @dev An execution is triggered once all consideration items have been zeroed\n * out. It sends the item in question from the offerer to the item's\n * recipient, optionally sourcing approvals from either this contract\n * directly or from the offerer's chosen conduit if one is specified. An\n * execution is not provided as an argument, but rather is derived via\n * orders, criteria resolvers, and fulfillments (where the total number of\n * executions will be less than or equal to the total number of indicated\n * fulfillments) and returned as part of `matchOrders`.\n */\n struct Execution {\n ReceivedItem item;\n address offerer;\n bytes32 conduitKey;\n }\n\n /**\n * @dev A received item is translated from a utilized consideration item and has\n * the same four components as a spent item, as well as an additional fifth\n * component designating the required recipient of the item.\n */\n struct ReceivedItem {\n ItemType itemType;\n address token;\n uint256 identifier;\n uint256 amount;\n address payable recipient;\n }\n\n struct CriteriaResolver {\n uint256 orderIndex;\n Side side;\n uint256 index;\n uint256 identifier;\n bytes32[] criteriaProof;\n }\n\n // prettier-ignore\n enum Side {\n // 0: Items that can be spent\n OFFER,\n\n // 1: Items that must be received\n CONSIDERATION\n }\n}\n" - }, - "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nimport \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\nimport \"./libraries/IsPausable.sol\";\n\ncontract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\n using LibTransfer for address;\n using BpLibrary for uint;\n using SafeMath for uint;\n\n //marketplaces\n address public immutable wyvernExchange;\n address public immutable exchangeV2;\n address public immutable seaPort_1_1;\n address public immutable x2y2;\n address public immutable looksRare;\n address public immutable sudoswap;\n address public immutable seaPort_1_4;\n address public immutable looksRareV2;\n address public immutable blur;\n address public immutable seaPort_1_5;\n\n //currencties\n address public immutable weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n\n enum Markets {\n ExchangeV2,\n WyvernExchange,\n SeaPort_1_1,\n X2Y2,\n LooksRareOrders,\n SudoSwap,\n SeaPort_1_4,\n LooksRareV2,\n Blur,\n SeaPort_1_5\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n constructor(\n address[10] memory marketplaces,\n //address _wyvernExchange, 0\n //address _exchangeV2, 1\n //address _seaPort_1_1, 2\n //address _x2y2, 3\n //address _looksRare, 4\n //address _sudoswap, 5\n //address _seaPort_1_4, 6\n //address _looksRareV2, 7\n //address _blur, 8\n //address _seaPort_1_5, 9\n address _weth,\n address[] memory transferProxies\n ) {\n wyvernExchange = marketplaces[0];\n exchangeV2 = marketplaces[1];\n seaPort_1_1 = marketplaces[2];\n x2y2 = marketplaces[3];\n looksRare = marketplaces[4];\n sudoswap = marketplaces[5];\n seaPort_1_4 = marketplaces[6];\n looksRareV2 = marketplaces[7];\n blur = marketplaces[8];\n seaPort_1_5 = marketplaces[9];\n\n weth = _weth;\n\n for (uint i = 0; i < transferProxies.length; ++i) {\n if (_weth != address(0)){\n IERC20Upgradeable(_weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(PurchaseDetails memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond) external payable {\n requireNotPaused();\n \n //amount of WETH needed for purchases: \n uint wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n \n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n emit Execution(success);\n \n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n \n function bulkPurchase(PurchaseDetails[] memory purchaseDetails, address feeRecipientFirst, address feeRecipientSecond, bool allowFail) external payable {\n requireNotPaused();\n\n uint sumFirstFeesETH = 0;\n uint sumSecondFeesETH = 0;\n uint sumFirstFeesWETH = 0;\n uint sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases: \n uint wethAmountNeeded = 0;\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint firstFeeAmount;\n uint secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n \n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n \n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n \n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH \n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success,) = address(wyvernExchange).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value : paymentAmount}(input) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value : paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint i = 0; i < input.details.length; ++i) {\n uint orderId = input.details[i].orderIdx;\n uint itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value : paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success,) = address(sudoswap).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2){\n (bool success,) = address(looksRareV2).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur){\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value : paymentAmount}(sell, buy) {\n } catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value : paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call{value : paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n \n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) internal returns(bool, uint, uint) {\n (bytes memory marketData, uint[] memory additionalRoyalties) = getDataAndAdditionalData (purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1){\n (bool success,) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success,) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4){\n (bool success,) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5){\n (bool success,) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n \n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint fees, uint amount) internal pure returns(uint, uint) {\n uint firstFee = uint(uint16(fees >> 16));\n uint secondFee = uint(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint fees) internal pure returns(Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData (bytes memory _data, uint feesAndDataType, Markets marketId) internal pure returns (bytes memory, uint[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n } \n }\n \n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH (uint[] memory _additionalRoyalties, uint amount) internal {\n for (uint i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint basePoint = uint(_additionalRoyalties[i] >> 160);\n uint value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool){\n if (\n marketId == Markets.SudoSwap ||\n marketId == Markets.LooksRareOrders ||\n marketId == Markets.LooksRareV2\n ) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint) {\n uint result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint firstFeeAmount, uint secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint[] memory royalties) = getDataAndAdditionalData (detail.data, detail.fees, detail.marketId);\n for (uint j = 0; j < royalties.length; ++j) {\n uint royaltyBasePoint = uint(royalties[j] >> 160);\n uint royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n receive() external payable {}\n}" - }, - "@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {IERC721Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport {IERC1155Upgradeable} from \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\n\nimport {IWyvernExchange} from \"../../contracts/interfaces/IWyvernExchange.sol\";\nimport {IExchangeV2} from \"../../contracts/interfaces/IExchangeV2.sol\";\nimport {LibOrder} from \"../../contracts/RaribleExchangeWrapper.sol\";\nimport {LibDirectTransfer} from \"../../contracts/RaribleExchangeWrapper.sol\";\n\nimport {LibSeaPort} from \"../../contracts/libraries/LibSeaPort.sol\";\nimport {ISeaPort} from \"../../contracts/interfaces/ISeaPort.sol\";\nimport {Ix2y2} from \"../../contracts/interfaces/Ix2y2.sol\";\nimport {LibLooksRare} from \"../../contracts/libraries/LibLooksRare.sol\";\nimport {ILooksRare} from \"../../contracts/interfaces/ILooksRare.sol\";\nimport {ILSSVMRouter} from \"../../contracts/interfaces/ILSSVMRouter.sol\";\nimport {IBlur} from \"../../contracts/interfaces/IBlur.sol\";\n\ninterface IERC1155 {\n function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;\n}\n\ninterface IERC721 {\n function safeTransferFrom(address from, address to, uint256 tokenId) external;\n function transferFrom(address from, address to, uint256 tokenId) external;\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;\n}\n\ninterface IMatchERC721{\n function matchERC721UsingCriteria(\n address from,\n address to,\n IERC721 token,\n uint256 tokenId,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\ninterface IMatchERC1155{\n /*This method Merkle validator https://etherscan.io/address/0xbaf2127b49fc93cbca6269fade0f7f31df4c88a7#code\n */\n function matchERC1155UsingCriteria(\n address from,\n address to,\n IERC1155 token,\n uint256 tokenId,\n uint256 amount,\n bytes32 root,\n bytes32[] calldata proof\n ) external returns (bool);\n}\n\n/*Interface with error*/\ninterface IWyvernExchangeError {\n /*method is not exist in WyvernBulkExchange contract*/\n function atomicMatchError_(\n address[14] memory addrs,\n uint[18] memory uints,\n uint8[8] memory feeMethodsSidesKindsHowToCalls,\n bytes memory calldataBuy,\n bytes memory calldataSell,\n bytes memory replacementPatternBuy,\n bytes memory replacementPatternSell,\n bytes memory staticExtradataBuy,\n bytes memory staticExtradataSell,\n uint8[2] memory vs,\n bytes32[5] memory rssMetadata)\n external\n payable;\n}\n\ncontract WrapperHelper {\n\n struct WyvernOrders {\n address[14] addrs;\n uint[18] uints;\n uint8[8] feeMethodsSidesKindsHowToCalls;\n bytes calldataBuy;\n bytes calldataSell;\n bytes replacementPatternBuy;\n bytes replacementPatternSell;\n bytes staticExtradataBuy;\n bytes staticExtradataSell;\n uint8[2] vs;\n bytes32[5] rssMetadata;\n }\n\n struct RaribleBuy {\n LibOrder.Order orderLeft;\n bytes signatureLeft;\n LibOrder.Order orderRight;\n bytes signatureRight;\n }\n\n struct AdditionalData {\n bytes data;\n uint[] additionalRoyalties;\n }\n\n function getDataWyvernAtomicMatch(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchange.atomicMatch_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataWyvernAtomicMatchWithError(WyvernOrders memory _openSeaBuy) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IWyvernExchangeError.atomicMatchError_.selector, _openSeaBuy.addrs, _openSeaBuy.uints, _openSeaBuy.feeMethodsSidesKindsHowToCalls, _openSeaBuy.calldataBuy, _openSeaBuy.calldataSell, _openSeaBuy.replacementPatternBuy, _openSeaBuy.replacementPatternSell, _openSeaBuy.staticExtradataBuy, _openSeaBuy.staticExtradataSell, _openSeaBuy.vs, _openSeaBuy.rssMetadata);\n }\n\n function getDataERC721UsingCriteria(\n address from,\n address to,\n IERC721Upgradeable token,\n uint256 tokenId\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC721.matchERC721UsingCriteria.selector, from, to, token, tokenId);\n }\n\n function getDataERC1155UsingCriteria(\n address from,\n address to,\n IERC1155Upgradeable token,\n uint256 tokenId,\n uint256 amount\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(IMatchERC1155.matchERC1155UsingCriteria.selector, from, to, token, tokenId, amount);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value) external pure returns(uint){\n return (uint(value) << 160) + uint(account);\n }\n\n function getDataDirectPurchase(LibDirectTransfer.Purchase memory data) external pure returns(bytes memory result) {\n result = abi.encodeWithSelector(IExchangeV2.directPurchase.selector, data);\n }\n\n function getDataSeaPortFulfillAdvancedOrder(\n LibSeaPort.AdvancedOrder memory _advancedOrder,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n bytes32 _fulfillerConduitKey,\n address _recipient\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(ISeaPort.fulfillAdvancedOrder.selector, _advancedOrder, _criteriaResolvers, _fulfillerConduitKey, _recipient);\n }\n\n function getDataSeaPortFulfillAvailableAdvancedOrders(\n LibSeaPort.AdvancedOrder[] memory _orders,\n LibSeaPort.CriteriaResolver[] memory _criteriaResolvers,\n LibSeaPort.FulfillmentComponent[][] memory _offerFulfillments,\n LibSeaPort.FulfillmentComponent[][] memory _considerationFulfillments,\n bytes32 _fulfillerConduitKey,\n address _recipient,\n uint256 _maximumFulfilled\n ) external pure returns(bytes memory _data) {\n _data = abi.encodeWithSelector(\n ISeaPort.fulfillAvailableAdvancedOrders.selector,\n _orders,\n _criteriaResolvers,\n _offerFulfillments,\n _considerationFulfillments,\n _fulfillerConduitKey,\n _recipient,\n _maximumFulfilled\n );\n }\n\n function getDataSeaPortBasic(LibSeaPort.BasicOrderParameters calldata seaPortBasic, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(seaPortBasic, typeNft);\n }\n\n function encodeData(Ix2y2.Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Ix2y2.Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Ix2y2.Order memory order, Ix2y2.OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n function encodeX2Y2Call(Ix2y2.RunInput calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n \n function getDataWrapperMatchAskWithTakerBidUsingETHAndWETH(LibLooksRare.TakerOrder calldata _takerBid, LibLooksRare.MakerOrder calldata _makerAsk, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(_takerBid, _makerAsk, typeNft);\n }\n\n function encodeFees(uint first, uint second) external pure returns(uint){\n return (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeFeesPlusDataType(uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeCurrencyAndDataTypeAndFees(uint currency, uint dataType, uint first, uint second) external pure returns(uint){\n return (uint(uint16(currency)) << 48) + (uint(uint16(dataType)) << 32) + (uint(uint16(first)) << 16) + uint(uint16(second));\n }\n\n function encodeDataPlusRoyalties(AdditionalData calldata data) external pure returns(bytes memory) {\n return abi.encode(data);\n }\n\n function encodeBpPlusAccount(uint bp, address account) external pure returns (uint) {\n return (uint(bp) << 160) + uint(account);\n }\n\n function decodeFees(uint data) external pure returns(uint, uint) {\n uint first = uint(uint16(data >> 16));\n uint second = uint(uint16(data));\n return (first, second);\n }\n\n function encodeSudoSwapCall(\n ILSSVMRouter.PairSwapSpecific[] calldata swapList,\n address payable ethRecipient,\n address nftRecipient,\n uint256 deadline\n ) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILSSVMRouter.swapETHForSpecificNFTs.selector, swapList, ethRecipient, nftRecipient, deadline);\n }\n\n function encodeLooksRareV2Call(LibLooksRare.Taker calldata takerBid, LibLooksRare.Maker calldata makerAsk, bytes calldata makerSignature, LibLooksRare.MerkleTree calldata merkleTree, address affiliate) external pure returns (bytes memory _data) {\n _data = abi.encodeWithSelector(ILooksRare.executeTakerBid.selector, takerBid, makerAsk, makerSignature, merkleTree, affiliate);\n }\n\n function encodeBlurData(IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) external pure returns(bytes memory _data) {\n _data = abi.encode(sell, buy, typeNft);\n }\n\n}" - }, - "@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"./LibERC1155LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC1155LazyMint is IERC1155Upgradeable {\n\n event Supply(\n uint256 tokenId,\n uint256 value\n );\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC1155LazyMint.Mint1155Data memory data,\n address to,\n uint256 _amount\n ) external;\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) external;\n}\n" - }, - "@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC1155LazyMint {\n bytes4 constant public ERC1155_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC1155_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x6db15a0f;\n\n struct Mint1155Data {\n uint tokenId;\n string tokenURI;\n uint supply;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint1155(uint256 tokenId,uint256 supply,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint1155Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n data.supply,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n}\n" - }, - "@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"./LibERC721LazyMint.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface IERC721LazyMint is IERC721Upgradeable {\n\n event Creators(\n uint256 tokenId,\n LibPart.Part[] creators\n );\n\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external;\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external;\n}\n" - }, - "@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibERC721LazyMint {\n bytes4 constant public ERC721_LAZY_ASSET_CLASS = bytes4(keccak256(\"ERC721_LAZY\"));\n bytes4 constant _INTERFACE_ID_MINT_AND_TRANSFER = 0x8486f69f;\n\n struct Mint721Data {\n uint tokenId;\n string tokenURI;\n LibPart.Part[] creators;\n LibPart.Part[] royalties;\n bytes[] signatures;\n }\n\n bytes32 public constant MINT_AND_TRANSFER_TYPEHASH = keccak256(\"Mint721(uint256 tokenId,string tokenURI,Part[] creators,Part[] royalties)Part(address account,uint96 value)\");\n\n function hash(Mint721Data memory data) internal pure returns (bytes32) {\n bytes32[] memory royaltiesBytes = new bytes32[](data.royalties.length);\n for (uint i = 0; i < data.royalties.length; ++i) {\n royaltiesBytes[i] = LibPart.hash(data.royalties[i]);\n }\n bytes32[] memory creatorsBytes = new bytes32[](data.creators.length);\n for (uint i = 0; i < data.creators.length; ++i) {\n creatorsBytes[i] = LibPart.hash(data.creators[i]);\n }\n return keccak256(abi.encode(\n MINT_AND_TRANSFER_TYPEHASH,\n data.tokenId,\n keccak256(bytes(data.tokenURI)),\n keccak256(abi.encodePacked(creatorsBytes)),\n keccak256(abi.encodePacked(royaltiesBytes))\n ));\n }\n\n}\n" - }, - "@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/erc-721/IERC721LazyMint.sol\";\n\ncontract ERC721LazyMintTest is IERC721LazyMint, ERC721Upgradeable {\n function mintAndTransfer(\n LibERC721LazyMint.Mint721Data memory data,\n address to\n ) external override {\n _mint(to, data.tokenId);\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) external override {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n this.mintAndTransfer(data, to);\n }\n }\n\n function encode(LibERC721LazyMint.Mint721Data memory data)\n external\n view\n returns (bytes memory)\n {\n return abi.encode(address(this), data);\n }\n}\n" - }, - "@rarible/lib-asset/contracts/LibAsset.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibAsset {\n bytes4 constant public ETH_ASSET_CLASS = bytes4(keccak256(\"ETH\"));\n bytes4 constant public ERC20_ASSET_CLASS = bytes4(keccak256(\"ERC20\"));\n bytes4 constant public ERC721_ASSET_CLASS = bytes4(keccak256(\"ERC721\"));\n bytes4 constant public ERC1155_ASSET_CLASS = bytes4(keccak256(\"ERC1155\"));\n bytes4 constant public COLLECTION = bytes4(keccak256(\"COLLECTION\"));\n bytes4 constant public CRYPTO_PUNKS = bytes4(keccak256(\"CRYPTO_PUNKS\"));\n\n bytes32 constant ASSET_TYPE_TYPEHASH = keccak256(\n \"AssetType(bytes4 assetClass,bytes data)\"\n );\n\n bytes32 constant ASSET_TYPEHASH = keccak256(\n \"Asset(AssetType assetType,uint256 value)AssetType(bytes4 assetClass,bytes data)\"\n );\n\n struct AssetType {\n bytes4 assetClass;\n bytes data;\n }\n\n struct Asset {\n AssetType assetType;\n uint value;\n }\n\n function hash(AssetType memory assetType) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPE_TYPEHASH,\n assetType.assetClass,\n keccak256(assetType.data)\n ));\n }\n\n function hash(Asset memory asset) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n ASSET_TYPEHASH,\n hash(asset.assetType),\n asset.value\n ));\n }\n\n}\n" - }, - "@rarible/lib-bp/contracts/BpLibrary.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\nlibrary BpLibrary {\n using SafeMathUpgradeable for uint;\n\n function bp(uint value, uint bpValue) internal pure returns (uint) {\n return value.mul(bpValue).div(10000);\n }\n}\n" - }, - "@rarible/lib-part/contracts/LibPart.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibPart {\n bytes32 public constant TYPE_HASH = keccak256(\"Part(address account,uint96 value)\");\n\n struct Part {\n address payable account;\n uint96 value;\n }\n\n function hash(Part memory part) internal pure returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, part.account, part.value));\n }\n}\n" - }, - "@rarible/lib-signature/contracts/ERC1271.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nabstract contract ERC1271 {\n bytes4 constant public ERC1271_INTERFACE_ID = 0xfb855dc9; // this.isValidSignature.selector\n\n bytes4 constant public ERC1271_RETURN_VALID_SIGNATURE = 0x1626ba7e;\n bytes4 constant public ERC1271_RETURN_INVALID_SIGNATURE = 0x00000000;\n\n /**\n * @dev Function must be implemented by deriving contract\n * @param _hash Arbitrary length data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n * @return A bytes4 magic value 0x1626ba7e if the signature check passes, 0x00000000 if not\n *\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes memory _signature) public virtual view returns (bytes4);\n\n function returnIsValidSignatureMagicNumber(bool isValid) internal pure returns (bytes4) {\n return isValid ? ERC1271_RETURN_VALID_SIGNATURE : ERC1271_RETURN_INVALID_SIGNATURE;\n }\n}" - }, - "@rarible/lib-signature/contracts/IERC1271.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ninterface IERC1271 {\n\n /**\n * @dev Should return whether the signature provided is valid for the provided data\n * @param _hash Hash of the data signed on the behalf of address(this)\n * @param _signature Signature byte array associated with _data\n *\n * MUST return the bytes4 magic value 0x1626ba7e when function passes.\n * MUST NOT modify state (using STATICCALL for solc < 0.5, view modifier for solc > 0.5)\n * MUST allow external calls\n */\n function isValidSignature(bytes32 _hash, bytes calldata _signature) virtual external view returns (bytes4 magicValue);\n}" - }, - "@rarible/lib-signature/contracts/LibSignature.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nlibrary LibSignature {\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature)\n internal\n pure\n returns (address)\n {\n // Check the signature length\n if (signature.length != 65) {\n revert(\"ECDSA: invalid signature length\");\n }\n\n // Divide the signature in r, s and v variables\n bytes32 r;\n bytes32 s;\n uint8 v;\n\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n // solhint-disable-next-line no-inline-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n\n return recover(hash, v, r, s);\n }\n\n /**\n * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n require(\n uint256(s) <=\n 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0,\n \"ECDSA: invalid signature 's' value\"\n );\n\n // If the signature is valid (and not malleable), return the signer address\n // v > 30 is a special case, we need to adjust hash with \"\\x19Ethereum Signed Message:\\n32\"\n // and v = v - 4\n address signer;\n if (v > 30) {\n require(\n v - 4 == 27 || v - 4 == 28,\n \"ECDSA: invalid signature 'v' value\"\n );\n signer = ecrecover(toEthSignedMessageHash(hash), v - 4, r, s);\n } else {\n require(v == 27 || v == 28, \"ECDSA: invalid signature 'v' value\");\n signer = ecrecover(hash, v, r, s);\n }\n\n require(signer != address(0), \"ECDSA: invalid signature\");\n\n return signer;\n }\n\n /**\n * @dev Returns an Ethereum Signed Message, created from a `hash`. This\n * replicates the behavior of the\n * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`]\n * JSON-RPC method.\n *\n * See {recover}.\n */\n function toEthSignedMessageHash(bytes32 hash)\n internal\n pure\n returns (bytes32)\n {\n // 32 is the length in bytes of hash,\n // enforced by the type signature above\n return\n keccak256(\n abi.encodePacked(\"\\x19Ethereum Signed Message:\\n32\", hash)\n );\n }\n}\n" - }, - "@rarible/meta-tx/contracts/EIP712MetaTransaction.sol": { - "content": "//SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\n\nabstract contract EIP712MetaTransaction is ContextUpgradeable {\n using SafeMath for uint256;\n\n bytes32 private constant META_TRANSACTION_TYPEHASH = keccak256(bytes(\"MetaTransaction(uint256 nonce,address from,bytes functionSignature)\"));\n bytes32 internal constant EIP712_DOMAIN_TYPEHASH = keccak256(\"EIP712Domain(string name,string version,address verifyingContract,bytes32 salt)\");\n\n mapping(address => uint256) private nonces;\n bytes32 internal domainSeparator;\n\n /*\n * Meta transaction structure.\n * No point of including value field here as if user is doing value transfer then he has the funds to pay for gas\n * He should call the desired function directly in that case.\n */\n struct MetaTransaction {\n uint256 nonce;\n address from;\n bytes functionSignature;\n }\n\n /*\n * Domain structure.\n * Data(information to for making metaTransaction method uniq.) about method and contract\n */\n struct EIP712Domain {\n string name;\n string version;\n address verifyingContract;\n bytes32 salt;\n }\n\n event MetaTransactionExecuted(address userAddress, address payable relayerAddress, bytes functionSignature);\n\n function __MetaTransaction_init_unchained(string memory name, string memory version) internal {\n domainSeparator = keccak256(abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n getSalt()\n ));\n }\n\n function convertBytesToBytes4(bytes memory inBytes) internal pure returns (bytes4 outBytes4) {\n if (inBytes.length == 0) {\n return 0x0;\n }\n\n assembly {\n outBytes4 := mload(add(inBytes, 32))\n }\n }\n\n function executeMetaTransaction(address userAddress,\n bytes memory functionSignature, bytes32 sigR, bytes32 sigS, uint8 sigV) external payable returns (bytes memory) {\n bytes4 destinationFunctionSig = convertBytesToBytes4(functionSignature);\n require(destinationFunctionSig != msg.sig, \"Wrong functionSignature\");\n MetaTransaction memory metaTx = MetaTransaction({\n nonce : nonces[userAddress],\n from : userAddress,\n functionSignature : functionSignature\n });\n require(verify(userAddress, metaTx, sigR, sigS, sigV), \"Signer and signature do not match\");\n nonces[userAddress] = nonces[userAddress].add(1);\n // Append userAddress at the end to extract it from calling context\n (bool success, bytes memory returnData) = address(this).call(abi.encodePacked(functionSignature, userAddress));\n\n require(success, \"Function call not successful\");\n emit MetaTransactionExecuted(userAddress, msg.sender, functionSignature);\n return returnData;\n }\n\n function hashMetaTransaction(MetaTransaction memory metaTx) internal pure returns (bytes32) {\n return keccak256(abi.encode(\n META_TRANSACTION_TYPEHASH,\n metaTx.nonce,\n metaTx.from,\n keccak256(metaTx.functionSignature)\n ));\n }\n\n function getNonce(address user) external view returns (uint256 nonce) {\n nonce = nonces[user];\n }\n\n function verify(address user, MetaTransaction memory metaTx, bytes32 sigR, bytes32 sigS, uint8 sigV) internal view returns (bool) {\n address signer = ecrecover(toTypedMessageHash(hashMetaTransaction(metaTx)), sigV, sigR, sigS);\n require(signer != address(0), \"Invalid signature\");\n return signer == user;\n }\n\n function _msgSender() internal view virtual override returns (address payable sender) {\n if (msg.sender == address(this)) {\n bytes memory array = msg.data;\n uint256 index = msg.data.length;\n assembly {\n // Load the 32 bytes word from memory with the address on the lower 20 bytes, and mask those.\n sender := and(mload(add(array, index)), 0xffffffffffffffffffffffffffffffffffffffff)\n }\n } else {\n sender = msg.sender;\n }\n return sender;\n }\n\n function getSalt() internal pure returns (bytes32) {\n return bytes32(getChainID());\n }\n\n function getChainID() internal pure returns (uint256 id) {\n assembly {\n id := chainid()\n }\n }\n\n function getDomainSeparator() private view returns (bytes32) {\n return domainSeparator;\n }\n\n /**\n * Accept message hash and returns hash message in EIP712 compatible form\n * So that it can be used to recover signer from signature signed using EIP712 formatted data\n * https://eips.ethereum.org/EIPS/eip-712\n * \"\\\\x19\" makes the encoding deterministic\n * \"\\\\x01\" is the version byte to make it compatible to EIP-191\n */\n function toTypedMessageHash(bytes32 messageHash) internal view returns (bytes32) {\n return keccak256(abi.encodePacked(\"\\x19\\x01\", getDomainSeparator(), messageHash));\n }\n\n /**\n * @dev verifies the call result and bubbles up revert reason for failed calls\n *\n * @param success : outcome of forwarded call\n * @param returndata : returned data from the frowarded call\n * @param errorMessage : fallback error message to show\n */\n function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure {\n if (!success) {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n // solhint-disable-next-line no-inline-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}" - }, - "@rarible/role-operator/contracts/OperatorRole.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract OperatorRole is OwnableUpgradeable {\n mapping (address => bool) operators;\n\n function __OperatorRole_init() external initializer {\n __Context_init_unchained();\n __Ownable_init_unchained();\n }\n\n function addOperator(address operator) external onlyOwner {\n operators[operator] = true;\n }\n\n function removeOperator(address operator) external onlyOwner {\n operators[operator] = false;\n }\n\n modifier onlyOperator() {\n require(operators[_msgSender()], \"OperatorRole: caller is not the operator\");\n _;\n }\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocks.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ncontract RoyaltiesProviderArtBlocks is IRoyaltiesProvider, Ownable {\n using SafeMathUpgradeable for uint;\n using BpLibrary for uint;\n\n uint96 public artblocksPercentage = 250;\n\n event ArtblocksPercentageChanged(address _who, uint96 _old, uint96 _new);\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n\n RoyaltyArtBlocks artBlocks = RoyaltyArtBlocks(token);\n\n //gettign artist and additionalPayee royalty part\n (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID) = artBlocks.getRoyaltyData(tokenId);\n\n require(additionalPayeePercentage <= 100 && royaltyFeeByID <= 100, \"wrong royalties percentages from artBlocks\");\n\n //resulting royalties\n LibPart.Part[] memory result;\n\n //if no artist royalty\n if (royaltyFeeByID == 0) {\n //if artblocksPercentage > 0\n if (artblocksPercentage > 0) {\n result = new LibPart.Part[](1);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n }\n //if artblocksPercentage = 0 then result is empty\n return result;\n\n //if royaltyFeeByID > 0 and 0 < additionalPayeePercentage < 100\n } else if (additionalPayeePercentage > 0 && additionalPayeePercentage < 100) {\n result = new LibPart.Part[](3);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n\n result[2].account = payable(additionalPayee);\n result[2].value = additionalPart;\n \n //if royaltyFeeByID > 0 and additionalPayeePercentage == 0 or 100\n } else {\n result = new LibPart.Part[](2);\n\n //calculating artBLocks part\n result[0].account = payable(owner());\n result[0].value = artblocksPercentage;\n\n // additional payee percentage * 100\n uint96 additionalPart = uint96(royaltyFeeByID.mul(100).bp(additionalPayeePercentage.mul(100)));\n\n //artist part\n if (additionalPayeePercentage == 0) {\n result[1].account = payable(artistAddress);\n result[1].value = uint96(royaltyFeeByID.mul(100).sub(additionalPart));\n }\n\n //additional payee part\n if (additionalPayeePercentage == 100) {\n result[1].account = payable(additionalPayee);\n result[1].value = additionalPart;\n }\n } \n\n return result;\n }\n\n //sets new value for artblocksPercentage\n function setArtblocksPercentage(uint96 _artblocksPercentage) onlyOwner public {\n require(_artblocksPercentage <= 10000,\"_artblocksPercentage can't be > 100%\");\n emit ArtblocksPercentageChanged(_msgSender(), artblocksPercentage, _artblocksPercentage);\n artblocksPercentage = _artblocksPercentage;\n }\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyArtBlocksV2.sol\";\n\ncontract RoyaltiesProviderArtBlocksV2 is IRoyaltiesProvider {\n\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n RoyaltyArtBlocksV2 artBlocksV2 = RoyaltyArtBlocksV2(token);\n\n (address payable[] memory recipients, uint256[] memory bps) = artBlocksV2.getRoyalties(tokenId);\n \n uint256 len = recipients.length;\n\n LibPart.Part[] memory result = new LibPart.Part[](len);\n \n for (uint i = 0; i < len; i++) {\n result[i].account = recipients[i];\n result[i].value = uint96(bps[i]);\n }\n\n return result;\n }\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"./RoyaltyV2Legacy.sol\";\n\ncontract RoyaltiesProviderV2Legacy is IRoyaltiesProvider {\n function getRoyalties(address token, uint tokenId) override external view returns(LibPart.Part[] memory) {\n return RoyaltyV2Legacy(token).getRoyalties(tokenId);\n }\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocks.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocks {\n \n function getRoyaltyData(uint256 _tokenId) external virtual view returns (address artistAddress, address additionalPayee, uint256 additionalPayeePercentage, uint256 royaltyFeeByID);\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltyArtBlocksV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract RoyaltyArtBlocksV2 {\n \n /**\n * @notice Gets royalty Basis Points (BPS) for token ID `_tokenId`.\n * This conforms to the IManifold interface designated in the Royalty\n * Registry's RoyaltyEngineV1.sol contract.\n * ref: https://github.com/manifoldxyz/royalty-registry-solidity\n * @param _tokenId Token ID to be queried.\n * @return recipients Array of royalty payment recipients\n * @return bps Array of Basis Points (BPS) allocated to each recipient,\n * aligned by index.\n * @dev reverts if invalid _tokenId\n * @dev only returns recipients that have a non-zero BPS allocation\n */\n function getRoyalties(uint256 _tokenId) \n external \n view\n virtual\n returns (\n address payable[] memory recipients, \n uint256[] memory bps\n );\n\n}\n" - }, - "@rarible/royalties-registry/contracts/providers/RoyaltyV2Legacy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltyV2Legacy {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRoyalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" - }, - "@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/LibRoyalties2981.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV1.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/IERC2981.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\ncontract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable {\n /// @dev deprecated\n event RoyaltiesSetForToken(address indexed token, uint indexed tokenId, LibPart.Part[] royalties);\n /// @dev emitted when royalties set for token in \n event RoyaltiesSetForContract(address indexed token, LibPart.Part[] royalties);\n\n /// @dev struct to store royalties in royaltiesByToken\n struct RoyaltiesSet {\n bool initialized;\n LibPart.Part[] royalties;\n }\n\n /// @dev deprecated\n mapping(bytes32 => RoyaltiesSet) public royaltiesByTokenAndTokenId;\n /// @dev stores royalties for token contract, set in setRoyaltiesByToken() method\n mapping(address => RoyaltiesSet) public royaltiesByToken;\n /// @dev stores external provider and royalties type for token contract\n mapping(address => uint) public royaltiesProviders;\n\n /// @dev total amount or supported royalties types\n // 0 - royalties type is unset\n // 1 - royaltiesByToken, 2 - v2, 3 - v1,\n // 4 - external provider, 5 - EIP-2981\n // 6 - unsupported/nonexistent royalties type\n uint constant royaltiesTypesAmount = 6;\n\n function __RoyaltiesRegistry_init() external initializer {\n __Ownable_init_unchained();\n }\n\n /// @dev sets external provider for token contract, and royalties type = 4\n function setProviderByToken(address token, address provider) external {\n checkOwner(token);\n setRoyaltiesType(token, 4, provider);\n }\n\n /// @dev returns provider address for token contract from royaltiesProviders mapping\n function getProvider(address token) public view returns(address) {\n return address(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type for token contract\n function getRoyaltiesType(address token) external view returns(uint) {\n return _getRoyaltiesType(royaltiesProviders[token]);\n }\n\n /// @dev returns royalties type from uint\n function _getRoyaltiesType(uint data) internal pure returns(uint) {\n for (uint i = 1; i <= royaltiesTypesAmount; ++i) {\n if (data / 2**(256-i) == 1) {\n return i;\n }\n }\n return 0;\n }\n\n /// @dev sets royalties type for token contract\n function setRoyaltiesType(address token, uint royaltiesType, address royaltiesProvider) internal {\n require(royaltiesType > 0 && royaltiesType <= royaltiesTypesAmount, \"wrong royaltiesType\");\n royaltiesProviders[token] = uint(royaltiesProvider) + 2**(256 - royaltiesType);\n }\n\n /// @dev clears and sets new royalties type for token contract\n function forceSetRoyaltiesType(address token, uint royaltiesType) external {\n checkOwner(token);\n setRoyaltiesType(token, royaltiesType, getProvider(token));\n }\n\n /// @dev clears royalties type for token contract\n function clearRoyaltiesType(address token) external {\n checkOwner(token);\n royaltiesProviders[token] = uint(getProvider(token));\n }\n\n /// @dev sets royalties for token contract in royaltiesByToken mapping and royalties type = 1\n function setRoyaltiesByToken(address token, LibPart.Part[] memory royalties) external {\n checkOwner(token);\n //clearing royaltiesProviders value for the token\n delete royaltiesProviders[token];\n // setting royaltiesType = 1 for the token\n setRoyaltiesType(token, 1, address(0));\n uint sumRoyalties = 0;\n delete royaltiesByToken[token];\n for (uint i = 0; i < royalties.length; ++i) {\n require(royalties[i].account != address(0x0), \"RoyaltiesByToken recipient should be present\");\n require(royalties[i].value != 0, \"Royalty value for RoyaltiesByToken should be > 0\");\n royaltiesByToken[token].royalties.push(royalties[i]);\n sumRoyalties += royalties[i].value;\n }\n require(sumRoyalties < 10000, \"Set by token royalties sum more, than 100%\");\n royaltiesByToken[token].initialized = true;\n emit RoyaltiesSetForContract(token, royalties);\n }\n\n /// @dev checks if msg.sender is owner of this contract or owner of the token contract\n function checkOwner(address token) internal view {\n if ((owner() != _msgSender()) && (OwnableUpgradeable(token).owner() != _msgSender())) {\n revert(\"Token owner not detected\");\n }\n }\n\n /// @dev calculates royalties type for token contract\n function calculateRoyaltiesType(address token, address royaltiesProvider ) internal view returns(uint) { \n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 2;\n }\n } catch { }\n\n try IERC165Upgradeable(token).supportsInterface(LibRoyaltiesV1._INTERFACE_ID_FEES) returns(bool result) {\n if (result) {\n return 3;\n }\n } catch { }\n \n try IERC165Upgradeable(token).supportsInterface(LibRoyalties2981._INTERFACE_ID_ROYALTIES) returns(bool result) {\n if (result) {\n return 5;\n }\n } catch { }\n \n if (royaltiesProvider != address(0)) {\n return 4;\n }\n\n if (royaltiesByToken[token].initialized) {\n return 1;\n }\n\n return 6;\n }\n\n /// @dev returns royalties for token contract and token id\n function getRoyalties(address token, uint tokenId) override external returns (LibPart.Part[] memory) {\n uint royaltiesProviderData = royaltiesProviders[token];\n\n address royaltiesProvider = address(royaltiesProviderData);\n uint royaltiesType = _getRoyaltiesType(royaltiesProviderData);\n\n // case when royaltiesType is not set\n if (royaltiesType == 0) {\n // calculating royalties type for token\n royaltiesType = calculateRoyaltiesType(token, royaltiesProvider);\n \n //saving royalties type\n setRoyaltiesType(token, royaltiesType, royaltiesProvider);\n }\n\n //case royaltiesType = 1, royalties are set in royaltiesByToken\n if (royaltiesType == 1) {\n return royaltiesByToken[token].royalties;\n }\n\n //case royaltiesType = 2, royalties rarible v2\n if (royaltiesType == 2) {\n return getRoyaltiesRaribleV2(token,tokenId);\n }\n\n //case royaltiesType = 3, royalties rarible v1\n if (royaltiesType == 3) {\n return getRoyaltiesRaribleV1(token, tokenId);\n }\n\n //case royaltiesType = 4, royalties from external provider\n if (royaltiesType == 4) {\n return providerExtractor(token, tokenId, royaltiesProvider);\n }\n\n //case royaltiesType = 5, royalties EIP-2981\n if (royaltiesType == 5) {\n return getRoyaltiesEIP2981(token, tokenId);\n }\n\n // case royaltiesType = 6, unknown/empty royalties\n if (royaltiesType == 6) {\n return new LibPart.Part[](0);\n } \n\n revert(\"something wrong in getRoyalties\");\n }\n\n /// @dev tries to get royalties rarible-v2 for token and tokenId\n function getRoyaltiesRaribleV2(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try RoyaltiesV2(token).getRaribleV2Royalties(tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties rarible-v1 for token and tokenId\n function getRoyaltiesRaribleV1(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n RoyaltiesV1 v1 = RoyaltiesV1(token);\n address payable[] memory recipients;\n try v1.getFeeRecipients(tokenId) returns (address payable[] memory resultRecipients) {\n recipients = resultRecipients;\n } catch {\n return new LibPart.Part[](0);\n }\n uint[] memory values;\n try v1.getFeeBps(tokenId) returns (uint[] memory resultValues) {\n values = resultValues;\n } catch {\n return new LibPart.Part[](0);\n }\n if (values.length != recipients.length) {\n return new LibPart.Part[](0);\n }\n LibPart.Part[] memory result = new LibPart.Part[](values.length);\n for (uint256 i = 0; i < values.length; ++i) {\n result[i].value = uint96(values[i]);\n result[i].account = recipients[i];\n }\n return result;\n }\n\n /// @dev tries to get royalties EIP-2981 for token and tokenId\n function getRoyaltiesEIP2981(address token, uint tokenId) internal view returns (LibPart.Part[] memory) {\n try IERC2981(token).royaltyInfo(tokenId, LibRoyalties2981._WEIGHT_VALUE) returns (address receiver, uint256 royaltyAmount) {\n return LibRoyalties2981.calculateRoyalties(receiver, royaltyAmount);\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n /// @dev tries to get royalties for token and tokenId from external provider set in royaltiesProviders\n function providerExtractor(address token, uint tokenId, address providerAddress) internal returns (LibPart.Part[] memory) {\n try IRoyaltiesProvider(providerAddress).getRoyalties(token, tokenId) returns (LibPart.Part[] memory result) {\n return result;\n } catch {\n return new LibPart.Part[](0);\n }\n }\n\n uint256[46] private __gap;\n}\n" - }, - "@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/LibRoyaltiesV2.sol\";\nimport \"@rarible/royalties/contracts/RoyaltiesV2.sol\";\n\nabstract contract RoyaltiesV2Upgradeable is ERC165Upgradeable, RoyaltiesV2 {\n function __RoyaltiesV2Upgradeable_init_unchained() internal initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n}\n" - }, - "@rarible/royalties/contracts/IERC2981.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n///\n/// @dev Interface for the NFT Royalty Standard\n///\n//interface IERC2981 is IERC165 {\ninterface IERC2981 {\n /// ERC165 bytes to add to interface array - set in parent contract\n /// implementing this standard\n ///\n /// bytes4(keccak256(\"royaltyInfo(uint256,uint256)\")) == 0x2a55205a\n /// bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n /// _registerInterface(_INTERFACE_ID_ERC2981);\n\n /// @notice Called with the sale price to determine how much royalty\n // is owed and to whom.\n /// @param _tokenId - the NFT asset queried for royalty information\n /// @param _salePrice - the sale price of the NFT asset specified by _tokenId\n /// @return receiver - address of who should be sent the royalty payment\n /// @return royaltyAmount - the royalty payment amount for _salePrice\n function royaltyInfo(\n uint256 _tokenId,\n uint256 _salePrice\n ) external view returns (\n address receiver,\n uint256 royaltyAmount\n );\n}" - }, - "@rarible/royalties/contracts/impl/AbstractRoyalties.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nabstract contract AbstractRoyalties {\n mapping (uint256 => LibPart.Part[]) internal royalties;\n\n function _saveRoyalties(uint256 id, LibPart.Part[] memory _royalties) internal {\n uint256 totalValue;\n for (uint i = 0; i < _royalties.length; ++i) {\n require(_royalties[i].account != address(0x0), \"Recipient should be present\");\n require(_royalties[i].value != 0, \"Royalty value should be positive\");\n totalValue += _royalties[i].value;\n royalties[id].push(_royalties[i]);\n }\n require(totalValue < 10000, \"Royalty total value should be < 10000\");\n _onRoyaltiesSet(id, _royalties);\n }\n\n function _updateAccount(uint256 _id, address _from, address _to) internal {\n uint length = royalties[_id].length;\n for(uint i = 0; i < length; ++i) {\n if (royalties[_id][i].account == _from) {\n royalties[_id][i].account = payable(address(uint160(_to)));\n }\n }\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) virtual internal;\n}\n" - }, - "@rarible/royalties/contracts/impl/RoyaltiesV1Impl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV1.sol\";\n\ncontract RoyaltiesV1Impl is AbstractRoyalties, RoyaltiesV1 {\n\n function getFeeRecipients(uint256 id) public override view returns (address payable[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n address payable[] memory result = new address payable[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = address(uint160(_royalties[i].account));\n }\n return result;\n }\n\n function getFeeBps(uint256 id) public override view returns (uint[] memory) {\n LibPart.Part[] memory _royalties = royalties[id];\n uint[] memory result = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n result[i] = _royalties[i].value;\n }\n return result;\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n address[] memory recipients = new address[](_royalties.length);\n uint[] memory bps = new uint[](_royalties.length);\n for (uint i = 0; i < _royalties.length; ++i) {\n recipients[i] = _royalties[i].account;\n bps[i] = _royalties[i].value;\n }\n emit SecondarySaleFees(id, recipients, bps);\n }\n}\n" - }, - "@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"./AbstractRoyalties.sol\";\nimport \"../RoyaltiesV2.sol\";\nimport \"../IERC2981.sol\";\nimport \"../LibRoyalties2981.sol\";\n\ncontract RoyaltiesV2Impl is AbstractRoyalties, RoyaltiesV2, IERC2981 {\n\n function getRaribleV2Royalties(uint256 id) override external view returns (LibPart.Part[] memory) {\n return royalties[id];\n }\n\n function _onRoyaltiesSet(uint256 id, LibPart.Part[] memory _royalties) override internal {\n emit RoyaltiesSet(id, _royalties);\n }\n\n /*\n *Token (ERC721, ERC721Minimal, ERC721MinimalMeta, ERC1155 ) can have a number of different royalties beneficiaries\n *calculate sum all royalties, but royalties beneficiary will be only one royalties[0].account, according to rules of IERC2981\n */\n function royaltyInfo(uint256 id, uint256 _salePrice) override external view returns (address receiver, uint256 royaltyAmount) {\n if (royalties[id].length == 0) {\n receiver = address(0);\n royaltyAmount = 0;\n return(receiver, royaltyAmount);\n }\n LibPart.Part[] memory _royalties = royalties[id];\n receiver = _royalties[0].account;\n uint percent;\n for (uint i = 0; i < _royalties.length; ++i) {\n percent += _royalties[i].value;\n }\n //don`t need require(percent < 10000, \"Token royalty > 100%\"); here, because check later in calculateRoyalties\n royaltyAmount = percent * _salePrice / 10000;\n }\n}\n" - }, - "@rarible/royalties/contracts/LibRoyalties2981.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\nlibrary LibRoyalties2981 {\n /*\n * https://eips.ethereum.org/EIPS/eip-2981: bytes4 private constant _INTERFACE_ID_ERC2981 = 0x2a55205a;\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0x2a55205a;\n uint96 constant _WEIGHT_VALUE = 1000000;\n\n /*Method for converting amount to percent and forming LibPart*/\n function calculateRoyalties(address to, uint256 amount) internal view returns (LibPart.Part[] memory) {\n LibPart.Part[] memory result;\n if (amount == 0) {\n return result;\n }\n uint256 percent = amount * 10000 / _WEIGHT_VALUE;\n require(percent < 10000, \"Royalties 2981 exceeds 100%\");\n result = new LibPart.Part[](1);\n result[0].account = payable(to);\n result[0].value = uint96(percent);\n return result;\n }\n}\n" - }, - "@rarible/royalties/contracts/LibRoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV1 {\n /*\n * bytes4(keccak256('getFeeBps(uint256)')) == 0x0ebd4c7f\n * bytes4(keccak256('getFeeRecipients(uint256)')) == 0xb9c4d9fb\n *\n * => 0x0ebd4c7f ^ 0xb9c4d9fb == 0xb7799584\n */\n bytes4 constant _INTERFACE_ID_FEES = 0xb7799584;\n}\n" - }, - "@rarible/royalties/contracts/LibRoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\nlibrary LibRoyaltiesV2 {\n /*\n * bytes4(keccak256('getRaribleV2Royalties(uint256)')) == 0xcad96cca\n */\n bytes4 constant _INTERFACE_ID_ROYALTIES = 0xcad96cca;\n}\n" - }, - "@rarible/royalties/contracts/RoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\n\ninterface RoyaltiesV1 {\n event SecondarySaleFees(uint256 tokenId, address[] recipients, uint[] bps);\n\n function getFeeRecipients(uint256 id) external view returns (address payable[] memory);\n function getFeeBps(uint256 id) external view returns (uint[] memory);\n}\n" - }, - "@rarible/royalties/contracts/RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\ninterface RoyaltiesV2 {\n event RoyaltiesSet(uint256 tokenId, LibPart.Part[] royalties);\n\n function getRaribleV2Royalties(uint256 id) external view returns (LibPart.Part[] memory);\n}\n" - }, - "@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC1155RoyaltiesV2 is RoyaltiesV2Impl, ERC1155Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, uint amount, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId, amount, \"\");\n _saveRoyalties(tokenId, _fees);\n }\n}\n" - }, - "@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV1Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV1.sol\";\n\ncontract TestERC721RoyaltiesV1 is RoyaltiesV1Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV1._INTERFACE_ID_FEES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" - }, - "@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\nimport \"../../contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"../../contracts/LibRoyaltiesV2.sol\";\n\ncontract TestERC721RoyaltiesV2 is RoyaltiesV2Impl, ERC721Upgradeable {\n function initialize() public initializer {\n _registerInterface(LibRoyaltiesV2._INTERFACE_ID_ROYALTIES);\n }\n function mint(address to, uint tokenId, LibPart.Part[] memory _fees) external {\n _mint(to, tokenId);\n _saveRoyalties(tokenId, _fees);\n }\n}\n" - }, - "@rarible/test/contracts/TestERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts/token/ERC1155/ERC1155.sol\";\nimport \"@openzeppelin/contracts/utils/Pausable.sol\";\n\ncontract TestERC1155 is ERC1155, Pausable {\n constructor() ERC1155(\"uri\"){\n\n }\n\n function mint(address to, uint tokenId, uint amount) external {\n _mint(to, tokenId, amount, \"\");\n }\n\n function batchSafeTransferFrom(\n address[] memory froms,\n address[] memory tos,\n uint256[] memory ids,\n uint256[] memory amounts\n ) external {\n require(froms.length == tos.length, \"wrong length 1\");\n require(tos.length == ids.length, \"wrong length 2\");\n require(ids.length == amounts.length, \"wrong length 3\");\n\n for (uint i = 0; i < froms.length; i ++) {\n safeTransferFrom(froms[i], tos[i], ids[i], amounts[i], \"\");\n }\n }\n\n function emitPauseEvent(bool paused) external {\n if (paused) {\n emit Paused(address(0));\n } else {\n emit Unpaused(address(0));\n }\n }\n}\n" - }, - "@rarible/test/contracts/TestERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol\";\n\ncontract TestERC20 is ERC20Upgradeable {\n function mint(address to, uint amount) external {\n _mint(to, amount);\n }\n\n function init() external {\n __ERC20_init(\"TestERC20\", \"TE20\");\n }\n}\n" - }, - "@rarible/test/contracts/TestERC721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol\";\n\ncontract TestERC721 is ERC721Upgradeable {\n constructor(string memory _name, string memory _symbol) public {\n __ERC721_init(_name, _symbol);\n }\n\n function mint(address to, uint tokenId) external {\n _mint(to, tokenId);\n }\n\n function setBaseURI(string calldata uri) external {\n\n }\n\n function reveal(uint256 _index) external {\n emit TokenURIRevealed(_index, \"test\");\n }\n\n function getBatchIdAtIndex(uint256 _index) external view returns (uint256) {\n return 10;\n }\n\n event TokenURIRevealed(uint256 indexed index, string revealedURI);\n}\n" - }, - "@rarible/tokens/contracts/access/MinterAccessControl.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nabstract contract MinterAccessControl is OwnableUpgradeable {\n mapping(address => bool) private _minters;\n \n event MinterStatusChanged(address indexed minter, bool indexed status);\n\n function __MinterAccessControl_init() internal initializer {\n __Ownable_init_unchained();\n __MinterAccessControl_init_unchained();\n }\n\n function __MinterAccessControl_init_unchained() internal initializer {\n }\n\n /**\n * @dev Add `minter` to the list of allowed minters.\n */\n function addMinter(address minter) external onlyOwner {\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n\n /**\n * @dev Add `minters` to the list of allowed minters.\n */\n function addMinters(address[] memory minters) external onlyOwner {\n for (uint i = 0; i < minters.length; ++i) {\n address minter = minters[i];\n _minters[minter] = true;\n emit MinterStatusChanged(minter, true);\n }\n }\n\n /**\n * @dev Revoke `_minter` from the list of allowed minters.\n */\n function removeMinter(address _minter) external onlyOwner {\n _minters[_minter] = false;\n emit MinterStatusChanged(_minter, false);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted to minters.\n */\n function isMinter(address account) public view returns (bool) {\n return _minters[account];\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC1155RaribleBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeacon is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity ^0.7.0;\n\nimport \"@openzeppelin/contracts/proxy/UpgradeableBeacon.sol\";\n\ncontract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon {\n constructor(address impl) UpgradeableBeacon(impl) {\n\n }\n}\n" - }, - "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-1155/ERC1155Rarible.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC1155Rarible token.\n *\n * The beacon should be initialized before call ERC1155RaribleFactoryC2 constructor.\n *\n */\ncontract ERC1155RaribleFactoryC2 is Ownable{\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create1155RaribleProxy(address proxy);\n event Create1155RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { \n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n\n ERC1155Rarible token = ERC1155Rarible(beaconProxy);\n token.transferOwnership(_msgSender());\n emit Create1155RaribleProxy(beaconProxy);\n }\n \n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n\n ERC1155Rarible token = ERC1155Rarible(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create1155RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC1155Rarible(0).__ERC1155RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n\n}\n" - }, - "@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.2 <0.8.0;\npragma abicoder v2;\n\nimport \"../erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport \"@openzeppelin/contracts/proxy/BeaconProxy.sol\";\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\n/**\n * @dev This contract is for creating proxy to access ERC721Rarible token.\n *\n * The beacon should be initialized before call ERC721RaribleFactoryC2 constructor.\n *\n */\ncontract ERC721RaribleFactoryC2 is Ownable {\n address public beacon;\n address transferProxy;\n address lazyTransferProxy;\n\n event Create721RaribleProxy(address proxy);\n event Create721RaribleUserProxy(address proxy);\n\n constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) {\n beacon = _beacon;\n transferProxy = _transferProxy;\n lazyTransferProxy = _lazyTransferProxy;\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleProxy(beaconProxy);\n }\n\n function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint salt) external {\n address beaconProxy = deployProxy(getData(_name, _symbol, baseURI, contractURI, operators), salt);\n ERC721RaribleMinimal token = ERC721RaribleMinimal(address(beaconProxy));\n token.transferOwnership(_msgSender());\n emit Create721RaribleUserProxy(beaconProxy);\n }\n\n //deploying BeaconProxy contract with create2\n function deployProxy(bytes memory data, uint salt) internal returns(address proxy){\n bytes memory bytecode = getCreationBytecode(data);\n assembly {\n proxy := create2(0, add(bytecode, 0x20), mload(bytecode), salt)\n if iszero(extcodesize(proxy)) {\n revert(0, 0)\n }\n }\n }\n\n //adding constructor arguments to BeaconProxy bytecode\n function getCreationBytecode(bytes memory _data) internal view returns (bytes memory) {\n return abi.encodePacked(type(BeaconProxy).creationCode, abi.encode(beacon, _data));\n }\n\n //returns address that contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721Rarible_init.selector, _name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n }\n\n //returns address that private contract with such arguments will be deployed on\n function getAddress(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, uint _salt)\n public\n view\n returns (address)\n { \n bytes memory bytecode = getCreationBytecode(getData(_name, _symbol, baseURI, contractURI, operators));\n\n bytes32 hash = keccak256(\n abi.encodePacked(bytes1(0xff), address(this), _salt, keccak256(bytecode))\n );\n\n return address(uint160(uint(hash)));\n }\n\n function getData(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators) view internal returns(bytes memory){\n return abi.encodeWithSelector(ERC721RaribleMinimal(0).__ERC721RaribleUser_init.selector, _name, _symbol, baseURI, contractURI, operators, transferProxy, lazyTransferProxy);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC1155Base.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleUserMeta\", \"1\");\n \n isPrivate = true;\n\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC1155RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Base.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC1155BurnableUpgradeable.sol\";\nimport \"./ERC1155DefaultApproval.sol\";\nimport \"./ERC1155Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC1155Base is OwnableUpgradeable, ERC1155DefaultApproval, ERC1155BurnableUpgradeable, ERC1155Lazy, HasContractURI {\n string public name;\n string public symbol;\n\n event BurnLazy(address indexed operator, address indexed account, uint256 id, uint256 amount);\n event BurnLazyBatch(address indexed operator, address indexed account, uint256[] ids, uint256[] amounts);\n event BaseUriChanged(string newBaseURI);\n\n function isApprovedForAll(address _owner, address _operator) public override(ERC1155Upgradeable, ERC1155DefaultApproval, IERC1155Upgradeable) view returns (bool) {\n return ERC1155DefaultApproval.isApprovedForAll(_owner, _operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC1155Lazy, ERC165Upgradeable) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) public virtual override {\n require(ids.length == amounts.length, \"ids != amounts\");\n uint256[] memory leftToBurns = new uint256[](ids.length);\n uint256[] memory lazyToBurns = new uint256[](ids.length);\n for (uint i = 0; i < ids.length; ++i) {\n (leftToBurns[i], lazyToBurns[i]) = _burnLazy(ids[i], amounts[i]);\n }\n ERC1155BurnableUpgradeable.burnBatch(account, ids, leftToBurns);\n emit BurnLazyBatch(_msgSender(), account, ids, lazyToBurns);\n }\n\n function burn(address account, uint256 id, uint256 amount) public virtual override {\n (uint256 leftToBurn, uint256 lazyToBurn) = _burnLazy(id, amount);\n if (leftToBurn > 0) {\n //token exists, burn Minted\n ERC1155BurnableUpgradeable.burn(account, id, leftToBurn);\n }\n if (lazyToBurn > 0) {\n emit BurnLazy(_msgSender(), account, id, lazyToBurn);\n }\n\n }\n\n function _burnLazy(uint256 id, uint256 amount) internal returns (uint256 leftToBurn, uint256 lazyToBurn) {\n leftToBurn = amount;\n lazyToBurn = 0;\n address creator = address(id >> 96);\n if (creator == _msgSender()) {\n lazyToBurn = amount;\n uint supply = ERC1155Lazy._getSupply(id);\n if (supply != 0) {\n //calculate Lazy amount available for burn\n uint256 lazyBalance = supply - ERC1155Lazy._getMinted(id);\n if (amount > lazyBalance) {//need to burn more than available\n lazyToBurn = lazyBalance;\n }\n }\n ERC1155Lazy._addMinted(id, lazyToBurn);\n leftToBurn = amount - lazyToBurn;\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override(ERC1155Upgradeable, ERC1155Lazy) {\n ERC1155Lazy._mint(account, id, amount, data);\n }\n\n function __ERC1155Base_init_unchained(string memory _name, string memory _symbol) internal {\n name = _name;\n symbol = _symbol;\n }\n\n function uri(uint id) external view override(ERC1155BaseURI, ERC1155Upgradeable) virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155BaseURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\nimport \"./ERC1155Upgradeable.sol\";\n\ncontract ERC1155BaseURI is ERC1155Upgradeable {\n using StringsUpgradeable for uint;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n function uri(uint id) external view override virtual returns (string memory) {\n return _tokenURI(id);\n }\n\n function _tokenURI(uint256 tokenId) internal view virtual returns (string memory) {\n string memory __tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return __tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(__tokenURI).length > 0) {\n return LibURI.checkPrefix(base, __tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _uri) internal virtual {\n _tokenURIs[tokenId] = _uri;\n emit URI(_tokenURI(tokenId), tokenId);\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n * @dev Extension of {ERC1155} that allows token holders to destroy both their\n * own tokens and those that they have been approved to use.\n *\n * _Available since v3.1._\n */\nabstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable {\n function __ERC1155Burnable_init() internal {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155Burnable_init_unchained();\n }\n\n function __ERC1155Burnable_init_unchained() internal {\n }\n function burn(address account, uint256 id, uint256 value) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burn(account, id, value);\n }\n\n function burnBatch(address account, uint256[] memory ids, uint256[] memory values) public virtual {\n require(\n account == _msgSender() || isApprovedForAll(account, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n _burnBatch(account, ids, values);\n }\n \n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155DefaultApproval.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC1155Upgradeable.sol\";\n\nabstract contract ERC1155DefaultApproval is ERC1155Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function isApprovedForAll(address _owner, address _operator) public virtual override view returns (bool) {\n return defaultApprovals[_operator] || super.isApprovedForAll(_owner, _operator);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Lazy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"./Mint1155Validator.sol\";\nimport \"./ERC1155BaseURI.sol\";\n\nabstract contract ERC1155Lazy is IERC1155LazyMint, ERC1155BaseURI, Mint1155Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n mapping(uint256 => LibPart.Part[]) private creators;\n mapping(uint => uint) private supply;\n mapping(uint => uint) private minted;\n\n function __ERC1155Lazy_init_unchained() internal {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC1155LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC1155\n || interfaceId == _INTERFACE_ID_ERC1155_METADATA_URI;\n }\n\n function transferFromOrMint(\n LibERC1155LazyMint.Mint1155Data memory data,\n address from,\n address to,\n uint256 amount\n ) override external {\n uint balance = balanceOf(from, data.tokenId);\n uint left = amount;\n if (balance != 0) {\n uint transfer = amount;\n if (balance < amount) {\n transfer = balance;\n }\n safeTransferFrom(from, to, data.tokenId, transfer, \"\");\n left = amount - transfer;\n }\n if (left > 0) {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to, left);\n }\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC1155: transfer caller is not approved\");\n require(_amount > 0, \"amount incorrect\");\n\n if (supply[data.tokenId] == 0) {\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.supply > 0, \"supply incorrect\");\n require(data.creators.length == data.signatures.length);\n\n bytes32 hash = LibERC1155LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _saveSupply(data.tokenId, data.supply);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n _mint(to, data.tokenId, _amount, \"\");\n if (minter != to) {\n emit TransferSingle(sender, address(0), minter, data.tokenId, _amount);\n emit TransferSingle(sender, minter, to, data.tokenId, _amount);\n } else {\n emit TransferSingle(sender, address(0), to, data.tokenId, _amount);\n }\n }\n\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual override {\n uint newMinted = amount.add(minted[id]);\n require(newMinted <= supply[id], \"more than supply\");\n minted[id] = newMinted;\n\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n function _saveSupply(uint tokenId, uint _supply) internal {\n require(supply[tokenId] == 0);\n supply[tokenId] = _supply;\n emit Supply(tokenId, _supply);\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function _addMinted(uint256 tokenId, uint amount) internal {\n minted[tokenId] += amount;\n }\n\n function _getMinted(uint256 tokenId) internal view returns (uint) {\n return minted[tokenId];\n }\n\n function _getSupply(uint256 tokenId) internal view returns (uint) {\n return supply[tokenId];\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC1155Base.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl {\n event CreateERC1155Rarible(address owner, string name, string symbol);\n event CreateERC1155RaribleUser(address owner, string name, string symbol);\n\n function __ERC1155RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n \n isPrivate = true;\n emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol);\n }\n \n function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC1155Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n __Ownable_init_unchained();\n __ERC1155Lazy_init_unchained();\n __ERC165_init_unchained();\n __Context_init_unchained();\n __Mint1155Validator_init_unchained();\n __ERC1155_init_unchained(\"\");\n __HasContractURI_init_unchained(contractURI);\n __ERC1155Burnable_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __ERC1155Base_init_unchained(_name, _symbol);\n __MinterAccessControl_init_unchained();\n _setBaseURI(baseURI);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC1155LazyMint.Mint1155Data memory data, address to, uint256 _amount) public override {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to, _amount);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/ERC1155Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155MetadataURIUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n/**\n *\n * @dev Implementation of the basic standard multi-token.\n * See https://eips.ethereum.org/EIPS/eip-1155\n * Originally based on code by Enjin: https://github.com/enjin/erc-1155\n *\n * _Available since v3.1._\n */\ncontract ERC1155Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC1155Upgradeable, IERC1155MetadataURIUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n\n // Mapping from token ID to account balances\n mapping (uint256 => mapping(address => uint256)) internal _balances;\n\n // Mapping from account to operator approvals\n mapping (address => mapping(address => bool)) private _operatorApprovals;\n\n // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json\n string private _uri;\n\n /*\n * bytes4(keccak256('balanceOf(address,uint256)')) == 0x00fdd58e\n * bytes4(keccak256('balanceOfBatch(address[],uint256[])')) == 0x4e1273f4\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,uint256,bytes)')) == 0xf242432a\n * bytes4(keccak256('safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)')) == 0x2eb2c2d6\n *\n * => 0x00fdd58e ^ 0x4e1273f4 ^ 0xa22cb465 ^\n * 0xe985e9c5 ^ 0xf242432a ^ 0x2eb2c2d6 == 0xd9b67a26\n */\n bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;\n\n /*\n * bytes4(keccak256('uri(uint256)')) == 0x0e89341c\n */\n bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;\n\n /**\n * @dev See {_setURI}.\n */\n function __ERC1155_init(string memory uri_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC1155_init_unchained(uri_);\n }\n\n function __ERC1155_init_unchained(string memory uri_) internal initializer {\n _setURI(uri_);\n\n // register the supported interfaces to conform to ERC1155 via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155);\n\n // register the supported interfaces to conform to ERC1155MetadataURI via ERC165\n _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);\n }\n\n /**\n * @dev See {IERC1155MetadataURI-uri}.\n *\n * This implementation returns the same URI for *all* token types. It relies\n * on the token type ID substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * Clients calling this function must replace the `\\{id\\}` substring with the\n * actual token type ID.\n */\n function uri(uint256) external view virtual override returns (string memory) {\n return _uri;\n }\n\n /**\n * @dev See {IERC1155-balanceOf}.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n */\n function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {\n require(account != address(0), \"ERC1155: balance query for the zero address\");\n return _balances[id][account];\n }\n\n /**\n * @dev See {IERC1155-balanceOfBatch}.\n *\n * Requirements:\n *\n * - `accounts` and `ids` must have the same length.\n */\n function balanceOfBatch(\n address[] memory accounts,\n uint256[] memory ids\n )\n public\n view\n virtual\n override\n returns (uint256[] memory)\n {\n require(accounts.length == ids.length, \"ERC1155: accounts and ids length mismatch\");\n\n uint256[] memory batchBalances = new uint256[](accounts.length);\n\n for (uint256 i = 0; i < accounts.length; ++i) {\n batchBalances[i] = balanceOf(accounts[i], ids[i]);\n }\n\n return batchBalances;\n }\n\n /**\n * @dev See {IERC1155-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(_msgSender() != operator, \"ERC1155: setting approval status for self\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC1155-isApprovedForAll}.\n */\n function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[account][operator];\n }\n\n /**\n * @dev See {IERC1155-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][from] = _balances[id][from].sub(amount, \"ERC1155: insufficient balance for transfer\");\n _balances[id][to] = _balances[id][to].add(amount);\n\n emit TransferSingle(operator, from, to, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);\n }\n\n /**\n * @dev See {IERC1155-safeBatchTransferFrom}.\n */\n function safeBatchTransferFrom(\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n public\n virtual\n override\n {\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n require(to != address(0), \"ERC1155: transfer to the zero address\");\n require(\n from == _msgSender() || isApprovedForAll(from, _msgSender()),\n \"ERC1155: transfer caller is not owner nor approved\"\n );\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, from, to, ids, amounts, data);\n\n for (uint256 i = 0; i < ids.length; ++i) {\n uint256 id = ids[i];\n uint256 amount = amounts[i];\n\n _balances[id][from] = _balances[id][from].sub(\n amount,\n \"ERC1155: insufficient balance for transfer\"\n );\n _balances[id][to] = _balances[id][to].add(amount);\n }\n\n emit TransferBatch(operator, from, to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);\n }\n\n /**\n * @dev Sets a new URI for all token types, by relying on the token type ID\n * substitution mechanism\n * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].\n *\n * By this mechanism, any occurrence of the `\\{id\\}` substring in either the\n * URI or any of the amounts in the JSON file at said URI will be replaced by\n * clients with the token type ID.\n *\n * For example, the `https://token-cdn-domain/\\{id\\}.json` URI would be\n * interpreted by clients as\n * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`\n * for token type ID 0x4cce0.\n *\n * See {uri}.\n *\n * Because these URIs cannot be meaningfully represented by the {URI} event,\n * this function emits no events.\n */\n function _setURI(string memory newuri) internal virtual {\n _uri = newuri;\n }\n\n /**\n * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.\n *\n * Emits a {TransferSingle} event.\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the\n * acceptance magic value.\n */\n function _mint(address account, uint256 id, uint256 amount, bytes memory data) internal virtual {\n require(account != address(0), \"ERC1155: mint to the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);\n\n _balances[id][account] = _balances[id][account].add(amount);\n emit TransferSingle(operator, address(0), account, id, amount);\n\n _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the\n * acceptance magic value.\n */\n function _mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal virtual {\n require(to != address(0), \"ERC1155: mint to the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][to] = amounts[i].add(_balances[ids[i]][to]);\n }\n\n emit TransferBatch(operator, address(0), to, ids, amounts);\n\n _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);\n }\n\n /**\n * @dev Destroys `amount` tokens of token type `id` from `account`\n *\n * Requirements:\n *\n * - `account` cannot be the zero address.\n * - `account` must have at least `amount` tokens of token type `id`.\n */\n function _burn(address account, uint256 id, uint256 amount) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), \"\");\n\n _balances[id][account] = _balances[id][account].sub(\n amount,\n \"ERC1155: burn amount exceeds balance\"\n );\n\n emit TransferSingle(operator, account, address(0), id, amount);\n }\n\n /**\n * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.\n *\n * Requirements:\n *\n * - `ids` and `amounts` must have the same length.\n */\n function _burnBatch(address account, uint256[] memory ids, uint256[] memory amounts) internal virtual {\n require(account != address(0), \"ERC1155: burn from the zero address\");\n require(ids.length == amounts.length, \"ERC1155: ids and amounts length mismatch\");\n\n address operator = _msgSender();\n\n _beforeTokenTransfer(operator, account, address(0), ids, amounts, \"\");\n\n for (uint i = 0; i < ids.length; ++i) {\n _balances[ids[i]][account] = _balances[ids[i]][account].sub(\n amounts[i],\n \"ERC1155: burn amount exceeds balance\"\n );\n }\n\n emit TransferBatch(operator, account, address(0), ids, amounts);\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning, as well as batched variants.\n *\n * The same hook is called on both single and batched variants. For single\n * transfers, the length of the `id` and `amount` arrays will be 1.\n *\n * Calling conditions (for each `id` and `amount` pair):\n *\n * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n * of token type `id` will be transferred to `to`.\n * - When `from` is zero, `amount` tokens of token type `id` will be minted\n * for `to`.\n * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`\n * will be burned.\n * - `from` and `to` are never both zero.\n * - `ids` and `amounts` have the same, non-zero length.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n internal\n virtual\n { }\n\n function _doSafeTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256 id,\n uint256 amount,\n bytes memory data\n )\n internal\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155Received.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _doSafeBatchTransferAcceptanceCheck(\n address operator,\n address from,\n address to,\n uint256[] memory ids,\n uint256[] memory amounts,\n bytes memory data\n )\n private\n {\n if (to.isContract()) {\n try IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (bytes4 response) {\n if (response != IERC1155ReceiverUpgradeable(to).onERC1155BatchReceived.selector) {\n revert(\"ERC1155: ERC1155Receiver rejected tokens\");\n }\n } catch Error(string memory reason) {\n revert(reason);\n } catch {\n revert(\"ERC1155: transfer to non ERC1155Receiver implementer\");\n }\n }\n }\n\n function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) {\n uint256[] memory array = new uint256[](1);\n array[0] = element;\n\n return array;\n }\n uint256[47] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1155/Mint1155Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"../erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\ncontract Mint1155Validator is ERC1271Validator {\n function __Mint1155Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint1155\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-1271/ERC1271Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-signature/contracts/ERC1271.sol\";\nimport \"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\";\nimport \"@rarible/lib-signature/contracts/LibSignature.sol\";\n\nabstract contract ERC1271Validator is EIP712Upgradeable {\n using AddressUpgradeable for address;\n using LibSignature for bytes32;\n\n string constant SIGNATURE_ERROR = \"signature verification error\";\n bytes4 constant internal MAGICVALUE = 0x1626ba7e;\n\n function validate1271(address signer, bytes32 structHash, bytes memory signature) internal view {\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signerFromSig;\n if (signature.length == 65) {\n signerFromSig = hash.recover(signature);\n }\n if (signerFromSig != signer) {\n if (signer.isContract()) {\n require(\n ERC1271(signer).isValidSignature(hash, signature) == MAGICVALUE,\n SIGNATURE_ERROR\n );\n } else {\n revert(SIGNATURE_ERROR);\n }\n }\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/meta-tx/contracts/EIP712MetaTransaction.sol\";\nimport \"../ERC721BaseMinimal.sol\";\nimport \"../../IsPrivateCollection.sol\";\nimport \"../../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl, EIP712MetaTransaction {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleUserMeta\", \"1\");\n\n isPrivate = true;\n\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n __MetaTransaction_init_unchained(\"ERC721RaribleMeta\", \"1\");\n\n isPrivate = false;\n\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) {\n return super._msgSender();\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721BaseMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeableMinimal.sol\";\nimport \"./ERC721DefaultApprovalMinimal.sol\";\nimport \"./ERC721LazyMinimal.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721BaseMinimal is OwnableUpgradeable, ERC721DefaultApprovalMinimal, ERC721BurnableUpgradeableMinimal, ERC721LazyMinimal, HasContractURI {\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721UpgradeableMinimal, ERC721DefaultApprovalMinimal) view returns (bool) {\n return ERC721DefaultApprovalMinimal._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApprovalMinimal, ERC721UpgradeableMinimal, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApprovalMinimal.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721LazyMinimal) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721LazyMinimal) returns (string memory) {\n return ERC721LazyMinimal.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._clearMetadata(tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override(ERC721UpgradeableMinimal, ERC721LazyMinimal) virtual {\n return ERC721LazyMinimal._emitMintEvent(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721BurnableUpgradeableMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeableMinimal is Initializable, ContextUpgradeable, ERC721UpgradeableMinimal {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n\n uint256[50] private __gap;\n}" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721DefaultApprovalMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\n\nabstract contract ERC721DefaultApprovalMinimal is ERC721UpgradeableMinimal {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721LazyMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"./ERC721URI.sol\";\n\nabstract contract ERC721LazyMinimal is IERC721LazyMint, ERC721UpgradeableMinimal, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl, ERC721URI {\n using SafeMathUpgradeable for uint;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal override virtual {\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n function tokenURI(uint256 tokenId) public view virtual override(ERC721UpgradeableMinimal, ERC721URI) returns (string memory) {\n return ERC721URI.tokenURI(tokenId);\n }\n\n function _clearMetadata(uint256 tokenId) internal override(ERC721UpgradeableMinimal, ERC721URI) virtual {\n return ERC721URI._clearMetadata(tokenId);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721BaseMinimal.sol\";\nimport \"../IsPrivateCollection.sol\";\nimport \"../access/MinterAccessControl.sol\";\n\ncontract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterAccessControl {\n event CreateERC721Rarible(address owner, string name, string symbol);\n event CreateERC721RaribleUser(address owner, string name, string symbol);\n\n function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = true;\n emit CreateERC721RaribleUser(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n\n isPrivate = false;\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __MinterAccessControl_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n if (isPrivate){\n require(owner() == data.creators[0].account || isMinter(data.creators[0].account), \"not owner or minter\");\n }\n super.mintAndTransfer(data, to);\n }\n}\n" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721UpgradeableMinimal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\n/**\n * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including\n * the Metadata extension, but not including the Enumerable extension, which is available separately as\n * {ERC721Enumerable}.\n */\ncontract ERC721UpgradeableMinimal is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable {\n using AddressUpgradeable for address;\n using StringsUpgradeable for uint256;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Mapping from token ID to owner address\n mapping(uint256 => address) private _owners;\n\n // Mapping owner address to token count\n mapping(address => uint256) private _balances;\n\n // Mapping from token ID to approved address\n mapping(uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping(address => mapping(address => bool)) private _operatorApprovals;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _balances[owner];\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n address owner = _owners[tokenId];\n require(owner != address(0), \"ERC721: owner query for nonexistent token\");\n return owner;\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(\n _msgSender() == owner || isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId\n ) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _owners[tokenId] != address(0);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(\n address to,\n uint256 tokenId,\n bytes memory _data\n ) internal virtual {\n _mint(to, tokenId);\n require(\n _checkOnERC721Received(address(0), to, tokenId, _data),\n \"ERC721: transfer to non ERC721Receiver implementer\"\n );\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n _emitMintEvent(to, tokenId);\n }\n\n function _emitMintEvent(address to, uint tokenId) internal virtual {\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721UpgradeableMinimal.ownerOf(tokenId);\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n _clearMetadata(tokenId);\n\n _balances[owner] -= 1;\n delete _owners[tokenId];\n //set token is burned\n _setBurned(tokenId);\n\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n function _clearMetadata(uint256 tokenId) internal virtual {\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {\n require(ERC721UpgradeableMinimal.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\");\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _balances[from] -= 1;\n _balances[to] += 1;\n _owners[tokenId] = to;\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Approve `to` to operate on `tokenId`\n *\n * Emits a {Approval} event.\n */\n function _approve(address to, uint256 tokenId) internal virtual {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721UpgradeableMinimal.ownerOf(tokenId), to, tokenId);\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(\n address from,\n address to,\n uint256 tokenId,\n bytes memory _data\n ) private returns (bool) {\n if (to.isContract()) {\n try IERC721ReceiverUpgradeable(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {\n return retval == IERC721ReceiverUpgradeable.onERC721Received.selector;\n } catch (bytes memory reason) {\n if (reason.length == 0) {\n revert(\"ERC721: transfer to non ERC721Receiver implementer\");\n } else {\n assembly {\n revert(add(32, reason), mload(reason))\n }\n }\n }\n } else {\n return true;\n }\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` and `to` are never both zero.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(\n address from,\n address to,\n uint256 tokenId\n ) internal virtual {}\n uint256[43] private __gap;\n}" - }, - "@rarible/tokens/contracts/erc-721-minimal/ERC721URI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721UpgradeableMinimal.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721URI is ContextUpgradeable, ERC721UpgradeableMinimal {\n using StringsUpgradeable for uint256;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _clearMetadata(uint256 tokenId) internal override virtual {\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n uint256[50] private __gap;\n}" - }, - "@rarible/tokens/contracts/erc-721/ERC721Base.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"./ERC721BurnableUpgradeable.sol\";\nimport \"./ERC721DefaultApproval.sol\";\nimport \"./ERC721Lazy.sol\";\nimport \"../HasContractURI.sol\";\n\nabstract contract ERC721Base is OwnableUpgradeable, ERC721DefaultApproval, ERC721BurnableUpgradeable, ERC721Lazy, HasContractURI {\n\n event BaseUriChanged(string newBaseURI);\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override(ERC721Upgradeable, ERC721DefaultApproval) view returns (bool) {\n return ERC721DefaultApproval._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override(ERC721DefaultApproval, ERC721Upgradeable, IERC721Upgradeable) returns (bool) {\n return ERC721DefaultApproval.isApprovedForAll(owner, operator);\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165Upgradeable, ERC721Lazy) returns (bool) {\n return super.supportsInterface(interfaceId);\n }\n\n function _mint(address to, uint256 tokenId) internal override(ERC721Lazy, ERC721Upgradeable) {\n super._mint(to, tokenId);\n }\n\n function setBaseURI(string memory newBaseURI) external onlyOwner {\n super._setBaseURI(newBaseURI);\n\n emit BaseUriChanged(newBaseURI);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721BurnableUpgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"./ERC721Upgradeable.sol\";\n\n/**\n * @title ERC721 Burnable Token\n * @dev ERC721 Token that can be irreversibly burned (destroyed).\n */\nabstract contract ERC721BurnableUpgradeable is Initializable, ContextUpgradeable, ERC721Upgradeable {\n function __ERC721Burnable_init() internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721Burnable_init_unchained();\n }\n\n function __ERC721Burnable_init_unchained() internal initializer {\n }\n /**\n * @dev Burns `tokenId`. See {ERC721-_burn}.\n *\n * Requirements:\n *\n * - The caller must own `tokenId` or be an approved operator.\n */\n function burn(uint256 tokenId) public virtual {\n if(!_exists(tokenId)) {\n address owner = address(tokenId >> 96);\n require(owner == _msgSender(), \"ERC721Burnable: caller is not owner, not burn\");\n _setBurned(tokenId);\n } else {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721Burnable: caller is not owner nor approved\");\n _burn(tokenId);\n }\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721DefaultApproval.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./ERC721Upgradeable.sol\";\n\nabstract contract ERC721DefaultApproval is ERC721Upgradeable {\n mapping(address => bool) private defaultApprovals;\n\n event DefaultApproval(address indexed operator, bool hasApproval);\n\n function _setDefaultApproval(address operator, bool hasApproval) internal {\n defaultApprovals[operator] = hasApproval;\n emit DefaultApproval(operator, hasApproval);\n }\n\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal virtual override view returns (bool) {\n return defaultApprovals[spender] || super._isApprovedOrOwner(spender, tokenId);\n }\n\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return defaultApprovals[operator] || super.isApprovedForAll(owner, operator);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721Lazy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Upgradeable.sol\";\nimport \"@rarible/royalties/contracts/impl/RoyaltiesV2Impl.sol\";\nimport \"@rarible/royalties-upgradeable/contracts/RoyaltiesV2Upgradeable.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"../Mint721Validator.sol\";\n\nabstract contract ERC721Lazy is IERC721LazyMint, ERC721Upgradeable, Mint721Validator, RoyaltiesV2Upgradeable, RoyaltiesV2Impl {\n using SafeMathUpgradeable for uint;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n\n bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // tokenId => creators\n mapping(uint256 => LibPart.Part[]) private creators;\n\n function __ERC721Lazy_init_unchained() internal initializer {\n\n }\n\n function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165Upgradeable, ERC165Upgradeable) returns (bool) {\n return interfaceId == LibERC721LazyMint._INTERFACE_ID_MINT_AND_TRANSFER\n || interfaceId == LibRoyaltiesV2._INTERFACE_ID_ROYALTIES\n || interfaceId == LibRoyalties2981._INTERFACE_ID_ROYALTIES\n || interfaceId == _INTERFACE_ID_ERC165\n || interfaceId == _INTERFACE_ID_ERC721\n || interfaceId == _INTERFACE_ID_ERC721_METADATA\n || interfaceId == _INTERFACE_ID_ERC721_ENUMERABLE;\n }\n\n function transferFromOrMint(\n LibERC721LazyMint.Mint721Data memory data,\n address from,\n address to\n ) override external {\n if (_exists(data.tokenId)) {\n safeTransferFrom(from, to, data.tokenId);\n } else {\n require(from == data.creators[0].account, \"wrong order maker\");\n mintAndTransfer(data, to);\n }\n }\n\n function mintAndTransfer(LibERC721LazyMint.Mint721Data memory data, address to) public override virtual {\n address minter = address(data.tokenId >> 96);\n address sender = _msgSender();\n\n require(minter == data.creators[0].account, \"tokenId incorrect\");\n require(data.creators.length == data.signatures.length);\n require(minter == sender || isApprovedForAll(minter, sender), \"ERC721: transfer caller is not owner nor approved\");\n\n bytes32 hash = LibERC721LazyMint.hash(data);\n for (uint i = 0; i < data.creators.length; ++i) {\n address creator = data.creators[i].account;\n if (creator != sender) {\n validate(creator, hash, data.signatures[i]);\n }\n }\n\n _safeMint(to, data.tokenId);\n _saveRoyalties(data.tokenId, data.royalties);\n _saveCreators(data.tokenId, data.creators);\n _setTokenURI(data.tokenId, data.tokenURI);\n }\n\n function _mint(address to, uint256 tokenId) internal virtual override {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burned(tokenId), \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n address minter = address(tokenId >> 96);\n if (minter != to) {\n emit Transfer(address(0), minter, tokenId);\n emit Transfer(minter, to, tokenId);\n } else {\n emit Transfer(address(0), to, tokenId);\n }\n }\n\n function _saveCreators(uint tokenId, LibPart.Part[] memory _creators) internal {\n LibPart.Part[] storage creatorsOfToken = creators[tokenId];\n uint total = 0;\n for (uint i = 0; i < _creators.length; ++i) {\n require(_creators[i].account != address(0x0), \"Account should be present\");\n require(_creators[i].value != 0, \"Creator share should be positive\");\n creatorsOfToken.push(_creators[i]);\n total = total.add(_creators[i].value);\n }\n require(total == 10000, \"total amount of creators share should be 10000\");\n emit Creators(tokenId, _creators);\n }\n\n function updateAccount(uint256 _id, address _from, address _to) external {\n require(_msgSender() == _from, \"not allowed\");\n super._updateAccount(_id, _from, _to);\n }\n\n function getCreators(uint256 _id) external view returns (LibPart.Part[] memory) {\n return creators[_id];\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721Rarible.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"./ERC721Base.sol\";\n\ncontract ERC721Rarible is ERC721Base {\n\n event CreateERC721Rarible(address owner, string name, string symbol);\n\n function __ERC721Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external initializer {\n __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy);\n emit CreateERC721Rarible(_msgSender(), _name, _symbol);\n }\n\n function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal {\n _setBaseURI(baseURI);\n __ERC721Lazy_init_unchained();\n __RoyaltiesV2Upgradeable_init_unchained();\n __Context_init_unchained();\n __ERC165_init_unchained();\n __Ownable_init_unchained();\n __ERC721Burnable_init_unchained();\n __Mint721Validator_init_unchained();\n __HasContractURI_init_unchained(contractURI);\n __ERC721_init_unchained(_name, _symbol);\n\n //setting default approver for transferProxies\n _setDefaultApproval(transferProxy, true);\n _setDefaultApproval(lazyTransferProxy, true);\n }\n\n uint256[50] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/erc-721/ERC721Upgradeable.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.8.0;\n\nimport \"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721MetadataUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721EnumerableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableSetUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/EnumerableMapUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"../LibURI.sol\";\n\n/**\n * @title ERC721 Non-Fungible Token Standard basic implementation\n * @dev see https://eips.ethereum.org/EIPS/eip-721\n */\ncontract ERC721Upgradeable is Initializable, ContextUpgradeable, ERC165Upgradeable, IERC721Upgradeable, IERC721MetadataUpgradeable, IERC721EnumerableUpgradeable {\n using SafeMathUpgradeable for uint256;\n using AddressUpgradeable for address;\n using EnumerableSetUpgradeable for EnumerableSetUpgradeable.UintSet;\n using EnumerableMapUpgradeable for EnumerableMapUpgradeable.UintToAddressMap;\n using StringsUpgradeable for uint256;\n\n // Equals to `bytes4(keccak256(\"onERC721Received(address,address,uint256,bytes)\"))`\n // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`\n bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;\n\n // Mapping from holder address to their (enumerable) set of owned tokens\n mapping (address => EnumerableSetUpgradeable.UintSet) _holderTokens;\n\n // Enumerable mapping from token ids to their owners\n EnumerableMapUpgradeable.UintToAddressMap _tokenOwners;\n\n // Mapping from token ID to approved address\n mapping (uint256 => address) private _tokenApprovals;\n\n // Mapping from owner to operator approvals\n mapping (address => mapping (address => bool)) private _operatorApprovals;\n\n // Token name\n string private _name;\n\n // Token symbol\n string private _symbol;\n\n // Optional mapping for token URIs\n mapping (uint256 => string) private _tokenURIs;\n\n // Base URI\n string private _baseURI;\n\n /*\n * bytes4(keccak256('balanceOf(address)')) == 0x70a08231\n * bytes4(keccak256('ownerOf(uint256)')) == 0x6352211e\n * bytes4(keccak256('approve(address,uint256)')) == 0x095ea7b3\n * bytes4(keccak256('getApproved(uint256)')) == 0x081812fc\n * bytes4(keccak256('setApprovalForAll(address,bool)')) == 0xa22cb465\n * bytes4(keccak256('isApprovedForAll(address,address)')) == 0xe985e9c5\n * bytes4(keccak256('transferFrom(address,address,uint256)')) == 0x23b872dd\n * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) == 0x42842e0e\n * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) == 0xb88d4fde\n *\n * => 0x70a08231 ^ 0x6352211e ^ 0x095ea7b3 ^ 0x081812fc ^\n * 0xa22cb465 ^ 0xe985e9c5 ^ 0x23b872dd ^ 0x42842e0e ^ 0xb88d4fde == 0x80ac58cd\n */\n bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;\n\n /*\n * bytes4(keccak256('name()')) == 0x06fdde03\n * bytes4(keccak256('symbol()')) == 0x95d89b41\n * bytes4(keccak256('tokenURI(uint256)')) == 0xc87b56dd\n *\n * => 0x06fdde03 ^ 0x95d89b41 ^ 0xc87b56dd == 0x5b5e139f\n */\n bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;\n\n /*\n * bytes4(keccak256('totalSupply()')) == 0x18160ddd\n * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) == 0x2f745c59\n * bytes4(keccak256('tokenByIndex(uint256)')) == 0x4f6ccce7\n *\n * => 0x18160ddd ^ 0x2f745c59 ^ 0x4f6ccce7 == 0x780e9d63\n */\n bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;\n\n // Mapping from token ID to flag == true, means token already burned\n mapping(uint256 => bool) private _burnedTokens;\n\n /**\n * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.\n */\n function __ERC721_init(string memory name_, string memory symbol_) internal initializer {\n __Context_init_unchained();\n __ERC165_init_unchained();\n __ERC721_init_unchained(name_, symbol_);\n }\n\n function __ERC721_init_unchained(string memory name_, string memory symbol_) internal initializer {\n _name = name_;\n _symbol = symbol_;\n\n // register the supported interfaces to conform to ERC721 via ERC165\n _registerInterface(_INTERFACE_ID_ERC721);\n _registerInterface(_INTERFACE_ID_ERC721_METADATA);\n _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);\n }\n\n /**\n * @dev See {IERC721-balanceOf}.\n */\n function balanceOf(address owner) public view virtual override returns (uint256) {\n require(owner != address(0), \"ERC721: balance query for the zero address\");\n return _holderTokens[owner].length();\n }\n\n /**\n * @dev See {IERC721-ownerOf}.\n */\n function ownerOf(uint256 tokenId) public view virtual override returns (address) {\n return _tokenOwners.get(tokenId, \"ERC721: owner query for nonexistent token\");\n }\n\n /**\n * @dev See {IERC721Metadata-name}.\n */\n function name() public view virtual override returns (string memory) {\n return _name;\n }\n\n /**\n * @dev See {IERC721Metadata-symbol}.\n */\n function symbol() public view virtual override returns (string memory) {\n return _symbol;\n }\n\n /**\n * @dev See {IERC721Metadata-tokenURI}.\n */\n function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {\n require(_exists(tokenId), \"ERC721Metadata: URI query for nonexistent token\");\n\n string memory _tokenURI = _tokenURIs[tokenId];\n string memory base = baseURI();\n\n // If there is no base URI, return the token URI.\n if (bytes(base).length == 0) {\n return _tokenURI;\n }\n // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).\n if (bytes(_tokenURI).length > 0) {\n return LibURI.checkPrefix(base, _tokenURI);\n }\n // If there is a baseURI but no tokenURI, concatenate the tokenID to the baseURI.\n return string(abi.encodePacked(base, tokenId.toString()));\n }\n\n /**\n * @dev Returns the base URI set via {_setBaseURI}. This will be\n * automatically added as a prefix in {tokenURI} to each token's URI, or\n * to the token ID if no specific URI is set for that token ID.\n */\n function baseURI() public view virtual returns (string memory) {\n return _baseURI;\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.\n */\n function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {\n return _holderTokens[owner].at(index);\n }\n\n /**\n * @dev See {IERC721Enumerable-totalSupply}.\n */\n function totalSupply() public view virtual override returns (uint256) {\n // _tokenOwners are indexed by tokenIds, so .length() returns the number of tokenIds\n return _tokenOwners.length();\n }\n\n /**\n * @dev See {IERC721Enumerable-tokenByIndex}.\n */\n function tokenByIndex(uint256 index) public view virtual override returns (uint256) {\n (uint256 tokenId, ) = _tokenOwners.at(index);\n return tokenId;\n }\n\n /**\n * @dev See {IERC721-approve}.\n */\n function approve(address to, uint256 tokenId) public virtual override {\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n require(to != owner, \"ERC721: approval to current owner\");\n\n require(_msgSender() == owner || ERC721Upgradeable.isApprovedForAll(owner, _msgSender()),\n \"ERC721: approve caller is not owner nor approved for all\"\n );\n\n _approve(to, tokenId);\n }\n\n /**\n * @dev See {IERC721-getApproved}.\n */\n function getApproved(uint256 tokenId) public view virtual override returns (address) {\n require(_exists(tokenId), \"ERC721: approved query for nonexistent token\");\n\n return _tokenApprovals[tokenId];\n }\n\n /**\n * @dev See {IERC721-setApprovalForAll}.\n */\n function setApprovalForAll(address operator, bool approved) public virtual override {\n require(operator != _msgSender(), \"ERC721: approve to caller\");\n\n _operatorApprovals[_msgSender()][operator] = approved;\n emit ApprovalForAll(_msgSender(), operator, approved);\n }\n\n /**\n * @dev See {IERC721-isApprovedForAll}.\n */\n function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {\n return _operatorApprovals[owner][operator];\n }\n\n /**\n * @dev See {IERC721-transferFrom}.\n */\n function transferFrom(address from, address to, uint256 tokenId) public virtual override {\n //solhint-disable-next-line max-line-length\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n\n _transfer(from, to, tokenId);\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {\n safeTransferFrom(from, to, tokenId, \"\");\n }\n\n /**\n * @dev See {IERC721-safeTransferFrom}.\n */\n function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {\n require(_isApprovedOrOwner(_msgSender(), tokenId), \"ERC721: transfer caller is not owner nor approved\");\n _safeTransfer(from, to, tokenId, _data);\n }\n\n /**\n * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients\n * are aware of the ERC721 protocol to prevent tokens from being forever locked.\n *\n * `_data` is additional data, it has no specified format and it is sent in call to `to`.\n *\n * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.\n * implement alternative mechanisms to perform token transfer, such as signature-based.\n *\n * Requirements:\n *\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n * - `tokenId` token must exist and be owned by `from`.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {\n _transfer(from, to, tokenId);\n require(_checkOnERC721Received(from, to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Returns whether `tokenId` exists.\n *\n * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.\n *\n * Tokens start existing when they are minted (`_mint`),\n * and stop existing when they are burned (`_burn`).\n */\n function _exists(uint256 tokenId) internal view virtual returns (bool) {\n return _tokenOwners.contains(tokenId);\n }\n\n /**\n * @dev Returns whether `spender` is allowed to manage `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {\n require(_exists(tokenId), \"ERC721: operator query for nonexistent token\");\n address owner = ERC721Upgradeable.ownerOf(tokenId);\n return (spender == owner || getApproved(tokenId) == spender || ERC721Upgradeable.isApprovedForAll(owner, spender));\n }\n\n /**\n * @dev Safely mints `tokenId` and transfers it to `to`.\n *\n * Requirements:\n d*\n * - `tokenId` must not exist.\n * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.\n *\n * Emits a {Transfer} event.\n */\n function _safeMint(address to, uint256 tokenId) internal virtual {\n _safeMint(to, tokenId, \"\");\n }\n\n /**\n * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is\n * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.\n */\n function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {\n _mint(to, tokenId);\n require(_checkOnERC721Received(address(0), to, tokenId, _data), \"ERC721: transfer to non ERC721Receiver implementer\");\n }\n\n /**\n * @dev Mints `tokenId` and transfers it to `to`.\n *\n * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible\n *\n * Requirements:\n *\n * - `tokenId` must not exist.\n * - `to` cannot be the zero address.\n *\n * Emits a {Transfer} event.\n */\n function _mint(address to, uint256 tokenId) internal virtual {\n require(to != address(0), \"ERC721: mint to the zero address\");\n require(!_burnedTokens[tokenId], \"token already burned\");\n require(!_exists(tokenId), \"ERC721: token already minted\");\n\n _beforeTokenTransfer(address(0), to, tokenId);\n\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(address(0), to, tokenId);\n }\n\n /**\n * @dev Destroys `tokenId`.\n * The approval is cleared when the token is burned.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n *\n * Emits a {Transfer} event.\n */\n function _burn(uint256 tokenId) internal virtual {\n address owner = ERC721Upgradeable.ownerOf(tokenId); // internal owner\n\n _beforeTokenTransfer(owner, address(0), tokenId);\n\n // Clear approvals\n _approve(address(0), tokenId);\n\n // Clear metadata (if any)\n if (bytes(_tokenURIs[tokenId]).length != 0) {\n delete _tokenURIs[tokenId];\n }\n\n _holderTokens[owner].remove(tokenId);\n\n _tokenOwners.remove(tokenId);\n _setBurned(tokenId);\n emit Transfer(owner, address(0), tokenId);\n }\n\n /*Returns true if token with tokenId already burned*/\n function _burned(uint256 tokenId) internal returns (bool) {\n return _burnedTokens[tokenId];\n }\n\n /*Set token with tokenId burned*/\n function _setBurned(uint256 tokenId) internal {\n _burnedTokens[tokenId] = true;\n }\n\n /**\n * @dev Transfers `tokenId` from `from` to `to`.\n * As opposed to {transferFrom}, this imposes no restrictions on msg.sender.\n *\n * Requirements:\n *\n * - `to` cannot be the zero address.\n * - `tokenId` token must be owned by `from`.\n *\n * Emits a {Transfer} event.\n */\n function _transfer(address from, address to, uint256 tokenId) internal virtual {\n require(ERC721Upgradeable.ownerOf(tokenId) == from, \"ERC721: transfer of token that is not own\"); // internal owner\n require(to != address(0), \"ERC721: transfer to the zero address\");\n\n _beforeTokenTransfer(from, to, tokenId);\n\n // Clear approvals from the previous owner\n _approve(address(0), tokenId);\n\n _holderTokens[from].remove(tokenId);\n _holderTokens[to].add(tokenId);\n\n _tokenOwners.set(tokenId, to);\n\n emit Transfer(from, to, tokenId);\n }\n\n /**\n * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.\n *\n * Requirements:\n *\n * - `tokenId` must exist.\n */\n function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {\n require(_exists(tokenId), \"ERC721Metadata: URI set of nonexistent token\");\n _tokenURIs[tokenId] = _tokenURI;\n }\n\n /**\n * @dev Internal function to set the base URI for all token IDs. It is\n * automatically added as a prefix to the value returned in {tokenURI},\n * or to the token ID if {tokenURI} is empty.\n */\n function _setBaseURI(string memory baseURI_) internal virtual {\n _baseURI = baseURI_;\n }\n\n /**\n * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.\n * The call is not executed if the target address is not a contract.\n *\n * @param from address representing the previous owner of the given token ID\n * @param to target address that will receive the tokens\n * @param tokenId uint256 ID of the token to be transferred\n * @param _data bytes optional data to send along with the call\n * @return bool whether the call correctly returned the expected magic value\n */\n function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)\n private returns (bool)\n {\n if (!to.isContract()) {\n return true;\n }\n bytes memory returndata = to.functionCall(abi.encodeWithSelector(\n IERC721ReceiverUpgradeable(to).onERC721Received.selector,\n _msgSender(),\n from,\n tokenId,\n _data\n ), \"ERC721: transfer to non ERC721Receiver implementer\");\n bytes4 retval = abi.decode(returndata, (bytes4));\n return (retval == _ERC721_RECEIVED);\n }\n\n function _approve(address to, uint256 tokenId) private {\n _tokenApprovals[tokenId] = to;\n emit Approval(ERC721Upgradeable.ownerOf(tokenId), to, tokenId); // internal owner\n }\n\n /**\n * @dev Hook that is called before any token transfer. This includes minting\n * and burning.\n *\n * Calling conditions:\n *\n * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be\n * transferred to `to`.\n * - When `from` is zero, `tokenId` will be minted for `to`.\n * - When `to` is zero, ``from``'s `tokenId` will be burned.\n * - `from` cannot be the zero address.\n * - `to` cannot be the zero address.\n *\n * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].\n */\n function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }\n uint256[40] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/HasContractURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\";\n\nabstract contract HasContractURI is ERC165Upgradeable {\n\n string public contractURI;\n\n /*\n * bytes4(keccak256('contractURI()')) == 0xe8a3d485\n */\n bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485;\n\n function __HasContractURI_init_unchained(string memory _contractURI) internal initializer {\n contractURI = _contractURI;\n _registerInterface(_INTERFACE_ID_CONTRACT_URI);\n }\n\n /**\n * @dev Internal function to set the contract URI\n * @param _contractURI string URI prefix to assign\n */\n function _setContractURI(string memory _contractURI) internal {\n contractURI = _contractURI;\n }\n\n uint256[49] private __gap;\n}\n" - }, - "@rarible/tokens/contracts/IsPrivateCollection.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\ncontract IsPrivateCollection {\n /// @dev true if collection is private, false if public\n bool isPrivate;\n\n uint256[49] private __gap;\n}" - }, - "@rarible/tokens/contracts/LibURI.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibURI {\n /// @dev checks if _tokenURI starts with base. if true returns _tokenURI, else base + _tokenURI\n function checkPrefix(string memory base, string memory _tokenURI)\n internal\n pure\n returns (string memory)\n {\n bytes memory whatBytes = bytes(base);\n bytes memory whereBytes = bytes(_tokenURI);\n\n if (whatBytes.length > whereBytes.length) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n\n for (uint256 j = 0; j < whatBytes.length; j++) {\n if (whereBytes[j] != whatBytes[j]) {\n return string(abi.encodePacked(base, _tokenURI));\n }\n }\n\n return _tokenURI;\n }\n}\n" - }, - "@rarible/tokens/contracts/Mint721Validator.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"./erc-1271/ERC1271Validator.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\n\ncontract Mint721Validator is ERC1271Validator {\n function __Mint721Validator_init_unchained() internal initializer {\n __EIP712_init_unchained(\"Mint721\", \"1\");\n }\n\n function validate(address account, bytes32 hash, bytes memory signature) internal view {\n validate1271(account, hash, signature);\n }\n uint256[50] private __gap;\n}\n" - }, - "@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nabstract contract ITransferExecutor {\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal virtual;\n}\n" - }, - "@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../lib/LibDeal.sol\";\nimport \"./ITransferExecutor.sol\";\n\nabstract contract ITransferManager is ITransferExecutor {\n\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) internal virtual returns (uint totalMakeValue, uint totalTakeValue);\n}" - }, - "@rarible/transfer-manager/contracts/lib/LibDeal.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\nimport \"./LibFeeSide.sol\";\n\nlibrary LibDeal {\n struct DealSide {\n LibAsset.Asset asset;\n LibPart.Part[] payouts;\n LibPart.Part[] originFees;\n address proxy;\n address from;\n }\n}\n" - }, - "@rarible/transfer-manager/contracts/lib/LibFeeSide.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/lib-asset/contracts/LibAsset.sol\";\n\nlibrary LibFeeSide {\n\n enum FeeSide {NONE, LEFT, RIGHT}\n\n function getFeeSide(bytes4 leftClass, bytes4 rightClass) internal pure returns (FeeSide) {\n if (leftClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ETH_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC20_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n if (leftClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.LEFT;\n }\n if (rightClass == LibAsset.ERC1155_ASSET_CLASS) {\n return FeeSide.RIGHT;\n }\n return FeeSide.NONE;\n }\n}\n" - }, - "@rarible/transfer-manager/contracts/lib/LibTransfer.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nlibrary LibTransfer {\n function transferEth(address to, uint value) internal {\n (bool success,) = to.call{ value: value }(\"\");\n require(success, \"transfer failed\");\n }\n}\n" - }, - "@rarible/transfer-manager/contracts/RaribleTransferManager.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\n\nimport \"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\";\n\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\n\nimport \"./interfaces/ITransferManager.sol\";\n\nabstract contract RaribleTransferManager is OwnableUpgradeable, ITransferManager {\n using BpLibrary for uint;\n using SafeMathUpgradeable for uint;\n\n ProtocolFeeData public protocolFee;\n IRoyaltiesProvider public royaltiesRegistry;\n\n //deprecated\n address private defaultFeeReceiver;\n // deprecated\n mapping(address => address) private feeReceivers;\n\n /// @dev event that's emitted when ProtocolFeeData buyerAmount changes\n event BuyerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData sellerAmount changes\n event SellerFeeAmountChanged(uint oldValue, uint newValue);\n\n /// @dev event that's emitted when ProtocolFeeData receiver changes\n event FeeReceiverChanged(address oldValue, address newValue);\n\n /// @dev struct to store protocol fee - receiver address, buyer fee amount (in bp), seller fee amount (in bp)\n struct ProtocolFeeData {\n address receiver;\n uint48 buyerAmount;\n uint48 sellerAmount;\n }\n\n /**\n @notice initialises RaribleTransferManager state\n @param newProtocolFee deprecated\n @param newDefaultFeeReceiver deprecated\n @param newRoyaltiesProvider royaltiesRegistry contract address\n */\n function __RaribleTransferManager_init_unchained(\n uint newProtocolFee,\n address newDefaultFeeReceiver,\n IRoyaltiesProvider newRoyaltiesProvider\n ) internal initializer {\n royaltiesRegistry = newRoyaltiesProvider;\n }\n\n function setRoyaltiesRegistry(IRoyaltiesProvider newRoyaltiesRegistry) external onlyOwner {\n royaltiesRegistry = newRoyaltiesRegistry;\n }\n\n function setPrtocolFeeReceiver(address _receiver) public onlyOwner {\n emit FeeReceiverChanged(protocolFee.receiver, _receiver);\n protocolFee.receiver = _receiver;\n }\n\n function setPrtocolFeeBuyerAmount(uint48 _buyerAmount) public onlyOwner {\n emit BuyerFeeAmountChanged(protocolFee.buyerAmount, _buyerAmount);\n protocolFee.buyerAmount = _buyerAmount;\n }\n\n function setPrtocolFeeSellerAmount(uint48 _sellerAmount) public onlyOwner {\n emit SellerFeeAmountChanged(protocolFee.sellerAmount, _sellerAmount);\n protocolFee.sellerAmount = _sellerAmount;\n }\n\n function setAllProtocolFeeData(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) public onlyOwner {\n setPrtocolFeeReceiver(_receiver);\n setPrtocolFeeBuyerAmount(_buyerAmount);\n setPrtocolFeeSellerAmount(_sellerAmount);\n }\n\n /**\n @notice executes transfers for 2 matched orders\n @param left DealSide from the left order (see LibDeal.sol)\n @param right DealSide from the right order (see LibDeal.sol)\n @param feeSide feeSide of the match\n @return totalLeftValue - total amount for the left order\n @return totalRightValue - total amout for the right order\n */\n function doTransfers(\n LibDeal.DealSide memory left,\n LibDeal.DealSide memory right,\n LibFeeSide.FeeSide feeSide\n ) override internal returns (uint totalLeftValue, uint totalRightValue) {\n totalLeftValue = left.asset.value;\n totalRightValue = right.asset.value;\n\n if (feeSide == LibFeeSide.FeeSide.LEFT) {\n totalLeftValue = doTransfersWithFees(left, right, protocolFee);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n } else if (feeSide == LibFeeSide.FeeSide.RIGHT) {\n totalRightValue = doTransfersWithFees(right, left,protocolFee);\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n } else {\n transferPayouts(left.asset.assetType, left.asset.value, left.from, right.payouts, left.proxy);\n transferPayouts(right.asset.assetType, right.asset.value, right.from, left.payouts, right.proxy);\n }\n }\n\n /**\n @notice executes the fee-side transfers (payment + fees)\n @param paymentSide DealSide of the fee-side order\n @param nftSide DealSide of the nft-side order\n @param _protocolFee protocol fee data\n @return totalAmount of fee-side asset\n */\n function doTransfersWithFees(\n LibDeal.DealSide memory paymentSide,\n LibDeal.DealSide memory nftSide,\n ProtocolFeeData memory _protocolFee\n ) internal returns (uint totalAmount) {\n totalAmount = calculateTotalAmount(paymentSide.asset.value, _protocolFee, paymentSide.originFees);\n uint rest = transferProtocolFee(totalAmount, paymentSide.asset.value, paymentSide.from, _protocolFee, paymentSide.asset.assetType, paymentSide.proxy);\n\n rest = transferRoyalties(paymentSide.asset.assetType, nftSide.asset.assetType, nftSide.payouts, rest, paymentSide.asset.value, paymentSide.from, paymentSide.proxy);\n if (\n paymentSide.originFees.length == 1 &&\n nftSide.originFees.length == 1 &&\n nftSide.originFees[0].account == paymentSide.originFees[0].account\n ) { \n LibPart.Part[] memory origin = new LibPart.Part[](1);\n origin[0].account = nftSide.originFees[0].account;\n origin[0].value = nftSide.originFees[0].value + paymentSide.originFees[0].value;\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, origin, paymentSide.from, paymentSide.proxy);\n } else {\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, paymentSide.originFees, paymentSide.from, paymentSide.proxy);\n (rest,) = transferFees(paymentSide.asset.assetType, rest, paymentSide.asset.value, nftSide.originFees, paymentSide.from, paymentSide.proxy);\n }\n transferPayouts(paymentSide.asset.assetType, rest, paymentSide.from, nftSide.payouts, paymentSide.proxy);\n }\n\n function transferProtocolFee(\n uint totalAmount,\n uint amount,\n address from,\n ProtocolFeeData memory _protocolFee,\n LibAsset.AssetType memory matchCalculate,\n address proxy\n ) internal returns (uint) {\n (uint rest, uint fee) = subFeeInBp(totalAmount, amount, _protocolFee.buyerAmount + _protocolFee.sellerAmount);\n if (fee > 0) {\n transfer(LibAsset.Asset(matchCalculate, fee), from, _protocolFee.receiver, proxy);\n }\n return rest;\n }\n\n /**\n @notice Transfer royalties. If there is only one royalties receiver and one address in payouts and they match,\n nothing is transferred in this function\n @param paymentAssetType Asset Type which represents payment\n @param nftAssetType Asset Type which represents NFT to pay royalties for\n @param payouts Payouts to be made\n @param rest How much of the amount left after previous transfers\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return How much left after transferring royalties\n */\n function transferRoyalties(\n LibAsset.AssetType memory paymentAssetType,\n LibAsset.AssetType memory nftAssetType,\n LibPart.Part[] memory payouts,\n uint rest,\n uint amount,\n address from,\n address proxy\n ) internal returns (uint) {\n LibPart.Part[] memory royalties = getRoyaltiesByAssetType(nftAssetType);\n if (\n royalties.length == 1 &&\n payouts.length == 1 &&\n royalties[0].account == payouts[0].account\n ) {\n require(royalties[0].value <= 5000, \"Royalties are too high (>50%)\");\n return rest;\n }\n (uint result, uint totalRoyalties) = transferFees(paymentAssetType, rest, amount, royalties, from, proxy);\n require(totalRoyalties <= 5000, \"Royalties are too high (>50%)\");\n return result;\n }\n\n /**\n @notice calculates royalties by asset type. If it's a lazy NFT, then royalties are extracted from asset. otherwise using royaltiesRegistry\n @param nftAssetType NFT Asset Type to calculate royalties for\n @return calculated royalties (Array of LibPart.Part)\n */\n function getRoyaltiesByAssetType(LibAsset.AssetType memory nftAssetType) internal returns (LibPart.Part[] memory) {\n if (nftAssetType.assetClass == LibAsset.ERC1155_ASSET_CLASS || nftAssetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n (address token, uint tokenId) = abi.decode(nftAssetType.data, (address, uint));\n return royaltiesRegistry.getRoyalties(token, tokenId);\n } else if (nftAssetType.assetClass == LibERC1155LazyMint.ERC1155_LAZY_ASSET_CLASS) {\n (, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(nftAssetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n return data.royalties;\n } else if (nftAssetType.assetClass == LibERC721LazyMint.ERC721_LAZY_ASSET_CLASS) {\n (, LibERC721LazyMint.Mint721Data memory data) = abi.decode(nftAssetType.data, (address, LibERC721LazyMint.Mint721Data));\n return data.royalties;\n }\n LibPart.Part[] memory empty;\n return empty;\n }\n\n /**\n @notice Transfer fees\n @param assetType Asset Type to transfer\n @param rest How much of the amount left after previous transfers\n @param amount Total amount of the Asset. Used as a base to calculate part from (100%)\n @param fees Array of LibPart.Part which represents fees to pay\n @param from owner of the Asset to transfer\n @param proxy Transfer proxy to use\n @return newRest how much left after transferring fees\n @return totalFees total number of fees in bp\n */\n function transferFees(\n LibAsset.AssetType memory assetType,\n uint rest,\n uint amount,\n LibPart.Part[] memory fees,\n address from,\n address proxy\n ) internal returns (uint newRest, uint totalFees) {\n totalFees = 0;\n newRest = rest;\n for (uint256 i = 0; i < fees.length; ++i) {\n totalFees = totalFees.add(fees[i].value);\n uint feeValue;\n (newRest, feeValue) = subFeeInBp(newRest, amount, fees[i].value);\n if (feeValue > 0) {\n transfer(LibAsset.Asset(assetType, feeValue), from, fees[i].account, proxy);\n }\n }\n }\n\n /**\n @notice transfers main part of the asset (payout)\n @param assetType Asset Type to transfer\n @param amount Amount of the asset to transfer\n @param from Current owner of the asset\n @param payouts List of payouts - receivers of the Asset\n @param proxy Transfer Proxy to use\n */\n function transferPayouts(\n LibAsset.AssetType memory assetType,\n uint amount,\n address from,\n LibPart.Part[] memory payouts,\n address proxy\n ) internal {\n require(payouts.length > 0, \"transferPayouts: nothing to transfer\");\n uint sumBps = 0;\n uint rest = amount;\n for (uint256 i = 0; i < payouts.length - 1; ++i) {\n uint currentAmount = amount.bp(payouts[i].value);\n sumBps = sumBps.add(payouts[i].value);\n if (currentAmount > 0) {\n rest = rest.sub(currentAmount);\n transfer(LibAsset.Asset(assetType, currentAmount), from, payouts[i].account, proxy);\n }\n }\n LibPart.Part memory lastPayout = payouts[payouts.length - 1];\n sumBps = sumBps.add(lastPayout.value);\n require(sumBps == 10000, \"Sum payouts Bps not equal 100%\");\n if (rest > 0) {\n transfer(LibAsset.Asset(assetType, rest), from, lastPayout.account, proxy);\n }\n }\n \n /**\n @notice calculates total amount of fee-side asset that is going to be used in match\n @param amount fee-side order value\n @param _protocolFee protocol fee\n @param orderOriginFees fee-side order's origin fee (it adds on top of the amount)\n @return total amount of fee-side asset\n */\n function calculateTotalAmount(\n uint amount,\n ProtocolFeeData memory _protocolFee,\n LibPart.Part[] memory orderOriginFees\n ) internal pure returns (uint) {\n \n uint fees = _protocolFee.buyerAmount;\n for (uint256 i = 0; i < orderOriginFees.length; ++i) {\n require(orderOriginFees[i].value <= 10000, \"origin fee is too big\");\n fees = fees + orderOriginFees[i].value;\n }\n\n return amount.add(amount.bp(fees));\n }\n\n function subFeeInBp(uint value, uint total, uint feeInBp) internal pure returns (uint newValue, uint realFee) {\n return subFee(value, total.bp(feeInBp));\n }\n\n function subFee(uint value, uint fee) internal pure returns (uint newValue, uint realFee) {\n if (value > fee) {\n newValue = value.sub(fee);\n realFee = fee;\n } else {\n newValue = 0;\n realFee = value;\n }\n }\n\n uint256[46] private __gap;\n}\n" - }, - "@rarible/transfer-manager/contracts/TransferExecutor.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\nimport \"./interfaces/ITransferExecutor.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\n\nimport \"./lib/LibTransfer.sol\";\n\nabstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransferExecutor {\n using LibTransfer for address;\n\n mapping (bytes4 => address) internal proxies;\n\n event ProxyChange(bytes4 indexed assetType, address proxy);\n\n function __TransferExecutor_init_unchained(address transferProxy, address erc20TransferProxy) internal { \n proxies[LibAsset.ERC20_ASSET_CLASS] = address(erc20TransferProxy);\n proxies[LibAsset.ERC721_ASSET_CLASS] = address(transferProxy);\n proxies[LibAsset.ERC1155_ASSET_CLASS] = address(transferProxy);\n }\n\n function setTransferProxy(bytes4 assetType, address proxy) external onlyOwner {\n proxies[assetType] = proxy;\n emit ProxyChange(assetType, proxy);\n }\n\n function transfer(\n LibAsset.Asset memory asset,\n address from,\n address to,\n address proxy\n ) internal override {\n if (asset.assetType.assetClass == LibAsset.ERC721_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n require(asset.value == 1, \"erc721 value error\");\n if (from == address(this)){\n IERC721Upgradeable(token).safeTransferFrom(address(this), to, tokenId);\n } else {\n INftTransferProxy(proxy).erc721safeTransferFrom(IERC721Upgradeable(token), from, to, tokenId);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC20_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token) = abi.decode(asset.assetType.data, (address));\n if (from == address(this)){\n require(IERC20Upgradeable(token).transfer(to, asset.value), \"erc20 transfer failed\");\n } else {\n IERC20TransferProxy(proxy).erc20safeTransferFrom(IERC20Upgradeable(token), from, to, asset.value);\n }\n } else if (asset.assetType.assetClass == LibAsset.ERC1155_ASSET_CLASS) {\n //not using transfer proxy when transfering from this contract\n (address token, uint tokenId) = abi.decode(asset.assetType.data, (address, uint256));\n if (from == address(this)){\n IERC1155Upgradeable(token).safeTransferFrom(address(this), to, tokenId, asset.value, \"\");\n } else {\n INftTransferProxy(proxy).erc1155safeTransferFrom(IERC1155Upgradeable(token), from, to, tokenId, asset.value, \"\"); \n }\n } else if (asset.assetType.assetClass == LibAsset.ETH_ASSET_CLASS) {\n if (to != address(this)) {\n to.transferEth(asset.value);\n }\n } else {\n ITransferProxy(proxy).transfer(asset, from, to);\n }\n }\n \n uint256[49] private __gap;\n}\n" - }, - "@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data));\n IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value);\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\";\nimport \"@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy {\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n require(asset.value == 1, \"erc721 value error\");\n (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data));\n IERC721LazyMint(token).transferFromOrMint(data, from, to);\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\";\n\ncontract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole {\n\n function __ERC20TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator {\n require(token.transferFrom(from, to, value), \"failure while transferring\");\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\n\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\nimport \"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\";\n\ncontract TransferProxy is INftTransferProxy, Initializable, OperatorRole {\n\n function __TransferProxy_init() external initializer {\n __Ownable_init();\n }\n\n function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator {\n token.safeTransferFrom(from, to, tokenId);\n }\n\n function erc1155safeTransferFrom(IERC1155Upgradeable token, address from, address to, uint256 id, uint256 value, bytes calldata data) override external onlyOperator {\n token.safeTransferFrom(from, to, id, value, data);\n }\n}\n" - }, - "@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\";\nimport \"@rarible/exchange-interfaces/contracts/ICryptoPunksMarket.sol\";\nimport \"@rarible/role-operator/contracts/OperatorRole.sol\";\n\ncontract PunkTransferProxy is OperatorRole, ITransferProxy {\n\n function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external {\n (address token, uint punkIndex) = abi.decode(asset.assetType.data, (address, uint));\n ICryptoPunksMarket punkToken = ICryptoPunksMarket(token);\n //check punk from real owner\n require(punkToken.punkIndexToAddress(punkIndex) == from, \"Seller not punk owner\");\n //buy punk to proxy, now proxy is owner\n punkToken.buyPunk(punkIndex);\n //Transfer ownership of a punk to buyer\n punkToken.transferPunk(to, punkIndex);\n }\n}" - }, - "src/AssetMatchersImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { AssetMatcherCollection } from \"@rarible/custom-matchers/contracts/AssetMatcherCollection.sol\";\n" - }, - "src/Auction.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {AuctionHouse1155} from \"@rarible/auction/contracts/1155/AuctionHouse1155.sol\";\nimport {AuctionHouse721} from \"@rarible/auction/contracts/721/AuctionHouse721.sol\";\nimport {Wrapper} from \"@rarible/auction/contracts/wrapper/Wrapper.sol\";" - }, - "src/ExchangeV2Import.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ExchangeV2} from \"@rarible/exchange-v2/contracts/ExchangeV2.sol\";\n\nimport {ExchangeMetaV2} from \"@rarible/exchange-v2/contracts/ExchangeMetaV2.sol\";" - }, - "src/ExchangeWrapperImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" - }, - "src/RaribleExchangeWrapper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {RaribleExchangeWrapper} from \"@rarible/exchange-wrapper/contracts/RaribleExchangeWrapper.sol\";" - }, - "src/RoyaltiesRegistryImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RoyaltiesRegistry} from \"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\";\nimport {RoyaltiesProviderV2Legacy} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderV2Legacy.sol\";\nimport {RoyaltiesProviderArtBlocks} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocks.sol\";\nimport {RoyaltiesProviderArtBlocksV2} from \"@rarible/royalties-registry/contracts/providers/RoyaltiesProviderArtBlocksV2.sol\";\n" - }, - "src/TokensImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\n//tokens 721\nimport {ERC721Rarible} from \"@rarible/tokens/contracts/erc-721/ERC721Rarible.sol\";\nimport {ERC721RaribleMinimal} from \"@rarible/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol\";\nimport {ERC721RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol\";\n\n//tokens 1155\nimport {ERC1155Rarible} from \"@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol\";\nimport {ERC1155RaribleFactoryC2} from \"@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol\";\n\n//meta tokens\nimport {ERC721RaribleMeta} from \"@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol\";\nimport {ERC1155RaribleMeta} from \"@rarible/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol\";\n\n//beacons\nimport {ERC1155RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeacon.sol\";\nimport {ERC721RaribleMinimalBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol\";\nimport {ERC721RaribleBeacon} from \"@rarible/tokens/contracts/beacons/ERC721RaribleBeacon.sol\";\nimport {ERC1155RaribleBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol\";\nimport {ERC721RaribleMinimalBeaconMeta} from \"@rarible/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol\";\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" - }, - "src/TransferProxiesImport.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport {ERC721LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol\";\nimport {ERC1155LazyMintTransferProxy} from \"@rarible/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol\";\nimport {TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\";\nimport {ERC20TransferProxy} from \"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\";\nimport {PunkTransferProxy} from \"@rarible/transfer-proxy/contracts/punk/PunkTransferProxy.sol\";\n" - }, - "src/TransparentUpgradeableProxy.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport \"@openzeppelin/contracts/proxy/ProxyAdmin.sol\";\n" - }, - "test/contracts/ERC721LazyMintTest.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.9 <0.8.0;\npragma abicoder v2;\n\nimport \"@rarible/lazy-mint/test/contracts/ERC721LazyMintTest.sol\";\n" - }, - "test/contracts/RaribleTestHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" - }, - "test/contracts/TestERC1155.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155 } from \"@rarible/test/contracts/TestERC1155.sol\";\n\n" - }, - "test/contracts/TestERC1155RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC1155RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC1155RoyaltiesV2.sol\";\n\n" - }, - "test/contracts/TestERC20.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC20 } from \"@rarible/test/contracts/TestERC20.sol\";\n" - }, - "test/contracts/TestERC721.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721 } from \"@rarible/test/contracts/TestERC721.sol\";\n" - }, - "test/contracts/TestERC721RoyaltiesV1.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV1 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV1.sol\";\n" - }, - "test/contracts/TestERC721RoyaltiesV2.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\n\nimport { TestERC721RoyaltiesV2 } from \"@rarible/royalties/test/contracts/TestERC721RoyaltiesV2.sol\";\n\n" - }, - "test/contracts/WrapperHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport { WrapperHelper } from \"@rarible/exchange-wrapper/test/contracts/WrapperHelper.sol\";" - }, - "test/exchange/contracts/RaribleTestHelper.sol": { - "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport {RaribleTestHelper} from \"@rarible/exchange-v2/test/contracts/RaribleTestHelper.sol\";\n" - } - }, - "settings": { - "optimizer": { - "enabled": true, - "runs": 200 - }, - "outputSelection": { - "*": { - "*": [ - "abi", - "evm.bytecode", - "evm.deployedBytecode", - "evm.methodIdentifiers", - "metadata", - "devdoc", - "userdoc", - "storageLayout", - "evm.gasEstimates" - ], - "": [ - "ast" - ] - } - }, - "metadata": { - "useLiteralContent": true - } - } -} \ No newline at end of file diff --git a/projects/hardhat-deploy/example.env b/projects/hardhat-deploy/example.env new file mode 100644 index 000000000..f8fb50ece --- /dev/null +++ b/projects/hardhat-deploy/example.env @@ -0,0 +1,6 @@ +# salt +DETERMENISTIC_DEPLOYMENT_SALT=0x1111 +# load existing deploy +SKIP_IF_ALREADY_DEPLOYED=true +# owner of the contracts +INITIAL_OWNER=0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893 \ No newline at end of file diff --git a/projects/hardhat-deploy/hardhat.config.ts b/projects/hardhat-deploy/hardhat.config.ts index 516fe2f64..df66c2642 100644 --- a/projects/hardhat-deploy/hardhat.config.ts +++ b/projects/hardhat-deploy/hardhat.config.ts @@ -1,8 +1,6 @@ -import '@matterlabs/hardhat-zksync-deploy'; -import '@matterlabs/hardhat-zksync-solc'; import { HardhatUserConfig } from "hardhat/config"; import "@nomicfoundation/hardhat-toolbox"; -import "hardhat-deploy"; +import "hardhat-deploy-immutable-proxy"; import "@openzeppelin/hardhat-upgrades"; import "@nomiclabs/hardhat-truffle5"; @@ -248,7 +246,10 @@ const config: HardhatUserConfig = { match_testnet: createNetwork("match_testnet"), "5ire_testnet": createNetwork("5ire_testnet"), palm: createNetwork("palm"), - match: createNetwork("match") + match: createNetwork("match"), + lisk_sepolia: createNetwork("lisk_sepolia"), + camp_sepolia: createNetwork("camp_sepolia"), + sei_testnet: createNetwork("sei_testnet"), }, etherscan: { apiKey: { @@ -286,7 +287,10 @@ const config: HardhatUserConfig = { match_testnet: getNetworkApiKey("match_testnet"), "5ire_testnet": getNetworkApiKey("5ire_testnet"), palm: getNetworkApiKey("palm"), - match: getNetworkApiKey("match") + match: getNetworkApiKey("match"), + lisk_sepolia: getNetworkApiKey("lisk_sepolia"), + camp_sepolia: getNetworkApiKey("camp_sepolia"), + sei_testnet: getNetworkApiKey("sei_testnet") }, customChains: [ { @@ -537,6 +541,38 @@ const config: HardhatUserConfig = { browserURL: getNetworkExplorerUrl("zksync_testnet"), }, }, + { + network: "zksync_testnet", + chainId: createNetwork("zksync_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("zksync_testnet"), + browserURL: getNetworkExplorerUrl("zksync_testnet"), + }, + }, + { + network: "lisk_sepolia", + chainId: createNetwork("lisk_sepolia").chainId!, + urls: { + apiURL: getNetworkApiUrl("lisk_sepolia"), + browserURL: getNetworkExplorerUrl("lisk_sepolia"), + }, + }, + { + network: "camp_sepolia", + chainId: createNetwork("camp_sepolia").chainId!, + urls: { + apiURL: getNetworkApiUrl("camp_sepolia"), + browserURL: getNetworkExplorerUrl("camp_sepolia"), + }, + }, + { + network: "sei_testnet", + chainId: createNetwork("sei_testnet").chainId!, + urls: { + apiURL: getNetworkApiUrl("sei_testnet"), + browserURL: getNetworkExplorerUrl("sei_testnet"), + }, + }, ], }, zksolc: { @@ -550,6 +586,26 @@ const config: HardhatUserConfig = { }, } }, + deterministicDeployment: { + '421614': { + factory: '0x933AcD72513796c31dc9B63579130335Dcd4a961' + }, + '5003': { + factory: '0x933AcD72513796c31dc9B63579130335Dcd4a961' + }, + '11155111': { + factory: '0x933AcD72513796c31dc9B63579130335Dcd4a961' + }, + '4202': { + factory: '0x933AcD72513796c31dc9B63579130335Dcd4a961' + }, + '90354': { + factory: '0x933AcD72513796c31dc9B63579130335Dcd4a961' + }, + '713715': { + factory: '0x933AcD72513796c31dc9B63579130335Dcd4a961' + } + } }; diff --git a/projects/hardhat-deploy/networks/camp_sepolia.md b/projects/hardhat-deploy/networks/camp_sepolia.md new file mode 100644 index 000000000..5ea43fabd --- /dev/null +++ b/projects/hardhat-deploy/networks/camp_sepolia.md @@ -0,0 +1,17 @@ + Name | Address | Url + --- | --- | --- + AssetMatcherCollection | 0xc4F5FCD96e3b37A31f871F0968206F47294a4471 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xc4F5FCD96e3b37A31f871F0968206F47294a4471 + DefaultProxyAdmin | 0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a + ERC1155LazyMintTransferProxy | 0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 + ERC1155RaribleBeaconMeta | 0x948669617b558cd3bb7F3dd94720346b3E9cD047 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x948669617b558cd3bb7F3dd94720346b3E9cD047 + ERC1155RaribleFactoryC2 | 0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb + ERC1155RaribleMeta | 0x150458a42dF2664dc4A11d2780d23F315Ca5E00A | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x150458a42dF2664dc4A11d2780d23F315Ca5E00A + ERC20TransferProxy | 0xA3d49c7e2c845b792e422696FE0D9ef17a509731 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xA3d49c7e2c845b792e422696FE0D9ef17a509731 + ERC721LazyMintTransferProxy | 0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 + ERC721RaribleFactoryC2 | 0xE5D43624116007CD79D17fB7136672A49fd33CE0 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xE5D43624116007CD79D17fB7136672A49fd33CE0 + ERC721RaribleMeta | 0x6448B5A51c6D41480B34248C516957D59f754598 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x6448B5A51c6D41480B34248C516957D59f754598 + ERC721RaribleMinimalBeaconMeta | 0x7Eade39b026f271910557Cf4676c35552BAEf346 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x7Eade39b026f271910557Cf4676c35552BAEf346 + ExchangeMetaV2 | 0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B + RaribleExchangeWrapper | 0x689bFf422807f39c9A927bb78c34FE8D63529e28 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x689bFf422807f39c9A927bb78c34FE8D63529e28 + RoyaltiesRegistry | 0xCF64c7115508f23069d5663611e10F5C5CF45776 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xCF64c7115508f23069d5663611e10F5C5CF45776 + TransferProxy | 0xA5707153b8AF346e17AF765235B054136eCf99EC | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xA5707153b8AF346e17AF765235B054136eCf99EC diff --git a/projects/hardhat-deploy/networks/lisk_sepolia.md b/projects/hardhat-deploy/networks/lisk_sepolia.md new file mode 100644 index 000000000..d08a69c08 --- /dev/null +++ b/projects/hardhat-deploy/networks/lisk_sepolia.md @@ -0,0 +1,17 @@ + Name | Address | Url + --- | --- | --- + AssetMatcherCollection | 0xc4F5FCD96e3b37A31f871F0968206F47294a4471 | https://sepolia-blockscout.lisk.comaddress/0xc4F5FCD96e3b37A31f871F0968206F47294a4471 + DefaultProxyAdmin | 0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a | https://sepolia-blockscout.lisk.comaddress/0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a + ERC1155LazyMintTransferProxy | 0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 | https://sepolia-blockscout.lisk.comaddress/0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 + ERC1155RaribleBeaconMeta | 0x948669617b558cd3bb7F3dd94720346b3E9cD047 | https://sepolia-blockscout.lisk.comaddress/0x948669617b558cd3bb7F3dd94720346b3E9cD047 + ERC1155RaribleFactoryC2 | 0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb | https://sepolia-blockscout.lisk.comaddress/0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb + ERC1155RaribleMeta | 0x150458a42dF2664dc4A11d2780d23F315Ca5E00A | https://sepolia-blockscout.lisk.comaddress/0x150458a42dF2664dc4A11d2780d23F315Ca5E00A + ERC20TransferProxy | 0xA3d49c7e2c845b792e422696FE0D9ef17a509731 | https://sepolia-blockscout.lisk.comaddress/0xA3d49c7e2c845b792e422696FE0D9ef17a509731 + ERC721LazyMintTransferProxy | 0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 | https://sepolia-blockscout.lisk.comaddress/0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 + ERC721RaribleFactoryC2 | 0xE5D43624116007CD79D17fB7136672A49fd33CE0 | https://sepolia-blockscout.lisk.comaddress/0xE5D43624116007CD79D17fB7136672A49fd33CE0 + ERC721RaribleMeta | 0x6448B5A51c6D41480B34248C516957D59f754598 | https://sepolia-blockscout.lisk.comaddress/0x6448B5A51c6D41480B34248C516957D59f754598 + ERC721RaribleMinimalBeaconMeta | 0x7Eade39b026f271910557Cf4676c35552BAEf346 | https://sepolia-blockscout.lisk.comaddress/0x7Eade39b026f271910557Cf4676c35552BAEf346 + ExchangeMetaV2 | 0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B | https://sepolia-blockscout.lisk.comaddress/0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B + RaribleExchangeWrapper | 0x689bFf422807f39c9A927bb78c34FE8D63529e28 | https://sepolia-blockscout.lisk.comaddress/0x689bFf422807f39c9A927bb78c34FE8D63529e28 + RoyaltiesRegistry | 0xCF64c7115508f23069d5663611e10F5C5CF45776 | https://sepolia-blockscout.lisk.comaddress/0xCF64c7115508f23069d5663611e10F5C5CF45776 + TransferProxy | 0xA5707153b8AF346e17AF765235B054136eCf99EC | https://sepolia-blockscout.lisk.comaddress/0xA5707153b8AF346e17AF765235B054136eCf99EC diff --git a/projects/hardhat-deploy/networks/sei_testnet.md b/projects/hardhat-deploy/networks/sei_testnet.md new file mode 100644 index 000000000..8f8ea48ac --- /dev/null +++ b/projects/hardhat-deploy/networks/sei_testnet.md @@ -0,0 +1,17 @@ + Name | Address | Url + --- | --- | --- + AssetMatcherCollection | 0xc4F5FCD96e3b37A31f871F0968206F47294a4471 | https://seitrace.comaddress/0xc4F5FCD96e3b37A31f871F0968206F47294a4471 + DefaultProxyAdmin | 0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a | https://seitrace.comaddress/0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a + ERC1155LazyMintTransferProxy | 0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 | https://seitrace.comaddress/0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 + ERC1155RaribleBeaconMeta | 0x948669617b558cd3bb7F3dd94720346b3E9cD047 | https://seitrace.comaddress/0x948669617b558cd3bb7F3dd94720346b3E9cD047 + ERC1155RaribleFactoryC2 | 0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb | https://seitrace.comaddress/0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb + ERC1155RaribleMeta | 0x150458a42dF2664dc4A11d2780d23F315Ca5E00A | https://seitrace.comaddress/0x150458a42dF2664dc4A11d2780d23F315Ca5E00A + ERC20TransferProxy | 0xA3d49c7e2c845b792e422696FE0D9ef17a509731 | https://seitrace.comaddress/0xA3d49c7e2c845b792e422696FE0D9ef17a509731 + ERC721LazyMintTransferProxy | 0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 | https://seitrace.comaddress/0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 + ERC721RaribleFactoryC2 | 0xE5D43624116007CD79D17fB7136672A49fd33CE0 | https://seitrace.comaddress/0xE5D43624116007CD79D17fB7136672A49fd33CE0 + ERC721RaribleMeta | 0x6448B5A51c6D41480B34248C516957D59f754598 | https://seitrace.comaddress/0x6448B5A51c6D41480B34248C516957D59f754598 + ERC721RaribleMinimalBeaconMeta | 0x7Eade39b026f271910557Cf4676c35552BAEf346 | https://seitrace.comaddress/0x7Eade39b026f271910557Cf4676c35552BAEf346 + ExchangeMetaV2 | 0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B | https://seitrace.comaddress/0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B + RaribleExchangeWrapper | 0x0D7147461cef9Ce51B8ba63560Dc53f96E90638B | https://seitrace.comaddress/0x0D7147461cef9Ce51B8ba63560Dc53f96E90638B + RoyaltiesRegistry | 0xCF64c7115508f23069d5663611e10F5C5CF45776 | https://seitrace.comaddress/0xCF64c7115508f23069d5663611e10F5C5CF45776 + TransferProxy | 0xA5707153b8AF346e17AF765235B054136eCf99EC | https://seitrace.comaddress/0xA5707153b8AF346e17AF765235B054136eCf99EC diff --git a/projects/hardhat-deploy/networks/sepolia.md b/projects/hardhat-deploy/networks/sepolia.md index c78856957..18f371df0 100644 --- a/projects/hardhat-deploy/networks/sepolia.md +++ b/projects/hardhat-deploy/networks/sepolia.md @@ -1,17 +1,17 @@ Name | Address | Url --- | --- | --- - AssetMatcherCollection | 0x3049455cdA17beE43d61090Ec344624aeda72Ed6 | https://sepolia.etherscan.io/address/0x3049455cdA17beE43d61090Ec344624aeda72Ed6 - DefaultProxyAdmin | 0xD1f689646861870D44B33dBBb413Fa7D06A2B52f | https://sepolia.etherscan.io/address/0xD1f689646861870D44B33dBBb413Fa7D06A2B52f - ERC1155LazyMintTransferProxy | 0xC5BBd75789bD007784A0046094d19aCeA1A79eB1 | https://sepolia.etherscan.io/address/0xC5BBd75789bD007784A0046094d19aCeA1A79eB1 - ERC1155Rarible | 0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e | https://sepolia.etherscan.io/address/0x57B3f3b79F64c475a37E6c493BAA8E6E7C5F748e - ERC1155RaribleBeacon | 0xc798B273FaF23932Cf11177402C10C9b44D30Da2 | https://sepolia.etherscan.io/address/0xc798B273FaF23932Cf11177402C10C9b44D30Da2 - ERC1155RaribleFactoryC2 | 0x166F6180170f438Ddc38050a2B708d38c0890956 | https://sepolia.etherscan.io/address/0x166F6180170f438Ddc38050a2B708d38c0890956 - ERC20TransferProxy | 0xB8863180CAC2d0Ab665e5968C0De25298A1D8CEe | https://sepolia.etherscan.io/address/0xB8863180CAC2d0Ab665e5968C0De25298A1D8CEe - ERC721LazyMintTransferProxy | 0xa2eEBb837aEF89369Ad117568d75348e6174520e | https://sepolia.etherscan.io/address/0xa2eEBb837aEF89369Ad117568d75348e6174520e - ERC721RaribleFactoryC2 | 0xB020bA7fcF43DCc59eF0103624BD6FADE66d105E | https://sepolia.etherscan.io/address/0xB020bA7fcF43DCc59eF0103624BD6FADE66d105E - ERC721RaribleMinimal | 0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494 | https://sepolia.etherscan.io/address/0xe10605b2026884aCc669C2A9Cd4A5ec5f5FFf494 - ERC721RaribleMinimalBeacon | 0x41407B447Fb5425187A9BCA3a062644EF2410F8D | https://sepolia.etherscan.io/address/0x41407B447Fb5425187A9BCA3a062644EF2410F8D - ExchangeV2 | 0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77 | https://sepolia.etherscan.io/address/0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77 - RaribleExchangeWrapper | 0x1554aDA53194B961016931A2E86C80D09a816209 | https://sepolia.etherscan.io/address/0x1554aDA53194B961016931A2E86C80D09a816209 - RoyaltiesRegistry | 0x4f4cC63D7f2bC894078d41f284453062842Afa46 | https://sepolia.etherscan.io/address/0x4f4cC63D7f2bC894078d41f284453062842Afa46 - TransferProxy | 0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af | https://sepolia.etherscan.io/address/0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af + AssetMatcherCollection | 0xc4F5FCD96e3b37A31f871F0968206F47294a4471 | https://sepolia.etherscan.io/address/0xc4F5FCD96e3b37A31f871F0968206F47294a4471 + DefaultProxyAdmin | 0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a | https://sepolia.etherscan.io/address/0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a + ERC1155LazyMintTransferProxy | 0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 | https://sepolia.etherscan.io/address/0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 + ERC1155Rarible | 0x08c50fcCc017A27C71b3e2988dff4604a8F9354b | https://sepolia.etherscan.io/address/0x08c50fcCc017A27C71b3e2988dff4604a8F9354b + ERC1155RaribleBeacon | 0x792b701837681de8f2B61a27507c9E0a3f4d4b1D | https://sepolia.etherscan.io/address/0x792b701837681de8f2B61a27507c9E0a3f4d4b1D + ERC1155RaribleFactoryC2 | 0xB3CBeC4ADbc46a731E559FB7EbdaD1634B5851fB | https://sepolia.etherscan.io/address/0xB3CBeC4ADbc46a731E559FB7EbdaD1634B5851fB + ERC20TransferProxy | 0xA3d49c7e2c845b792e422696FE0D9ef17a509731 | https://sepolia.etherscan.io/address/0xA3d49c7e2c845b792e422696FE0D9ef17a509731 + ERC721LazyMintTransferProxy | 0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 | https://sepolia.etherscan.io/address/0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 + ERC721RaribleFactoryC2 | 0x8FC558fa7667ee5729306A51c27DEd6732D41B9c | https://sepolia.etherscan.io/address/0x8FC558fa7667ee5729306A51c27DEd6732D41B9c + ERC721RaribleMinimal | 0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8 | https://sepolia.etherscan.io/address/0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8 + ERC721RaribleMinimalBeacon | 0xF4873a12132C87F96535059402b9EcE709a06c72 | https://sepolia.etherscan.io/address/0xF4873a12132C87F96535059402b9EcE709a06c72 + ExchangeV2 | 0xce219Ab34aFB73892E79cCE7b4fD602778101E07 | https://sepolia.etherscan.io/address/0xce219Ab34aFB73892E79cCE7b4fD602778101E07 + RaribleExchangeWrapper | 0x38E6f5015267bAEfb739253fbB4D7c173CCD1891 | https://sepolia.etherscan.io/address/0x38E6f5015267bAEfb739253fbB4D7c173CCD1891 + RoyaltiesRegistry | 0xCF64c7115508f23069d5663611e10F5C5CF45776 | https://sepolia.etherscan.io/address/0xCF64c7115508f23069d5663611e10F5C5CF45776 + TransferProxy | 0xA5707153b8AF346e17AF765235B054136eCf99EC | https://sepolia.etherscan.io/address/0xA5707153b8AF346e17AF765235B054136eCf99EC diff --git a/projects/hardhat-deploy/package.json b/projects/hardhat-deploy/package.json index 09bc75f16..95931ba58 100644 --- a/projects/hardhat-deploy/package.json +++ b/projects/hardhat-deploy/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/hardhat-deploy", - "version": "0.8.4-beta.3", + "version": "0.8.5", "directories": { "test": "test" }, @@ -16,20 +16,20 @@ }, "license": "MIT", "dependencies": { + "@matterlabs/hardhat-zksync-chai-matchers": "1.2.1", "@matterlabs/hardhat-zksync-deploy": "^0.6.3", + "@matterlabs/hardhat-zksync-ethers": "^0.0.1-beta.2", "@matterlabs/hardhat-zksync-solc": "^0.4.0", + "@matterlabs/hardhat-zksync-toolbox": "^0.2.0", "@matterlabs/hardhat-zksync-upgradable": "^0.1.3", "@matterlabs/hardhat-zksync-verify": "0.2.1", "@openzeppelin/hardhat-upgrades": "^1.22.1", "@openzeppelin/upgrades-core": "~1.31.1", - "@rarible/auction": "^0.8.4-beta.3", - "@rarible/royalties-registry": "^0.8.4-beta.3", - "@rarible/transfer-manager": "^0.8.4-beta.3", - "@rarible/upgrade-executor": "^0.8.4-beta.3", - "zksync-ethers": "^5.0.0", - "@matterlabs/hardhat-zksync-toolbox": "^0.2.0", - "@matterlabs/hardhat-zksync-chai-matchers": "1.2.1", - "@matterlabs/hardhat-zksync-ethers": "^0.0.1-beta.2" + "@rarible/auction": "^0.8.5", + "@rarible/royalties-registry": "^0.8.5", + "@rarible/transfer-manager": "^0.8.5", + "@rarible/upgrade-executor": "^0.8.5", + "zksync-ethers": "^5.0.0" }, "devDependencies": { "@anders-t/ethers-ledger": "^1.0.4", @@ -60,7 +60,7 @@ "ethers": "^5.7.2", "hardhat": "^2.18.1", "hardhat-abi-exporter": "^2.10.1", - "hardhat-deploy": "^0.11.43", + "hardhat-deploy-immutable-proxy": "^0.13.2", "hardhat-gas-reporter": "^1.0.9", "hardhat-truffle5": "^1.0.1", "hdkey": "^2.1.0", diff --git a/projects/hardhat-deploy/tasks/import-truffle-deployment.ts b/projects/hardhat-deploy/tasks/import-truffle-deployment.ts index 4cecf2c09..cb5849edc 100644 --- a/projects/hardhat-deploy/tasks/import-truffle-deployment.ts +++ b/projects/hardhat-deploy/tasks/import-truffle-deployment.ts @@ -3,7 +3,7 @@ import fs from 'fs/promises'; import path from 'path'; import { HardhatRuntimeEnvironment } from 'hardhat/types'; import { DeploymentsExtension } from 'hardhat-deploy/types'; -import "hardhat-deploy"; +import "hardhat-deploy-immutable-proxy"; import { Console } from 'console'; diff --git a/projects/hardhat-deploy/test/ownership/owner.test.ts b/projects/hardhat-deploy/test/ownership/owner.test.ts new file mode 100644 index 000000000..fb04030fd --- /dev/null +++ b/projects/hardhat-deploy/test/ownership/owner.test.ts @@ -0,0 +1,58 @@ +import { expect } from "chai"; +import { assert, deployments, ethers } from "hardhat"; +import "@nomicfoundation/hardhat-toolbox"; +import { network } from "hardhat" +import hre from "hardhat"; + +import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; +import { TransferProxy } from "../../typechain-types"; +import { Ownable } from "../../typechain-types"; +import { getOwner } from "../../deploy/utils"; + +async function getContract(contractName: string) { + const address = (await hre.deployments.get(contractName)).address; + return await hre.ethers.getContractAt(contractName, address) as ContractType +} + +describe("Test Owner Check", function () { + + let owner: SignerWithAddress; + let targetOwner: string + + beforeEach(async function () { + [owner] = await ethers.getSigners(); + targetOwner = await getOwner(hre) + }); + + describe("owners should match target", function () { + it("check owner", async function () { + let transferProxy = await getContract("TransferProxy"); + assert.equal(await transferProxy.owner(), targetOwner); + + const allDeployments = await hre.deployments.all() + for (const [contractName, deployment] of Object.entries(allDeployments)) { + console.log(contractName, deployment.address) + if(!contractName.includes("_") && contractName != "DefaultProxyAdmin" && contractName != "AssetMatcherCollection") { + let contract = await getContract(contractName) + console.log("check ownership") + let owner = "" + try{ + owner = await contract.owner() + console.log(owner) + + } + catch(e){ + console.log(e) + } + if(owner.length > 0) { + assert.equal(owner, targetOwner); + } + } + } + }); + + }) + +}); + + diff --git a/projects/hardhat-deploy/tsconfig.json b/projects/hardhat-deploy/tsconfig.json index a6b2783d6..259140690 100644 --- a/projects/hardhat-deploy/tsconfig.json +++ b/projects/hardhat-deploy/tsconfig.json @@ -12,6 +12,6 @@ "hardhat.config.ts", "./deploy", "./test", - "./typechain-types/**/*" - ] + "./typechain-types/**/*", + "test/ownership/owner.test.ts" ] } \ No newline at end of file diff --git a/projects/hardhat-deploy/utils/config/camp_sepolia.json b/projects/hardhat-deploy/utils/config/camp_sepolia.json new file mode 100644 index 000000000..7e2d8c6b2 --- /dev/null +++ b/projects/hardhat-deploy/utils/config/camp_sepolia.json @@ -0,0 +1,4 @@ +{ + "deploy_meta": true, + "deploy_non_meta": false +} \ No newline at end of file diff --git a/projects/hardhat-deploy/utils/config/lisk_sepolia.json b/projects/hardhat-deploy/utils/config/lisk_sepolia.json new file mode 100644 index 000000000..7e2d8c6b2 --- /dev/null +++ b/projects/hardhat-deploy/utils/config/lisk_sepolia.json @@ -0,0 +1,4 @@ +{ + "deploy_meta": true, + "deploy_non_meta": false +} \ No newline at end of file diff --git a/projects/hardhat-deploy/utils/config/sei_testnet.json b/projects/hardhat-deploy/utils/config/sei_testnet.json new file mode 100644 index 000000000..7e2d8c6b2 --- /dev/null +++ b/projects/hardhat-deploy/utils/config/sei_testnet.json @@ -0,0 +1,4 @@ +{ + "deploy_meta": true, + "deploy_non_meta": false +} \ No newline at end of file diff --git a/projects/hardhat-deploy/utils/config/zksync_sepolia copy.json b/projects/hardhat-deploy/utils/config/zksync_sepolia copy.json new file mode 100644 index 000000000..4eb364438 --- /dev/null +++ b/projects/hardhat-deploy/utils/config/zksync_sepolia copy.json @@ -0,0 +1,4 @@ +{ + "deploy_meta": false, + "deploy_non_meta": true +} \ No newline at end of file diff --git a/projects/interfaces/CHANGELOG.md b/projects/interfaces/CHANGELOG.md index 93a454e87..b67e68b97 100644 --- a/projects/interfaces/CHANGELOG.md +++ b/projects/interfaces/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +**Note:** Version bump only for package @rarible/exchange-interfaces + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/exchange-interfaces diff --git a/projects/interfaces/package.json b/projects/interfaces/package.json index e0d319b04..dd2bac92e 100644 --- a/projects/interfaces/package.json +++ b/projects/interfaces/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/exchange-interfaces", - "version": "0.8.4-beta.3", + "version": "0.8.5", "description": "Solidity interfaces used by ExchangeV2 on Rarible", "files": [ "contracts", @@ -24,8 +24,8 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/lib-asset": "^0.8.4-beta.3", - "@rarible/lib-part": "^0.8.4-beta.3", + "@rarible/lib-asset": "^0.8.5", + "@rarible/lib-part": "^0.8.5", "truffle-plugin-verify": "^0.6.5" }, "publishConfig": { diff --git a/projects/lazy-mint/CHANGELOG.md b/projects/lazy-mint/CHANGELOG.md index 0c21f1077..02728d68e 100644 --- a/projects/lazy-mint/CHANGELOG.md +++ b/projects/lazy-mint/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +**Note:** Version bump only for package @rarible/lazy-mint + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/lazy-mint diff --git a/projects/lazy-mint/package.json b/projects/lazy-mint/package.json index e445e6d47..49dd0d85c 100644 --- a/projects/lazy-mint/package.json +++ b/projects/lazy-mint/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/lazy-mint", - "version": "0.8.4-beta.3", + "version": "0.8.5", "description": "Interfaces for ERC-721/1155 contracts with mintAndTransfer function", "files": [ "contracts", @@ -25,7 +25,7 @@ "homepage": "https://github.com/rariblecom/protocol-contracts/mint-and-transfer#readme", "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/lib-part": "^0.8.4-beta.3", + "@rarible/lib-part": "^0.8.5", "truffle-plugin-verify": "^0.6.5" }, "devDependencies": { diff --git a/projects/lib-asset/CHANGELOG.md b/projects/lib-asset/CHANGELOG.md index a7e9650ca..2b3544adc 100644 --- a/projects/lib-asset/CHANGELOG.md +++ b/projects/lib-asset/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +**Note:** Version bump only for package @rarible/lib-asset + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/lib-asset diff --git a/projects/lib-asset/package.json b/projects/lib-asset/package.json index 628cd8cfa..7d8f05eec 100644 --- a/projects/lib-asset/package.json +++ b/projects/lib-asset/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/lib-asset", - "version": "0.8.4-beta.3", + "version": "0.8.5", "description": "Solidity asset library used by ExchangeV2 on Rarible", "files": [ "contracts", diff --git a/projects/lib-bp/CHANGELOG.md b/projects/lib-bp/CHANGELOG.md index 5ce32bc5b..18a087142 100644 --- a/projects/lib-bp/CHANGELOG.md +++ b/projects/lib-bp/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +**Note:** Version bump only for package @rarible/lib-bp + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) ### Bug Fixes diff --git a/projects/lib-bp/package.json b/projects/lib-bp/package.json index 2880e3294..8980716c6 100644 --- a/projects/lib-bp/package.json +++ b/projects/lib-bp/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/lib-bp", - "version": "0.8.4-beta.3", + "version": "0.8.5", "description": "Solidity bp library", "files": [ "contracts", diff --git a/projects/lib-part/CHANGELOG.md b/projects/lib-part/CHANGELOG.md index bbd83f0cb..190a41460 100644 --- a/projects/lib-part/CHANGELOG.md +++ b/projects/lib-part/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +**Note:** Version bump only for package @rarible/lib-part + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/lib-part diff --git a/projects/lib-part/package.json b/projects/lib-part/package.json index 70e076723..13cb6ee00 100644 --- a/projects/lib-part/package.json +++ b/projects/lib-part/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/lib-part", - "version": "0.8.4-beta.3", + "version": "0.8.5", "description": "Solidity part library", "files": [ "contracts", diff --git a/projects/lib-signature/CHANGELOG.md b/projects/lib-signature/CHANGELOG.md index 187f0fbe2..b56084968 100644 --- a/projects/lib-signature/CHANGELOG.md +++ b/projects/lib-signature/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +**Note:** Version bump only for package @rarible/lib-signature + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/lib-signature diff --git a/projects/lib-signature/package.json b/projects/lib-signature/package.json index 3cc9eee9b..e20eb6d9f 100644 --- a/projects/lib-signature/package.json +++ b/projects/lib-signature/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/lib-signature", - "version": "0.8.4-beta.3", + "version": "0.8.5", "description": "Solidity signature library", "files": [ "contracts", diff --git a/projects/meta-tx/CHANGELOG.md b/projects/meta-tx/CHANGELOG.md index ca7ba29ca..9fdfa135e 100644 --- a/projects/meta-tx/CHANGELOG.md +++ b/projects/meta-tx/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Features + +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rariblecom/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/meta-tx diff --git a/projects/meta-tx/package.json b/projects/meta-tx/package.json index c1f6c8f13..641803754 100644 --- a/projects/meta-tx/package.json +++ b/projects/meta-tx/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/meta-tx", - "version": "0.8.4-beta.3", + "version": "0.8.5", "description": "Provides `gasless` execution methods", "files": [ "contracts", diff --git a/projects/role-operator/CHANGELOG.md b/projects/role-operator/CHANGELOG.md index eb39394db..da3566666 100644 --- a/projects/role-operator/CHANGELOG.md +++ b/projects/role-operator/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Features + +- add deploy operator role for proxy ([5e28f3d](https://github.com/rariblecom/protocol-contracts/commit/5e28f3d9532ed6823302a0cd1a1fb24e0bb12544)) + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/role-operator diff --git a/projects/role-operator/contracts/OperatorRole.sol b/projects/role-operator/contracts/OperatorRole.sol index f8a5e5ac1..4beeae519 100644 --- a/projects/role-operator/contracts/OperatorRole.sol +++ b/projects/role-operator/contracts/OperatorRole.sol @@ -12,6 +12,12 @@ contract OperatorRole is OwnableUpgradeable { __Ownable_init_unchained(); } + function __OperatorRole_init_proxy(address initialOwner) external initializer { + __Context_init_unchained(); + __Ownable_init_unchained(); + transferOwnership(initialOwner); + } + function addOperator(address operator) external onlyOwner { operators[operator] = true; } diff --git a/projects/role-operator/package.json b/projects/role-operator/package.json index 5817e8252..e8f927f52 100644 --- a/projects/role-operator/package.json +++ b/projects/role-operator/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/role-operator", - "version": "0.8.4-beta.3", + "version": "0.8.5", "description": "Solidity operator role functionality", "files": [ "contracts", diff --git a/projects/royalties-registry/CHANGELOG.md b/projects/royalties-registry/CHANGELOG.md index 5e4174fe8..e044caa1e 100644 --- a/projects/royalties-registry/CHANGELOG.md +++ b/projects/royalties-registry/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Features + +- add deploy support for factory ([f9a1160](https://github.com/rarible/protocol-contracts/commit/f9a11605766a943f56d004c07d6a4c32b1d26cd1)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.4-beta.3](https://github.com/rarible/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/royalties-registry diff --git a/projects/royalties-registry/contracts/RoyaltiesRegistry.sol b/projects/royalties-registry/contracts/RoyaltiesRegistry.sol index aa2696f5d..04ddbbd3d 100644 --- a/projects/royalties-registry/contracts/RoyaltiesRegistry.sol +++ b/projects/royalties-registry/contracts/RoyaltiesRegistry.sol @@ -43,6 +43,11 @@ contract RoyaltiesRegistry is IRoyaltiesProvider, OwnableUpgradeable { __Ownable_init_unchained(); } + function __RoyaltiesRegistry_init_proxy(address _initialOwner) external initializer { + __Ownable_init_unchained(); + transferOwnership(_initialOwner); + } + /// @dev sets external provider for token contract, and royalties type = 4 function setProviderByToken(address token, address provider) external { checkOwner(token); diff --git a/projects/royalties-registry/package.json b/projects/royalties-registry/package.json index 93cda9c33..fafa7f955 100644 --- a/projects/royalties-registry/package.json +++ b/projects/royalties-registry/package.json @@ -9,7 +9,7 @@ "readme.md", "dist" ], - "version": "0.8.4-beta.3", + "version": "0.8.5", "scripts": { "test": "truffle test", "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck" @@ -17,11 +17,11 @@ "dependencies": { "@openzeppelin/contracts": "3.4.0", "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-interfaces": "^0.8.4-beta.3", - "@rarible/exchange-v2": "^0.8.4-beta.3", - "@rarible/lib-bp": "^0.8.4-beta.3", - "@rarible/royalties": "^0.8.4-beta.3", - "@rarible/royalties-upgradeable": "^0.8.4-beta.3", + "@rarible/exchange-interfaces": "^0.8.5", + "@rarible/exchange-v2": "^0.8.5", + "@rarible/lib-bp": "^0.8.5", + "@rarible/royalties": "^0.8.5", + "@rarible/royalties-upgradeable": "^0.8.5", "truffle-plugin-verify": "^0.6.5" }, "devDependencies": { diff --git a/projects/royalties-upgradeable/CHANGELOG.md b/projects/royalties-upgradeable/CHANGELOG.md index 067fe53ab..d097a8dfd 100644 --- a/projects/royalties-upgradeable/CHANGELOG.md +++ b/projects/royalties-upgradeable/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +**Note:** Version bump only for package @rarible/royalties-upgradeable + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/royalties-upgradeable diff --git a/projects/royalties-upgradeable/package.json b/projects/royalties-upgradeable/package.json index 7e65ca209..662e7a325 100644 --- a/projects/royalties-upgradeable/package.json +++ b/projects/royalties-upgradeable/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/royalties-upgradeable", - "version": "0.8.4-beta.3", + "version": "0.8.5", "description": "Solidity upgradeable abstract contracts for Rarible royalties", "files": [ "contracts", @@ -25,7 +25,7 @@ "homepage": "https://github.com/rariblecom/protocol-contracts/royalties-upgradeable#readme", "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/royalties": "^0.8.4-beta.3", + "@rarible/royalties": "^0.8.5", "truffle-plugin-verify": "^0.6.5" }, "publishConfig": { diff --git a/projects/royalties/CHANGELOG.md b/projects/royalties/CHANGELOG.md index 9bde4e892..25bdfd383 100644 --- a/projects/royalties/CHANGELOG.md +++ b/projects/royalties/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +**Note:** Version bump only for package @rarible/royalties + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/royalties diff --git a/projects/royalties/package.json b/projects/royalties/package.json index 3408b0e58..6f105ffdc 100644 --- a/projects/royalties/package.json +++ b/projects/royalties/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/royalties", - "version": "0.8.4-beta.3", + "version": "0.8.5", "description": "Solidity interfaces to support royalties on Rarible", "files": [ "contracts", @@ -24,7 +24,7 @@ }, "homepage": "https://github.com/rariblecom/protocol-contracts/royalties#readme", "dependencies": { - "@rarible/lib-part": "^0.8.4-beta.3", + "@rarible/lib-part": "^0.8.5", "truffle-plugin-verify": "^0.6.5" }, "scripts": { diff --git a/projects/tokens-test/CHANGELOG.md b/projects/tokens-test/CHANGELOG.md index 2ff554431..a973244fe 100644 --- a/projects/tokens-test/CHANGELOG.md +++ b/projects/tokens-test/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +**Note:** Version bump only for package @rarible/test + ## [0.8.4-beta.3](https://github.com/rarible/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/test diff --git a/projects/tokens-test/package.json b/projects/tokens-test/package.json index 7895b15d8..ee57142f7 100644 --- a/projects/tokens-test/package.json +++ b/projects/tokens-test/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/test", - "version": "0.8.4-beta.3", + "version": "0.8.5", "private": true, "main": "truffle.js", "directories": { diff --git a/projects/tokens/CHANGELOG.md b/projects/tokens/CHANGELOG.md index 90460914f..f1ea4de78 100644 --- a/projects/tokens/CHANGELOG.md +++ b/projects/tokens/CHANGELOG.md @@ -3,6 +3,16 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Features + +- add proxy deploy support ([40270b0](https://github.com/rarible/protocol-contracts/commit/40270b07cdb2e061a3a349535f7bb9717e686eb7)) +- change token factories back, optomise ERC1155 size ([8e25ae2](https://github.com/rarible/protocol-contracts/commit/8e25ae2ae5c03166ef3524935c827f168f6d0445)) +- fix hardhat-migrations, change createToken() and getAddress() in token factories ([8930c47](https://github.com/rarible/protocol-contracts/commit/8930c47eec9da0b3bcbe5c6a467cae3e803085e2)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) +- rename ([a2c6a83](https://github.com/rarible/protocol-contracts/commit/a2c6a83b94a89fc9aaddfa1e754cbf5c1280b8c7)) + ## [0.8.4-beta.3](https://github.com/rarible/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/tokens diff --git a/projects/tokens/contracts/HasContractURI.sol b/projects/tokens/contracts/HasContractURI.sol index 5a6f9f267..0bd7195c2 100644 --- a/projects/tokens/contracts/HasContractURI.sol +++ b/projects/tokens/contracts/HasContractURI.sol @@ -13,7 +13,7 @@ abstract contract HasContractURI is ERC165Upgradeable { */ bytes4 private constant _INTERFACE_ID_CONTRACT_URI = 0xe8a3d485; - function __HasContractURI_init_unchained(string memory _contractURI) internal initializer { + function __HasContractURI_init_unchained(string memory _contractURI) internal { contractURI = _contractURI; _registerInterface(_INTERFACE_ID_CONTRACT_URI); } diff --git a/projects/tokens/contracts/access/MinterAccessControl.sol b/projects/tokens/contracts/access/MinterAccessControl.sol index 3b7b28a30..0ef6a3f7a 100644 --- a/projects/tokens/contracts/access/MinterAccessControl.sol +++ b/projects/tokens/contracts/access/MinterAccessControl.sol @@ -9,12 +9,12 @@ abstract contract MinterAccessControl is OwnableUpgradeable { event MinterStatusChanged(address indexed minter, bool indexed status); - function __MinterAccessControl_init() internal initializer { + function __MinterAccessControl_init() internal { __Ownable_init_unchained(); __MinterAccessControl_init_unchained(); } - function __MinterAccessControl_init_unchained() internal initializer { + function __MinterAccessControl_init_unchained() internal { } /** diff --git a/projects/tokens/contracts/beacons/ERC1155RaribleBeacon.sol b/projects/tokens/contracts/beacons/ERC1155RaribleBeacon.sol index db2e66603..e1fb0daec 100644 --- a/projects/tokens/contracts/beacons/ERC1155RaribleBeacon.sol +++ b/projects/tokens/contracts/beacons/ERC1155RaribleBeacon.sol @@ -5,7 +5,7 @@ pragma solidity ^0.7.0; import "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol"; contract ERC1155RaribleBeacon is UpgradeableBeacon { - constructor(address impl) UpgradeableBeacon(impl) { - + constructor(address impl, address initialOwner) UpgradeableBeacon(impl) { + transferOwnership(initialOwner); } } diff --git a/projects/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol b/projects/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol index 7246084aa..2533923dd 100644 --- a/projects/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol +++ b/projects/tokens/contracts/beacons/ERC1155RaribleBeaconMeta.sol @@ -5,7 +5,7 @@ pragma solidity ^0.7.0; import "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol"; contract ERC1155RaribleBeaconMeta is UpgradeableBeacon { - constructor(address impl) UpgradeableBeacon(impl) { - + constructor(address impl, address initialOwner) UpgradeableBeacon(impl) { + transferOwnership(initialOwner); } } diff --git a/projects/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol b/projects/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol index 67efb2604..558c7000e 100644 --- a/projects/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol +++ b/projects/tokens/contracts/beacons/ERC721RaribleMinimalBeacon.sol @@ -5,7 +5,7 @@ pragma solidity ^0.7.0; import "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol"; contract ERC721RaribleMinimalBeacon is UpgradeableBeacon { - constructor(address impl) UpgradeableBeacon(impl) { - + constructor(address impl, address initialOwner) UpgradeableBeacon(impl) { + transferOwnership(initialOwner); } } diff --git a/projects/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol b/projects/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol index fd8f3fa91..439f8ddce 100644 --- a/projects/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol +++ b/projects/tokens/contracts/beacons/ERC721RaribleMinimalBeaconMeta.sol @@ -5,7 +5,7 @@ pragma solidity ^0.7.0; import "@openzeppelin/contracts/proxy/UpgradeableBeacon.sol"; contract ERC721RaribleMinimalBeaconMeta is UpgradeableBeacon { - constructor(address impl) UpgradeableBeacon(impl) { - + constructor(address impl, address initialOwner) UpgradeableBeacon(impl) { + transferOwnership(initialOwner); } } diff --git a/projects/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol b/projects/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol index 1cbe49b3c..a20be0f13 100644 --- a/projects/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol +++ b/projects/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol @@ -21,10 +21,11 @@ contract ERC1155RaribleFactoryC2 is Ownable{ event Create1155RaribleProxy(address proxy); event Create1155RaribleUserProxy(address proxy); - constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) { + constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) { beacon = _beacon; transferProxy = _transferProxy; lazyTransferProxy = _lazyTransferProxy; + transferOwnership(initialOwner); } function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { diff --git a/projects/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol b/projects/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol index 0e38fcccc..2ac267ec0 100644 --- a/projects/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol +++ b/projects/tokens/contracts/create-2/ERC721RaribleFactoryC2.sol @@ -21,10 +21,11 @@ contract ERC721RaribleFactoryC2 is Ownable { event Create721RaribleProxy(address proxy); event Create721RaribleUserProxy(address proxy); - constructor(address _beacon, address _transferProxy, address _lazyTransferProxy) { + constructor(address _beacon, address _transferProxy, address _lazyTransferProxy, address initialOwner) { beacon = _beacon; transferProxy = _transferProxy; lazyTransferProxy = _lazyTransferProxy; + transferOwnership(initialOwner); } function createToken(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, uint salt) external { diff --git a/projects/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol b/projects/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol index ddfa24882..914017790 100644 --- a/projects/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol +++ b/projects/tokens/contracts/erc-1155/ERC1155BurnableUpgradeable.sol @@ -12,11 +12,6 @@ import "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol"; * _Available since v3.1._ */ abstract contract ERC1155BurnableUpgradeable is Initializable, ERC1155Upgradeable { - function __ERC1155Burnable_init() internal { - __Context_init_unchained(); - __ERC165_init_unchained(); - __ERC1155Burnable_init_unchained(); - } function __ERC1155Burnable_init_unchained() internal { } diff --git a/projects/tokens/contracts/erc-1155/ERC1155Rarible.sol b/projects/tokens/contracts/erc-1155/ERC1155Rarible.sol index 94142732a..25fd3f067 100644 --- a/projects/tokens/contracts/erc-1155/ERC1155Rarible.sol +++ b/projects/tokens/contracts/erc-1155/ERC1155Rarible.sol @@ -17,7 +17,7 @@ contract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl isPrivate = true; emit CreateERC1155RaribleUser(_msgSender(), _name, _symbol); } - + function __ERC1155Rarible_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) external virtual { __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy); @@ -25,6 +25,16 @@ contract ERC1155Rarible is ERC1155Base, IsPrivateCollection, MinterAccessControl emit CreateERC1155Rarible(_msgSender(), _name, _symbol); } + function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual { + __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy); + + isPrivate = false; + + transferOwnership(initialOwner); + + emit CreateERC1155Rarible(initialOwner, _name, _symbol); + } + function __ERC1155Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer { __Ownable_init_unchained(); __ERC1155Lazy_init_unchained(); diff --git a/projects/tokens/contracts/erc-1155/Mint1155Validator.sol b/projects/tokens/contracts/erc-1155/Mint1155Validator.sol index dbd453910..6095e2611 100644 --- a/projects/tokens/contracts/erc-1155/Mint1155Validator.sol +++ b/projects/tokens/contracts/erc-1155/Mint1155Validator.sol @@ -6,7 +6,7 @@ import "../erc-1271/ERC1271Validator.sol"; import "@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol"; contract Mint1155Validator is ERC1271Validator { - function __Mint1155Validator_init_unchained() internal initializer { + function __Mint1155Validator_init_unchained() internal { __EIP712_init_unchained("Mint1155", "1"); } diff --git a/projects/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol b/projects/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol index 5859e6cc1..385a0a189 100644 --- a/projects/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol +++ b/projects/tokens/contracts/erc-1155/erc-1155-meta/ERC1155RaribleMeta.sol @@ -32,6 +32,18 @@ contract ERC1155RaribleMeta is ERC1155Base, IsPrivateCollection, MinterAccessCon emit CreateERC1155Rarible(_msgSender(), _name, _symbol); } + function __ERC1155Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external { + __ERC1155Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy); + + __MetaTransaction_init_unchained("ERC1155RaribleMeta", "1"); + + isPrivate = false; + + transferOwnership(initialOwner); + + emit CreateERC1155Rarible(_msgSender(), _name, _symbol); + } + function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) { return super._msgSender(); } diff --git a/projects/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol b/projects/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol index 8b2401dd0..15f02ac05 100644 --- a/projects/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol +++ b/projects/tokens/contracts/erc-721-minimal/ERC721RaribleMinimal.sol @@ -25,6 +25,16 @@ contract ERC721RaribleMinimal is ERC721BaseMinimal, IsPrivateCollection, MinterA emit CreateERC721Rarible(_msgSender(), _name, _symbol); } + function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external virtual { + __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy); + + isPrivate = false; + + transferOwnership(initialOwner); + + emit CreateERC721Rarible(initialOwner, _name, _symbol); + } + function __ERC721Rarible_init_unchained(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy) internal initializer { _setBaseURI(baseURI); __ERC721Lazy_init_unchained(); diff --git a/projects/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol b/projects/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol index 5bbce036e..89d321675 100644 --- a/projects/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol +++ b/projects/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol @@ -12,7 +12,7 @@ contract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAcce event CreateERC721Rarible(address owner, string name, string symbol); event CreateERC721RaribleUser(address owner, string name, string symbol); - function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external { + function __ERC721RaribleUser_init(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address[] memory operators, address transferProxy, address lazyTransferProxy) external { __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy); __MetaTransaction_init_unchained("ERC721RaribleUserMeta", "1"); @@ -32,6 +32,18 @@ contract ERC721RaribleMeta is ERC721BaseMinimal, IsPrivateCollection, MinterAcce emit CreateERC721Rarible(_msgSender(), _name, _symbol); } + function __ERC721Rarible_init_proxy(string memory _name, string memory _symbol, string memory baseURI, string memory contractURI, address transferProxy, address lazyTransferProxy, address initialOwner) external { + __ERC721Rarible_init_unchained(_name, _symbol, baseURI, contractURI, transferProxy, lazyTransferProxy); + + __MetaTransaction_init_unchained("ERC721RaribleMeta", "1"); + + isPrivate = false; + + transferOwnership(initialOwner); + + emit CreateERC721Rarible(initialOwner, _name, _symbol); + } + function _msgSender() internal view virtual override(ContextUpgradeable, EIP712MetaTransaction) returns (address payable) { return super._msgSender(); } diff --git a/projects/tokens/package.json b/projects/tokens/package.json index a192b4371..3d9d60382 100644 --- a/projects/tokens/package.json +++ b/projects/tokens/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/tokens", - "version": "0.8.4-beta.3", + "version": "0.8.5", "main": "truffle.js", "directories": { "test": "test" @@ -19,32 +19,29 @@ "zk-get-address-collection": "npx hardhat run --config zk.hardhat.config.ts scripts/zk-get-address-collection.ts" }, "dependencies": { - "@openzeppelin/contracts": "3.4.0", - "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/lazy-mint": "^0.8.4-beta.3", - "@rarible/lib-asset": "^0.8.4-beta.3", - "@rarible/lib-signature": "^0.8.4-beta.3", - "@rarible/meta-tx": "^0.8.4-beta.3", - "@rarible/royalties": "^0.8.4-beta.3", - "@rarible/royalties-upgradeable": "^0.8.4-beta.3", - "eth-sig-util": "^3.0.1", - "truffle-plugin-verify": "^0.6.5", + "@matterlabs/hardhat-zksync-chai-matchers": "1.2.1", "@matterlabs/hardhat-zksync-deploy": "^0.6.3", + "@matterlabs/hardhat-zksync-ethers": "^0.0.1-beta.2", "@matterlabs/hardhat-zksync-solc": "^0.3.15", + "@matterlabs/hardhat-zksync-toolbox": "^0.2.0", "@matterlabs/hardhat-zksync-upgradable": "^0.2.0", "@matterlabs/hardhat-zksync-verify": "0.2.1", + "@openzeppelin/contracts": "3.4.0", + "@openzeppelin/contracts-upgradeable": "3.4.0", "@openzeppelin/hardhat-upgrades": "^1.22.1", "@openzeppelin/upgrades-core": "~1.31.1", - "zksync-ethers": "^5.0.0", - "@matterlabs/hardhat-zksync-toolbox": "^0.2.0", - "@matterlabs/hardhat-zksync-chai-matchers": "1.2.1", - "@matterlabs/hardhat-zksync-ethers": "^0.0.1-beta.2" + "@rarible/lazy-mint": "^0.8.5", + "@rarible/lib-asset": "^0.8.5", + "@rarible/lib-signature": "^0.8.5", + "@rarible/meta-tx": "^0.8.5", + "@rarible/royalties": "^0.8.5", + "@rarible/royalties-upgradeable": "^0.8.5", + "eth-sig-util": "^3.0.1", + "truffle-plugin-verify": "^0.6.5", + "zksync-ethers": "^5.0.0" }, "devDependencies": { "@daonomic/tests-common": "0.2.2", - "@openzeppelin/truffle-upgrades": "^1.8.1", - "@truffle/hdwallet-provider": "1.4.0", - "sol-merger": "^3.1.0", "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", "@nomicfoundation/hardhat-foundry": "^1.0.0", "@nomicfoundation/hardhat-network-helpers": "^1.0.0", @@ -57,9 +54,11 @@ "@nxqbao/eth-signer-trezor": "^1.0.1", "@openzeppelin/contracts-upgradeable": "^3.4.0", "@openzeppelin/hardhat-upgrades": "^1.22.1", + "@openzeppelin/truffle-upgrades": "^1.8.1", "@tenderly/hardhat-tenderly": "^1.6.1", "@trezor/connect": "^9.1.4", "@trezor/connect-plugin-ethereum": "^9.0.2", + "@truffle/hdwallet-provider": "1.4.0", "@typechain/ethers-v5": "^10.2.0", "@typechain/hardhat": "^6.1.5", "@types/chai": "^4.3.4", @@ -76,6 +75,7 @@ "hardhat-truffle5": "^1.0.1", "hdkey": "^2.1.0", "keccak256": "^1.0.6", + "sol-merger": "^3.1.0", "solidity-coverage": "^0.8.2", "ts-node": "^10.9.1", "tslib": "^2.5.0", diff --git a/projects/transfer-manager/CHANGELOG.md b/projects/transfer-manager/CHANGELOG.md index 939fadafe..0f3afbae6 100644 --- a/projects/transfer-manager/CHANGELOG.md +++ b/projects/transfer-manager/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Features + +- add lisk deploy ([6c5f6ba](https://github.com/rarible/protocol-contracts/commit/6c5f6ba32a56664ee5b50dd26de3bbbb98924f36)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.4-beta.3](https://github.com/rarible/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/transfer-manager diff --git a/projects/transfer-manager/contracts/TransferExecutor.sol b/projects/transfer-manager/contracts/TransferExecutor.sol index e9b0763b5..7a657094e 100644 --- a/projects/transfer-manager/contracts/TransferExecutor.sol +++ b/projects/transfer-manager/contracts/TransferExecutor.sol @@ -31,6 +31,11 @@ abstract contract TransferExecutor is Initializable, OwnableUpgradeable, ITransf emit ProxyChange(assetType, proxy); } + function _setTransferProxy(bytes4 assetType, address proxy) internal { + proxies[assetType] = proxy; + emit ProxyChange(assetType, proxy); + } + function transfer( LibAsset.Asset memory asset, address from, diff --git a/projects/transfer-manager/package.json b/projects/transfer-manager/package.json index f01145103..bdef4d3c5 100644 --- a/projects/transfer-manager/package.json +++ b/projects/transfer-manager/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/transfer-manager", - "version": "0.8.4-beta.3", + "version": "0.8.5", "main": "truffle.js", "access": "public", "private": false, @@ -18,13 +18,13 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-interfaces": "^0.8.4-beta.3", - "@rarible/lazy-mint": "^0.8.4-beta.3", - "@rarible/lib-asset": "^0.8.4-beta.3", - "@rarible/lib-bp": "^0.8.4-beta.3", - "@rarible/lib-part": "^0.8.4-beta.3", - "@rarible/royalties": "^0.8.4-beta.3", - "@rarible/royalties-upgradeable": "^0.8.4-beta.3", + "@rarible/exchange-interfaces": "^0.8.5", + "@rarible/lazy-mint": "^0.8.5", + "@rarible/lib-asset": "^0.8.5", + "@rarible/lib-bp": "^0.8.5", + "@rarible/lib-part": "^0.8.5", + "@rarible/royalties": "^0.8.5", + "@rarible/royalties-upgradeable": "^0.8.5", "eth-sig-util": "^3.0.1", "ethers": "5.7.2", "truffle-plugin-verify": "^0.6.5" diff --git a/projects/transfer-proxy/CHANGELOG.md b/projects/transfer-proxy/CHANGELOG.md index a0570937f..a3ea65229 100644 --- a/projects/transfer-proxy/CHANGELOG.md +++ b/projects/transfer-proxy/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Features + +- add deploy support for factory ([f9a1160](https://github.com/rarible/protocol-contracts/commit/f9a11605766a943f56d004c07d6a4c32b1d26cd1)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.4-beta.3](https://github.com/rarible/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/transfer-proxy diff --git a/projects/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol b/projects/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol index d7e7fa948..2444ad5f3 100644 --- a/projects/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol +++ b/projects/transfer-proxy/contracts/lazy-mint/erc1155/ERC1155LazyMintTransferProxy.sol @@ -9,6 +9,13 @@ import "@rarible/lazy-mint/contracts/erc-1155/IERC1155LazyMint.sol"; import "@rarible/role-operator/contracts/OperatorRole.sol"; contract ERC1155LazyMintTransferProxy is OperatorRole, ITransferProxy { + + function __ERC1155LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer { + __Context_init_unchained(); + __Ownable_init_unchained(); + transferOwnership(_initialOwner); + } + function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external { (address token, LibERC1155LazyMint.Mint1155Data memory data) = abi.decode(asset.assetType.data, (address, LibERC1155LazyMint.Mint1155Data)); IERC1155LazyMint(token).transferFromOrMint(data, from, to, asset.value); diff --git a/projects/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol b/projects/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol index f917ab423..78bdee10c 100644 --- a/projects/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol +++ b/projects/transfer-proxy/contracts/lazy-mint/erc721/ERC721LazyMintTransferProxy.sol @@ -9,6 +9,13 @@ import "@rarible/lazy-mint/contracts/erc-721/IERC721LazyMint.sol"; import "@rarible/role-operator/contracts/OperatorRole.sol"; contract ERC721LazyMintTransferProxy is OperatorRole, ITransferProxy { + + function __ERC721LazyMintTransferProxy_init_proxy(address _initialOwner) external initializer { + __Context_init_unchained(); + __Ownable_init_unchained(); + transferOwnership(_initialOwner); + } + function transfer(LibAsset.Asset memory asset, address from, address to) override onlyOperator external { require(asset.value == 1, "erc721 value error"); (address token, LibERC721LazyMint.Mint721Data memory data) = abi.decode(asset.assetType.data, (address, LibERC721LazyMint.Mint721Data)); diff --git a/projects/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol b/projects/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol index 41a5cc370..87e574060 100644 --- a/projects/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol +++ b/projects/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol @@ -11,6 +11,11 @@ contract ERC20TransferProxy is IERC20TransferProxy, Initializable, OperatorRole __Ownable_init(); } + function __ERC20TransferProxy_init_proxy(address _initialOwner) external initializer { + __Ownable_init(); + transferOwnership(_initialOwner); + } + function erc20safeTransferFrom(IERC20Upgradeable token, address from, address to, uint256 value) override external onlyOperator { require(token.transferFrom(from, to, value), "failure while transferring"); } diff --git a/projects/transfer-proxy/contracts/proxy/TransferProxy.sol b/projects/transfer-proxy/contracts/proxy/TransferProxy.sol index 0b986924b..12a60493a 100644 --- a/projects/transfer-proxy/contracts/proxy/TransferProxy.sol +++ b/projects/transfer-proxy/contracts/proxy/TransferProxy.sol @@ -11,6 +11,11 @@ contract TransferProxy is INftTransferProxy, Initializable, OperatorRole { __Ownable_init(); } + function __TransferProxy_init_proxy(address _initialOwner) external initializer { + __Ownable_init(); + transferOwnership(_initialOwner); + } + function erc721safeTransferFrom(IERC721Upgradeable token, address from, address to, uint256 tokenId) override external onlyOperator { token.safeTransferFrom(from, to, tokenId); } diff --git a/projects/transfer-proxy/package.json b/projects/transfer-proxy/package.json index 59f30c283..e0d4c1d69 100644 --- a/projects/transfer-proxy/package.json +++ b/projects/transfer-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/transfer-proxy", - "version": "0.8.4-beta.3", + "version": "0.8.5", "main": "truffle.js", "directories": { "test": "test" @@ -16,12 +16,12 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-interfaces": "^0.8.4-beta.3", - "@rarible/lazy-mint": "^0.8.4-beta.3", - "@rarible/lib-asset": "^0.8.4-beta.3", - "@rarible/role-operator": "^0.8.4-beta.3", - "@rarible/royalties": "^0.8.4-beta.3", - "@rarible/royalties-upgradeable": "^0.8.4-beta.3", + "@rarible/exchange-interfaces": "^0.8.5", + "@rarible/lazy-mint": "^0.8.5", + "@rarible/lib-asset": "^0.8.5", + "@rarible/role-operator": "^0.8.5", + "@rarible/royalties": "^0.8.5", + "@rarible/royalties-upgradeable": "^0.8.5", "ethers": "5.7.2", "truffle-plugin-verify": "^0.6.5" }, diff --git a/projects/upgrade-executor/CHANGELOG.md b/projects/upgrade-executor/CHANGELOG.md index 222c9140f..52f6c7ed6 100644 --- a/projects/upgrade-executor/CHANGELOG.md +++ b/projects/upgrade-executor/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) + +### Features + +- tidy up network configs, support frame ([82a88fc](https://github.com/rariblecom/protocol-contracts/commit/82a88fcd81af7638c1234aafd233742d66ecbea1)) + ## [0.8.4-beta.3](https://github.com/rariblecom/protocol-contracts/compare/v0.8.4-beta.2...v0.8.4-beta.3) (2024-01-19) **Note:** Version bump only for package @rarible/upgrade-executor diff --git a/projects/upgrade-executor/package.json b/projects/upgrade-executor/package.json index 1c2cd3287..5b7a26f6d 100644 --- a/projects/upgrade-executor/package.json +++ b/projects/upgrade-executor/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/upgrade-executor", - "version": "0.8.4-beta.3", + "version": "0.8.5", "directories": { "test": "test" }, diff --git a/yarn.lock b/yarn.lock index 1072b20fd..d64ccd6e2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2012,6 +2012,21 @@ resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-2.0.2.tgz#ec95f23b53cb4e71a1a7091380fa223aad18f156" integrity sha512-vnN1AzxbvpSx9pfdRHbUzTRIXpMLPXnUlkW855VaDk6N1pwRaQ2gNzEmFAABk4lWf11E00PKwFd/q27HuwYrYg== +"@nomicfoundation/hardhat-verify@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.5.tgz#dcc2cb5e5c55a39704c7d492436f80f05a4ca5a3" + integrity sha512-Tg4zu8RkWpyADSFIgF4FlJIUEI4VkxcvELsmbJn2OokbvH2SnUrqKmw0BBfDrtvP0hhmx8wsnrRKP5DV/oTyTA== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^8.1.0" + chalk "^2.4.2" + debug "^4.1.1" + lodash.clonedeep "^4.5.0" + semver "^6.3.0" + table "^6.8.0" + undici "^5.14.0" + "@nomicfoundation/hardhat-verify@^1.0.2": version "1.1.1" resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-1.1.1.tgz#6a433d777ce0172d1f0edf7f2d3e1df14b3ecfc1" @@ -9303,6 +9318,37 @@ hardhat-abi-exporter@^2.10.1: "@ethersproject/abi" "^5.5.0" delete-empty "^3.0.0" +hardhat-deploy-immutable-proxy@^0.13.2: + version "0.13.2" + resolved "https://registry.yarnpkg.com/hardhat-deploy-immutable-proxy/-/hardhat-deploy-immutable-proxy-0.13.2.tgz#38bc046087b3cb45ebbac89e57df4d8e982f576a" + integrity sha512-vgSmLJNN7xaWzy9WAWMSx7eGSvXZKGfa4pG7lk9RGwfLwX30lrIGOwFAQMfM/x20A1FX8D9znzBj2PB7FfFlpg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@ethersproject/solidity" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wallet" "^5.7.0" + "@nxqbao/eth-signer-trezor" "^1.0.1" + "@types/qs" "^6.9.7" + axios "^0.21.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" + enquirer "^2.3.6" + ethers "^5.7.0" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + zksync-ethers "^5.0.0" + hardhat-deploy@^0.11.14, hardhat-deploy@^0.11.43: version "0.11.45" resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.11.45.tgz#bed86118175a38a03bb58aba2ce1ed5e80a20bc8" @@ -9333,6 +9379,36 @@ hardhat-deploy@^0.11.14, hardhat-deploy@^0.11.43: qs "^6.9.4" zksync-web3 "^0.14.3" +hardhat-deploy@^0.12.2: + version "0.12.2" + resolved "https://registry.yarnpkg.com/hardhat-deploy/-/hardhat-deploy-0.12.2.tgz#1067bd0af61a65287bcf2a0ba7711ca1b54be2f6" + integrity sha512-Xp/4Lb5lC/j3kvitaWW5IZN5Meqv5D3kTIifc3ZwBoQtFLN26/fDfRV6MWAAcRO9gH64hZVokvtcDdl/fd7w3A== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@ethersproject/providers" "^5.7.2" + "@ethersproject/solidity" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wallet" "^5.7.0" + "@types/qs" "^6.9.7" + axios "^0.21.1" + chalk "^4.1.2" + chokidar "^3.5.2" + debug "^4.3.2" + enquirer "^2.3.6" + ethers "^5.7.0" + form-data "^4.0.0" + fs-extra "^10.0.0" + match-all "^1.2.6" + murmur-128 "^0.2.1" + qs "^6.9.4" + zksync-ethers "^5.0.0" + hardhat-gas-reporter@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz#9a2afb354bc3b6346aab55b1c02ca556d0e16450" From 5a049478b8acde4a8681b09d2f9aa5c54bd9fa58 Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Sat, 27 Apr 2024 12:24:26 +0100 Subject: [PATCH 04/25] fix: build --- projects/deploy/contracts/TokensImport.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/projects/deploy/contracts/TokensImport.sol b/projects/deploy/contracts/TokensImport.sol index 44000df3c..c58f7cf1c 100644 --- a/projects/deploy/contracts/TokensImport.sol +++ b/projects/deploy/contracts/TokensImport.sol @@ -10,7 +10,6 @@ import {ERC721RaribleFactoryC2} from "@rarible/tokens/contracts/create-2/ERC721R //tokens 1155 import {ERC1155Rarible} from "@rarible/tokens/contracts/erc-1155/ERC1155Rarible.sol"; import {ERC1155RaribleFactoryC2} from "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2.sol"; -import {ERC1155RaribleFactoryC2OwnedManaged} from "@rarible/tokens/contracts/create-2/ERC1155RaribleFactoryC2OwnedManaged.sol"; //meta tokens import {ERC721RaribleMeta} from "@rarible/tokens/contracts/erc-721-minimal/erc-721-minimal-meta/ERC721RaribleMeta.sol"; From 5dff72ff57d691fd3e8edf46e3d85c55f9e2d6a3 Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Sat, 27 Apr 2024 12:25:01 +0100 Subject: [PATCH 05/25] chore(release): bump versions after release --- CHANGELOG.md | 71 +++++++++++++++++++++ lerna.json | 2 +- projects/auction/CHANGELOG.md | 6 ++ projects/auction/package.json | 6 +- projects/custom-matchers/CHANGELOG.md | 4 ++ projects/custom-matchers/package.json | 6 +- projects/deploy-proxy/CHANGELOG.md | 4 ++ projects/deploy-proxy/package.json | 2 +- projects/deploy/CHANGELOG.md | 12 ++++ projects/deploy/package.json | 14 ++-- projects/exchange-v2/CHANGELOG.md | 12 ++++ projects/exchange-v2/package.json | 18 +++--- projects/exchange-wrapper/CHANGELOG.md | 7 ++ projects/exchange-wrapper/package.json | 12 ++-- projects/gas-usage-tests/CHANGELOG.md | 7 ++ projects/gas-usage-tests/package.json | 10 +-- projects/hardhat-deploy/CHANGELOG.md | 32 ++++++++++ projects/hardhat-deploy/package.json | 10 +-- projects/interfaces/CHANGELOG.md | 4 ++ projects/interfaces/package.json | 6 +- projects/lazy-mint/CHANGELOG.md | 4 ++ projects/lazy-mint/package.json | 4 +- projects/lib-asset/CHANGELOG.md | 4 ++ projects/lib-asset/package.json | 2 +- projects/lib-bp/CHANGELOG.md | 4 ++ projects/lib-bp/package.json | 2 +- projects/lib-part/CHANGELOG.md | 4 ++ projects/lib-part/package.json | 2 +- projects/lib-signature/CHANGELOG.md | 4 ++ projects/lib-signature/package.json | 2 +- projects/meta-tx/CHANGELOG.md | 6 ++ projects/meta-tx/package.json | 2 +- projects/role-operator/CHANGELOG.md | 4 ++ projects/role-operator/package.json | 2 +- projects/royalties-registry/CHANGELOG.md | 6 ++ projects/royalties-registry/package.json | 12 ++-- projects/royalties-upgradeable/CHANGELOG.md | 4 ++ projects/royalties-upgradeable/package.json | 4 +- projects/royalties/CHANGELOG.md | 4 ++ projects/royalties/package.json | 4 +- projects/tokens-test/CHANGELOG.md | 4 ++ projects/tokens-test/package.json | 2 +- projects/tokens/CHANGELOG.md | 6 ++ projects/tokens/package.json | 14 ++-- projects/transfer-manager/CHANGELOG.md | 6 ++ projects/transfer-manager/package.json | 16 ++--- projects/transfer-proxy/CHANGELOG.md | 6 ++ projects/transfer-proxy/package.json | 14 ++-- projects/upgrade-executor/CHANGELOG.md | 6 ++ projects/upgrade-executor/package.json | 2 +- 50 files changed, 316 insertions(+), 85 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 707afcf1a..d45de246d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,77 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +### Bug Fixes + +- build ([5a04947](https://github.com/rarible/protocol-contracts/commit/5a049478b8acde4a8681b09d2f9aa5c54bd9fa58)) +- support orders with zero price ([162238d](https://github.com/rarible/protocol-contracts/commit/162238de3f6df5cfb7760dfce6dd245b85360eb3)) +- update fees.svg ([6c1e06e](https://github.com/rarible/protocol-contracts/commit/6c1e06eda5006b811c5426f19aac7da498ff0b24)) +- update fees.svg ([8b2d4d2](https://github.com/rarible/protocol-contracts/commit/8b2d4d22f9da68f7895915f11f5720fa86e379ec)) + +### Features + +- add build deps ([822c123](https://github.com/rarible/protocol-contracts/commit/822c123199ac04598b6f8ab995ee8e8a66828015)) +- add celo alfajores ([#271](https://github.com/rarible/protocol-contracts/issues/271)) ([10a795e](https://github.com/rarible/protocol-contracts/commit/10a795e80039677193d5eeccfa14f64e0bcf0448)) +- add configs for palm, match ([cfeee8e](https://github.com/rarible/protocol-contracts/commit/cfeee8e12fdd06664fcb021a5f3efa44708c6f92)) +- add example hardware wallet ([1863ed2](https://github.com/rarible/protocol-contracts/commit/1863ed2e4dbbe7189970a209458cf633511d6b3a)) +- add get signer ([4263de2](https://github.com/rarible/protocol-contracts/commit/4263de2609089db7ca31df755baa23b0e6f9954d)) +- add hardware signer ([9d85d69](https://github.com/rarible/protocol-contracts/commit/9d85d6935563a303047b6f5ee916324fac58819b)) +- add migration for SetProtocolFeeAction ([f9c4aca](https://github.com/rarible/protocol-contracts/commit/f9c4aca5bd01cff077f8a15a4467fa0e3c88ca05)) +- add oasis testnet, xai testnet. PT-4570 deploy contracts to oasis testnet ([ed0e2ce](https://github.com/rarible/protocol-contracts/commit/ed0e2ced1269ce67e29c4795e08193324628aca4)) +- add package json settings ([f798e0c](https://github.com/rarible/protocol-contracts/commit/f798e0caa2bfd176cc79da7430f6a6c2b442d4df)) +- add rari chain mainnet config ([b1dbc48](https://github.com/rarible/protocol-contracts/commit/b1dbc48aa801a7d7add342a845dc5762736e59c2)) +- add run scripts ([89d7879](https://github.com/rarible/protocol-contracts/commit/89d78798fd54791fcd76638ce4a61fa2bd7684ca)) +- add script to transfer ([b75a1ba](https://github.com/rarible/protocol-contracts/commit/b75a1ba9ef079308a27dd3f5efae05b4ea6dc189)) +- add support for access control ([d890391](https://github.com/rarible/protocol-contracts/commit/d890391062af14de4caceedfaf23834dd15fb68f)) +- add tests for nothing to feel, one order free the other isn't ([7b51920](https://github.com/rarible/protocol-contracts/commit/7b519201dcb9c5b3dc5e4a837698ceed3060cd5e)) +- add tests for transferring ([a1c235d](https://github.com/rarible/protocol-contracts/commit/a1c235d4e312ac346f5acbc7bb530c18c5aabe1d)) +- add todo ([d049135](https://github.com/rarible/protocol-contracts/commit/d04913559260108464a73cda81ba16ffb2d9dfc2)) +- base contract addresses ([3f5336b](https://github.com/rarible/protocol-contracts/commit/3f5336b3b705516a8017c8a22ef933824d5c7e5a)) +- deploy contracts on palm_testnet ([18fccde](https://github.com/rarible/protocol-contracts/commit/18fccded3260b1aebc568ebe4f8b9b9883fd47da)) +- deploy non-meta versions of contracts for zksync (they have AA so isn't needed) ([ca3d54b](https://github.com/rarible/protocol-contracts/commit/ca3d54bfe3d3d20afe6a13c0ca9c241dbd334370)) +- deploy non-meta versions of contracts for zksync (they have AA so isn't needed) ([efce395](https://github.com/rarible/protocol-contracts/commit/efce3957d7f77ab0563950ff079df7003123e5ea)) +- deployed contracts to RARI mainnet ([90cb65b](https://github.com/rarible/protocol-contracts/commit/90cb65b9d4f94381b01463dab60a3310ffc04858)) +- deployed on chiliz (ExchangeV2Meta, 002 finished) ([131b4a8](https://github.com/rarible/protocol-contracts/commit/131b4a8b0ab6dc3a203395323f2f9b5cb4f13d10)) +- deployed on ll mainnet ([018d4a3](https://github.com/rarible/protocol-contracts/commit/018d4a3800ad9d4c7b4c8b47a0551217833024dd)) +- deployed on zksync ([cdfc62e](https://github.com/rarible/protocol-contracts/commit/cdfc62e07432ea66887ea32ce4b44340d12462f1)) +- deployed on zksync token contracts ([a2d5a74](https://github.com/rarible/protocol-contracts/commit/a2d5a7426911ff5f582c35a69c3bc3d629cf997c)) +- deployed to base ([75ded55](https://github.com/rarible/protocol-contracts/commit/75ded555e996e07d9b2e8a2245006f5523d7757b)) +- deployed UpgradeExecutor to mainnet ([c3616b0](https://github.com/rarible/protocol-contracts/commit/c3616b0d1ff5d119018976d6d9a6995465ce78e8)) +- deployed wrapper on chiliz ([1b803cd](https://github.com/rarible/protocol-contracts/commit/1b803cdb61fca7b75881bdc3e2b71f9133866747)) +- fix adminship data, migration ([dd7130f](https://github.com/rarible/protocol-contracts/commit/dd7130f263dd8919fb21612152898b6f7a889ccb)) +- fix getNetworkApiUrl() and getNetworkExplorerUrl() ([50f884b](https://github.com/rarible/protocol-contracts/commit/50f884b1d2e25f69d3d4c4dfa96a343e14ade288)) +- get rid of payable in actions where it's not necessary, fix .yaml data structure and related scipts ([442a124](https://github.com/rarible/protocol-contracts/commit/442a1247a684f686b3a11c76586fda21c54cd868)) +- PT-3891 add upgrade executor ([#262](https://github.com/rarible/protocol-contracts/issues/262)) ([399d30d](https://github.com/rarible/protocol-contracts/commit/399d30dbcb9d868f5678861ae179ce960962da1f)) +- PT-4132 deploy contracts on base_sepolia ([d32ef64](https://github.com/rarible/protocol-contracts/commit/d32ef64eb2bbc805a942a8dc256703751eeeaff4)) +- PT-4241 make integration test for ownership transfer ([3de8a84](https://github.com/rarible/protocol-contracts/commit/3de8a840e38abd6443ed75052101d5ba70bf1bb0)) +- PT-4321 deploy contracts on oasys testnet, prepare config for oasys mainnet ([dfd934b](https://github.com/rarible/protocol-contracts/commit/dfd934bfb2c28915fd491c04dc5d10a36418310f)) +- PT-4431 create scipt to export addresses ([4473d5b](https://github.com/rarible/protocol-contracts/commit/4473d5b86cbb8f3c4a3aee0e11217062bc274e15)) +- PT-4448 prepare exchangeV2 update migration, update exchangeV2 on goerli, polygon_mumbai ([3ff8d0a](https://github.com/rarible/protocol-contracts/commit/3ff8d0a4e0c7af6ca0b90450e8c3fbe5b3d4808d)) +- PT-4453 deploy contract on zksync_sepolia ([f0493bb](https://github.com/rarible/protocol-contracts/commit/f0493bb5d88e6e3a82e36658f3d72d77795e3c96)) +- PT-4456 fix audit issues ([c854b19](https://github.com/rarible/protocol-contracts/commit/c854b19f358ce068be4eb84e31abe75545b68364)) +- PT-4456 use migrations instead of tasks for ownership transfer, add ownership check ([12102c5](https://github.com/rarible/protocol-contracts/commit/12102c550335701b7e06190aadf274d249195231)) +- PT-4465 fix block scan addresess for all networks ([2a481c3](https://github.com/rarible/protocol-contracts/commit/2a481c30b4761b7b304c67a8c7459ac575b2b384)) +- PT-4543 deploy contracts on fief_playground_testnet ([f71e0dd](https://github.com/rarible/protocol-contracts/commit/f71e0dd84abc948290ca9c5dfac12580917b4f10)) +- PT-4639 fix network config for frame ([514629b](https://github.com/rarible/protocol-contracts/commit/514629bd6e6604092cc11077cff02ca885a5142d)) +- PT-4662 get rid of nothing to fill tests ([4059dcb](https://github.com/rarible/protocol-contracts/commit/4059dcb20c100e159643e40929392b05f90f7038)) +- PT-4671 deploy contracts on mantle sepolia ([d5033ef](https://github.com/rarible/protocol-contracts/commit/d5033efaf19222c60f900914300ee93be1069d45)) +- PT-4705 deploy contract on kroma_sepolia ([36ac439](https://github.com/rarible/protocol-contracts/commit/36ac439fef8f85b6e230b481c080bfff7ff5065b)) +- PT-4749 upgrade exchangeV2 with upgradeExecutor ([7e18442](https://github.com/rarible/protocol-contracts/commit/7e18442b90bae4ee8a18c797b9126dad2650f896)) +- PT-4844 deploy contract on match_testnet ([73aef7a](https://github.com/rarible/protocol-contracts/commit/73aef7a61c47804f8348b12c8f553c7b39a254b8)) +- PT-4914 deploy contract on zkLink testnet, prepare config for mainnet ([8796c0a](https://github.com/rarible/protocol-contracts/commit/8796c0a9ac266fdd97ff4bf0a752fbf4b607dd28)) +- PT-4962 deploy contracts on 5ire_testnet ([c752e6d](https://github.com/rarible/protocol-contracts/commit/c752e6d7b8a268006a84c1307e0ed70c88a6da3b)) +- PT-5051 deploy contracts on oasys_testnet_saakuru ([b558424](https://github.com/rarible/protocol-contracts/commit/b558424aea3de4125336e4c393cc7f76515555b9)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) +- PT-5076 deploy contracts to astar_zkyoto_testnet ([de82643](https://github.com/rarible/protocol-contracts/commit/de826431eb30ea6e11d3a74e5c5b0f3a4aa43aa9)) +- PT-5095 deploy contracts on polygon_amoy_testnet ([e89dfd7](https://github.com/rarible/protocol-contracts/commit/e89dfd7386d45e0eb31c28024354dc9f66c6008d)) +- refactoring ([c25bb0f](https://github.com/rarible/protocol-contracts/commit/c25bb0f637c51756a39dd565384f2754df8d7b63)) +- RoyaltiesRegistry migration is no longer part of "ownership-transfer" tag ([c9027ad](https://github.com/rarible/protocol-contracts/commit/c9027ad082ae1d760dcc2667f7eb9ced60c9a370)) +- tidy up network configs, support frame ([82a88fc](https://github.com/rarible/protocol-contracts/commit/82a88fcd81af7638c1234aafd233742d66ecbea1)) +- update wrapper on arbitrum testnet, base testnet, polygon testnet ([572add8](https://github.com/rarible/protocol-contracts/commit/572add81b96f0ea00224f1934411b824031d0b87)) +- upgraded ExchangeV2 on mainnet ([87a3740](https://github.com/rarible/protocol-contracts/commit/87a3740903442667c72b9787ba6fc878f7ce67be)) + ## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Bug Fixes diff --git a/lerna.json b/lerna.json index 24b9a2094..04eacf8ca 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "packages": ["projects/**"], "npmClient": "yarn", - "version": "0.8.5", + "version": "0.8.6", "command": { "version": { "allowBranch": ["master", "develop", "feature/*"] diff --git a/projects/auction/CHANGELOG.md b/projects/auction/CHANGELOG.md index 9a8f4c04c..cb89f6bff 100644 --- a/projects/auction/CHANGELOG.md +++ b/projects/auction/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +### Features + +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Features diff --git a/projects/auction/package.json b/projects/auction/package.json index faa3a2926..48f983c07 100644 --- a/projects/auction/package.json +++ b/projects/auction/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/auction", - "version": "0.8.5", + "version": "0.8.6", "main": "truffle.js", "directories": { "test": "test" @@ -17,8 +17,8 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-interfaces": "^0.8.5", - "@rarible/transfer-manager": "^0.8.5", + "@rarible/exchange-interfaces": "^0.8.6", + "@rarible/transfer-manager": "^0.8.6", "ethers": "5.7.2", "truffle-plugin-verify": "^0.6.5" }, diff --git a/projects/custom-matchers/CHANGELOG.md b/projects/custom-matchers/CHANGELOG.md index 2635887eb..ca34a200f 100644 --- a/projects/custom-matchers/CHANGELOG.md +++ b/projects/custom-matchers/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +**Note:** Version bump only for package @rarible/custom-matchers + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) **Note:** Version bump only for package @rarible/custom-matchers diff --git a/projects/custom-matchers/package.json b/projects/custom-matchers/package.json index 652949591..0efab3784 100644 --- a/projects/custom-matchers/package.json +++ b/projects/custom-matchers/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/custom-matchers", - "version": "0.8.5", + "version": "0.8.6", "description": "Custom matchers for different asset classes", "files": [ "contracts", @@ -22,8 +22,8 @@ "url": "https://github.com/rariblecom/protocol-contracts/issues" }, "dependencies": { - "@rarible/exchange-interfaces": "^0.8.5", - "@rarible/lazy-mint": "^0.8.5", + "@rarible/exchange-interfaces": "^0.8.6", + "@rarible/lazy-mint": "^0.8.6", "ethers": "5.7.2", "truffle-plugin-verify": "^0.6.5" }, diff --git a/projects/deploy-proxy/CHANGELOG.md b/projects/deploy-proxy/CHANGELOG.md index 3f8d78d55..fc485029b 100644 --- a/projects/deploy-proxy/CHANGELOG.md +++ b/projects/deploy-proxy/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +**Note:** Version bump only for package @rarible/deploy-proxy + ## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Bug Fixes diff --git a/projects/deploy-proxy/package.json b/projects/deploy-proxy/package.json index 60c5d7e04..4e60a395c 100644 --- a/projects/deploy-proxy/package.json +++ b/projects/deploy-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/deploy-proxy", - "version": "0.8.5", + "version": "0.8.6", "main": "truffle.js", "directories": { "test": "test" diff --git a/projects/deploy/CHANGELOG.md b/projects/deploy/CHANGELOG.md index 8a24588b9..4cd41ac90 100644 --- a/projects/deploy/CHANGELOG.md +++ b/projects/deploy/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +### Bug Fixes + +- build ([5a04947](https://github.com/rariblecom/protocol-contracts/commit/5a049478b8acde4a8681b09d2f9aa5c54bd9fa58)) + +### Features + +- add build deps ([822c123](https://github.com/rariblecom/protocol-contracts/commit/822c123199ac04598b6f8ab995ee8e8a66828015)) +- PT-4662 get rid of nothing to fill tests ([4059dcb](https://github.com/rariblecom/protocol-contracts/commit/4059dcb20c100e159643e40929392b05f90f7038)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rariblecom/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Bug Fixes diff --git a/projects/deploy/package.json b/projects/deploy/package.json index 592c6ae95..cc122fbac 100644 --- a/projects/deploy/package.json +++ b/projects/deploy/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/deploy", - "version": "0.8.5", + "version": "0.8.6", "description": "package with all migrations to deploy other packages", "access": "public", "private": false, @@ -20,12 +20,12 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/auction": "^0.8.5", - "@rarible/exchange-v2": "^0.8.5", - "@rarible/royalties-registry": "^0.8.5", - "@rarible/test": "^0.8.5", - "@rarible/tokens": "^0.8.5", - "@rarible/transfer-proxy": "^0.8.5", + "@rarible/auction": "^0.8.6", + "@rarible/exchange-v2": "^0.8.6", + "@rarible/royalties-registry": "^0.8.6", + "@rarible/test": "^0.8.6", + "@rarible/tokens": "^0.8.6", + "@rarible/transfer-proxy": "^0.8.6", "@typechain/truffle-v5": "^8.0.6", "ethers": "5.7.2" }, diff --git a/projects/exchange-v2/CHANGELOG.md b/projects/exchange-v2/CHANGELOG.md index d64844eaa..ccf46fdbb 100644 --- a/projects/exchange-v2/CHANGELOG.md +++ b/projects/exchange-v2/CHANGELOG.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +### Bug Fixes + +- support orders with zero price ([162238d](https://github.com/rarible/protocol-contracts/commit/162238de3f6df5cfb7760dfce6dd245b85360eb3)) + +### Features + +- add tests for nothing to feel, one order free the other isn't ([7b51920](https://github.com/rarible/protocol-contracts/commit/7b519201dcb9c5b3dc5e4a837698ceed3060cd5e)) +- PT-4662 get rid of nothing to fill tests ([4059dcb](https://github.com/rarible/protocol-contracts/commit/4059dcb20c100e159643e40929392b05f90f7038)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Bug Fixes diff --git a/projects/exchange-v2/package.json b/projects/exchange-v2/package.json index 8542c9cdf..b507808fa 100644 --- a/projects/exchange-v2/package.json +++ b/projects/exchange-v2/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/exchange-v2", - "version": "0.8.5", + "version": "0.8.6", "main": "truffle.js", "directories": { "test": "test" @@ -16,14 +16,14 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-interfaces": "^0.8.5", - "@rarible/lib-asset": "^0.8.5", - "@rarible/lib-part": "^0.8.5", - "@rarible/lib-signature": "^0.8.5", - "@rarible/meta-tx": "^0.8.5", - "@rarible/royalties": "^0.8.5", - "@rarible/royalties-upgradeable": "^0.8.5", - "@rarible/transfer-manager": "^0.8.5", + "@rarible/exchange-interfaces": "^0.8.6", + "@rarible/lib-asset": "^0.8.6", + "@rarible/lib-part": "^0.8.6", + "@rarible/lib-signature": "^0.8.6", + "@rarible/meta-tx": "^0.8.6", + "@rarible/royalties": "^0.8.6", + "@rarible/royalties-upgradeable": "^0.8.6", + "@rarible/transfer-manager": "^0.8.6", "eth-sig-util": "^3.0.1", "ethers": "5.7.2", "truffle-plugin-verify": "^0.6.5" diff --git a/projects/exchange-wrapper/CHANGELOG.md b/projects/exchange-wrapper/CHANGELOG.md index 042b492b0..fe4e7ff36 100644 --- a/projects/exchange-wrapper/CHANGELOG.md +++ b/projects/exchange-wrapper/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +### Features + +- add build deps ([822c123](https://github.com/rarible/protocol-contracts/commit/822c123199ac04598b6f8ab995ee8e8a66828015)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Bug Fixes diff --git a/projects/exchange-wrapper/package.json b/projects/exchange-wrapper/package.json index f2edc9f18..9f69f6fab 100644 --- a/projects/exchange-wrapper/package.json +++ b/projects/exchange-wrapper/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/exchange-wrapper", - "version": "0.8.5", + "version": "0.8.6", "main": "truffle.js", "directories": { "test": "test" @@ -17,11 +17,11 @@ "dependencies": { "@openzeppelin/contracts": "3.4.0", "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-v2": "^0.8.5", - "@rarible/lib-bp": "^0.8.5", - "@rarible/lib-part": "^0.8.5", - "@rarible/royalties-registry": "^0.8.5", - "@rarible/transfer-manager": "^0.8.5", + "@rarible/exchange-v2": "^0.8.6", + "@rarible/lib-bp": "^0.8.6", + "@rarible/lib-part": "^0.8.6", + "@rarible/royalties-registry": "^0.8.6", + "@rarible/transfer-manager": "^0.8.6", "eth-sig-util": "^3.0.1", "truffle-plugin-verify": "^0.6.5" }, diff --git a/projects/gas-usage-tests/CHANGELOG.md b/projects/gas-usage-tests/CHANGELOG.md index 103d2bf91..d390dfa2a 100644 --- a/projects/gas-usage-tests/CHANGELOG.md +++ b/projects/gas-usage-tests/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +### Features + +- add build deps ([822c123](https://github.com/rarible/protocol-contracts/commit/822c123199ac04598b6f8ab995ee8e8a66828015)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Features diff --git a/projects/gas-usage-tests/package.json b/projects/gas-usage-tests/package.json index cd1829294..3758da257 100644 --- a/projects/gas-usage-tests/package.json +++ b/projects/gas-usage-tests/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/gas-usage-tests", - "version": "0.8.5", + "version": "0.8.6", "main": "truffle.js", "directories": { "test": "test" @@ -11,10 +11,10 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-v2": "^0.8.5", - "@rarible/royalties-registry": "^0.8.5", - "@rarible/tokens": "^0.8.5", - "@rarible/transfer-proxy": "^0.8.5", + "@rarible/exchange-v2": "^0.8.6", + "@rarible/royalties-registry": "^0.8.6", + "@rarible/tokens": "^0.8.6", + "@rarible/transfer-proxy": "^0.8.6", "ethers": "5.7.2", "truffle-plugin-verify": "^0.6.5" }, diff --git a/projects/hardhat-deploy/CHANGELOG.md b/projects/hardhat-deploy/CHANGELOG.md index c82474b69..0d8605072 100644 --- a/projects/hardhat-deploy/CHANGELOG.md +++ b/projects/hardhat-deploy/CHANGELOG.md @@ -3,6 +3,38 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +### Bug Fixes + +- support orders with zero price ([162238d](https://github.com/rariblecom/protocol-contracts/commit/162238de3f6df5cfb7760dfce6dd245b85360eb3)) + +### Features + +- add celo alfajores ([#271](https://github.com/rariblecom/protocol-contracts/issues/271)) ([10a795e](https://github.com/rariblecom/protocol-contracts/commit/10a795e80039677193d5eeccfa14f64e0bcf0448)) +- add configs for palm, match ([cfeee8e](https://github.com/rariblecom/protocol-contracts/commit/cfeee8e12fdd06664fcb021a5f3efa44708c6f92)) +- add migration for SetProtocolFeeAction ([f9c4aca](https://github.com/rariblecom/protocol-contracts/commit/f9c4aca5bd01cff077f8a15a4467fa0e3c88ca05)) +- add oasis testnet, xai testnet. PT-4570 deploy contracts to oasis testnet ([ed0e2ce](https://github.com/rariblecom/protocol-contracts/commit/ed0e2ced1269ce67e29c4795e08193324628aca4)) +- add tests for nothing to feel, one order free the other isn't ([7b51920](https://github.com/rariblecom/protocol-contracts/commit/7b519201dcb9c5b3dc5e4a837698ceed3060cd5e)) +- deploy contracts on palm_testnet ([18fccde](https://github.com/rariblecom/protocol-contracts/commit/18fccded3260b1aebc568ebe4f8b9b9883fd47da)) +- fix getNetworkApiUrl() and getNetworkExplorerUrl() ([50f884b](https://github.com/rariblecom/protocol-contracts/commit/50f884b1d2e25f69d3d4c4dfa96a343e14ade288)) +- PT-4321 deploy contracts on oasys testnet, prepare config for oasys mainnet ([dfd934b](https://github.com/rariblecom/protocol-contracts/commit/dfd934bfb2c28915fd491c04dc5d10a36418310f)) +- PT-4543 deploy contracts on fief_playground_testnet ([f71e0dd](https://github.com/rariblecom/protocol-contracts/commit/f71e0dd84abc948290ca9c5dfac12580917b4f10)) +- PT-4639 fix network config for frame ([514629b](https://github.com/rariblecom/protocol-contracts/commit/514629bd6e6604092cc11077cff02ca885a5142d)) +- PT-4662 get rid of nothing to fill tests ([4059dcb](https://github.com/rariblecom/protocol-contracts/commit/4059dcb20c100e159643e40929392b05f90f7038)) +- PT-4671 deploy contracts on mantle sepolia ([d5033ef](https://github.com/rariblecom/protocol-contracts/commit/d5033efaf19222c60f900914300ee93be1069d45)) +- PT-4705 deploy contract on kroma_sepolia ([36ac439](https://github.com/rariblecom/protocol-contracts/commit/36ac439fef8f85b6e230b481c080bfff7ff5065b)) +- PT-4749 upgrade exchangeV2 with upgradeExecutor ([7e18442](https://github.com/rariblecom/protocol-contracts/commit/7e18442b90bae4ee8a18c797b9126dad2650f896)) +- PT-4844 deploy contract on match_testnet ([73aef7a](https://github.com/rariblecom/protocol-contracts/commit/73aef7a61c47804f8348b12c8f553c7b39a254b8)) +- PT-4914 deploy contract on zkLink testnet, prepare config for mainnet ([8796c0a](https://github.com/rariblecom/protocol-contracts/commit/8796c0a9ac266fdd97ff4bf0a752fbf4b607dd28)) +- PT-4962 deploy contracts on 5ire_testnet ([c752e6d](https://github.com/rariblecom/protocol-contracts/commit/c752e6d7b8a268006a84c1307e0ed70c88a6da3b)) +- PT-5051 deploy contracts on oasys_testnet_saakuru ([b558424](https://github.com/rariblecom/protocol-contracts/commit/b558424aea3de4125336e4c393cc7f76515555b9)) +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rariblecom/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) +- PT-5076 deploy contracts to astar_zkyoto_testnet ([de82643](https://github.com/rariblecom/protocol-contracts/commit/de826431eb30ea6e11d3a74e5c5b0f3a4aa43aa9)) +- PT-5095 deploy contracts on polygon_amoy_testnet ([e89dfd7](https://github.com/rariblecom/protocol-contracts/commit/e89dfd7386d45e0eb31c28024354dc9f66c6008d)) +- tidy up network configs, support frame ([82a88fc](https://github.com/rariblecom/protocol-contracts/commit/82a88fcd81af7638c1234aafd233742d66ecbea1)) +- update wrapper on arbitrum testnet, base testnet, polygon testnet ([572add8](https://github.com/rariblecom/protocol-contracts/commit/572add81b96f0ea00224f1934411b824031d0b87)) + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Bug Fixes diff --git a/projects/hardhat-deploy/package.json b/projects/hardhat-deploy/package.json index 95931ba58..094aa9d06 100644 --- a/projects/hardhat-deploy/package.json +++ b/projects/hardhat-deploy/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/hardhat-deploy", - "version": "0.8.5", + "version": "0.8.6", "directories": { "test": "test" }, @@ -25,10 +25,10 @@ "@matterlabs/hardhat-zksync-verify": "0.2.1", "@openzeppelin/hardhat-upgrades": "^1.22.1", "@openzeppelin/upgrades-core": "~1.31.1", - "@rarible/auction": "^0.8.5", - "@rarible/royalties-registry": "^0.8.5", - "@rarible/transfer-manager": "^0.8.5", - "@rarible/upgrade-executor": "^0.8.5", + "@rarible/auction": "^0.8.6", + "@rarible/royalties-registry": "^0.8.6", + "@rarible/transfer-manager": "^0.8.6", + "@rarible/upgrade-executor": "^0.8.6", "zksync-ethers": "^5.0.0" }, "devDependencies": { diff --git a/projects/interfaces/CHANGELOG.md b/projects/interfaces/CHANGELOG.md index b67e68b97..9a3c873ff 100644 --- a/projects/interfaces/CHANGELOG.md +++ b/projects/interfaces/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +**Note:** Version bump only for package @rarible/exchange-interfaces + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) **Note:** Version bump only for package @rarible/exchange-interfaces diff --git a/projects/interfaces/package.json b/projects/interfaces/package.json index dd2bac92e..1e5adefd1 100644 --- a/projects/interfaces/package.json +++ b/projects/interfaces/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/exchange-interfaces", - "version": "0.8.5", + "version": "0.8.6", "description": "Solidity interfaces used by ExchangeV2 on Rarible", "files": [ "contracts", @@ -24,8 +24,8 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/lib-asset": "^0.8.5", - "@rarible/lib-part": "^0.8.5", + "@rarible/lib-asset": "^0.8.6", + "@rarible/lib-part": "^0.8.6", "truffle-plugin-verify": "^0.6.5" }, "publishConfig": { diff --git a/projects/lazy-mint/CHANGELOG.md b/projects/lazy-mint/CHANGELOG.md index 02728d68e..a52b8346b 100644 --- a/projects/lazy-mint/CHANGELOG.md +++ b/projects/lazy-mint/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +**Note:** Version bump only for package @rarible/lazy-mint + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) **Note:** Version bump only for package @rarible/lazy-mint diff --git a/projects/lazy-mint/package.json b/projects/lazy-mint/package.json index 49dd0d85c..88cf4a289 100644 --- a/projects/lazy-mint/package.json +++ b/projects/lazy-mint/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/lazy-mint", - "version": "0.8.5", + "version": "0.8.6", "description": "Interfaces for ERC-721/1155 contracts with mintAndTransfer function", "files": [ "contracts", @@ -25,7 +25,7 @@ "homepage": "https://github.com/rariblecom/protocol-contracts/mint-and-transfer#readme", "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/lib-part": "^0.8.5", + "@rarible/lib-part": "^0.8.6", "truffle-plugin-verify": "^0.6.5" }, "devDependencies": { diff --git a/projects/lib-asset/CHANGELOG.md b/projects/lib-asset/CHANGELOG.md index 2b3544adc..b014de0cc 100644 --- a/projects/lib-asset/CHANGELOG.md +++ b/projects/lib-asset/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +**Note:** Version bump only for package @rarible/lib-asset + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) **Note:** Version bump only for package @rarible/lib-asset diff --git a/projects/lib-asset/package.json b/projects/lib-asset/package.json index 7d8f05eec..cdfee6147 100644 --- a/projects/lib-asset/package.json +++ b/projects/lib-asset/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/lib-asset", - "version": "0.8.5", + "version": "0.8.6", "description": "Solidity asset library used by ExchangeV2 on Rarible", "files": [ "contracts", diff --git a/projects/lib-bp/CHANGELOG.md b/projects/lib-bp/CHANGELOG.md index 18a087142..1cb7ad397 100644 --- a/projects/lib-bp/CHANGELOG.md +++ b/projects/lib-bp/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +**Note:** Version bump only for package @rarible/lib-bp + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) **Note:** Version bump only for package @rarible/lib-bp diff --git a/projects/lib-bp/package.json b/projects/lib-bp/package.json index 8980716c6..5ac477222 100644 --- a/projects/lib-bp/package.json +++ b/projects/lib-bp/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/lib-bp", - "version": "0.8.5", + "version": "0.8.6", "description": "Solidity bp library", "files": [ "contracts", diff --git a/projects/lib-part/CHANGELOG.md b/projects/lib-part/CHANGELOG.md index 190a41460..6b9aeed52 100644 --- a/projects/lib-part/CHANGELOG.md +++ b/projects/lib-part/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +**Note:** Version bump only for package @rarible/lib-part + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) **Note:** Version bump only for package @rarible/lib-part diff --git a/projects/lib-part/package.json b/projects/lib-part/package.json index 13cb6ee00..7b0e637e2 100644 --- a/projects/lib-part/package.json +++ b/projects/lib-part/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/lib-part", - "version": "0.8.5", + "version": "0.8.6", "description": "Solidity part library", "files": [ "contracts", diff --git a/projects/lib-signature/CHANGELOG.md b/projects/lib-signature/CHANGELOG.md index b56084968..44d7fc93d 100644 --- a/projects/lib-signature/CHANGELOG.md +++ b/projects/lib-signature/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +**Note:** Version bump only for package @rarible/lib-signature + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) **Note:** Version bump only for package @rarible/lib-signature diff --git a/projects/lib-signature/package.json b/projects/lib-signature/package.json index e20eb6d9f..57864d8d5 100644 --- a/projects/lib-signature/package.json +++ b/projects/lib-signature/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/lib-signature", - "version": "0.8.5", + "version": "0.8.6", "description": "Solidity signature library", "files": [ "contracts", diff --git a/projects/meta-tx/CHANGELOG.md b/projects/meta-tx/CHANGELOG.md index 9fdfa135e..71275e22d 100644 --- a/projects/meta-tx/CHANGELOG.md +++ b/projects/meta-tx/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +### Features + +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rariblecom/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Features diff --git a/projects/meta-tx/package.json b/projects/meta-tx/package.json index 641803754..1b7ff4066 100644 --- a/projects/meta-tx/package.json +++ b/projects/meta-tx/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/meta-tx", - "version": "0.8.5", + "version": "0.8.6", "description": "Provides `gasless` execution methods", "files": [ "contracts", diff --git a/projects/role-operator/CHANGELOG.md b/projects/role-operator/CHANGELOG.md index da3566666..19dcc29ea 100644 --- a/projects/role-operator/CHANGELOG.md +++ b/projects/role-operator/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +**Note:** Version bump only for package @rarible/role-operator + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Features diff --git a/projects/role-operator/package.json b/projects/role-operator/package.json index e8f927f52..8ca29e1b8 100644 --- a/projects/role-operator/package.json +++ b/projects/role-operator/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/role-operator", - "version": "0.8.5", + "version": "0.8.6", "description": "Solidity operator role functionality", "files": [ "contracts", diff --git a/projects/royalties-registry/CHANGELOG.md b/projects/royalties-registry/CHANGELOG.md index e044caa1e..fb8bb5d28 100644 --- a/projects/royalties-registry/CHANGELOG.md +++ b/projects/royalties-registry/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +### Features + +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Features diff --git a/projects/royalties-registry/package.json b/projects/royalties-registry/package.json index fafa7f955..33264b1ff 100644 --- a/projects/royalties-registry/package.json +++ b/projects/royalties-registry/package.json @@ -9,7 +9,7 @@ "readme.md", "dist" ], - "version": "0.8.5", + "version": "0.8.6", "scripts": { "test": "truffle test", "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck" @@ -17,11 +17,11 @@ "dependencies": { "@openzeppelin/contracts": "3.4.0", "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-interfaces": "^0.8.5", - "@rarible/exchange-v2": "^0.8.5", - "@rarible/lib-bp": "^0.8.5", - "@rarible/royalties": "^0.8.5", - "@rarible/royalties-upgradeable": "^0.8.5", + "@rarible/exchange-interfaces": "^0.8.6", + "@rarible/exchange-v2": "^0.8.6", + "@rarible/lib-bp": "^0.8.6", + "@rarible/royalties": "^0.8.6", + "@rarible/royalties-upgradeable": "^0.8.6", "truffle-plugin-verify": "^0.6.5" }, "devDependencies": { diff --git a/projects/royalties-upgradeable/CHANGELOG.md b/projects/royalties-upgradeable/CHANGELOG.md index d097a8dfd..9f1a85231 100644 --- a/projects/royalties-upgradeable/CHANGELOG.md +++ b/projects/royalties-upgradeable/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +**Note:** Version bump only for package @rarible/royalties-upgradeable + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) **Note:** Version bump only for package @rarible/royalties-upgradeable diff --git a/projects/royalties-upgradeable/package.json b/projects/royalties-upgradeable/package.json index 662e7a325..0119827ce 100644 --- a/projects/royalties-upgradeable/package.json +++ b/projects/royalties-upgradeable/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/royalties-upgradeable", - "version": "0.8.5", + "version": "0.8.6", "description": "Solidity upgradeable abstract contracts for Rarible royalties", "files": [ "contracts", @@ -25,7 +25,7 @@ "homepage": "https://github.com/rariblecom/protocol-contracts/royalties-upgradeable#readme", "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/royalties": "^0.8.5", + "@rarible/royalties": "^0.8.6", "truffle-plugin-verify": "^0.6.5" }, "publishConfig": { diff --git a/projects/royalties/CHANGELOG.md b/projects/royalties/CHANGELOG.md index 25bdfd383..8ae0b89a7 100644 --- a/projects/royalties/CHANGELOG.md +++ b/projects/royalties/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +**Note:** Version bump only for package @rarible/royalties + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) **Note:** Version bump only for package @rarible/royalties diff --git a/projects/royalties/package.json b/projects/royalties/package.json index 6f105ffdc..ec01dfb12 100644 --- a/projects/royalties/package.json +++ b/projects/royalties/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/royalties", - "version": "0.8.5", + "version": "0.8.6", "description": "Solidity interfaces to support royalties on Rarible", "files": [ "contracts", @@ -24,7 +24,7 @@ }, "homepage": "https://github.com/rariblecom/protocol-contracts/royalties#readme", "dependencies": { - "@rarible/lib-part": "^0.8.5", + "@rarible/lib-part": "^0.8.6", "truffle-plugin-verify": "^0.6.5" }, "scripts": { diff --git a/projects/tokens-test/CHANGELOG.md b/projects/tokens-test/CHANGELOG.md index a973244fe..087cfc360 100644 --- a/projects/tokens-test/CHANGELOG.md +++ b/projects/tokens-test/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +**Note:** Version bump only for package @rarible/test + ## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) **Note:** Version bump only for package @rarible/test diff --git a/projects/tokens-test/package.json b/projects/tokens-test/package.json index ee57142f7..ab1534463 100644 --- a/projects/tokens-test/package.json +++ b/projects/tokens-test/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/test", - "version": "0.8.5", + "version": "0.8.6", "private": true, "main": "truffle.js", "directories": { diff --git a/projects/tokens/CHANGELOG.md b/projects/tokens/CHANGELOG.md index f1ea4de78..917c37519 100644 --- a/projects/tokens/CHANGELOG.md +++ b/projects/tokens/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +### Features + +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Features diff --git a/projects/tokens/package.json b/projects/tokens/package.json index 3d9d60382..a5e936902 100644 --- a/projects/tokens/package.json +++ b/projects/tokens/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/tokens", - "version": "0.8.5", + "version": "0.8.6", "main": "truffle.js", "directories": { "test": "test" @@ -30,12 +30,12 @@ "@openzeppelin/contracts-upgradeable": "3.4.0", "@openzeppelin/hardhat-upgrades": "^1.22.1", "@openzeppelin/upgrades-core": "~1.31.1", - "@rarible/lazy-mint": "^0.8.5", - "@rarible/lib-asset": "^0.8.5", - "@rarible/lib-signature": "^0.8.5", - "@rarible/meta-tx": "^0.8.5", - "@rarible/royalties": "^0.8.5", - "@rarible/royalties-upgradeable": "^0.8.5", + "@rarible/lazy-mint": "^0.8.6", + "@rarible/lib-asset": "^0.8.6", + "@rarible/lib-signature": "^0.8.6", + "@rarible/meta-tx": "^0.8.6", + "@rarible/royalties": "^0.8.6", + "@rarible/royalties-upgradeable": "^0.8.6", "eth-sig-util": "^3.0.1", "truffle-plugin-verify": "^0.6.5", "zksync-ethers": "^5.0.0" diff --git a/projects/transfer-manager/CHANGELOG.md b/projects/transfer-manager/CHANGELOG.md index 0f3afbae6..f0bc1513e 100644 --- a/projects/transfer-manager/CHANGELOG.md +++ b/projects/transfer-manager/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +### Features + +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Features diff --git a/projects/transfer-manager/package.json b/projects/transfer-manager/package.json index bdef4d3c5..24fedee74 100644 --- a/projects/transfer-manager/package.json +++ b/projects/transfer-manager/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/transfer-manager", - "version": "0.8.5", + "version": "0.8.6", "main": "truffle.js", "access": "public", "private": false, @@ -18,13 +18,13 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-interfaces": "^0.8.5", - "@rarible/lazy-mint": "^0.8.5", - "@rarible/lib-asset": "^0.8.5", - "@rarible/lib-bp": "^0.8.5", - "@rarible/lib-part": "^0.8.5", - "@rarible/royalties": "^0.8.5", - "@rarible/royalties-upgradeable": "^0.8.5", + "@rarible/exchange-interfaces": "^0.8.6", + "@rarible/lazy-mint": "^0.8.6", + "@rarible/lib-asset": "^0.8.6", + "@rarible/lib-bp": "^0.8.6", + "@rarible/lib-part": "^0.8.6", + "@rarible/royalties": "^0.8.6", + "@rarible/royalties-upgradeable": "^0.8.6", "eth-sig-util": "^3.0.1", "ethers": "5.7.2", "truffle-plugin-verify": "^0.6.5" diff --git a/projects/transfer-proxy/CHANGELOG.md b/projects/transfer-proxy/CHANGELOG.md index a3ea65229..d39c7890e 100644 --- a/projects/transfer-proxy/CHANGELOG.md +++ b/projects/transfer-proxy/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +### Features + +- PT-5072 add seaport 1.6 to exchange wrapper, deploy wrapper to sepolia ([c6f10f1](https://github.com/rarible/protocol-contracts/commit/c6f10f151740dd76da0e997b8bf499f03cba00a9)) + ## [0.8.5](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Features diff --git a/projects/transfer-proxy/package.json b/projects/transfer-proxy/package.json index e0d4c1d69..4c6a8d229 100644 --- a/projects/transfer-proxy/package.json +++ b/projects/transfer-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/transfer-proxy", - "version": "0.8.5", + "version": "0.8.6", "main": "truffle.js", "directories": { "test": "test" @@ -16,12 +16,12 @@ }, "dependencies": { "@openzeppelin/contracts-upgradeable": "3.4.0", - "@rarible/exchange-interfaces": "^0.8.5", - "@rarible/lazy-mint": "^0.8.5", - "@rarible/lib-asset": "^0.8.5", - "@rarible/role-operator": "^0.8.5", - "@rarible/royalties": "^0.8.5", - "@rarible/royalties-upgradeable": "^0.8.5", + "@rarible/exchange-interfaces": "^0.8.6", + "@rarible/lazy-mint": "^0.8.6", + "@rarible/lib-asset": "^0.8.6", + "@rarible/role-operator": "^0.8.6", + "@rarible/royalties": "^0.8.6", + "@rarible/royalties-upgradeable": "^0.8.6", "ethers": "5.7.2", "truffle-plugin-verify": "^0.6.5" }, diff --git a/projects/upgrade-executor/CHANGELOG.md b/projects/upgrade-executor/CHANGELOG.md index 52f6c7ed6..bc976d16a 100644 --- a/projects/upgrade-executor/CHANGELOG.md +++ b/projects/upgrade-executor/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.6](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) + +### Features + +- tidy up network configs, support frame ([82a88fc](https://github.com/rariblecom/protocol-contracts/commit/82a88fcd81af7638c1234aafd233742d66ecbea1)) + ## [0.8.5](https://github.com/rariblecom/protocol-contracts/compare/v0.8.1...v0.8.5) (2024-04-27) ### Features diff --git a/projects/upgrade-executor/package.json b/projects/upgrade-executor/package.json index 5b7a26f6d..b60536369 100644 --- a/projects/upgrade-executor/package.json +++ b/projects/upgrade-executor/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/upgrade-executor", - "version": "0.8.5", + "version": "0.8.6", "directories": { "test": "test" }, From 5dd89db7b71e0e965dc7944d54878d119160e2cb Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Sat, 27 Apr 2024 22:07:54 +0100 Subject: [PATCH 06/25] fix: build --- projects/deploy-proxy/hardhat.config.ts | 5 ----- projects/deploy-proxy/tsconfig.json | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 projects/deploy-proxy/tsconfig.json diff --git a/projects/deploy-proxy/hardhat.config.ts b/projects/deploy-proxy/hardhat.config.ts index 862c03524..d251fb11a 100644 --- a/projects/deploy-proxy/hardhat.config.ts +++ b/projects/deploy-proxy/hardhat.config.ts @@ -220,11 +220,6 @@ const config: HardhatUserConfig = { astar: createNetwork("astar"), oasys_testnet: createNetwork("oasys_testnet"), oasys: createNetwork("oasys"), - zkLink: { - zksync: true, - ethNetwork: "mainnet", - ...createNetwork("zkLink"), - }, astar_zkyoto_testnet: createNetwork("astar_zkyoto_testnet"), oasys_testnet_saakuru: createNetwork("oasys_testnet_saakuru"), saakuru: createNetwork("saakuru"), diff --git a/projects/deploy-proxy/tsconfig.json b/projects/deploy-proxy/tsconfig.json new file mode 100644 index 000000000..259140690 --- /dev/null +++ b/projects/deploy-proxy/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "strict": true, + "esModuleInterop": true, + "moduleResolution": "node", + "forceConsistentCasingInFileNames": true, + "outDir": "dist" + }, + "include": [ + "hardhat.config.ts", + "./deploy", + "./test", + "./typechain-types/**/*", + "test/ownership/owner.test.ts" ] +} \ No newline at end of file From df2b5842cb4378f2948e1333a74ce839f3fe119a Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Sat, 27 Apr 2024 22:10:09 +0100 Subject: [PATCH 07/25] chore(release): bump versions after release --- CHANGELOG.md | 6 ++++++ lerna.json | 2 +- projects/deploy-proxy/CHANGELOG.md | 6 ++++++ projects/deploy-proxy/package.json | 2 +- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d45de246d..565b11977 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.7](https://github.com/rarible/protocol-contracts/compare/v0.8.6...v0.8.7) (2024-04-27) + +### Bug Fixes + +- build ([5dd89db](https://github.com/rarible/protocol-contracts/commit/5dd89db7b71e0e965dc7944d54878d119160e2cb)) + ## [0.8.6](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) ### Bug Fixes diff --git a/lerna.json b/lerna.json index 04eacf8ca..c71d4629b 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "$schema": "node_modules/lerna/schemas/lerna-schema.json", "packages": ["projects/**"], "npmClient": "yarn", - "version": "0.8.6", + "version": "0.8.7", "command": { "version": { "allowBranch": ["master", "develop", "feature/*"] diff --git a/projects/deploy-proxy/CHANGELOG.md b/projects/deploy-proxy/CHANGELOG.md index fc485029b..61e8bc452 100644 --- a/projects/deploy-proxy/CHANGELOG.md +++ b/projects/deploy-proxy/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +## [0.8.7](https://github.com/rarible/protocol-contracts/compare/v0.8.6...v0.8.7) (2024-04-27) + +### Bug Fixes + +- build ([5dd89db](https://github.com/rarible/protocol-contracts/commit/5dd89db7b71e0e965dc7944d54878d119160e2cb)) + ## [0.8.6](https://github.com/rarible/protocol-contracts/compare/v0.8.1...v0.8.6) (2024-04-27) **Note:** Version bump only for package @rarible/deploy-proxy diff --git a/projects/deploy-proxy/package.json b/projects/deploy-proxy/package.json index 4e60a395c..cd1c45441 100644 --- a/projects/deploy-proxy/package.json +++ b/projects/deploy-proxy/package.json @@ -1,6 +1,6 @@ { "name": "@rarible/deploy-proxy", - "version": "0.8.6", + "version": "0.8.7", "main": "truffle.js", "directories": { "test": "test" From 014b6a3ea4331c7334a0b5299614eb56fc5d58f3 Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Fri, 3 May 2024 13:47:38 +0100 Subject: [PATCH 08/25] feat: refactoring (#283) --- configs/hardhat.config.ts | 302 ---------- .../deployments/polygon_mainnet/.chainId | 1 + .../ImmutableCreate2Factory.json | 131 +++++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../deploy-proxy/deployments/xai/.chainId | 1 + .../xai/ImmutableCreate2Factory.json | 115 ++++ .../47c9583a7ef7353685a643d84df47830.json | 29 + .../deployments/xai_sepolia_testnet/.chainId | 1 + .../ImmutableCreate2Factory.json | 115 ++++ .../47c9583a7ef7353685a643d84df47830.json | 29 + projects/deploy-proxy/hardhat.config.ts | 484 +--------------- projects/deploy-proxy/package.json | 3 +- projects/deploy-utils/README.md | 11 + projects/deploy-utils/package.json | 32 ++ projects/deploy-utils/src/utils.ts | 252 +++++++++ projects/deploy-utils/tsconfig.json | 13 + .../deploy/000_deploy_DefaultProxyAdmin.ts | 27 + projects/hardhat-deploy/hardhat.config.ts | 534 +----------------- projects/hardhat-deploy/package.json | 3 +- projects/tokens/hardhat.config.ts | 230 +------- projects/tokens/package.json | 3 +- 21 files changed, 822 insertions(+), 1523 deletions(-) delete mode 100644 configs/hardhat.config.ts create mode 100644 projects/deploy-proxy/deployments/polygon_mainnet/.chainId create mode 100644 projects/deploy-proxy/deployments/polygon_mainnet/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/polygon_mainnet/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/xai/.chainId create mode 100644 projects/deploy-proxy/deployments/xai/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/xai/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/xai_sepolia_testnet/.chainId create mode 100644 projects/deploy-proxy/deployments/xai_sepolia_testnet/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/xai_sepolia_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-utils/README.md create mode 100644 projects/deploy-utils/package.json create mode 100644 projects/deploy-utils/src/utils.ts create mode 100644 projects/deploy-utils/tsconfig.json create mode 100644 projects/hardhat-deploy/deploy/000_deploy_DefaultProxyAdmin.ts diff --git a/configs/hardhat.config.ts b/configs/hardhat.config.ts deleted file mode 100644 index 062206b95..000000000 --- a/configs/hardhat.config.ts +++ /dev/null @@ -1,302 +0,0 @@ -import '@matterlabs/hardhat-zksync-deploy'; -import '@matterlabs/hardhat-zksync-solc'; -import { HardhatUserConfig } from "hardhat/config"; -import "@nomicfoundation/hardhat-toolbox"; -import "hardhat-deploy"; -import "@openzeppelin/hardhat-upgrades"; -import "@nomiclabs/hardhat-truffle5"; - -import type { - HttpNetworkUserConfig, -} from "hardhat/types"; -import * as dotenv from "dotenv"; -import * as os from "os"; -import * as path from "path"; -import fs from "fs"; -import "./tasks"; - -dotenv.config(); - -function getConfigPath() { - const configPath = process.env["NETWORK_CONFIG_PATH"]; - if (configPath) { - return configPath; - } else { - return path.join(os.homedir(), ".ethereum"); - } -} - -function getNetworkApiKey(name: string): string { - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - if (!!json.verify) { - return json.verify.apiKey; - } - else { - return "xyz" - } - } else { - // File doesn't exist in path - return "xyz"; - } -} - -function getNetworkApiUrl(name: string): string { - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - return json.verify.apiUrl; - } else { - // File doesn't exist in path - return ""; - } -} - -function getNetworkExplorerUrl(name: string): string { - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - return json.verify.explorerUrl; - } else { - // File doesn't exist in path - return ""; - } -} - -function createNetwork(name: string): HttpNetworkUserConfig { - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - if (json.verify && json.verify.apiUrl && json.verify.apiUrl.endsWith("/api")) { - json.verify.apiUrl = json.verify.apiUrl.slice(0, -4); - } - return { - from: json.address, - gasPrice: "auto", - chainId: parseInt(json.network_id), - url: json.url, - accounts: [json.key], - gas: "auto", - saveDeployments: true, - verify: json.verify - ? { - etherscan: { - apiKey: "4BX5JGM9IBFRHSDBMRCS4R66TX123T9E22", - apiUrl: json.verify.apiUrl, - }, - } - : null, - zksync: json.zksync === true, - } as HttpNetworkUserConfig; - } else { - // File doesn't exist in path - return { - from: "0x0000000000000000000000000000000000000000", - gas: 0, - chainId: 0, - url: "", - accounts: [], - gasPrice: 0, - }; - } -} - -const config: HardhatUserConfig = { - solidity: { - compilers: [ - { - version: "0.7.6", - settings: { - optimizer: { - enabled: true, - runs: 200, - }, - }, - }, - { - version: "0.4.18", - settings: { - optimizer: { - enabled: true, - runs: 200, - }, - evmVersion: "byzantium", - }, - }, - ], - overrides: { - "src/WETH9.sol": { - version: "0.4.18", - settings: { - optimizer: { - enabled: true, - runs: 200, - }, - evmVersion: "byzantium", - }, - }, - }, - settings: { - metadata: { - // Not including the metadata hash - // https://github.com/paulrberg/hardhat-template/issues/31 - bytecodeHash: "none", - }, - // Disable the optimizer when debugging - // https://hardhat.org/hardhat-network/#solidity-optimizer-support - optimizer: { - enabled: true, - runs: 200, - }, - }, - }, - namedAccounts: { - deployer: 0, - }, - paths: { - sources: "src", - }, - networks: { - hardhat: {}, - mainnet: { - url: 'http://127.0.0.1:1248', - chainId: 1, - timeout: 60000, - }, - polygon_mumbai: createNetwork("polygon_mumbai"), - polygon_mainnet: createNetwork("polygon_mainnet"), - polygon_dev: createNetwork("polygon_dev"), - dev: createNetwork("dev"), - goerli: createNetwork("goerli"), - sepolia: createNetwork("sepolia"), - staging: createNetwork("staging"), - polygon_staging: createNetwork("polygon_staging"), - optimism_mainnet: createNetwork("optimism_mainnet"), - optimism_goerli: createNetwork("optimism_goerli"), - mantle_testnet: createNetwork("mantle_testnet"), - mantle_mainnet: createNetwork("mantle_mainnet"), - arbitrum_goerli: createNetwork("arbitrum_goerli"), - arbitrum_sepolia: createNetwork("arbitrum_sepolia"), - arbitrum_mainnet: createNetwork("arbitrum_mainnet"), - zkatana_testnet: createNetwork("zkatana_testnet"), - zkatana_mainnet: createNetwork("zkatana_mainnet"), - chiliz_testnet: createNetwork("chiliz_testnet"), - chiliz_mainnet: createNetwork("chiliz_mainnet"), - zksync_testnet: createNetwork("zksync_testnet"), - lightlink: { - url: 'http://127.0.0.1:1248', - chainId: 1890, - timeout: 60000, - }, - lightlink_pegasus: createNetwork("lightlink_pegasus"), - zksync: { - url: 'http://127.0.0.1:1248', - chainId: 324, - timeout: 60000, - ethNetwork: "mainnet", // The Ethereum Web3 RPC URL, or the identifier of the network (e.g. `mainnet` or `sepolia`) - zksync: true - }, - rari_testnet: createNetwork("rari_testnet"), - rari: { - url: 'http://127.0.0.1:1248', - chainId: 1380012617, - timeout: 60000, - }, - base_sepolia: createNetwork("base_sepolia"), - base: { - url: 'http://127.0.0.1:1248', - chainId: 8453, - timeout: 60000, - }, - zksync_sepolia: createNetwork("zksync_sepolia") - }, - etherscan: { - apiKey: { - mainnet: getNetworkApiKey('mainnet'), - polygon: getNetworkApiKey('polygon_mainnet'), - mumbai: getNetworkApiKey('polygon_mumbai'), - goerli: getNetworkApiKey("goerli"), - sepolia: getNetworkApiKey("sepolia"), - mantle_mainnet: getNetworkApiKey("mantle_mainnet"), - mantle_testnet: getNetworkApiKey("mantle_testnet"), - arbitrum_sepolia: getNetworkApiKey("arbitrum_sepolia"), - arbitrum_mainnet: getNetworkApiKey("arbitrum_mainnet"), - zksync_testnet: getNetworkApiKey("zksync_testnet"), - rari_testnet: getNetworkApiKey("rari_testnet") - }, - customChains: [ - { - network: "base_sepolia", - chainId: createNetwork("base_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("base_sepolia"), - browserURL: getNetworkExplorerUrl("base_sepolia"), - }, - }, - { - network: "rari_testnet", - chainId: createNetwork("rari_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("rari_testnet"), - browserURL: getNetworkExplorerUrl("rari_testnet"), - }, - }, - { - network: "mantle_mainnet", - chainId: createNetwork("mantle_mainnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("mantle_mainnet"), - browserURL: getNetworkExplorerUrl("mantle_mainnet"), - }, - }, - { - network: "mantle_testnet", - chainId: createNetwork("mantle_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("mantle_testnet"), - browserURL: getNetworkExplorerUrl("mantle_testnet"), - }, - }, - { - network: "arbitrum_sepolia", - chainId: createNetwork("arbitrum_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("arbitrum_sepolia"), - browserURL: getNetworkExplorerUrl("arbitrum_sepolia"), - }, - }, - { - network: "arbitrum_mainnet", - chainId: createNetwork("arbitrum_mainnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("arbitrum_mainnet"), - browserURL: getNetworkExplorerUrl("arbitrum_mainnet"), - }, - }, - { - network: "zksync_testnet", - chainId: createNetwork("zksync_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("zksync_testnet"), - browserURL: getNetworkExplorerUrl("zksync_testnet"), - }, - }, - ], - }, - zksolc: { - compilerSource: 'binary', - settings: { - isSystem: false, // optional. Enables Yul instructions available only for zkSync system contracts and libraries - forceEvmla: false, // optional. Falls back to EVM legacy assembly if there is a bug with Yul - optimizer: { - enabled: true, // optional. True by default - mode: 'z' // optional. 3 by default, z to optimize bytecode size - }, - } - }, -}; - - - -export default config; diff --git a/projects/deploy-proxy/deployments/polygon_mainnet/.chainId b/projects/deploy-proxy/deployments/polygon_mainnet/.chainId new file mode 100644 index 000000000..0973804c4 --- /dev/null +++ b/projects/deploy-proxy/deployments/polygon_mainnet/.chainId @@ -0,0 +1 @@ +137 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/polygon_mainnet/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/polygon_mainnet/ImmutableCreate2Factory.json new file mode 100644 index 000000000..88f74a156 --- /dev/null +++ b/projects/deploy-proxy/deployments/polygon_mainnet/ImmutableCreate2Factory.json @@ -0,0 +1,131 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x7f860a5f9f07157fc9617b5cf8c9208c18d3b303ef3d94e7dd04fe065fa55305", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 57, + "gasUsed": "504221", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000080000000000000000000000000000000000000000000000000000080000000000100000000000000000000000000000000000000200000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000011000000000000000000000000000000100000000000000000000000000000100000000000000000000000000000200000000000100000", + "blockHash": "0x92c44c3a9cfb23fac9110ec9031a48cdb6624f083d0a3664233d592c82e48084", + "transactionHash": "0x7f860a5f9f07157fc9617b5cf8c9208c18d3b303ef3d94e7dd04fe065fa55305", + "logs": [ + { + "transactionIndex": 57, + "blockNumber": 56501158, + "transactionHash": "0x7f860a5f9f07157fc9617b5cf8c9208c18d3b303ef3d94e7dd04fe065fa55305", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000002cc11132c7dba4d55459c0be2792ab700b15d512", + "0x000000000000000000000000b9ede6f94d192073d8eaf85f8db677133d483249" + ], + "data": "0x0000000000000000000000000000000000000000000000000035bd96ffcc7c000000000000000000000000000000000000000000000000000753d533d968000000000000000000000000000000000000000000000000006850faf6ac563a94e0000000000000000000000000000000000000000000000000071e179cd99b84000000000000000000000000000000000000000000000000685130b443560710e0", + "logIndex": 167, + "blockHash": "0x92c44c3a9cfb23fac9110ec9031a48cdb6624f083d0a3664233d592c82e48084" + } + ], + "blockNumber": 56501158, + "cumulativeGasUsed": "7364921", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/polygon_mainnet/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/polygon_mainnet/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/polygon_mainnet/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/xai/.chainId b/projects/deploy-proxy/deployments/xai/.chainId new file mode 100644 index 000000000..28d56901b --- /dev/null +++ b/projects/deploy-proxy/deployments/xai/.chainId @@ -0,0 +1 @@ +660279 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/xai/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/xai/ImmutableCreate2Factory.json new file mode 100644 index 000000000..538ec21e1 --- /dev/null +++ b/projects/deploy-proxy/deployments/xai/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xac50fff9dc9be46584032bf229fc63082b84857fed7ebc0ae353dcd00820670a", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 1, + "gasUsed": "504307", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xd92956fb8b364fdb8420675da1f8a985d87dc4a66f3db09833629f0c45d2ae4d", + "transactionHash": "0xac50fff9dc9be46584032bf229fc63082b84857fed7ebc0ae353dcd00820670a", + "logs": [], + "blockNumber": 5520973, + "cumulativeGasUsed": "504307", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/xai/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/xai/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/xai/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/xai_sepolia_testnet/.chainId b/projects/deploy-proxy/deployments/xai_sepolia_testnet/.chainId new file mode 100644 index 000000000..f26fb1d3c --- /dev/null +++ b/projects/deploy-proxy/deployments/xai_sepolia_testnet/.chainId @@ -0,0 +1 @@ +37714555429 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/xai_sepolia_testnet/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/xai_sepolia_testnet/ImmutableCreate2Factory.json new file mode 100644 index 000000000..d8ed8ee9a --- /dev/null +++ b/projects/deploy-proxy/deployments/xai_sepolia_testnet/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0x63fab4fccaf6ceffe2ae7bb124cb4ec912dfe8cf56a142bf5b5eb227814d4b70", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 1, + "gasUsed": "699438", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x9dc9b21414d5388bc9954e6ec8e5c4d4207d6db8c3b29df0bf5688f113a6c258", + "transactionHash": "0x63fab4fccaf6ceffe2ae7bb124cb4ec912dfe8cf56a142bf5b5eb227814d4b70", + "logs": [], + "blockNumber": 485618, + "cumulativeGasUsed": "699438", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/xai_sepolia_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/xai_sepolia_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/xai_sepolia_testnet/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/hardhat.config.ts b/projects/deploy-proxy/hardhat.config.ts index d251fb11a..f283d4c9c 100644 --- a/projects/deploy-proxy/hardhat.config.ts +++ b/projects/deploy-proxy/hardhat.config.ts @@ -4,114 +4,17 @@ import "hardhat-deploy-immutable-proxy"; import "@openzeppelin/hardhat-upgrades"; import "@nomiclabs/hardhat-truffle5"; -import type { - HttpNetworkConfig, - HttpNetworkUserConfig, -} from "hardhat/types"; import * as dotenv from "dotenv"; -import * as os from "os"; -import * as path from "path"; -import fs from "fs"; + import "./tasks"; dotenv.config(); -function getConfigPath() { - const configPath = process.env["NETWORK_CONFIG_PATH"]; - if (configPath) { - return configPath; - } else { - return path.join(os.homedir(), ".ethereum"); - } -} - -function getNetworkApiKey(name: string): string { - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - if (!!json.verify) { - return json.verify.apiKey; - } - else { - return "xyz" - } - } else { - // File doesn't exist in path - return "xyz"; - } -} - -function getNetworkApiUrl(name: string): string { - let result:string = ""; - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - if (json.verify && json.verify.apiUrl) { - result = json.verify.apiUrl; - } - } - return result; -} - -function getNetworkExplorerUrl(name: string): string { - let result:string = ""; - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - if (json.verify && json.verify.explorerUrl) { - result = json.verify.explorerUrl; - } - } - return result; -} - -function createNetwork(name: string): HttpNetworkUserConfig { - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - if (json.verify && json.verify.apiUrl && json.verify.apiUrl.endsWith("/api")) { - json.verify.apiUrl = json.verify.apiUrl.slice(0, -4); - } - //if frame - if (!json.key) { - return { - url: json.url || "", - chainId: json.network_id, - timeout: 60000, - } as HttpNetworkConfig - } else { - // if not frame - return { - from: json.address, - gasPrice: "auto", - chainId: parseInt(json.network_id), - url: json.url || "", - accounts: [json.key], - gas: "auto", - saveDeployments: true, - verify: json.verify - ? { - etherscan: { - apiKey: json.verify.apiKey, - apiUrl: json.verify.apiUrl, - }, - } - : null, - zksync: json.zksync === true, - } as HttpNetworkUserConfig; - } - } else { - // File doesn't exist in path - return { - from: "0x0000000000000000000000000000000000000000", - gas: 0, - chainId: 0, - url: "", - accounts: [], - gasPrice: 0, - }; - } -} +import { + loadApiKeys, + loadCustomNetworks, + loadNetworkConfigs, +} from "@rarible/deploy-utils"; const config: HardhatUserConfig = { solidity: { @@ -177,380 +80,11 @@ const config: HardhatUserConfig = { paths: { sources: "contracts", }, - networks: { - hardhat: {}, - mainnet: createNetwork("mainnet"), - polygon_mumbai: createNetwork("polygon_mumbai"), - polygon_mainnet: createNetwork("polygon_mainnet"), - // polygon_dev: createNetwork("polygon_dev"), - // dev: createNetwork("dev"), - goerli: createNetwork("goerli"), - sepolia: createNetwork("sepolia"), - // staging: createNetwork("staging"), - // polygon_staging: createNetwork("polygon_staging"), - optimism_mainnet: createNetwork("optimism_mainnet"), - optimism_goerli: createNetwork("optimism_goerli"), - mantle_testnet: createNetwork("mantle_testnet"), - mantle_mainnet: createNetwork("mantle_mainnet"), - arbitrum_goerli: createNetwork("arbitrum_goerli"), - arbitrum_sepolia: createNetwork("arbitrum_sepolia"), - arbitrum_mainnet: createNetwork("arbitrum_mainnet"), - zkatana_testnet: createNetwork("zkatana_testnet"), - zkatana_mainnet: createNetwork("zkatana_mainnet"), - chiliz_testnet: createNetwork("chiliz_testnet"), - chiliz_mainnet: createNetwork("chiliz_mainnet"), - zksync_testnet: createNetwork("zksync_testnet"), - lightlink: createNetwork("lightlink"), - lightlink_pegasus: createNetwork("lightlink_pegasus"), - rari_testnet: createNetwork("rari_testnet"), - rari: createNetwork("rari"), - base_sepolia: createNetwork("base_sepolia"), - base: createNetwork("base"), - zksync_sepolia: createNetwork("zksync_sepolia"), - celo_alfajores_testnet: createNetwork("celo_alfajores_testnet"), - celo: createNetwork("celo"), - mantle_sepolia_testnet: createNetwork("mantle_sepolia_testnet"), - fief_playground_testnet: createNetwork("fief_playground_testnet"), - oasis_sapphire_testnet: createNetwork("oasis_sapphire_testnet"), - oasis: createNetwork("oasis"), - xai_sepolia_testnet: createNetwork("xai_sepolia_testnet"), - xai: createNetwork("xai"), - kroma_sepolia: createNetwork("kroma_sepolia"), - kroma: createNetwork("kroma"), - astar: createNetwork("astar"), - oasys_testnet: createNetwork("oasys_testnet"), - oasys: createNetwork("oasys"), - astar_zkyoto_testnet: createNetwork("astar_zkyoto_testnet"), - oasys_testnet_saakuru: createNetwork("oasys_testnet_saakuru"), - saakuru: createNetwork("saakuru"), - polygon_amoy_testnet: createNetwork("polygon_amoy_testnet"), - palm_testnet: createNetwork("palm_testnet"), - match_testnet: createNetwork("match_testnet"), - "5ire_testnet": createNetwork("5ire_testnet"), - palm: createNetwork("palm"), - match: createNetwork("match"), - lisk_sepolia: createNetwork("lisk_sepolia"), - camp_sepolia: createNetwork("camp_sepolia"), - sei_testnet: createNetwork("sei_testnet"), - }, + networks: loadNetworkConfigs(), etherscan: { - apiKey: { - mainnet: getNetworkApiKey('mainnet'), - polygon: getNetworkApiKey('polygon_mainnet'), - mumbai: getNetworkApiKey('polygon_mumbai'), - goerli: getNetworkApiKey("goerli"), - sepolia: getNetworkApiKey("sepolia"), - mantle_mainnet: getNetworkApiKey("mantle_mainnet"), - mantle_testnet: getNetworkApiKey("mantle_testnet"), - arbitrum_sepolia: getNetworkApiKey("arbitrum_sepolia"), - arbitrum_mainnet: getNetworkApiKey("arbitrum_mainnet"), - zksync_testnet: getNetworkApiKey("zksync_testnet"), - rari_testnet: getNetworkApiKey("rari_testnet"), - mantle_sepolia_testnet: getNetworkApiKey("mantle_sepolia_testnet"), - fief_playground_testnet: getNetworkApiKey("fief_playground_testnet"), - oasis_sapphire_testnet: getNetworkApiKey("oasis_sapphire_testnet"), - xai_sepolia_testnet: getNetworkApiKey("xai_sepolia_testnet"), - base: getNetworkApiKey("base"), - celo: getNetworkApiKey("celo"), - lightlink: getNetworkApiKey("lightlink"), - oasis: getNetworkApiKey("oasis"), - rari: getNetworkApiKey("rari"), - xai: getNetworkApiKey("xai"), - kroma_sepolia: getNetworkApiKey("kroma_sepolia"), - kroma: getNetworkApiKey("kroma"), - astar: getNetworkApiKey("astar"), - oasys_testnet: getNetworkApiKey("oasys_testnet"), - oasys: getNetworkApiKey("oasys"), - astar_zkyoto_testnet: getNetworkApiKey("astar_zkyoto_testnet"), - oasys_testnet_saakuru: getNetworkApiKey("oasys_testnet_saakuru"), - saakuru: getNetworkApiKey("saakuru"), - polygon_amoy_testnet: getNetworkApiKey("polygon_amoy_testnet"), - palm_testnet: getNetworkApiKey("palm_testnet"), - match_testnet: getNetworkApiKey("match_testnet"), - "5ire_testnet": getNetworkApiKey("5ire_testnet"), - palm: getNetworkApiKey("palm"), - match: getNetworkApiKey("match"), - lisk_sepolia: getNetworkApiKey("lisk_sepolia"), - camp_sepolia: getNetworkApiKey("camp_sepolia"), - sei_testnet: getNetworkApiKey("sei_testnet"), - }, - customChains: [ - { - network: "match", - chainId: createNetwork("match").chainId!, - urls: { - apiURL: getNetworkApiUrl("match"), - browserURL: getNetworkExplorerUrl("match"), - }, - }, - { - network: "palm", - chainId: createNetwork("palm").chainId!, - urls: { - apiURL: getNetworkApiUrl("palm"), - browserURL: getNetworkExplorerUrl("palm"), - }, - }, - { - network: "5ire_testnet", - chainId: createNetwork("5ire_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("5ire_testnet"), - browserURL: getNetworkExplorerUrl("5ire_testnet"), - }, - }, - { - network: "match_testnet", - chainId: createNetwork("match_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("match_testnet"), - browserURL: getNetworkExplorerUrl("match_testnet"), - }, - }, - { - network: "palm_testnet", - chainId: createNetwork("palm_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("palm_testnet"), - browserURL: getNetworkExplorerUrl("palm_testnet"), - }, - }, - { - network: "polygon_amoy_testnet", - chainId: createNetwork("polygon_amoy_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("polygon_amoy_testnet"), - browserURL: getNetworkExplorerUrl("polygon_amoy_testnet"), - }, - }, - { - network: "saakuru", - chainId: createNetwork("saakuru").chainId!, - urls: { - apiURL: getNetworkApiUrl("saakuru"), - browserURL: getNetworkExplorerUrl("saakuru"), - }, - }, - { - network: "oasys_testnet_saakuru", - chainId: createNetwork("oasys_testnet_saakuru").chainId!, - urls: { - apiURL: getNetworkApiUrl("oasys_testnet_saakuru"), - browserURL: getNetworkExplorerUrl("oasys_testnet_saakuru"), - }, - }, - { - network: "astar_zkyoto_testnet", - chainId: createNetwork("astar_zkyoto_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("astar_zkyoto_testnet"), - browserURL: getNetworkExplorerUrl("astar_zkyoto_testnet"), - }, - }, - { - network: "oasys", - chainId: createNetwork("oasys").chainId!, - urls: { - apiURL: getNetworkApiUrl("oasys"), - browserURL: getNetworkExplorerUrl("oasys"), - }, - }, - { - network: "oasys_testnet", - chainId: createNetwork("oasys_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("oasys_testnet"), - browserURL: getNetworkExplorerUrl("oasys_testnet"), - }, - }, - { - network: "astar", - chainId: createNetwork("astar").chainId!, - urls: { - apiURL: getNetworkApiUrl("astar"), - browserURL: getNetworkExplorerUrl("astar"), - }, - }, - { - network: "kroma", - chainId: createNetwork("kroma").chainId!, - urls: { - apiURL: getNetworkApiUrl("kroma"), - browserURL: getNetworkExplorerUrl("kroma"), - }, - }, - { - network: "base", - chainId: createNetwork("base").chainId!, - urls: { - apiURL: getNetworkApiUrl("base"), - browserURL: getNetworkExplorerUrl("base"), - }, - }, - { - network: "celo", - chainId: createNetwork("celo").chainId!, - urls: { - apiURL: getNetworkApiUrl("celo"), - browserURL: getNetworkExplorerUrl("celo"), - }, - }, - { - network: "lightlink", - chainId: createNetwork("lightlink").chainId!, - urls: { - apiURL: getNetworkApiUrl("lightlink"), - browserURL: getNetworkExplorerUrl("lightlink"), - }, - }, - { - network: "oasis", - chainId: createNetwork("oasis").chainId!, - urls: { - apiURL: getNetworkApiUrl("oasis"), - browserURL: getNetworkExplorerUrl("oasis"), - }, - }, - { - network: "rari", - chainId: createNetwork("rari").chainId!, - urls: { - apiURL: getNetworkApiUrl("rari"), - browserURL: getNetworkExplorerUrl("rari"), - }, - }, - { - network: "xai", - chainId: createNetwork("xai").chainId!, - urls: { - apiURL: getNetworkApiUrl("xai"), - browserURL: getNetworkExplorerUrl("xai"), - }, - }, - { - network: "kroma_sepolia", - chainId: createNetwork("kroma_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("kroma_sepolia"), - browserURL: getNetworkExplorerUrl("kroma_sepolia"), - }, - }, - { - network: "xai_sepolia_testnet", - chainId: createNetwork("xai_sepolia_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("xai_sepolia_testnet"), - browserURL: getNetworkExplorerUrl("xai_sepolia_testnet"), - }, - }, - { - network: "oasis_sapphire_testnet", - chainId: createNetwork("oasis_sapphire_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("oasis_sapphire_testnet"), - browserURL: getNetworkExplorerUrl("oasis_sapphire_testnet"), - }, - }, - { - network: "fief_playground_testnet", - chainId: createNetwork("fief_playground_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("fief_playground_testnet"), - browserURL: getNetworkExplorerUrl("fief_playground_testnet"), - }, - }, - { - network: "base_sepolia", - chainId: createNetwork("base_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("base_sepolia"), - browserURL: getNetworkExplorerUrl("base_sepolia"), - }, - }, - { - network: "rari_testnet", - chainId: createNetwork("rari_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("rari_testnet"), - browserURL: getNetworkExplorerUrl("rari_testnet"), - }, - }, - { - network: "mantle_sepolia_testnet", - chainId: createNetwork("mantle_sepolia_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("mantle_sepolia_testnet"), - browserURL: getNetworkExplorerUrl("mantle_sepolia_testnet"), - }, - }, - { - network: "mantle_mainnet", - chainId: createNetwork("mantle_mainnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("mantle_mainnet"), - browserURL: getNetworkExplorerUrl("mantle_mainnet"), - }, - }, - { - network: "mantle_testnet", - chainId: createNetwork("mantle_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("mantle_testnet"), - browserURL: getNetworkExplorerUrl("mantle_testnet"), - }, - }, - { - network: "arbitrum_sepolia", - chainId: createNetwork("arbitrum_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("arbitrum_sepolia"), - browserURL: getNetworkExplorerUrl("arbitrum_sepolia"), - }, - }, - { - network: "arbitrum_mainnet", - chainId: createNetwork("arbitrum_mainnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("arbitrum_mainnet"), - browserURL: getNetworkExplorerUrl("arbitrum_mainnet"), - }, - }, - { - network: "zksync_testnet", - chainId: createNetwork("zksync_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("zksync_testnet"), - browserURL: getNetworkExplorerUrl("zksync_testnet"), - }, - }, - { - network: "lisk_sepolia", - chainId: createNetwork("lisk_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("lisk_sepolia"), - browserURL: getNetworkExplorerUrl("lisk_sepolia"), - }, - }, - { - network: "camp_sepolia", - chainId: createNetwork("camp_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("camp_sepolia"), - browserURL: getNetworkExplorerUrl("camp_sepolia"), - }, - }, - { - network: "sei_testnet", - chainId: createNetwork("sei_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("sei_testnet"), - browserURL: getNetworkExplorerUrl("sei_testnet"), - }, - }, - ], + apiKey: loadApiKeys(), + customChains: loadCustomNetworks(), } }; - - export default config; \ No newline at end of file diff --git a/projects/deploy-proxy/package.json b/projects/deploy-proxy/package.json index cd1c45441..082b864d2 100644 --- a/projects/deploy-proxy/package.json +++ b/projects/deploy-proxy/package.json @@ -80,7 +80,8 @@ "typechain": "^8.2.0", "typescript": "^5.0.4", "web3": "^1.8.2", - "zksync-web3": "^0.17.1" + "zksync-web3": "^0.17.1", + "@rarible/deploy-utils": "^0.8.7" }, "publishConfig": { "access": "public" diff --git a/projects/deploy-utils/README.md b/projects/deploy-utils/README.md new file mode 100644 index 000000000..d13755073 --- /dev/null +++ b/projects/deploy-utils/README.md @@ -0,0 +1,11 @@ +# `deploy-utils` + +> TODO: description + +## Usage + +``` +const deployUtils = require('deploy-utils'); + +// TODO: DEMONSTRATE API +``` diff --git a/projects/deploy-utils/package.json b/projects/deploy-utils/package.json new file mode 100644 index 000000000..fa77b6de7 --- /dev/null +++ b/projects/deploy-utils/package.json @@ -0,0 +1,32 @@ +{ + "name": "@rarible/deploy-utils", + "version": "0.8.7", + "description": "Utils package", + "keywords": [ + "utils" + ], + "author": "Vadim Fadeev ", + "homepage": "https://github.com/rarible/protocol-contracts#readme", + "license": "MIT", + "main": "src/utils.ts", + "private": "true", + "directories": { + "dist": "dist" + }, + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/rarible/protocol-contracts.git" + }, + "scripts": { + "build": "tsc -skipLibCheck" + }, + "bugs": { + "url": "https://github.com/rarible/protocol-contracts/issues" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/projects/deploy-utils/src/utils.ts b/projects/deploy-utils/src/utils.ts new file mode 100644 index 000000000..facec8639 --- /dev/null +++ b/projects/deploy-utils/src/utils.ts @@ -0,0 +1,252 @@ +import type { + HttpNetworkUserConfig, +} from "hardhat/types"; +import * as dotenv from "dotenv"; +import * as os from "os"; +import * as path from "path"; +import fs from "fs"; + +dotenv.config(); + +export function getConfigPath() { + const configPath = process.env["NETWORK_CONFIG_PATH"]; + if (configPath) { + return configPath; + } else { + return path.join(os.homedir(), ".ethereum"); + } +} + +export function getNetworkApiKey(name: string): string { + const configPath = path.join(getConfigPath(), name + ".json"); + if (fs.existsSync(configPath)) { + var json = require(configPath); + if (!!json.verify) { + return json.verify.apiKey; + } + else { + return "xyz" + } + } else { + // File doesn't exist in path + return "xyz"; + } +} + +export function getNetworkApiUrl(name: string): string { + let result:string = ""; + const configPath = path.join(getConfigPath(), name + ".json"); + if (fs.existsSync(configPath)) { + var json = require(configPath); + if (json.verify && json.verify.apiUrl) { + result = json.verify.apiUrl; + } + } + return result; +} + +export function getNetworkExplorerUrl(name: string): string { + let result:string = ""; + const configPath = path.join(getConfigPath(), name + ".json"); + if (fs.existsSync(configPath)) { + var json = require(configPath); + if (json.verify && json.verify.explorerUrl) { + result = json.verify.explorerUrl; + } + } + return result; +} + +export function createNetwork(name: string): HttpNetworkUserConfig { + const configPath = path.join(getConfigPath(), name + ".json"); + if (fs.existsSync(configPath)) { + var json = require(configPath); + if (json.verify && json.verify.apiUrl && json.verify.apiUrl.endsWith("/api")) { + json.verify.apiUrl = json.verify.apiUrl.slice(0, -4); + } + //if frame + if (!json.key) { + return { + url: json.url || "", + chainId: parseInt(json.network_id), + timeout: 60000, + } + } else { + // if not frame + return { + from: json.address, + gasPrice: "auto", + chainId: parseInt(json.network_id), + url: json.url || "", + accounts: [json.key], + gas: 5000000, + saveDeployments: true, + verify: json.verify + ? { + etherscan: { + apiKey: "xyz", + apiUrl: json.verify.apiUrl, + }, + } + : null, + zksync: json.zksync === true, + } as HttpNetworkUserConfig; + } + } else { + // File doesn't exist in path + return { + from: "0x0000000000000000000000000000000000000000", + gas: 0, + chainId: 0, + url: "", + accounts: [], + gasPrice: 0, + }; + } +} + +export function loadNetworkConfigs(): Record { + let configs: Record = { + hardhat: {} + }; + + // Ensure the directory exists + const directory = getConfigPath(); // Make sure this function is defined and returns the path to the config directory + if (!fs.existsSync(directory)) { + console.error(`Directory ${directory} does not exist.`); + return configs; // Return default with only Hardhat network if no directory + } + + // Read all files from the config directory + const files = fs.readdirSync(directory); + + // Filter JSON files + const jsonFiles = files.filter(file => path.extname(file) === '.json'); + + // Process each JSON file + jsonFiles.forEach(file => { + const networkName = path.basename(file, '.json'); + // Create network configurations dynamically + configs[networkName] = createNetwork(networkName); + }); + + return configs; +} + + +// Function to read and parse the network configuration JSON file +function readNetworkConfig(file: string): { chainId: number, apiUrl: string, explorerUrl: string } | null { + const filePath = path.join(getConfigPath(), file); + if (fs.existsSync(filePath)) { + const fileData = fs.readFileSync(filePath, 'utf8'); + try { + const json = JSON.parse(fileData); + // Validate or extract only the needed properties with correct types + if (json && typeof json.chainId === 'number' && typeof json.apiUrl === 'string' && typeof json.explorerUrl === 'string') { + return { + chainId: json.chainId, + apiUrl: json.apiUrl, + explorerUrl: json.explorerUrl + }; + } + } catch (err) { + console.error(`Error parsing JSON from file ${filePath}: ${err}`); + } + } else { + console.warn(`Configuration file not found: ${filePath}`); + } + return null; +} + +// Main function to load and return custom network configurations +export function loadCustomNetworks(): Array<{ network: string; chainId: number; urls: { apiURL: string; browserURL: string; } }> { + const configDirectory = getConfigPath(); + const files = fs.readdirSync(configDirectory).filter(file => path.extname(file) === '.json'); + const networks = files.map(file => path.basename(file, '.json')); + + return networks.map(network => { + const configData = readNetworkConfig(network + '.json'); + if (!configData) return null; + + return { + network, + chainId: configData.chainId, + urls: { + apiURL: configData.apiUrl, + browserURL: configData.explorerUrl + } + }; + }).filter(network => network !== null) as Array<{ network: string; chainId: number; urls: { apiURL: string; browserURL: string; } }>; +} + +// Function to convert snake_case or other formats to camelCase +function toCamelCase(str: string): string { + return str.replace(/([-_]\w)/g, (g) => g[1].toUpperCase()); +} + +// Function to read and parse the network configuration JSON file for API keys +function readApiKeyFromConfig(file: string): string { + const filePath = path.join(getConfigPath(), file); + try { + if (fs.existsSync(filePath)) { + const fileData = fs.readFileSync(filePath, 'utf8'); + const jsonData = JSON.parse(fileData); + return jsonData.verify && jsonData.verify.apiKey ? jsonData.verify.apiKey : "Key not found"; + } else { + console.warn(`Configuration file not found: ${filePath}`); + return "Key not found"; + } + } catch (error) { + console.error(`Error reading or parsing the file ${filePath}: ${error}`); + return "Key not found"; + } +} + +// Main function to load API keys from configuration files +export function loadApiKeys(): Record { + const configDirectory = getConfigPath(); + const apiKeys: Record = {}; + + // Read all JSON files from the config directory + const files = fs.readdirSync(configDirectory).filter(file => path.extname(file) === '.json'); + + // Process each JSON file and extract API keys + files.forEach(file => { + const networkName = path.basename(file, '.json'); // Removes the .json extension to get the network name + const camelCaseKey = toCamelCase(networkName); // Convert network name to camelCase for the key + apiKeys[camelCaseKey] = readApiKeyFromConfig(file); // Read the API key from the file + }); + + return apiKeys; +} + +// Function to read and extract factory addresses from JSON files, keeping the specific structure +export function loadFactoryAddresses(): Record { + const configDirectory = getConfigPath(); + const factoryAddresses: Record = {}; + + if (fs.existsSync(configDirectory)) { + const files = fs.readdirSync(configDirectory).filter(file => path.extname(file) === '.json'); + + files.forEach(file => { + const filePath = path.join(configDirectory, file); + const data = fs.readFileSync(filePath, 'utf8'); + try { + const json = JSON.parse(data); + const chainId = json.network_id as string; // assuming 'network_id' is the key for network identifier + const factory = json.factory as string; // assuming 'factory' is the key where the factory address is stored + + if (chainId && factory) { + factoryAddresses[chainId] = { factory }; + } + } catch (error) { + console.error(`Error parsing JSON in ${file}: ${error}`); + } + }); + } else { + console.error(`Configuration directory not found: ${configDirectory}`); + } + + return factoryAddresses; + } + \ No newline at end of file diff --git a/projects/deploy-utils/tsconfig.json b/projects/deploy-utils/tsconfig.json new file mode 100644 index 000000000..5da24ad14 --- /dev/null +++ b/projects/deploy-utils/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "strict": true, + "esModuleInterop": true, + "moduleResolution": "node", + "forceConsistentCasingInFileNames": true, + "outDir": "dist" + }, + "include": [ + "./src" ] +} \ No newline at end of file diff --git a/projects/hardhat-deploy/deploy/000_deploy_DefaultProxyAdmin.ts b/projects/hardhat-deploy/deploy/000_deploy_DefaultProxyAdmin.ts new file mode 100644 index 000000000..165422f38 --- /dev/null +++ b/projects/hardhat-deploy/deploy/000_deploy_DefaultProxyAdmin.ts @@ -0,0 +1,27 @@ +import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { DeployFunction } from 'hardhat-deploy/types'; +import { getOwner } from './utils'; + +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + + console.log(`deploying contracts on network ${hre.network.name}`) + + const { deploy } = hre.deployments; + const { deployer } = await hre.getNamedAccounts(); + const owner = await getOwner(hre); + console.log("deploying contracts with the account:", deployer); + if(deployer != owner) { + await deploy('DefaultProxyAdmin', { + from: deployer, + args: [owner], + log: true, + autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, + }); + } + + +}; +export default func; +func.tags = ['all', "000"]; \ No newline at end of file diff --git a/projects/hardhat-deploy/hardhat.config.ts b/projects/hardhat-deploy/hardhat.config.ts index df66c2642..d870a9726 100644 --- a/projects/hardhat-deploy/hardhat.config.ts +++ b/projects/hardhat-deploy/hardhat.config.ts @@ -4,113 +4,18 @@ import "hardhat-deploy-immutable-proxy"; import "@openzeppelin/hardhat-upgrades"; import "@nomiclabs/hardhat-truffle5"; -import type { - HttpNetworkUserConfig, -} from "hardhat/types"; import * as dotenv from "dotenv"; -import * as os from "os"; -import * as path from "path"; -import fs from "fs"; -import "./tasks"; - -dotenv.config(); - -function getConfigPath() { - const configPath = process.env["NETWORK_CONFIG_PATH"]; - if (configPath) { - return configPath; - } else { - return path.join(os.homedir(), ".ethereum"); - } -} -function getNetworkApiKey(name: string): string { - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - if (!!json.verify) { - return json.verify.apiKey; - } - else { - return "xyz" - } - } else { - // File doesn't exist in path - return "xyz"; - } -} +import { + loadApiKeys, + loadCustomNetworks, + loadNetworkConfigs, + loadFactoryAddresses, +} from "@rarible/deploy-utils"; -function getNetworkApiUrl(name: string): string { - let result:string = ""; - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - if (json.verify && json.verify.apiUrl) { - result = json.verify.apiUrl; - } - } - return result; -} - -function getNetworkExplorerUrl(name: string): string { - let result:string = ""; - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - if (json.verify && json.verify.explorerUrl) { - result = json.verify.explorerUrl; - } - } - return result; -} +import "./tasks"; -function createNetwork(name: string): HttpNetworkUserConfig { - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - if (json.verify && json.verify.apiUrl && json.verify.apiUrl.endsWith("/api")) { - json.verify.apiUrl = json.verify.apiUrl.slice(0, -4); - } - //if frame - if (!json.key) { - return { - url: json.url || "", - chainId: json.network_id, - timeout: 60000, - } - } else { - // if not frame - return { - from: json.address, - gasPrice: "auto", - chainId: parseInt(json.network_id), - url: json.url || "", - accounts: [json.key], - gas: 5000000, - saveDeployments: true, - verify: json.verify - ? { - etherscan: { - apiKey: "4BX5JGM9IBFRHSDBMRCS4R66TX123T9E22", - apiUrl: json.verify.apiUrl, - }, - } - : null, - zksync: json.zksync === true, - } as HttpNetworkUserConfig; - } - } else { - // File doesn't exist in path - return { - from: "0x0000000000000000000000000000000000000000", - gas: 0, - chainId: 0, - url: "", - accounts: [], - gasPrice: 0, - }; - } -} +dotenv.config(); const config: HardhatUserConfig = { solidity: { @@ -185,427 +90,12 @@ const config: HardhatUserConfig = { paths: { sources: "src", }, - networks: { - hardhat: {}, - mainnet: createNetwork("mainnet"), - polygon_mumbai: createNetwork("polygon_mumbai"), - polygon_mainnet: createNetwork("polygon_mainnet"), - polygon_dev: createNetwork("polygon_dev"), - dev: createNetwork("dev"), - goerli: createNetwork("goerli"), - sepolia: createNetwork("sepolia"), - staging: createNetwork("staging"), - polygon_staging: createNetwork("polygon_staging"), - optimism_mainnet: createNetwork("optimism_mainnet"), - optimism_goerli: createNetwork("optimism_goerli"), - mantle_testnet: createNetwork("mantle_testnet"), - mantle_mainnet: createNetwork("mantle_mainnet"), - arbitrum_goerli: createNetwork("arbitrum_goerli"), - arbitrum_sepolia: createNetwork("arbitrum_sepolia"), - arbitrum: createNetwork("arbitrum"), - zkatana_testnet: createNetwork("zkatana_testnet"), - zkatana_mainnet: createNetwork("zkatana_mainnet"), - chiliz_testnet: createNetwork("chiliz_testnet"), - chiliz_mainnet: createNetwork("chiliz_mainnet"), - zksync_testnet: createNetwork("zksync_testnet"), - lightlink: createNetwork("lightlink"), - lightlink_pegasus: createNetwork("lightlink_pegasus"), - zksync: { - ...createNetwork("zksync"), - ethNetwork: "mainnet", - zksync: true - }, - rari_testnet: createNetwork("rari_testnet"), - rari: createNetwork("rari"), - base_sepolia: createNetwork("base_sepolia"), - base: createNetwork("base"), - zksync_sepolia: createNetwork("zksync_sepolia"), - celo_alfajores_testnet: createNetwork("celo_alfajores_testnet"), - celo: createNetwork("celo"), - mantle_sepolia_testnet: createNetwork("mantle_sepolia_testnet"), - fief_playground_testnet: createNetwork("fief_playground_testnet"), - oasis_sapphire_testnet: createNetwork("oasis_sapphire_testnet"), - oasis: createNetwork("oasis"), - xai_sepolia_testnet: createNetwork("xai_sepolia_testnet"), - xai: createNetwork("xai"), - kroma_sepolia: createNetwork("kroma_sepolia"), - kroma: createNetwork("kroma"), - astar: createNetwork("astar"), - oasys_testnet: createNetwork("oasys_testnet"), - oasys: createNetwork("oasys"), - zkLink: { - zksync: true, - ethNetwork: "mainnet", - ...createNetwork("zkLink"), - }, - astar_zkyoto_testnet: createNetwork("astar_zkyoto_testnet"), - oasys_testnet_saakuru: createNetwork("oasys_testnet_saakuru"), - saakuru: createNetwork("saakuru"), - polygon_amoy_testnet: createNetwork("polygon_amoy_testnet"), - palm_testnet: createNetwork("palm_testnet"), - match_testnet: createNetwork("match_testnet"), - "5ire_testnet": createNetwork("5ire_testnet"), - palm: createNetwork("palm"), - match: createNetwork("match"), - lisk_sepolia: createNetwork("lisk_sepolia"), - camp_sepolia: createNetwork("camp_sepolia"), - sei_testnet: createNetwork("sei_testnet"), - }, + networks: loadNetworkConfigs(), etherscan: { - apiKey: { - mainnet: getNetworkApiKey('mainnet'), - polygon: getNetworkApiKey('polygon_mainnet'), - mumbai: getNetworkApiKey('polygon_mumbai'), - goerli: getNetworkApiKey("goerli"), - sepolia: getNetworkApiKey("sepolia"), - mantle_mainnet: getNetworkApiKey("mantle_mainnet"), - mantle_testnet: getNetworkApiKey("mantle_testnet"), - arbitrum_sepolia: getNetworkApiKey("arbitrum_sepolia"), - arbitrum: getNetworkApiKey("arbitrum"), - zksync_testnet: getNetworkApiKey("zksync_testnet"), - rari_testnet: getNetworkApiKey("rari_testnet"), - mantle_sepolia_testnet: getNetworkApiKey("mantle_sepolia_testnet"), - fief_playground_testnet: getNetworkApiKey("fief_playground_testnet"), - oasis_sapphire_testnet: getNetworkApiKey("oasis_sapphire_testnet"), - xai_sepolia_testnet: getNetworkApiKey("xai_sepolia_testnet"), - base: getNetworkApiKey("base"), - celo: getNetworkApiKey("celo"), - lightlink: getNetworkApiKey("lightlink"), - oasis: getNetworkApiKey("oasis"), - rari: getNetworkApiKey("rari"), - xai: getNetworkApiKey("xai"), - kroma_sepolia: getNetworkApiKey("kroma_sepolia"), - kroma: getNetworkApiKey("kroma"), - astar: getNetworkApiKey("astar"), - oasys_testnet: getNetworkApiKey("oasys_testnet"), - oasys: getNetworkApiKey("oasys"), - astar_zkyoto_testnet: getNetworkApiKey("astar_zkyoto_testnet"), - oasys_testnet_saakuru: getNetworkApiKey("oasys_testnet_saakuru"), - saakuru: getNetworkApiKey("saakuru"), - polygon_amoy_testnet: getNetworkApiKey("polygon_amoy_testnet"), - palm_testnet: getNetworkApiKey("palm_testnet"), - match_testnet: getNetworkApiKey("match_testnet"), - "5ire_testnet": getNetworkApiKey("5ire_testnet"), - palm: getNetworkApiKey("palm"), - match: getNetworkApiKey("match"), - lisk_sepolia: getNetworkApiKey("lisk_sepolia"), - camp_sepolia: getNetworkApiKey("camp_sepolia"), - sei_testnet: getNetworkApiKey("sei_testnet") - }, - customChains: [ - { - network: "match", - chainId: createNetwork("match").chainId!, - urls: { - apiURL: getNetworkApiUrl("match"), - browserURL: getNetworkExplorerUrl("match"), - }, - }, - { - network: "palm", - chainId: createNetwork("palm").chainId!, - urls: { - apiURL: getNetworkApiUrl("palm"), - browserURL: getNetworkExplorerUrl("palm"), - }, - }, - { - network: "5ire_testnet", - chainId: createNetwork("5ire_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("5ire_testnet"), - browserURL: getNetworkExplorerUrl("5ire_testnet"), - }, - }, - { - network: "match_testnet", - chainId: createNetwork("match_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("match_testnet"), - browserURL: getNetworkExplorerUrl("match_testnet"), - }, - }, - { - network: "palm_testnet", - chainId: createNetwork("palm_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("palm_testnet"), - browserURL: getNetworkExplorerUrl("palm_testnet"), - }, - }, - { - network: "polygon_amoy_testnet", - chainId: createNetwork("polygon_amoy_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("polygon_amoy_testnet"), - browserURL: getNetworkExplorerUrl("polygon_amoy_testnet"), - }, - }, - { - network: "saakuru", - chainId: createNetwork("saakuru").chainId!, - urls: { - apiURL: getNetworkApiUrl("saakuru"), - browserURL: getNetworkExplorerUrl("saakuru"), - }, - }, - { - network: "oasys_testnet_saakuru", - chainId: createNetwork("oasys_testnet_saakuru").chainId!, - urls: { - apiURL: getNetworkApiUrl("oasys_testnet_saakuru"), - browserURL: getNetworkExplorerUrl("oasys_testnet_saakuru"), - }, - }, - { - network: "astar_zkyoto_testnet", - chainId: createNetwork("astar_zkyoto_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("astar_zkyoto_testnet"), - browserURL: getNetworkExplorerUrl("astar_zkyoto_testnet"), - }, - }, - { - network: "oasys", - chainId: createNetwork("oasys").chainId!, - urls: { - apiURL: getNetworkApiUrl("oasys"), - browserURL: getNetworkExplorerUrl("oasys"), - }, - }, - { - network: "oasys_testnet", - chainId: createNetwork("oasys_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("oasys_testnet"), - browserURL: getNetworkExplorerUrl("oasys_testnet"), - }, - }, - { - network: "astar", - chainId: createNetwork("astar").chainId!, - urls: { - apiURL: getNetworkApiUrl("astar"), - browserURL: getNetworkExplorerUrl("astar"), - }, - }, - { - network: "kroma", - chainId: createNetwork("kroma").chainId!, - urls: { - apiURL: getNetworkApiUrl("kroma"), - browserURL: getNetworkExplorerUrl("kroma"), - }, - }, - { - network: "base", - chainId: createNetwork("base").chainId!, - urls: { - apiURL: getNetworkApiUrl("base"), - browserURL: getNetworkExplorerUrl("base"), - }, - }, - { - network: "celo", - chainId: createNetwork("celo").chainId!, - urls: { - apiURL: getNetworkApiUrl("celo"), - browserURL: getNetworkExplorerUrl("celo"), - }, - }, - { - network: "lightlink", - chainId: createNetwork("lightlink").chainId!, - urls: { - apiURL: getNetworkApiUrl("lightlink"), - browserURL: getNetworkExplorerUrl("lightlink"), - }, - }, - { - network: "oasis", - chainId: createNetwork("oasis").chainId!, - urls: { - apiURL: getNetworkApiUrl("oasis"), - browserURL: getNetworkExplorerUrl("oasis"), - }, - }, - { - network: "rari", - chainId: createNetwork("rari").chainId!, - urls: { - apiURL: getNetworkApiUrl("rari"), - browserURL: getNetworkExplorerUrl("rari"), - }, - }, - { - network: "xai", - chainId: createNetwork("xai").chainId!, - urls: { - apiURL: getNetworkApiUrl("xai"), - browserURL: getNetworkExplorerUrl("xai"), - }, - }, - { - network: "kroma_sepolia", - chainId: createNetwork("kroma_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("kroma_sepolia"), - browserURL: getNetworkExplorerUrl("kroma_sepolia"), - }, - }, - { - network: "xai_sepolia_testnet", - chainId: createNetwork("xai_sepolia_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("xai_sepolia_testnet"), - browserURL: getNetworkExplorerUrl("xai_sepolia_testnet"), - }, - }, - { - network: "oasis_sapphire_testnet", - chainId: createNetwork("oasis_sapphire_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("oasis_sapphire_testnet"), - browserURL: getNetworkExplorerUrl("oasis_sapphire_testnet"), - }, - }, - { - network: "fief_playground_testnet", - chainId: createNetwork("fief_playground_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("fief_playground_testnet"), - browserURL: getNetworkExplorerUrl("fief_playground_testnet"), - }, - }, - { - network: "base_sepolia", - chainId: createNetwork("base_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("base_sepolia"), - browserURL: getNetworkExplorerUrl("base_sepolia"), - }, - }, - { - network: "rari_testnet", - chainId: createNetwork("rari_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("rari_testnet"), - browserURL: getNetworkExplorerUrl("rari_testnet"), - }, - }, - { - network: "mantle_sepolia_testnet", - chainId: createNetwork("mantle_sepolia_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("mantle_sepolia_testnet"), - browserURL: getNetworkExplorerUrl("mantle_sepolia_testnet"), - }, - }, - { - network: "mantle_mainnet", - chainId: createNetwork("mantle_mainnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("mantle_mainnet"), - browserURL: getNetworkExplorerUrl("mantle_mainnet"), - }, - }, - { - network: "mantle_testnet", - chainId: createNetwork("mantle_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("mantle_testnet"), - browserURL: getNetworkExplorerUrl("mantle_testnet"), - }, - }, - { - network: "arbitrum_sepolia", - chainId: createNetwork("arbitrum_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("arbitrum_sepolia"), - browserURL: getNetworkExplorerUrl("arbitrum_sepolia"), - }, - }, - { - network: "arbitrum", - chainId: createNetwork("arbitrum").chainId!, - urls: { - apiURL: getNetworkApiUrl("arbitrum"), - browserURL: getNetworkExplorerUrl("arbitrum"), - }, - }, - { - network: "zksync_testnet", - chainId: createNetwork("zksync_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("zksync_testnet"), - browserURL: getNetworkExplorerUrl("zksync_testnet"), - }, - }, - { - network: "zksync_testnet", - chainId: createNetwork("zksync_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("zksync_testnet"), - browserURL: getNetworkExplorerUrl("zksync_testnet"), - }, - }, - { - network: "lisk_sepolia", - chainId: createNetwork("lisk_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("lisk_sepolia"), - browserURL: getNetworkExplorerUrl("lisk_sepolia"), - }, - }, - { - network: "camp_sepolia", - chainId: createNetwork("camp_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("camp_sepolia"), - browserURL: getNetworkExplorerUrl("camp_sepolia"), - }, - }, - { - network: "sei_testnet", - chainId: createNetwork("sei_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("sei_testnet"), - browserURL: getNetworkExplorerUrl("sei_testnet"), - }, - }, - ], + apiKey: loadApiKeys(), + customChains: loadCustomNetworks(), }, - zksolc: { - version: "1.3.18", - settings: { - isSystem: false, // optional. Enables Yul instructions available only for zkSync system contracts and libraries - forceEvmla: false, // optional. Falls back to EVM legacy assembly if there is a bug with Yul - optimizer: { - enabled: true, // optional. True by default - mode: 'z' // optional. 3 by default, z to optimize bytecode size - }, - } - }, - deterministicDeployment: { - '421614': { - factory: '0x933AcD72513796c31dc9B63579130335Dcd4a961' - }, - '5003': { - factory: '0x933AcD72513796c31dc9B63579130335Dcd4a961' - }, - '11155111': { - factory: '0x933AcD72513796c31dc9B63579130335Dcd4a961' - }, - '4202': { - factory: '0x933AcD72513796c31dc9B63579130335Dcd4a961' - }, - '90354': { - factory: '0x933AcD72513796c31dc9B63579130335Dcd4a961' - }, - '713715': { - factory: '0x933AcD72513796c31dc9B63579130335Dcd4a961' - } - } + deterministicDeployment: loadFactoryAddresses() }; diff --git a/projects/hardhat-deploy/package.json b/projects/hardhat-deploy/package.json index 094aa9d06..04e953582 100644 --- a/projects/hardhat-deploy/package.json +++ b/projects/hardhat-deploy/package.json @@ -70,7 +70,8 @@ "tslib": "^2.5.0", "typechain": "^8.2.0", "typescript": "^5.0.4", - "web3": "^1.8.2" + "web3": "^1.8.2", + "@rarible/deploy-utils": "^0.8.7" }, "files": [ "contracts", diff --git a/projects/tokens/hardhat.config.ts b/projects/tokens/hardhat.config.ts index f125fbd8e..e5482ddab 100644 --- a/projects/tokens/hardhat.config.ts +++ b/projects/tokens/hardhat.config.ts @@ -17,90 +17,11 @@ import "./tasks"; dotenv.config(); -function getConfigPath() { - const configPath = process.env["NETWORK_CONFIG_PATH"]; - if (configPath) { - return configPath; - } else { - return path.join(os.homedir(), ".ethereum"); - } -} - -function getNetworkApiKey(name: string): string { - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - if (!!json.verify) { - return json.verify.apiKey; - } - else { - return "xyz" - } - } else { - // File doesn't exist in path - return "xyz"; - } -} - -function getNetworkApiUrl(name: string): string { - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - return json.verify.apiUrl; - } else { - // File doesn't exist in path - return ""; - } -} - -function getNetworkExplorerUrl(name: string): string { - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - return json.verify.explorerUrl; - } else { - // File doesn't exist in path - return ""; - } -} - -function createNetwork(name: string): HttpNetworkUserConfig { - const configPath = path.join(getConfigPath(), name + ".json"); - if (fs.existsSync(configPath)) { - var json = require(configPath); - if (json.verify && json.verify.apiUrl && json.verify.apiUrl.endsWith("/api")) { - json.verify.apiUrl = json.verify.apiUrl.slice(0, -4); - } - return { - from: json.address, - gasPrice: "auto", - chainId: parseInt(json.network_id), - url: json.url, - accounts: [json.key], - gas: "auto", - saveDeployments: true, - verify: json.verify - ? { - etherscan: { - apiKey: "4BX5JGM9IBFRHSDBMRCS4R66TX123T9E22", - apiUrl: json.verify.apiUrl, - }, - } - : null, - zksync: json.zksync === true, - } as HttpNetworkUserConfig; - } else { - // File doesn't exist in path - return { - from: "0x0000000000000000000000000000000000000000", - gas: 0, - chainId: 0, - url: "", - accounts: [], - gasPrice: 0, - }; - } -} +import { + loadApiKeys, + loadCustomNetworks, + loadNetworkConfigs +} from "@rarible/deploy-utils"; const config: HardhatUserConfig = { solidity: { @@ -157,144 +78,11 @@ const config: HardhatUserConfig = { paths: { sources: "contracts", }, - networks: { - hardhat: {}, - mainnet: { - url: 'http://127.0.0.1:1248', - chainId: 1, - timeout: 60000, - }, - polygon_mumbai: createNetwork("polygon_mumbai"), - polygon_mainnet: createNetwork("polygon_mainnet"), - polygon_dev: createNetwork("polygon_dev"), - dev: createNetwork("dev"), - goerli: createNetwork("goerli"), - sepolia: createNetwork("sepolia"), - staging: createNetwork("staging"), - polygon_staging: createNetwork("polygon_staging"), - optimism_mainnet: createNetwork("optimism_mainnet"), - optimism_goerli: createNetwork("optimism_goerli"), - mantle_testnet: createNetwork("mantle_testnet"), - mantle_mainnet: createNetwork("mantle_mainnet"), - arbitrum_goerli: createNetwork("arbitrum_goerli"), - arbitrum_sepolia: createNetwork("arbitrum_sepolia"), - arbitrum_mainnet: createNetwork("arbitrum_mainnet"), - zkatana_testnet: createNetwork("zkatana_testnet"), - zkatana_mainnet: createNetwork("zkatana_mainnet"), - chiliz_testnet: createNetwork("chiliz_testnet"), - chiliz_mainnet: createNetwork("chiliz_mainnet"), - zksync_testnet: createNetwork("zksync_testnet"), - lightlink: { - url: 'http://127.0.0.1:1248', - chainId: 1890, - timeout: 60000, - }, - lightlink_pegasus: createNetwork("lightlink_pegasus"), - zksync: { - url: 'http://127.0.0.1:1248', - chainId: 324, - timeout: 60000, - ethNetwork: "mainnet", // The Ethereum Web3 RPC URL, or the identifier of the network (e.g. `mainnet` or `sepolia`) - zksync: true - }, - rari_testnet: createNetwork("rari_testnet"), - rari: { - url: 'http://127.0.0.1:1248', - chainId: 1380012617, - timeout: 60000, - }, - base_sepolia: createNetwork("base_sepolia"), - base: { - url: 'http://127.0.0.1:1248', - chainId: 8453, - timeout: 60000, - }, - zksync_sepolia: createNetwork("zksync_sepolia") - }, + networks: loadNetworkConfigs(), etherscan: { - apiKey: { - mainnet: getNetworkApiKey('mainnet'), - polygon: getNetworkApiKey('polygon_mainnet'), - mumbai: getNetworkApiKey('polygon_mumbai'), - goerli: getNetworkApiKey("goerli"), - sepolia: getNetworkApiKey("sepolia"), - mantle_mainnet: getNetworkApiKey("mantle_mainnet"), - mantle_testnet: getNetworkApiKey("mantle_testnet"), - arbitrum_sepolia: getNetworkApiKey("arbitrum_sepolia"), - arbitrum_mainnet: getNetworkApiKey("arbitrum_mainnet"), - zksync_testnet: getNetworkApiKey("zksync_testnet"), - rari_testnet: getNetworkApiKey("rari_testnet") - }, - customChains: [ - { - network: "base_sepolia", - chainId: createNetwork("base_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("base_sepolia"), - browserURL: getNetworkExplorerUrl("base_sepolia"), - }, - }, - { - network: "rari_testnet", - chainId: createNetwork("rari_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("rari_testnet"), - browserURL: getNetworkExplorerUrl("rari_testnet"), - }, - }, - { - network: "mantle_mainnet", - chainId: createNetwork("mantle_mainnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("mantle_mainnet"), - browserURL: getNetworkExplorerUrl("mantle_mainnet"), - }, - }, - { - network: "mantle_testnet", - chainId: createNetwork("mantle_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("mantle_testnet"), - browserURL: getNetworkExplorerUrl("mantle_testnet"), - }, - }, - { - network: "arbitrum_sepolia", - chainId: createNetwork("arbitrum_sepolia").chainId!, - urls: { - apiURL: getNetworkApiUrl("arbitrum_sepolia"), - browserURL: getNetworkExplorerUrl("arbitrum_sepolia"), - }, - }, - { - network: "arbitrum_mainnet", - chainId: createNetwork("arbitrum_mainnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("arbitrum_mainnet"), - browserURL: getNetworkExplorerUrl("arbitrum_mainnet"), - }, - }, - { - network: "zksync_testnet", - chainId: createNetwork("zksync_testnet").chainId!, - urls: { - apiURL: getNetworkApiUrl("zksync_testnet"), - browserURL: getNetworkExplorerUrl("zksync_testnet"), - }, - }, - ], - }, - zksolc: { - compilerSource: 'binary', - settings: { - isSystem: false, // optional. Enables Yul instructions available only for zkSync system contracts and libraries - forceEvmla: false, // optional. Falls back to EVM legacy assembly if there is a bug with Yul - optimizer: { - enabled: true, // optional. True by default - mode: 'z' // optional. 3 by default, z to optimize bytecode size - }, - } - }, + apiKey: loadApiKeys(), + customChains: loadCustomNetworks(), + } }; diff --git a/projects/tokens/package.json b/projects/tokens/package.json index a5e936902..241cb1ea4 100644 --- a/projects/tokens/package.json +++ b/projects/tokens/package.json @@ -82,7 +82,8 @@ "typechain": "^8.2.0", "typescript": "^5.0.4", "web3": "^1.8.2", - "zksync-web3": "^0.17.1" + "zksync-web3": "^0.17.1", + "@rarible/deploy-utils": "^0.8.7" }, "publishConfig": { "access": "public" From 32d175c16afce5fae9518dc50bbcc7b6f8eb77ff Mon Sep 17 00:00:00 2001 From: disenotov Date: Fri, 3 May 2024 18:01:50 +0300 Subject: [PATCH 09/25] chore: fix some tests --- .../test/ExchangeWrapper.test.js | 50 +++++++++---------- projects/exchange-wrapper/test/bulk.test.js | 2 +- .../test/wrapper-weth.test.js | 2 +- .../gas-usage-tests/test/marketplaces.test.js | 32 ++++++------ projects/gas-usage-tests/test/rarible.test.js | 16 +++--- .../test/erc-1155/ERC1155Rarible.test.js | 4 +- .../test/erc-1155/ERC1155RaribleUser.test.js | 2 +- .../erc-721-minimal/ERC721Factories.test.js | 2 +- .../test/erc-721-minimal/Rarible.test.js | 4 +- projects/tokens/test/erc-721/Rarible.test.js | 4 +- 10 files changed, 59 insertions(+), 59 deletions(-) diff --git a/projects/exchange-wrapper/test/ExchangeWrapper.test.js b/projects/exchange-wrapper/test/ExchangeWrapper.test.js index b0fa73574..fbe6a996f 100644 --- a/projects/exchange-wrapper/test/ExchangeWrapper.test.js +++ b/projects/exchange-wrapper/test/ExchangeWrapper.test.js @@ -136,7 +136,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { const conduitController = await ConduitController.new(); const seaport = await Seaport.new(conduitController.address) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, [], accounts[0]); // creating seaport order const buyerLocal1 = accounts[2]; @@ -228,7 +228,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { const conduitController = await ConduitController.new(); const seaport = await Seaport.new(conduitController.address) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, [], accounts[0]); const buyerLocal1 = accounts[2]; await erc721.mint(seller, tokenId) @@ -291,7 +291,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { const conduitController = await ConduitController.new(); const seaport = await Seaport.new(conduitController.address) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, [], accounts[0]); const buyerLocal1 = accounts[2]; await erc721.mint(seller, tokenId) @@ -375,7 +375,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { const conduitController = await ConduitController.new(); const seaport = await Seaport.new(conduitController.address) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, [], accounts[0]); const buyerLocal1 = accounts[2]; await erc721.mint(seller, tokenId) @@ -437,7 +437,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { const conduitController = await ConduitController.new(); const seaport = await Seaport.new(conduitController.address) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, [], accounts[0]); const buyerLocal1 = accounts[2]; await erc721.mint(seller, tokenId) @@ -521,7 +521,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { const conduitController = await ConduitController.new(); const seaport = await Seaport.new(conduitController.address) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, [], accounts[0]); const buyerLocal1 = accounts[2]; await erc721.mint(seller, tokenId) @@ -583,7 +583,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { const conduitController = await ConduitController.new(); const seaport = await Seaport.new(conduitController.address) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, [], accounts[0]); const buyerLocal1 = accounts[2]; await erc721.mint(seller, tokenId) @@ -667,7 +667,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { const conduitController = await ConduitController.new(); const seaport = await Seaport.new(conduitController.address) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, [], accounts[0]); const buyerLocal1 = accounts[2]; await erc721.mint(seller, tokenId) @@ -729,7 +729,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { const conduitController = await ConduitController.new(); const seaport = await Seaport.new(conduitController.address) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, [], accounts[0]); const buyerLocal1 = accounts[2]; await erc721.mint(seller, tokenId) @@ -841,7 +841,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { await erc721.mint(seller3, erc721TokenIdLocal3); await erc721.setApprovalForAll(await wyvernProxyRegistry.proxies(seller3), true, {from: seller3}); - bulkExchange = await ExchangeBulkV2.new([openSea.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([openSea.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); const matchData = (await getOpenSeaMatchDataMerkleValidator( openSea.address, @@ -947,7 +947,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { await erc1155.mint(seller3, erc1155TokenIdLocal3, 10); await erc1155.setApprovalForAll(await wyvernProxyRegistry.proxies(seller3), true, {from: seller3}); - bulkExchange = await ExchangeBulkV2.new([openSea.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([openSea.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); const matchData = (await getOpenSeaMatchDataMerkleValidator1155( openSea.address, @@ -1050,7 +1050,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { await deployRarible() - bulkExchange = await ExchangeBulkV2.new([openSea.address, exchangeV2.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([openSea.address, exchangeV2.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); const matchData = (await getOpenSeaMatchDataMerkleValidator1155( openSea.address, @@ -1138,7 +1138,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { await erc721.setApprovalForAll(transferProxy.address, true, {from: seller1}); await deployRarible() - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, exchangeV2.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, exchangeV2.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); const encDataLeft = await encDataV2([[], [], false]); const encDataRight = await encDataV2([[[buyer, 10000]], [], false]); @@ -1188,7 +1188,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { await erc1155.setApprovalForAll(transferProxy.address, true, {from: seller3}); await deployRarible() - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, exchangeV2.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, exchangeV2.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); //NB!!! set buyer in payouts const encDataLeft = await encDataV2([[], [], false]); @@ -1317,7 +1317,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { await erc721.mint(seller2, erc721TokenIdLocal2); await erc721.setApprovalForAll(await wyvernProxyRegistry.proxies(seller2), true, {from: seller2}); - bulkExchange = await ExchangeBulkV2.new([openSea.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([openSea.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); //for first order const matchData = (await getOpenSeaMatchDataMerkleValidator( openSea.address, @@ -1391,7 +1391,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { await erc1155.mint(seller1, erc1155TokenIdLocal1, 10); await erc1155.setApprovalForAll(await wyvernProxyRegistry.proxies(seller1), true, {from: seller1}); - bulkExchange = await ExchangeBulkV2.new([openSea.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([openSea.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); const matchData = (await getOpenSeaMatchDataMerkleValidator1155( openSea.address, @@ -1448,7 +1448,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { const lr_strategy = await LooksRareTestHelper.new(0); await lr_executionManager.addStrategy(lr_strategy.address); - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, looksRareExchange.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, looksRareExchange.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); await erc721.mint(seller, tokenId) await erc721.setApprovalForAll(transferManagerERC721.address, true, {from: seller}); @@ -1528,7 +1528,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { const lr_strategy = await LooksRareTestHelper.new(0); await lr_executionManager.addStrategy(lr_strategy.address); - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, looksRareExchange.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, looksRareExchange.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); await erc1155.mint(seller, tokenId, 10) await erc1155.setApprovalForAll(transferManagerERC1155.address, true, {from: seller}); @@ -1586,7 +1586,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { await erc721delegate.grantRole("0x7630198b183b603be5df16e380207195f2a065102b113930ccb600feaf615331", x2y2.address); await x2y2.updateDelegates([erc721delegate.address], []) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, x2y2.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, x2y2.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); await erc721.mint(seller, tokenId) await erc721.setApprovalForAll(erc721delegate.address, true, {from: seller}) @@ -1671,7 +1671,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { await erc1155delegate.grantRole("0x7630198b183b603be5df16e380207195f2a065102b113930ccb600feaf615331", x2y2.address); await x2y2.updateDelegates([erc1155delegate.address], []) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, x2y2.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, x2y2.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); const amount = 5; await erc1155.mint(seller, tokenId, amount) @@ -1770,7 +1770,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { await erc721delegate.grantRole("0x7630198b183b603be5df16e380207195f2a065102b113930ccb600feaf615331", x2y2.address); await x2y2.updateDelegates([erc721delegate.address], []) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, x2y2.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, x2y2.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); await erc721.mint(seller, tokenId) await erc721.setApprovalForAll(erc721delegate.address, true, {from: seller}) @@ -1899,7 +1899,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { ] const tradeData = PurchaseData(5, 1105, 0, await wrapperHelper.encodeSudoSwapCall(...input)) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, router.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, router.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); const tx = await bulkExchange.singlePurchase(tradeData, ZERO_ADDRESS, ZERO_ADDRESS, {from: buyer, value: 1105}) @@ -1983,7 +1983,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { const tradeData = PurchaseData(5, 1105, await encodeDataTypeAndFees(1, 1000, 0), dataPlusAdditionalRoyalties) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, router.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, router.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); //2 different royalties recipients + return change Back, gas == 160307 //1 royalties recipients, gas == 144025 @@ -2077,7 +2077,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { const data = await wrapperHelper.encodeLooksRareV2Call(input.takerBid, input.makerAsk, input.makerSignature, input.merkleTree, input.affiliate) const tradeData = PurchaseData(7, 1000, await encodeCurrencyAndDataTypeAndFees(0, 0, 1500, 500), data) - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, looksRareProtocol.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, looksRareProtocol.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); await verifyBalanceChangeReturnTx(web3, buyer, 1200, async () => verifyBalanceChangeReturnTx(web3, seller, -995, async () => @@ -2120,7 +2120,7 @@ contract("RaribleExchangeWrapper signle purchase cases", accounts => { await executionDelegate.approveContract(blurExchange.address) //deploy wrapper - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, blurExchange.address, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, []); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, blurExchange.address, ZERO_ADDRESS, ZERO_ADDRESS], ZERO_ADDRESS, [], accounts[0]); //mint NFT await erc721.mint(seller, tokenId) diff --git a/projects/exchange-wrapper/test/bulk.test.js b/projects/exchange-wrapper/test/bulk.test.js index 8d5124c4e..99520a961 100644 --- a/projects/exchange-wrapper/test/bulk.test.js +++ b/projects/exchange-wrapper/test/bulk.test.js @@ -169,7 +169,7 @@ contract("RaribleExchangeWrapper default cases", accounts => { await factorySudoSwap.setBondingCurveAllowed(lin.address, true) // deploying wrapper - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, exchangeV2.address, seaport.address, x2y2.address, looksRareExchange.address, routerSudoSwap.address, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, []) + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, exchangeV2.address, seaport.address, x2y2.address, looksRareExchange.address, routerSudoSwap.address, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], ZERO_ADDRESS, [], accounts[0]) }); describe ("batch orders", () => { diff --git a/projects/exchange-wrapper/test/wrapper-weth.test.js b/projects/exchange-wrapper/test/wrapper-weth.test.js index ec5f3f8b4..c6b654306 100644 --- a/projects/exchange-wrapper/test/wrapper-weth.test.js +++ b/projects/exchange-wrapper/test/wrapper-weth.test.js @@ -94,7 +94,7 @@ contract("RaribleExchangeWrapper WETH purchases", accounts => { weth = await WETH9.new(); //deploy wrapper - bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, exchangeV2.address, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], weth.address, [erc20TransferProxy.address, seaport.address]); + bulkExchange = await ExchangeBulkV2.new([ZERO_ADDRESS, exchangeV2.address, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, ZERO_ADDRESS, ZERO_ADDRESS, seaport.address, seaport.address], weth.address, [erc20TransferProxy.address, seaport.address], accounts[0]); }) it("WETH: single purchase from exchangeV2", async () => { diff --git a/projects/gas-usage-tests/test/marketplaces.test.js b/projects/gas-usage-tests/test/marketplaces.test.js index 65a1fec32..b28314550 100644 --- a/projects/gas-usage-tests/test/marketplaces.test.js +++ b/projects/gas-usage-tests/test/marketplaces.test.js @@ -114,7 +114,7 @@ contract("Test gas usage for marketplaces", accounts => { const royaltyEngine = await RoyaltyEngineV1.new(); await royaltyEngine.initialize(royaltyRegistry.address) - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; const erc20 = await TestERC20.new(); // Deploy Asks v1.1 @@ -169,7 +169,7 @@ contract("Test gas usage for marketplaces", accounts => { const royaltyEngine = await RoyaltyEngineV1.new(); await royaltyEngine.initialize(royaltyRegistry.address) - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; const erc20 = await TestERC20.new(); const offers = await OffersV1.new(erc20TransferHelper.address, erc721TransferHelper.address, royaltyEngine.address, ZPFS.address, erc20.address); @@ -221,7 +221,7 @@ contract("Test gas usage for marketplaces", accounts => { const royaltyEngine = await RoyaltyEngineV1.new(); await royaltyEngine.initialize(royaltyRegistry.address) - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; const erc20 = await TestERC20.new(); // Deploy Asks v1.1 @@ -293,7 +293,7 @@ contract("Test gas usage for marketplaces", accounts => { const royaltyEngine = await RoyaltyEngineV1.new(); await royaltyEngine.initialize(royaltyRegistry.address) - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; const erc20 = await TestERC20.new(); const offers = await OffersV1.new(erc20TransferHelper.address, erc721TransferHelper.address, royaltyEngine.address, ZPFS.address, erc20.address); @@ -353,7 +353,7 @@ contract("Test gas usage for marketplaces", accounts => { const royaltiesRegistry = await RoyaltiesRegistry.new(); await exchangeV2.__ExchangeV2_init(transferProxy.address, erc20TransferProxy.address, 0, protocol, royaltiesRegistry.address); - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; //TEST-CASE 1: ETH <=> ERC721 await token.mint(seller, tokenId) @@ -432,7 +432,7 @@ contract("Test gas usage for marketplaces", accounts => { const royaltiesRegistry = await RoyaltiesRegistry.new(); await exchangeV2.__ExchangeV2_init(transferProxy.address, erc20TransferProxy.address, protocolFeeBP, protocol, royaltiesRegistry.address); - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; const erc20 = await TestERC20.new(); //TEST-CASE 1: ERC20 <=> ERC721 @@ -532,7 +532,7 @@ contract("Test gas usage for marketplaces", accounts => { const royaltiesRegistry = await RoyaltiesRegistry.new(); await exchangeV2.__ExchangeV2_init(transferProxy.address, erc20TransferProxy.address, protocolFeeBP, protocol, royaltiesRegistry.address); - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; //TEST-CASE 1: ETH <=> ERC721 await token.mint(seller, tokenId) @@ -588,7 +588,7 @@ contract("Test gas usage for marketplaces", accounts => { const royaltiesRegistry = await RoyaltiesRegistry.new(); await exchangeV2.__ExchangeV2_init(transferProxy.address, erc20TransferProxy.address, protocolFeeBP, protocol, royaltiesRegistry.address); - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; const erc20 = await TestERC20.new(); //TEST-CASE 1: ERC20 <=> ERC721 @@ -634,7 +634,7 @@ contract("Test gas usage for marketplaces", accounts => { }) it("openSea ETH", async () => { - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; const erc20 = await TestERC20.new(); const wyvernProxyRegistry = await WyvernProxyRegistry.new(); @@ -669,7 +669,7 @@ contract("Test gas usage for marketplaces", accounts => { }) it("openSea ERC20", async () => { - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; const erc20 = await TestERC20.new(); const wyvernProxyRegistry = await WyvernProxyRegistry.new(); @@ -734,7 +734,7 @@ contract("Test gas usage for marketplaces", accounts => { const conduitController = await ConduitController.new(); const seaport = await Seaport.new(conduitController.address) - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; await token.mint(seller, tokenId) await token.setApprovalForAll(seaport.address, true, {from: seller}) @@ -779,7 +779,7 @@ contract("Test gas usage for marketplaces", accounts => { const conduitController = await ConduitController.new(); const seaport = await Seaport.new(conduitController.address) - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; await token.mint(seller, tokenId) await token.setApprovalForAll(seaport.address, true, {from: seller}) @@ -840,7 +840,7 @@ contract("Test gas usage for marketplaces", accounts => { await erc721delegate.grantRole("0x7630198b183b603be5df16e380207195f2a065102b113930ccb600feaf615331", x2y2.address); await x2y2.updateDelegates([erc721delegate.address], []) - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; await token.mint(seller, tokenId) await token.setApprovalForAll(erc721delegate.address, true, {from: seller}) const tokenDataToEncode = [ @@ -1045,7 +1045,7 @@ contract("Test gas usage for marketplaces", accounts => { await factory.setBondingCurveAllowed(exp.address, true) await factory.setBondingCurveAllowed(lin.address, true) - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; await token.mint(seller, tokenId) await token.setApprovalForAll(factory.address, true, {from: seller}) @@ -1116,7 +1116,7 @@ contract("Test gas usage for marketplaces", accounts => { await looksRareProtocol.addStrategy(50, 50, 200, "0x7e897147", true, strategyCollectionOffer.address) //mint NFT - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; await token.mint(seller, tokenId) await token.setApprovalForAll(transferManager.address, true, {from: seller}) await transferManager.grantApprovals([looksRareProtocol.address], {from: seller}) @@ -1237,7 +1237,7 @@ it("blur V2 ETH", async () => { await executionDelegate.approveContract(blurExchange.address) //mint NFT - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI");; await token.mint(seller, tokenId) await token.setApprovalForAll(executionDelegate.address, true, {from: seller}) diff --git a/projects/gas-usage-tests/test/rarible.test.js b/projects/gas-usage-tests/test/rarible.test.js index bcb5b979b..a71572546 100644 --- a/projects/gas-usage-tests/test/rarible.test.js +++ b/projects/gas-usage-tests/test/rarible.test.js @@ -74,7 +74,7 @@ contract("rarible only gas usage tests", accounts => { }); it("NEW + OLD: cancel()", async () => { - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI"); let encDataRight = await encDataV3_SELL([await LibPartToUint(seller, 10000), await LibPartToUint(), 0, 1000, MARKET_MARKER_SELL]); @@ -89,7 +89,7 @@ contract("rarible only gas usage tests", accounts => { it("RARIBLE NEW: ETH ROYALTIES = SELLER", async () => { - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI"); const nftAmount = 1; await token.mint(seller, tokenId1) await token.setApprovalForAll(transferProxy.address, true, { from: seller }) @@ -142,7 +142,7 @@ contract("rarible only gas usage tests", accounts => { }) it("RARIBLE NEW: ETH ROYALTIES != SELLER", async () => { - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI"); const nftAmount = 1; await token.mint(seller, tokenId1) await token.setApprovalForAll(transferProxy.address, true, { from: seller }) @@ -196,7 +196,7 @@ contract("rarible only gas usage tests", accounts => { }) it("RARIBLE NEW matchOrders(): ETH ROYALTIES != SELLER", async () => { - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI"); await token.mint(seller, tokenId1) await token.setApprovalForAll(transferProxy.address, true, { from: seller }) @@ -230,7 +230,7 @@ contract("rarible only gas usage tests", accounts => { }) it("RARIBLE OLD: ETH", async () => { - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI"); await token.mint(seller, tokenId1) await token.setApprovalForAll(transferProxy.address, true, { from: seller }) @@ -259,7 +259,7 @@ contract("rarible only gas usage tests", accounts => { }) it("RARIBLE NEW: ERC-20 ROYALTIES = SELLER", async () => { - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI"); const erc20 = await TestERC20.new(); const nftAmount = 1; await erc20.mint(buyer, price) @@ -314,7 +314,7 @@ contract("rarible only gas usage tests", accounts => { }) it("RARIBLE NEW: ERC-20 ROYALTIES != SELLER", async () => { - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI"); const erc20 = await TestERC20.new(); const nftAmount = 1; await erc20.mint(buyer, price) @@ -370,7 +370,7 @@ contract("rarible only gas usage tests", accounts => { }) it("RARIBLE OLD: ERC-20 ROYALTIES = SELLER", async () => { - const token = await TestERC721.new(); + const token = await TestERC721.new("Rarible", "RARI"); const erc20 = await TestERC20.new(); await erc20.mint(buyer, 1030) diff --git a/projects/tokens/test/erc-1155/ERC1155Rarible.test.js b/projects/tokens/test/erc-1155/ERC1155Rarible.test.js index 7464503cc..a898896e1 100644 --- a/projects/tokens/test/erc-1155/ERC1155Rarible.test.js +++ b/projects/tokens/test/erc-1155/ERC1155Rarible.test.js @@ -685,7 +685,7 @@ contract("ERC1155Rarible", accounts => { it("mint and transfer by minter, token create by Factory", async () => { transferProxy = await TransferProxyTest.new(); beacon = await UpgradeableBeacon.new(token.address); - factory = await ERC1155RaribleFactoryC2.new(beacon.address, transferProxy.address, proxyLazy.address); + factory = await ERC1155RaribleFactoryC2.new(beacon.address, transferProxy.address, proxyLazy.address, accounts[0]); const salt = 3; const addressBeforeDeploy = await factory.getAddress(name, "TSA", "ipfs:/", "ipfs:/", salt) @@ -740,7 +740,7 @@ contract("ERC1155Rarible", accounts => { it("checkPrefix should work correctly, checks for duplicating of the base part of the uri ", async () => { beacon = await UpgradeableBeacon.new(token.address); - factory = await ERC1155RaribleFactoryC2.new(beacon.address, transferProxy.address, proxyLazy.address); + factory = await ERC1155RaribleFactoryC2.new(beacon.address, transferProxy.address, proxyLazy.address, accounts[0]); const baseURI = "https://ipfs.rarible.com" const resultCreateToken = await factory.methods['createToken(string,string,string,string,uint256)']("name", "RARI", baseURI, "https://ipfs.rarible.com", 1, {from: tokenOwner}); truffleAssert.eventEmitted(resultCreateToken, 'Create1155RaribleProxy', (ev) => { diff --git a/projects/tokens/test/erc-1155/ERC1155RaribleUser.test.js b/projects/tokens/test/erc-1155/ERC1155RaribleUser.test.js index 1026da3fb..e2fd4473d 100644 --- a/projects/tokens/test/erc-1155/ERC1155RaribleUser.test.js +++ b/projects/tokens/test/erc-1155/ERC1155RaribleUser.test.js @@ -36,7 +36,7 @@ contract("ERC1155RaribleUser", accounts => { it("mint and transfer by minter, token create by Factory", async () => { beacon = await UpgradeableBeacon.new(token.address); - factory = await ERC1155RaribleUserFactoryC2.new(beacon.address, ZERO, ZERO); + factory = await ERC1155RaribleUserFactoryC2.new(beacon.address, ZERO, ZERO, accounts[0]); const salt = 3; const addressBeforeDeploy = await factory.getAddress(name, "TST", "ipfs:/", "ipfs:/", [], salt) diff --git a/projects/tokens/test/erc-721-minimal/ERC721Factories.test.js b/projects/tokens/test/erc-721-minimal/ERC721Factories.test.js index ef57bd158..375642146 100644 --- a/projects/tokens/test/erc-721-minimal/ERC721Factories.test.js +++ b/projects/tokens/test/erc-721-minimal/ERC721Factories.test.js @@ -16,7 +16,7 @@ contract("Test factories minimal", accounts => { before(async () => { const impl = await ERC721RaribleMinimal.new(); const beacon = await UpgradeableBeacon.new(impl.address); - factory = await ERC721RaribleFactoryC2.new(beacon.address, zeroAddress, zeroAddress); + factory = await ERC721RaribleFactoryC2.new(beacon.address, zeroAddress, zeroAddress, accounts[0]); }) it("should create erc721 private from factory, getAddress works correctly", async () => { diff --git a/projects/tokens/test/erc-721-minimal/Rarible.test.js b/projects/tokens/test/erc-721-minimal/Rarible.test.js index 488998c71..0d1c6ce7d 100644 --- a/projects/tokens/test/erc-721-minimal/Rarible.test.js +++ b/projects/tokens/test/erc-721-minimal/Rarible.test.js @@ -105,7 +105,7 @@ contract("ERC721Rarible minimal", accounts => { it("mint and transfer by minter, and token created by ERC721Factory ", async () => { beacon = await UpgradeableBeacon.new(token.address); - factory = await ERC721Factory.new(beacon.address, transferProxy.address, proxyLazy.address); + factory = await ERC721Factory.new(beacon.address, transferProxy.address, proxyLazy.address, accounts[0]); resultCreateToken = await factory.methods['createToken(string,string,string,string,uint256)']("name", "RARI", "https://ipfs.rarible.com", "https://ipfs.rarible.com", 1, {from: tokenOwner}); truffleAssert.eventEmitted(resultCreateToken, 'Create721RaribleProxy', (ev) => { proxy = ev.proxy; @@ -129,7 +129,7 @@ contract("ERC721Rarible minimal", accounts => { it("checkPrefix should work correctly, checks for duplicating of the base part of the uri ", async () => { beacon = await UpgradeableBeacon.new(token.address); - factory = await ERC721Factory.new(beacon.address, transferProxy.address, proxyLazy.address); + factory = await ERC721Factory.new(beacon.address, transferProxy.address, proxyLazy.address, accounts[0]); const baseURI = "https://ipfs.rarible.com" const resultCreateToken = await factory.methods['createToken(string,string,string,string,uint256)']("name", "RARI", baseURI, "https://ipfs.rarible.com", 1, {from: tokenOwner}); truffleAssert.eventEmitted(resultCreateToken, 'Create721RaribleProxy', (ev) => { diff --git a/projects/tokens/test/erc-721/Rarible.test.js b/projects/tokens/test/erc-721/Rarible.test.js index 45f4cd6fa..3f29a697d 100644 --- a/projects/tokens/test/erc-721/Rarible.test.js +++ b/projects/tokens/test/erc-721/Rarible.test.js @@ -115,7 +115,7 @@ contract("ERC721Rarible", accounts => { it("mint and transfer by minter, and token created by ERC721Factory ", async () => { beacon = await UpgradeableBeacon.new(token.address); - factory = await ERC721Factory.new(beacon.address, transferProxy.address, proxyLazy.address); + factory = await ERC721Factory.new(beacon.address, transferProxy.address, proxyLazy.address, accounts[0]); const resultCreateToken = await factory.methods['createToken(string,string,string,string,uint256)']("name", "RARI", "https://ipfs.rarible.com", "https://ipfs.rarible.com", 1, {from: tokenOwner}); truffleAssert.eventEmitted(resultCreateToken, 'Create721RaribleProxy', (ev) => { proxy = ev.proxy; @@ -139,7 +139,7 @@ contract("ERC721Rarible", accounts => { it("checkPrefix should work correctly, checks for duplicating of the base part of the uri ", async () => { beacon = await UpgradeableBeacon.new(token.address); - factory = await ERC721Factory.new(beacon.address, transferProxy.address, proxyLazy.address); + factory = await ERC721Factory.new(beacon.address, transferProxy.address, proxyLazy.address, accounts[0]); const baseURI = "https://ipfs.rarible.com" const resultCreateToken = await factory.methods['createToken(string,string,string,string,uint256)']("name", "RARI", baseURI, "https://ipfs.rarible.com", 1, {from: tokenOwner}); truffleAssert.eventEmitted(resultCreateToken, 'Create721RaribleProxy', (ev) => { From c6160422dee47009b08f3f2452ef2c020a83efa5 Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Sat, 4 May 2024 16:09:10 +0100 Subject: [PATCH 10/25] Feature/pt 5315 3dweb query (#285) * feat: add proxy 3dweb reader + modify deploy to support initial owner for admin proxy --- projects/deploy-utils/src/utils.ts | 4 +- projects/hardhat-deploy/README.md | 2 +- .../deploy/000_deploy_DefaultProxyAdmin.ts | 27 - .../deploy/001_deploy_RoyaltiesRegistry.ts | 1 + ...003_deploy_ExchangeV2_CollectionMatcher.ts | 1 + .../004_deploy_erc721_Token_and_Factory.ts | 1 + .../005_deploy_erc1155_Token_and_Factory.ts | 1 + .../camp_sepolia/AssetMatcherCollection.json | 12 +- .../camp_sepolia/DefaultProxyAdmin.json | 26 +- .../ERC1155LazyMintTransferProxy.json | 12 +- .../ERC1155RaribleBeaconMeta.json | 34 +- .../camp_sepolia/ERC1155RaribleFactoryC2.json | 38 +- .../camp_sepolia/ERC1155RaribleMeta.json | 92 +-- .../ERC1155RaribleMeta_Implementation.json | 12 +- .../ERC1155RaribleMeta_Proxy.json | 86 +-- .../camp_sepolia/ERC20TransferProxy.json | 12 +- .../ERC721LazyMintTransferProxy.json | 10 +- .../camp_sepolia/ERC721RaribleFactoryC2.json | 36 +- .../camp_sepolia/ERC721RaribleMeta.json | 92 +-- .../ERC721RaribleMeta_Implementation.json | 12 +- .../camp_sepolia/ERC721RaribleMeta_Proxy.json | 86 +-- .../ERC721RaribleMinimalBeaconMeta.json | 32 +- .../camp_sepolia/ExchangeMetaV2.json | 102 +-- .../ExchangeMetaV2_Implementation.json | 12 +- .../camp_sepolia/ExchangeMetaV2_Proxy.json | 88 +-- .../camp_sepolia/RaribleExchangeWrapper.json | 34 +- .../camp_sepolia/RoyaltiesRegistry.json | 56 +- .../RoyaltiesRegistry_Implementation.json | 12 +- .../camp_sepolia/RoyaltiesRegistry_Proxy.json | 54 +- .../camp_sepolia/TransferProxy.json | 12 +- .../lisk_sepolia/AssetMatcherCollection.json | 12 +- .../lisk_sepolia/DefaultProxyAdmin.json | 24 +- .../ERC1155LazyMintTransferProxy.json | 12 +- .../ERC1155RaribleBeaconMeta.json | 34 +- .../lisk_sepolia/ERC1155RaribleFactoryC2.json | 38 +- .../lisk_sepolia/ERC1155RaribleMeta.json | 92 +-- .../ERC1155RaribleMeta_Implementation.json | 12 +- .../ERC1155RaribleMeta_Proxy.json | 86 +-- .../lisk_sepolia/ERC20TransferProxy.json | 10 +- .../ERC721LazyMintTransferProxy.json | 12 +- .../lisk_sepolia/ERC721RaribleFactoryC2.json | 36 +- .../lisk_sepolia/ERC721RaribleMeta.json | 92 +-- .../ERC721RaribleMeta_Implementation.json | 12 +- .../lisk_sepolia/ERC721RaribleMeta_Proxy.json | 86 +-- .../ERC721RaribleMinimalBeaconMeta.json | 34 +- .../lisk_sepolia/ExchangeMetaV2.json | 102 +-- .../ExchangeMetaV2_Implementation.json | 12 +- .../lisk_sepolia/ExchangeMetaV2_Proxy.json | 88 +-- .../lisk_sepolia/RaribleExchangeWrapper.json | 34 +- .../lisk_sepolia/RoyaltiesRegistry.json | 56 +- .../RoyaltiesRegistry_Implementation.json | 12 +- .../lisk_sepolia/RoyaltiesRegistry_Proxy.json | 54 +- .../lisk_sepolia/TransferProxy.json | 12 +- .../sepolia/AssetMatcherCollection.json | 14 +- .../sepolia/DefaultProxyAdmin.json | 32 +- .../sepolia/ERC1155LazyMintTransferProxy.json | 14 +- .../deployments/sepolia/ERC1155Rarible.json | 122 ++-- .../sepolia/ERC1155RaribleBeacon.json | 42 +- .../sepolia/ERC1155RaribleFactoryC2.json | 48 +- .../ERC1155Rarible_Implementation.json | 14 +- .../sepolia/ERC1155Rarible_Proxy.json | 116 ++-- .../sepolia/ERC20TransferProxy.json | 14 +- .../sepolia/ERC721LazyMintTransferProxy.json | 14 +- .../sepolia/ERC721RaribleFactoryC2.json | 46 +- .../sepolia/ERC721RaribleMinimal.json | 120 ++-- .../sepolia/ERC721RaribleMinimalBeacon.json | 42 +- .../ERC721RaribleMinimal_Implementation.json | 14 +- .../sepolia/ERC721RaribleMinimal_Proxy.json | 114 ++-- .../deployments/sepolia/ExchangeV2.json | 132 ++-- .../sepolia/ExchangeV2_Implementation.json | 14 +- .../deployments/sepolia/ExchangeV2_Proxy.json | 118 ++-- .../sepolia/RaribleExchangeWrapper.json | 58 +- .../sepolia/RoyaltiesRegistry.json | 74 +-- .../RoyaltiesRegistry_Implementation.json | 14 +- .../sepolia/RoyaltiesRegistry_Proxy.json | 72 +-- .../deployments/sepolia/TransferProxy.json | 14 +- projects/hardhat-deploy/hardhat.config.ts | 2 +- projects/hardhat-deploy/package.json | 3 +- projects/hardhat-deploy/tsconfig.json | 1 + projects/thridweb-query/.eslintignore | 13 + projects/thridweb-query/README.md | 11 + .../drop-reader/DropERC721Reader.sol | 117 ++++ .../contracts/drop-reader/IDropERC721.sol | 48 ++ .../deploy/006_deploy_ThirdwebReader.ts | 35 ++ .../deployments/polygon_mainnet/.chainId | 1 + .../polygon_mainnet/DefaultProxyAdmin.json | 274 ++++++++ .../polygon_mainnet/DropERC721Reader.json | 585 ++++++++++++++++++ .../DropERC721Reader_Implementation.json | 443 +++++++++++++ .../DropERC721Reader_Proxy.json | 290 +++++++++ .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 +++++ .../a04eb453fca4038b91c2157203390840.json | 56 ++ .../deployments/sepolia/.chainId | 1 + .../sepolia/DefaultProxyAdmin.json | 228 +++++++ .../deployments/sepolia/DropERC721Reader.json | 570 +++++++++++++++++ .../DropERC721Reader_Implementation.json | 427 +++++++++++++ .../sepolia/DropERC721Reader_Proxy.json | 275 ++++++++ .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 +++++ .../a04eb453fca4038b91c2157203390840.json | 56 ++ .../deployments/xai_sepolia_testnet/.chainId | 1 + .../DefaultProxyAdmin.json | 228 +++++++ .../xai_sepolia_testnet/DropERC721Reader.json | 570 +++++++++++++++++ .../DropERC721Reader_Implementation.json | 427 +++++++++++++ .../DropERC721Reader_Proxy.json | 275 ++++++++ .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 +++++ .../a04eb453fca4038b91c2157203390840.json | 56 ++ projects/thridweb-query/fix-interface.sh | 33 + projects/thridweb-query/hardhat.config.ts | 41 ++ projects/thridweb-query/package.json | 83 +++ projects/thridweb-query/scripts/deploy.ts | 32 + .../thridweb-query/test/DropErc721Reader.ts | 136 ++++ projects/thridweb-query/tsconfig.json | 16 + .../utils/get-claim-illegebility.ts | 152 +++++ .../thridweb-query/utils/get-drop-data.ts | 60 ++ projects/thridweb-query/utils/utils.ts | 98 +++ yarn.lock | 309 ++++++++- 115 files changed, 7975 insertions(+), 1630 deletions(-) delete mode 100644 projects/hardhat-deploy/deploy/000_deploy_DefaultProxyAdmin.ts create mode 100644 projects/thridweb-query/.eslintignore create mode 100644 projects/thridweb-query/README.md create mode 100644 projects/thridweb-query/contracts/drop-reader/DropERC721Reader.sol create mode 100644 projects/thridweb-query/contracts/drop-reader/IDropERC721.sol create mode 100644 projects/thridweb-query/deploy/006_deploy_ThirdwebReader.ts create mode 100644 projects/thridweb-query/deployments/polygon_mainnet/.chainId create mode 100644 projects/thridweb-query/deployments/polygon_mainnet/DefaultProxyAdmin.json create mode 100644 projects/thridweb-query/deployments/polygon_mainnet/DropERC721Reader.json create mode 100644 projects/thridweb-query/deployments/polygon_mainnet/DropERC721Reader_Implementation.json create mode 100644 projects/thridweb-query/deployments/polygon_mainnet/DropERC721Reader_Proxy.json create mode 100644 projects/thridweb-query/deployments/polygon_mainnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json create mode 100644 projects/thridweb-query/deployments/polygon_mainnet/solcInputs/a04eb453fca4038b91c2157203390840.json create mode 100644 projects/thridweb-query/deployments/sepolia/.chainId create mode 100644 projects/thridweb-query/deployments/sepolia/DefaultProxyAdmin.json create mode 100644 projects/thridweb-query/deployments/sepolia/DropERC721Reader.json create mode 100644 projects/thridweb-query/deployments/sepolia/DropERC721Reader_Implementation.json create mode 100644 projects/thridweb-query/deployments/sepolia/DropERC721Reader_Proxy.json create mode 100644 projects/thridweb-query/deployments/sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json create mode 100644 projects/thridweb-query/deployments/sepolia/solcInputs/a04eb453fca4038b91c2157203390840.json create mode 100644 projects/thridweb-query/deployments/xai_sepolia_testnet/.chainId create mode 100644 projects/thridweb-query/deployments/xai_sepolia_testnet/DefaultProxyAdmin.json create mode 100644 projects/thridweb-query/deployments/xai_sepolia_testnet/DropERC721Reader.json create mode 100644 projects/thridweb-query/deployments/xai_sepolia_testnet/DropERC721Reader_Implementation.json create mode 100644 projects/thridweb-query/deployments/xai_sepolia_testnet/DropERC721Reader_Proxy.json create mode 100644 projects/thridweb-query/deployments/xai_sepolia_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json create mode 100644 projects/thridweb-query/deployments/xai_sepolia_testnet/solcInputs/a04eb453fca4038b91c2157203390840.json create mode 100755 projects/thridweb-query/fix-interface.sh create mode 100644 projects/thridweb-query/hardhat.config.ts create mode 100644 projects/thridweb-query/package.json create mode 100644 projects/thridweb-query/scripts/deploy.ts create mode 100644 projects/thridweb-query/test/DropErc721Reader.ts create mode 100644 projects/thridweb-query/tsconfig.json create mode 100644 projects/thridweb-query/utils/get-claim-illegebility.ts create mode 100644 projects/thridweb-query/utils/get-drop-data.ts create mode 100644 projects/thridweb-query/utils/utils.ts diff --git a/projects/deploy-utils/src/utils.ts b/projects/deploy-utils/src/utils.ts index facec8639..5b8885c02 100644 --- a/projects/deploy-utils/src/utils.ts +++ b/projects/deploy-utils/src/utils.ts @@ -75,11 +75,11 @@ export function createNetwork(name: string): HttpNetworkUserConfig { // if not frame return { from: json.address, - gasPrice: "auto", + gasPrice: json.gasPrice || "auto", chainId: parseInt(json.network_id), url: json.url || "", accounts: [json.key], - gas: 5000000, + gas: json.gas || 5000000, saveDeployments: true, verify: json.verify ? { diff --git a/projects/hardhat-deploy/README.md b/projects/hardhat-deploy/README.md index ef34ada39..908d60d93 100644 --- a/projects/hardhat-deploy/README.md +++ b/projects/hardhat-deploy/README.md @@ -17,4 +17,4 @@ to do integration tests of contracts to deploy: npx hardhat test ``` -salt used DETERMENISTIC_DEPLOYMENT_SALT=0x1115 \ No newline at end of file +salt used DETERMENISTIC_DEPLOYMENT_SALT=0x1118 \ No newline at end of file diff --git a/projects/hardhat-deploy/deploy/000_deploy_DefaultProxyAdmin.ts b/projects/hardhat-deploy/deploy/000_deploy_DefaultProxyAdmin.ts deleted file mode 100644 index 165422f38..000000000 --- a/projects/hardhat-deploy/deploy/000_deploy_DefaultProxyAdmin.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { DeployFunction } from 'hardhat-deploy/types'; -import { getOwner } from './utils'; - -const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { - - console.log(`deploying contracts on network ${hre.network.name}`) - - const { deploy } = hre.deployments; - const { deployer } = await hre.getNamedAccounts(); - const owner = await getOwner(hre); - console.log("deploying contracts with the account:", deployer); - if(deployer != owner) { - await deploy('DefaultProxyAdmin', { - from: deployer, - args: [owner], - log: true, - autoMine: true, - deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, - skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, - }); - } - - -}; -export default func; -func.tags = ['all', "000"]; \ No newline at end of file diff --git a/projects/hardhat-deploy/deploy/001_deploy_RoyaltiesRegistry.ts b/projects/hardhat-deploy/deploy/001_deploy_RoyaltiesRegistry.ts index a6768617d..9edad6583 100644 --- a/projects/hardhat-deploy/deploy/001_deploy_RoyaltiesRegistry.ts +++ b/projects/hardhat-deploy/deploy/001_deploy_RoyaltiesRegistry.ts @@ -21,6 +21,7 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { }, }, proxyContract: "OpenZeppelinTransparentProxy", + owner: owner }, log: true, autoMine: true, diff --git a/projects/hardhat-deploy/deploy/003_deploy_ExchangeV2_CollectionMatcher.ts b/projects/hardhat-deploy/deploy/003_deploy_ExchangeV2_CollectionMatcher.ts index 31bd6dabb..0893d6d86 100644 --- a/projects/hardhat-deploy/deploy/003_deploy_ExchangeV2_CollectionMatcher.ts +++ b/projects/hardhat-deploy/deploy/003_deploy_ExchangeV2_CollectionMatcher.ts @@ -57,6 +57,7 @@ async function deployAndSetupExchange(hre: HardhatRuntimeEnvironment, contractNa }, }, proxyContract: "OpenZeppelinTransparentProxy", + owner: owner }, log: true, autoMine: true, diff --git a/projects/hardhat-deploy/deploy/004_deploy_erc721_Token_and_Factory.ts b/projects/hardhat-deploy/deploy/004_deploy_erc721_Token_and_Factory.ts index 74c40ef71..8404a28b3 100644 --- a/projects/hardhat-deploy/deploy/004_deploy_erc721_Token_and_Factory.ts +++ b/projects/hardhat-deploy/deploy/004_deploy_erc721_Token_and_Factory.ts @@ -37,6 +37,7 @@ async function deployERC721TokenAndFactory(hre: HardhatRuntimeEnvironment, contr }, }, proxyContract: "OpenZeppelinTransparentProxy", + owner: owner }, log: true, autoMine: true, diff --git a/projects/hardhat-deploy/deploy/005_deploy_erc1155_Token_and_Factory.ts b/projects/hardhat-deploy/deploy/005_deploy_erc1155_Token_and_Factory.ts index 2030b891e..7f866a539 100644 --- a/projects/hardhat-deploy/deploy/005_deploy_erc1155_Token_and_Factory.ts +++ b/projects/hardhat-deploy/deploy/005_deploy_erc1155_Token_and_Factory.ts @@ -37,6 +37,7 @@ async function deployERC1155TokenAndFactory(hre: HardhatRuntimeEnvironment, cont }, }, proxyContract: "OpenZeppelinTransparentProxy", + owner: owner }, log: true, autoMine: true, diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/AssetMatcherCollection.json b/projects/hardhat-deploy/deployments/camp_sepolia/AssetMatcherCollection.json index d890e4972..b5b2f2e43 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/AssetMatcherCollection.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/AssetMatcherCollection.json @@ -1,5 +1,5 @@ { - "address": "0xc4F5FCD96e3b37A31f871F0968206F47294a4471", + "address": "0xc0BD7Ae193c1BD00Fa33B0E5fDCF60FF2d66EefC", "abi": [ { "inputs": [ @@ -62,7 +62,7 @@ "type": "function" } ], - "transactionHash": "0x216e3c1813dab03b674fa361fd63e35391fa5f53f98f40674da259a52630056d", + "transactionHash": "0x362018489ed6f1e1511c5bba4a79f15f557400dd07c15a54b0e5b58f971cbd20", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -70,11 +70,11 @@ "transactionIndex": 1, "gasUsed": "302853", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x4b11def1d358ccba795e22005dc6afd7db8e74f580bfe97d9a93fa99b5b9b35e", - "transactionHash": "0x216e3c1813dab03b674fa361fd63e35391fa5f53f98f40674da259a52630056d", + "blockHash": "0x85709aefcf2bb2dc2dbc64bdccf9cf5756df583829e6b3f3ce7f4208f97eb887", + "transactionHash": "0x362018489ed6f1e1511c5bba4a79f15f557400dd07c15a54b0e5b58f971cbd20", "logs": [], - "blockNumber": 2308739, - "cumulativeGasUsed": "349754", + "blockNumber": 2594154, + "cumulativeGasUsed": "349742", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/DefaultProxyAdmin.json b/projects/hardhat-deploy/deployments/camp_sepolia/DefaultProxyAdmin.json index 25352bc97..08d2a0b31 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/DefaultProxyAdmin.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/DefaultProxyAdmin.json @@ -1,5 +1,5 @@ { - "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "address": "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", "abi": [ { "inputs": [ @@ -162,39 +162,39 @@ "type": "function" } ], - "transactionHash": "0x23e5a9e8f3502029331a3c5ac857e67a52f80839c580a14b79a07befd38de535", + "transactionHash": "0xdb384e4d08d833431f7246cb9d04a203fbb4071e41a455cd330943d8d2d29bee", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, "gasUsed": "677380", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000001000000000000020000000000000000000800000000000000000000000000000000500200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x46ed599086fa5ca3ab2b8560e1bb08c15cdcf1f5c89adac3370d198ee57a07f3", - "transactionHash": "0x23e5a9e8f3502029331a3c5ac857e67a52f80839c580a14b79a07befd38de535", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000022000004000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xf50b79ab6107070bb4cbbe23df56c75d46c41791d0e5399763db0e2db6a60e89", + "transactionHash": "0xdb384e4d08d833431f7246cb9d04a203fbb4071e41a455cd330943d8d2d29bee", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308694, - "transactionHash": "0x23e5a9e8f3502029331a3c5ac857e67a52f80839c580a14b79a07befd38de535", - "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "blockNumber": 2594109, + "transactionHash": "0xdb384e4d08d833431f7246cb9d04a203fbb4071e41a455cd330943d8d2d29bee", + "address": "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", "logIndex": 0, - "blockHash": "0x46ed599086fa5ca3ab2b8560e1bb08c15cdcf1f5c89adac3370d198ee57a07f3" + "blockHash": "0xf50b79ab6107070bb4cbbe23df56c75d46c41791d0e5399763db0e2db6a60e89" } ], - "blockNumber": 2308694, - "cumulativeGasUsed": "724281", + "blockNumber": 2594109, + "cumulativeGasUsed": "727857", "status": 1, "byzantium": true }, "args": [ - "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155LazyMintTransferProxy.json index 94ddac9d7..64a66b557 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155LazyMintTransferProxy.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155LazyMintTransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "address": "0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca", "abi": [ { "anonymous": false, @@ -160,7 +160,7 @@ "type": "function" } ], - "transactionHash": "0x70b690122df6d4fb008b37efecd0bdb2e781d0036c0030bd6cfd8334bd498b5b", + "transactionHash": "0xa41add1ce87ac1d59f68ae1c7d58131609a4d8f3939794eea16efacb60bea904", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -168,11 +168,11 @@ "transactionIndex": 1, "gasUsed": "923250", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x67fc7f1fc0dfdb8927ed26382c794336bbfc99d39be0c4b9aecc6912a7a0f02c", - "transactionHash": "0x70b690122df6d4fb008b37efecd0bdb2e781d0036c0030bd6cfd8334bd498b5b", + "blockHash": "0x7a4866e894ecd67f0102b7f2fc980f626f84d7ffa5f9b6ef903a34829ac79bfc", + "transactionHash": "0xa41add1ce87ac1d59f68ae1c7d58131609a4d8f3939794eea16efacb60bea904", "logs": [], - "blockNumber": 2308732, - "cumulativeGasUsed": "970151", + "blockNumber": 2594147, + "cumulativeGasUsed": "970139", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleBeaconMeta.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleBeaconMeta.json index dab29db24..b9e8c4515 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleBeaconMeta.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleBeaconMeta.json @@ -1,5 +1,5 @@ { - "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "address": "0xBA73297EBe019158422c726A051D3647E5E4EA7B", "abi": [ { "inputs": [ @@ -109,22 +109,22 @@ "type": "function" } ], - "transactionHash": "0xdc6bc7f37a6dbd2326afe24bdc47d4d61f1b22edbcb6a1424eac3b272052bc37", + "transactionHash": "0x24d665aff44ce713f74121d23b61e2615ec8d5d38c5c862b9b81a15d08780065", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "394703", - "logsBloom": "0x00000000000000000000000000000000000000000400800004800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa82e4c22c9e673f8621528e9d8912aa281b03e6e8098d84222b6a14c55c58254", - "transactionHash": "0xdc6bc7f37a6dbd2326afe24bdc47d4d61f1b22edbcb6a1424eac3b272052bc37", + "gasUsed": "394691", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000002000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000020000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x1e88b2c11198cd9d81f6270c963bd3c68befba846f764240e3d665471dd866fb", + "transactionHash": "0x24d665aff44ce713f74121d23b61e2615ec8d5d38c5c862b9b81a15d08780065", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308807, - "transactionHash": "0xdc6bc7f37a6dbd2326afe24bdc47d4d61f1b22edbcb6a1424eac3b272052bc37", - "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "blockNumber": 2594224, + "transactionHash": "0x24d665aff44ce713f74121d23b61e2615ec8d5d38c5c862b9b81a15d08780065", + "address": "0xBA73297EBe019158422c726A051D3647E5E4EA7B", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -132,13 +132,13 @@ ], "data": "0x", "logIndex": 0, - "blockHash": "0xa82e4c22c9e673f8621528e9d8912aa281b03e6e8098d84222b6a14c55c58254" + "blockHash": "0x1e88b2c11198cd9d81f6270c963bd3c68befba846f764240e3d665471dd866fb" }, { "transactionIndex": 1, - "blockNumber": 2308807, - "transactionHash": "0xdc6bc7f37a6dbd2326afe24bdc47d4d61f1b22edbcb6a1424eac3b272052bc37", - "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "blockNumber": 2594224, + "transactionHash": "0x24d665aff44ce713f74121d23b61e2615ec8d5d38c5c862b9b81a15d08780065", + "address": "0xBA73297EBe019158422c726A051D3647E5E4EA7B", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -146,16 +146,16 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xa82e4c22c9e673f8621528e9d8912aa281b03e6e8098d84222b6a14c55c58254" + "blockHash": "0x1e88b2c11198cd9d81f6270c963bd3c68befba846f764240e3d665471dd866fb" } ], - "blockNumber": 2308807, - "cumulativeGasUsed": "447180", + "blockNumber": 2594224, + "cumulativeGasUsed": "445168", "status": 1, "byzantium": true }, "args": [ - "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "0x00442f9Fb6a82A23A7bdDc9B0358686C41320a38", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleFactoryC2.json index 3801b37e5..1f8a454b1 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleFactoryC2.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleFactoryC2.json @@ -1,5 +1,5 @@ { - "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "address": "0x573b8748B7D3204bF60836217f63b1332E123BB1", "abi": [ { "inputs": [ @@ -273,22 +273,22 @@ "type": "function" } ], - "transactionHash": "0x6d56efa73be8833eab961574b056930be997d4aaa300578e604f5064fbd46e97", + "transactionHash": "0x87e8c117015ee486380fa390c0f262c76be7078a80510af23549ca8932dae71b", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1374604", - "logsBloom": "0x00000000000000000000000000000000008000000400800000800000000000000000000000000000000000000000000000000000000040000000004000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010", - "blockHash": "0x42472ab2210bfe514cb56ddaca1c74ad2313baeb8ca85b7d260260469c1054d5", - "transactionHash": "0x6d56efa73be8833eab961574b056930be997d4aaa300578e604f5064fbd46e97", + "gasUsed": "1374592", + "logsBloom": "0x00000400000000000001000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001200000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x871835b32f45215f2ba987556e0aa731e34fc09ad05309df9e32aa66be6c11ff", + "transactionHash": "0x87e8c117015ee486380fa390c0f262c76be7078a80510af23549ca8932dae71b", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308812, - "transactionHash": "0x6d56efa73be8833eab961574b056930be997d4aaa300578e604f5064fbd46e97", - "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "blockNumber": 2594228, + "transactionHash": "0x87e8c117015ee486380fa390c0f262c76be7078a80510af23549ca8932dae71b", + "address": "0x573b8748B7D3204bF60836217f63b1332E123BB1", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -296,13 +296,13 @@ ], "data": "0x", "logIndex": 0, - "blockHash": "0x42472ab2210bfe514cb56ddaca1c74ad2313baeb8ca85b7d260260469c1054d5" + "blockHash": "0x871835b32f45215f2ba987556e0aa731e34fc09ad05309df9e32aa66be6c11ff" }, { "transactionIndex": 1, - "blockNumber": 2308812, - "transactionHash": "0x6d56efa73be8833eab961574b056930be997d4aaa300578e604f5064fbd46e97", - "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "blockNumber": 2594228, + "transactionHash": "0x87e8c117015ee486380fa390c0f262c76be7078a80510af23549ca8932dae71b", + "address": "0x573b8748B7D3204bF60836217f63b1332E123BB1", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -310,18 +310,18 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0x42472ab2210bfe514cb56ddaca1c74ad2313baeb8ca85b7d260260469c1054d5" + "blockHash": "0x871835b32f45215f2ba987556e0aa731e34fc09ad05309df9e32aa66be6c11ff" } ], - "blockNumber": 2308812, - "cumulativeGasUsed": "1421505", + "blockNumber": 2594228, + "cumulativeGasUsed": "1421481", "status": 1, "byzantium": true }, "args": [ - "0x948669617b558cd3bb7F3dd94720346b3E9cD047", - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0xBA73297EBe019158422c726A051D3647E5E4EA7B", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta.json index 2faad0290..8c85ac855 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta.json @@ -1,5 +1,5 @@ { - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "abi": [ { "anonymous": false, @@ -1407,35 +1407,35 @@ "type": "constructor" } ], - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1124696", - "logsBloom": "0x00000400000000000000000000000020400000000400800000800000000000000000000000000000000000000000000000000000000040000100000000000000000000000000008000000000000002000001000000000800004000000000000000004000020000000000001080000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000100004000000000000000000000000000000000020000200000000010001000000000080000400000000000000000020000001000000000010000000000000800000000000000000001000000001000000", - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f", - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "gasUsed": "1124672", + "logsBloom": "0x00000000000000000000000000000000400000000408800000800000000000000000000040002000000000000000000000000000000040000000000000000000000008000000000000000000000002000001000000000800004000000000000000000000020000000000001000000800000000800000000000000000000001400080000000000000000000000000000000000000000000000000000000800000000000000000000010000000000000000004000000002000000000000000000400000020000000002000000001000000800000000440000000000000000020000000000000000010000000000000000000000000020000001000000001000000", + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6", + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x000000000000000000000000a36e6ee8c5eebfb1738fb78ce3d09562869f58a4" + "0x00000000000000000000000000442f9fb6a82a23a7bddc9b0358686c41320a38" ], "data": "0x", "logIndex": 0, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" }, { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1443,39 +1443,39 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" }, { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + "0x000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 2, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" }, { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + "0x000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 3, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" }, { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -1483,42 +1483,42 @@ ], "data": "0x", "logIndex": 4, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" }, { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" ], "data": "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", "logIndex": 5, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" }, { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 6, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" } ], - "blockNumber": 2308803, - "cumulativeGasUsed": "1171597", + "blockNumber": 2594219, + "cumulativeGasUsed": "1171561", "status": 1, "byzantium": true }, "args": [ - "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0x00442f9Fb6a82A23A7bdDc9B0358686C41320a38", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", @@ -1532,12 +1532,12 @@ "RARI", "ipfs:/", "", - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ] }, - "implementation": "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "implementation": "0x00442f9Fb6a82A23A7bdDc9B0358686C41320a38", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Implementation.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Implementation.json index 301dac503..a1b32d673 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Implementation.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "address": "0x00442f9Fb6a82A23A7bdDc9B0358686C41320a38", "abi": [ { "anonymous": false, @@ -1263,7 +1263,7 @@ "type": "function" } ], - "transactionHash": "0x05fba2d7598a236f16ec4d56a6da0dc8ae7a65f75de37cbf062eacb545db39e8", + "transactionHash": "0xc4d320d9654c4f5893371745853d110038ff25c59d76c801c1b0597ac6569545", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -1271,11 +1271,11 @@ "transactionIndex": 1, "gasUsed": "5465741", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xd52b0929b57cc36ea145eb6048fc752f6bdb734f039034d0a1c64d8b7913f671", - "transactionHash": "0x05fba2d7598a236f16ec4d56a6da0dc8ae7a65f75de37cbf062eacb545db39e8", + "blockHash": "0x0f0bd7ea0860d9ef6a5001ed3d9a25621b4c547f9ec2d1ddbb21d162d5dc8d5a", + "transactionHash": "0xc4d320d9654c4f5893371745853d110038ff25c59d76c801c1b0597ac6569545", "logs": [], - "blockNumber": 2308799, - "cumulativeGasUsed": "5512642", + "blockNumber": 2594215, + "cumulativeGasUsed": "5512630", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Proxy.json index 0d9d415d6..3f67a4a3f 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Proxy.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC1155RaribleMeta_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "abi": [ { "inputs": [ @@ -146,35 +146,35 @@ "type": "receive" } ], - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1124696", - "logsBloom": "0x00000400000000000000000000000020400000000400800000800000000000000000000000000000000000000000000000000000000040000100000000000000000000000000008000000000000002000001000000000800004000000000000000004000020000000000001080000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000100004000000000000000000000000000000000020000200000000010001000000000080000400000000000000000020000001000000000010000000000000800000000000000000001000000001000000", - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f", - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", + "gasUsed": "1124672", + "logsBloom": "0x00000000000000000000000000000000400000000408800000800000000000000000000040002000000000000000000000000000000040000000000000000000000008000000000000000000000002000001000000000800004000000000000000000000020000000000001000000800000000800000000000000000000001400080000000000000000000000000000000000000000000000000000000800000000000000000000010000000000000000004000000002000000000000000000400000020000000002000000001000000800000000440000000000000000020000000000000000010000000000000000000000000020000001000000001000000", + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6", + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x000000000000000000000000a36e6ee8c5eebfb1738fb78ce3d09562869f58a4" + "0x00000000000000000000000000442f9fb6a82a23a7bddc9b0358686c41320a38" ], "data": "0x", "logIndex": 0, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" }, { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -182,39 +182,39 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" }, { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + "0x000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 2, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" }, { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + "0x000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 3, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" }, { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -222,42 +222,42 @@ ], "data": "0x", "logIndex": 4, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" }, { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" ], "data": "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", "logIndex": 5, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" }, { "transactionIndex": 1, - "blockNumber": 2308803, - "transactionHash": "0x755a99ae048bc3e70a0fd585d6d3c729cb6e11febdc62d2d750b228a7d60e3c3", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 2594219, + "transactionHash": "0xd52ad7a04668ff35be9796cc0f1253376c84339a169e5ae547b5dec8ed02ed70", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 6, - "blockHash": "0xa32e4ebcf545a53c64a57cca3cbb8db1bd2b9568818179ffaa35ae680225603f" + "blockHash": "0x8f3728312e2ac0fb91ed2b11ed903fa4e3227b0385960489e864c1107306eae6" } ], - "blockNumber": 2308803, - "cumulativeGasUsed": "1171597", + "blockNumber": 2594219, + "cumulativeGasUsed": "1171561", "status": 1, "byzantium": true }, "args": [ - "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0x00442f9Fb6a82A23A7bdDc9B0358686C41320a38", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC20TransferProxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC20TransferProxy.json index d3275b757..1449ac315 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ERC20TransferProxy.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC20TransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", + "address": "0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4", "abi": [ { "anonymous": false, @@ -148,7 +148,7 @@ "type": "function" } ], - "transactionHash": "0x93ece19b0f24320085d80805d0ba7072750226ef3261b452096db85eaa12fb14", + "transactionHash": "0x4908e83b0744ee102ad3f2592e29f817137d947f72e741b0fa9f79133b64021d", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -156,11 +156,11 @@ "transactionIndex": 1, "gasUsed": "697645", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x4eb4db72d127cf6129d3fb8e97588026a014965bd6a1c93317ac5456f021a6c6", - "transactionHash": "0x93ece19b0f24320085d80805d0ba7072750226ef3261b452096db85eaa12fb14", + "blockHash": "0x5146ba8f0381fd98312b91bde4ec1760503e356d8902d2916e0327c248d1f9f2", + "transactionHash": "0x4908e83b0744ee102ad3f2592e29f817137d947f72e741b0fa9f79133b64021d", "logs": [], - "blockNumber": 2308715, - "cumulativeGasUsed": "744546", + "blockNumber": 2594130, + "cumulativeGasUsed": "744534", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721LazyMintTransferProxy.json index 3ffa2d5db..1a6b38151 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721LazyMintTransferProxy.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721LazyMintTransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "address": "0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30", "abi": [ { "anonymous": false, @@ -160,7 +160,7 @@ "type": "function" } ], - "transactionHash": "0xd98a190be58e2f1f42ccdf8046f171bc5a091cfa4a022aec719325c60231c51b", + "transactionHash": "0x4debc9a412719f918f8ee3a30b82757cb875142ccfa001e22fe69075c3ff7409", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -168,10 +168,10 @@ "transactionIndex": 1, "gasUsed": "935371", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x5fd552e3917ec41f339a2ee31c0b39db391c3648ca0ad5c307fcb62e0438f04c", - "transactionHash": "0xd98a190be58e2f1f42ccdf8046f171bc5a091cfa4a022aec719325c60231c51b", + "blockHash": "0x850cff09da6d0fbd18032a71f61af86bd3508c238e83759c57fb5d008d48fbc1", + "transactionHash": "0x4debc9a412719f918f8ee3a30b82757cb875142ccfa001e22fe69075c3ff7409", "logs": [], - "blockNumber": 2308724, + "blockNumber": 2594138, "cumulativeGasUsed": "982260", "status": 1, "byzantium": true diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleFactoryC2.json index 42f02edb3..ec31d268a 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleFactoryC2.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleFactoryC2.json @@ -1,5 +1,5 @@ { - "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "address": "0xae891BdB73E5B2C454d6Fe03824A86d0d440FC0e", "abi": [ { "inputs": [ @@ -273,22 +273,22 @@ "type": "function" } ], - "transactionHash": "0xe93796a20ba7dd7af4dcefbca7ffb2547f0cb1b35b1a662aee34a87fdc9404c2", + "transactionHash": "0x50ccaa774432f47157299eaec4c269e66b4adb4b6024e366b9f86dec0c48f8f9", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, "gasUsed": "1374604", - "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000010000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000041000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x71286fb855dce6976a81d9ce3a10fa3043e6ff5c15e1a26917f773968efd52b4", - "transactionHash": "0xe93796a20ba7dd7af4dcefbca7ffb2547f0cb1b35b1a662aee34a87fdc9404c2", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000100000000000000000000000000000000801000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000200000", + "blockHash": "0xb3a84d1ced74c59a50295a9c4a649700c9c922d97e6a8f47e4ac2cb5ae372e49", + "transactionHash": "0x50ccaa774432f47157299eaec4c269e66b4adb4b6024e366b9f86dec0c48f8f9", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308794, - "transactionHash": "0xe93796a20ba7dd7af4dcefbca7ffb2547f0cb1b35b1a662aee34a87fdc9404c2", - "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "blockNumber": 2594210, + "transactionHash": "0x50ccaa774432f47157299eaec4c269e66b4adb4b6024e366b9f86dec0c48f8f9", + "address": "0xae891BdB73E5B2C454d6Fe03824A86d0d440FC0e", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -296,13 +296,13 @@ ], "data": "0x", "logIndex": 0, - "blockHash": "0x71286fb855dce6976a81d9ce3a10fa3043e6ff5c15e1a26917f773968efd52b4" + "blockHash": "0xb3a84d1ced74c59a50295a9c4a649700c9c922d97e6a8f47e4ac2cb5ae372e49" }, { "transactionIndex": 1, - "blockNumber": 2308794, - "transactionHash": "0xe93796a20ba7dd7af4dcefbca7ffb2547f0cb1b35b1a662aee34a87fdc9404c2", - "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "blockNumber": 2594210, + "transactionHash": "0x50ccaa774432f47157299eaec4c269e66b4adb4b6024e366b9f86dec0c48f8f9", + "address": "0xae891BdB73E5B2C454d6Fe03824A86d0d440FC0e", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -310,18 +310,18 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0x71286fb855dce6976a81d9ce3a10fa3043e6ff5c15e1a26917f773968efd52b4" + "blockHash": "0xb3a84d1ced74c59a50295a9c4a649700c9c922d97e6a8f47e4ac2cb5ae372e49" } ], - "blockNumber": 2308794, - "cumulativeGasUsed": "1421505", + "blockNumber": 2594210, + "cumulativeGasUsed": "1421493", "status": 1, "byzantium": true }, "args": [ - "0x7Eade39b026f271910557Cf4676c35552BAEf346", - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0xa516386d84abf578E90E30822ee47d29c9aE52Dd", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta.json index 887042c36..bcb9170d7 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta.json @@ -1,5 +1,5 @@ { - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "abi": [ { "anonymous": false, @@ -1265,35 +1265,35 @@ "type": "constructor" } ], - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1123036", - "logsBloom": "0x00000400000800000000000000000000400000000400800010800000000000000000000000000000000000000001000000000000000440000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000408000002800000000000000000000000000000000000100004000000000000000000000000000100000020000300000000000001000000000000000400000040000000000020000000000000000060000000000000000000000000000000000000000001000000", - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371", - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "gasUsed": "1123048", + "logsBloom": "0x00000000000000000000000000000000400000000400800010800000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000002000001000000000000004040000000800000000000020000000000001000000800000000800000000000000000000001420000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000002000000000000000000408000020000000000000000001000000000000000440000000000000001020000000000000000020010000000000000000000800200000000000000001002000", + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4", + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000003dc700b8bd71fcd8b80914e10b561c15816f71ac" + "0x000000000000000000000000f902355d763574c9966fe9f8502e92a7e767527d" ], "data": "0x", "logIndex": 0, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" }, { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1301,39 +1301,39 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" }, { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + "0x000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 2, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" }, { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" + "0x00000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 3, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" }, { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -1341,42 +1341,42 @@ ], "data": "0x", "logIndex": 4, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" }, { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" ], "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", "logIndex": 5, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" }, { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 6, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" } ], - "blockNumber": 2308785, - "cumulativeGasUsed": "1175525", + "blockNumber": 2594201, + "cumulativeGasUsed": "1187037", "status": 1, "byzantium": true }, "args": [ - "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0xF902355D763574C9966FE9f8502e92a7E767527d", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda30800000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e3000000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", @@ -1390,12 +1390,12 @@ "RARI", "ipfs:/", "", - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ] }, - "implementation": "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "implementation": "0xF902355D763574C9966FE9f8502e92a7E767527d", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Implementation.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Implementation.json index 40e5d4c0a..78c99a62d 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Implementation.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "address": "0xF902355D763574C9966FE9f8502e92a7E767527d", "abi": [ { "anonymous": false, @@ -1121,7 +1121,7 @@ "type": "function" } ], - "transactionHash": "0x5ba431ce4c9ffed2aaaee83b7efd8e64c1e1f2ecdbaaff5ea798de007b9ccd08", + "transactionHash": "0x14d1e267548d329f97b2917ab3dcad2cbc9e373876881aeb5a7f6bfcefabe0c9", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -1129,11 +1129,11 @@ "transactionIndex": 1, "gasUsed": "4791813", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x38f4ce212f7115dd864a7d5ef8032c4d7c5e97be07b01f0b07fc9338c37760ce", - "transactionHash": "0x5ba431ce4c9ffed2aaaee83b7efd8e64c1e1f2ecdbaaff5ea798de007b9ccd08", + "blockHash": "0xa574c4cc822b407bacce4a9975b3aeac7d7c8f31a2758d766a8459274eea2e4c", + "transactionHash": "0x14d1e267548d329f97b2917ab3dcad2cbc9e373876881aeb5a7f6bfcefabe0c9", "logs": [], - "blockNumber": 2308781, - "cumulativeGasUsed": "4838714", + "blockNumber": 2594196, + "cumulativeGasUsed": "4838702", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Proxy.json index 3b4ed4179..274b890d0 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Proxy.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMeta_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "abi": [ { "inputs": [ @@ -146,35 +146,35 @@ "type": "receive" } ], - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1123036", - "logsBloom": "0x00000400000800000000000000000000400000000400800010800000000000000000000000000000000000000001000000000000000440000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000408000002800000000000000000000000000000000000100004000000000000000000000000000100000020000300000000000001000000000000000400000040000000000020000000000000000060000000000000000000000000000000000000000001000000", - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371", - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", + "gasUsed": "1123048", + "logsBloom": "0x00000000000000000000000000000000400000000400800010800000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000002000001000000000000004040000000800000000000020000000000001000000800000000800000000000000000000001420000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000002000000000000000000408000020000000000000000001000000000000000440000000000000001020000000000000000020010000000000000000000800200000000000000001002000", + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4", + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000003dc700b8bd71fcd8b80914e10b561c15816f71ac" + "0x000000000000000000000000f902355d763574c9966fe9f8502e92a7e767527d" ], "data": "0x", "logIndex": 0, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" }, { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -182,39 +182,39 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" }, { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + "0x000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 2, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" }, { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" + "0x00000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 3, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" }, { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -222,42 +222,42 @@ ], "data": "0x", "logIndex": 4, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" }, { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" ], "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", "logIndex": 5, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" }, { "transactionIndex": 1, - "blockNumber": 2308785, - "transactionHash": "0x4f03eef0dff154f87ec19713c860078724238b4c7a7ce80f2b9d343b1497d553", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 2594201, + "transactionHash": "0x05d136dfbf3ced4a53622ae1e21e1b3e4cc29cd25c45493ec0104ca25ea07faf", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 6, - "blockHash": "0x6fccebb0a6e9d64a041483793e804bf97446ce2cc6a23408aa10a4c7f3b9b371" + "blockHash": "0x7cac132311838e080d1e1da3dd2d4d3b5ed84e7a012a66e00944f96d01d406c4" } ], - "blockNumber": 2308785, - "cumulativeGasUsed": "1175525", + "blockNumber": 2594201, + "cumulativeGasUsed": "1187037", "status": 1, "byzantium": true }, "args": [ - "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0xF902355D763574C9966FE9f8502e92a7E767527d", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda30800000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e3000000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMinimalBeaconMeta.json b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMinimalBeaconMeta.json index 465709b4c..6719a8888 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMinimalBeaconMeta.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ERC721RaribleMinimalBeaconMeta.json @@ -1,5 +1,5 @@ { - "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "address": "0xa516386d84abf578E90E30822ee47d29c9aE52Dd", "abi": [ { "inputs": [ @@ -109,22 +109,22 @@ "type": "function" } ], - "transactionHash": "0xae01b1ab882d5289879a2812874eebb8d661fec1c2328c2ec387b9a4de09efc5", + "transactionHash": "0x5e2bf8013371e56edbc68511cb8c8cf9345f71ff7077417c17fad24ef720206a", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "394691", - "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000004001000000000000004000004000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000200000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x1cc6f4c3e5bb22d6cf641699aa4eef82d46010f1b67e07f5d3dc8097afd3a86c", - "transactionHash": "0xae01b1ab882d5289879a2812874eebb8d661fec1c2328c2ec387b9a4de09efc5", + "gasUsed": "394703", + "logsBloom": "0x00000000000000000000000400000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000400000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000002000000000000000000000000000", + "blockHash": "0x292f5457d38360488a4c38f17c18165b813441a381f5341a9bb104241c5e3ec0", + "transactionHash": "0x5e2bf8013371e56edbc68511cb8c8cf9345f71ff7077417c17fad24ef720206a", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308789, - "transactionHash": "0xae01b1ab882d5289879a2812874eebb8d661fec1c2328c2ec387b9a4de09efc5", - "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "blockNumber": 2594205, + "transactionHash": "0x5e2bf8013371e56edbc68511cb8c8cf9345f71ff7077417c17fad24ef720206a", + "address": "0xa516386d84abf578E90E30822ee47d29c9aE52Dd", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -132,13 +132,13 @@ ], "data": "0x", "logIndex": 0, - "blockHash": "0x1cc6f4c3e5bb22d6cf641699aa4eef82d46010f1b67e07f5d3dc8097afd3a86c" + "blockHash": "0x292f5457d38360488a4c38f17c18165b813441a381f5341a9bb104241c5e3ec0" }, { "transactionIndex": 1, - "blockNumber": 2308789, - "transactionHash": "0xae01b1ab882d5289879a2812874eebb8d661fec1c2328c2ec387b9a4de09efc5", - "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "blockNumber": 2594205, + "transactionHash": "0x5e2bf8013371e56edbc68511cb8c8cf9345f71ff7077417c17fad24ef720206a", + "address": "0xa516386d84abf578E90E30822ee47d29c9aE52Dd", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -146,16 +146,16 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0x1cc6f4c3e5bb22d6cf641699aa4eef82d46010f1b67e07f5d3dc8097afd3a86c" + "blockHash": "0x292f5457d38360488a4c38f17c18165b813441a381f5341a9bb104241c5e3ec0" } ], - "blockNumber": 2308789, + "blockNumber": 2594205, "cumulativeGasUsed": "441592", "status": 1, "byzantium": true }, "args": [ - "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "0xF902355D763574C9966FE9f8502e92a7E767527d", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2.json b/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2.json index 0fe96344f..051e8eb93 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2.json @@ -1,5 +1,5 @@ { - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "abi": [ { "anonymous": false, @@ -1183,35 +1183,35 @@ "type": "constructor" } ], - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1049680", - "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000000000000000000000000000400000000000000000000000800000000000000010000000020000010000000000000042004000000000000000000200020000000000000008004002008000000000000000000000004000000000010001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000002000000004000000000000000a0000008000000000001000000000000000400000000000000000020000000000000000000000000000000000000020000000000000000300000000200", - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010", - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "gasUsed": "1049656", + "logsBloom": "0x000080000000000000000000000000004000000004008000008000000008000022000000000020000000000000000000000000000000400002000000000000000000800000000000000010000000020080010000000000000040004000000000000000000200020000000000000008004002008000000000000000000000004000000000000001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000000000000000000000000000000a0000008000000000001000000000000000400000000002000000020000000000000000000000000000080000000000000000000000000300000080000", + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552", + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000006c619e55e9947051e98570a36044c31c4eb0736d" + "0x0000000000000000000000000b63e74fc14cdc3a7f63d62d4b18c6be437ce408" ], "data": "0x", "logIndex": 0, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" }, { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1219,52 +1219,52 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" }, { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", "0xd8f960c100000000000000000000000000000000000000000000000000000000" ], - "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", + "data": "0x00000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30", "logIndex": 2, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" }, { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" ], - "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", + "data": "0x000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca", "logIndex": 3, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" }, { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", "0xf63c282500000000000000000000000000000000000000000000000000000000" ], - "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", + "data": "0x000000000000000000000000c0bd7ae193c1bd00fa33b0e5fdcf60ff2d66eefc", "logIndex": 4, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" }, { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -1272,30 +1272,30 @@ ], "data": "0x", "logIndex": 5, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" }, { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 6, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" } ], - "blockNumber": 2308749, - "cumulativeGasUsed": "1096581", + "blockNumber": 2594164, + "cumulativeGasUsed": "1113645", "status": 1, "byzantium": true }, "args": [ - "0x6c619E55E9947051e98570a36044C31C4eB0736d", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + "0x0b63E74FC14cDC3A7f63D62d4B18c6Be437cE408", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0x2bed54d6000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308000000000000000000000000dac1af2dca52204b9d3d7b3bf967a30d5fce8dc400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097540c06647d14c5b63e678dc6e290e0f2150cc00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c0bd7ae193c1bd00fa33b0e5fdcf60ff2d66eefc0000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", @@ -1305,25 +1305,25 @@ "execute": { "methodName": "__ExchangeV2_init_proxy", "args": [ - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4", 0, "0x0000000000000000000000000000000000000000", - "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893", [ "0xd8f960c1", "0x1cdfaa40" ], [ - "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", - "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2" + "0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30", + "0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca" ], "0xf63c2825", - "0xc4F5FCD96e3b37A31f871F0968206F47294a4471" + "0xc0BD7Ae193c1BD00Fa33B0E5fDCF60FF2d66EefC" ] }, - "implementation": "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "implementation": "0x0b63E74FC14cDC3A7f63D62d4B18c6Be437cE408", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Implementation.json b/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Implementation.json index a8fdc87ad..1bcf7e800 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Implementation.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "address": "0x0b63E74FC14cDC3A7f63D62d4B18c6Be437cE408", "abi": [ { "anonymous": false, @@ -1039,7 +1039,7 @@ "type": "function" } ], - "transactionHash": "0x8e1907dcb354ea634192361d245d17e202759be614e120205a60a099e66d61b2", + "transactionHash": "0x6ef19f0d6ac00a56cc18e80f58193fec80c23d53e10aade40ad44ea481328438", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -1047,11 +1047,11 @@ "transactionIndex": 1, "gasUsed": "5353145", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x5130988f3b7125b9d8dd95fbcd35fe315ea18b748f713b55db10406d2fcbd367", - "transactionHash": "0x8e1907dcb354ea634192361d245d17e202759be614e120205a60a099e66d61b2", + "blockHash": "0xc38c0d5866f79ec9d38e780e422a701aa969387723db6156c7aa649ebd0c6530", + "transactionHash": "0x6ef19f0d6ac00a56cc18e80f58193fec80c23d53e10aade40ad44ea481328438", "logs": [], - "blockNumber": 2308744, - "cumulativeGasUsed": "5400046", + "blockNumber": 2594159, + "cumulativeGasUsed": "5400034", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Proxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Proxy.json index 34df6ce6f..8c30cf747 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Proxy.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/ExchangeMetaV2_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "abi": [ { "inputs": [ @@ -146,35 +146,35 @@ "type": "receive" } ], - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1049680", - "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000000000000000000000000000400000000000000000000000800000000000000010000000020000010000000000000042004000000000000000000200020000000000000008004002008000000000000000000000004000000000010001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000002000000004000000000000000a0000008000000000001000000000000000400000000000000000020000000000000000000000000000000000000020000000000000000300000000200", - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010", - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", + "gasUsed": "1049656", + "logsBloom": "0x000080000000000000000000000000004000000004008000008000000008000022000000000020000000000000000000000000000000400002000000000000000000800000000000000010000000020080010000000000000040004000000000000000000200020000000000000008004002008000000000000000000000004000000000000001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000000000000000000000000000000a0000008000000000001000000000000000400000000002000000020000000000000000000000000000080000000000000000000000000300000080000", + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552", + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000006c619e55e9947051e98570a36044c31c4eb0736d" + "0x0000000000000000000000000b63e74fc14cdc3a7f63d62d4b18c6be437ce408" ], "data": "0x", "logIndex": 0, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" }, { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -182,52 +182,52 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" }, { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", "0xd8f960c100000000000000000000000000000000000000000000000000000000" ], - "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", + "data": "0x00000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30", "logIndex": 2, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" }, { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" ], - "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", + "data": "0x000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca", "logIndex": 3, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" }, { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", "0xf63c282500000000000000000000000000000000000000000000000000000000" ], - "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", + "data": "0x000000000000000000000000c0bd7ae193c1bd00fa33b0e5fdcf60ff2d66eefc", "logIndex": 4, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" }, { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -235,30 +235,30 @@ ], "data": "0x", "logIndex": 5, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" }, { "transactionIndex": 1, - "blockNumber": 2308749, - "transactionHash": "0xfd66e8f63746cded0f42be3d68c416c853aff71c3498d5742eb6f2ab57312302", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 2594164, + "transactionHash": "0xdb8d1cc589cc859dec0b099ec79ab96611869b0f52e8512a1463e5275c133055", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 6, - "blockHash": "0xfc09e4d7ee8e35a4114adbad9875b885f47bf19a1df62a513e77e66d8f593010" + "blockHash": "0x50835aa440e5332c073d65c2d4d919586f47c7cac2aa1c1814b62147f4f2b552" } ], - "blockNumber": 2308749, - "cumulativeGasUsed": "1096581", + "blockNumber": 2594164, + "cumulativeGasUsed": "1113645", "status": 1, "byzantium": true }, "args": [ - "0x6c619E55E9947051e98570a36044C31C4eB0736d", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + "0x0b63E74FC14cDC3A7f63D62d4B18c6Be437cE408", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0x2bed54d6000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308000000000000000000000000dac1af2dca52204b9d3d7b3bf967a30d5fce8dc400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097540c06647d14c5b63e678dc6e290e0f2150cc00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c0bd7ae193c1bd00fa33b0e5fdcf60ff2d66eefc0000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/RaribleExchangeWrapper.json b/projects/hardhat-deploy/deployments/camp_sepolia/RaribleExchangeWrapper.json index 0c7ba5ffc..42c0955a1 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/RaribleExchangeWrapper.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/RaribleExchangeWrapper.json @@ -1,5 +1,5 @@ { - "address": "0x689bFf422807f39c9A927bb78c34FE8D63529e28", + "address": "0x45d6C2567a7F32c70e57D26E4ee89045A2F472Dc", "abi": [ { "inputs": [ @@ -531,22 +531,22 @@ "type": "receive" } ], - "transactionHash": "0xa9a53a3c0b62e9837c7d05cf1ada484feb8e4924da20c3efc970c50b67e3bf22", + "transactionHash": "0x0e7008ebf33ca69ba1dd30dadd61c549ee1684b51c405d93e45d7937f91e536b", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, "gasUsed": "4312361", - "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001001000000000004000000000000000000000020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000004000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xa67e95b68c1bf0e8a4e3b4db9f6d5abbb300d2d5baeba76df1fa133fef32e2ed", - "transactionHash": "0xa9a53a3c0b62e9837c7d05cf1ada484feb8e4924da20c3efc970c50b67e3bf22", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000040000000040000000000000000000020000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000010000000000000000000000000000000000000000000000000", + "blockHash": "0xd8d4d195e363a02bc118fd6c369d4b8f92faa9e225c3dd5c0c916456b04d5cbe", + "transactionHash": "0x0e7008ebf33ca69ba1dd30dadd61c549ee1684b51c405d93e45d7937f91e536b", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308816, - "transactionHash": "0xa9a53a3c0b62e9837c7d05cf1ada484feb8e4924da20c3efc970c50b67e3bf22", - "address": "0x689bFf422807f39c9A927bb78c34FE8D63529e28", + "blockNumber": 2594233, + "transactionHash": "0x0e7008ebf33ca69ba1dd30dadd61c549ee1684b51c405d93e45d7937f91e536b", + "address": "0x45d6C2567a7F32c70e57D26E4ee89045A2F472Dc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -554,13 +554,13 @@ ], "data": "0x", "logIndex": 0, - "blockHash": "0xa67e95b68c1bf0e8a4e3b4db9f6d5abbb300d2d5baeba76df1fa133fef32e2ed" + "blockHash": "0xd8d4d195e363a02bc118fd6c369d4b8f92faa9e225c3dd5c0c916456b04d5cbe" }, { "transactionIndex": 1, - "blockNumber": 2308816, - "transactionHash": "0xa9a53a3c0b62e9837c7d05cf1ada484feb8e4924da20c3efc970c50b67e3bf22", - "address": "0x689bFf422807f39c9A927bb78c34FE8D63529e28", + "blockNumber": 2594233, + "transactionHash": "0x0e7008ebf33ca69ba1dd30dadd61c549ee1684b51c405d93e45d7937f91e536b", + "address": "0x45d6C2567a7F32c70e57D26E4ee89045A2F472Dc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -568,18 +568,18 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xa67e95b68c1bf0e8a4e3b4db9f6d5abbb300d2d5baeba76df1fa133fef32e2ed" + "blockHash": "0xd8d4d195e363a02bc118fd6c369d4b8f92faa9e225c3dd5c0c916456b04d5cbe" } ], - "blockNumber": 2308816, - "cumulativeGasUsed": "4359262", + "blockNumber": 2594233, + "cumulativeGasUsed": "4359250", "status": 1, "byzantium": true }, "args": [ [ "0x0000000000000000000000000000000000000000", - "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "0x00000000006c3852cbEf3e08E8dF289169EdE581", "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000", @@ -592,7 +592,7 @@ ], "0x0000000000000000000000000000000000000000", [ - "0xA3d49c7e2c845b792e422696FE0D9ef17a509731" + "0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4" ], "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry.json b/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry.json index 7520350e6..5bfb33f29 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry.json @@ -1,5 +1,5 @@ { - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "abi": [ { "anonymous": false, @@ -496,35 +496,35 @@ "type": "constructor" } ], - "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "transactionHash": "0x7094e3fde73ac378ea601ef19b4bbc27fe502b8b31ff3daf6ec00b8fae9c44ef", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, "gasUsed": "811009", - "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", - "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede", - "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "logsBloom": "0x00000000100000000000000000000000400000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000200000000002000001000000000000004000000000000000000000022000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000100000800000200000000000000000020000000000000000001000000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xb07bf63cb37986b83359248bfb7caa301431a520bba971b994f1ecf3baa41766", + "transactionHash": "0x7094e3fde73ac378ea601ef19b4bbc27fe502b8b31ff3daf6ec00b8fae9c44ef", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308703, - "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 2594118, + "transactionHash": "0x7094e3fde73ac378ea601ef19b4bbc27fe502b8b31ff3daf6ec00b8fae9c44ef", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" + "0x000000000000000000000000d0c006f59160847ecac63cca98a568511689d02f" ], "data": "0x", "logIndex": 0, - "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" + "blockHash": "0xb07bf63cb37986b83359248bfb7caa301431a520bba971b994f1ecf3baa41766" }, { "transactionIndex": 1, - "blockNumber": 2308703, - "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 2594118, + "transactionHash": "0x7094e3fde73ac378ea601ef19b4bbc27fe502b8b31ff3daf6ec00b8fae9c44ef", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -532,13 +532,13 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" + "blockHash": "0xb07bf63cb37986b83359248bfb7caa301431a520bba971b994f1ecf3baa41766" }, { "transactionIndex": 1, - "blockNumber": 2308703, - "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 2594118, + "transactionHash": "0x7094e3fde73ac378ea601ef19b4bbc27fe502b8b31ff3daf6ec00b8fae9c44ef", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -546,29 +546,29 @@ ], "data": "0x", "logIndex": 2, - "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" + "blockHash": "0xb07bf63cb37986b83359248bfb7caa301431a520bba971b994f1ecf3baa41766" }, { "transactionIndex": 1, - "blockNumber": 2308703, - "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 2594118, + "transactionHash": "0x7094e3fde73ac378ea601ef19b4bbc27fe502b8b31ff3daf6ec00b8fae9c44ef", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 3, - "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" + "blockHash": "0xb07bf63cb37986b83359248bfb7caa301431a520bba971b994f1ecf3baa41766" } ], - "blockNumber": 2308703, - "cumulativeGasUsed": "857910", + "blockNumber": 2594118, + "cumulativeGasUsed": "857898", "status": 1, "byzantium": true }, "args": [ - "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xd0C006f59160847eCAC63CcA98A568511689d02F", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "numDeployments": 1, @@ -582,7 +582,7 @@ "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ] }, - "implementation": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "implementation": "0xd0C006f59160847eCAC63CcA98A568511689d02F", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Implementation.json b/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Implementation.json index d2fc789e1..55919f612 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Implementation.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "address": "0xd0C006f59160847eCAC63CcA98A568511689d02F", "abi": [ { "anonymous": false, @@ -352,7 +352,7 @@ "type": "function" } ], - "transactionHash": "0xda2f564a58cd4133d18a51befae45b0c99f6cadaedf30cea845645abf4ac14dd", + "transactionHash": "0x6cd56ba68e44f9cc1e4d11b7b98ee0a804f60514c03ad1d5934c4f2542b9a69f", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -360,11 +360,11 @@ "transactionIndex": 1, "gasUsed": "1663864", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x3230524ca2b4638fbe15e77c3ead10282e6b874b4d491e2f1fe5767e5e870025", - "transactionHash": "0xda2f564a58cd4133d18a51befae45b0c99f6cadaedf30cea845645abf4ac14dd", + "blockHash": "0xc5fc5ecf3b4562b3cae39880e70ab0af15c2ef76ad3f294ec2cfc30b5924651b", + "transactionHash": "0x6cd56ba68e44f9cc1e4d11b7b98ee0a804f60514c03ad1d5934c4f2542b9a69f", "logs": [], - "blockNumber": 2308699, - "cumulativeGasUsed": "1727865", + "blockNumber": 2594113, + "cumulativeGasUsed": "1710753", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Proxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Proxy.json index ef1e10356..151cd7f91 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Proxy.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/RoyaltiesRegistry_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "abi": [ { "inputs": [ @@ -146,35 +146,35 @@ "type": "receive" } ], - "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "transactionHash": "0x7094e3fde73ac378ea601ef19b4bbc27fe502b8b31ff3daf6ec00b8fae9c44ef", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, "gasUsed": "811009", - "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", - "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede", - "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", + "logsBloom": "0x00000000100000000000000000000000400000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000200000000002000001000000000000004000000000000000000000022000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000100000800000200000000000000000020000000000000000001000000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xb07bf63cb37986b83359248bfb7caa301431a520bba971b994f1ecf3baa41766", + "transactionHash": "0x7094e3fde73ac378ea601ef19b4bbc27fe502b8b31ff3daf6ec00b8fae9c44ef", "logs": [ { "transactionIndex": 1, - "blockNumber": 2308703, - "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 2594118, + "transactionHash": "0x7094e3fde73ac378ea601ef19b4bbc27fe502b8b31ff3daf6ec00b8fae9c44ef", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" + "0x000000000000000000000000d0c006f59160847ecac63cca98a568511689d02f" ], "data": "0x", "logIndex": 0, - "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" + "blockHash": "0xb07bf63cb37986b83359248bfb7caa301431a520bba971b994f1ecf3baa41766" }, { "transactionIndex": 1, - "blockNumber": 2308703, - "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 2594118, + "transactionHash": "0x7094e3fde73ac378ea601ef19b4bbc27fe502b8b31ff3daf6ec00b8fae9c44ef", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -182,13 +182,13 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" + "blockHash": "0xb07bf63cb37986b83359248bfb7caa301431a520bba971b994f1ecf3baa41766" }, { "transactionIndex": 1, - "blockNumber": 2308703, - "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 2594118, + "transactionHash": "0x7094e3fde73ac378ea601ef19b4bbc27fe502b8b31ff3daf6ec00b8fae9c44ef", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -196,29 +196,29 @@ ], "data": "0x", "logIndex": 2, - "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" + "blockHash": "0xb07bf63cb37986b83359248bfb7caa301431a520bba971b994f1ecf3baa41766" }, { "transactionIndex": 1, - "blockNumber": 2308703, - "transactionHash": "0xbd6d09a510bc4b1dd800609fe495571a8f70d9e3d5a033c963e6ed0bac5b51a9", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 2594118, + "transactionHash": "0x7094e3fde73ac378ea601ef19b4bbc27fe502b8b31ff3daf6ec00b8fae9c44ef", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 3, - "blockHash": "0x28d82f865959137f78712ae421a1132d2f9acfd56faea5c376e2eccc2ec5aede" + "blockHash": "0xb07bf63cb37986b83359248bfb7caa301431a520bba971b994f1ecf3baa41766" } ], - "blockNumber": 2308703, - "cumulativeGasUsed": "857910", + "blockNumber": 2594118, + "cumulativeGasUsed": "857898", "status": 1, "byzantium": true }, "args": [ - "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xd0C006f59160847eCAC63CcA98A568511689d02F", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/camp_sepolia/TransferProxy.json b/projects/hardhat-deploy/deployments/camp_sepolia/TransferProxy.json index 15133fb81..e669e9f23 100644 --- a/projects/hardhat-deploy/deployments/camp_sepolia/TransferProxy.json +++ b/projects/hardhat-deploy/deployments/camp_sepolia/TransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "address": "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", "abi": [ { "anonymous": false, @@ -186,7 +186,7 @@ "type": "function" } ], - "transactionHash": "0xec7f9e84f1512677c0999d66619af558b3cb3596143251a3446633e3a7886e5f", + "transactionHash": "0x8aa7399b128a582096611b9f507ccbc18117641e39a196f9c557e8b697cb3293", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -194,11 +194,11 @@ "transactionIndex": 1, "gasUsed": "777214", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xfde2af10cd8359cb8f8254f826eddac3aca9c4cfb2f9e7c6fd428fedabf4a889", - "transactionHash": "0xec7f9e84f1512677c0999d66619af558b3cb3596143251a3446633e3a7886e5f", + "blockHash": "0x65652d617bc8cec9d3ef4ae2f7caf66879ee50cd260bf0648e48b784088c3665", + "transactionHash": "0x8aa7399b128a582096611b9f507ccbc18117641e39a196f9c557e8b697cb3293", "logs": [], - "blockNumber": 2308708, - "cumulativeGasUsed": "824115", + "blockNumber": 2594122, + "cumulativeGasUsed": "841203", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/AssetMatcherCollection.json b/projects/hardhat-deploy/deployments/lisk_sepolia/AssetMatcherCollection.json index b13d3d77b..fa784f9f5 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/AssetMatcherCollection.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/AssetMatcherCollection.json @@ -1,5 +1,5 @@ { - "address": "0xc4F5FCD96e3b37A31f871F0968206F47294a4471", + "address": "0xc0BD7Ae193c1BD00Fa33B0E5fDCF60FF2d66EefC", "abi": [ { "inputs": [ @@ -62,7 +62,7 @@ "type": "function" } ], - "transactionHash": "0xf1e5b752fe800a7e590dfa39c405f1c872241f62739ee6583378b421e90bb1f1", + "transactionHash": "0xa52553c033af69582addd7501f5317e00aa89843b6aa4f6afd0f6b8a0e0e68dd", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -70,11 +70,11 @@ "transactionIndex": 1, "gasUsed": "302853", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7d1b3ea2655cccfcb241ba17edace455bf11f3791e2a2d88a32cf4c62d5665fa", - "transactionHash": "0xf1e5b752fe800a7e590dfa39c405f1c872241f62739ee6583378b421e90bb1f1", + "blockHash": "0xeceaa08bd6522754e7fa523690cde84292112312e1e1dd72284fe2fe26b9f198", + "transactionHash": "0xa52553c033af69582addd7501f5317e00aa89843b6aa4f6afd0f6b8a0e0e68dd", "logs": [], - "blockNumber": 4426283, - "cumulativeGasUsed": "346728", + "blockNumber": 4732973, + "cumulativeGasUsed": "357904", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/DefaultProxyAdmin.json b/projects/hardhat-deploy/deployments/lisk_sepolia/DefaultProxyAdmin.json index 7b446c630..96ee961c5 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/DefaultProxyAdmin.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/DefaultProxyAdmin.json @@ -1,5 +1,5 @@ { - "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "address": "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", "abi": [ { "inputs": [ @@ -162,39 +162,39 @@ "type": "function" } ], - "transactionHash": "0x1024ae405db9075372b8a8388596be465e4a4cc472b864788aeac275ba57d547", + "transactionHash": "0xe2ca2c9dfe36f70424e15a8ac3ed40a856002270036dcb6ee0a7f99176c24203", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, "gasUsed": "677380", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000001000000000000020000000000000000000800000000000000000000000000000000500200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x6296c49640d0e8de0594803daad11db8e663f28941cf66533b48082e833cd76d", - "transactionHash": "0x1024ae405db9075372b8a8388596be465e4a4cc472b864788aeac275ba57d547", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000022000004000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x686b9ff7b2b1287185ed1df3447ab49a1d6d3d9962e91ab873a1d9f5288337b8", + "transactionHash": "0xe2ca2c9dfe36f70424e15a8ac3ed40a856002270036dcb6ee0a7f99176c24203", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426255, - "transactionHash": "0x1024ae405db9075372b8a8388596be465e4a4cc472b864788aeac275ba57d547", - "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "blockNumber": 4732940, + "transactionHash": "0xe2ca2c9dfe36f70424e15a8ac3ed40a856002270036dcb6ee0a7f99176c24203", + "address": "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", "logIndex": 0, - "blockHash": "0x6296c49640d0e8de0594803daad11db8e663f28941cf66533b48082e833cd76d" + "blockHash": "0x686b9ff7b2b1287185ed1df3447ab49a1d6d3d9962e91ab873a1d9f5288337b8" } ], - "blockNumber": 4426255, + "blockNumber": 4732940, "cumulativeGasUsed": "721243", "status": 1, "byzantium": true }, "args": [ - "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155LazyMintTransferProxy.json index ba635e0b3..989f903fb 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155LazyMintTransferProxy.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155LazyMintTransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "address": "0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca", "abi": [ { "anonymous": false, @@ -160,7 +160,7 @@ "type": "function" } ], - "transactionHash": "0x3a6e12cadae99a3de4d68bd5d5185a8f4de4459be4cdfedf68b0a5788661aa7f", + "transactionHash": "0x487078b4bc306fd8b47e301a147b004439db2feb557d07a5a2d2151d3dee552d", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -168,11 +168,11 @@ "transactionIndex": 1, "gasUsed": "923250", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x65e0c7337683ea7a65de6c2d2a87211fa410bfb104039fee907c62a40e3249ff", - "transactionHash": "0x3a6e12cadae99a3de4d68bd5d5185a8f4de4459be4cdfedf68b0a5788661aa7f", + "blockHash": "0x5b37d11731bc78b26e5952531367ad56c4f18f011836990aad9ad4375d4a8610", + "transactionHash": "0x487078b4bc306fd8b47e301a147b004439db2feb557d07a5a2d2151d3dee552d", "logs": [], - "blockNumber": 4426278, - "cumulativeGasUsed": "967125", + "blockNumber": 4732968, + "cumulativeGasUsed": "967113", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleBeaconMeta.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleBeaconMeta.json index 737d02c52..2114e909e 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleBeaconMeta.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleBeaconMeta.json @@ -1,5 +1,5 @@ { - "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "address": "0xBA73297EBe019158422c726A051D3647E5E4EA7B", "abi": [ { "inputs": [ @@ -109,22 +109,22 @@ "type": "function" } ], - "transactionHash": "0xe382be530466d6cfbe0c7e1909e7c160c439de2bc67b73e387e907d867d5ab2d", + "transactionHash": "0xa6fd893034cc45ff0750808b5cc052764dd84cb3bcf5a6abd1ca260f9aeb6065", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "394703", - "logsBloom": "0x00000000000000000000000000000000000000000400800004800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xc03c0957e49fdbf231151ee863e82dbae9678e1d481e990e1ef525e09ecdbc05", - "transactionHash": "0xe382be530466d6cfbe0c7e1909e7c160c439de2bc67b73e387e907d867d5ab2d", + "gasUsed": "394691", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000002000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000020000000400000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x6d589aacb8e8c7f503f5b10a125d6ed12093930536ecd4800322e0fc90c64b64", + "transactionHash": "0xa6fd893034cc45ff0750808b5cc052764dd84cb3bcf5a6abd1ca260f9aeb6065", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426325, - "transactionHash": "0xe382be530466d6cfbe0c7e1909e7c160c439de2bc67b73e387e907d867d5ab2d", - "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "blockNumber": 4733015, + "transactionHash": "0xa6fd893034cc45ff0750808b5cc052764dd84cb3bcf5a6abd1ca260f9aeb6065", + "address": "0xBA73297EBe019158422c726A051D3647E5E4EA7B", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -132,13 +132,13 @@ ], "data": "0x", "logIndex": 0, - "blockHash": "0xc03c0957e49fdbf231151ee863e82dbae9678e1d481e990e1ef525e09ecdbc05" + "blockHash": "0x6d589aacb8e8c7f503f5b10a125d6ed12093930536ecd4800322e0fc90c64b64" }, { "transactionIndex": 1, - "blockNumber": 4426325, - "transactionHash": "0xe382be530466d6cfbe0c7e1909e7c160c439de2bc67b73e387e907d867d5ab2d", - "address": "0x948669617b558cd3bb7F3dd94720346b3E9cD047", + "blockNumber": 4733015, + "transactionHash": "0xa6fd893034cc45ff0750808b5cc052764dd84cb3bcf5a6abd1ca260f9aeb6065", + "address": "0xBA73297EBe019158422c726A051D3647E5E4EA7B", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -146,16 +146,16 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xc03c0957e49fdbf231151ee863e82dbae9678e1d481e990e1ef525e09ecdbc05" + "blockHash": "0x6d589aacb8e8c7f503f5b10a125d6ed12093930536ecd4800322e0fc90c64b64" } ], - "blockNumber": 4426325, - "cumulativeGasUsed": "438578", + "blockNumber": 4733015, + "cumulativeGasUsed": "449742", "status": 1, "byzantium": true }, "args": [ - "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "0x00442f9Fb6a82A23A7bdDc9B0358686C41320a38", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleFactoryC2.json index bff1fcf6f..59073cebf 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleFactoryC2.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleFactoryC2.json @@ -1,5 +1,5 @@ { - "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "address": "0x573b8748B7D3204bF60836217f63b1332E123BB1", "abi": [ { "inputs": [ @@ -273,22 +273,22 @@ "type": "function" } ], - "transactionHash": "0xb0acdd013244276e94be01e0238faa6baa913844033575dec28a90b10c29659e", + "transactionHash": "0xe5f0951a102fe75f2f145b5cef410d34a94edc90c4cedebac8f1a3c6c7c1462c", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1374604", - "logsBloom": "0x00000000000000000000000000000000008000000400800000800000000000000000000000000000000000000000000000000000000040000000004000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000010", - "blockHash": "0x98758cdcab89ee247b22fc84fc5a4a083efa2e8d85d6466e91c0fbdca62f3e04", - "transactionHash": "0xb0acdd013244276e94be01e0238faa6baa913844033575dec28a90b10c29659e", + "gasUsed": "1374592", + "logsBloom": "0x00000400000000000001000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001200000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x612ba23a88c2927ef6eeb9be38b3401561c7a286c6b86e4056e4308a6f4df948", + "transactionHash": "0xe5f0951a102fe75f2f145b5cef410d34a94edc90c4cedebac8f1a3c6c7c1462c", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426328, - "transactionHash": "0xb0acdd013244276e94be01e0238faa6baa913844033575dec28a90b10c29659e", - "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "blockNumber": 4733018, + "transactionHash": "0xe5f0951a102fe75f2f145b5cef410d34a94edc90c4cedebac8f1a3c6c7c1462c", + "address": "0x573b8748B7D3204bF60836217f63b1332E123BB1", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -296,13 +296,13 @@ ], "data": "0x", "logIndex": 0, - "blockHash": "0x98758cdcab89ee247b22fc84fc5a4a083efa2e8d85d6466e91c0fbdca62f3e04" + "blockHash": "0x612ba23a88c2927ef6eeb9be38b3401561c7a286c6b86e4056e4308a6f4df948" }, { "transactionIndex": 1, - "blockNumber": 4426328, - "transactionHash": "0xb0acdd013244276e94be01e0238faa6baa913844033575dec28a90b10c29659e", - "address": "0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb", + "blockNumber": 4733018, + "transactionHash": "0xe5f0951a102fe75f2f145b5cef410d34a94edc90c4cedebac8f1a3c6c7c1462c", + "address": "0x573b8748B7D3204bF60836217f63b1332E123BB1", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -310,18 +310,18 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0x98758cdcab89ee247b22fc84fc5a4a083efa2e8d85d6466e91c0fbdca62f3e04" + "blockHash": "0x612ba23a88c2927ef6eeb9be38b3401561c7a286c6b86e4056e4308a6f4df948" } ], - "blockNumber": 4426328, - "cumulativeGasUsed": "1418479", + "blockNumber": 4733018, + "cumulativeGasUsed": "1418455", "status": 1, "byzantium": true }, "args": [ - "0x948669617b558cd3bb7F3dd94720346b3E9cD047", - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0xBA73297EBe019158422c726A051D3647E5E4EA7B", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta.json index c9759f780..63df0b2ce 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta.json @@ -1,5 +1,5 @@ { - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "abi": [ { "anonymous": false, @@ -1407,35 +1407,35 @@ "type": "constructor" } ], - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1124696", - "logsBloom": "0x00000400000000000000000000000020400000000400800000800000000000000000000000000000000000000000000000000000000040000100000000000000000000000000008000000000000002000001000000000800004000000000000000004000020000000000001080000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000100004000000000000000000000000000000000020000200000000010001000000000080000400000000000000000020000001000000000010000000000000800000000000000000001000000001000000", - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087", - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "gasUsed": "1124672", + "logsBloom": "0x00000000000000000000000000000000400000000408800000800000000000000000000040002000000000000000000000000000000040000000000000000000000008000000000000000000000002000001000000000800004000000000000000000000020000000000001000000800000000800000000000000000000001400080000000000000000000000000000000000000000000000000000000800000000000000000000010000000000000000004000000002000000000000000000400000020000000002000000001000000800000000440000000000000000020000000000000000010000000000000000000000000020000001000000001000000", + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1", + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x000000000000000000000000a36e6ee8c5eebfb1738fb78ce3d09562869f58a4" + "0x00000000000000000000000000442f9fb6a82a23a7bddc9b0358686c41320a38" ], "data": "0x", "logIndex": 0, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" }, { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1443,39 +1443,39 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" }, { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + "0x000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 2, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" }, { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + "0x000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 3, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" }, { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -1483,42 +1483,42 @@ ], "data": "0x", "logIndex": 4, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" }, { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" ], "data": "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", "logIndex": 5, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" }, { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 6, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" } ], - "blockNumber": 4426323, - "cumulativeGasUsed": "1168571", + "blockNumber": 4733013, + "cumulativeGasUsed": "1168535", "status": 1, "byzantium": true }, "args": [ - "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0x00442f9Fb6a82A23A7bdDc9B0358686C41320a38", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", @@ -1532,12 +1532,12 @@ "RARI", "ipfs:/", "", - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ] }, - "implementation": "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "implementation": "0x00442f9Fb6a82A23A7bdDc9B0358686C41320a38", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Implementation.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Implementation.json index f4a5e1e95..19f868fc8 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Implementation.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", + "address": "0x00442f9Fb6a82A23A7bdDc9B0358686C41320a38", "abi": [ { "anonymous": false, @@ -1263,7 +1263,7 @@ "type": "function" } ], - "transactionHash": "0x8042a9557876244ff937429c77fc566be8486164d40fd965ee69c558cefff89f", + "transactionHash": "0xe2d68dbfab4a94c798084218b4f3547d92583d1118ee25c8df2208991fe508cc", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -1271,11 +1271,11 @@ "transactionIndex": 1, "gasUsed": "5465741", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x5bec628b1b187637307923c23240609cf3be2ada536f1b6729def276f68b5a27", - "transactionHash": "0x8042a9557876244ff937429c77fc566be8486164d40fd965ee69c558cefff89f", + "blockHash": "0x3cec9da5b4ca1850766099607f0c884ab94c51a2e9ff4d48f5fb291d02bf400c", + "transactionHash": "0xe2d68dbfab4a94c798084218b4f3547d92583d1118ee25c8df2208991fe508cc", "logs": [], - "blockNumber": 4426320, - "cumulativeGasUsed": "5509616", + "blockNumber": 4733010, + "cumulativeGasUsed": "5509604", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Proxy.json index 46cbade8a..fb9c16569 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Proxy.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC1155RaribleMeta_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "abi": [ { "inputs": [ @@ -146,35 +146,35 @@ "type": "receive" } ], - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1124696", - "logsBloom": "0x00000400000000000000000000000020400000000400800000800000000000000000000000000000000000000000000000000000000040000100000000000000000000000000008000000000000002000001000000000800004000000000000000004000020000000000001080000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000100004000000000000000000000000000000000020000200000000010001000000000080000400000000000000000020000001000000000010000000000000800000000000000000001000000001000000", - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087", - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", + "gasUsed": "1124672", + "logsBloom": "0x00000000000000000000000000000000400000000408800000800000000000000000000040002000000000000000000000000000000040000000000000000000000008000000000000000000000002000001000000000800004000000000000000000000020000000000001000000800000000800000000000000000000001400080000000000000000000000000000000000000000000000000000000800000000000000000000010000000000000000004000000002000000000000000000400000020000000002000000001000000800000000440000000000000000020000000000000000010000000000000000000000000020000001000000001000000", + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1", + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x000000000000000000000000a36e6ee8c5eebfb1738fb78ce3d09562869f58a4" + "0x00000000000000000000000000442f9fb6a82a23a7bddc9b0358686c41320a38" ], "data": "0x", "logIndex": 0, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" }, { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -182,39 +182,39 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" }, { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + "0x000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 2, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" }, { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + "0x000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 3, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" }, { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -222,42 +222,42 @@ ], "data": "0x", "logIndex": 4, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" }, { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" ], "data": "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", "logIndex": 5, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" }, { "transactionIndex": 1, - "blockNumber": 4426323, - "transactionHash": "0x85fc96e802cd6e6c1bf4a94db84e5e5fa5b3c937358f0bd62f1fdd5aa2e14a5d", - "address": "0x150458a42dF2664dc4A11d2780d23F315Ca5E00A", + "blockNumber": 4733013, + "transactionHash": "0x75963ad23102377eab848cda4dcbe1c9347b1e5f16accac742588248fd378c93", + "address": "0x1693e5232825928AfA77d47584EdA69aB9048B68", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 6, - "blockHash": "0xdf46ed88c73a87883ce643d455bce73bd3a11fde3053898303c201859afa6087" + "blockHash": "0x405989c91998e746686149d6e44f262e68f122bb23df3e7890f933a6ac1328a1" } ], - "blockNumber": 4426323, - "cumulativeGasUsed": "1168571", + "blockNumber": 4733013, + "cumulativeGasUsed": "1168535", "status": 1, "byzantium": true }, "args": [ - "0xa36e6ee8c5eEBfb1738fb78ce3d09562869F58A4", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0x00442f9Fb6a82A23A7bdDc9B0358686C41320a38", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC20TransferProxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC20TransferProxy.json index fc48d1ea8..bb79fcadd 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC20TransferProxy.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC20TransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", + "address": "0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4", "abi": [ { "anonymous": false, @@ -148,7 +148,7 @@ "type": "function" } ], - "transactionHash": "0x945c3abc76d4886aa33bd1c173e22779e3f320347ba416e5fb6efd1d832f7d4f", + "transactionHash": "0x041507203315b806b7498d397f76a3bc17100a5b068f7fd222d39ad14dcba56e", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -156,10 +156,10 @@ "transactionIndex": 1, "gasUsed": "697645", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x45aef88c8151baf3dd83e5923c1afe56d504fff0fd79cfba30bcbf9b6218b195", - "transactionHash": "0x945c3abc76d4886aa33bd1c173e22779e3f320347ba416e5fb6efd1d832f7d4f", + "blockHash": "0xa2aa1b1fa8423da2835b4cf137654791bfcef1fda5d123190a6df33551257a88", + "transactionHash": "0x041507203315b806b7498d397f76a3bc17100a5b068f7fd222d39ad14dcba56e", "logs": [], - "blockNumber": 4426268, + "blockNumber": 4732958, "cumulativeGasUsed": "741508", "status": 1, "byzantium": true diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721LazyMintTransferProxy.json index a101d7b34..00f2d0553 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721LazyMintTransferProxy.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721LazyMintTransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "address": "0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30", "abi": [ { "anonymous": false, @@ -160,7 +160,7 @@ "type": "function" } ], - "transactionHash": "0x957464ef65ecbac3b304fb64368708961ef1540153fec7008cfe817440ea8cf3", + "transactionHash": "0x69d08dc6c2dda54ba345393e5101049c0c4cc44de760298a0af3dae817492717", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -168,11 +168,11 @@ "transactionIndex": 1, "gasUsed": "935371", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x9da32359206408f7c4c5874cedb6462e87282474dc61ca0a04f37496226eed4d", - "transactionHash": "0x957464ef65ecbac3b304fb64368708961ef1540153fec7008cfe817440ea8cf3", + "blockHash": "0x1ca52437482a38f14dee2bbde6f2135aff2850a2669623fc72704f9b52a3200b", + "transactionHash": "0x69d08dc6c2dda54ba345393e5101049c0c4cc44de760298a0af3dae817492717", "logs": [], - "blockNumber": 4426273, - "cumulativeGasUsed": "979246", + "blockNumber": 4732963, + "cumulativeGasUsed": "979234", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleFactoryC2.json index f22bd88c6..d83fb8ca3 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleFactoryC2.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleFactoryC2.json @@ -1,5 +1,5 @@ { - "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "address": "0xae891BdB73E5B2C454d6Fe03824A86d0d440FC0e", "abi": [ { "inputs": [ @@ -273,22 +273,22 @@ "type": "function" } ], - "transactionHash": "0xda5460b464c645bd2fdfbe29d75c878844265b8495d031e54ba5aaa9a22d0b9d", + "transactionHash": "0x9ce61e0666e65e266ad006e45504ab2c00c174179d1011a813482f40cd80f603", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, "gasUsed": "1374604", - "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000010000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000041000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x6432d5995b5ebf2a6fd287db57f76657e87f71b14833a3c81b75edf395f8601c", - "transactionHash": "0xda5460b464c645bd2fdfbe29d75c878844265b8495d031e54ba5aaa9a22d0b9d", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000100000000000000000000000000000000801000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000200000", + "blockHash": "0x1e852a9fc881159d13b3375b5029845b1ee83ac4538082f39a15c936b1eaa586", + "transactionHash": "0x9ce61e0666e65e266ad006e45504ab2c00c174179d1011a813482f40cd80f603", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426318, - "transactionHash": "0xda5460b464c645bd2fdfbe29d75c878844265b8495d031e54ba5aaa9a22d0b9d", - "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "blockNumber": 4733008, + "transactionHash": "0x9ce61e0666e65e266ad006e45504ab2c00c174179d1011a813482f40cd80f603", + "address": "0xae891BdB73E5B2C454d6Fe03824A86d0d440FC0e", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -296,13 +296,13 @@ ], "data": "0x", "logIndex": 0, - "blockHash": "0x6432d5995b5ebf2a6fd287db57f76657e87f71b14833a3c81b75edf395f8601c" + "blockHash": "0x1e852a9fc881159d13b3375b5029845b1ee83ac4538082f39a15c936b1eaa586" }, { "transactionIndex": 1, - "blockNumber": 4426318, - "transactionHash": "0xda5460b464c645bd2fdfbe29d75c878844265b8495d031e54ba5aaa9a22d0b9d", - "address": "0xE5D43624116007CD79D17fB7136672A49fd33CE0", + "blockNumber": 4733008, + "transactionHash": "0x9ce61e0666e65e266ad006e45504ab2c00c174179d1011a813482f40cd80f603", + "address": "0xae891BdB73E5B2C454d6Fe03824A86d0d440FC0e", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -310,18 +310,18 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0x6432d5995b5ebf2a6fd287db57f76657e87f71b14833a3c81b75edf395f8601c" + "blockHash": "0x1e852a9fc881159d13b3375b5029845b1ee83ac4538082f39a15c936b1eaa586" } ], - "blockNumber": 4426318, - "cumulativeGasUsed": "1429667", + "blockNumber": 4733008, + "cumulativeGasUsed": "1418467", "status": 1, "byzantium": true }, "args": [ - "0x7Eade39b026f271910557Cf4676c35552BAEf346", - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0xa516386d84abf578E90E30822ee47d29c9aE52Dd", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta.json index d2e8d4219..af8db7d26 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta.json @@ -1,5 +1,5 @@ { - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "abi": [ { "anonymous": false, @@ -1265,35 +1265,35 @@ "type": "constructor" } ], - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1123036", - "logsBloom": "0x00000400000800000000000000000000400000000400800010800000000000000000000000000000000000000001000000000000000440000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000408000002800000000000000000000000000000000000100004000000000000000000000000000100000020000300000000000001000000000000000400000040000000000020000000000000000060000000000000000000000000000000000000000001000000", - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e", - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "gasUsed": "1123048", + "logsBloom": "0x00000000000000000000000000000000400000000400800010800000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000002000001000000000000004040000000800000000000020000000000001000000800000000800000000000000000000001420000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000002000000000000000000408000020000000000000000001000000000000000440000000000000001020000000000000000020010000000000000000000800200000000000000001002000", + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145", + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000003dc700b8bd71fcd8b80914e10b561c15816f71ac" + "0x000000000000000000000000f902355d763574c9966fe9f8502e92a7e767527d" ], "data": "0x", "logIndex": 0, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" }, { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1301,39 +1301,39 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" }, { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + "0x000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 2, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" }, { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" + "0x00000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 3, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" }, { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -1341,42 +1341,42 @@ ], "data": "0x", "logIndex": 4, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" }, { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" ], "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", "logIndex": 5, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" }, { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 6, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" } ], - "blockNumber": 4426312, - "cumulativeGasUsed": "1178087", + "blockNumber": 4733002, + "cumulativeGasUsed": "1166899", "status": 1, "byzantium": true }, "args": [ - "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0xF902355D763574C9966FE9f8502e92a7E767527d", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda30800000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e3000000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", @@ -1390,12 +1390,12 @@ "RARI", "ipfs:/", "", - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ] }, - "implementation": "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "implementation": "0xF902355D763574C9966FE9f8502e92a7E767527d", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Implementation.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Implementation.json index 394e6a41d..0895b06f4 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Implementation.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "address": "0xF902355D763574C9966FE9f8502e92a7E767527d", "abi": [ { "anonymous": false, @@ -1121,7 +1121,7 @@ "type": "function" } ], - "transactionHash": "0xbdc98adef39402a0fce8ba811a0c7bddd73f21a5d3ae241e8f8bf0729a520488", + "transactionHash": "0xfe8ad6a1a6af21a63e058c091dfccc2e96d9a0d7c2d7485d8e161d8d6d01ffd4", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -1129,11 +1129,11 @@ "transactionIndex": 1, "gasUsed": "4791813", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xcee3a1bdf8ec8bdd09f4432ae032eb8e4c5612c7623dde71c2bfc0d3e4c8f926", - "transactionHash": "0xbdc98adef39402a0fce8ba811a0c7bddd73f21a5d3ae241e8f8bf0729a520488", + "blockHash": "0xa29bfdf965499c765febeb48eb23bc31670f7e2ce1272a54a1c8b48e4c0fddd2", + "transactionHash": "0xfe8ad6a1a6af21a63e058c091dfccc2e96d9a0d7c2d7485d8e161d8d6d01ffd4", "logs": [], - "blockNumber": 4426310, - "cumulativeGasUsed": "4835676", + "blockNumber": 4733000, + "cumulativeGasUsed": "4835664", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Proxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Proxy.json index b51dd411b..5f8a44a9f 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Proxy.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMeta_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "abi": [ { "inputs": [ @@ -146,35 +146,35 @@ "type": "receive" } ], - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1123036", - "logsBloom": "0x00000400000800000000000000000000400000000400800010800000000000000000000000000000000000000001000000000000000440000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000408000002800000000000000000000000000000000000100004000000000000000000000000000100000020000300000000000001000000000000000400000040000000000020000000000000000060000000000000000000000000000000000000000001000000", - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e", - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", + "gasUsed": "1123048", + "logsBloom": "0x00000000000000000000000000000000400000000400800010800000000000000000000000000000000000000000000000000000000440000000000000000000000000000000000000000000000002000001000000000000004040000000800000000000020000000000001000000800000000800000000000000000000001420000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000002000000000000000000408000020000000000000000001000000000000000440000000000000001020000000000000000020010000000000000000000800200000000000000001002000", + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145", + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000003dc700b8bd71fcd8b80914e10b561c15816f71ac" + "0x000000000000000000000000f902355d763574c9966fe9f8502e92a7e767527d" ], "data": "0x", "logIndex": 0, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" }, { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -182,39 +182,39 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" }, { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + "0x000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 2, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" }, { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" + "0x00000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", "logIndex": 3, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" }, { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -222,42 +222,42 @@ ], "data": "0x", "logIndex": 4, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" }, { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" ], "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", "logIndex": 5, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" }, { "transactionIndex": 1, - "blockNumber": 4426312, - "transactionHash": "0x5665505674d14b67f77440292de29736856cb6115d315046fd892d992f087da1", - "address": "0x6448B5A51c6D41480B34248C516957D59f754598", + "blockNumber": 4733002, + "transactionHash": "0xe58dac0d04364cd6c36c1a23295a41babe0d4023c05d6dda0575062fe29b9b5d", + "address": "0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 6, - "blockHash": "0xb4ef313be7cfa99b76216b96d8eb6f83afbf59415d6f091f086901554599751e" + "blockHash": "0x909c6ea9aa47273da1c6f0648f8a054b6e9fa2de89da3c5b12e710471bb49145" } ], - "blockNumber": 4426312, - "cumulativeGasUsed": "1178087", + "blockNumber": 4733002, + "cumulativeGasUsed": "1166899", "status": 1, "byzantium": true }, "args": [ - "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0xF902355D763574C9966FE9f8502e92a7E767527d", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda30800000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e3000000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMinimalBeaconMeta.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMinimalBeaconMeta.json index 1119ee7ac..5a3b15755 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMinimalBeaconMeta.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ERC721RaribleMinimalBeaconMeta.json @@ -1,5 +1,5 @@ { - "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "address": "0xa516386d84abf578E90E30822ee47d29c9aE52Dd", "abi": [ { "inputs": [ @@ -109,22 +109,22 @@ "type": "function" } ], - "transactionHash": "0x541b70be6a41d1451158e26b31d99d15e7868eefe442fa68677eb948a44508d4", + "transactionHash": "0x99c32f158c57f8d41b9736a6e294f86c3339dfdb2f10448629e6b69e9cab03b5", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "394691", - "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000004001000000000000004000004000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000200000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xd37050c7b6f0ba10d0abc904859d2160dea560982b65d3db594d1068dab36388", - "transactionHash": "0x541b70be6a41d1451158e26b31d99d15e7868eefe442fa68677eb948a44508d4", + "gasUsed": "394703", + "logsBloom": "0x00000000000000000000000400000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000400000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000002000000000000000000000000000", + "blockHash": "0x0d792fc6c915d966552dc4ae7db66dcf1f5c010822ce3885d1ef6e6abe6eaa6b", + "transactionHash": "0x99c32f158c57f8d41b9736a6e294f86c3339dfdb2f10448629e6b69e9cab03b5", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426315, - "transactionHash": "0x541b70be6a41d1451158e26b31d99d15e7868eefe442fa68677eb948a44508d4", - "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "blockNumber": 4733005, + "transactionHash": "0x99c32f158c57f8d41b9736a6e294f86c3339dfdb2f10448629e6b69e9cab03b5", + "address": "0xa516386d84abf578E90E30822ee47d29c9aE52Dd", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -132,13 +132,13 @@ ], "data": "0x", "logIndex": 0, - "blockHash": "0xd37050c7b6f0ba10d0abc904859d2160dea560982b65d3db594d1068dab36388" + "blockHash": "0x0d792fc6c915d966552dc4ae7db66dcf1f5c010822ce3885d1ef6e6abe6eaa6b" }, { "transactionIndex": 1, - "blockNumber": 4426315, - "transactionHash": "0x541b70be6a41d1451158e26b31d99d15e7868eefe442fa68677eb948a44508d4", - "address": "0x7Eade39b026f271910557Cf4676c35552BAEf346", + "blockNumber": 4733005, + "transactionHash": "0x99c32f158c57f8d41b9736a6e294f86c3339dfdb2f10448629e6b69e9cab03b5", + "address": "0xa516386d84abf578E90E30822ee47d29c9aE52Dd", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -146,16 +146,16 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xd37050c7b6f0ba10d0abc904859d2160dea560982b65d3db594d1068dab36388" + "blockHash": "0x0d792fc6c915d966552dc4ae7db66dcf1f5c010822ce3885d1ef6e6abe6eaa6b" } ], - "blockNumber": 4426315, - "cumulativeGasUsed": "438554", + "blockNumber": 4733005, + "cumulativeGasUsed": "438566", "status": 1, "byzantium": true }, "args": [ - "0x3dc700B8bD71FCd8B80914E10B561c15816F71Ac", + "0xF902355D763574C9966FE9f8502e92a7E767527d", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2.json index 5a9c06761..d00b0eb7f 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2.json @@ -1,5 +1,5 @@ { - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "abi": [ { "anonymous": false, @@ -1183,35 +1183,35 @@ "type": "constructor" } ], - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1049680", - "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000000000000000000000000000400000000000000000000000800000000000000010000000020000010000000000000042004000000000000000000200020000000000000008004002008000000000000000000000004000000000010001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000002000000004000000000000000a0000008000000000001000000000000000400000000000000000020000000000000000000000000000000000000020000000000000000300000000200", - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594", - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "gasUsed": "1049656", + "logsBloom": "0x000080000000000000000000000000004000000004008000008000000008000022000000000020000000000000000000000000000000400002000000000000000000800000000000000010000000020080010000000000000040004000000000000000000200020000000000000008004002008000000000000000000000004000000000000001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000000000000000000000000000000a0000008000000000001000000000000000400000000002000000020000000000000000000000000000080000000000000000000000000300000080000", + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283", + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000006c619e55e9947051e98570a36044c31c4eb0736d" + "0x0000000000000000000000000b63e74fc14cdc3a7f63d62d4b18c6be437ce408" ], "data": "0x", "logIndex": 0, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" }, { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -1219,52 +1219,52 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" }, { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", "0xd8f960c100000000000000000000000000000000000000000000000000000000" ], - "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", + "data": "0x00000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30", "logIndex": 2, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" }, { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" ], - "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", + "data": "0x000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca", "logIndex": 3, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" }, { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", "0xf63c282500000000000000000000000000000000000000000000000000000000" ], - "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", + "data": "0x000000000000000000000000c0bd7ae193c1bd00fa33b0e5fdcf60ff2d66eefc", "logIndex": 4, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" }, { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -1272,30 +1272,30 @@ ], "data": "0x", "logIndex": 5, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" }, { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 6, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" } ], - "blockNumber": 4426288, - "cumulativeGasUsed": "1101943", + "blockNumber": 4732978, + "cumulativeGasUsed": "1093519", "status": 1, "byzantium": true }, "args": [ - "0x6c619E55E9947051e98570a36044C31C4eB0736d", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + "0x0b63E74FC14cDC3A7f63D62d4B18c6Be437cE408", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0x2bed54d6000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308000000000000000000000000dac1af2dca52204b9d3d7b3bf967a30d5fce8dc400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097540c06647d14c5b63e678dc6e290e0f2150cc00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c0bd7ae193c1bd00fa33b0e5fdcf60ff2d66eefc0000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", @@ -1305,25 +1305,25 @@ "execute": { "methodName": "__ExchangeV2_init_proxy", "args": [ - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4", 0, "0x0000000000000000000000000000000000000000", - "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893", [ "0xd8f960c1", "0x1cdfaa40" ], [ - "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", - "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2" + "0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30", + "0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca" ], "0xf63c2825", - "0xc4F5FCD96e3b37A31f871F0968206F47294a4471" + "0xc0BD7Ae193c1BD00Fa33B0E5fDCF60FF2d66EefC" ] }, - "implementation": "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "implementation": "0x0b63E74FC14cDC3A7f63D62d4B18c6Be437cE408", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Implementation.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Implementation.json index 5247abade..c407891f3 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Implementation.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0x6c619E55E9947051e98570a36044C31C4eB0736d", + "address": "0x0b63E74FC14cDC3A7f63D62d4B18c6Be437cE408", "abi": [ { "anonymous": false, @@ -1039,7 +1039,7 @@ "type": "function" } ], - "transactionHash": "0x7746b5dbd81ec0122b7417521e197699c62f1761ab1554d00c5abd9b80e78137", + "transactionHash": "0x5d554d9e85e8b27f451525acd4e698e42d735af6d542d4e0ff3ece495d489edf", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -1047,11 +1047,11 @@ "transactionIndex": 1, "gasUsed": "5353145", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xb91bc5995218387dec46b7252aef9661f664ca9dd8c2c88d6a305a581f9311da", - "transactionHash": "0x7746b5dbd81ec0122b7417521e197699c62f1761ab1554d00c5abd9b80e78137", + "blockHash": "0x9cb48ceb1e314bd69e9ddd2c22da8ed789b6824483c4d74689565f4d5dffb321", + "transactionHash": "0x5d554d9e85e8b27f451525acd4e698e42d735af6d542d4e0ff3ece495d489edf", "logs": [], - "blockNumber": 4426286, - "cumulativeGasUsed": "5397020", + "blockNumber": 4732976, + "cumulativeGasUsed": "5397008", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Proxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Proxy.json index 425cc8134..8f19f90b5 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Proxy.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/ExchangeMetaV2_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "abi": [ { "inputs": [ @@ -146,35 +146,35 @@ "type": "receive" } ], - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, - "gasUsed": "1049680", - "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000000000000000000000000000400000000000000000000000800000000000000010000000020000010000000000000042004000000000000000000200020000000000000008004002008000000000000000000000004000000000010001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000002000000004000000000000000a0000008000000000001000000000000000400000000000000000020000000000000000000000000000000000000020000000000000000300000000200", - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594", - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", + "gasUsed": "1049656", + "logsBloom": "0x000080000000000000000000000000004000000004008000008000000008000022000000000020000000000000000000000000000000400002000000000000000000800000000000000010000000020080010000000000000040004000000000000000000200020000000000000008004002008000000000000000000000004000000000000001000000000000000000000000000000000000000000008000000000000000000000000000000000000000040000000000000000000000000000000000a0000008000000000001000000000000000400000000002000000020000000000000000000000000000080000000000000000000000000300000080000", + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283", + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000006c619e55e9947051e98570a36044c31c4eb0736d" + "0x0000000000000000000000000b63e74fc14cdc3a7f63d62d4b18c6be437ce408" ], "data": "0x", "logIndex": 0, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" }, { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -182,52 +182,52 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" }, { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", "0xd8f960c100000000000000000000000000000000000000000000000000000000" ], - "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", + "data": "0x00000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30", "logIndex": 2, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" }, { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" ], - "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", + "data": "0x000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca", "logIndex": 3, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" }, { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", "0xf63c282500000000000000000000000000000000000000000000000000000000" ], - "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", + "data": "0x000000000000000000000000c0bd7ae193c1bd00fa33b0e5fdcf60ff2d66eefc", "logIndex": 4, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" }, { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -235,30 +235,30 @@ ], "data": "0x", "logIndex": 5, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" }, { "transactionIndex": 1, - "blockNumber": 4426288, - "transactionHash": "0xa7f575de9cabf0eeca795ffe35046574673491fe1d5e69a706bb5b8888989d48", - "address": "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "blockNumber": 4732978, + "transactionHash": "0x5e49d1fdc654dd15337961ce518d7a98992e752b87c1c2b35b3920f43f1805ce", + "address": "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 6, - "blockHash": "0xc606fce335a944eccbe85d19dfc75812cf8790aa68b5de21411836b5c66e4594" + "blockHash": "0x1c0d6225b30c6bbdb5d8dca3dd610b308610e90833ea5817c13d0c879e4bd283" } ], - "blockNumber": 4426288, - "cumulativeGasUsed": "1101943", + "blockNumber": 4732978, + "cumulativeGasUsed": "1093519", "status": 1, "byzantium": true }, "args": [ - "0x6c619E55E9947051e98570a36044C31C4eB0736d", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + "0x0b63E74FC14cDC3A7f63D62d4B18c6Be437cE408", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0x2bed54d6000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308000000000000000000000000dac1af2dca52204b9d3d7b3bf967a30d5fce8dc400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097540c06647d14c5b63e678dc6e290e0f2150cc00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c0bd7ae193c1bd00fa33b0e5fdcf60ff2d66eefc0000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/RaribleExchangeWrapper.json b/projects/hardhat-deploy/deployments/lisk_sepolia/RaribleExchangeWrapper.json index e43de7427..1ad9c214b 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/RaribleExchangeWrapper.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/RaribleExchangeWrapper.json @@ -1,5 +1,5 @@ { - "address": "0x689bFf422807f39c9A927bb78c34FE8D63529e28", + "address": "0x45d6C2567a7F32c70e57D26E4ee89045A2F472Dc", "abi": [ { "inputs": [ @@ -531,22 +531,22 @@ "type": "receive" } ], - "transactionHash": "0x807d48eea3e6b3fdedf7cd2e43adf44575245d6b638f78e6c7259063e80205ff", + "transactionHash": "0x015dbe655fad744a95abda8d437a39ab05bee35deaa12637bee9ae0f67c89523", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, "gasUsed": "4312361", - "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001001000000000004000000000000000000000020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000004000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x70db9cda5d665f56a75cf925252e5a1b8a5cb70b50feaae0fd18fa8d96b05330", - "transactionHash": "0x807d48eea3e6b3fdedf7cd2e43adf44575245d6b638f78e6c7259063e80205ff", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000040000000040000000000000000000020000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000010000000000000000000000000000000000000000000000000", + "blockHash": "0x6bae26f61c5c784c8adcc0651b987d5949e129309e3d180495453dc2a79c5f47", + "transactionHash": "0x015dbe655fad744a95abda8d437a39ab05bee35deaa12637bee9ae0f67c89523", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426331, - "transactionHash": "0x807d48eea3e6b3fdedf7cd2e43adf44575245d6b638f78e6c7259063e80205ff", - "address": "0x689bFf422807f39c9A927bb78c34FE8D63529e28", + "blockNumber": 4733021, + "transactionHash": "0x015dbe655fad744a95abda8d437a39ab05bee35deaa12637bee9ae0f67c89523", + "address": "0x45d6C2567a7F32c70e57D26E4ee89045A2F472Dc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -554,13 +554,13 @@ ], "data": "0x", "logIndex": 0, - "blockHash": "0x70db9cda5d665f56a75cf925252e5a1b8a5cb70b50feaae0fd18fa8d96b05330" + "blockHash": "0x6bae26f61c5c784c8adcc0651b987d5949e129309e3d180495453dc2a79c5f47" }, { "transactionIndex": 1, - "blockNumber": 4426331, - "transactionHash": "0x807d48eea3e6b3fdedf7cd2e43adf44575245d6b638f78e6c7259063e80205ff", - "address": "0x689bFf422807f39c9A927bb78c34FE8D63529e28", + "blockNumber": 4733021, + "transactionHash": "0x015dbe655fad744a95abda8d437a39ab05bee35deaa12637bee9ae0f67c89523", + "address": "0x45d6C2567a7F32c70e57D26E4ee89045A2F472Dc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -568,18 +568,18 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0x70db9cda5d665f56a75cf925252e5a1b8a5cb70b50feaae0fd18fa8d96b05330" + "blockHash": "0x6bae26f61c5c784c8adcc0651b987d5949e129309e3d180495453dc2a79c5f47" } ], - "blockNumber": 4426331, - "cumulativeGasUsed": "4356224", + "blockNumber": 4733021, + "cumulativeGasUsed": "4364612", "status": 1, "byzantium": true }, "args": [ [ "0x0000000000000000000000000000000000000000", - "0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B", + "0x8E705d722049cEEFd3606b15070CA8A72DC69eA4", "0x00000000006c3852cbEf3e08E8dF289169EdE581", "0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000000", @@ -592,7 +592,7 @@ ], "0x0000000000000000000000000000000000000000", [ - "0xA3d49c7e2c845b792e422696FE0D9ef17a509731" + "0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4" ], "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry.json b/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry.json index cee52a573..6fe537144 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry.json @@ -1,5 +1,5 @@ { - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "abi": [ { "anonymous": false, @@ -496,35 +496,35 @@ "type": "constructor" } ], - "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "transactionHash": "0xe640611da413969bc3b8ca8c40aad55050bec22f498bccc7498f5b14164462ac", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, "gasUsed": "811009", - "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", - "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3", - "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "logsBloom": "0x00000000100000000000000000000000400000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000200000000002000001000000000000004000000000000000000000022000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000100000800000200000000000000000020000000000000000001000000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x1518ac5ea459fada97951b790b8041f0304ecb03205a2e23980103d67a35d28d", + "transactionHash": "0xe640611da413969bc3b8ca8c40aad55050bec22f498bccc7498f5b14164462ac", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426261, - "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 4732945, + "transactionHash": "0xe640611da413969bc3b8ca8c40aad55050bec22f498bccc7498f5b14164462ac", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" + "0x000000000000000000000000d0c006f59160847ecac63cca98a568511689d02f" ], "data": "0x", "logIndex": 0, - "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + "blockHash": "0x1518ac5ea459fada97951b790b8041f0304ecb03205a2e23980103d67a35d28d" }, { "transactionIndex": 1, - "blockNumber": 4426261, - "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 4732945, + "transactionHash": "0xe640611da413969bc3b8ca8c40aad55050bec22f498bccc7498f5b14164462ac", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -532,13 +532,13 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + "blockHash": "0x1518ac5ea459fada97951b790b8041f0304ecb03205a2e23980103d67a35d28d" }, { "transactionIndex": 1, - "blockNumber": 4426261, - "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 4732945, + "transactionHash": "0xe640611da413969bc3b8ca8c40aad55050bec22f498bccc7498f5b14164462ac", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -546,29 +546,29 @@ ], "data": "0x", "logIndex": 2, - "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + "blockHash": "0x1518ac5ea459fada97951b790b8041f0304ecb03205a2e23980103d67a35d28d" }, { "transactionIndex": 1, - "blockNumber": 4426261, - "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 4732945, + "transactionHash": "0xe640611da413969bc3b8ca8c40aad55050bec22f498bccc7498f5b14164462ac", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 3, - "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + "blockHash": "0x1518ac5ea459fada97951b790b8041f0304ecb03205a2e23980103d67a35d28d" } ], - "blockNumber": 4426261, - "cumulativeGasUsed": "854884", + "blockNumber": 4732945, + "cumulativeGasUsed": "854872", "status": 1, "byzantium": true }, "args": [ - "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xd0C006f59160847eCAC63CcA98A568511689d02F", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "numDeployments": 1, @@ -582,7 +582,7 @@ "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ] }, - "implementation": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "implementation": "0xd0C006f59160847eCAC63CcA98A568511689d02F", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Implementation.json b/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Implementation.json index 7e52a9666..02d14ab87 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Implementation.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "address": "0xd0C006f59160847eCAC63CcA98A568511689d02F", "abi": [ { "anonymous": false, @@ -352,7 +352,7 @@ "type": "function" } ], - "transactionHash": "0x00d92ccf6e81ca6109a5ea14e85d5fa7a4928e4f51821fddfce9089947fc6aa4", + "transactionHash": "0x6dea3ea5a6df5f5106e4bca5070b41f0200d182d4857e37755f43a0bd9b60adc", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -360,11 +360,11 @@ "transactionIndex": 1, "gasUsed": "1663864", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x9c87fd165ef0a771b46756b8e507288d19b8383a6d63c65df842cbc6673746cc", - "transactionHash": "0x00d92ccf6e81ca6109a5ea14e85d5fa7a4928e4f51821fddfce9089947fc6aa4", + "blockHash": "0xcf0776a46c4eb21012e4788b01878c2f1d2150805a843fa354d50027b04a3092", + "transactionHash": "0x6dea3ea5a6df5f5106e4bca5070b41f0200d182d4857e37755f43a0bd9b60adc", "logs": [], - "blockNumber": 4426258, - "cumulativeGasUsed": "1718927", + "blockNumber": 4732942, + "cumulativeGasUsed": "1707727", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Proxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Proxy.json index e011c51f2..69e631e8b 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Proxy.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/RoyaltiesRegistry_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "abi": [ { "inputs": [ @@ -146,35 +146,35 @@ "type": "receive" } ], - "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "transactionHash": "0xe640611da413969bc3b8ca8c40aad55050bec22f498bccc7498f5b14164462ac", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, "transactionIndex": 1, "gasUsed": "811009", - "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", - "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3", - "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", + "logsBloom": "0x00000000100000000000000000000000400000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000200000000002000001000000000000004000000000000000000000022000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000100000800000200000000000000000020000000000000000001000000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x1518ac5ea459fada97951b790b8041f0304ecb03205a2e23980103d67a35d28d", + "transactionHash": "0xe640611da413969bc3b8ca8c40aad55050bec22f498bccc7498f5b14164462ac", "logs": [ { "transactionIndex": 1, - "blockNumber": 4426261, - "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 4732945, + "transactionHash": "0xe640611da413969bc3b8ca8c40aad55050bec22f498bccc7498f5b14164462ac", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" + "0x000000000000000000000000d0c006f59160847ecac63cca98a568511689d02f" ], "data": "0x", "logIndex": 0, - "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + "blockHash": "0x1518ac5ea459fada97951b790b8041f0304ecb03205a2e23980103d67a35d28d" }, { "transactionIndex": 1, - "blockNumber": 4426261, - "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 4732945, + "transactionHash": "0xe640611da413969bc3b8ca8c40aad55050bec22f498bccc7498f5b14164462ac", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -182,13 +182,13 @@ ], "data": "0x", "logIndex": 1, - "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + "blockHash": "0x1518ac5ea459fada97951b790b8041f0304ecb03205a2e23980103d67a35d28d" }, { "transactionIndex": 1, - "blockNumber": 4426261, - "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 4732945, + "transactionHash": "0xe640611da413969bc3b8ca8c40aad55050bec22f498bccc7498f5b14164462ac", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", @@ -196,29 +196,29 @@ ], "data": "0x", "logIndex": 2, - "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + "blockHash": "0x1518ac5ea459fada97951b790b8041f0304ecb03205a2e23980103d67a35d28d" }, { "transactionIndex": 1, - "blockNumber": 4426261, - "transactionHash": "0x0fe4c9d93ec801071b02e564a5f92a775240c93eed553ae56187a6091da6385c", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "blockNumber": 4732945, + "transactionHash": "0xe640611da413969bc3b8ca8c40aad55050bec22f498bccc7498f5b14164462ac", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", "logIndex": 3, - "blockHash": "0xa7d6b2eb545aa365710484fa37e3746a47cf9ff2b724c1c8623176f61ae239e3" + "blockHash": "0x1518ac5ea459fada97951b790b8041f0304ecb03205a2e23980103d67a35d28d" } ], - "blockNumber": 4426261, - "cumulativeGasUsed": "854884", + "blockNumber": 4732945, + "cumulativeGasUsed": "854872", "status": 1, "byzantium": true }, "args": [ - "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xd0C006f59160847eCAC63CcA98A568511689d02F", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/lisk_sepolia/TransferProxy.json b/projects/hardhat-deploy/deployments/lisk_sepolia/TransferProxy.json index 5580026ed..a67cbc999 100644 --- a/projects/hardhat-deploy/deployments/lisk_sepolia/TransferProxy.json +++ b/projects/hardhat-deploy/deployments/lisk_sepolia/TransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "address": "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", "abi": [ { "anonymous": false, @@ -186,7 +186,7 @@ "type": "function" } ], - "transactionHash": "0xadc0d858f7fffab8c52ffbd1451b3df084bf858ea09e2c707fe544f6cb8a9025", + "transactionHash": "0x6aef01c05e33d7488d2679fd948305f8ab466ff9a8feee5a4bdc70e1e54cadda", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", @@ -194,11 +194,11 @@ "transactionIndex": 1, "gasUsed": "777214", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x765e210d32d6bace1a17a55994ca824b97f75e93190336b03f4ded0c0f87791f", - "transactionHash": "0xadc0d858f7fffab8c52ffbd1451b3df084bf858ea09e2c707fe544f6cb8a9025", + "blockHash": "0xef2b6cf4ef8ae12a439b6954a45449e406afa2577481edff0c0757ae692fcc43", + "transactionHash": "0x6aef01c05e33d7488d2679fd948305f8ab466ff9a8feee5a4bdc70e1e54cadda", "logs": [], - "blockNumber": 4426263, - "cumulativeGasUsed": "821089", + "blockNumber": 4732953, + "cumulativeGasUsed": "821077", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/sepolia/AssetMatcherCollection.json b/projects/hardhat-deploy/deployments/sepolia/AssetMatcherCollection.json index 6d249e47c..3790aa959 100644 --- a/projects/hardhat-deploy/deployments/sepolia/AssetMatcherCollection.json +++ b/projects/hardhat-deploy/deployments/sepolia/AssetMatcherCollection.json @@ -1,5 +1,5 @@ { - "address": "0xc4F5FCD96e3b37A31f871F0968206F47294a4471", + "address": "0xc0BD7Ae193c1BD00Fa33B0E5fDCF60FF2d66EefC", "abi": [ { "inputs": [ @@ -62,19 +62,19 @@ "type": "function" } ], - "transactionHash": "0xb01a7ff96af40cb1140f5d481220aec5b7f3285868cc0964f676075ea08b1df6", + "transactionHash": "0x561191c6db341f72eb67098cc6e8fa203e948f95918ef3720e82a1acc957bba3", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 53, + "transactionIndex": 82, "gasUsed": "302853", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x93656b9642d0879efaeb7855ab4aac60c5360f24b411efc8729ef3a6450cf61c", - "transactionHash": "0xb01a7ff96af40cb1140f5d481220aec5b7f3285868cc0964f676075ea08b1df6", + "blockHash": "0x23d14a93257d2b5b3ae786e41ad268951a1703c619cb4292ebaac917711618ce", + "transactionHash": "0x561191c6db341f72eb67098cc6e8fa203e948f95918ef3720e82a1acc957bba3", "logs": [], - "blockNumber": 5783741, - "cumulativeGasUsed": "9773409", + "blockNumber": 5831284, + "cumulativeGasUsed": "10252843", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/sepolia/DefaultProxyAdmin.json b/projects/hardhat-deploy/deployments/sepolia/DefaultProxyAdmin.json index 75b95664c..29c3d22cd 100644 --- a/projects/hardhat-deploy/deployments/sepolia/DefaultProxyAdmin.json +++ b/projects/hardhat-deploy/deployments/sepolia/DefaultProxyAdmin.json @@ -1,5 +1,5 @@ { - "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "address": "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", "abi": [ { "inputs": [ @@ -162,39 +162,39 @@ "type": "function" } ], - "transactionHash": "0xb2ed487bd6fafc8d421eee6035e5e1b8d9358fc04dced9cd5d341cb4011aa2f0", + "transactionHash": "0x562c044fac94bfb76d857e09a25b4965a9049fb6eb053471a266ab0175a6e8ed", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 52, + "transactionIndex": 51, "gasUsed": "677380", - "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000001000000000000020000000000000000000800000000000000000000000000000000500200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xd2303a8e80f0e90a98b225e323cf68746003579bbd6562f930722427b0856545", - "transactionHash": "0xb2ed487bd6fafc8d421eee6035e5e1b8d9358fc04dced9cd5d341cb4011aa2f0", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000022000004000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x294d7752e984bc2febd414fde9ea6a33ba45699d1247ce0aee916f95ee398bae", + "transactionHash": "0x562c044fac94bfb76d857e09a25b4965a9049fb6eb053471a266ab0175a6e8ed", "logs": [ { - "transactionIndex": 52, - "blockNumber": 5783727, - "transactionHash": "0xb2ed487bd6fafc8d421eee6035e5e1b8d9358fc04dced9cd5d341cb4011aa2f0", - "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "transactionIndex": 51, + "blockNumber": 5831269, + "transactionHash": "0x562c044fac94bfb76d857e09a25b4965a9049fb6eb053471a266ab0175a6e8ed", + "address": "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 166, - "blockHash": "0xd2303a8e80f0e90a98b225e323cf68746003579bbd6562f930722427b0856545" + "logIndex": 111, + "blockHash": "0x294d7752e984bc2febd414fde9ea6a33ba45699d1247ce0aee916f95ee398bae" } ], - "blockNumber": 5783727, - "cumulativeGasUsed": "12010903", + "blockNumber": 5831269, + "cumulativeGasUsed": "6786256", "status": 1, "byzantium": true }, "args": [ - "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC1155LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/sepolia/ERC1155LazyMintTransferProxy.json index 2baaf8c81..678dbbcd3 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC1155LazyMintTransferProxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC1155LazyMintTransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "address": "0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca", "abi": [ { "anonymous": false, @@ -160,19 +160,19 @@ "type": "function" } ], - "transactionHash": "0xccff957358a0b556591d29c9900735503e2ad976cab57866e9b75ad6ac35120f", + "transactionHash": "0x407cf6833943531ca17809ab04bb8147056a16e132aec03abee2eee69865b764", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 68, + "transactionIndex": 26, "gasUsed": "923250", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x9b266c007609fbe07b56113ce2a1606c64dc24747e2933baabc200d155c50451", - "transactionHash": "0xccff957358a0b556591d29c9900735503e2ad976cab57866e9b75ad6ac35120f", + "blockHash": "0xc9a461aa18ecbf41c75c95c20b91b4d6f58098c113e974e5ea2f164306074103", + "transactionHash": "0x407cf6833943531ca17809ab04bb8147056a16e132aec03abee2eee69865b764", "logs": [], - "blockNumber": 5783739, - "cumulativeGasUsed": "11861008", + "blockNumber": 5831280, + "cumulativeGasUsed": "8272253", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible.json b/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible.json index f03bd53b7..05595b005 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible.json @@ -1,5 +1,5 @@ { - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "abi": [ { "anonymous": false, @@ -1324,118 +1324,118 @@ "type": "constructor" } ], - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 42, - "gasUsed": "1101785", - "logsBloom": "0x00000400000000000000000000000000400000000400800000800000000000000000000000000000000000000000000000000000000040001000000040000000000000000000008000000000000002000001000000000800004000000000000000000000020000000000001080000800000000800000000000000000000001400000004000000000000000000000000000000000000000000000000000880000000000000000000000000000000000100004000000000000000000000000000000000020000200000000000001000020000000000480000000000000000020000000000000000010000000000000800000000000000000001000000001000000", - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa", - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "transactionIndex": 38, + "gasUsed": "1101773", + "logsBloom": "0x00040000000000000000000000000000400000000400800000800000200000000000000040002000000000000000000000000000000040000000000000000000000000000000000000000000000002000001000000000800004000000000000000000000020000000000001000000800000000900000000000000000000001400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000002000000000000000000400000020000000100000000201000000000000000440000000000000000020000000000000000010000000002000000000000000020000001000000001000000", + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946", + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", "logs": [ { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x00000000000000000000000097f85b5cd51c89beb91a3c621c2954858429dfd4" + "0x000000000000000000000000aa622a3c17cde85daf93bcef68950f06107b578a" ], "data": "0x", - "logIndex": 110, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "logIndex": 88, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" }, { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 111, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "logIndex": 89, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" }, { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + "0x000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 112, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "logIndex": 90, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" }, { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + "0x000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 113, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "logIndex": 91, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" }, { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 114, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "logIndex": 92, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" }, { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" ], "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", - "logIndex": 115, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "logIndex": 93, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" }, { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", - "logIndex": 116, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", + "logIndex": 94, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" } ], - "blockNumber": 5783757, - "cumulativeGasUsed": "9475477", + "blockNumber": 5831303, + "cumulativeGasUsed": "6776387", "status": 1, "byzantium": true }, "args": [ - "0x97F85b5cD51C89bEB91a3C621C2954858429DFD4", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0xaa622a3C17CDe85DaF93BCEf68950F06107b578a", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", @@ -1449,12 +1449,12 @@ "RARI", "ipfs:/", "", - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ] }, - "implementation": "0x97F85b5cD51C89bEB91a3C621C2954858429DFD4", + "implementation": "0xaa622a3C17CDe85DaF93BCEf68950F06107b578a", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleBeacon.json b/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleBeacon.json index 6f1c2ddfc..0d6a583d3 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleBeacon.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleBeacon.json @@ -1,5 +1,5 @@ { - "address": "0x792b701837681de8f2B61a27507c9E0a3f4d4b1D", + "address": "0xB21Bc35eC4a9F494724C23da919E47792139eAA0", "abi": [ { "inputs": [ @@ -109,53 +109,53 @@ "type": "function" } ], - "transactionHash": "0xe0059db218889e6d204e891a50b050e82c93e130a4e43c5e54fb8627560c4144", + "transactionHash": "0x4574d2701e16dac0af064834dfb62cf3376ec3e13e4a605cf9484a4e3cdc64a2", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 78, + "transactionIndex": 26, "gasUsed": "394691", - "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000020480000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xcbfb98806412f63de683d9809e7102110910349864be25e5e1ef8df45266a366", - "transactionHash": "0xe0059db218889e6d204e891a50b050e82c93e130a4e43c5e54fb8627560c4144", + "logsBloom": "0x00000000000000000000000000000000000080000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004800000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000800000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x715a67156fec7a2e76d62ee75d99596fa33bcc1170e07c47b7cb43e30c8a44b8", + "transactionHash": "0x4574d2701e16dac0af064834dfb62cf3376ec3e13e4a605cf9484a4e3cdc64a2", "logs": [ { - "transactionIndex": 78, - "blockNumber": 5783758, - "transactionHash": "0xe0059db218889e6d204e891a50b050e82c93e130a4e43c5e54fb8627560c4144", - "address": "0x792b701837681de8f2B61a27507c9E0a3f4d4b1D", + "transactionIndex": 26, + "blockNumber": 5831304, + "transactionHash": "0x4574d2701e16dac0af064834dfb62cf3376ec3e13e4a605cf9484a4e3cdc64a2", + "address": "0xB21Bc35eC4a9F494724C23da919E47792139eAA0", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 167, - "blockHash": "0xcbfb98806412f63de683d9809e7102110910349864be25e5e1ef8df45266a366" + "logIndex": 50, + "blockHash": "0x715a67156fec7a2e76d62ee75d99596fa33bcc1170e07c47b7cb43e30c8a44b8" }, { - "transactionIndex": 78, - "blockNumber": 5783758, - "transactionHash": "0xe0059db218889e6d204e891a50b050e82c93e130a4e43c5e54fb8627560c4144", - "address": "0x792b701837681de8f2B61a27507c9E0a3f4d4b1D", + "transactionIndex": 26, + "blockNumber": 5831304, + "transactionHash": "0x4574d2701e16dac0af064834dfb62cf3376ec3e13e4a605cf9484a4e3cdc64a2", + "address": "0xB21Bc35eC4a9F494724C23da919E47792139eAA0", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 168, - "blockHash": "0xcbfb98806412f63de683d9809e7102110910349864be25e5e1ef8df45266a366" + "logIndex": 51, + "blockHash": "0x715a67156fec7a2e76d62ee75d99596fa33bcc1170e07c47b7cb43e30c8a44b8" } ], - "blockNumber": 5783758, - "cumulativeGasUsed": "9170048", + "blockNumber": 5831304, + "cumulativeGasUsed": "4412251", "status": 1, "byzantium": true }, "args": [ - "0x97F85b5cD51C89bEB91a3C621C2954858429DFD4", + "0xaa622a3C17CDe85DaF93BCEf68950F06107b578a", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleFactoryC2.json index 3ec4564ff..f689e0ede 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleFactoryC2.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC1155RaribleFactoryC2.json @@ -1,5 +1,5 @@ { - "address": "0xB3CBeC4ADbc46a731E559FB7EbdaD1634B5851fB", + "address": "0xb1945FeE96207d14182A569075426cF79A4Ec240", "abi": [ { "inputs": [ @@ -273,55 +273,55 @@ "type": "function" } ], - "transactionHash": "0x79b6d380ccfbb27336678e58309c6f7dcfe98265151f9c23159c1604d596b90e", + "transactionHash": "0x0d5ddcc4b501a52a8510d4d732b53fa708fc2696f368bea5e8df5a6930478cb9", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 43, - "gasUsed": "1374604", - "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000101000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x28753fbd771b441b74f3c9cf942fd4138d8ed5829fd62551de29c27739878426", - "transactionHash": "0x79b6d380ccfbb27336678e58309c6f7dcfe98265151f9c23159c1604d596b90e", + "transactionIndex": 85, + "gasUsed": "1374592", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000400000000000000010000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000010000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc517d8101b1804f5482b6ae090850759333a3b5538aff5bb7af033089b6f283a", + "transactionHash": "0x0d5ddcc4b501a52a8510d4d732b53fa708fc2696f368bea5e8df5a6930478cb9", "logs": [ { - "transactionIndex": 43, - "blockNumber": 5783759, - "transactionHash": "0x79b6d380ccfbb27336678e58309c6f7dcfe98265151f9c23159c1604d596b90e", - "address": "0xB3CBeC4ADbc46a731E559FB7EbdaD1634B5851fB", + "transactionIndex": 85, + "blockNumber": 5831305, + "transactionHash": "0x0d5ddcc4b501a52a8510d4d732b53fa708fc2696f368bea5e8df5a6930478cb9", + "address": "0xb1945FeE96207d14182A569075426cF79A4Ec240", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 106, - "blockHash": "0x28753fbd771b441b74f3c9cf942fd4138d8ed5829fd62551de29c27739878426" + "logIndex": 153, + "blockHash": "0xc517d8101b1804f5482b6ae090850759333a3b5538aff5bb7af033089b6f283a" }, { - "transactionIndex": 43, - "blockNumber": 5783759, - "transactionHash": "0x79b6d380ccfbb27336678e58309c6f7dcfe98265151f9c23159c1604d596b90e", - "address": "0xB3CBeC4ADbc46a731E559FB7EbdaD1634B5851fB", + "transactionIndex": 85, + "blockNumber": 5831305, + "transactionHash": "0x0d5ddcc4b501a52a8510d4d732b53fa708fc2696f368bea5e8df5a6930478cb9", + "address": "0xb1945FeE96207d14182A569075426cF79A4Ec240", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 107, - "blockHash": "0x28753fbd771b441b74f3c9cf942fd4138d8ed5829fd62551de29c27739878426" + "logIndex": 154, + "blockHash": "0xc517d8101b1804f5482b6ae090850759333a3b5538aff5bb7af033089b6f283a" } ], - "blockNumber": 5783759, - "cumulativeGasUsed": "9063636", + "blockNumber": 5831305, + "cumulativeGasUsed": "11459140", "status": 1, "byzantium": true }, "args": [ - "0x792b701837681de8f2B61a27507c9E0a3f4d4b1D", - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2", + "0xB21Bc35eC4a9F494724C23da919E47792139eAA0", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Implementation.json b/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Implementation.json index 7f9bfd79e..9596b6d73 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Implementation.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0x97F85b5cD51C89bEB91a3C621C2954858429DFD4", + "address": "0xaa622a3C17CDe85DaF93BCEf68950F06107b578a", "abi": [ { "anonymous": false, @@ -1180,19 +1180,19 @@ "type": "function" } ], - "transactionHash": "0xd6734fee2153b26d4f2671de449b5f1ea385f38981f2534af2aec6a03b7fec13", + "transactionHash": "0xb558b5e71cf919fad56102fc06d26fe3b2f5e0e537fb8dade5d58dc0d9e1bcd4", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 17, + "transactionIndex": 32, "gasUsed": "4919445", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x9258c52fe44a40115f5c1f6b14138078597b6118213ca006c0035105918116f5", - "transactionHash": "0xd6734fee2153b26d4f2671de449b5f1ea385f38981f2534af2aec6a03b7fec13", + "blockHash": "0x53a2b8cd359eda91dd9f49933c82adb1017368819d6ed62ed1d88fc68a65e936", + "transactionHash": "0xb558b5e71cf919fad56102fc06d26fe3b2f5e0e537fb8dade5d58dc0d9e1bcd4", "logs": [], - "blockNumber": 5783756, - "cumulativeGasUsed": "7196545", + "blockNumber": 5831302, + "cumulativeGasUsed": "8248966", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Proxy.json b/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Proxy.json index c7e1a60c3..17ab58585 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Proxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC1155Rarible_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "abi": [ { "inputs": [ @@ -146,118 +146,118 @@ "type": "receive" } ], - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 42, - "gasUsed": "1101785", - "logsBloom": "0x00000400000000000000000000000000400000000400800000800000000000000000000000000000000000000000000000000000000040001000000040000000000000000000008000000000000002000001000000000800004000000000000000000000020000000000001080000800000000800000000000000000000001400000004000000000000000000000000000000000000000000000000000880000000000000000000000000000000000100004000000000000000000000000000000000020000200000000000001000020000000000480000000000000000020000000000000000010000000000000800000000000000000001000000001000000", - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa", - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", + "transactionIndex": 38, + "gasUsed": "1101773", + "logsBloom": "0x00040000000000000000000000000000400000000400800000800000200000000000000040002000000000000000000000000000000040000000000000000000000000000000000000000000000002000001000000000800004000000000000000000000020000000000001000000800000000900000000000000000000001400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000002000000000000000000400000020000000100000000201000000000000000440000000000000000020000000000000000010000000002000000000000000020000001000000001000000", + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946", + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", "logs": [ { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x00000000000000000000000097f85b5cd51c89beb91a3c621c2954858429dfd4" + "0x000000000000000000000000aa622a3c17cde85daf93bcef68950f06107b578a" ], "data": "0x", - "logIndex": 110, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "logIndex": 88, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" }, { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 111, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "logIndex": 89, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" }, { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + "0x000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 112, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "logIndex": 90, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" }, { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + "0x000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 113, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "logIndex": 91, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" }, { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 114, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "logIndex": 92, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" }, { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0xcc215b7682459c30faa0e854780165d503a7d62d22a9aaaad6334585dc63343e" ], "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", - "logIndex": 115, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "logIndex": 93, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" }, { - "transactionIndex": 42, - "blockNumber": 5783757, - "transactionHash": "0x4378a4f89410d0f0b1fcf4e7c63ea9883b1a6f8a00afaa4b4aca2cd80d040971", - "address": "0x08c50fcCc017A27C71b3e2988dff4604a8F9354b", + "transactionIndex": 38, + "blockNumber": 5831303, + "transactionHash": "0xc257d01066ac481448b3414d31aa3abdce4f06ae42030ae2c58a7fcee347bbcf", + "address": "0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", - "logIndex": 116, - "blockHash": "0xd9785b049bca5ef7a8a317865da9e22663824dd6f56f3146c881c1e4c21f79fa" + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", + "logIndex": 94, + "blockHash": "0xcdcd45e8394efb61e1f1503ef920d796ee2a34da92cd31cb1aa3d4e2a5af9946" } ], - "blockNumber": 5783757, - "cumulativeGasUsed": "9475477", + "blockNumber": 5831303, + "cumulativeGasUsed": "6776387", "status": 1, "byzantium": true }, "args": [ - "0x97F85b5cD51C89bEB91a3C621C2954858429DFD4", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf200000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0xaa622a3C17CDe85DaF93BCEf68950F06107b578a", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0x220e4d7300000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC20TransferProxy.json b/projects/hardhat-deploy/deployments/sepolia/ERC20TransferProxy.json index f0dcc7add..c3987ca81 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC20TransferProxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC20TransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", + "address": "0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4", "abi": [ { "anonymous": false, @@ -148,19 +148,19 @@ "type": "function" } ], - "transactionHash": "0x99e409900d39afaa1485d06151ebc9d66276c9129d9fd3277d920bce35f6f675", + "transactionHash": "0x4de0077a41fd9661a17c92dc1169dca48689cd6593b8536cd3a815ebb9a3f505", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 37, + "transactionIndex": 138, "gasUsed": "697645", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xc860d4ab7fa5162eeb8c6ddd953bc53936f80c59b01bad5430153bf36ef229fa", - "transactionHash": "0x99e409900d39afaa1485d06151ebc9d66276c9129d9fd3277d920bce35f6f675", + "blockHash": "0xbd891739d3c8415126f4ecbed23285c4ad94afa5e3168554cbfe82cf1683d310", + "transactionHash": "0x4de0077a41fd9661a17c92dc1169dca48689cd6593b8536cd3a815ebb9a3f505", "logs": [], - "blockNumber": 5783732, - "cumulativeGasUsed": "9517824", + "blockNumber": 5831276, + "cumulativeGasUsed": "16553089", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC721LazyMintTransferProxy.json b/projects/hardhat-deploy/deployments/sepolia/ERC721LazyMintTransferProxy.json index ba982521d..212a3c08d 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC721LazyMintTransferProxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC721LazyMintTransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "address": "0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30", "abi": [ { "anonymous": false, @@ -160,19 +160,19 @@ "type": "function" } ], - "transactionHash": "0x377b11189535801566181e410a5db2a19c150f8f123d164d16730db513976879", + "transactionHash": "0xecd86225c67463bf20f32331a4c0fce845c54fe1461122c8f3fd28f3b7c467db", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 37, + "transactionIndex": 81, "gasUsed": "935371", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x829099d11190ec4dd530d882c0055202eeb63590f13bb3b1b48f438b6a92068d", - "transactionHash": "0x377b11189535801566181e410a5db2a19c150f8f123d164d16730db513976879", + "blockHash": "0x7f6bbfaa4d4a45285bcf8b1f92db51cb08cd4137f09d5977b5b044db797f50fe", + "transactionHash": "0xecd86225c67463bf20f32331a4c0fce845c54fe1461122c8f3fd28f3b7c467db", "logs": [], - "blockNumber": 5783736, - "cumulativeGasUsed": "11605603", + "blockNumber": 5831278, + "cumulativeGasUsed": "10393328", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleFactoryC2.json b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleFactoryC2.json index 091e071bd..6dbe032f4 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleFactoryC2.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleFactoryC2.json @@ -1,5 +1,5 @@ { - "address": "0x8FC558fa7667ee5729306A51c27DEd6732D41B9c", + "address": "0x91a4a863027835143161b635BfB9A6d887993D3D", "abi": [ { "inputs": [ @@ -273,55 +273,55 @@ "type": "function" } ], - "transactionHash": "0x871ca0f97acd9f578e61ccc3a8aff098a4c48bfa80ce66515f5c3109fae2cf93", + "transactionHash": "0x228c0ce1e752c793c44b7b302c349dd708cfddb3d1233b9b3335f7ab291367fb", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 22, + "transactionIndex": 239, "gasUsed": "1374604", - "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000100000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000100020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000400001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xd2b93684b6683c91875c4db30253a761fa876103e78be7331e93ead979e0c062", - "transactionHash": "0x871ca0f97acd9f578e61ccc3a8aff098a4c48bfa80ce66515f5c3109fae2cf93", + "logsBloom": "0x00000020000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000200000000000000000000000000000000000", + "blockHash": "0xa3ecb990f68ad1f5e8c51b589d48894558e1a770806982c54dd5184c82eab740", + "transactionHash": "0x228c0ce1e752c793c44b7b302c349dd708cfddb3d1233b9b3335f7ab291367fb", "logs": [ { - "transactionIndex": 22, - "blockNumber": 5783755, - "transactionHash": "0x871ca0f97acd9f578e61ccc3a8aff098a4c48bfa80ce66515f5c3109fae2cf93", - "address": "0x8FC558fa7667ee5729306A51c27DEd6732D41B9c", + "transactionIndex": 239, + "blockNumber": 5831301, + "transactionHash": "0x228c0ce1e752c793c44b7b302c349dd708cfddb3d1233b9b3335f7ab291367fb", + "address": "0x91a4a863027835143161b635BfB9A6d887993D3D", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 57, - "blockHash": "0xd2b93684b6683c91875c4db30253a761fa876103e78be7331e93ead979e0c062" + "logIndex": 442, + "blockHash": "0xa3ecb990f68ad1f5e8c51b589d48894558e1a770806982c54dd5184c82eab740" }, { - "transactionIndex": 22, - "blockNumber": 5783755, - "transactionHash": "0x871ca0f97acd9f578e61ccc3a8aff098a4c48bfa80ce66515f5c3109fae2cf93", - "address": "0x8FC558fa7667ee5729306A51c27DEd6732D41B9c", + "transactionIndex": 239, + "blockNumber": 5831301, + "transactionHash": "0x228c0ce1e752c793c44b7b302c349dd708cfddb3d1233b9b3335f7ab291367fb", + "address": "0x91a4a863027835143161b635BfB9A6d887993D3D", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 58, - "blockHash": "0xd2b93684b6683c91875c4db30253a761fa876103e78be7331e93ead979e0c062" + "logIndex": 443, + "blockHash": "0xa3ecb990f68ad1f5e8c51b589d48894558e1a770806982c54dd5184c82eab740" } ], - "blockNumber": 5783755, - "cumulativeGasUsed": "7118833", + "blockNumber": 5831301, + "cumulativeGasUsed": "29454843", "status": 1, "byzantium": true }, "args": [ - "0xF4873a12132C87F96535059402b9EcE709a06c72", - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0x10Eb7BCE43ed43b8808D1B5dd294895F7f9c6e4A", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal.json b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal.json index be9d5dee2..c712e132d 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal.json @@ -1,5 +1,5 @@ { - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "abi": [ { "anonymous": false, @@ -1182,118 +1182,118 @@ "type": "constructor" } ], - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 92, + "transactionIndex": 48, "gasUsed": "1100227", - "logsBloom": "0x00000400000000000000000000000000400000000400800010800000000000000000000000000080000000000000000000000000000440000000004000000000000000000000000000000000000002000001000000000000004000000000200000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000002800000000000000000000002000000001040100004000000000000000000000000000100000020000200000000000001000000000000000400000000000000000020000000000000000060000000000000000000000000000000000000000001000000", - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd", - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "logsBloom": "0x00000000000000000000000000000000c00000000400800410800000000000000000000000000000000000000000000000000000000440000000000000000000000000800000000000080000000002000001000000000000004000000000000000000000020000000000001000000800000000800000000000000000000001420000000000000000000008000000000000000000000000000000000000800000000000000000000000000000000000000004000000002000000000000000000400000020000000000000000001000000000000000440000000000000001020000000000000000020000000000000000000000000200000000100000001000000", + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7", + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", "logs": [ { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000008c3b16c348ed4f0fb991f2be6ac3bfa16836a5e5" + "0x000000000000000000000000c9e42bd94aa9876accf46edf29202162f4a3e46a" ], "data": "0x", - "logIndex": 204, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "logIndex": 81, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" }, { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 205, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "logIndex": 82, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" }, { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + "0x000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 206, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "logIndex": 83, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" }, { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" + "0x00000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 207, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "logIndex": 84, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" }, { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 208, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "logIndex": 85, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" }, { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" ], "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", - "logIndex": 209, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "logIndex": 86, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" }, { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", - "logIndex": 210, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", + "logIndex": 87, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" } ], - "blockNumber": 5783753, - "cumulativeGasUsed": "10415903", + "blockNumber": 5831297, + "cumulativeGasUsed": "6494478", "status": 1, "byzantium": true }, "args": [ - "0x8C3b16c348eD4f0fB991f2Be6AC3bFA16836A5E5", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0xC9e42Bd94aA9876accf46Edf29202162F4a3e46A", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda30800000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e3000000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", @@ -1307,12 +1307,12 @@ "RARI", "ipfs:/", "", - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ] }, - "implementation": "0x8C3b16c348eD4f0fB991f2Be6AC3bFA16836A5E5", + "implementation": "0xC9e42Bd94aA9876accf46Edf29202162F4a3e46A", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimalBeacon.json b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimalBeacon.json index 0e1dcff34..288b3443a 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimalBeacon.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimalBeacon.json @@ -1,5 +1,5 @@ { - "address": "0xF4873a12132C87F96535059402b9EcE709a06c72", + "address": "0x10Eb7BCE43ed43b8808D1B5dd294895F7f9c6e4A", "abi": [ { "inputs": [ @@ -109,53 +109,53 @@ "type": "function" } ], - "transactionHash": "0xaa4c1d4f97e1e09ba324221032ba61fcc50730e5365d29ba12ad8c7652fa27e8", + "transactionHash": "0x2c99ed50c182e0b81868a60f195db05abc46c77bdfd55e89bf27f5a74767fee1", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 27, + "transactionIndex": 45, "gasUsed": "394703", - "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040080000000000000000000000000000000000000000000000000001000000000000004000000000000001000000020000000000000000000800000000000000000000000000000000400000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xfeae486fc05c32a21a57f0d382303c1bf54a47bba9c3e1c655b11d483a9074bd", - "transactionHash": "0xaa4c1d4f97e1e09ba324221032ba61fcc50730e5365d29ba12ad8c7652fa27e8", + "logsBloom": "0x00000000000000000000000000000000000000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000001000000000000004000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000200000000000000000000000000000000001000000000004000000000000000000000000000000000000000000000000000001000000000000000000000000000000000020000000000000000000000000200000000000000000000000000000000000000000", + "blockHash": "0x8ff8d590b9cfb836abae54a490752d0c56993669bd5c7f9eef147b67b1371a7a", + "transactionHash": "0x2c99ed50c182e0b81868a60f195db05abc46c77bdfd55e89bf27f5a74767fee1", "logs": [ { - "transactionIndex": 27, - "blockNumber": 5783754, - "transactionHash": "0xaa4c1d4f97e1e09ba324221032ba61fcc50730e5365d29ba12ad8c7652fa27e8", - "address": "0xF4873a12132C87F96535059402b9EcE709a06c72", + "transactionIndex": 45, + "blockNumber": 5831298, + "transactionHash": "0x2c99ed50c182e0b81868a60f195db05abc46c77bdfd55e89bf27f5a74767fee1", + "address": "0x10Eb7BCE43ed43b8808D1B5dd294895F7f9c6e4A", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 85, - "blockHash": "0xfeae486fc05c32a21a57f0d382303c1bf54a47bba9c3e1c655b11d483a9074bd" + "logIndex": 124, + "blockHash": "0x8ff8d590b9cfb836abae54a490752d0c56993669bd5c7f9eef147b67b1371a7a" }, { - "transactionIndex": 27, - "blockNumber": 5783754, - "transactionHash": "0xaa4c1d4f97e1e09ba324221032ba61fcc50730e5365d29ba12ad8c7652fa27e8", - "address": "0xF4873a12132C87F96535059402b9EcE709a06c72", + "transactionIndex": 45, + "blockNumber": 5831298, + "transactionHash": "0x2c99ed50c182e0b81868a60f195db05abc46c77bdfd55e89bf27f5a74767fee1", + "address": "0x10Eb7BCE43ed43b8808D1B5dd294895F7f9c6e4A", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 86, - "blockHash": "0xfeae486fc05c32a21a57f0d382303c1bf54a47bba9c3e1c655b11d483a9074bd" + "logIndex": 125, + "blockHash": "0x8ff8d590b9cfb836abae54a490752d0c56993669bd5c7f9eef147b67b1371a7a" } ], - "blockNumber": 5783754, - "cumulativeGasUsed": "4326620", + "blockNumber": 5831298, + "cumulativeGasUsed": "6545746", "status": 1, "byzantium": true }, "args": [ - "0x8C3b16c348eD4f0fB991f2Be6AC3bFA16836A5E5", + "0xC9e42Bd94aA9876accf46Edf29202162F4a3e46A", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Implementation.json b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Implementation.json index 416eb5ecb..272f28683 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Implementation.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0x8C3b16c348eD4f0fB991f2Be6AC3bFA16836A5E5", + "address": "0xC9e42Bd94aA9876accf46Edf29202162F4a3e46A", "abi": [ { "anonymous": false, @@ -1038,19 +1038,19 @@ "type": "function" } ], - "transactionHash": "0xa3dc30a51c919692e5cb42f0d9bdba04708526dc2eaef79e4ae3b6e99ce3da7f", + "transactionHash": "0x5b9495e9e3a496ac1ffc7fd6b6c3ddcb5dc7f75093c11660ffef38cbf53edc84", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 67, + "transactionIndex": 70, "gasUsed": "4238220", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x0c1b9ebdeab203b31a70fbb2eeb072a90eee42d860045931f6abcf2ba959ea4d", - "transactionHash": "0xa3dc30a51c919692e5cb42f0d9bdba04708526dc2eaef79e4ae3b6e99ce3da7f", + "blockHash": "0x8234d5af4c7ec8d91ca56be293d50eba816acd9fedb06646ed957e5936a78947", + "transactionHash": "0x5b9495e9e3a496ac1ffc7fd6b6c3ddcb5dc7f75093c11660ffef38cbf53edc84", "logs": [], - "blockNumber": 5783752, - "cumulativeGasUsed": "13292081", + "blockNumber": 5831296, + "cumulativeGasUsed": "12310684", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Proxy.json b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Proxy.json index 1714a75d5..20c60efbd 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Proxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/ERC721RaribleMinimal_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "abi": [ { "inputs": [ @@ -146,118 +146,118 @@ "type": "receive" } ], - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 92, + "transactionIndex": 48, "gasUsed": "1100227", - "logsBloom": "0x00000400000000000000000000000000400000000400800010800000000000000000000000000080000000000000000000000000000440000000004000000000000000000000000000000000000002000001000000000000004000000000200000000000020000000000001000000800000000800000000000000000000001400000000000000000000000000000000000000000000000000000000002800000000000000000000002000000001040100004000000000000000000000000000100000020000200000000000001000000000000000400000000000000000020000000000000000060000000000000000000000000000000000000000001000000", - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd", - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", + "logsBloom": "0x00000000000000000000000000000000c00000000400800410800000000000000000000000000000000000000000000000000000000440000000000000000000000000800000000000080000000002000001000000000000004000000000000000000000020000000000001000000800000000800000000000000000000001420000000000000000000008000000000000000000000000000000000000800000000000000000000000000000000000000004000000002000000000000000000400000020000000000000000001000000000000000440000000000000001020000000000000000020000000000000000000000000200000000100000001000000", + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7", + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", "logs": [ { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000008c3b16c348ed4f0fb991f2be6ac3bfa16836a5e5" + "0x000000000000000000000000c9e42bd94aa9876accf46edf29202162f4a3e46a" ], "data": "0x", - "logIndex": 204, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "logIndex": 81, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" }, { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 205, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "logIndex": 82, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" }, { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec" + "0x000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 206, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "logIndex": 83, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" }, { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0x270dbb8ba4292910ae92862466486be25c355c837270a3d8824b36a8bc7c653b", - "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813" + "0x00000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30" ], "data": "0x0000000000000000000000000000000000000000000000000000000000000001", - "logIndex": 207, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "logIndex": 84, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" }, { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 208, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "logIndex": 85, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" }, { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0xf05e55f0a9d205977ca8cc02236338b6a361376f404cf0b3019b2111964a01fd" ], "data": "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000752617269626c650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045241524900000000000000000000000000000000000000000000000000000000", - "logIndex": 209, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "logIndex": 86, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" }, { - "transactionIndex": 92, - "blockNumber": 5783753, - "transactionHash": "0x08a17d1cb24c228b46a2db58b7a201c51fe4a0799dc6a10e6194b44c7f26070f", - "address": "0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8", + "transactionIndex": 48, + "blockNumber": 5831297, + "transactionHash": "0x4a26f730f6af5952b73cefe036f09d72cfae4a44a424266f39fbbf261ba177c5", + "address": "0x42CCFaf87072D03a6583488d205D99cFeE2427b5", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", - "logIndex": 210, - "blockHash": "0x3ca8fa61281d288cd72786cdf179df6cce875c5ab10fd6a50f73d9937f0028cd" + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", + "logIndex": 87, + "blockHash": "0xcc9fa05c4cef23beba39111f2bee3493ce5dfd74fbd8124708749d546a541de7" } ], - "blockNumber": 5783753, - "cumulativeGasUsed": "10415903", + "blockNumber": 5831297, + "cumulativeGasUsed": "6494478", "status": 1, "byzantium": true }, "args": [ - "0x8C3b16c348eD4f0fB991f2Be6AC3bFA16836A5E5", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e81300000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + "0xC9e42Bd94aA9876accf46Edf29202162F4a3e46A", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0xff14a35400000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda30800000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e3000000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000000752617269626c6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000452415249000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006697066733a2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", diff --git a/projects/hardhat-deploy/deployments/sepolia/ExchangeV2.json b/projects/hardhat-deploy/deployments/sepolia/ExchangeV2.json index 73e2c0158..598190737 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ExchangeV2.json +++ b/projects/hardhat-deploy/deployments/sepolia/ExchangeV2.json @@ -1,5 +1,5 @@ { - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "abi": [ { "anonymous": false, @@ -1100,119 +1100,119 @@ "type": "constructor" } ], - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 21, - "gasUsed": "1026836", - "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000010000000000000000000000400008000000000000000000800000000000000010000000020000010000000000000040004000000000000000000200020000000800000008004002008000000000000000000000004004000000000001000000000000000000000000000000000000000000008000200000000000000000000000000000000000040000000000000000000000000000000000a0000008000000000001000000000000000400000002000000000020000000000000000000000000000000000000000000000000000000300000000000", - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c", - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "transactionIndex": 139, + "gasUsed": "1026812", + "logsBloom": "0x000080000000000000000000000800004000000004008000008000000000000022000000000020000000000000000000200000000000400000000000000000000000800000000000000010000000020000010000000000000040004000000000000000000200020000000000000008004002008000000000000000000000024000000000000001000000000000000000000000000000000000000000008000000000000000000001000000000000000000040000000000800000000000000000000000a0000008000000000001100000000000000400000000000000000020000000000000000000000000000000000000000000000000000000300000000000", + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b", + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", "logs": [ { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000002c4d12cb96b25727d6869b9d4750d70e3a6a8553" + "0x000000000000000000000000d559bc15defa84436d336df2c539a4ed3832ce39" ], "data": "0x", - "logIndex": 37, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "logIndex": 341, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" }, { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 38, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "logIndex": 342, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" }, { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", "0xd8f960c100000000000000000000000000000000000000000000000000000000" ], - "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", - "logIndex": 39, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "data": "0x00000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30", + "logIndex": 343, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" }, { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" ], - "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", - "logIndex": 40, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "data": "0x000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca", + "logIndex": 344, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" }, { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", "0xf63c282500000000000000000000000000000000000000000000000000000000" ], - "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", - "logIndex": 41, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "data": "0x000000000000000000000000c0bd7ae193c1bd00fa33b0e5fdcf60ff2d66eefc", + "logIndex": 345, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" }, { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 42, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "logIndex": 346, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" }, { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", - "logIndex": 43, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", + "logIndex": 347, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" } ], - "blockNumber": 5783743, - "cumulativeGasUsed": "2837740", + "blockNumber": 5831287, + "cumulativeGasUsed": "22599117", "status": 1, "byzantium": true }, "args": [ - "0x2C4D12cb96B25727d6869B9D4750d70E3A6a8553", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + "0xD559bC15dEFa84436d336Df2C539A4ED3832ce39", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0x2bed54d6000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308000000000000000000000000dac1af2dca52204b9d3d7b3bf967a30d5fce8dc400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097540c06647d14c5b63e678dc6e290e0f2150cc00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c0bd7ae193c1bd00fa33b0e5fdcf60ff2d66eefc0000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", @@ -1222,25 +1222,25 @@ "execute": { "methodName": "__ExchangeV2_init_proxy", "args": [ - "0xA5707153b8AF346e17AF765235B054136eCf99EC", - "0xA3d49c7e2c845b792e422696FE0D9ef17a509731", + "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", + "0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4", 0, "0x0000000000000000000000000000000000000000", - "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893", [ "0xd8f960c1", "0x1cdfaa40" ], [ - "0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813", - "0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2" + "0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30", + "0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca" ], "0xf63c2825", - "0xc4F5FCD96e3b37A31f871F0968206F47294a4471" + "0xc0BD7Ae193c1BD00Fa33B0E5fDCF60FF2d66EefC" ] }, - "implementation": "0x2C4D12cb96B25727d6869B9D4750d70E3A6a8553", + "implementation": "0xD559bC15dEFa84436d336Df2C539A4ED3832ce39", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Implementation.json b/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Implementation.json index 69f75f565..9ee23936b 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Implementation.json +++ b/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0x2C4D12cb96B25727d6869B9D4750d70E3A6a8553", + "address": "0xD559bC15dEFa84436d336Df2C539A4ED3832ce39", "abi": [ { "anonymous": false, @@ -956,19 +956,19 @@ "type": "function" } ], - "transactionHash": "0x31ad297aafc58c5fcc466ce05b9c3be583fa67665702f8ed2bbea00552f5901e", + "transactionHash": "0x277b92740b4596961a5a1908d317eef4043007729aa94d0298b69e6f434bf2c3", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 12, + "transactionIndex": 86, "gasUsed": "4900394", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x63e75ffd5257cd9e9ccfe001c7c86738b40fbc82ba61b0e9ff6fbdb6bdffcefc", - "transactionHash": "0x31ad297aafc58c5fcc466ce05b9c3be583fa67665702f8ed2bbea00552f5901e", + "blockHash": "0xc1ec866975a35b9349fc75abc48c611c6dd993941c324dcada29128519f144a1", + "transactionHash": "0x277b92740b4596961a5a1908d317eef4043007729aa94d0298b69e6f434bf2c3", "logs": [], - "blockNumber": 5783742, - "cumulativeGasUsed": "6493382", + "blockNumber": 5831286, + "cumulativeGasUsed": "18875631", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Proxy.json b/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Proxy.json index 6a2ccb4a7..80bf3c7ad 100644 --- a/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Proxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/ExchangeV2_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "abi": [ { "inputs": [ @@ -146,119 +146,119 @@ "type": "receive" } ], - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 21, - "gasUsed": "1026836", - "logsBloom": "0x000080000000000000000000000000004000000004008000008000000000000022000000000020000000010000000000000000000000400008000000000000000000800000000000000010000000020000010000000000000040004000000000000000000200020000000800000008004002008000000000000000000000004004000000000001000000000000000000000000000000000000000000008000200000000000000000000000000000000000040000000000000000000000000000000000a0000008000000000001000000000000000400000002000000000020000000000000000000000000000000000000000000000000000000300000000000", - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c", - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", + "transactionIndex": 139, + "gasUsed": "1026812", + "logsBloom": "0x000080000000000000000000000800004000000004008000008000000000000022000000000020000000000000000000200000000000400000000000000000000000800000000000000010000000020000010000000000000040004000000000000000000200020000000000000008004002008000000000000000000000024000000000000001000000000000000000000000000000000000000000008000000000000000000001000000000000000000040000000000800000000000000000000000a0000008000000000001100000000000000400000000000000000020000000000000000000000000000000000000000000000000000000300000000000", + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b", + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", "logs": [ { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000002c4d12cb96b25727d6869b9d4750d70e3a6a8553" + "0x000000000000000000000000d559bc15defa84436d336df2c539a4ed3832ce39" ], "data": "0x", - "logIndex": 37, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "logIndex": 341, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" }, { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 38, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "logIndex": 342, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" }, { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", "0xd8f960c100000000000000000000000000000000000000000000000000000000" ], - "data": "0x00000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813", - "logIndex": 39, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "data": "0x00000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30", + "logIndex": 343, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" }, { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0x4b5aced933c0c9a88aeac3f0b3b72c5aaf75df8ebaf53225773248c4c3153593", "0x1cdfaa4000000000000000000000000000000000000000000000000000000000" ], - "data": "0x000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2", - "logIndex": 40, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "data": "0x000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca", + "logIndex": 344, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" }, { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0xd2bf91075f105d0fd80328da28e20ebdad1c1261839711183bc29a44cbe6c72f", "0xf63c282500000000000000000000000000000000000000000000000000000000" ], - "data": "0x000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a4471", - "logIndex": 41, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "data": "0x000000000000000000000000c0bd7ae193c1bd00fa33b0e5fdcf60ff2d66eefc", + "logIndex": 345, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" }, { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 42, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "logIndex": 346, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" }, { - "transactionIndex": 21, - "blockNumber": 5783743, - "transactionHash": "0x35597df86d90ffd33c7456e073bdff1bb0073975e9725743a211cc6e9e2b783c", - "address": "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "transactionIndex": 139, + "blockNumber": 5831287, + "transactionHash": "0xc5dc96070884b93f4a31ff219451f08643f1e5632e977cdbae1d2c7546a5a113", + "address": "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", - "logIndex": 43, - "blockHash": "0x64feca9f745582a14cb64abcf6f1491642efee7e538d6bc895cc0e63e2f9a63c" + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", + "logIndex": 347, + "blockHash": "0xdd21abe61f08cb6bc3c1e22ca650a20c88fedfc0a6a46ec25b94b3a4f6cb906b" } ], - "blockNumber": 5783743, - "cumulativeGasUsed": "2837740", + "blockNumber": 5831287, + "cumulativeGasUsed": "22599117", "status": 1, "byzantium": true }, "args": [ - "0x2C4D12cb96B25727d6869B9D4750d70E3A6a8553", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", - "0x2bed54d6000000000000000000000000a5707153b8af346e17af765235b054136ecf99ec000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a50973100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf64c7115508f23069d5663611e10f5c5cf4577600000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c4f5fcd96e3b37a31f871f0968206f47294a44710000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000074ebeeb6fbcf94f748f5999e14acf3642a38e813000000000000000000000000d60d801e1e76a44f8a2e728f6d3a760626aa2cf2" + "0xD559bC15dEFa84436d336Df2C539A4ED3832ce39", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", + "0x2bed54d6000000000000000000000000df9ae28b5564047d6df0b4a44eb81cd187bda308000000000000000000000000dac1af2dca52204b9d3d7b3bf967a30d5fce8dc400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097540c06647d14c5b63e678dc6e290e0f2150cc00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0f63c282500000000000000000000000000000000000000000000000000000000000000000000000000000000c0bd7ae193c1bd00fa33b0e5fdcf60ff2d66eefc0000000000000000000000000000000000000000000000000000000000000002d8f960c1000000000000000000000000000000000000000000000000000000001cdfaa4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000018e6c7988f3c4c3b6efdb69449eae6b5eea39e30000000000000000000000000ed9efd9f7e9e5449f57c50001e94a985e57986ca" ], "numDeployments": 1, "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", diff --git a/projects/hardhat-deploy/deployments/sepolia/RaribleExchangeWrapper.json b/projects/hardhat-deploy/deployments/sepolia/RaribleExchangeWrapper.json index 51aa70606..11c8b8897 100644 --- a/projects/hardhat-deploy/deployments/sepolia/RaribleExchangeWrapper.json +++ b/projects/hardhat-deploy/deployments/sepolia/RaribleExchangeWrapper.json @@ -1,5 +1,5 @@ { - "address": "0x38E6f5015267bAEfb739253fbB4D7c173CCD1891", + "address": "0xf26C9407B885591a2503e51CFab118bef89eCCAa", "abi": [ { "inputs": [ @@ -531,69 +531,69 @@ "type": "receive" } ], - "transactionHash": "0x814f4abd2555bdfb8ea0541c9773495193f93639188546f48017d5e5e279d933", + "transactionHash": "0x133290d91335e6be5409fb5d2a253f7a71cf089c6467e6c32ec73ac3df66c0f4", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 37, + "transactionIndex": 94, "gasUsed": "4340841", - "logsBloom": "0x00000000000000000000800000000000000000000400800000800004000002000000000000000000000000000000000000000000000040000000000000200000000800000000000000000000000000000001000000000000004000000000000000000000020004000000000000000800000000000100000000000000000000c00000000000000000000000000000000000000000000020000000000000000000020000000000000000000000000000080004000000000000000000000000000000000002000000000000000001000000000000200000000000000000000020000010000000000000000000000000000100000000000000000000000000000000", - "blockHash": "0x63b22ef2fa4133e55a8cba1bfe6786fc52f610ad5c0f9695cc971d7a9a3a4fa6", - "transactionHash": "0x814f4abd2555bdfb8ea0541c9773495193f93639188546f48017d5e5e279d933", + "logsBloom": "0x00000002000000000000000000000000000000000400800000800004000000200000000000000000000010000000000000000000000040000000000000200000002000000000000000000000000000000001000000000000004000000000000000000000020100000010000000000800000000000000000000000000000000400000000000000001000000000000000004000000000000000000000000000000020000000000000000000000000000080004000000000000000000000000000000000002000000000000000001000000000000000000000000000000000020000010000000000000000000000000000000000000000000000000004000000000", + "blockHash": "0xb14afb5f68ae95d9be2725df1ab6d148d17c16c7b827d0f1669adfd71db57494", + "transactionHash": "0x133290d91335e6be5409fb5d2a253f7a71cf089c6467e6c32ec73ac3df66c0f4", "logs": [ { - "transactionIndex": 37, - "blockNumber": 5783760, - "transactionHash": "0x814f4abd2555bdfb8ea0541c9773495193f93639188546f48017d5e5e279d933", - "address": "0x38E6f5015267bAEfb739253fbB4D7c173CCD1891", + "transactionIndex": 94, + "blockNumber": 5831306, + "transactionHash": "0x133290d91335e6be5409fb5d2a253f7a71cf089c6467e6c32ec73ac3df66c0f4", + "address": "0xf26C9407B885591a2503e51CFab118bef89eCCAa", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 111, - "blockHash": "0x63b22ef2fa4133e55a8cba1bfe6786fc52f610ad5c0f9695cc971d7a9a3a4fa6" + "logIndex": 200, + "blockHash": "0xb14afb5f68ae95d9be2725df1ab6d148d17c16c7b827d0f1669adfd71db57494" }, { - "transactionIndex": 37, - "blockNumber": 5783760, - "transactionHash": "0x814f4abd2555bdfb8ea0541c9773495193f93639188546f48017d5e5e279d933", + "transactionIndex": 94, + "blockNumber": 5831306, + "transactionHash": "0x133290d91335e6be5409fb5d2a253f7a71cf089c6467e6c32ec73ac3df66c0f4", "address": "0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9", "topics": [ "0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925", - "0x00000000000000000000000038e6f5015267baefb739253fbb4d7c173ccd1891", - "0x000000000000000000000000a3d49c7e2c845b792e422696fe0d9ef17a509731" + "0x000000000000000000000000f26c9407b885591a2503e51cfab118bef89eccaa", + "0x000000000000000000000000dac1af2dca52204b9d3d7b3bf967a30d5fce8dc4" ], "data": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", - "logIndex": 112, - "blockHash": "0x63b22ef2fa4133e55a8cba1bfe6786fc52f610ad5c0f9695cc971d7a9a3a4fa6" + "logIndex": 201, + "blockHash": "0xb14afb5f68ae95d9be2725df1ab6d148d17c16c7b827d0f1669adfd71db57494" }, { - "transactionIndex": 37, - "blockNumber": 5783760, - "transactionHash": "0x814f4abd2555bdfb8ea0541c9773495193f93639188546f48017d5e5e279d933", - "address": "0x38E6f5015267bAEfb739253fbB4D7c173CCD1891", + "transactionIndex": 94, + "blockNumber": 5831306, + "transactionHash": "0x133290d91335e6be5409fb5d2a253f7a71cf089c6467e6c32ec73ac3df66c0f4", + "address": "0xf26C9407B885591a2503e51CFab118bef89eCCAa", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 113, - "blockHash": "0x63b22ef2fa4133e55a8cba1bfe6786fc52f610ad5c0f9695cc971d7a9a3a4fa6" + "logIndex": 202, + "blockHash": "0xb14afb5f68ae95d9be2725df1ab6d148d17c16c7b827d0f1669adfd71db57494" } ], - "blockNumber": 5783760, - "cumulativeGasUsed": "9616125", + "blockNumber": 5831306, + "cumulativeGasUsed": "28007004", "status": 1, "byzantium": true }, "args": [ [ "0x0000000000000000000000000000000000000000", - "0xce219Ab34aFB73892E79cCE7b4fD602778101E07", + "0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7", "0x00000000006c3852cbEf3e08E8dF289169EdE581", "0x0000000000000000000000000000000000000000", "0xD112466471b5438C1ca2D218694200e49d81D047", @@ -606,7 +606,7 @@ ], "0x7b79995e5f793a07bc00c21412e50ecae098e7f9", [ - "0xA3d49c7e2c845b792e422696FE0D9ef17a509731" + "0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4" ], "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ], diff --git a/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry.json b/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry.json index 1cf7841e4..7b539a495 100644 --- a/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry.json +++ b/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry.json @@ -1,5 +1,5 @@ { - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "abi": [ { "anonymous": false, @@ -496,79 +496,79 @@ "type": "constructor" } ], - "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", + "transactionHash": "0x6faf715f5858a6ce2075ffb4e5da05179c0c6e59f71643dfe669a29c285e6945", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 35, + "transactionIndex": 52, "gasUsed": "811009", - "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", - "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff", - "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", + "logsBloom": "0x00000000100000000000000000000000400000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000200000000002000001000000000000004000000000000000000000022000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000100000800000200000000000000000020000000000000000001000000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x6977ef63af3aac855406e97ffa70c775effb76ccd36b5b3ed53b0c47acde8056", + "transactionHash": "0x6faf715f5858a6ce2075ffb4e5da05179c0c6e59f71643dfe669a29c285e6945", "logs": [ { - "transactionIndex": 35, - "blockNumber": 5783729, - "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "transactionIndex": 52, + "blockNumber": 5831271, + "transactionHash": "0x6faf715f5858a6ce2075ffb4e5da05179c0c6e59f71643dfe669a29c285e6945", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" + "0x000000000000000000000000d0c006f59160847ecac63cca98a568511689d02f" ], "data": "0x", - "logIndex": 97, - "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" + "logIndex": 84, + "blockHash": "0x6977ef63af3aac855406e97ffa70c775effb76ccd36b5b3ed53b0c47acde8056" }, { - "transactionIndex": 35, - "blockNumber": 5783729, - "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "transactionIndex": 52, + "blockNumber": 5831271, + "transactionHash": "0x6faf715f5858a6ce2075ffb4e5da05179c0c6e59f71643dfe669a29c285e6945", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 98, - "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" + "logIndex": 85, + "blockHash": "0x6977ef63af3aac855406e97ffa70c775effb76ccd36b5b3ed53b0c47acde8056" }, { - "transactionIndex": 35, - "blockNumber": 5783729, - "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "transactionIndex": 52, + "blockNumber": 5831271, + "transactionHash": "0x6faf715f5858a6ce2075ffb4e5da05179c0c6e59f71643dfe669a29c285e6945", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 99, - "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" + "logIndex": 86, + "blockHash": "0x6977ef63af3aac855406e97ffa70c775effb76ccd36b5b3ed53b0c47acde8056" }, { - "transactionIndex": 35, - "blockNumber": 5783729, - "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "transactionIndex": 52, + "blockNumber": 5831271, + "transactionHash": "0x6faf715f5858a6ce2075ffb4e5da05179c0c6e59f71643dfe669a29c285e6945", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", - "logIndex": 100, - "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", + "logIndex": 87, + "blockHash": "0x6977ef63af3aac855406e97ffa70c775effb76ccd36b5b3ed53b0c47acde8056" } ], - "blockNumber": 5783729, - "cumulativeGasUsed": "8330548", + "blockNumber": 5831271, + "cumulativeGasUsed": "6049262", "status": 1, "byzantium": true }, "args": [ - "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xd0C006f59160847eCAC63CcA98A568511689d02F", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "numDeployments": 1, @@ -582,7 +582,7 @@ "0x20b9049c69DeA7e5d46De82cE0b33A9D5a8a0893" ] }, - "implementation": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "implementation": "0xd0C006f59160847eCAC63CcA98A568511689d02F", "devdoc": { "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", "kind": "dev", diff --git a/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Implementation.json b/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Implementation.json index c0b2abe0a..e3de94809 100644 --- a/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Implementation.json +++ b/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Implementation.json @@ -1,5 +1,5 @@ { - "address": "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", + "address": "0xd0C006f59160847eCAC63CcA98A568511689d02F", "abi": [ { "anonymous": false, @@ -352,19 +352,19 @@ "type": "function" } ], - "transactionHash": "0xffa971d6c107758728ee537a3d76db27721a5a816a5b10c3ad50d3480e86e3fb", + "transactionHash": "0xd630f28e827e81d10a731e2bdc448dee745019f626f36ed5c32df0726470aaff", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 34, + "transactionIndex": 44, "gasUsed": "1663864", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x7b515a696da58c16207ca3f05dd890ee0dd0c4cc5d91c44b9f3a2a74fcd788e5", - "transactionHash": "0xffa971d6c107758728ee537a3d76db27721a5a816a5b10c3ad50d3480e86e3fb", + "blockHash": "0x36925a4a73f1fa2ccc2b0b7abd24ef0fea4d322aa4c11ebcdfbfa21f3d21c73d", + "transactionHash": "0xd630f28e827e81d10a731e2bdc448dee745019f626f36ed5c32df0726470aaff", "logs": [], - "blockNumber": 5783728, - "cumulativeGasUsed": "6126546", + "blockNumber": 5831270, + "cumulativeGasUsed": "8859376", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Proxy.json b/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Proxy.json index 75f084ac6..0bd052c99 100644 --- a/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Proxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/RoyaltiesRegistry_Proxy.json @@ -1,5 +1,5 @@ { - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "abi": [ { "inputs": [ @@ -146,79 +146,79 @@ "type": "receive" } ], - "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", + "transactionHash": "0x6faf715f5858a6ce2075ffb4e5da05179c0c6e59f71643dfe669a29c285e6945", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 35, + "transactionIndex": 52, "gasUsed": "811009", - "logsBloom": "0x00000000000000000000000000000000410000000400800000800000000000000000000000000000000000002000000000000000000040000000000000000000000000000000000000000000000002000001000000000000004000000000000000000000020000000000000000000800000000800000000000000004000000400800000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000001000000100000000400000000000000000020000000000000000000000000000000000000000080000000000000000000000000", - "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff", - "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", + "logsBloom": "0x00000000100000000000000000000000400000000400800000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000200000000002000001000000000000004000000000000000000000022000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000004000100000800000200000000000000000020000000000000000001000000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x6977ef63af3aac855406e97ffa70c775effb76ccd36b5b3ed53b0c47acde8056", + "transactionHash": "0x6faf715f5858a6ce2075ffb4e5da05179c0c6e59f71643dfe669a29c285e6945", "logs": [ { - "transactionIndex": 35, - "blockNumber": 5783729, - "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "transactionIndex": 52, + "blockNumber": 5831271, + "transactionHash": "0x6faf715f5858a6ce2075ffb4e5da05179c0c6e59f71643dfe669a29c285e6945", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "0x0000000000000000000000001e762e0b18280fe4e87a48d4e4f6c5419df18476" + "0x000000000000000000000000d0c006f59160847ecac63cca98a568511689d02f" ], "data": "0x", - "logIndex": 97, - "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" + "logIndex": 84, + "blockHash": "0x6977ef63af3aac855406e97ffa70c775effb76ccd36b5b3ed53b0c47acde8056" }, { - "transactionIndex": 35, - "blockNumber": 5783729, - "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "transactionIndex": 52, + "blockNumber": 5831271, + "transactionHash": "0x6faf715f5858a6ce2075ffb4e5da05179c0c6e59f71643dfe669a29c285e6945", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" ], "data": "0x", - "logIndex": 98, - "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" + "logIndex": 85, + "blockHash": "0x6977ef63af3aac855406e97ffa70c775effb76ccd36b5b3ed53b0c47acde8056" }, { - "transactionIndex": 35, - "blockNumber": 5783729, - "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "transactionIndex": 52, + "blockNumber": 5831271, + "transactionHash": "0x6faf715f5858a6ce2075ffb4e5da05179c0c6e59f71643dfe669a29c285e6945", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", "0x00000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "data": "0x", - "logIndex": 99, - "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" + "logIndex": 86, + "blockHash": "0x6977ef63af3aac855406e97ffa70c775effb76ccd36b5b3ed53b0c47acde8056" }, { - "transactionIndex": 35, - "blockNumber": 5783729, - "transactionHash": "0xcbdcff9334062b80d4b7227a3c708324f03a6867e1cde0d28e7561f2f666e738", - "address": "0xCF64c7115508f23069d5663611e10F5C5CF45776", + "transactionIndex": 52, + "blockNumber": 5831271, + "transactionHash": "0x6faf715f5858a6ce2075ffb4e5da05179c0c6e59f71643dfe669a29c285e6945", + "address": "0x097540c06647D14C5b63E678DC6e290e0f2150cc", "topics": [ "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" ], - "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", - "logIndex": 100, - "blockHash": "0x3c93efe0bf5b2fa5902828cef59b18acdb8813989a21108276d955f47a1dfaff" + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000393e4f1832e9f5f8c46a031275135640e61e9a9a", + "logIndex": 87, + "blockHash": "0x6977ef63af3aac855406e97ffa70c775effb76ccd36b5b3ed53b0c47acde8056" } ], - "blockNumber": 5783729, - "cumulativeGasUsed": "8330548", + "blockNumber": 5831271, + "cumulativeGasUsed": "6049262", "status": 1, "byzantium": true }, "args": [ - "0x1e762E0B18280Fe4E87a48D4e4F6c5419dF18476", - "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xd0C006f59160847eCAC63CcA98A568511689d02F", + "0x393e4f1832e9F5F8C46a031275135640E61e9A9a", "0x17c44b1700000000000000000000000020b9049c69dea7e5d46de82ce0b33a9d5a8a0893" ], "numDeployments": 1, diff --git a/projects/hardhat-deploy/deployments/sepolia/TransferProxy.json b/projects/hardhat-deploy/deployments/sepolia/TransferProxy.json index e1b2cdf01..4c4e3126a 100644 --- a/projects/hardhat-deploy/deployments/sepolia/TransferProxy.json +++ b/projects/hardhat-deploy/deployments/sepolia/TransferProxy.json @@ -1,5 +1,5 @@ { - "address": "0xA5707153b8AF346e17AF765235B054136eCf99EC", + "address": "0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308", "abi": [ { "anonymous": false, @@ -186,19 +186,19 @@ "type": "function" } ], - "transactionHash": "0x864ee8c1e815a51c6df727a3f845e7d814a2f0e6f1b10af46702a5c0c3928b1e", + "transactionHash": "0x1299789c54bd590edb8135e9d92c9146fae82c0819baf3e64fd46c7aba15f3aa", "receipt": { "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", "contractAddress": null, - "transactionIndex": 21, + "transactionIndex": 76, "gasUsed": "777214", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x0a2946703e7d4a5c89d05780e1bf836dd22277319e4453dae8090f88445283e7", - "transactionHash": "0x864ee8c1e815a51c6df727a3f845e7d814a2f0e6f1b10af46702a5c0c3928b1e", + "blockHash": "0xecb51ca7dc2bc944ae381c989421937d7728b866dfd5df3c66a303a2597b0295", + "transactionHash": "0x1299789c54bd590edb8135e9d92c9146fae82c0819baf3e64fd46c7aba15f3aa", "logs": [], - "blockNumber": 5783730, - "cumulativeGasUsed": "5397732", + "blockNumber": 5831272, + "cumulativeGasUsed": "8004081", "status": 1, "byzantium": true }, diff --git a/projects/hardhat-deploy/hardhat.config.ts b/projects/hardhat-deploy/hardhat.config.ts index d870a9726..8db023412 100644 --- a/projects/hardhat-deploy/hardhat.config.ts +++ b/projects/hardhat-deploy/hardhat.config.ts @@ -88,7 +88,7 @@ const config: HardhatUserConfig = { deployer: 0, }, paths: { - sources: "src", + sources: "src" }, networks: loadNetworkConfigs(), etherscan: { diff --git a/projects/hardhat-deploy/package.json b/projects/hardhat-deploy/package.json index 04e953582..3e6e2111f 100644 --- a/projects/hardhat-deploy/package.json +++ b/projects/hardhat-deploy/package.json @@ -29,7 +29,8 @@ "@rarible/royalties-registry": "^0.8.6", "@rarible/transfer-manager": "^0.8.6", "@rarible/upgrade-executor": "^0.8.6", - "zksync-ethers": "^5.0.0" + "zksync-ethers": "^5.0.0", + "@openzeppelin/contracts-4-7-3": "npm:@openzeppelin/contracts@4.7.3" }, "devDependencies": { "@anders-t/ethers-ledger": "^1.0.4", diff --git a/projects/hardhat-deploy/tsconfig.json b/projects/hardhat-deploy/tsconfig.json index 259140690..d66b928d6 100644 --- a/projects/hardhat-deploy/tsconfig.json +++ b/projects/hardhat-deploy/tsconfig.json @@ -4,6 +4,7 @@ "module": "commonjs", "strict": true, "esModuleInterop": true, + "resolveJsonModule": true, "moduleResolution": "node", "forceConsistentCasingInFileNames": true, "outDir": "dist" diff --git a/projects/thridweb-query/.eslintignore b/projects/thridweb-query/.eslintignore new file mode 100644 index 000000000..4cc2ea373 --- /dev/null +++ b/projects/thridweb-query/.eslintignore @@ -0,0 +1,13 @@ +# folders +artifacts/ +build/ +cache/ +coverage/ +dist/ +lib/ +node_modules/ +typechain/ + +# files +.solcover.js +coverage.json \ No newline at end of file diff --git a/projects/thridweb-query/README.md b/projects/thridweb-query/README.md new file mode 100644 index 000000000..494db4441 --- /dev/null +++ b/projects/thridweb-query/README.md @@ -0,0 +1,11 @@ +# `@rarible/thirdweb-query` + +> TODO: description + +## Usage + +``` +const thirdwebQuery = require('@rarible/thirdweb-query'); + +// TODO: DEMONSTRATE API +``` diff --git a/projects/thridweb-query/contracts/drop-reader/DropERC721Reader.sol b/projects/thridweb-query/contracts/drop-reader/DropERC721Reader.sol new file mode 100644 index 000000000..814f15781 --- /dev/null +++ b/projects/thridweb-query/contracts/drop-reader/DropERC721Reader.sol @@ -0,0 +1,117 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.11; + +/// @author rarible + +// /$$$$$$$ /$$ /$$ /$$ +// | $$__ $$ |__/| $$ | $$ +// | $$ \ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$ +// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$ +// | $$__ $$ /$$$$$$$| $$ \__/| $$| $$ \ $$| $$| $$$$$$$$ +// | $$ \ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/ +// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$ +// |__/ |__/ \_______/|__/ |__/|_______/ |__/ \_______/ + + +// ========== Features ========== + +import "hardhat/console.sol"; +import "@thirdweb-dev/contracts/eip/interface/IERC20.sol"; + +import "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol"; +import "./IDropERC721.sol"; + +contract DropERC721Reader is Initializable, OwnableUpgradeable { + + struct FeeData { + address recipient; + uint256 bps; + } + + struct GlobalData { + uint256 totalMinted; + uint256 claimedByUser; + uint256 totalSupply; + uint256 maxTotalSupply; + uint256 nextTokenIdToMint; + uint256 nextTokenIdToClaim; + string name; + string symbol; + string contractURI; + uint256 baseURICount; + uint256 userBalance; + uint256 blockTimeStamp; + FeeData defaultRoyaltyInfo; + FeeData platformFeeInfo; + } + + address public native1; + address public native2; + + function initialize(address _native1, address _native2, address initialOwner) public initializer { + __Ownable_init(); + native1 = _native1; + native2 = _native2; + // Transfer ownership to the initial owner provided + _transferOwnership(initialOwner); + } + + function getAllData( + address _dropERC721, + address _claimer + ) public view returns ( + uint256 activeClaimConditionIndex, + IDropERC721.ClaimCondition[] memory conditions, + GlobalData memory globalData + ) { + IDropERC721 drop = IDropERC721(_dropERC721); + + (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition(); + uint256 _claimedByUser = 0; + if(stopConditionIndex != 0) { + try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) { + activeClaimConditionIndex = _activeClaimConditionIndex; + } catch { + activeClaimConditionIndex = 0; + } + conditions = new IDropERC721.ClaimCondition[](stopConditionIndex); + + for (uint i = 0; i < stopConditionIndex; i++) { + IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i); + conditions[i] = condition; + } + } + + DropERC721Reader.GlobalData memory _globalData; + if(stopConditionIndex > 0) { + _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer); + IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex); + if(condition.currency == native1 || condition.currency == native2) { + _globalData.userBalance = _claimer.balance; + } else { + _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer); + } + + } + + _globalData.totalMinted = drop.totalMinted(); + _globalData.claimedByUser = _claimedByUser; + _globalData.totalSupply = drop.totalSupply(); + _globalData.maxTotalSupply = drop.maxTotalSupply(); + _globalData.nextTokenIdToMint = drop.nextTokenIdToMint(); + _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim(); + _globalData.name = drop.name(); + _globalData.symbol = drop.symbol(); + _globalData.contractURI = drop.contractURI(); + _globalData.baseURICount = drop.getBaseURICount(); + _globalData.blockTimeStamp = block.timestamp; + (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo(); + _globalData.defaultRoyaltyInfo.recipient = rAddress; + _globalData.defaultRoyaltyInfo.bps = rBps; + + (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo(); + _globalData.platformFeeInfo.recipient = pAddress; + _globalData.platformFeeInfo.bps = pBps; + return (activeClaimConditionIndex, conditions, _globalData); + } +} \ No newline at end of file diff --git a/projects/thridweb-query/contracts/drop-reader/IDropERC721.sol b/projects/thridweb-query/contracts/drop-reader/IDropERC721.sol new file mode 100644 index 000000000..20c97c0e6 --- /dev/null +++ b/projects/thridweb-query/contracts/drop-reader/IDropERC721.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +interface IDropERC721 { + // This struct describes a single claim condition + struct ClaimCondition { + uint256 startTimestamp; + uint256 maxClaimableSupply; + uint256 supplyClaimed; + uint256 quantityLimitPerWallet; + bytes32 merkleRoot; + uint256 pricePerToken; + address currency; + string metadata; + } + + // Events + event ClaimConditionsUpdated( + ClaimCondition[] claimConditions, + bool resetEligibility + ); + event TokensClaimed( + uint256 indexed claimConditionIndex, + address indexed claimer, + address indexed receiver, + uint256 startTokenId, + uint256 quantityClaimed + ); + + // View functions for global data + function totalMinted() external view returns (uint256); + function totalSupply() external view returns (uint256); + function maxTotalSupply() external view returns (uint256); + function nextTokenIdToMint() external view returns (uint256); + function nextTokenIdToClaim() external view returns (uint256); + function name() external view returns (string memory); + function symbol() external view returns (string memory); + function contractURI() external view returns (string memory); + function getBaseURICount() external view returns (uint256); + function getDefaultRoyaltyInfo() external view returns (address, uint16); + function getPlatformFeeInfo() external view returns (address, uint16); + + // Specific claim condition methods + function claimCondition() external view returns (uint256 currentStartId, uint256 count); + function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition); + function getActiveClaimConditionId() external view returns (uint256); + function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256); +} diff --git a/projects/thridweb-query/deploy/006_deploy_ThirdwebReader.ts b/projects/thridweb-query/deploy/006_deploy_ThirdwebReader.ts new file mode 100644 index 000000000..63b3ed495 --- /dev/null +++ b/projects/thridweb-query/deploy/006_deploy_ThirdwebReader.ts @@ -0,0 +1,35 @@ +import { HardhatRuntimeEnvironment } from 'hardhat/types'; +import { DeployFunction } from 'hardhat-deploy/types'; + +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + + console.log(`deploying contracts on network ${hre.network.name}`) + + const { deploy } = hre.deployments; + const { deployer } = await hre.getNamedAccounts(); + console.log("deploying contracts with the account:", deployer); + + // address public constant NATIVE1 = 0x0000000000000000000000000000000000000000; + // address public constant NATIVE2 = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; + + // kkep deployer as an owner because read only contract + await deploy('DropERC721Reader', { + from: deployer, + proxy: { + execute: { + init: { + methodName: "initialize", + args: ["0x0000000000000000000000000000000000000000", "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", deployer], + }, + }, + proxyContract: "OpenZeppelinTransparentProxy", + }, + log: true, + autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, + }); + +}; +export default func; +func.tags = ['all', "006"]; diff --git a/projects/thridweb-query/deployments/polygon_mainnet/.chainId b/projects/thridweb-query/deployments/polygon_mainnet/.chainId new file mode 100644 index 000000000..0973804c4 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_mainnet/.chainId @@ -0,0 +1 @@ +137 \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon_mainnet/DefaultProxyAdmin.json b/projects/thridweb-query/deployments/polygon_mainnet/DefaultProxyAdmin.json new file mode 100644 index 000000000..5fc50b2d2 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_mainnet/DefaultProxyAdmin.json @@ -0,0 +1,274 @@ +{ + "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0xfae9b408546fc5b23eb3a864e2732a4bf48de4cc1c5bcdaa10dc9f6419d536c4", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 24, + "gasUsed": "677380", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000880001000000000000000100000001000000000000020000000000000000000800000000000000000080000000000000500200000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000010000000000000000000000000004000000000000000000001000000080000080000000000000000100000000020000000000000000000000000000000000000000000000004000000000000100020", + "blockHash": "0x1f9761179cd7bb50d74aaa00e0196488b72a811c950b7ba280d7389182377211", + "transactionHash": "0xfae9b408546fc5b23eb3a864e2732a4bf48de4cc1c5bcdaa10dc9f6419d536c4", + "logs": [ + { + "transactionIndex": 24, + "blockNumber": 56508365, + "transactionHash": "0xfae9b408546fc5b23eb3a864e2732a4bf48de4cc1c5bcdaa10dc9f6419d536c4", + "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 67, + "blockHash": "0x1f9761179cd7bb50d74aaa00e0196488b72a811c950b7ba280d7389182377211" + }, + { + "transactionIndex": 24, + "blockNumber": 56508365, + "transactionHash": "0xfae9b408546fc5b23eb3a864e2732a4bf48de4cc1c5bcdaa10dc9f6419d536c4", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000127685d6dd6683085da4b6a041efcef1681e5c9c" + ], + "data": "0x000000000000000000000000000000000000000000000000004f07dabc1688000000000000000000000000000000000000000000000000000d2fcac22524b0350000000000000000000000000000000000000000000001f5ff48f04553031d860000000000000000000000000000000000000000000000000ce0c2e7690e28350000000000000000000000000000000000000000000001f5ff97f8200f19a586", + "logIndex": 68, + "blockHash": "0x1f9761179cd7bb50d74aaa00e0196488b72a811c950b7ba280d7389182377211" + } + ], + "blockNumber": 56508365, + "cumulativeGasUsed": "3458345", + "status": 1, + "byzantium": true + }, + "args": [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon_mainnet/DropERC721Reader.json b/projects/thridweb-query/deployments/polygon_mainnet/DropERC721Reader.json new file mode 100644 index 000000000..1378ea3da --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_mainnet/DropERC721Reader.json @@ -0,0 +1,585 @@ +{ + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 32, + "gasUsed": "837236", + "logsBloom": "0x000000020000000000000010000000004000000000000020008000000000000000000000000000000000000000000000000080000000400000000000000000000000000000000000000000000000028800010000000000000041000000000000000000000200000000000000000008000000008001000000800000000000005000000040000000000000000000000000000000000000800000000000008000002000000000000100000000000004000000000000000000000000200000000040000000200000000000010002010c0000000000000400000000100000000020000000000000000000000000000000020000000000000000000000000000100000", + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11", + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "logs": [ + { + "transactionIndex": 32, + "blockNumber": 56508372, + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000006ad72a018f57561575dd14a654cd34e144140077" + ], + "data": "0x", + "logIndex": 168, + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11" + }, + { + "transactionIndex": 32, + "blockNumber": 56508372, + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 169, + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11" + }, + { + "transactionIndex": 32, + "blockNumber": 56508372, + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 170, + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11" + }, + { + "transactionIndex": 32, + "blockNumber": 56508372, + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 171, + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11" + }, + { + "transactionIndex": 32, + "blockNumber": 56508372, + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 172, + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11" + }, + { + "transactionIndex": 32, + "blockNumber": 56508372, + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000eedba2484aaf940f37cd3cd21a5d7c4a7dafbfc0" + ], + "data": "0x000000000000000000000000000000000000000000000000005f2ec6494be9fc0000000000000000000000000000000000000000000000000c5a8652c21540fb00000000000000000000000000000000000000000001246116174cee637f70ea0000000000000000000000000000000000000000000000000bfb578c78c956ff00000000000000000000000000000000000000000001246116767bb4accb5ae6", + "logIndex": 173, + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11" + } + ], + "blockNumber": 56508372, + "cumulativeGasUsed": "15941938", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6ad72a018f57561575Dd14A654cD34E144140077", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x0000000000000000000000000000000000000000", + "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ] + }, + "implementation": "0x6ad72a018f57561575Dd14A654cD34E144140077", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon_mainnet/DropERC721Reader_Implementation.json b/projects/thridweb-query/deployments/polygon_mainnet/DropERC721Reader_Implementation.json new file mode 100644 index 000000000..508475f8d --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_mainnet/DropERC721Reader_Implementation.json @@ -0,0 +1,443 @@ +{ + "address": "0x6ad72a018f57561575Dd14A654cD34E144140077", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xc2bfe4ee0679e6fad452e34f2a4e8827f87c8f1712cab67f101eb70795dbe499", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 40, + "gasUsed": "1180758", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000880000000000000000000100000000000000000000000000000000000000000000000000000100000080000000000000100000004000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000020000000004000000000000000000001000000080000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "blockHash": "0x0e43af1bf722996a0db38fb8f485c383db3ea1de5ea7a32ead1875529ecab304", + "transactionHash": "0xc2bfe4ee0679e6fad452e34f2a4e8827f87c8f1712cab67f101eb70795dbe499", + "logs": [ + { + "transactionIndex": 40, + "blockNumber": 56508368, + "transactionHash": "0xc2bfe4ee0679e6fad452e34f2a4e8827f87c8f1712cab67f101eb70795dbe499", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000eedba2484aaf940f37cd3cd21a5d7c4a7dafbfc0" + ], + "data": "0x00000000000000000000000000000000000000000000000000863c94a0e684840000000000000000000000000000000000000000000000000ce0c2e766b6ab4d000000000000000000000000000000000000000000012460fb5a64abf3c7a7620000000000000000000000000000000000000000000000000c5a8652c5d026c9000000000000000000000000000000000000000000012460fbe0a14094ae2be6", + "logIndex": 192, + "blockHash": "0x0e43af1bf722996a0db38fb8f485c383db3ea1de5ea7a32ead1875529ecab304" + } + ], + "blockNumber": 56508368, + "cumulativeGasUsed": "6808055", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "a04eb453fca4038b91c2157203390840", + "metadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dropERC721\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"}],\"name\":\"getAllData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeClaimConditionIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxClaimableSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyClaimed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantityLimitPerWallet\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"pricePerToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"struct IDropERC721.ClaimCondition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalMinted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedByUser\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToClaim\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"baseURICount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockTimeStamp\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"defaultRoyaltyInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"platformFeeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct DropERC721Reader.GlobalData\",\"name\":\"globalData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_native1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_native2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/drop-reader/DropERC721Reader.sol\":\"DropERC721Reader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\\n * initialization step. This is essential to configure modules that are added through upgrades and that require\\n * initialization.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC20 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/20\\n */\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address who) external view returns (uint256);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x458d6ffd4d79153b9bfca794efa8169bbb942b47723153e6d2b0051e2cd9dcf1\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/DropERC721Reader.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.11;\\n\\n/// @author rarible\\n\\n// /$$$$$$$ /$$ /$$ /$$\\n// | $$__ $$ |__/| $$ | $$\\n// | $$ \\\\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\\n// | $$__ $$ /$$$$$$$| $$ \\\\__/| $$| $$ \\\\ $$| $$| $$$$$$$$\\n// | $$ \\\\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\\n// |__/ |__/ \\\\_______/|__/ |__/|_______/ |__/ \\\\_______/\\n\\n\\n// ========== Features ==========\\n\\nimport \\\"hardhat/console.sol\\\";\\nimport \\\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./IDropERC721.sol\\\";\\n\\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\\n\\n struct FeeData {\\n address recipient;\\n uint256 bps;\\n }\\n\\n struct GlobalData {\\n uint256 totalMinted;\\n uint256 claimedByUser;\\n uint256 totalSupply;\\n uint256 maxTotalSupply;\\n uint256 nextTokenIdToMint;\\n uint256 nextTokenIdToClaim;\\n string name;\\n string symbol;\\n string contractURI;\\n uint256 baseURICount;\\n uint256 userBalance;\\n uint256 blockTimeStamp;\\n FeeData defaultRoyaltyInfo;\\n FeeData platformFeeInfo;\\n }\\n\\n address public native1;\\n address public native2;\\n\\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\\n __Ownable_init();\\n native1 = _native1;\\n native2 = _native2;\\n // Transfer ownership to the initial owner provided\\n _transferOwnership(initialOwner);\\n }\\n\\n function getAllData(\\n address _dropERC721,\\n address _claimer\\n ) public view returns (\\n uint256 activeClaimConditionIndex,\\n IDropERC721.ClaimCondition[] memory conditions,\\n GlobalData memory globalData\\n ) {\\n IDropERC721 drop = IDropERC721(_dropERC721);\\n\\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\\n uint256 _claimedByUser = 0;\\n if(stopConditionIndex != 0) {\\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\\n activeClaimConditionIndex = _activeClaimConditionIndex;\\n } catch {\\n activeClaimConditionIndex = 0;\\n }\\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\\n \\n for (uint i = 0; i < stopConditionIndex; i++) {\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\\n conditions[i] = condition;\\n }\\n }\\n\\n DropERC721Reader.GlobalData memory _globalData;\\n if(stopConditionIndex > 0) {\\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\\n if(condition.currency == native1 || condition.currency == native2) {\\n _globalData.userBalance = _claimer.balance;\\n } else {\\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\\n }\\n\\n }\\n\\n _globalData.totalMinted = drop.totalMinted();\\n _globalData.claimedByUser = _claimedByUser;\\n _globalData.totalSupply = drop.totalSupply();\\n _globalData.maxTotalSupply = drop.maxTotalSupply();\\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\\n _globalData.name = drop.name();\\n _globalData.symbol = drop.symbol();\\n _globalData.contractURI = drop.contractURI();\\n _globalData.baseURICount = drop.getBaseURICount();\\n _globalData.blockTimeStamp = block.timestamp;\\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\\n _globalData.defaultRoyaltyInfo.bps = rBps;\\n\\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.bps = pBps;\\n return (activeClaimConditionIndex, conditions, _globalData);\\n }\\n}\",\"keccak256\":\"0x1e5633984124ff64630f990fa899abc71d721ba471fc0fa253fa5e06ba28d23d\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/IDropERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDropERC721 {\\n // This struct describes a single claim condition\\n struct ClaimCondition {\\n uint256 startTimestamp;\\n uint256 maxClaimableSupply;\\n uint256 supplyClaimed;\\n uint256 quantityLimitPerWallet;\\n bytes32 merkleRoot;\\n uint256 pricePerToken;\\n address currency;\\n string metadata;\\n }\\n\\n // Events\\n event ClaimConditionsUpdated(\\n ClaimCondition[] claimConditions,\\n bool resetEligibility\\n );\\n event TokensClaimed(\\n uint256 indexed claimConditionIndex,\\n address indexed claimer,\\n address indexed receiver,\\n uint256 startTokenId,\\n uint256 quantityClaimed\\n );\\n\\n // View functions for global data\\n function totalMinted() external view returns (uint256);\\n function totalSupply() external view returns (uint256);\\n function maxTotalSupply() external view returns (uint256);\\n function nextTokenIdToMint() external view returns (uint256);\\n function nextTokenIdToClaim() external view returns (uint256);\\n function name() external view returns (string memory);\\n function symbol() external view returns (string memory);\\n function contractURI() external view returns (string memory);\\n function getBaseURICount() external view returns (uint256);\\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\\n function getPlatformFeeInfo() external view returns (address, uint16);\\n\\n // Specific claim condition methods\\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\\n function getActiveClaimConditionId() external view returns (uint256);\\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x78c04c177793bc91b8c4f7efe8bd7c163ca4cbdb5a19f88fe71309a075f2f415\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506113ab806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220e916cec348cb357b23a050a7035d595748f758877db1f1ad0afe854aeda5797f64736f6c634300080c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220e916cec348cb357b23a050a7035d595748f758877db1f1ad0afe854aeda5797f64736f6c634300080c0033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 138, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 141, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 566, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 130, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 685, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native1", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 687, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native2", + "offset": 0, + "slot": "102", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon_mainnet/DropERC721Reader_Proxy.json b/projects/thridweb-query/deployments/polygon_mainnet/DropERC721Reader_Proxy.json new file mode 100644 index 000000000..9aa8c7b55 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_mainnet/DropERC721Reader_Proxy.json @@ -0,0 +1,290 @@ +{ + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 32, + "gasUsed": "837236", + "logsBloom": "0x000000020000000000000010000000004000000000000020008000000000000000000000000000000000000000000000000080000000400000000000000000000000000000000000000000000000028800010000000000000041000000000000000000000200000000000000000008000000008001000000800000000000005000000040000000000000000000000000000000000000800000000000008000002000000000000100000000000004000000000000000000000000200000000040000000200000000000010002010c0000000000000400000000100000000020000000000000000000000000000000020000000000000000000000000000100000", + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11", + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "logs": [ + { + "transactionIndex": 32, + "blockNumber": 56508372, + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000006ad72a018f57561575dd14a654cd34e144140077" + ], + "data": "0x", + "logIndex": 168, + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11" + }, + { + "transactionIndex": 32, + "blockNumber": 56508372, + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 169, + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11" + }, + { + "transactionIndex": 32, + "blockNumber": 56508372, + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 170, + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11" + }, + { + "transactionIndex": 32, + "blockNumber": 56508372, + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 171, + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11" + }, + { + "transactionIndex": 32, + "blockNumber": 56508372, + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 172, + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11" + }, + { + "transactionIndex": 32, + "blockNumber": 56508372, + "transactionHash": "0x48beaf5348ee824c03b60a2846b436c9d4a20cba301d7c90f95c863feb70dbca", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000eedba2484aaf940f37cd3cd21a5d7c4a7dafbfc0" + ], + "data": "0x000000000000000000000000000000000000000000000000005f2ec6494be9fc0000000000000000000000000000000000000000000000000c5a8652c21540fb00000000000000000000000000000000000000000001246116174cee637f70ea0000000000000000000000000000000000000000000000000bfb578c78c956ff00000000000000000000000000000000000000000001246116767bb4accb5ae6", + "logIndex": 173, + "blockHash": "0x390416ef089bdd7e10a3bb95bd33d3aa985e0cba09f497b09d8574bb88ca0f11" + } + ], + "blockNumber": 56508372, + "cumulativeGasUsed": "15941938", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6ad72a018f57561575Dd14A654cD34E144140077", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon_mainnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/thridweb-query/deployments/polygon_mainnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_mainnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon_mainnet/solcInputs/a04eb453fca4038b91c2157203390840.json b/projects/thridweb-query/deployments/polygon_mainnet/solcInputs/a04eb453fca4038b91c2157203390840.json new file mode 100644 index 000000000..e647fe8ed --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_mainnet/solcInputs/a04eb453fca4038b91c2157203390840.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n struct FeeData {\n address recipient;\n uint256 bps;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n _globalData.maxTotalSupply = drop.maxTotalSupply();\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n _globalData.baseURICount = drop.getBaseURICount();\n _globalData.blockTimeStamp = block.timestamp;\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.bps = rBps;\n\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.bps = pBps;\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeInfo() external view returns (address, uint16);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/sepolia/.chainId b/projects/thridweb-query/deployments/sepolia/.chainId new file mode 100644 index 000000000..bd8d1cd44 --- /dev/null +++ b/projects/thridweb-query/deployments/sepolia/.chainId @@ -0,0 +1 @@ +11155111 \ No newline at end of file diff --git a/projects/thridweb-query/deployments/sepolia/DefaultProxyAdmin.json b/projects/thridweb-query/deployments/sepolia/DefaultProxyAdmin.json new file mode 100644 index 000000000..269f8aa07 --- /dev/null +++ b/projects/thridweb-query/deployments/sepolia/DefaultProxyAdmin.json @@ -0,0 +1,228 @@ +{ + "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "args": [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/sepolia/DropERC721Reader.json b/projects/thridweb-query/deployments/sepolia/DropERC721Reader.json new file mode 100644 index 000000000..3b8ae790d --- /dev/null +++ b/projects/thridweb-query/deployments/sepolia/DropERC721Reader.json @@ -0,0 +1,570 @@ +{ + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 141, + "gasUsed": "837236", + "logsBloom": "0x000000020000000000000010000000004000000000000020008000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000020800010000000000000040000000000000000000000200000000000000000008000000008000000000000000000000005000000000000000000000000000000000000000000000800000000000008000000000000000000100000000000004000000000000000000000000000000000000000000200000000000000002010c0000000000000400000000000000000020000000000000000000000000000000020000000000000000000000000000000000", + "blockHash": "0x4f0f14d04bb8954d34e07ed2cd7c2a0b2c57dd280cda3b3c994c621506c5e5d0", + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "logs": [ + { + "transactionIndex": 141, + "blockNumber": 5822498, + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000006ad72a018f57561575dd14a654cd34e144140077" + ], + "data": "0x", + "logIndex": 319, + "blockHash": "0x4f0f14d04bb8954d34e07ed2cd7c2a0b2c57dd280cda3b3c994c621506c5e5d0" + }, + { + "transactionIndex": 141, + "blockNumber": 5822498, + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 320, + "blockHash": "0x4f0f14d04bb8954d34e07ed2cd7c2a0b2c57dd280cda3b3c994c621506c5e5d0" + }, + { + "transactionIndex": 141, + "blockNumber": 5822498, + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 321, + "blockHash": "0x4f0f14d04bb8954d34e07ed2cd7c2a0b2c57dd280cda3b3c994c621506c5e5d0" + }, + { + "transactionIndex": 141, + "blockNumber": 5822498, + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 322, + "blockHash": "0x4f0f14d04bb8954d34e07ed2cd7c2a0b2c57dd280cda3b3c994c621506c5e5d0" + }, + { + "transactionIndex": 141, + "blockNumber": 5822498, + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 323, + "blockHash": "0x4f0f14d04bb8954d34e07ed2cd7c2a0b2c57dd280cda3b3c994c621506c5e5d0" + } + ], + "blockNumber": 5822498, + "cumulativeGasUsed": "17379201", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6ad72a018f57561575Dd14A654cD34E144140077", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x0000000000000000000000000000000000000000", + "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ] + }, + "implementation": "0x6ad72a018f57561575Dd14A654cD34E144140077", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/sepolia/DropERC721Reader_Implementation.json b/projects/thridweb-query/deployments/sepolia/DropERC721Reader_Implementation.json new file mode 100644 index 000000000..c0c3c5292 --- /dev/null +++ b/projects/thridweb-query/deployments/sepolia/DropERC721Reader_Implementation.json @@ -0,0 +1,427 @@ +{ + "address": "0x6ad72a018f57561575Dd14A654cD34E144140077", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x1c0f47292ae9727bf9dc407b6cfde7804e85c06c6f5769939992eddb622ada1f", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 71, + "gasUsed": "1180758", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xa86d0680fa9ea920e12b0b835e0233fc0b024d342575418ff1e9fee9d5195b8c", + "transactionHash": "0x1c0f47292ae9727bf9dc407b6cfde7804e85c06c6f5769939992eddb622ada1f", + "logs": [], + "blockNumber": 5822497, + "cumulativeGasUsed": "8295763", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "a04eb453fca4038b91c2157203390840", + "metadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dropERC721\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"}],\"name\":\"getAllData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeClaimConditionIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxClaimableSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyClaimed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantityLimitPerWallet\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"pricePerToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"struct IDropERC721.ClaimCondition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalMinted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedByUser\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToClaim\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"baseURICount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockTimeStamp\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"defaultRoyaltyInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"platformFeeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct DropERC721Reader.GlobalData\",\"name\":\"globalData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_native1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_native2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/drop-reader/DropERC721Reader.sol\":\"DropERC721Reader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\\n * initialization step. This is essential to configure modules that are added through upgrades and that require\\n * initialization.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC20 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/20\\n */\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address who) external view returns (uint256);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x458d6ffd4d79153b9bfca794efa8169bbb942b47723153e6d2b0051e2cd9dcf1\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/DropERC721Reader.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.11;\\n\\n/// @author rarible\\n\\n// /$$$$$$$ /$$ /$$ /$$\\n// | $$__ $$ |__/| $$ | $$\\n// | $$ \\\\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\\n// | $$__ $$ /$$$$$$$| $$ \\\\__/| $$| $$ \\\\ $$| $$| $$$$$$$$\\n// | $$ \\\\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\\n// |__/ |__/ \\\\_______/|__/ |__/|_______/ |__/ \\\\_______/\\n\\n\\n// ========== Features ==========\\n\\nimport \\\"hardhat/console.sol\\\";\\nimport \\\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./IDropERC721.sol\\\";\\n\\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\\n\\n struct FeeData {\\n address recipient;\\n uint256 bps;\\n }\\n\\n struct GlobalData {\\n uint256 totalMinted;\\n uint256 claimedByUser;\\n uint256 totalSupply;\\n uint256 maxTotalSupply;\\n uint256 nextTokenIdToMint;\\n uint256 nextTokenIdToClaim;\\n string name;\\n string symbol;\\n string contractURI;\\n uint256 baseURICount;\\n uint256 userBalance;\\n uint256 blockTimeStamp;\\n FeeData defaultRoyaltyInfo;\\n FeeData platformFeeInfo;\\n }\\n\\n address public native1;\\n address public native2;\\n\\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\\n __Ownable_init();\\n native1 = _native1;\\n native2 = _native2;\\n // Transfer ownership to the initial owner provided\\n _transferOwnership(initialOwner);\\n }\\n\\n function getAllData(\\n address _dropERC721,\\n address _claimer\\n ) public view returns (\\n uint256 activeClaimConditionIndex,\\n IDropERC721.ClaimCondition[] memory conditions,\\n GlobalData memory globalData\\n ) {\\n IDropERC721 drop = IDropERC721(_dropERC721);\\n\\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\\n uint256 _claimedByUser = 0;\\n if(stopConditionIndex != 0) {\\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\\n activeClaimConditionIndex = _activeClaimConditionIndex;\\n } catch {\\n activeClaimConditionIndex = 0;\\n }\\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\\n \\n for (uint i = 0; i < stopConditionIndex; i++) {\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\\n conditions[i] = condition;\\n }\\n }\\n\\n DropERC721Reader.GlobalData memory _globalData;\\n if(stopConditionIndex > 0) {\\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\\n if(condition.currency == native1 || condition.currency == native2) {\\n _globalData.userBalance = _claimer.balance;\\n } else {\\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\\n }\\n\\n }\\n\\n _globalData.totalMinted = drop.totalMinted();\\n _globalData.claimedByUser = _claimedByUser;\\n _globalData.totalSupply = drop.totalSupply();\\n _globalData.maxTotalSupply = drop.maxTotalSupply();\\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\\n _globalData.name = drop.name();\\n _globalData.symbol = drop.symbol();\\n _globalData.contractURI = drop.contractURI();\\n _globalData.baseURICount = drop.getBaseURICount();\\n _globalData.blockTimeStamp = block.timestamp;\\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\\n _globalData.defaultRoyaltyInfo.bps = rBps;\\n\\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.bps = pBps;\\n return (activeClaimConditionIndex, conditions, _globalData);\\n }\\n}\",\"keccak256\":\"0x1e5633984124ff64630f990fa899abc71d721ba471fc0fa253fa5e06ba28d23d\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/IDropERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDropERC721 {\\n // This struct describes a single claim condition\\n struct ClaimCondition {\\n uint256 startTimestamp;\\n uint256 maxClaimableSupply;\\n uint256 supplyClaimed;\\n uint256 quantityLimitPerWallet;\\n bytes32 merkleRoot;\\n uint256 pricePerToken;\\n address currency;\\n string metadata;\\n }\\n\\n // Events\\n event ClaimConditionsUpdated(\\n ClaimCondition[] claimConditions,\\n bool resetEligibility\\n );\\n event TokensClaimed(\\n uint256 indexed claimConditionIndex,\\n address indexed claimer,\\n address indexed receiver,\\n uint256 startTokenId,\\n uint256 quantityClaimed\\n );\\n\\n // View functions for global data\\n function totalMinted() external view returns (uint256);\\n function totalSupply() external view returns (uint256);\\n function maxTotalSupply() external view returns (uint256);\\n function nextTokenIdToMint() external view returns (uint256);\\n function nextTokenIdToClaim() external view returns (uint256);\\n function name() external view returns (string memory);\\n function symbol() external view returns (string memory);\\n function contractURI() external view returns (string memory);\\n function getBaseURICount() external view returns (uint256);\\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\\n function getPlatformFeeInfo() external view returns (address, uint16);\\n\\n // Specific claim condition methods\\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\\n function getActiveClaimConditionId() external view returns (uint256);\\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x78c04c177793bc91b8c4f7efe8bd7c163ca4cbdb5a19f88fe71309a075f2f415\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506113ab806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220e916cec348cb357b23a050a7035d595748f758877db1f1ad0afe854aeda5797f64736f6c634300080c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220e916cec348cb357b23a050a7035d595748f758877db1f1ad0afe854aeda5797f64736f6c634300080c0033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 138, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 141, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 566, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 130, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 685, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native1", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 687, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native2", + "offset": 0, + "slot": "102", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/sepolia/DropERC721Reader_Proxy.json b/projects/thridweb-query/deployments/sepolia/DropERC721Reader_Proxy.json new file mode 100644 index 000000000..1eb1151f4 --- /dev/null +++ b/projects/thridweb-query/deployments/sepolia/DropERC721Reader_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 141, + "gasUsed": "837236", + "logsBloom": "0x000000020000000000000010000000004000000000000020008000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000020800010000000000000040000000000000000000000200000000000000000008000000008000000000000000000000005000000000000000000000000000000000000000000000800000000000008000000000000000000100000000000004000000000000000000000000000000000000000000200000000000000002010c0000000000000400000000000000000020000000000000000000000000000000020000000000000000000000000000000000", + "blockHash": "0x4f0f14d04bb8954d34e07ed2cd7c2a0b2c57dd280cda3b3c994c621506c5e5d0", + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "logs": [ + { + "transactionIndex": 141, + "blockNumber": 5822498, + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000006ad72a018f57561575dd14a654cd34e144140077" + ], + "data": "0x", + "logIndex": 319, + "blockHash": "0x4f0f14d04bb8954d34e07ed2cd7c2a0b2c57dd280cda3b3c994c621506c5e5d0" + }, + { + "transactionIndex": 141, + "blockNumber": 5822498, + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 320, + "blockHash": "0x4f0f14d04bb8954d34e07ed2cd7c2a0b2c57dd280cda3b3c994c621506c5e5d0" + }, + { + "transactionIndex": 141, + "blockNumber": 5822498, + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 321, + "blockHash": "0x4f0f14d04bb8954d34e07ed2cd7c2a0b2c57dd280cda3b3c994c621506c5e5d0" + }, + { + "transactionIndex": 141, + "blockNumber": 5822498, + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 322, + "blockHash": "0x4f0f14d04bb8954d34e07ed2cd7c2a0b2c57dd280cda3b3c994c621506c5e5d0" + }, + { + "transactionIndex": 141, + "blockNumber": 5822498, + "transactionHash": "0x4928377b402ecebb544a70c7e9dc39cdab19b385443379be3797e5f4138e832f", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 323, + "blockHash": "0x4f0f14d04bb8954d34e07ed2cd7c2a0b2c57dd280cda3b3c994c621506c5e5d0" + } + ], + "blockNumber": 5822498, + "cumulativeGasUsed": "17379201", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6ad72a018f57561575Dd14A654cD34E144140077", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/thridweb-query/deployments/sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/thridweb-query/deployments/sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/sepolia/solcInputs/a04eb453fca4038b91c2157203390840.json b/projects/thridweb-query/deployments/sepolia/solcInputs/a04eb453fca4038b91c2157203390840.json new file mode 100644 index 000000000..e647fe8ed --- /dev/null +++ b/projects/thridweb-query/deployments/sepolia/solcInputs/a04eb453fca4038b91c2157203390840.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n struct FeeData {\n address recipient;\n uint256 bps;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n _globalData.maxTotalSupply = drop.maxTotalSupply();\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n _globalData.baseURICount = drop.getBaseURICount();\n _globalData.blockTimeStamp = block.timestamp;\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.bps = rBps;\n\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.bps = pBps;\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeInfo() external view returns (address, uint16);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/xai_sepolia_testnet/.chainId b/projects/thridweb-query/deployments/xai_sepolia_testnet/.chainId new file mode 100644 index 000000000..f26fb1d3c --- /dev/null +++ b/projects/thridweb-query/deployments/xai_sepolia_testnet/.chainId @@ -0,0 +1 @@ +37714555429 \ No newline at end of file diff --git a/projects/thridweb-query/deployments/xai_sepolia_testnet/DefaultProxyAdmin.json b/projects/thridweb-query/deployments/xai_sepolia_testnet/DefaultProxyAdmin.json new file mode 100644 index 000000000..269f8aa07 --- /dev/null +++ b/projects/thridweb-query/deployments/xai_sepolia_testnet/DefaultProxyAdmin.json @@ -0,0 +1,228 @@ +{ + "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "args": [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/xai_sepolia_testnet/DropERC721Reader.json b/projects/thridweb-query/deployments/xai_sepolia_testnet/DropERC721Reader.json new file mode 100644 index 000000000..b21b64814 --- /dev/null +++ b/projects/thridweb-query/deployments/xai_sepolia_testnet/DropERC721Reader.json @@ -0,0 +1,570 @@ +{ + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1204957", + "logsBloom": "0x000000020000000000000010000000004000000000000020008000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000020800010000000000000040000000000000000000000200000000000000000008000000008000000000000000000000005000000000000000000000000000000000000000000000800000000000008000000000000000000100000000000004000000000000000000000000000000000000000000200000000000000002010c0000000000000400000000000000000020000000000000000000000000000000020000000000000000000000000000000000", + "blockHash": "0xd8e4ed65fae59ca9d53e1a1173fe3285375103d1fe35ef95f355451f9f80c97d", + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 485846, + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000006ad72a018f57561575dd14a654cd34e144140077" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xd8e4ed65fae59ca9d53e1a1173fe3285375103d1fe35ef95f355451f9f80c97d" + }, + { + "transactionIndex": 1, + "blockNumber": 485846, + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xd8e4ed65fae59ca9d53e1a1173fe3285375103d1fe35ef95f355451f9f80c97d" + }, + { + "transactionIndex": 1, + "blockNumber": 485846, + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xd8e4ed65fae59ca9d53e1a1173fe3285375103d1fe35ef95f355451f9f80c97d" + }, + { + "transactionIndex": 1, + "blockNumber": 485846, + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xd8e4ed65fae59ca9d53e1a1173fe3285375103d1fe35ef95f355451f9f80c97d" + }, + { + "transactionIndex": 1, + "blockNumber": 485846, + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 4, + "blockHash": "0xd8e4ed65fae59ca9d53e1a1173fe3285375103d1fe35ef95f355451f9f80c97d" + } + ], + "blockNumber": 485846, + "cumulativeGasUsed": "1204957", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6ad72a018f57561575Dd14A654cD34E144140077", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x0000000000000000000000000000000000000000", + "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ] + }, + "implementation": "0x6ad72a018f57561575Dd14A654cD34E144140077", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/xai_sepolia_testnet/DropERC721Reader_Implementation.json b/projects/thridweb-query/deployments/xai_sepolia_testnet/DropERC721Reader_Implementation.json new file mode 100644 index 000000000..d4bd227a7 --- /dev/null +++ b/projects/thridweb-query/deployments/xai_sepolia_testnet/DropERC721Reader_Implementation.json @@ -0,0 +1,427 @@ +{ + "address": "0x6ad72a018f57561575Dd14A654cD34E144140077", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xcb09447111e11b4131c626afc1289c519ec16ba04fd797732805c657d78cbc34", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1580590", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xb8c4d955f6972f48070918f4eeff7bf78e3222dae0aa18983f5134980a31e4f3", + "transactionHash": "0xcb09447111e11b4131c626afc1289c519ec16ba04fd797732805c657d78cbc34", + "logs": [], + "blockNumber": 485845, + "cumulativeGasUsed": "1580590", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "a04eb453fca4038b91c2157203390840", + "metadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dropERC721\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"}],\"name\":\"getAllData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeClaimConditionIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxClaimableSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyClaimed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantityLimitPerWallet\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"pricePerToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"struct IDropERC721.ClaimCondition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalMinted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedByUser\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToClaim\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"baseURICount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockTimeStamp\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"defaultRoyaltyInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"platformFeeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct DropERC721Reader.GlobalData\",\"name\":\"globalData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_native1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_native2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/drop-reader/DropERC721Reader.sol\":\"DropERC721Reader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\\n * initialization step. This is essential to configure modules that are added through upgrades and that require\\n * initialization.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC20 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/20\\n */\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address who) external view returns (uint256);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n function transferFrom(address from, address to, uint256 value) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x458d6ffd4d79153b9bfca794efa8169bbb942b47723153e6d2b0051e2cd9dcf1\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/DropERC721Reader.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.11;\\n\\n/// @author rarible\\n\\n// /$$$$$$$ /$$ /$$ /$$\\n// | $$__ $$ |__/| $$ | $$\\n// | $$ \\\\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\\n// | $$__ $$ /$$$$$$$| $$ \\\\__/| $$| $$ \\\\ $$| $$| $$$$$$$$\\n// | $$ \\\\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\\n// |__/ |__/ \\\\_______/|__/ |__/|_______/ |__/ \\\\_______/\\n\\n\\n// ========== Features ==========\\n\\nimport \\\"hardhat/console.sol\\\";\\nimport \\\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./IDropERC721.sol\\\";\\n\\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\\n\\n struct FeeData {\\n address recipient;\\n uint256 bps;\\n }\\n\\n struct GlobalData {\\n uint256 totalMinted;\\n uint256 claimedByUser;\\n uint256 totalSupply;\\n uint256 maxTotalSupply;\\n uint256 nextTokenIdToMint;\\n uint256 nextTokenIdToClaim;\\n string name;\\n string symbol;\\n string contractURI;\\n uint256 baseURICount;\\n uint256 userBalance;\\n uint256 blockTimeStamp;\\n FeeData defaultRoyaltyInfo;\\n FeeData platformFeeInfo;\\n }\\n\\n address public native1;\\n address public native2;\\n\\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\\n __Ownable_init();\\n native1 = _native1;\\n native2 = _native2;\\n // Transfer ownership to the initial owner provided\\n _transferOwnership(initialOwner);\\n }\\n\\n function getAllData(\\n address _dropERC721,\\n address _claimer\\n ) public view returns (\\n uint256 activeClaimConditionIndex,\\n IDropERC721.ClaimCondition[] memory conditions,\\n GlobalData memory globalData\\n ) {\\n IDropERC721 drop = IDropERC721(_dropERC721);\\n\\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\\n uint256 _claimedByUser = 0;\\n if(stopConditionIndex != 0) {\\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\\n activeClaimConditionIndex = _activeClaimConditionIndex;\\n } catch {\\n activeClaimConditionIndex = 0;\\n }\\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\\n \\n for (uint i = 0; i < stopConditionIndex; i++) {\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\\n conditions[i] = condition;\\n }\\n }\\n\\n DropERC721Reader.GlobalData memory _globalData;\\n if(stopConditionIndex > 0) {\\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\\n if(condition.currency == native1 || condition.currency == native2) {\\n _globalData.userBalance = _claimer.balance;\\n } else {\\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\\n }\\n\\n }\\n\\n _globalData.totalMinted = drop.totalMinted();\\n _globalData.claimedByUser = _claimedByUser;\\n _globalData.totalSupply = drop.totalSupply();\\n _globalData.maxTotalSupply = drop.maxTotalSupply();\\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\\n _globalData.name = drop.name();\\n _globalData.symbol = drop.symbol();\\n _globalData.contractURI = drop.contractURI();\\n _globalData.baseURICount = drop.getBaseURICount();\\n _globalData.blockTimeStamp = block.timestamp;\\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\\n _globalData.defaultRoyaltyInfo.bps = rBps;\\n\\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.bps = pBps;\\n return (activeClaimConditionIndex, conditions, _globalData);\\n }\\n}\",\"keccak256\":\"0x1e5633984124ff64630f990fa899abc71d721ba471fc0fa253fa5e06ba28d23d\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/IDropERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDropERC721 {\\n // This struct describes a single claim condition\\n struct ClaimCondition {\\n uint256 startTimestamp;\\n uint256 maxClaimableSupply;\\n uint256 supplyClaimed;\\n uint256 quantityLimitPerWallet;\\n bytes32 merkleRoot;\\n uint256 pricePerToken;\\n address currency;\\n string metadata;\\n }\\n\\n // Events\\n event ClaimConditionsUpdated(\\n ClaimCondition[] claimConditions,\\n bool resetEligibility\\n );\\n event TokensClaimed(\\n uint256 indexed claimConditionIndex,\\n address indexed claimer,\\n address indexed receiver,\\n uint256 startTokenId,\\n uint256 quantityClaimed\\n );\\n\\n // View functions for global data\\n function totalMinted() external view returns (uint256);\\n function totalSupply() external view returns (uint256);\\n function maxTotalSupply() external view returns (uint256);\\n function nextTokenIdToMint() external view returns (uint256);\\n function nextTokenIdToClaim() external view returns (uint256);\\n function name() external view returns (string memory);\\n function symbol() external view returns (string memory);\\n function contractURI() external view returns (string memory);\\n function getBaseURICount() external view returns (uint256);\\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\\n function getPlatformFeeInfo() external view returns (address, uint16);\\n\\n // Specific claim condition methods\\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\\n function getActiveClaimConditionId() external view returns (uint256);\\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x78c04c177793bc91b8c4f7efe8bd7c163ca4cbdb5a19f88fe71309a075f2f415\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506113ab806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220e916cec348cb357b23a050a7035d595748f758877db1f1ad0afe854aeda5797f64736f6c634300080c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220e916cec348cb357b23a050a7035d595748f758877db1f1ad0afe854aeda5797f64736f6c634300080c0033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 138, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 141, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 566, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 130, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 685, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native1", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 687, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native2", + "offset": 0, + "slot": "102", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/xai_sepolia_testnet/DropERC721Reader_Proxy.json b/projects/thridweb-query/deployments/xai_sepolia_testnet/DropERC721Reader_Proxy.json new file mode 100644 index 000000000..8c0d48a1e --- /dev/null +++ b/projects/thridweb-query/deployments/xai_sepolia_testnet/DropERC721Reader_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "1204957", + "logsBloom": "0x000000020000000000000010000000004000000000000020008000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000020800010000000000000040000000000000000000000200000000000000000008000000008000000000000000000000005000000000000000000000000000000000000000000000800000000000008000000000000000000100000000000004000000000000000000000000000000000000000000200000000000000002010c0000000000000400000000000000000020000000000000000000000000000000020000000000000000000000000000000000", + "blockHash": "0xd8e4ed65fae59ca9d53e1a1173fe3285375103d1fe35ef95f355451f9f80c97d", + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 485846, + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000006ad72a018f57561575dd14a654cd34e144140077" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xd8e4ed65fae59ca9d53e1a1173fe3285375103d1fe35ef95f355451f9f80c97d" + }, + { + "transactionIndex": 1, + "blockNumber": 485846, + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xd8e4ed65fae59ca9d53e1a1173fe3285375103d1fe35ef95f355451f9f80c97d" + }, + { + "transactionIndex": 1, + "blockNumber": 485846, + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xd8e4ed65fae59ca9d53e1a1173fe3285375103d1fe35ef95f355451f9f80c97d" + }, + { + "transactionIndex": 1, + "blockNumber": 485846, + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xd8e4ed65fae59ca9d53e1a1173fe3285375103d1fe35ef95f355451f9f80c97d" + }, + { + "transactionIndex": 1, + "blockNumber": 485846, + "transactionHash": "0x2bb85447f2bd923f77f579d5151fc4166d3bbbb5fa7fd916ba35f91af00d920c", + "address": "0x6b929daF7D637b78F5D6ecAC45eC47868636Ff90", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 4, + "blockHash": "0xd8e4ed65fae59ca9d53e1a1173fe3285375103d1fe35ef95f355451f9f80c97d" + } + ], + "blockNumber": 485846, + "cumulativeGasUsed": "1204957", + "status": 1, + "byzantium": true + }, + "args": [ + "0x6ad72a018f57561575Dd14A654cD34E144140077", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/xai_sepolia_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/thridweb-query/deployments/xai_sepolia_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/thridweb-query/deployments/xai_sepolia_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/xai_sepolia_testnet/solcInputs/a04eb453fca4038b91c2157203390840.json b/projects/thridweb-query/deployments/xai_sepolia_testnet/solcInputs/a04eb453fca4038b91c2157203390840.json new file mode 100644 index 000000000..e647fe8ed --- /dev/null +++ b/projects/thridweb-query/deployments/xai_sepolia_testnet/solcInputs/a04eb453fca4038b91c2157203390840.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n struct FeeData {\n address recipient;\n uint256 bps;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n _globalData.maxTotalSupply = drop.maxTotalSupply();\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n _globalData.baseURICount = drop.getBaseURICount();\n _globalData.blockTimeStamp = block.timestamp;\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.bps = rBps;\n\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.bps = pBps;\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeInfo() external view returns (address, uint16);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/fix-interface.sh b/projects/thridweb-query/fix-interface.sh new file mode 100755 index 000000000..93d0b7eee --- /dev/null +++ b/projects/thridweb-query/fix-interface.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# Define the search and replace strings with escaped double quotes +search_string=" as interface from" +replace_string=" as interfaces from" + +# Specify the root folder where you want to perform the replacement +root_folder="./typechain-types" + +# Use find to locate all text files in the specified folder and its subfolders +find "$root_folder" -type f -name "*.ts" -print0 | while IFS= read -r -d $'\0' file; do + # Use sed to perform the replacement, using the escaped search and replace strings + sed "s/$search_string/$replace_string/g" "$file" > "$file.tmp" + mv "$file.tmp" "$file" + echo "Replaced in $file" +done + +# Define the search and replace strings with escaped double quotes +search_string="export type { interface }" +replace_string="export type { interfaces }" + +# Specify the root folder where you want to perform the replacement +root_folder="./typechain-types" + +# Use find to locate all text files in the specified folder and its subfolders +find "$root_folder" -type f -name "*.ts" -print0 | while IFS= read -r -d $'\0' file; do + # Use sed to perform the replacement, using the escaped search and replace strings + sed "s/$search_string/$replace_string/g" "$file" > "$file.tmp" + mv "$file.tmp" "$file" + echo "Replaced in $file" +done + +echo "Replacement complete." diff --git a/projects/thridweb-query/hardhat.config.ts b/projects/thridweb-query/hardhat.config.ts new file mode 100644 index 000000000..baf47cde5 --- /dev/null +++ b/projects/thridweb-query/hardhat.config.ts @@ -0,0 +1,41 @@ +import { HardhatUserConfig } from "hardhat/config"; +import "@nomicfoundation/hardhat-toolbox"; +import "hardhat-deploy-immutable-proxy"; +import "@openzeppelin/hardhat-upgrades"; +import { config as dotenvConfig } from "dotenv"; +import { resolve } from "path"; + +const dotenvConfigPath: string = process.env.DOTENV_CONFIG_PATH || "./.env"; +dotenvConfig({ path: resolve(__dirname, dotenvConfigPath) }); + +import { + loadApiKeys, + loadCustomNetworks, + loadNetworkConfigs, + loadFactoryAddresses, +} from "@rarible/deploy-utils"; + + +const config: HardhatUserConfig = { + solidity: { + version: "0.8.12", // Specify the Solidity version + settings: { + optimizer: { + enabled: true, // Enable the optimizer + runs: 200 // The optimizer's number of runs + } + } + }, + namedAccounts: { + deployer: 0, + }, + networks: loadNetworkConfigs(), + etherscan: { + apiKey: loadApiKeys(), + customChains: loadCustomNetworks(), + }, + deterministicDeployment: loadFactoryAddresses() +}; + + +export default config; diff --git a/projects/thridweb-query/package.json b/projects/thridweb-query/package.json new file mode 100644 index 000000000..06a997c0d --- /dev/null +++ b/projects/thridweb-query/package.json @@ -0,0 +1,83 @@ +{ + "name": "@rarible/thirdweb-query", + "version": "0.8.6", + "description": "> TODO: description", + "author": "Vadim Fadeev ", + "homepage": "https://github.com/rarible/protocol-contracts#readme", + "license": "MIT", + "public": "true", + "directories": { + "contracts": "contracts" + }, + "files": [ + "contracts", + "readme.md", + "dist" + ], + "access": "public", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" + }, + "dependencies": { + "@thirdweb-dev/sdk": "^3.10.55" + }, + "devDependencies": { + "@anders-t/ethers-ledger": "^1.0.4", + "@daonomic/tests-common": "0.2.2", + "@nomicfoundation/hardhat-chai-matchers": "^1.0.0", + "@nomicfoundation/hardhat-foundry": "^1.0.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox": "^2.0.2", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@nomiclabs/hardhat-etherscan": "^3.1.7", + "@nomiclabs/hardhat-truffle5": "^2.0.7", + "@nomiclabs/hardhat-waffle": "^2.0.5", + "@nomiclabs/hardhat-web3": "^2.0.0", + "@nxqbao/eth-signer-trezor": "^1.0.1", + "@openzeppelin/contracts-upgradeable": "^3.4.0", + "@openzeppelin/hardhat-upgrades": "^1.22.1", + "@tenderly/hardhat-tenderly": "^1.6.1", + "@trezor/connect": "^9.1.4", + "@trezor/connect-plugin-ethereum": "^9.0.2", + "@typechain/ethers-v5": "^10.2.0", + "@typechain/hardhat": "^6.1.5", + "@types/chai": "^4.3.4", + "@types/hdkey": "^2.0.2", + "@types/mocha": "^10.0.1", + "@types/node": "^18.14.2", + "chai": "^4.3.7", + "ethereumjs-util": "6.1.0", + "ethers": "^5.7.2", + "hardhat": "^2.18.1", + "hardhat-abi-exporter": "^2.10.1", + "hardhat-deploy-immutable-proxy": "^0.13.2", + "hardhat-gas-reporter": "^1.0.9", + "hardhat-truffle5": "^1.0.1", + "hdkey": "^2.1.0", + "keccak256": "^1.0.6", + "solidity-coverage": "^0.8.2", + "ts-node": "^10.9.1", + "tslib": "^2.5.0", + "typechain": "^8.2.0", + "typescript": "^5.0.4", + "web3": "^1.8.2", + "@rarible/deploy-utils": "^0.8.7", + "@openzeppelin/contracts-4-7-3": "npm:@openzeppelin/contracts@4.7.3", + "@openzeppelin/contracts-upgradeable-4-7-3": "npm:@openzeppelin/contracts-upgradeable@4.7.3" + }, + "scripts": { + "build": "hardhat compile && ./fix-interface.sh && tsc -skipLibCheck", + "test": "hardhat test --network polygon", + "deploy-release": "npm publish --access public", + "deploy": "hardhat deploy --network polygon_mainnet", + "verify": "hardhat verify 0x5f1B0bD330fEfc7b56A4c39415d658521781bF3d --network polygon" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/rariblecom/protocol-contracts.git" + }, + "bugs": { + "url": "https://github.com/rarible/protocol-contracts" + } +} diff --git a/projects/thridweb-query/scripts/deploy.ts b/projects/thridweb-query/scripts/deploy.ts new file mode 100644 index 000000000..3aaeea4b9 --- /dev/null +++ b/projects/thridweb-query/scripts/deploy.ts @@ -0,0 +1,32 @@ +import * as ethers from "ethers"; + +const hre = require("hardhat"); +import { BaseContract, Contract, ContractFactory } from "@ethersproject/contracts"; +import {sleep} from "@nomicfoundation/hardhat-verify/internal/utilities"; +async function main() { + console.log("deploy reader") + + let erc721Reader: Contract = (await hre.ethers.deployContract( + "DropERC721Reader" + )) + console.log(erc721Reader.address) + erc721Reader = await erc721Reader.deployed() + console.log("deployment done", erc721Reader.address) + // verify + await erc721Reader.deployTransaction.wait(20) + await sleep(5000); + console.log("verify") + await hre.run("verify:verify", { + address: erc721Reader.address, + constructorArguments: [ + ], + }); + console.log("verify done") +} + +// We recommend this pattern to be able to use async/await everywhere +// and properly handle errors. +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); \ No newline at end of file diff --git a/projects/thridweb-query/test/DropErc721Reader.ts b/projects/thridweb-query/test/DropErc721Reader.ts new file mode 100644 index 000000000..ee74ee06f --- /dev/null +++ b/projects/thridweb-query/test/DropErc721Reader.ts @@ -0,0 +1,136 @@ +import { expect } from "chai"; +import { ethers } from "hardhat"; +import "@nomicfoundation/hardhat-toolbox"; +import { network } from "hardhat" + +import {DropERC721Reader, DropERC721Reader__factory, Initializable} from "../typechain-types"; +import {DropERC721, DropERC721__factory} from "../typechain-types"; +import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; +import {ClaimEligibility, ThirdwebSDK} from "@thirdweb-dev/sdk"; +import {ThirdwebStorage} from "@thirdweb-dev/storage"; +import {getClaimIneligibilityReasons} from "../utils/get-claim-illegebility"; +import { assert } from "console"; + +const { mine } = require("@nomicfoundation/hardhat-network-helpers"); + +describe("Test Erc721 Reader", function () { + let erc721Reader: DropERC721Reader; + let owner: SignerWithAddress; + let sdk: ThirdwebSDK; + let storage: ThirdwebStorage + + beforeEach(async function () { + [owner] = await ethers.getSigners(); + + erc721Reader = await DropERC721Reader__factory.connect("0x29433D84cCb7241097Df27E30f36fe7433B19232", owner) + console.log(erc721Reader.address) + sdk = ThirdwebSDK.fromSigner( + owner, // Your wallet's private key (only required for write operations) + "polygon", + { + clientId: process.env.THIRDWEB_CLIENT_ID, // Use client id if using on the client side, get it from dashboard settings + secretKey: process.env.THIRDWEB_SECRET, // Use secret key if using on the server, get it from dashboard settings + }, + ); + storage = new ThirdwebStorage({ + clientId: process.env.THIRDWEB_CLIENT_ID, // Use client id if using on the client side, get it from dashboard settings + secretKey: process.env.THIRDWEB_SECRET, // Use secret key if using on the server, get it from dashboard settings + }); + + }); + + describe("reader test", function () { + + // NoWallet = "No wallet connected.", + it("There is no claim condition set.", async function () { + const collectionAddress = "0x0Fe7B48225f2c7E24952747F5D644Ba9937a199E" + const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, undefined) + expect(claimReason).to.eq(ClaimEligibility.NoWallet) + }); + + it("There is no claim condition set.", async function () { + const collectionAddress = "0x0Fe7B48225f2c7E24952747F5D644Ba9937a199E" + const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, owner.address) + expect(claimReason).to.eq(ClaimEligibility.NoClaimConditionSet) + }); + + it("This address is not on the allowlist.", async function () { + const collectionAddress = "0xA00412829A4fFB09b5a85042941f8EC4B2F385cA" + const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, owner.address) + expect(claimReason).to.eq(ClaimEligibility.AddressNotAllowed) + }); + + + // WaitBeforeNextClaimTransaction = "Not enough time since last claim transaction. Please wait.", + // AlreadyClaimed = "You have already claimed the token.", + // WrongPriceOrCurrency = "Incorrect price or currency.", + // NoActiveClaimPhase = "There is no active claim phase at the moment. Please check back in later.", + // Unknown = "No claim conditions found." + + it("Claim phase has not started yet.", async function () { + const collectionAddress = "0xe114A562C3F994859fd9077A804A3E5084D62FeF" + const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, owner.address) + expect(claimReason).to.eq(ClaimEligibility.ClaimPhaseNotStarted, "Claim phase has not started yet.") + }); + + it("Cannot claim more than maximum allowed quantity.", async function () { + const collectionAddress = "0x19cFE5f37024B2f4E48Ee090897548A48C88237C" + const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 4, storage, sdk, owner.address) + expect(claimReason).to.eq(ClaimEligibility.OverMaxClaimablePerWallet, "Cannot claim more than maximum allowed quantity.") + }); + + // NotEnoughSupply = "There is not enough supply to claim.", + it("There is not enough supply to claim.", async function () { + const collectionAddress = "0x0645336C3C2A892926b18e5B85aA009805C377d8" + const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 4, storage, sdk, owner.address) + expect(claimReason).to.eq(ClaimEligibility.NotEnoughSupply, "There is not enough supply to claim.") + }); + + // OverMaxClaimablePerWallet = "Cannot claim more than maximum allowed quantity.", + it("Cannot claim more than maximum allowed quantity.", async function () { + const collectionAddress = "0x8e0d557d99B4AB7a066327a819c579D0CfdCe3E1" + const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 10, storage, sdk, owner.address) + expect(claimReason).to.eq(ClaimEligibility.OverMaxClaimablePerWallet, "Cannot claim more than maximum allowed quantity.") + }); + + // NotEnoughTokens = "There are not enough tokens in the wallet to pay for the claim.", + it("There are not enough tokens in the wallet to pay for the claim.", async function () { + const collectionAddress = "0x5fafecB2E623b84d5EE824e82d35a18DFe6B0f20" + const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, owner.address) + expect(claimReason).to.eq(ClaimEligibility.NotEnoughTokens, "There are not enough tokens in the wallet to pay for the claim.") + }); + + it("can claim public", async function () { + const collectionAddress = "0x8e0d557d99B4AB7a066327a819c579D0CfdCe3E1" + const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, owner.address) + expect(claimReason).to.eq(null, "Claim reason should be null for a public mint") + }); + + it("can claim private", async function () { + const collectionAddress = "0x19cFE5f37024B2f4E48Ee090897548A48C88237C" + const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, owner.address) + expect(claimReason).to.eq(null, "Claim illegebility reason should be null for a private mint") + }); + + }); + + // https://polygonscan.com/block/51404403 + // + describe("reader test", function () { + it("can query datas.", async function () { + const value = ethers.utils.parseEther("0.003") + const allData = await erc721Reader.getAllData("0x7180b24b73495968acd96f700f0860599a75dc9e", "0x02D0F78EFf8Eb9Fb49933776a06BA3dD4b0CfBe1") + console.log(JSON.stringify(allData)) + }); + }) +}); diff --git a/projects/thridweb-query/tsconfig.json b/projects/thridweb-query/tsconfig.json new file mode 100644 index 000000000..b160d815c --- /dev/null +++ b/projects/thridweb-query/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "CommonJS", + "pretty": true, + "sourceMap": true, + "declaration": true, + "strict": true, + "esModuleInterop": true, + "moduleResolution": "node", + "forceConsistentCasingInFileNames": true, + "outDir": "dist" + }, + "include": ["./typechain-types/**/*"], + "exclude": ["node_modules"] +} \ No newline at end of file diff --git a/projects/thridweb-query/utils/get-claim-illegebility.ts b/projects/thridweb-query/utils/get-claim-illegebility.ts new file mode 100644 index 000000000..3c7e4282e --- /dev/null +++ b/projects/thridweb-query/utils/get-claim-illegebility.ts @@ -0,0 +1,152 @@ +/** + * For any claim conditions that a particular wallet is violating, + * this function returns human readable information about the + * breaks in the condition that can be used to inform the user. + * + * @param quantity - The desired quantity that would be claimed. + * @param addressToCheck - The wallet address, defaults to the connected wallet. + * + */ +import { + ClaimEligibility, + includesErrorMessage, + SnapshotEntryWithProof, + ThirdwebSDK +} from "@thirdweb-dev/sdk"; +import {BigNumber, ethers, utils} from "ethers"; +import {DropERC721, DropERC721Reader} from "../typechain-types"; +import {IClaimCondition} from "../typechain-types/contracts/drop-reader/DropERC721Reader"; +import {ThirdwebStorage} from "@thirdweb-dev/storage"; +import {getClaimerProofs, prepareClaim} from "./utils"; + +export async function getClaimIneligibilityReasons( + erc721Reader: DropERC721Reader, + erc721: DropERC721, + quantity: number, + storage: ThirdwebStorage, + sdk: ThirdwebSDK, + addressToCheck?: string, +): Promise { + let activeConditionIndex: BigNumber; + + // If we have been unable to get a signer address, we can't check eligibility, so return a NoWallet error reason + if (!addressToCheck) { + return ClaimEligibility.NoWallet; + } + + try { + // Fetch eligibility data for the given address + const eligibilityData = await erc721Reader.getAllData(erc721.address, addressToCheck); + + // If no claim conditions are set, return NoClaimConditionSet + if (eligibilityData.conditions.length === 0) { + return ClaimEligibility.NoClaimConditionSet; + } + + activeConditionIndex = eligibilityData.activeClaimConditionIndex; + const claimCondition = eligibilityData.conditions[activeConditionIndex.toNumber()] as IClaimCondition.ClaimConditionStructOutput; + + // Check if the claim phase has not started yet + if (claimCondition.startTimestamp.gt(eligibilityData.globalData.blockTimeStamp)) { + return ClaimEligibility.ClaimPhaseNotStarted; + } + + // Check if there is not enough supply remaining + if (claimCondition.maxClaimableSupply.sub(claimCondition.supplyClaimed).lt(quantity)) { + return ClaimEligibility.NotEnoughSupply; + } + + // Check if minting more tokens would exceed the total supply + if (eligibilityData.globalData.totalMinted.add(quantity).gt(eligibilityData.globalData.nextTokenIdToMint)) { + return ClaimEligibility.NotEnoughSupply; + } + + // Check for merkle root inclusion + const merkleRootArray = utils.stripZeros(claimCondition.merkleRoot); + const hasAllowList = merkleRootArray.length > 0; + let allowListEntry: SnapshotEntryWithProof | null = null; + + if (hasAllowList) { + // Fetch claimer proofs for the address + allowListEntry = await getClaimerProofs( + addressToCheck, + claimCondition, + merkleRootArray, + eligibilityData.globalData.contractURI, + storage, + sdk, + ); + + if (!allowListEntry) { + return ClaimEligibility.AddressNotAllowed; + } + + // Check if the quantity claimed exceeds the maximum allowed per wallet + if (claimCondition.quantityLimitPerWallet.gt(0) && + BigNumber.from(allowListEntry.maxClaimable).lt(eligibilityData.globalData.claimedByUser.add(quantity))) { + return ClaimEligibility.OverMaxClaimablePerWallet; + } + + if (allowListEntry) { + try { + // Verify the claim + const claimVerification = prepareClaim(addressToCheck, quantity, claimCondition, allowListEntry); + + await erc721.verifyClaim( + activeConditionIndex, + addressToCheck, + quantity, + claimCondition.currency, + claimCondition.pricePerToken, + { + proof: claimVerification.proofs, + quantityLimitPerWallet: claimVerification.maxClaimable, + currency: claimVerification.currencyAddressInProof, + pricePerToken: claimVerification.priceInProof, + }, + ); + } catch (e: any) { + console.warn("Merkle proof verification failed:", "reason" in e ? e.reason : e); + const reason = (e as any).reason; + + switch (reason) { + case "!Qty": + return ClaimEligibility.OverMaxClaimablePerWallet; + case "!PriceOrCurrency": + return ClaimEligibility.WrongPriceOrCurrency; + case "!MaxSupply": + return ClaimEligibility.NotEnoughSupply; + case "cant claim yet": + return ClaimEligibility.ClaimPhaseNotStarted; + default: { + return ClaimEligibility.AddressNotAllowed; + } + } + } + } + } else { + // Public phase without an allow list + + // Check if the quantity claimed exceeds the maximum allowed per wallet + if (claimCondition.quantityLimitPerWallet.lt(quantity)) { + return ClaimEligibility.OverMaxClaimablePerWallet; + } + + // Check if the claim has a price per token and the user has enough tokens + if (claimCondition.pricePerToken.gt(0)) { + const totalPrice = claimCondition.pricePerToken.mul(quantity); + if (eligibilityData.globalData.userBalance.lt(totalPrice)) { + return ClaimEligibility.NotEnoughTokens; + } + } + } + } catch (err: any) { + if (includesErrorMessage(err, "!CONDITION") || includesErrorMessage(err, "no active mint condition")) { + return ClaimEligibility.NoClaimConditionSet; + } + console.warn("Failed to get active claim condition", err); + return ClaimEligibility.Unknown; + } + + return null; +} diff --git a/projects/thridweb-query/utils/get-drop-data.ts b/projects/thridweb-query/utils/get-drop-data.ts new file mode 100644 index 000000000..c017d4e19 --- /dev/null +++ b/projects/thridweb-query/utils/get-drop-data.ts @@ -0,0 +1,60 @@ +import {DropERC721, DropERC721Reader} from "../typechain-types"; +import {ThirdwebStorage} from "@thirdweb-dev/storage"; +import {ClaimVerification, SnapshotEntryWithProof, ThirdwebSDK} from "@thirdweb-dev/sdk"; +import {AddressZero} from "@ethersproject/constants"; +import {IClaimCondition} from "../typechain-types/contracts/drop-reader/DropERC721Reader"; +import {BigNumber, utils} from "ethers"; +import {getClaimerProofs, prepareClaim} from "./utils"; + +export interface DropData { + activeClaimConditionIndex: BigNumber; + conditions: IClaimCondition.ClaimConditionStructOutput[]; + globalData: DropERC721Reader.GlobalDataStructOutput; + snapshot: SnapshotEntryWithProof | null; + claimVerification: ClaimVerification | null; +} + +export async function getDropData( + erc721Reader: DropERC721Reader, + erc721: DropERC721, + quantity: number, + storage: ThirdwebStorage, + sdk: ThirdwebSDK, + addressToCheck?: string +): Promise { + const data = await erc721Reader.getAllData(erc721.address, addressToCheck || AddressZero) + if (data.conditions.length > 0) { + const claimCondition = data.conditions[data.activeClaimConditionIndex.toNumber()] as IClaimCondition.ClaimConditionStructOutput + // check for merkle root inclusion + const merkleRootArray = utils.stripZeros(claimCondition.merkleRoot); + const hasAllowList = merkleRootArray.length > 0; + let allowListEntry: SnapshotEntryWithProof | null = null; + let claimVerification: ClaimVerification | null = null; + if (hasAllowList) { + allowListEntry = await getClaimerProofs( + addressToCheck || AddressZero, + claimCondition, + merkleRootArray, + data.globalData.contractURI, + storage, + sdk); + if (allowListEntry) { + claimVerification = prepareClaim( + addressToCheck || AddressZero, + quantity, + claimCondition, + allowListEntry) + } + } + return { + ...data, + claimVerification: claimVerification, + snapshot: allowListEntry + } + } + return { + ...data, + claimVerification: null, + snapshot: null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/utils/utils.ts b/projects/thridweb-query/utils/utils.ts new file mode 100644 index 000000000..7e6812548 --- /dev/null +++ b/projects/thridweb-query/utils/utils.ts @@ -0,0 +1,98 @@ +import {IClaimCondition} from "../typechain-types/contracts/drop-reader/DropERC721Reader"; +import {ThirdwebStorage} from "@thirdweb-dev/storage"; +import {ClaimVerification, fetchSnapshotEntryForAddress, SnapshotEntryWithProof, ThirdwebSDK} from "@thirdweb-dev/sdk"; +import {BigNumber, ethers, utils} from "ethers"; + +export async function getClaimerProofs( + claimerAddress: string, + claimCondition: IClaimCondition.ClaimConditionStructOutput, + merkleRootArray: Uint8Array, + collectionUri: string, + storage: ThirdwebStorage, + sdk: ThirdwebSDK +): Promise { + const merkleRoot = claimCondition.merkleRoot; + if (merkleRootArray.length > 0) { + const metadata = await storage.downloadJSON(collectionUri); + return await fetchSnapshotEntryForAddress( + claimerAddress, + merkleRoot.toString(), + metadata.merkle, + sdk.getProvider(), + storage, + 2, + ); + } else { + return null; + } +} + +export function prepareClaim( + addressToClaim: string, + quantity: number, + activeClaimCondition: IClaimCondition.ClaimConditionStructOutput, + snapshotEntry: SnapshotEntryWithProof +): ClaimVerification { + let maxClaimable = BigNumber.from(0); + let proofs = [utils.hexZeroPad([0], 32)]; + let priceInProof: BigNumber | undefined = snapshotEntry.price ? BigNumber.from(snapshotEntry.price) : undefined; // the price to send to the contract in claim proofs + let currencyAddressInProof = snapshotEntry.currencyAddress; + try { + if (snapshotEntry) { + proofs = snapshotEntry.proof; + // override only if not default values (unlimited for quantity, zero addr for currency) + maxClaimable = + snapshotEntry.maxClaimable === "unlimited" + ? ethers.constants.MaxUint256 + : BigNumber.from(snapshotEntry.maxClaimable); + priceInProof = + snapshotEntry.price === undefined || + snapshotEntry.price === "unlimited" + ? ethers.constants.MaxUint256 + : ethers.utils.parseEther(snapshotEntry.price); + currencyAddressInProof = + snapshotEntry.currencyAddress || ethers.constants.AddressZero; + } + + } catch (e) { + // have to handle the valid error case that we *do* want to throw on + if ((e as Error)?.message === "No claim found for this address") { + throw e; + } + // other errors we wanna ignore and try to continue + console.warn( + "failed to check claim condition merkle root hash, continuing anyways", + e, + ); + } + + // the actual price to check allowance against + // if proof price is unlimited, then we use the price from the claim condition + // this mimics the contract behavior + if (!priceInProof) { + priceInProof = BigNumber.from(0) + } + const pricePerToken = + priceInProof.toString() !== ethers.constants.MaxUint256.toString() + ? priceInProof + : activeClaimCondition.pricePerToken; + // same for currency address + if (!currencyAddressInProof) { + currencyAddressInProof = ethers.constants.AddressZero + } + + const currencyAddress = + currencyAddressInProof !== ethers.constants.AddressZero + ? currencyAddressInProof + : activeClaimCondition.currency; + + return { + overrides: {blockTag: undefined, from: addressToClaim}, + proofs, + maxClaimable, + price: pricePerToken, + currencyAddress: currencyAddress, + priceInProof, + currencyAddressInProof, + }; +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index d64ccd6e2..a16f1c16e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -224,6 +224,16 @@ resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== +"@chainlink/contracts@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@chainlink/contracts/-/contracts-0.6.1.tgz#8842b57e755793cbdbcbc45277fb5d179c993e19" + integrity sha512-EuwijGexttw0UjfrW+HygwhQIrGAbqpf1ue28R55HhWMHBzphEH0PhWm8DQmFfj5OZNy8Io66N4L0nStkZ3QKQ== + dependencies: + "@eth-optimism/contracts" "^0.5.21" + "@openzeppelin/contracts" "~4.3.3" + "@openzeppelin/contracts-upgradeable" "^4.7.3" + "@openzeppelin/contracts-v0.7" "npm:@openzeppelin/contracts@v3.4.2" + "@chainsafe/as-sha256@^0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" @@ -362,6 +372,37 @@ resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== +"@eth-optimism/contracts@^0.5.21": + version "0.5.40" + resolved "https://registry.yarnpkg.com/@eth-optimism/contracts/-/contracts-0.5.40.tgz#d13a04a15ea947a69055e6fc74d87e215d4c936a" + integrity sha512-MrzV0nvsymfO/fursTB7m/KunkPsCndltVgfdHaT1Aj5Vi6R/doKIGGkOofHX+8B6VMZpuZosKCMQ5lQuqjt8w== + dependencies: + "@eth-optimism/core-utils" "0.12.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + +"@eth-optimism/core-utils@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@eth-optimism/core-utils/-/core-utils-0.12.0.tgz#6337e4599a34de23f8eceb20378de2a2de82b0ea" + integrity sha512-qW+7LZYCz7i8dRa7SRlUKIo1VBU8lvN0HeXCxJR+z+xtMzMQpPds20XJNCMclszxYQHkXY00fOT6GvFw9ZL6nw== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/contracts" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/providers" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bufio "^1.0.7" + chai "^4.3.4" + "@ethereumjs/common@2.5.0", "@ethereumjs/common@^2.5.0": version "2.5.0" resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" @@ -1007,7 +1048,7 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -1770,6 +1811,11 @@ resolved "https://registry.yarnpkg.com/@mobily/ts-belt/-/ts-belt-3.13.1.tgz#8f8ce2a2eca41d88c2ca70c84d0f47d0f7f5cd5f" integrity sha512-K5KqIhPI/EoCTbA6CGbrenM9s41OouyK8A03fGJJcla/zKucsgLbz8HNbeseoLarRPgyWJsUyCYqFhI7t3Ra9Q== +"@multiformats/base-x@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@multiformats/base-x/-/base-x-4.0.1.tgz#95ff0fa58711789d53aefb2590a8b7a4e715d121" + integrity sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw== + "@noble/curves@1.1.0", "@noble/curves@~1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d" @@ -2455,11 +2501,23 @@ dependencies: "@octokit/openapi-types" "^18.0.0" +"@openzeppelin/contracts-4-7-3@npm:@openzeppelin/contracts@4.7.3", "@openzeppelin/contracts@4.7.3": + name "@openzeppelin/contracts-4-7-3" + version "4.7.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.7.3.tgz#939534757a81f8d69cc854c7692805684ff3111e" + integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== + "@openzeppelin/contracts-sol08@npm:@openzeppelin/contracts@4.7.3": version "4.7.3" resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz#939534757a81f8d69cc854c7692805684ff3111e" integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== +"@openzeppelin/contracts-upgradeable-4-7-3@npm:@openzeppelin/contracts-upgradeable@4.7.3", "@openzeppelin/contracts-upgradeable@4.7.3": + name "@openzeppelin/contracts-upgradeable-4-7-3" + version "4.7.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz#f1d606e2827d409053f3e908ba4eb8adb1dd6995" + integrity sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A== + "@openzeppelin/contracts-upgradeable-sol08@npm:@openzeppelin/contracts-upgradeable@4.9.3": version "4.9.3" resolved "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.3.tgz#ff17a80fb945f5102571f8efecb5ce5915cc4811" @@ -2475,6 +2533,16 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-3.4.2.tgz#2c2a1b0fa748235a1f495b6489349776365c51b3" integrity sha512-mDlBS17ymb2wpaLcrqRYdnBAmP1EwqhOXMvqWk2c5Q1N1pm5TkiCtXM9Xzznh4bYsQBq0aIWEkFFE2+iLSN1Tw== +"@openzeppelin/contracts-upgradeable@^4.4.2", "@openzeppelin/contracts-upgradeable@^4.7.3": + version "4.9.6" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.6.tgz#38b21708a719da647de4bb0e4802ee235a0d24df" + integrity sha512-m4iHazOsOCv1DgM7eD7GupTJ+NFVujRZt1wzddDPSVGpWdKq1SKkla5htKG7+IS4d2XOCtzkUNwRZ7Vq5aEUMA== + +"@openzeppelin/contracts-v0.7@npm:@openzeppelin/contracts@v3.4.2": + version "3.4.2" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.2.tgz#d81f786fda2871d1eb8a8c5a73e455753ba53527" + integrity sha512-z0zMCjyhhp4y7XKAcDAi3Vgms4T2PstwBdahiO0+9NaGICQKjynK3wduSRplTgk4LXmoO1yfDGO5RbjKYxtuxA== + "@openzeppelin/contracts@3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.0.tgz#9a1669ad5f9fdfb6e273bb5a4fed10cb4cc35eb0" @@ -2485,6 +2553,11 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.0-solc-0.7.tgz#c4fbd1b761714745c4bce6fc97e8b44d4c29d5b9" integrity sha512-bJz1YgmeKRYVnYZedYSiy5/YmaYTxOhb76ftCseN1z2r4DK7PwCGvRCF2fRavTxAmGkIC/Q5zSy/Dr3OerPw0w== +"@openzeppelin/contracts@~4.3.3": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.3.3.tgz#ff6ee919fc2a1abaf72b22814bfb72ed129ec137" + integrity sha512-tDBopO1c98Yk7Cv/PZlHqrvtVjlgK5R4J6jxLwoO7qxK4xqOiZG+zSkIvGFpPZ0ikc3QOED3plgdqjgNTnBc7g== + "@openzeppelin/defender-base-client@^1.46.0": version "1.54.1" resolved "https://registry.yarnpkg.com/@openzeppelin/defender-base-client/-/defender-base-client-1.54.1.tgz#ed777ae56908d5a920e1f72ac735c63694e65b30" @@ -3034,6 +3107,72 @@ tenderly "^0.6.0" tslog "^4.3.1" +"@thirdweb-dev/chains@0.1.54": + version "0.1.54" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/chains/-/chains-0.1.54.tgz#90e5c372a1d9cd785c51715bfbeba276ca2a203f" + integrity sha512-iCuKgtN2KIdfgqbIbZYgB8ObYdOJW9iXW9b5u+WKA4zyGApw1MTOSX0W2aPnadGen1z4iQfAuUDBYQ6JVqDOjg== + +"@thirdweb-dev/contracts-js@1.3.13": + version "1.3.13" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/contracts-js/-/contracts-js-1.3.13.tgz#17b07f7ead147177aa979dd8f850030d4b31bc68" + integrity sha512-GKg3tqE7KZOApRBsK7F6YvP78TgcQR0p2u67tsdp8+bp7MYrJwLgGKTmsWMWo2lY+Tbu2y9Rj18Z2MZaoCuQTQ== + dependencies: + "@thirdweb-dev/contracts" "3.10.0" + +"@thirdweb-dev/contracts@3.10.0": + version "3.10.0" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/contracts/-/contracts-3.10.0.tgz#162d3b090ee576a18f530a3997f820600aab5f73" + integrity sha512-IGnFev/ooS4y/oh+wURuv0E32ztYDeZk7RdWO0si1YY5vDMSbVu/TBhlhmLPcfIZWs0IjCAoA6H/Zy5QV5mkhw== + dependencies: + "@chainlink/contracts" "^0.6.1" + "@openzeppelin/contracts" "4.7.3" + "@openzeppelin/contracts-upgradeable" "4.7.3" + "@thirdweb-dev/dynamic-contracts" "^1.1.2" + erc721a-upgradeable "^3.3.0" + +"@thirdweb-dev/dynamic-contracts@^1.1.2": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/dynamic-contracts/-/dynamic-contracts-1.2.5.tgz#f9735c0d46198e7bf2f98c277f0a9a79c54da1e8" + integrity sha512-YVsz+jUWbwj+6aF2eTZGMfyw47a1HRmgNl4LQ3gW9gwYL5y5+OX/yOzv6aV5ibvoqCk/k10aIVK2eFrcpMubQA== + +"@thirdweb-dev/generated-abis@0.0.1": + version "0.0.1" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/generated-abis/-/generated-abis-0.0.1.tgz#0d788d6aff0ac08f11e9eeb9ae4c8321845272a8" + integrity sha512-vO9/3lSLO8smyyH1QVeYravSTzFwV1nf1C/Im1NBDPdH8//YvcbhtETGGiNfHWpyCvSi0vRYwvf+/7FKdwpDGQ== + +"@thirdweb-dev/sdk@^3.10.55": + version "3.10.67" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/sdk/-/sdk-3.10.67.tgz#58f43b620e6a297aa164c1ce8de9e0305d4432d1" + integrity sha512-FTnH0W2qKI0ra1F4SwxJzFY45+/QNHN6YBL3Ki9xFgWh6FUc5N8cX4aqcQEF+CTgY6hmZFmwNrdmHx4D/fHWTQ== + dependencies: + "@thirdweb-dev/chains" "0.1.54" + "@thirdweb-dev/contracts-js" "1.3.13" + "@thirdweb-dev/generated-abis" "0.0.1" + "@thirdweb-dev/storage" "1.2.11" + abitype "^0.2.5" + bn.js "^5.2.1" + bs58 "^5.0.0" + buffer "^6.0.3" + cross-fetch "^3.1.8" + eventemitter3 "^5.0.1" + fast-deep-equal "^3.1.3" + merkletreejs "^0.2.24" + tiny-invariant "^1.2.0" + tweetnacl "^1.0.3" + uuid "^9.0.0" + yaml "^2.3.1" + zod "^3.20.2" + +"@thirdweb-dev/storage@1.2.11": + version "1.2.11" + resolved "https://registry.yarnpkg.com/@thirdweb-dev/storage/-/storage-1.2.11.tgz#dba2c0725ee0e16bb5b5609d3667bec1fbd2924e" + integrity sha512-V9S7teVZ2XokbCCrf1AmWUDGECkRxjS0sN4pi11jVjO/hcp9q5arMX2FkXLvdAjpFoOreVqh2uOUiRmFcSj3HQ== + dependencies: + cid-tool "^3.0.0" + cross-fetch "^3.1.8" + form-data "^4.0.0" + uuid "^9.0.0" + "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" @@ -4168,6 +4307,11 @@ abi-to-sol@^0.7.0: prettier "^2.7.1" prettier-plugin-solidity "^1.0.0-dev.23" +abitype@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.2.5.tgz#e571ef2ed99db1cae551fffde5bcbcee4e446177" + integrity sha512-t1iiokWYpkrziu4WL2Gb6YdGvaP9ZKs7WnA39TI8TsW2E99GVRgDPW/xOKhzoCdyxOYt550CNYEFluCwGaFHaA== + abortcontroller-polyfill@^1.7.3, abortcontroller-polyfill@^1.7.5: version "1.7.5" resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" @@ -5314,6 +5458,11 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== +buffer-reverse@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60" + integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg== + buffer-to-arraybuffer@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" @@ -5356,6 +5505,11 @@ bufferutil@^4.0.1: dependencies: node-gyp-build "^4.2.0" +bufio@^1.0.7: + version "1.2.1" + resolved "https://registry.yarnpkg.com/bufio/-/bufio-1.2.1.tgz#8d4ab3ddfcd5faa90f996f922f9397d41cbaf2de" + integrity sha512-9oR3zNdupcg/Ge2sSHQF3GX+kmvL/fTPvD0nd5AGLq8SjUYnTz+SlFjK/GXidndbZtIj+pVKXiWeR9w6e9wKCA== + buildcheck@~0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238" @@ -5623,7 +5777,7 @@ chai-as-promised@^7.1.1: dependencies: check-error "^1.0.2" -chai@^4.2.0, chai@^4.3.6, chai@^4.3.7: +chai@^4.2.0, chai@^4.3.4, chai@^4.3.6, chai@^4.3.7: version "4.4.1" resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== @@ -5820,6 +5974,19 @@ ci-info@^3.2.0, ci-info@^3.6.1: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== +cid-tool@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cid-tool/-/cid-tool-3.0.0.tgz#557540c5896d204503ef0ece848b88bbb350b90a" + integrity sha512-rgpV/LzuxUsGCJvUHe9+OuOAENVCiTn+mgGT8Nee1qDLS3xFGBUvZQdsY9MEpUi0YOFy6oz1pybHErcvE4SlGw== + dependencies: + cids "^1.0.0" + explain-error "^1.0.4" + multibase "^4.0.2" + multihashes "^4.0.2" + split2 "^3.1.1" + uint8arrays "^2.1.3" + yargs "^16.2.0" + cids@^0.7.1: version "0.7.5" resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" @@ -5831,6 +5998,16 @@ cids@^0.7.1: multicodec "^1.0.0" multihashes "~0.4.15" +cids@^1.0.0: + version "1.1.9" + resolved "https://registry.yarnpkg.com/cids/-/cids-1.1.9.tgz#402c26db5c07059377bcd6fb82f2a24e7f2f4a4f" + integrity sha512-l11hWRfugIcbGuTZwAM5PwpjPPjyb6UZOGwlHSnOBV5o07XhQ4gNpBN67FbODvpjyHtd+0Xs6KNvUcGBiDRsdg== + dependencies: + multibase "^4.0.1" + multicodec "^3.0.1" + multihashes "^4.0.1" + uint8arrays "^3.0.0" + cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" @@ -6516,6 +6693,13 @@ cross-fetch@^3.1.4: dependencies: node-fetch "2.6.1" +cross-fetch@^3.1.8: + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + dependencies: + node-fetch "^2.6.12" + cross-fetch@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" @@ -6592,6 +6776,11 @@ crypto-js@4.2.0: resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.2.0.tgz#4d931639ecdfd12ff80e8186dba6af2c2e856631" integrity sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q== +crypto-js@^3.1.9-1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" + integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== + css-select@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.2.tgz#8b52b6714ed3a80d8221ec971c543f3b12653286" @@ -7260,6 +7449,13 @@ envinfo@7.8.1: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== +erc721a-upgradeable@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/erc721a-upgradeable/-/erc721a-upgradeable-3.3.0.tgz#c7b481668694756120868261fe98ab3a245a06b4" + integrity sha512-ILE0SjKuvhx+PABG0A/41QUp0MFiYmzrgo71htQ0Ov6JfDOmgUzGxDW8gZuYfKrdlYjNwSAqMpUFWBbyW3sWBA== + dependencies: + "@openzeppelin/contracts-upgradeable" "^4.4.2" + err-code@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" @@ -8119,6 +8315,11 @@ eventemitter3@^4.0.4, eventemitter3@^4.0.7: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-5.0.1.tgz#53f5ffd0a492ac800721bb42c66b841de96423c4" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + events@^3.0.0, events@^3.2.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" @@ -8203,6 +8404,11 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" +explain-error@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/explain-error/-/explain-error-1.0.4.tgz#a793d3ac0cad4c6ab571e9968fbbab6cb2532929" + integrity sha512-/wSgNMxFusiYRy1rd19LT2SQlIXDppHpumpWo06wxjflD1OYxDLbl6rMVw+U3bxD5Nuhex4TKqv9Aem4D0lVzQ== + exponential-backoff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" @@ -8377,7 +8583,7 @@ fast-check@^2.12.1: dependencies: pure-rand "^5.0.0" -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -11683,6 +11889,17 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: rlp "^2.0.0" semaphore ">=1.0.1" +merkletreejs@^0.2.24: + version "0.2.32" + resolved "https://registry.yarnpkg.com/merkletreejs/-/merkletreejs-0.2.32.tgz#cf1c0760e2904e4a1cc269108d6009459fd06223" + integrity sha512-TostQBiwYRIwSE5++jGmacu3ODcKAgqb0Y/pnIohXS7sWxh1gCkSptbmF1a43faehRDpcHf7J/kv0Ml2D/zblQ== + dependencies: + bignumber.js "^9.0.1" + buffer-reverse "^1.0.1" + crypto-js "^3.1.9-1" + treeify "^1.1.0" + web3-utils "^1.3.4" + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -12099,6 +12316,13 @@ multibase@^0.7.0: base-x "^3.0.8" buffer "^5.5.0" +multibase@^4.0.1, multibase@^4.0.2: + version "4.0.6" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-4.0.6.tgz#6e624341483d6123ca1ede956208cb821b440559" + integrity sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ== + dependencies: + "@multiformats/base-x" "^4.0.1" + multibase@~0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" @@ -12122,6 +12346,19 @@ multicodec@^1.0.0: buffer "^5.6.0" varint "^5.0.0" +multicodec@^3.0.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-3.2.1.tgz#82de3254a0fb163a107c1aab324f2a91ef51efb2" + integrity sha512-+expTPftro8VAW8kfvcuNNNBgb9gPeNYV9dn+z1kJRWF2vih+/S79f2RVeIwmrJBUJ6NT9IUPWnZDQvegEh5pw== + dependencies: + uint8arrays "^3.0.0" + varint "^6.0.0" + +multiformats@^9.4.2: + version "9.9.0" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" + integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== + multihashes@^0.4.15, multihashes@~0.4.15: version "0.4.21" resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" @@ -12131,6 +12368,15 @@ multihashes@^0.4.15, multihashes@~0.4.15: multibase "^0.7.0" varint "^5.0.0" +multihashes@^4.0.1, multihashes@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-4.0.3.tgz#426610539cd2551edbf533adeac4c06b3b90fb05" + integrity sha512-0AhMH7Iu95XjDLxIeuCOOE4t9+vQZsACyKZ9Fxw2pcsRmlX4iCn1mby0hS0bb+nQOVpdQYWPpnyusw4da5RPhA== + dependencies: + multibase "^4.0.1" + uint8arrays "^3.0.0" + varint "^5.0.2" + multimatch@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6" @@ -15266,7 +15512,7 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split2@^3.2.2: +split2@^3.1.1, split2@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== @@ -15902,6 +16148,11 @@ timers-ext@^0.1.5, timers-ext@^0.1.7: es5-ext "~0.10.46" next-tick "1" +tiny-invariant@^1.2.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + tiny-secp256k1@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/tiny-secp256k1/-/tiny-secp256k1-1.1.6.tgz#7e224d2bee8ab8283f284e40e6b4acb74ffe047c" @@ -16022,6 +16273,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= +treeify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/treeify/-/treeify-1.1.0.tgz#4e31c6a463accd0943879f30667c4fdaff411bb8" + integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A== + trezor-connect@8.2.4-extended: version "8.2.4-extended" resolved "https://registry.yarnpkg.com/trezor-connect/-/trezor-connect-8.2.4-extended.tgz#ce52787a13361e988305f925ca9fea3780ce9a42" @@ -16392,6 +16648,20 @@ uglifyjs-webpack-plugin@^0.4.6: uglify-js "^2.8.29" webpack-sources "^1.0.1" +uint8arrays@^2.1.3: + version "2.1.10" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-2.1.10.tgz#34d023c843a327c676e48576295ca373c56e286a" + integrity sha512-Q9/hhJa2836nQfEJSZTmr+pg9+cDJS9XEAp7N2Vg5MzL3bK/mkMVfjscRGYruP9jNda6MAdf4QD/y78gSzkp6A== + dependencies: + multiformats "^9.4.2" + +uint8arrays@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" + integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== + dependencies: + multiformats "^9.4.2" + ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" @@ -16696,11 +16966,16 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -varint@^5.0.0: +varint@^5.0.0, varint@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== +varint@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/varint/-/varint-6.0.0.tgz#9881eb0ce8feaea6512439d19ddf84bf551661d0" + integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== + varuint-bitcoin@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz#e76c138249d06138b480d4c5b40ef53693e24e92" @@ -17442,6 +17717,20 @@ web3-utils@^1.0.0-beta.31: randombytes "^2.1.0" utf8 "3.0.0" +web3-utils@^1.3.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + web3@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.0.tgz#2fde0009f59aa756c93e07ea2a7f3ab971091274" @@ -17893,6 +18182,11 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yaml@^2.3.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.2.tgz#7a2b30f2243a5fc299e1f14ca58d475ed4bc5362" + integrity sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA== + yargs-parser@20.2.4: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" @@ -18091,3 +18385,8 @@ zksync-web3@^0.17.1: integrity sha512-jMV4gfAQyehkIbNs81i4uvccHLe+XBu/tNPFb0Rm38pXccWY5VXzVE6XWS0dBiHlMfjdfUGn/sxwzJbWZDGYGQ== dependencies: ethers "~5.7.0" + +zod@^3.20.2: + version "3.23.6" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.6.tgz#c08a977e2255dab1fdba933651584a05fcbf19e1" + integrity sha512-RTHJlZhsRbuA8Hmp/iNL7jnfc4nZishjsanDAfEY1QpDQZCahUp3xDzl+zfweE9BklxMUcgBgS1b7Lvie/ZVwA== From fc795d2a0a4930ad6a6d7cea8e9951d9df2365e7 Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Mon, 6 May 2024 11:56:30 +0100 Subject: [PATCH 11/25] Feature/pt 5315 3dweb query (#286) * feat: add proxy 3dweb reader + modify deploy to support initial owner for admin proxy --- .../hardhat-deploy/networks/camp_sepolia.md | 30 +++++++++---------- .../hardhat-deploy/networks/lisk_sepolia.md | 30 +++++++++---------- projects/hardhat-deploy/networks/sepolia.md | 30 +++++++++---------- projects/thridweb-query/.gitignore | 13 ++++++++ 4 files changed, 58 insertions(+), 45 deletions(-) create mode 100644 projects/thridweb-query/.gitignore diff --git a/projects/hardhat-deploy/networks/camp_sepolia.md b/projects/hardhat-deploy/networks/camp_sepolia.md index 5ea43fabd..e78e9d55b 100644 --- a/projects/hardhat-deploy/networks/camp_sepolia.md +++ b/projects/hardhat-deploy/networks/camp_sepolia.md @@ -1,17 +1,17 @@ Name | Address | Url --- | --- | --- - AssetMatcherCollection | 0xc4F5FCD96e3b37A31f871F0968206F47294a4471 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xc4F5FCD96e3b37A31f871F0968206F47294a4471 - DefaultProxyAdmin | 0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a - ERC1155LazyMintTransferProxy | 0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 - ERC1155RaribleBeaconMeta | 0x948669617b558cd3bb7F3dd94720346b3E9cD047 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x948669617b558cd3bb7F3dd94720346b3E9cD047 - ERC1155RaribleFactoryC2 | 0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb - ERC1155RaribleMeta | 0x150458a42dF2664dc4A11d2780d23F315Ca5E00A | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x150458a42dF2664dc4A11d2780d23F315Ca5E00A - ERC20TransferProxy | 0xA3d49c7e2c845b792e422696FE0D9ef17a509731 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xA3d49c7e2c845b792e422696FE0D9ef17a509731 - ERC721LazyMintTransferProxy | 0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 - ERC721RaribleFactoryC2 | 0xE5D43624116007CD79D17fB7136672A49fd33CE0 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xE5D43624116007CD79D17fB7136672A49fd33CE0 - ERC721RaribleMeta | 0x6448B5A51c6D41480B34248C516957D59f754598 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x6448B5A51c6D41480B34248C516957D59f754598 - ERC721RaribleMinimalBeaconMeta | 0x7Eade39b026f271910557Cf4676c35552BAEf346 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x7Eade39b026f271910557Cf4676c35552BAEf346 - ExchangeMetaV2 | 0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B - RaribleExchangeWrapper | 0x689bFf422807f39c9A927bb78c34FE8D63529e28 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x689bFf422807f39c9A927bb78c34FE8D63529e28 - RoyaltiesRegistry | 0xCF64c7115508f23069d5663611e10F5C5CF45776 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xCF64c7115508f23069d5663611e10F5C5CF45776 - TransferProxy | 0xA5707153b8AF346e17AF765235B054136eCf99EC | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xA5707153b8AF346e17AF765235B054136eCf99EC + AssetMatcherCollection | 0xc0BD7Ae193c1BD00Fa33B0E5fDCF60FF2d66EefC | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xc0BD7Ae193c1BD00Fa33B0E5fDCF60FF2d66EefC + DefaultProxyAdmin | 0x393e4f1832e9F5F8C46a031275135640E61e9A9a | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x393e4f1832e9F5F8C46a031275135640E61e9A9a + ERC1155LazyMintTransferProxy | 0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca + ERC1155RaribleBeaconMeta | 0xBA73297EBe019158422c726A051D3647E5E4EA7B | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xBA73297EBe019158422c726A051D3647E5E4EA7B + ERC1155RaribleFactoryC2 | 0x573b8748B7D3204bF60836217f63b1332E123BB1 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x573b8748B7D3204bF60836217f63b1332E123BB1 + ERC1155RaribleMeta | 0x1693e5232825928AfA77d47584EdA69aB9048B68 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x1693e5232825928AfA77d47584EdA69aB9048B68 + ERC20TransferProxy | 0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4 + ERC721LazyMintTransferProxy | 0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30 + ERC721RaribleFactoryC2 | 0xae891BdB73E5B2C454d6Fe03824A86d0d440FC0e | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xae891BdB73E5B2C454d6Fe03824A86d0d440FC0e + ERC721RaribleMeta | 0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed + ERC721RaribleMinimalBeaconMeta | 0xa516386d84abf578E90E30822ee47d29c9aE52Dd | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xa516386d84abf578E90E30822ee47d29c9aE52Dd + ExchangeMetaV2 | 0x8E705d722049cEEFd3606b15070CA8A72DC69eA4 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x8E705d722049cEEFd3606b15070CA8A72DC69eA4 + RaribleExchangeWrapper | 0x45d6C2567a7F32c70e57D26E4ee89045A2F472Dc | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x45d6C2567a7F32c70e57D26E4ee89045A2F472Dc + RoyaltiesRegistry | 0x097540c06647D14C5b63E678DC6e290e0f2150cc | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0x097540c06647D14C5b63E678DC6e290e0f2150cc + TransferProxy | 0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308 | https://explorerl2new-camp-network-4xje7wy105.t.conduit.xyzaddress/0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308 diff --git a/projects/hardhat-deploy/networks/lisk_sepolia.md b/projects/hardhat-deploy/networks/lisk_sepolia.md index d08a69c08..fc82dd5f6 100644 --- a/projects/hardhat-deploy/networks/lisk_sepolia.md +++ b/projects/hardhat-deploy/networks/lisk_sepolia.md @@ -1,17 +1,17 @@ Name | Address | Url --- | --- | --- - AssetMatcherCollection | 0xc4F5FCD96e3b37A31f871F0968206F47294a4471 | https://sepolia-blockscout.lisk.comaddress/0xc4F5FCD96e3b37A31f871F0968206F47294a4471 - DefaultProxyAdmin | 0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a | https://sepolia-blockscout.lisk.comaddress/0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a - ERC1155LazyMintTransferProxy | 0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 | https://sepolia-blockscout.lisk.comaddress/0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 - ERC1155RaribleBeaconMeta | 0x948669617b558cd3bb7F3dd94720346b3E9cD047 | https://sepolia-blockscout.lisk.comaddress/0x948669617b558cd3bb7F3dd94720346b3E9cD047 - ERC1155RaribleFactoryC2 | 0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb | https://sepolia-blockscout.lisk.comaddress/0x6E6d179b1DCEaad5483edaCF907bf619FB35C7Eb - ERC1155RaribleMeta | 0x150458a42dF2664dc4A11d2780d23F315Ca5E00A | https://sepolia-blockscout.lisk.comaddress/0x150458a42dF2664dc4A11d2780d23F315Ca5E00A - ERC20TransferProxy | 0xA3d49c7e2c845b792e422696FE0D9ef17a509731 | https://sepolia-blockscout.lisk.comaddress/0xA3d49c7e2c845b792e422696FE0D9ef17a509731 - ERC721LazyMintTransferProxy | 0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 | https://sepolia-blockscout.lisk.comaddress/0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 - ERC721RaribleFactoryC2 | 0xE5D43624116007CD79D17fB7136672A49fd33CE0 | https://sepolia-blockscout.lisk.comaddress/0xE5D43624116007CD79D17fB7136672A49fd33CE0 - ERC721RaribleMeta | 0x6448B5A51c6D41480B34248C516957D59f754598 | https://sepolia-blockscout.lisk.comaddress/0x6448B5A51c6D41480B34248C516957D59f754598 - ERC721RaribleMinimalBeaconMeta | 0x7Eade39b026f271910557Cf4676c35552BAEf346 | https://sepolia-blockscout.lisk.comaddress/0x7Eade39b026f271910557Cf4676c35552BAEf346 - ExchangeMetaV2 | 0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B | https://sepolia-blockscout.lisk.comaddress/0x5b96ddd3245aaC0cd97cFf6717985F3b9B01df3B - RaribleExchangeWrapper | 0x689bFf422807f39c9A927bb78c34FE8D63529e28 | https://sepolia-blockscout.lisk.comaddress/0x689bFf422807f39c9A927bb78c34FE8D63529e28 - RoyaltiesRegistry | 0xCF64c7115508f23069d5663611e10F5C5CF45776 | https://sepolia-blockscout.lisk.comaddress/0xCF64c7115508f23069d5663611e10F5C5CF45776 - TransferProxy | 0xA5707153b8AF346e17AF765235B054136eCf99EC | https://sepolia-blockscout.lisk.comaddress/0xA5707153b8AF346e17AF765235B054136eCf99EC + AssetMatcherCollection | 0xc0BD7Ae193c1BD00Fa33B0E5fDCF60FF2d66EefC | https://sepolia-blockscout.lisk.comaddress/0xc0BD7Ae193c1BD00Fa33B0E5fDCF60FF2d66EefC + DefaultProxyAdmin | 0x393e4f1832e9F5F8C46a031275135640E61e9A9a | https://sepolia-blockscout.lisk.comaddress/0x393e4f1832e9F5F8C46a031275135640E61e9A9a + ERC1155LazyMintTransferProxy | 0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca | https://sepolia-blockscout.lisk.comaddress/0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca + ERC1155RaribleBeaconMeta | 0xBA73297EBe019158422c726A051D3647E5E4EA7B | https://sepolia-blockscout.lisk.comaddress/0xBA73297EBe019158422c726A051D3647E5E4EA7B + ERC1155RaribleFactoryC2 | 0x573b8748B7D3204bF60836217f63b1332E123BB1 | https://sepolia-blockscout.lisk.comaddress/0x573b8748B7D3204bF60836217f63b1332E123BB1 + ERC1155RaribleMeta | 0x1693e5232825928AfA77d47584EdA69aB9048B68 | https://sepolia-blockscout.lisk.comaddress/0x1693e5232825928AfA77d47584EdA69aB9048B68 + ERC20TransferProxy | 0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4 | https://sepolia-blockscout.lisk.comaddress/0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4 + ERC721LazyMintTransferProxy | 0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30 | https://sepolia-blockscout.lisk.comaddress/0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30 + ERC721RaribleFactoryC2 | 0xae891BdB73E5B2C454d6Fe03824A86d0d440FC0e | https://sepolia-blockscout.lisk.comaddress/0xae891BdB73E5B2C454d6Fe03824A86d0d440FC0e + ERC721RaribleMeta | 0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed | https://sepolia-blockscout.lisk.comaddress/0x10C42e56B575b7cd7bdBbc2c62020cafad4a85Ed + ERC721RaribleMinimalBeaconMeta | 0xa516386d84abf578E90E30822ee47d29c9aE52Dd | https://sepolia-blockscout.lisk.comaddress/0xa516386d84abf578E90E30822ee47d29c9aE52Dd + ExchangeMetaV2 | 0x8E705d722049cEEFd3606b15070CA8A72DC69eA4 | https://sepolia-blockscout.lisk.comaddress/0x8E705d722049cEEFd3606b15070CA8A72DC69eA4 + RaribleExchangeWrapper | 0x45d6C2567a7F32c70e57D26E4ee89045A2F472Dc | https://sepolia-blockscout.lisk.comaddress/0x45d6C2567a7F32c70e57D26E4ee89045A2F472Dc + RoyaltiesRegistry | 0x097540c06647D14C5b63E678DC6e290e0f2150cc | https://sepolia-blockscout.lisk.comaddress/0x097540c06647D14C5b63E678DC6e290e0f2150cc + TransferProxy | 0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308 | https://sepolia-blockscout.lisk.comaddress/0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308 diff --git a/projects/hardhat-deploy/networks/sepolia.md b/projects/hardhat-deploy/networks/sepolia.md index 18f371df0..29486f4fb 100644 --- a/projects/hardhat-deploy/networks/sepolia.md +++ b/projects/hardhat-deploy/networks/sepolia.md @@ -1,17 +1,17 @@ Name | Address | Url --- | --- | --- - AssetMatcherCollection | 0xc4F5FCD96e3b37A31f871F0968206F47294a4471 | https://sepolia.etherscan.io/address/0xc4F5FCD96e3b37A31f871F0968206F47294a4471 - DefaultProxyAdmin | 0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a | https://sepolia.etherscan.io/address/0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a - ERC1155LazyMintTransferProxy | 0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 | https://sepolia.etherscan.io/address/0xd60D801E1E76a44f8A2E728F6d3a760626aa2cf2 - ERC1155Rarible | 0x08c50fcCc017A27C71b3e2988dff4604a8F9354b | https://sepolia.etherscan.io/address/0x08c50fcCc017A27C71b3e2988dff4604a8F9354b - ERC1155RaribleBeacon | 0x792b701837681de8f2B61a27507c9E0a3f4d4b1D | https://sepolia.etherscan.io/address/0x792b701837681de8f2B61a27507c9E0a3f4d4b1D - ERC1155RaribleFactoryC2 | 0xB3CBeC4ADbc46a731E559FB7EbdaD1634B5851fB | https://sepolia.etherscan.io/address/0xB3CBeC4ADbc46a731E559FB7EbdaD1634B5851fB - ERC20TransferProxy | 0xA3d49c7e2c845b792e422696FE0D9ef17a509731 | https://sepolia.etherscan.io/address/0xA3d49c7e2c845b792e422696FE0D9ef17a509731 - ERC721LazyMintTransferProxy | 0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 | https://sepolia.etherscan.io/address/0x74eBEEB6FBCf94f748f5999E14aCf3642A38e813 - ERC721RaribleFactoryC2 | 0x8FC558fa7667ee5729306A51c27DEd6732D41B9c | https://sepolia.etherscan.io/address/0x8FC558fa7667ee5729306A51c27DEd6732D41B9c - ERC721RaribleMinimal | 0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8 | https://sepolia.etherscan.io/address/0xcC9507f07bC7CB7Bbf22C1b2F439d3cacA767Aa8 - ERC721RaribleMinimalBeacon | 0xF4873a12132C87F96535059402b9EcE709a06c72 | https://sepolia.etherscan.io/address/0xF4873a12132C87F96535059402b9EcE709a06c72 - ExchangeV2 | 0xce219Ab34aFB73892E79cCE7b4fD602778101E07 | https://sepolia.etherscan.io/address/0xce219Ab34aFB73892E79cCE7b4fD602778101E07 - RaribleExchangeWrapper | 0x38E6f5015267bAEfb739253fbB4D7c173CCD1891 | https://sepolia.etherscan.io/address/0x38E6f5015267bAEfb739253fbB4D7c173CCD1891 - RoyaltiesRegistry | 0xCF64c7115508f23069d5663611e10F5C5CF45776 | https://sepolia.etherscan.io/address/0xCF64c7115508f23069d5663611e10F5C5CF45776 - TransferProxy | 0xA5707153b8AF346e17AF765235B054136eCf99EC | https://sepolia.etherscan.io/address/0xA5707153b8AF346e17AF765235B054136eCf99EC + AssetMatcherCollection | 0xc0BD7Ae193c1BD00Fa33B0E5fDCF60FF2d66EefC | https://sepolia.etherscan.io/address/0xc0BD7Ae193c1BD00Fa33B0E5fDCF60FF2d66EefC + DefaultProxyAdmin | 0x393e4f1832e9F5F8C46a031275135640E61e9A9a | https://sepolia.etherscan.io/address/0x393e4f1832e9F5F8C46a031275135640E61e9A9a + ERC1155LazyMintTransferProxy | 0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca | https://sepolia.etherscan.io/address/0xEd9Efd9f7E9E5449f57c50001E94A985E57986ca + ERC1155Rarible | 0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66 | https://sepolia.etherscan.io/address/0xdB6fe0b5AA2d531Bb3e380d48B9f263cdcCeAC66 + ERC1155RaribleBeacon | 0xB21Bc35eC4a9F494724C23da919E47792139eAA0 | https://sepolia.etherscan.io/address/0xB21Bc35eC4a9F494724C23da919E47792139eAA0 + ERC1155RaribleFactoryC2 | 0xb1945FeE96207d14182A569075426cF79A4Ec240 | https://sepolia.etherscan.io/address/0xb1945FeE96207d14182A569075426cF79A4Ec240 + ERC20TransferProxy | 0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4 | https://sepolia.etherscan.io/address/0xDaC1aF2dCa52204b9d3d7b3bf967A30d5FCE8DC4 + ERC721LazyMintTransferProxy | 0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30 | https://sepolia.etherscan.io/address/0x18e6C7988F3c4C3B6EFdb69449EAE6B5eeA39e30 + ERC721RaribleFactoryC2 | 0x91a4a863027835143161b635BfB9A6d887993D3D | https://sepolia.etherscan.io/address/0x91a4a863027835143161b635BfB9A6d887993D3D + ERC721RaribleMinimal | 0x42CCFaf87072D03a6583488d205D99cFeE2427b5 | https://sepolia.etherscan.io/address/0x42CCFaf87072D03a6583488d205D99cFeE2427b5 + ERC721RaribleMinimalBeacon | 0x10Eb7BCE43ed43b8808D1B5dd294895F7f9c6e4A | https://sepolia.etherscan.io/address/0x10Eb7BCE43ed43b8808D1B5dd294895F7f9c6e4A + ExchangeV2 | 0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7 | https://sepolia.etherscan.io/address/0x817C293AFaC32BA47D8C6726E57ccDFc393EABc7 + RaribleExchangeWrapper | 0xf26C9407B885591a2503e51CFab118bef89eCCAa | https://sepolia.etherscan.io/address/0xf26C9407B885591a2503e51CFab118bef89eCCAa + RoyaltiesRegistry | 0x097540c06647D14C5b63E678DC6e290e0f2150cc | https://sepolia.etherscan.io/address/0x097540c06647D14C5b63E678DC6e290e0f2150cc + TransferProxy | 0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308 | https://sepolia.etherscan.io/address/0xdf9ae28B5564047D6DF0B4A44Eb81CD187BdA308 diff --git a/projects/thridweb-query/.gitignore b/projects/thridweb-query/.gitignore new file mode 100644 index 000000000..bb77923ea --- /dev/null +++ b/projects/thridweb-query/.gitignore @@ -0,0 +1,13 @@ +node_modules +.env +coverage +coverage.json +typechain +typechain-types + +# Hardhat files +cache +artifacts + +cache-zk +artifacts-zk From 674d7e1df09a373ebbb02f3bf71768da724731a8 Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Mon, 6 May 2024 18:00:27 +0100 Subject: [PATCH 12/25] Feature/pt 5315 3dweb query (#287) * feat: add proxy 3dweb reader + modify deploy to support initial owner for admin proxy --- .../thridweb-query/deployments/xai/.chainId | 1 + .../deployments/xai/DefaultProxyAdmin.json | 228 +++++++ .../deployments/xai/DropERC721Reader.json | 570 ++++++++++++++++++ .../xai/DropERC721Reader_Implementation.json | 411 +++++++++++++ .../xai/DropERC721Reader_Proxy.json | 275 +++++++++ .../2bdb5d76d23966dfb9b70ec2522d23dc.json | 56 ++ .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 +++++ 7 files changed, 1684 insertions(+) create mode 100644 projects/thridweb-query/deployments/xai/.chainId create mode 100644 projects/thridweb-query/deployments/xai/DefaultProxyAdmin.json create mode 100644 projects/thridweb-query/deployments/xai/DropERC721Reader.json create mode 100644 projects/thridweb-query/deployments/xai/DropERC721Reader_Implementation.json create mode 100644 projects/thridweb-query/deployments/xai/DropERC721Reader_Proxy.json create mode 100644 projects/thridweb-query/deployments/xai/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json create mode 100644 projects/thridweb-query/deployments/xai/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json diff --git a/projects/thridweb-query/deployments/xai/.chainId b/projects/thridweb-query/deployments/xai/.chainId new file mode 100644 index 000000000..28d56901b --- /dev/null +++ b/projects/thridweb-query/deployments/xai/.chainId @@ -0,0 +1 @@ +660279 \ No newline at end of file diff --git a/projects/thridweb-query/deployments/xai/DefaultProxyAdmin.json b/projects/thridweb-query/deployments/xai/DefaultProxyAdmin.json new file mode 100644 index 000000000..269f8aa07 --- /dev/null +++ b/projects/thridweb-query/deployments/xai/DefaultProxyAdmin.json @@ -0,0 +1,228 @@ +{ + "address": "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "args": [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/xai/DropERC721Reader.json b/projects/thridweb-query/deployments/xai/DropERC721Reader.json new file mode 100644 index 000000000..efdd4efb3 --- /dev/null +++ b/projects/thridweb-query/deployments/xai/DropERC721Reader.json @@ -0,0 +1,570 @@ +{ + "address": "0x34b55D1F7C7a07b8beb38284995A69331dE170EA", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "837403", + "logsBloom": "0x000000000000000000000000000000004000000000000000008000000000000000000000010000000000000000000000000000000000400000000000000000000000000000020000000000000000020800010000000000000040000000000000000000000200000000000000000008000000008000000000000000000000005000000000000000000400000000000000000000000000800000000000008000000000000000000000000000000004000000000000000000000000000000000000000000200000000000000000010c0000000000000400000000000000000020080000000000000000000000000000080000000000000000000000000000000004", + "blockHash": "0x38a2528c4f694c3054b9095f9f196c84e9c34555580186660cb509f031936769", + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 5707820, + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "address": "0x34b55D1F7C7a07b8beb38284995A69331dE170EA", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000067236dcebbd6e44454e6bf971bcf7321162ed650" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x38a2528c4f694c3054b9095f9f196c84e9c34555580186660cb509f031936769" + }, + { + "transactionIndex": 1, + "blockNumber": 5707820, + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "address": "0x34b55D1F7C7a07b8beb38284995A69331dE170EA", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x38a2528c4f694c3054b9095f9f196c84e9c34555580186660cb509f031936769" + }, + { + "transactionIndex": 1, + "blockNumber": 5707820, + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "address": "0x34b55D1F7C7a07b8beb38284995A69331dE170EA", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x38a2528c4f694c3054b9095f9f196c84e9c34555580186660cb509f031936769" + }, + { + "transactionIndex": 1, + "blockNumber": 5707820, + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "address": "0x34b55D1F7C7a07b8beb38284995A69331dE170EA", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x38a2528c4f694c3054b9095f9f196c84e9c34555580186660cb509f031936769" + }, + { + "transactionIndex": 1, + "blockNumber": 5707820, + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "address": "0x34b55D1F7C7a07b8beb38284995A69331dE170EA", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 4, + "blockHash": "0x38a2528c4f694c3054b9095f9f196c84e9c34555580186660cb509f031936769" + } + ], + "blockNumber": 5707820, + "cumulativeGasUsed": "837403", + "status": 1, + "byzantium": true + }, + "args": [ + "0x67236dcebBd6E44454e6BF971bcf7321162eD650", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x0000000000000000000000000000000000000000", + "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ] + }, + "implementation": "0x67236dcebBd6E44454e6BF971bcf7321162eD650", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/xai/DropERC721Reader_Implementation.json b/projects/thridweb-query/deployments/xai/DropERC721Reader_Implementation.json new file mode 100644 index 000000000..8f3e824c7 --- /dev/null +++ b/projects/thridweb-query/deployments/xai/DropERC721Reader_Implementation.json @@ -0,0 +1,411 @@ +{ + "address": "0x67236dcebBd6E44454e6BF971bcf7321162eD650", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "args": [], + "numDeployments": 1, + "solcInputHash": "2bdb5d76d23966dfb9b70ec2522d23dc", + "metadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dropERC721\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"}],\"name\":\"getAllData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeClaimConditionIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxClaimableSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyClaimed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantityLimitPerWallet\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"pricePerToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"struct IDropERC721.ClaimCondition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalMinted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedByUser\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToClaim\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"baseURICount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockTimeStamp\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"defaultRoyaltyInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"platformFeeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct DropERC721Reader.GlobalData\",\"name\":\"globalData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_native1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_native2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/drop-reader/DropERC721Reader.sol\":\"DropERC721Reader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\\n * initialization step. This is essential to configure modules that are added through upgrades and that require\\n * initialization.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC20 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/20\\n */\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address who) external view returns (uint256);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n function transferFrom(\\n address from,\\n address to,\\n uint256 value\\n ) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5bdd9dd97ba7d9d7c9a2953db287e4d9d7fa93a27a96bc2e72a8da4919b6f7ff\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/DropERC721Reader.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.11;\\n\\n/// @author rarible\\n\\n// /$$$$$$$ /$$ /$$ /$$\\n// | $$__ $$ |__/| $$ | $$\\n// | $$ \\\\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\\n// | $$__ $$ /$$$$$$$| $$ \\\\__/| $$| $$ \\\\ $$| $$| $$$$$$$$\\n// | $$ \\\\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\\n// |__/ |__/ \\\\_______/|__/ |__/|_______/ |__/ \\\\_______/\\n\\n\\n// ========== Features ==========\\n\\nimport \\\"hardhat/console.sol\\\";\\nimport \\\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./IDropERC721.sol\\\";\\n\\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\\n\\n struct FeeData {\\n address recipient;\\n uint256 bps;\\n }\\n\\n struct GlobalData {\\n uint256 totalMinted;\\n uint256 claimedByUser;\\n uint256 totalSupply;\\n uint256 maxTotalSupply;\\n uint256 nextTokenIdToMint;\\n uint256 nextTokenIdToClaim;\\n string name;\\n string symbol;\\n string contractURI;\\n uint256 baseURICount;\\n uint256 userBalance;\\n uint256 blockTimeStamp;\\n FeeData defaultRoyaltyInfo;\\n FeeData platformFeeInfo;\\n }\\n\\n address public native1;\\n address public native2;\\n\\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\\n __Ownable_init();\\n native1 = _native1;\\n native2 = _native2;\\n // Transfer ownership to the initial owner provided\\n _transferOwnership(initialOwner);\\n }\\n\\n function getAllData(\\n address _dropERC721,\\n address _claimer\\n ) public view returns (\\n uint256 activeClaimConditionIndex,\\n IDropERC721.ClaimCondition[] memory conditions,\\n GlobalData memory globalData\\n ) {\\n IDropERC721 drop = IDropERC721(_dropERC721);\\n\\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\\n uint256 _claimedByUser = 0;\\n if(stopConditionIndex != 0) {\\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\\n activeClaimConditionIndex = _activeClaimConditionIndex;\\n } catch {\\n activeClaimConditionIndex = 0;\\n }\\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\\n \\n for (uint i = 0; i < stopConditionIndex; i++) {\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\\n conditions[i] = condition;\\n }\\n }\\n\\n DropERC721Reader.GlobalData memory _globalData;\\n if(stopConditionIndex > 0) {\\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\\n if(condition.currency == native1 || condition.currency == native2) {\\n _globalData.userBalance = _claimer.balance;\\n } else {\\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\\n }\\n\\n }\\n\\n _globalData.totalMinted = drop.totalMinted();\\n _globalData.claimedByUser = _claimedByUser;\\n _globalData.totalSupply = drop.totalSupply();\\n _globalData.maxTotalSupply = drop.maxTotalSupply();\\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\\n _globalData.name = drop.name();\\n _globalData.symbol = drop.symbol();\\n _globalData.contractURI = drop.contractURI();\\n _globalData.baseURICount = drop.getBaseURICount();\\n _globalData.blockTimeStamp = block.timestamp;\\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\\n _globalData.defaultRoyaltyInfo.bps = rBps;\\n\\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.bps = pBps;\\n return (activeClaimConditionIndex, conditions, _globalData);\\n }\\n}\",\"keccak256\":\"0x1e5633984124ff64630f990fa899abc71d721ba471fc0fa253fa5e06ba28d23d\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/IDropERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDropERC721 {\\n // This struct describes a single claim condition\\n struct ClaimCondition {\\n uint256 startTimestamp;\\n uint256 maxClaimableSupply;\\n uint256 supplyClaimed;\\n uint256 quantityLimitPerWallet;\\n bytes32 merkleRoot;\\n uint256 pricePerToken;\\n address currency;\\n string metadata;\\n }\\n\\n // Events\\n event ClaimConditionsUpdated(\\n ClaimCondition[] claimConditions,\\n bool resetEligibility\\n );\\n event TokensClaimed(\\n uint256 indexed claimConditionIndex,\\n address indexed claimer,\\n address indexed receiver,\\n uint256 startTokenId,\\n uint256 quantityClaimed\\n );\\n\\n // View functions for global data\\n function totalMinted() external view returns (uint256);\\n function totalSupply() external view returns (uint256);\\n function maxTotalSupply() external view returns (uint256);\\n function nextTokenIdToMint() external view returns (uint256);\\n function nextTokenIdToClaim() external view returns (uint256);\\n function name() external view returns (string memory);\\n function symbol() external view returns (string memory);\\n function contractURI() external view returns (string memory);\\n function getBaseURICount() external view returns (uint256);\\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\\n function getPlatformFeeInfo() external view returns (address, uint16);\\n\\n // Specific claim condition methods\\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\\n function getActiveClaimConditionId() external view returns (uint256);\\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x78c04c177793bc91b8c4f7efe8bd7c163ca4cbdb5a19f88fe71309a075f2f415\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506113ab806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 138, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 141, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 566, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 130, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 685, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native1", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 687, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native2", + "offset": 0, + "slot": "102", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/xai/DropERC721Reader_Proxy.json b/projects/thridweb-query/deployments/xai/DropERC721Reader_Proxy.json new file mode 100644 index 000000000..c7edd98fe --- /dev/null +++ b/projects/thridweb-query/deployments/xai/DropERC721Reader_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0x34b55D1F7C7a07b8beb38284995A69331dE170EA", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "receipt": { + "to": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": null, + "transactionIndex": 1, + "gasUsed": "837403", + "logsBloom": "0x000000000000000000000000000000004000000000000000008000000000000000000000010000000000000000000000000000000000400000000000000000000000000000020000000000000000020800010000000000000040000000000000000000000200000000000000000008000000008000000000000000000000005000000000000000000400000000000000000000000000800000000000008000000000000000000000000000000004000000000000000000000000000000000000000000200000000000000000010c0000000000000400000000000000000020080000000000000000000000000000080000000000000000000000000000000004", + "blockHash": "0x38a2528c4f694c3054b9095f9f196c84e9c34555580186660cb509f031936769", + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 5707820, + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "address": "0x34b55D1F7C7a07b8beb38284995A69331dE170EA", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000067236dcebbd6e44454e6bf971bcf7321162ed650" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x38a2528c4f694c3054b9095f9f196c84e9c34555580186660cb509f031936769" + }, + { + "transactionIndex": 1, + "blockNumber": 5707820, + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "address": "0x34b55D1F7C7a07b8beb38284995A69331dE170EA", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x38a2528c4f694c3054b9095f9f196c84e9c34555580186660cb509f031936769" + }, + { + "transactionIndex": 1, + "blockNumber": 5707820, + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "address": "0x34b55D1F7C7a07b8beb38284995A69331dE170EA", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000933acd72513796c31dc9b63579130335dcd4a961", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x38a2528c4f694c3054b9095f9f196c84e9c34555580186660cb509f031936769" + }, + { + "transactionIndex": 1, + "blockNumber": 5707820, + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "address": "0x34b55D1F7C7a07b8beb38284995A69331dE170EA", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x38a2528c4f694c3054b9095f9f196c84e9c34555580186660cb509f031936769" + }, + { + "transactionIndex": 1, + "blockNumber": 5707820, + "transactionHash": "0xb621e715ce96edecec480bee6a87ed6dae697d976e6ab3f3bc6f4a2a17ad4a90", + "address": "0x34b55D1F7C7a07b8beb38284995A69331dE170EA", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000006da8c223fcdf463f88cd28e473d81c94df0fe36a", + "logIndex": 4, + "blockHash": "0x38a2528c4f694c3054b9095f9f196c84e9c34555580186660cb509f031936769" + } + ], + "blockNumber": 5707820, + "cumulativeGasUsed": "837403", + "status": 1, + "byzantium": true + }, + "args": [ + "0x67236dcebBd6E44454e6BF971bcf7321162eD650", + "0x6DA8C223FCDF463F88cd28E473d81C94DF0fE36a", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/xai/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json b/projects/thridweb-query/deployments/xai/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json new file mode 100644 index 000000000..060ca3f6a --- /dev/null +++ b/projects/thridweb-query/deployments/xai/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n struct FeeData {\n address recipient;\n uint256 bps;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n _globalData.maxTotalSupply = drop.maxTotalSupply();\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n _globalData.baseURICount = drop.getBaseURICount();\n _globalData.blockTimeStamp = block.timestamp;\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.bps = rBps;\n\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.bps = pBps;\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeInfo() external view returns (address, uint16);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/xai/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/thridweb-query/deployments/xai/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/thridweb-query/deployments/xai/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file From 94873c92c35decbd9f5637c0ab4f94a08df80bcb Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Tue, 7 May 2024 12:41:18 +0100 Subject: [PATCH 13/25] feat: add contracts for amoy --- .../networks/polygon_amoy_testnet.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/projects/hardhat-deploy/networks/polygon_amoy_testnet.md b/projects/hardhat-deploy/networks/polygon_amoy_testnet.md index 017e7af2d..81c0b5d56 100644 --- a/projects/hardhat-deploy/networks/polygon_amoy_testnet.md +++ b/projects/hardhat-deploy/networks/polygon_amoy_testnet.md @@ -1,17 +1,17 @@ Name | Address | Url --- | --- | --- - AssetMatcherCollection | 0x3049455cdA17beE43d61090Ec344624aeda72Ed6 | https://www.oklink.com/amoy/address/0x3049455cdA17beE43d61090Ec344624aeda72Ed6 - DefaultProxyAdmin | 0x3db982bBdBC7EDdD258B10Ed7AAE65C82Fdcc73c | https://www.oklink.com/amoy/address/0x3db982bBdBC7EDdD258B10Ed7AAE65C82Fdcc73c - ERC1155LazyMintTransferProxy | 0xC5BBd75789bD007784A0046094d19aCeA1A79eB1 | https://www.oklink.com/amoy/address/0xC5BBd75789bD007784A0046094d19aCeA1A79eB1 - ERC1155RaribleBeaconMeta | 0x166F6180170f438Ddc38050a2B708d38c0890956 | https://www.oklink.com/amoy/address/0x166F6180170f438Ddc38050a2B708d38c0890956 - ERC1155RaribleFactoryC2 | 0xc9eB416CDb5cc2aFC09bb75393AEc6dBA4E5C84a | https://www.oklink.com/amoy/address/0xc9eB416CDb5cc2aFC09bb75393AEc6dBA4E5C84a - ERC1155RaribleMeta | 0xc798B273FaF23932Cf11177402C10C9b44D30Da2 | https://www.oklink.com/amoy/address/0xc798B273FaF23932Cf11177402C10C9b44D30Da2 - ERC20TransferProxy | 0xB8863180CAC2d0Ab665e5968C0De25298A1D8CEe | https://www.oklink.com/amoy/address/0xB8863180CAC2d0Ab665e5968C0De25298A1D8CEe - ERC721LazyMintTransferProxy | 0xa2eEBb837aEF89369Ad117568d75348e6174520e | https://www.oklink.com/amoy/address/0xa2eEBb837aEF89369Ad117568d75348e6174520e - ERC721RaribleFactoryC2 | 0x18a2553ef1aaE12d9cd158821319e26A62feE90E | https://www.oklink.com/amoy/address/0x18a2553ef1aaE12d9cd158821319e26A62feE90E - ERC721RaribleMeta | 0x41407B447Fb5425187A9BCA3a062644EF2410F8D | https://www.oklink.com/amoy/address/0x41407B447Fb5425187A9BCA3a062644EF2410F8D - ERC721RaribleMinimalBeaconMeta | 0xB020bA7fcF43DCc59eF0103624BD6FADE66d105E | https://www.oklink.com/amoy/address/0xB020bA7fcF43DCc59eF0103624BD6FADE66d105E - ExchangeMetaV2 | 0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77 | https://www.oklink.com/amoy/address/0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77 - RaribleExchangeWrapper | 0x7d47126a2600E22eab9eD6CF0e515678727779A6 | https://www.oklink.com/amoy/address/0x7d47126a2600E22eab9eD6CF0e515678727779A6 - RoyaltiesRegistry | 0xD1f689646861870D44B33dBBb413Fa7D06A2B52f | https://www.oklink.com/amoy/address/0xD1f689646861870D44B33dBBb413Fa7D06A2B52f - TransferProxy | 0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af | https://www.oklink.com/amoy/address/0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af + AssetMatcherCollection | 0x3049455cdA17beE43d61090Ec344624aeda72Ed6 | https://amoy.polygonscan.com/address/0x3049455cdA17beE43d61090Ec344624aeda72Ed6 + DefaultProxyAdmin | 0x3db982bBdBC7EDdD258B10Ed7AAE65C82Fdcc73c | https://amoy.polygonscan.com/address/0x3db982bBdBC7EDdD258B10Ed7AAE65C82Fdcc73c + ERC1155LazyMintTransferProxy | 0xC5BBd75789bD007784A0046094d19aCeA1A79eB1 | https://amoy.polygonscan.com/address/0xC5BBd75789bD007784A0046094d19aCeA1A79eB1 + ERC1155RaribleBeaconMeta | 0x166F6180170f438Ddc38050a2B708d38c0890956 | https://amoy.polygonscan.com/address/0x166F6180170f438Ddc38050a2B708d38c0890956 + ERC1155RaribleFactoryC2 | 0xc9eB416CDb5cc2aFC09bb75393AEc6dBA4E5C84a | https://amoy.polygonscan.com/address/0xc9eB416CDb5cc2aFC09bb75393AEc6dBA4E5C84a + ERC1155RaribleMeta | 0xc798B273FaF23932Cf11177402C10C9b44D30Da2 | https://amoy.polygonscan.com/address/0xc798B273FaF23932Cf11177402C10C9b44D30Da2 + ERC20TransferProxy | 0xB8863180CAC2d0Ab665e5968C0De25298A1D8CEe | https://amoy.polygonscan.com/address/0xB8863180CAC2d0Ab665e5968C0De25298A1D8CEe + ERC721LazyMintTransferProxy | 0xa2eEBb837aEF89369Ad117568d75348e6174520e | https://amoy.polygonscan.com/address/0xa2eEBb837aEF89369Ad117568d75348e6174520e + ERC721RaribleFactoryC2 | 0x18a2553ef1aaE12d9cd158821319e26A62feE90E | https://amoy.polygonscan.com/address/0x18a2553ef1aaE12d9cd158821319e26A62feE90E + ERC721RaribleMeta | 0x41407B447Fb5425187A9BCA3a062644EF2410F8D | https://amoy.polygonscan.com/address/0x41407B447Fb5425187A9BCA3a062644EF2410F8D + ERC721RaribleMinimalBeaconMeta | 0xB020bA7fcF43DCc59eF0103624BD6FADE66d105E | https://amoy.polygonscan.com/address/0xB020bA7fcF43DCc59eF0103624BD6FADE66d105E + ExchangeMetaV2 | 0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77 | https://amoy.polygonscan.com/address/0x3e52D660b69d1bDacb6C513cE085D924F5Cb9c77 + RaribleExchangeWrapper | 0x7d47126a2600E22eab9eD6CF0e515678727779A6 | https://amoy.polygonscan.com/address/0x7d47126a2600E22eab9eD6CF0e515678727779A6 + RoyaltiesRegistry | 0xD1f689646861870D44B33dBBb413Fa7D06A2B52f | https://amoy.polygonscan.com/address/0xD1f689646861870D44B33dBBb413Fa7D06A2B52f + TransferProxy | 0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af | https://amoy.polygonscan.com/address/0xA094E566b61b3c2D88ACf7Cc15e3Dd0FA83F32af From c9153ef317d6fd8bbd7f963c275de6ba021f10ff Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Tue, 7 May 2024 14:34:11 +0100 Subject: [PATCH 14/25] feat: deploy specs --- projects/hardhat-deploy/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/hardhat-deploy/README.md b/projects/hardhat-deploy/README.md index 908d60d93..751eb377a 100644 --- a/projects/hardhat-deploy/README.md +++ b/projects/hardhat-deploy/README.md @@ -17,4 +17,6 @@ to do integration tests of contracts to deploy: npx hardhat test ``` -salt used DETERMENISTIC_DEPLOYMENT_SALT=0x1118 \ No newline at end of file +salt used DETERMENISTIC_DEPLOYMENT_SALT=0x1118 + +INITIAL_OWNER=0x256eFfCeA2ab308D31e318728D2615545171d85B \ No newline at end of file From 146950568ceaebddc7d45502ae40fa51ee4d18a6 Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Mon, 13 May 2024 09:22:34 +0100 Subject: [PATCH 15/25] feat: add new proxy reader deploys --- .../deploy/006_deploy_ThirdwebReader.ts | 4 +- .../deployments/chiliz/.chainId | 1 + .../deployments/chiliz/DefaultProxyAdmin.json | 272 ++++++++ .../deployments/chiliz/DropERC721Reader.json | 583 ++++++++++++++++++ .../DropERC721Reader_Implementation.json | 441 +++++++++++++ .../chiliz/DropERC721Reader_Proxy.json | 288 +++++++++ .../2bdb5d76d23966dfb9b70ec2522d23dc.json | 56 ++ .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 +++++ .../deployments/chiliz_testnet/.chainId | 1 + .../chiliz_testnet/DefaultProxyAdmin.json | 272 ++++++++ .../chiliz_testnet/DropERC721Reader.json | 583 ++++++++++++++++++ .../DropERC721Reader_Implementation.json | 441 +++++++++++++ .../DropERC721Reader_Proxy.json | 288 +++++++++ .../2bdb5d76d23966dfb9b70ec2522d23dc.json | 56 ++ .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 +++++ 15 files changed, 3570 insertions(+), 2 deletions(-) create mode 100644 projects/thridweb-query/deployments/chiliz/.chainId create mode 100644 projects/thridweb-query/deployments/chiliz/DefaultProxyAdmin.json create mode 100644 projects/thridweb-query/deployments/chiliz/DropERC721Reader.json create mode 100644 projects/thridweb-query/deployments/chiliz/DropERC721Reader_Implementation.json create mode 100644 projects/thridweb-query/deployments/chiliz/DropERC721Reader_Proxy.json create mode 100644 projects/thridweb-query/deployments/chiliz/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json create mode 100644 projects/thridweb-query/deployments/chiliz/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json create mode 100644 projects/thridweb-query/deployments/chiliz_testnet/.chainId create mode 100644 projects/thridweb-query/deployments/chiliz_testnet/DefaultProxyAdmin.json create mode 100644 projects/thridweb-query/deployments/chiliz_testnet/DropERC721Reader.json create mode 100644 projects/thridweb-query/deployments/chiliz_testnet/DropERC721Reader_Implementation.json create mode 100644 projects/thridweb-query/deployments/chiliz_testnet/DropERC721Reader_Proxy.json create mode 100644 projects/thridweb-query/deployments/chiliz_testnet/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json create mode 100644 projects/thridweb-query/deployments/chiliz_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json diff --git a/projects/thridweb-query/deploy/006_deploy_ThirdwebReader.ts b/projects/thridweb-query/deploy/006_deploy_ThirdwebReader.ts index 63b3ed495..763ac80cd 100644 --- a/projects/thridweb-query/deploy/006_deploy_ThirdwebReader.ts +++ b/projects/thridweb-query/deploy/006_deploy_ThirdwebReader.ts @@ -26,8 +26,8 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { }, log: true, autoMine: true, - deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, - skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, + // deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + // skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true: false, }); }; diff --git a/projects/thridweb-query/deployments/chiliz/.chainId b/projects/thridweb-query/deployments/chiliz/.chainId new file mode 100644 index 000000000..3eddfc2ed --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz/.chainId @@ -0,0 +1 @@ +88888 \ No newline at end of file diff --git a/projects/thridweb-query/deployments/chiliz/DefaultProxyAdmin.json b/projects/thridweb-query/deployments/chiliz/DefaultProxyAdmin.json new file mode 100644 index 000000000..f74ff2e84 --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz/DefaultProxyAdmin.json @@ -0,0 +1,272 @@ +{ + "address": "0x0a05C1027474f5c2a5F1f392DA7D0a7A3e04f496", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0x3fc7d309105988b30dd047e98ed7418ec6a6323c95c29028c55f182b0962dca2", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x0a05C1027474f5c2a5F1f392DA7D0a7A3e04f496", + "transactionIndex": 0, + "gasUsed": "693701", + "logsBloom": "0x00000000000000000000000000000000000010000000000000800000000000000000000000000000000000000000000000000000000800000000400000000000000000000000000000000000000000080021000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000500000000000000000000000000000000000000800000000000000000000000000000000000000000000020000000000000000000000000000000000000800000000000000000000000000000000180000000000000000000000000000040020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x51029c65cad1b0db7e5d93c31436f332015e029c05e696b473e5c65a17d69d90", + "transactionHash": "0x3fc7d309105988b30dd047e98ed7418ec6a6323c95c29028c55f182b0962dca2", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 12878526, + "transactionHash": "0x3fc7d309105988b30dd047e98ed7418ec6a6323c95c29028c55f182b0962dca2", + "address": "0x0000000000000000000000000000000000007005", + "topics": [ + "0x33c981baba081f8fd2c52ac6ad1ea95b6814b4376640f55689051f6584729688", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x0000000000000000000000000a05c1027474f5c2a5f1f392da7d0a7a3e04f496", + "logIndex": 0, + "blockHash": "0x51029c65cad1b0db7e5d93c31436f332015e029c05e696b473e5c65a17d69d90" + }, + { + "transactionIndex": 0, + "blockNumber": 12878526, + "transactionHash": "0x3fc7d309105988b30dd047e98ed7418ec6a6323c95c29028c55f182b0962dca2", + "address": "0x0a05C1027474f5c2a5F1f392DA7D0a7A3e04f496", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x51029c65cad1b0db7e5d93c31436f332015e029c05e696b473e5c65a17d69d90" + } + ], + "blockNumber": 12878526, + "cumulativeGasUsed": "693701", + "status": 1, + "byzantium": true + }, + "args": [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/chiliz/DropERC721Reader.json b/projects/thridweb-query/deployments/chiliz/DropERC721Reader.json new file mode 100644 index 000000000..ce5494145 --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz/DropERC721Reader.json @@ -0,0 +1,583 @@ +{ + "address": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "transactionIndex": 0, + "gasUsed": "848512", + "logsBloom": "0x000000000000000000000000000000004000180000000000008000000000000000000000000000000000000000000000000000000008000000000000000000000000040000000000000000000000020800210000000000000000000000000000000000000200000000000000000008000040008000000000000000000000005000000000000000000000000000000000000008000000800000000000008000000080000000000000000000000004000000000000000000000000000000000000000000200000000000000000001c0000000000000400000000000000040020400000000000000000000000000000000000010000000000000000000000000000", + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5", + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 12878585, + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "address": "0x0000000000000000000000000000000000007005", + "topics": [ + "0x33c981baba081f8fd2c52ac6ad1ea95b6814b4376640f55689051f6584729688", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x00000000000000000000000000c74ed067cea48f1d6f7d00ababa3c1d5b2598b", + "logIndex": 0, + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5" + }, + { + "transactionIndex": 0, + "blockNumber": 12878585, + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "address": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000d1f689646861870d44b33dbbb413fa7d06a2b52f" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5" + }, + { + "transactionIndex": 0, + "blockNumber": 12878585, + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "address": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5" + }, + { + "transactionIndex": 0, + "blockNumber": 12878585, + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "address": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5" + }, + { + "transactionIndex": 0, + "blockNumber": 12878585, + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "address": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 4, + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5" + }, + { + "transactionIndex": 0, + "blockNumber": 12878585, + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "address": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a05c1027474f5c2a5f1f392da7d0a7a3e04f496", + "logIndex": 5, + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5" + } + ], + "blockNumber": 12878585, + "cumulativeGasUsed": "848512", + "status": 1, + "byzantium": true + }, + "args": [ + "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "0x0a05C1027474f5c2a5F1f392DA7D0a7A3e04f496", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x0000000000000000000000000000000000000000", + "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ] + }, + "implementation": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/chiliz/DropERC721Reader_Implementation.json b/projects/thridweb-query/deployments/chiliz/DropERC721Reader_Implementation.json new file mode 100644 index 000000000..397e69cbe --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz/DropERC721Reader_Implementation.json @@ -0,0 +1,441 @@ +{ + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x45ec82ae85159d6df9952ea5df7ce48e54044395e55c7e0e69847fe816778362", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "transactionIndex": 1, + "gasUsed": "1191157", + "logsBloom": "0x00000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000080020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x08758a5051f788cfe7cb00f69e0f1f844b029d0658d8d8cc55f8c3294f366beb", + "transactionHash": "0x45ec82ae85159d6df9952ea5df7ce48e54044395e55c7e0e69847fe816778362", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 12878529, + "transactionHash": "0x45ec82ae85159d6df9952ea5df7ce48e54044395e55c7e0e69847fe816778362", + "address": "0x0000000000000000000000000000000000007005", + "topics": [ + "0x33c981baba081f8fd2c52ac6ad1ea95b6814b4376640f55689051f6584729688", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x000000000000000000000000d1f689646861870d44b33dbbb413fa7d06a2b52f", + "logIndex": 5, + "blockHash": "0x08758a5051f788cfe7cb00f69e0f1f844b029d0658d8d8cc55f8c3294f366beb" + } + ], + "blockNumber": 12878529, + "cumulativeGasUsed": "1372630", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "2bdb5d76d23966dfb9b70ec2522d23dc", + "metadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dropERC721\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"}],\"name\":\"getAllData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeClaimConditionIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxClaimableSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyClaimed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantityLimitPerWallet\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"pricePerToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"struct IDropERC721.ClaimCondition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalMinted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedByUser\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToClaim\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"baseURICount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockTimeStamp\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"defaultRoyaltyInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"platformFeeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct DropERC721Reader.GlobalData\",\"name\":\"globalData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_native1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_native2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/drop-reader/DropERC721Reader.sol\":\"DropERC721Reader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\\n * initialization step. This is essential to configure modules that are added through upgrades and that require\\n * initialization.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC20 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/20\\n */\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address who) external view returns (uint256);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n function transferFrom(\\n address from,\\n address to,\\n uint256 value\\n ) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5bdd9dd97ba7d9d7c9a2953db287e4d9d7fa93a27a96bc2e72a8da4919b6f7ff\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/DropERC721Reader.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.11;\\n\\n/// @author rarible\\n\\n// /$$$$$$$ /$$ /$$ /$$\\n// | $$__ $$ |__/| $$ | $$\\n// | $$ \\\\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\\n// | $$__ $$ /$$$$$$$| $$ \\\\__/| $$| $$ \\\\ $$| $$| $$$$$$$$\\n// | $$ \\\\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\\n// |__/ |__/ \\\\_______/|__/ |__/|_______/ |__/ \\\\_______/\\n\\n\\n// ========== Features ==========\\n\\nimport \\\"hardhat/console.sol\\\";\\nimport \\\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./IDropERC721.sol\\\";\\n\\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\\n\\n struct FeeData {\\n address recipient;\\n uint256 bps;\\n }\\n\\n struct GlobalData {\\n uint256 totalMinted;\\n uint256 claimedByUser;\\n uint256 totalSupply;\\n uint256 maxTotalSupply;\\n uint256 nextTokenIdToMint;\\n uint256 nextTokenIdToClaim;\\n string name;\\n string symbol;\\n string contractURI;\\n uint256 baseURICount;\\n uint256 userBalance;\\n uint256 blockTimeStamp;\\n FeeData defaultRoyaltyInfo;\\n FeeData platformFeeInfo;\\n }\\n\\n address public native1;\\n address public native2;\\n\\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\\n __Ownable_init();\\n native1 = _native1;\\n native2 = _native2;\\n // Transfer ownership to the initial owner provided\\n _transferOwnership(initialOwner);\\n }\\n\\n function getAllData(\\n address _dropERC721,\\n address _claimer\\n ) public view returns (\\n uint256 activeClaimConditionIndex,\\n IDropERC721.ClaimCondition[] memory conditions,\\n GlobalData memory globalData\\n ) {\\n IDropERC721 drop = IDropERC721(_dropERC721);\\n\\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\\n uint256 _claimedByUser = 0;\\n if(stopConditionIndex != 0) {\\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\\n activeClaimConditionIndex = _activeClaimConditionIndex;\\n } catch {\\n activeClaimConditionIndex = 0;\\n }\\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\\n \\n for (uint i = 0; i < stopConditionIndex; i++) {\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\\n conditions[i] = condition;\\n }\\n }\\n\\n DropERC721Reader.GlobalData memory _globalData;\\n if(stopConditionIndex > 0) {\\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\\n if(condition.currency == native1 || condition.currency == native2) {\\n _globalData.userBalance = _claimer.balance;\\n } else {\\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\\n }\\n\\n }\\n\\n _globalData.totalMinted = drop.totalMinted();\\n _globalData.claimedByUser = _claimedByUser;\\n _globalData.totalSupply = drop.totalSupply();\\n _globalData.maxTotalSupply = drop.maxTotalSupply();\\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\\n _globalData.name = drop.name();\\n _globalData.symbol = drop.symbol();\\n _globalData.contractURI = drop.contractURI();\\n _globalData.baseURICount = drop.getBaseURICount();\\n _globalData.blockTimeStamp = block.timestamp;\\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\\n _globalData.defaultRoyaltyInfo.bps = rBps;\\n\\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.bps = pBps;\\n return (activeClaimConditionIndex, conditions, _globalData);\\n }\\n}\",\"keccak256\":\"0x1e5633984124ff64630f990fa899abc71d721ba471fc0fa253fa5e06ba28d23d\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/IDropERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDropERC721 {\\n // This struct describes a single claim condition\\n struct ClaimCondition {\\n uint256 startTimestamp;\\n uint256 maxClaimableSupply;\\n uint256 supplyClaimed;\\n uint256 quantityLimitPerWallet;\\n bytes32 merkleRoot;\\n uint256 pricePerToken;\\n address currency;\\n string metadata;\\n }\\n\\n // Events\\n event ClaimConditionsUpdated(\\n ClaimCondition[] claimConditions,\\n bool resetEligibility\\n );\\n event TokensClaimed(\\n uint256 indexed claimConditionIndex,\\n address indexed claimer,\\n address indexed receiver,\\n uint256 startTokenId,\\n uint256 quantityClaimed\\n );\\n\\n // View functions for global data\\n function totalMinted() external view returns (uint256);\\n function totalSupply() external view returns (uint256);\\n function maxTotalSupply() external view returns (uint256);\\n function nextTokenIdToMint() external view returns (uint256);\\n function nextTokenIdToClaim() external view returns (uint256);\\n function name() external view returns (string memory);\\n function symbol() external view returns (string memory);\\n function contractURI() external view returns (string memory);\\n function getBaseURICount() external view returns (uint256);\\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\\n function getPlatformFeeInfo() external view returns (address, uint16);\\n\\n // Specific claim condition methods\\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\\n function getActiveClaimConditionId() external view returns (uint256);\\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x78c04c177793bc91b8c4f7efe8bd7c163ca4cbdb5a19f88fe71309a075f2f415\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506113ab806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 138, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 141, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 566, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 130, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 685, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native1", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 687, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native2", + "offset": 0, + "slot": "102", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/chiliz/DropERC721Reader_Proxy.json b/projects/thridweb-query/deployments/chiliz/DropERC721Reader_Proxy.json new file mode 100644 index 000000000..fcccf54d7 --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz/DropERC721Reader_Proxy.json @@ -0,0 +1,288 @@ +{ + "address": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "transactionIndex": 0, + "gasUsed": "848512", + "logsBloom": "0x000000000000000000000000000000004000180000000000008000000000000000000000000000000000000000000000000000000008000000000000000000000000040000000000000000000000020800210000000000000000000000000000000000000200000000000000000008000040008000000000000000000000005000000000000000000000000000000000000008000000800000000000008000000080000000000000000000000004000000000000000000000000000000000000000000200000000000000000001c0000000000000400000000000000040020400000000000000000000000000000000000010000000000000000000000000000", + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5", + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 12878585, + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "address": "0x0000000000000000000000000000000000007005", + "topics": [ + "0x33c981baba081f8fd2c52ac6ad1ea95b6814b4376640f55689051f6584729688", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x00000000000000000000000000c74ed067cea48f1d6f7d00ababa3c1d5b2598b", + "logIndex": 0, + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5" + }, + { + "transactionIndex": 0, + "blockNumber": 12878585, + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "address": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000d1f689646861870d44b33dbbb413fa7d06a2b52f" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5" + }, + { + "transactionIndex": 0, + "blockNumber": 12878585, + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "address": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5" + }, + { + "transactionIndex": 0, + "blockNumber": 12878585, + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "address": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5" + }, + { + "transactionIndex": 0, + "blockNumber": 12878585, + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "address": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 4, + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5" + }, + { + "transactionIndex": 0, + "blockNumber": 12878585, + "transactionHash": "0x6e1f2987b3f95b18c4d02861e48260168db3102067fdb2a338517f78ab93b5cd", + "address": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a05c1027474f5c2a5f1f392da7d0a7a3e04f496", + "logIndex": 5, + "blockHash": "0xe4f88c9dcd5ecfe66b4e49481b6a2f60d18a4f27c5d79eea78ecc0422e17bfc5" + } + ], + "blockNumber": 12878585, + "cumulativeGasUsed": "848512", + "status": 1, + "byzantium": true + }, + "args": [ + "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "0x0a05C1027474f5c2a5F1f392DA7D0a7A3e04f496", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/chiliz/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json b/projects/thridweb-query/deployments/chiliz/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json new file mode 100644 index 000000000..060ca3f6a --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n struct FeeData {\n address recipient;\n uint256 bps;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n _globalData.maxTotalSupply = drop.maxTotalSupply();\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n _globalData.baseURICount = drop.getBaseURICount();\n _globalData.blockTimeStamp = block.timestamp;\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.bps = rBps;\n\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.bps = pBps;\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeInfo() external view returns (address, uint16);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/chiliz/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/thridweb-query/deployments/chiliz/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/chiliz_testnet/.chainId b/projects/thridweb-query/deployments/chiliz_testnet/.chainId new file mode 100644 index 000000000..754599855 --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz_testnet/.chainId @@ -0,0 +1 @@ +88882 \ No newline at end of file diff --git a/projects/thridweb-query/deployments/chiliz_testnet/DefaultProxyAdmin.json b/projects/thridweb-query/deployments/chiliz_testnet/DefaultProxyAdmin.json new file mode 100644 index 000000000..7fdc93fdb --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz_testnet/DefaultProxyAdmin.json @@ -0,0 +1,272 @@ +{ + "address": "0x641a60302f6808c020DbD7fdb07A03cAd91D554A", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0x0dfb49ee743c48d5bd8337b2ba8113ba2b7654d21f0c552dbc2a307e5494095a", + "receipt": { + "to": null, + "from": "0x0CA38eAc26A4D0F17F7f323189282e2c0d8259bD", + "contractAddress": "0x641a60302f6808c020DbD7fdb07A03cAd91D554A", + "transactionIndex": 0, + "gasUsed": "696181", + "logsBloom": "0x00000000200000000000000000000000000010000200000000840000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000421000000000000000000000000000000000000020000000000080000000800000000000000200000000000000000400000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000040020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x4292eeddce9a879d3da561eb52ea53e810322ca32717d37e7b63a2e75e79a915", + "transactionHash": "0x0dfb49ee743c48d5bd8337b2ba8113ba2b7654d21f0c552dbc2a307e5494095a", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 13879926, + "transactionHash": "0x0dfb49ee743c48d5bd8337b2ba8113ba2b7654d21f0c552dbc2a307e5494095a", + "address": "0x0000000000000000000000000000000000007005", + "topics": [ + "0x33c981baba081f8fd2c52ac6ad1ea95b6814b4376640f55689051f6584729688", + "0x0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd" + ], + "data": "0x000000000000000000000000641a60302f6808c020dbd7fdb07a03cad91d554a", + "logIndex": 0, + "blockHash": "0x4292eeddce9a879d3da561eb52ea53e810322ca32717d37e7b63a2e75e79a915" + }, + { + "transactionIndex": 0, + "blockNumber": 13879926, + "transactionHash": "0x0dfb49ee743c48d5bd8337b2ba8113ba2b7654d21f0c552dbc2a307e5494095a", + "address": "0x641a60302f6808c020DbD7fdb07A03cAd91D554A", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x4292eeddce9a879d3da561eb52ea53e810322ca32717d37e7b63a2e75e79a915" + } + ], + "blockNumber": 13879926, + "cumulativeGasUsed": "696181", + "status": 1, + "byzantium": true + }, + "args": [ + "0x0CA38eAc26A4D0F17F7f323189282e2c0d8259bD" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/chiliz_testnet/DropERC721Reader.json b/projects/thridweb-query/deployments/chiliz_testnet/DropERC721Reader.json new file mode 100644 index 000000000..702c3054f --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz_testnet/DropERC721Reader.json @@ -0,0 +1,583 @@ +{ + "address": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "receipt": { + "to": null, + "from": "0x0CA38eAc26A4D0F17F7f323189282e2c0d8259bD", + "contractAddress": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "transactionIndex": 0, + "gasUsed": "849900", + "logsBloom": "0x00000000200000000000000000000000400010000200000000800001000000000000000000000000000000000000000000000000000808000000000000000000000100000000000000000000000002000421000000000000000000000000000000000000020000000000000000000800000000800000000008000000000000400000000000000000000000000000000000000800000080000000000000800000000000000000000000000040000400000000000000000000000000000000000000000020000000000000000000140000000000000400000000000000040020000000000000000000000000000000000000000000000000000004000000000000", + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6", + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 13879931, + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "address": "0x0000000000000000000000000000000000007005", + "topics": [ + "0x33c981baba081f8fd2c52ac6ad1ea95b6814b4376640f55689051f6584729688", + "0x0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd" + ], + "data": "0x0000000000000000000000003a1eb96dd91d78359b97c12ff02e421e1f8001e0", + "logIndex": 0, + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6" + }, + { + "transactionIndex": 0, + "blockNumber": 13879931, + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "address": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000f7001f38e6d4feaaaa67cba4499b26509657dc45" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6" + }, + { + "transactionIndex": 0, + "blockNumber": 13879931, + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "address": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6" + }, + { + "transactionIndex": 0, + "blockNumber": 13879931, + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "address": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd", + "0x0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6" + }, + { + "transactionIndex": 0, + "blockNumber": 13879931, + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "address": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 4, + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6" + }, + { + "transactionIndex": 0, + "blockNumber": 13879931, + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "address": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000641a60302f6808c020dbd7fdb07a03cad91d554a", + "logIndex": 5, + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6" + } + ], + "blockNumber": 13879931, + "cumulativeGasUsed": "849900", + "status": 1, + "byzantium": true + }, + "args": [ + "0xF7001f38e6D4FEAaaA67CbA4499B26509657dc45", + "0x641a60302f6808c020DbD7fdb07A03cAd91D554A", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x0000000000000000000000000000000000000000", + "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "0x0CA38eAc26A4D0F17F7f323189282e2c0d8259bD" + ] + }, + "implementation": "0xF7001f38e6D4FEAaaA67CbA4499B26509657dc45", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/chiliz_testnet/DropERC721Reader_Implementation.json b/projects/thridweb-query/deployments/chiliz_testnet/DropERC721Reader_Implementation.json new file mode 100644 index 000000000..148bb73ca --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz_testnet/DropERC721Reader_Implementation.json @@ -0,0 +1,441 @@ +{ + "address": "0xF7001f38e6D4FEAaaA67CbA4499B26509657dc45", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x93786ee71984b2bf6adb74b394848c9acf0be2e905b2c6193c3c9a8f51a9d828", + "receipt": { + "to": null, + "from": "0x0CA38eAc26A4D0F17F7f323189282e2c0d8259bD", + "contractAddress": "0xF7001f38e6D4FEAaaA67CbA4499B26509657dc45", + "transactionIndex": 0, + "gasUsed": "1192475", + "logsBloom": "0x00000000200000000000000000000000000010000200000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000420000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x512b7450eabafbd67568829c146dd95691d06941db07b1f81a61c5bfde6b24e4", + "transactionHash": "0x93786ee71984b2bf6adb74b394848c9acf0be2e905b2c6193c3c9a8f51a9d828", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 13879928, + "transactionHash": "0x93786ee71984b2bf6adb74b394848c9acf0be2e905b2c6193c3c9a8f51a9d828", + "address": "0x0000000000000000000000000000000000007005", + "topics": [ + "0x33c981baba081f8fd2c52ac6ad1ea95b6814b4376640f55689051f6584729688", + "0x0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd" + ], + "data": "0x000000000000000000000000f7001f38e6d4feaaaa67cba4499b26509657dc45", + "logIndex": 0, + "blockHash": "0x512b7450eabafbd67568829c146dd95691d06941db07b1f81a61c5bfde6b24e4" + } + ], + "blockNumber": 13879928, + "cumulativeGasUsed": "1192475", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "2bdb5d76d23966dfb9b70ec2522d23dc", + "metadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dropERC721\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"}],\"name\":\"getAllData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeClaimConditionIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxClaimableSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyClaimed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantityLimitPerWallet\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"pricePerToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"struct IDropERC721.ClaimCondition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalMinted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedByUser\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToClaim\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"baseURICount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockTimeStamp\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"defaultRoyaltyInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"platformFeeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct DropERC721Reader.GlobalData\",\"name\":\"globalData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_native1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_native2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/drop-reader/DropERC721Reader.sol\":\"DropERC721Reader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\\n * initialization step. This is essential to configure modules that are added through upgrades and that require\\n * initialization.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC20 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/20\\n */\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address who) external view returns (uint256);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n function transferFrom(\\n address from,\\n address to,\\n uint256 value\\n ) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5bdd9dd97ba7d9d7c9a2953db287e4d9d7fa93a27a96bc2e72a8da4919b6f7ff\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/DropERC721Reader.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.11;\\n\\n/// @author rarible\\n\\n// /$$$$$$$ /$$ /$$ /$$\\n// | $$__ $$ |__/| $$ | $$\\n// | $$ \\\\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\\n// | $$__ $$ /$$$$$$$| $$ \\\\__/| $$| $$ \\\\ $$| $$| $$$$$$$$\\n// | $$ \\\\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\\n// |__/ |__/ \\\\_______/|__/ |__/|_______/ |__/ \\\\_______/\\n\\n\\n// ========== Features ==========\\n\\nimport \\\"hardhat/console.sol\\\";\\nimport \\\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./IDropERC721.sol\\\";\\n\\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\\n\\n struct FeeData {\\n address recipient;\\n uint256 bps;\\n }\\n\\n struct GlobalData {\\n uint256 totalMinted;\\n uint256 claimedByUser;\\n uint256 totalSupply;\\n uint256 maxTotalSupply;\\n uint256 nextTokenIdToMint;\\n uint256 nextTokenIdToClaim;\\n string name;\\n string symbol;\\n string contractURI;\\n uint256 baseURICount;\\n uint256 userBalance;\\n uint256 blockTimeStamp;\\n FeeData defaultRoyaltyInfo;\\n FeeData platformFeeInfo;\\n }\\n\\n address public native1;\\n address public native2;\\n\\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\\n __Ownable_init();\\n native1 = _native1;\\n native2 = _native2;\\n // Transfer ownership to the initial owner provided\\n _transferOwnership(initialOwner);\\n }\\n\\n function getAllData(\\n address _dropERC721,\\n address _claimer\\n ) public view returns (\\n uint256 activeClaimConditionIndex,\\n IDropERC721.ClaimCondition[] memory conditions,\\n GlobalData memory globalData\\n ) {\\n IDropERC721 drop = IDropERC721(_dropERC721);\\n\\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\\n uint256 _claimedByUser = 0;\\n if(stopConditionIndex != 0) {\\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\\n activeClaimConditionIndex = _activeClaimConditionIndex;\\n } catch {\\n activeClaimConditionIndex = 0;\\n }\\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\\n \\n for (uint i = 0; i < stopConditionIndex; i++) {\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\\n conditions[i] = condition;\\n }\\n }\\n\\n DropERC721Reader.GlobalData memory _globalData;\\n if(stopConditionIndex > 0) {\\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\\n if(condition.currency == native1 || condition.currency == native2) {\\n _globalData.userBalance = _claimer.balance;\\n } else {\\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\\n }\\n\\n }\\n\\n _globalData.totalMinted = drop.totalMinted();\\n _globalData.claimedByUser = _claimedByUser;\\n _globalData.totalSupply = drop.totalSupply();\\n _globalData.maxTotalSupply = drop.maxTotalSupply();\\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\\n _globalData.name = drop.name();\\n _globalData.symbol = drop.symbol();\\n _globalData.contractURI = drop.contractURI();\\n _globalData.baseURICount = drop.getBaseURICount();\\n _globalData.blockTimeStamp = block.timestamp;\\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\\n _globalData.defaultRoyaltyInfo.bps = rBps;\\n\\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.bps = pBps;\\n return (activeClaimConditionIndex, conditions, _globalData);\\n }\\n}\",\"keccak256\":\"0x1e5633984124ff64630f990fa899abc71d721ba471fc0fa253fa5e06ba28d23d\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/IDropERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDropERC721 {\\n // This struct describes a single claim condition\\n struct ClaimCondition {\\n uint256 startTimestamp;\\n uint256 maxClaimableSupply;\\n uint256 supplyClaimed;\\n uint256 quantityLimitPerWallet;\\n bytes32 merkleRoot;\\n uint256 pricePerToken;\\n address currency;\\n string metadata;\\n }\\n\\n // Events\\n event ClaimConditionsUpdated(\\n ClaimCondition[] claimConditions,\\n bool resetEligibility\\n );\\n event TokensClaimed(\\n uint256 indexed claimConditionIndex,\\n address indexed claimer,\\n address indexed receiver,\\n uint256 startTokenId,\\n uint256 quantityClaimed\\n );\\n\\n // View functions for global data\\n function totalMinted() external view returns (uint256);\\n function totalSupply() external view returns (uint256);\\n function maxTotalSupply() external view returns (uint256);\\n function nextTokenIdToMint() external view returns (uint256);\\n function nextTokenIdToClaim() external view returns (uint256);\\n function name() external view returns (string memory);\\n function symbol() external view returns (string memory);\\n function contractURI() external view returns (string memory);\\n function getBaseURICount() external view returns (uint256);\\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\\n function getPlatformFeeInfo() external view returns (address, uint16);\\n\\n // Specific claim condition methods\\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\\n function getActiveClaimConditionId() external view returns (uint256);\\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x78c04c177793bc91b8c4f7efe8bd7c163ca4cbdb5a19f88fe71309a075f2f415\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506113ab806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 138, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 141, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 566, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 130, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 685, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native1", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 687, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native2", + "offset": 0, + "slot": "102", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/chiliz_testnet/DropERC721Reader_Proxy.json b/projects/thridweb-query/deployments/chiliz_testnet/DropERC721Reader_Proxy.json new file mode 100644 index 000000000..17ead08a5 --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz_testnet/DropERC721Reader_Proxy.json @@ -0,0 +1,288 @@ +{ + "address": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "receipt": { + "to": null, + "from": "0x0CA38eAc26A4D0F17F7f323189282e2c0d8259bD", + "contractAddress": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "transactionIndex": 0, + "gasUsed": "849900", + "logsBloom": "0x00000000200000000000000000000000400010000200000000800001000000000000000000000000000000000000000000000000000808000000000000000000000100000000000000000000000002000421000000000000000000000000000000000000020000000000000000000800000000800000000008000000000000400000000000000000000000000000000000000800000080000000000000800000000000000000000000000040000400000000000000000000000000000000000000000020000000000000000000140000000000000400000000000000040020000000000000000000000000000000000000000000000000000004000000000000", + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6", + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 13879931, + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "address": "0x0000000000000000000000000000000000007005", + "topics": [ + "0x33c981baba081f8fd2c52ac6ad1ea95b6814b4376640f55689051f6584729688", + "0x0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd" + ], + "data": "0x0000000000000000000000003a1eb96dd91d78359b97c12ff02e421e1f8001e0", + "logIndex": 0, + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6" + }, + { + "transactionIndex": 0, + "blockNumber": 13879931, + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "address": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000f7001f38e6d4feaaaa67cba4499b26509657dc45" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6" + }, + { + "transactionIndex": 0, + "blockNumber": 13879931, + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "address": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6" + }, + { + "transactionIndex": 0, + "blockNumber": 13879931, + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "address": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd", + "0x0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6" + }, + { + "transactionIndex": 0, + "blockNumber": 13879931, + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "address": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 4, + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6" + }, + { + "transactionIndex": 0, + "blockNumber": 13879931, + "transactionHash": "0x7626d28bdedad22e1406f12ff72bf35a6c35d94883d43ad4be563199c107c88b", + "address": "0x3a1eB96dd91d78359b97C12ff02e421E1f8001e0", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000641a60302f6808c020dbd7fdb07a03cad91d554a", + "logIndex": 5, + "blockHash": "0xc9f31d494320ec1ada5b3e2036c6003fbb9505333d54c5da948d52b693d97bf6" + } + ], + "blockNumber": 13879931, + "cumulativeGasUsed": "849900", + "status": 1, + "byzantium": true + }, + "args": [ + "0xF7001f38e6D4FEAaaA67CbA4499B26509657dc45", + "0x641a60302f6808c020DbD7fdb07A03cAd91D554A", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000000ca38eac26a4d0f17f7f323189282e2c0d8259bd" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/chiliz_testnet/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json b/projects/thridweb-query/deployments/chiliz_testnet/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json new file mode 100644 index 000000000..060ca3f6a --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz_testnet/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n struct FeeData {\n address recipient;\n uint256 bps;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n _globalData.maxTotalSupply = drop.maxTotalSupply();\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n _globalData.baseURICount = drop.getBaseURICount();\n _globalData.blockTimeStamp = block.timestamp;\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.bps = rBps;\n\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.bps = pBps;\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeInfo() external view returns (address, uint16);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/chiliz_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/thridweb-query/deployments/chiliz_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/thridweb-query/deployments/chiliz_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file From b12217603060c8950136b76d465f334ed22e8325 Mon Sep 17 00:00:00 2001 From: Eugene Nacu Date: Thu, 16 May 2024 18:55:51 +0100 Subject: [PATCH 16/25] chore: deployed create2 factory to lisk --- .../deploy-proxy/deployments/lisk/.chainId | 1 + .../lisk/ImmutableCreate2Factory.json | 115 ++++++++++++++++++ .../47c9583a7ef7353685a643d84df47830.json | 29 +++++ 3 files changed, 145 insertions(+) create mode 100644 projects/deploy-proxy/deployments/lisk/.chainId create mode 100644 projects/deploy-proxy/deployments/lisk/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/lisk/solcInputs/47c9583a7ef7353685a643d84df47830.json diff --git a/projects/deploy-proxy/deployments/lisk/.chainId b/projects/deploy-proxy/deployments/lisk/.chainId new file mode 100644 index 000000000..163dda977 --- /dev/null +++ b/projects/deploy-proxy/deployments/lisk/.chainId @@ -0,0 +1 @@ +1135 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/lisk/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/lisk/ImmutableCreate2Factory.json new file mode 100644 index 000000000..811d0e122 --- /dev/null +++ b/projects/deploy-proxy/deployments/lisk/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xb0bb56d469efcaa1fcc4f8aeced87311a5f059ba9ae2d448354c05cc088a5a86", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 1, + "gasUsed": "504221", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xe0cf88d18d70d3f8f0ec7247e8b11ca3bb6a5e1c87d890e765b6ab05f4e2a460", + "transactionHash": "0xb0bb56d469efcaa1fcc4f8aeced87311a5f059ba9ae2d448354c05cc088a5a86", + "logs": [], + "blockNumber": 576675, + "cumulativeGasUsed": "548072", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/lisk/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/lisk/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/lisk/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file From 6c8332e435b3d0a04d44160b364a570920904d77 Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Fri, 7 Jun 2024 13:57:57 +0100 Subject: [PATCH 17/25] feat: 3dweb reader for base --- .../thridweb-query/deployments/base/.chainId | 1 + .../deployments/base/DefaultProxyAdmin.json | 259 ++++++++ .../deployments/base/DropERC721Reader.json | 570 ++++++++++++++++++ .../base/DropERC721Reader_Implementation.json | 427 +++++++++++++ .../base/DropERC721Reader_Proxy.json | 275 +++++++++ .../2bdb5d76d23966dfb9b70ec2522d23dc.json | 56 ++ .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 +++++ .../deployments/base_sepolia/.chainId | 1 + .../base_sepolia/DefaultProxyAdmin.json | 259 ++++++++ .../base_sepolia/DropERC721Reader.json | 570 ++++++++++++++++++ .../DropERC721Reader_Implementation.json | 427 +++++++++++++ .../base_sepolia/DropERC721Reader_Proxy.json | 275 +++++++++ .../2bdb5d76d23966dfb9b70ec2522d23dc.json | 56 ++ .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 +++++ 14 files changed, 3462 insertions(+) create mode 100644 projects/thridweb-query/deployments/base/.chainId create mode 100644 projects/thridweb-query/deployments/base/DefaultProxyAdmin.json create mode 100644 projects/thridweb-query/deployments/base/DropERC721Reader.json create mode 100644 projects/thridweb-query/deployments/base/DropERC721Reader_Implementation.json create mode 100644 projects/thridweb-query/deployments/base/DropERC721Reader_Proxy.json create mode 100644 projects/thridweb-query/deployments/base/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json create mode 100644 projects/thridweb-query/deployments/base/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json create mode 100644 projects/thridweb-query/deployments/base_sepolia/.chainId create mode 100644 projects/thridweb-query/deployments/base_sepolia/DefaultProxyAdmin.json create mode 100644 projects/thridweb-query/deployments/base_sepolia/DropERC721Reader.json create mode 100644 projects/thridweb-query/deployments/base_sepolia/DropERC721Reader_Implementation.json create mode 100644 projects/thridweb-query/deployments/base_sepolia/DropERC721Reader_Proxy.json create mode 100644 projects/thridweb-query/deployments/base_sepolia/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json create mode 100644 projects/thridweb-query/deployments/base_sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json diff --git a/projects/thridweb-query/deployments/base/.chainId b/projects/thridweb-query/deployments/base/.chainId new file mode 100644 index 000000000..2a0c26389 --- /dev/null +++ b/projects/thridweb-query/deployments/base/.chainId @@ -0,0 +1 @@ +8453 \ No newline at end of file diff --git a/projects/thridweb-query/deployments/base/DefaultProxyAdmin.json b/projects/thridweb-query/deployments/base/DefaultProxyAdmin.json new file mode 100644 index 000000000..7da34ac72 --- /dev/null +++ b/projects/thridweb-query/deployments/base/DefaultProxyAdmin.json @@ -0,0 +1,259 @@ +{ + "address": "0x3db982bBdBC7EDdD258B10Ed7AAE65C82Fdcc73c", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0x0606997888dfe29cf297eb116dbe90615f8924d33a55257d7d2b11397d84a0c1", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x3db982bBdBC7EDdD258B10Ed7AAE65C82Fdcc73c", + "transactionIndex": 71, + "gasUsed": "644163", + "logsBloom": "0x00000000000000000000000400000000000000000000000000800000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000000000000000000024000000000000000000800000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x7db8895bd5290f8fae18cd5b9353d66d5e825c0c6e22d7449d15e290f8001fd9", + "transactionHash": "0x0606997888dfe29cf297eb116dbe90615f8924d33a55257d7d2b11397d84a0c1", + "logs": [ + { + "transactionIndex": 71, + "blockNumber": 15453205, + "transactionHash": "0x0606997888dfe29cf297eb116dbe90615f8924d33a55257d7d2b11397d84a0c1", + "address": "0x3db982bBdBC7EDdD258B10Ed7AAE65C82Fdcc73c", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 240, + "blockHash": "0x7db8895bd5290f8fae18cd5b9353d66d5e825c0c6e22d7449d15e290f8001fd9" + } + ], + "blockNumber": 15453205, + "cumulativeGasUsed": "8707948", + "status": 1, + "byzantium": true + }, + "args": [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/base/DropERC721Reader.json b/projects/thridweb-query/deployments/base/DropERC721Reader.json new file mode 100644 index 000000000..59da01f3b --- /dev/null +++ b/projects/thridweb-query/deployments/base/DropERC721Reader.json @@ -0,0 +1,570 @@ +{ + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "transactionIndex": 54, + "gasUsed": "797894", + "logsBloom": "0x000000000000002000000000000000004000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200020800010000000000000000000000000000000000000200000000000000000008004000008000000000200000000000005000000000000000000000000000000000000000000000800000000000008000000000000000000400000000000004000000000000000000000000000000010000000000200000000000000000000c0000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xa3ac69a64bf5dc11eaf9fa1e86aa92ac0f81d3ef46d859cd5332ebf9ed7a15d1", + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "logs": [ + { + "transactionIndex": 54, + "blockNumber": 15453211, + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000000a05c1027474f5c2a5f1f392da7d0a7a3e04f496" + ], + "data": "0x", + "logIndex": 192, + "blockHash": "0xa3ac69a64bf5dc11eaf9fa1e86aa92ac0f81d3ef46d859cd5332ebf9ed7a15d1" + }, + { + "transactionIndex": 54, + "blockNumber": 15453211, + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 193, + "blockHash": "0xa3ac69a64bf5dc11eaf9fa1e86aa92ac0f81d3ef46d859cd5332ebf9ed7a15d1" + }, + { + "transactionIndex": 54, + "blockNumber": 15453211, + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 194, + "blockHash": "0xa3ac69a64bf5dc11eaf9fa1e86aa92ac0f81d3ef46d859cd5332ebf9ed7a15d1" + }, + { + "transactionIndex": 54, + "blockNumber": 15453211, + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 195, + "blockHash": "0xa3ac69a64bf5dc11eaf9fa1e86aa92ac0f81d3ef46d859cd5332ebf9ed7a15d1" + }, + { + "transactionIndex": 54, + "blockNumber": 15453211, + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000003db982bbdbc7eddd258b10ed7aae65c82fdcc73c", + "logIndex": 196, + "blockHash": "0xa3ac69a64bf5dc11eaf9fa1e86aa92ac0f81d3ef46d859cd5332ebf9ed7a15d1" + } + ], + "blockNumber": 15453211, + "cumulativeGasUsed": "8045608", + "status": 1, + "byzantium": true + }, + "args": [ + "0x0a05C1027474f5c2a5F1f392DA7D0a7A3e04f496", + "0x3db982bBdBC7EDdD258B10Ed7AAE65C82Fdcc73c", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x0000000000000000000000000000000000000000", + "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ] + }, + "implementation": "0x0a05C1027474f5c2a5F1f392DA7D0a7A3e04f496", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/base/DropERC721Reader_Implementation.json b/projects/thridweb-query/deployments/base/DropERC721Reader_Implementation.json new file mode 100644 index 000000000..ee4f11b49 --- /dev/null +++ b/projects/thridweb-query/deployments/base/DropERC721Reader_Implementation.json @@ -0,0 +1,427 @@ +{ + "address": "0x0a05C1027474f5c2a5F1f392DA7D0a7A3e04f496", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x9f3f782efb8f69d5f7216411ef95b46d53a3cdf7d5a6ba07fbb15108c9d8535e", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x0a05C1027474f5c2a5F1f392DA7D0a7A3e04f496", + "transactionIndex": 60, + "gasUsed": "1140457", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xcfc23d029d893b4ae4f22c9188b8d3daff340257a06b578bbb73e342f259cdc8", + "transactionHash": "0x9f3f782efb8f69d5f7216411ef95b46d53a3cdf7d5a6ba07fbb15108c9d8535e", + "logs": [], + "blockNumber": 15453208, + "cumulativeGasUsed": "9517715", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "2bdb5d76d23966dfb9b70ec2522d23dc", + "metadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dropERC721\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"}],\"name\":\"getAllData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeClaimConditionIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxClaimableSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyClaimed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantityLimitPerWallet\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"pricePerToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"struct IDropERC721.ClaimCondition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalMinted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedByUser\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToClaim\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"baseURICount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockTimeStamp\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"defaultRoyaltyInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"platformFeeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct DropERC721Reader.GlobalData\",\"name\":\"globalData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_native1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_native2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/drop-reader/DropERC721Reader.sol\":\"DropERC721Reader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\\n * initialization step. This is essential to configure modules that are added through upgrades and that require\\n * initialization.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC20 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/20\\n */\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address who) external view returns (uint256);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n function transferFrom(\\n address from,\\n address to,\\n uint256 value\\n ) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5bdd9dd97ba7d9d7c9a2953db287e4d9d7fa93a27a96bc2e72a8da4919b6f7ff\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/DropERC721Reader.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.11;\\n\\n/// @author rarible\\n\\n// /$$$$$$$ /$$ /$$ /$$\\n// | $$__ $$ |__/| $$ | $$\\n// | $$ \\\\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\\n// | $$__ $$ /$$$$$$$| $$ \\\\__/| $$| $$ \\\\ $$| $$| $$$$$$$$\\n// | $$ \\\\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\\n// |__/ |__/ \\\\_______/|__/ |__/|_______/ |__/ \\\\_______/\\n\\n\\n// ========== Features ==========\\n\\nimport \\\"hardhat/console.sol\\\";\\nimport \\\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./IDropERC721.sol\\\";\\n\\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\\n\\n struct FeeData {\\n address recipient;\\n uint256 bps;\\n }\\n\\n struct GlobalData {\\n uint256 totalMinted;\\n uint256 claimedByUser;\\n uint256 totalSupply;\\n uint256 maxTotalSupply;\\n uint256 nextTokenIdToMint;\\n uint256 nextTokenIdToClaim;\\n string name;\\n string symbol;\\n string contractURI;\\n uint256 baseURICount;\\n uint256 userBalance;\\n uint256 blockTimeStamp;\\n FeeData defaultRoyaltyInfo;\\n FeeData platformFeeInfo;\\n }\\n\\n address public native1;\\n address public native2;\\n\\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\\n __Ownable_init();\\n native1 = _native1;\\n native2 = _native2;\\n // Transfer ownership to the initial owner provided\\n _transferOwnership(initialOwner);\\n }\\n\\n function getAllData(\\n address _dropERC721,\\n address _claimer\\n ) public view returns (\\n uint256 activeClaimConditionIndex,\\n IDropERC721.ClaimCondition[] memory conditions,\\n GlobalData memory globalData\\n ) {\\n IDropERC721 drop = IDropERC721(_dropERC721);\\n\\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\\n uint256 _claimedByUser = 0;\\n if(stopConditionIndex != 0) {\\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\\n activeClaimConditionIndex = _activeClaimConditionIndex;\\n } catch {\\n activeClaimConditionIndex = 0;\\n }\\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\\n \\n for (uint i = 0; i < stopConditionIndex; i++) {\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\\n conditions[i] = condition;\\n }\\n }\\n\\n DropERC721Reader.GlobalData memory _globalData;\\n if(stopConditionIndex > 0) {\\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\\n if(condition.currency == native1 || condition.currency == native2) {\\n _globalData.userBalance = _claimer.balance;\\n } else {\\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\\n }\\n\\n }\\n\\n _globalData.totalMinted = drop.totalMinted();\\n _globalData.claimedByUser = _claimedByUser;\\n _globalData.totalSupply = drop.totalSupply();\\n _globalData.maxTotalSupply = drop.maxTotalSupply();\\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\\n _globalData.name = drop.name();\\n _globalData.symbol = drop.symbol();\\n _globalData.contractURI = drop.contractURI();\\n _globalData.baseURICount = drop.getBaseURICount();\\n _globalData.blockTimeStamp = block.timestamp;\\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\\n _globalData.defaultRoyaltyInfo.bps = rBps;\\n\\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.bps = pBps;\\n return (activeClaimConditionIndex, conditions, _globalData);\\n }\\n}\",\"keccak256\":\"0x1e5633984124ff64630f990fa899abc71d721ba471fc0fa253fa5e06ba28d23d\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/IDropERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDropERC721 {\\n // This struct describes a single claim condition\\n struct ClaimCondition {\\n uint256 startTimestamp;\\n uint256 maxClaimableSupply;\\n uint256 supplyClaimed;\\n uint256 quantityLimitPerWallet;\\n bytes32 merkleRoot;\\n uint256 pricePerToken;\\n address currency;\\n string metadata;\\n }\\n\\n // Events\\n event ClaimConditionsUpdated(\\n ClaimCondition[] claimConditions,\\n bool resetEligibility\\n );\\n event TokensClaimed(\\n uint256 indexed claimConditionIndex,\\n address indexed claimer,\\n address indexed receiver,\\n uint256 startTokenId,\\n uint256 quantityClaimed\\n );\\n\\n // View functions for global data\\n function totalMinted() external view returns (uint256);\\n function totalSupply() external view returns (uint256);\\n function maxTotalSupply() external view returns (uint256);\\n function nextTokenIdToMint() external view returns (uint256);\\n function nextTokenIdToClaim() external view returns (uint256);\\n function name() external view returns (string memory);\\n function symbol() external view returns (string memory);\\n function contractURI() external view returns (string memory);\\n function getBaseURICount() external view returns (uint256);\\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\\n function getPlatformFeeInfo() external view returns (address, uint16);\\n\\n // Specific claim condition methods\\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\\n function getActiveClaimConditionId() external view returns (uint256);\\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x78c04c177793bc91b8c4f7efe8bd7c163ca4cbdb5a19f88fe71309a075f2f415\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506113ab806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 138, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 141, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 566, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 130, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 685, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native1", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 687, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native2", + "offset": 0, + "slot": "102", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/base/DropERC721Reader_Proxy.json b/projects/thridweb-query/deployments/base/DropERC721Reader_Proxy.json new file mode 100644 index 000000000..412f50338 --- /dev/null +++ b/projects/thridweb-query/deployments/base/DropERC721Reader_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "transactionIndex": 54, + "gasUsed": "797894", + "logsBloom": "0x000000000000002000000000000000004000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200020800010000000000000000000000000000000000000200000000000000000008004000008000000000200000000000005000000000000000000000000000000000000000000000800000000000008000000000000000000400000000000004000000000000000000000000000000010000000000200000000000000000000c0000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xa3ac69a64bf5dc11eaf9fa1e86aa92ac0f81d3ef46d859cd5332ebf9ed7a15d1", + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "logs": [ + { + "transactionIndex": 54, + "blockNumber": 15453211, + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000000a05c1027474f5c2a5f1f392da7d0a7a3e04f496" + ], + "data": "0x", + "logIndex": 192, + "blockHash": "0xa3ac69a64bf5dc11eaf9fa1e86aa92ac0f81d3ef46d859cd5332ebf9ed7a15d1" + }, + { + "transactionIndex": 54, + "blockNumber": 15453211, + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 193, + "blockHash": "0xa3ac69a64bf5dc11eaf9fa1e86aa92ac0f81d3ef46d859cd5332ebf9ed7a15d1" + }, + { + "transactionIndex": 54, + "blockNumber": 15453211, + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 194, + "blockHash": "0xa3ac69a64bf5dc11eaf9fa1e86aa92ac0f81d3ef46d859cd5332ebf9ed7a15d1" + }, + { + "transactionIndex": 54, + "blockNumber": 15453211, + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 195, + "blockHash": "0xa3ac69a64bf5dc11eaf9fa1e86aa92ac0f81d3ef46d859cd5332ebf9ed7a15d1" + }, + { + "transactionIndex": 54, + "blockNumber": 15453211, + "transactionHash": "0x5e45aa165b0076f21c1a89e05844c9d940bb715f3cf370626985330dba58ac0d", + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000003db982bbdbc7eddd258b10ed7aae65c82fdcc73c", + "logIndex": 196, + "blockHash": "0xa3ac69a64bf5dc11eaf9fa1e86aa92ac0f81d3ef46d859cd5332ebf9ed7a15d1" + } + ], + "blockNumber": 15453211, + "cumulativeGasUsed": "8045608", + "status": 1, + "byzantium": true + }, + "args": [ + "0x0a05C1027474f5c2a5F1f392DA7D0a7A3e04f496", + "0x3db982bBdBC7EDdD258B10Ed7AAE65C82Fdcc73c", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/base/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json b/projects/thridweb-query/deployments/base/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json new file mode 100644 index 000000000..060ca3f6a --- /dev/null +++ b/projects/thridweb-query/deployments/base/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n struct FeeData {\n address recipient;\n uint256 bps;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n _globalData.maxTotalSupply = drop.maxTotalSupply();\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n _globalData.baseURICount = drop.getBaseURICount();\n _globalData.blockTimeStamp = block.timestamp;\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.bps = rBps;\n\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.bps = pBps;\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeInfo() external view returns (address, uint16);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/base/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/thridweb-query/deployments/base/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/thridweb-query/deployments/base/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/base_sepolia/.chainId b/projects/thridweb-query/deployments/base_sepolia/.chainId new file mode 100644 index 000000000..667f99daf --- /dev/null +++ b/projects/thridweb-query/deployments/base_sepolia/.chainId @@ -0,0 +1 @@ +84532 \ No newline at end of file diff --git a/projects/thridweb-query/deployments/base_sepolia/DefaultProxyAdmin.json b/projects/thridweb-query/deployments/base_sepolia/DefaultProxyAdmin.json new file mode 100644 index 000000000..96a5471d5 --- /dev/null +++ b/projects/thridweb-query/deployments/base_sepolia/DefaultProxyAdmin.json @@ -0,0 +1,259 @@ +{ + "address": "0x12B372153249F006F756d0668fCDBD8fbD8b0a15", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0xee6016704ff4fc073857f579c012e39ddcb57ec1e9f58a9a86797e21a0165725", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x12B372153249F006F756d0668fCDBD8fbD8b0a15", + "transactionIndex": 3, + "gasUsed": "644163", + "logsBloom": "0x00000000000000000000000000020000000000000000000000800000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000080001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000500000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x442fc753aec35cb9bee87df6246a84732fa96348bd31b0c12ad3998a48342541", + "transactionHash": "0xee6016704ff4fc073857f579c012e39ddcb57ec1e9f58a9a86797e21a0165725", + "logs": [ + { + "transactionIndex": 3, + "blockNumber": 10962052, + "transactionHash": "0xee6016704ff4fc073857f579c012e39ddcb57ec1e9f58a9a86797e21a0165725", + "address": "0x12B372153249F006F756d0668fCDBD8fbD8b0a15", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x442fc753aec35cb9bee87df6246a84732fa96348bd31b0c12ad3998a48342541" + } + ], + "blockNumber": 10962052, + "cumulativeGasUsed": "861204", + "status": 1, + "byzantium": true + }, + "args": [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/base_sepolia/DropERC721Reader.json b/projects/thridweb-query/deployments/base_sepolia/DropERC721Reader.json new file mode 100644 index 000000000..bebf540a5 --- /dev/null +++ b/projects/thridweb-query/deployments/base_sepolia/DropERC721Reader.json @@ -0,0 +1,570 @@ +{ + "address": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "transactionIndex": 5, + "gasUsed": "797894", + "logsBloom": "0x000008000000000000000000002000004000000000000000008000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000020800010000000000000000000000000000000000000200000000000000000008000000008000000000000000000000005000000000000000000000000040000000000000000000800000000000008000000000000000000000000000000004000000000000000000000000000000001000000000200000000000000000000c0000000000040400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x835419aa42728683422d7ccb4b85d1ebf99b03161b7d22d5ef21230b4432c804", + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "logs": [ + { + "transactionIndex": 5, + "blockNumber": 10962057, + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "address": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000004e045abf1e239bfa224c8dcb8f889c3d447d3804" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0x835419aa42728683422d7ccb4b85d1ebf99b03161b7d22d5ef21230b4432c804" + }, + { + "transactionIndex": 5, + "blockNumber": 10962057, + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "address": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 5, + "blockHash": "0x835419aa42728683422d7ccb4b85d1ebf99b03161b7d22d5ef21230b4432c804" + }, + { + "transactionIndex": 5, + "blockNumber": 10962057, + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "address": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 6, + "blockHash": "0x835419aa42728683422d7ccb4b85d1ebf99b03161b7d22d5ef21230b4432c804" + }, + { + "transactionIndex": 5, + "blockNumber": 10962057, + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "address": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 7, + "blockHash": "0x835419aa42728683422d7ccb4b85d1ebf99b03161b7d22d5ef21230b4432c804" + }, + { + "transactionIndex": 5, + "blockNumber": 10962057, + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "address": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012b372153249f006f756d0668fcdbd8fbd8b0a15", + "logIndex": 8, + "blockHash": "0x835419aa42728683422d7ccb4b85d1ebf99b03161b7d22d5ef21230b4432c804" + } + ], + "blockNumber": 10962057, + "cumulativeGasUsed": "1096916", + "status": 1, + "byzantium": true + }, + "args": [ + "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "0x12B372153249F006F756d0668fCDBD8fbD8b0a15", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x0000000000000000000000000000000000000000", + "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ] + }, + "implementation": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/base_sepolia/DropERC721Reader_Implementation.json b/projects/thridweb-query/deployments/base_sepolia/DropERC721Reader_Implementation.json new file mode 100644 index 000000000..ae5bee01e --- /dev/null +++ b/projects/thridweb-query/deployments/base_sepolia/DropERC721Reader_Implementation.json @@ -0,0 +1,427 @@ +{ + "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x1b3f1712b47eeb998b76c07a6585c1f197329d2824cb05e9837ecf071b6a1294", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "transactionIndex": 10, + "gasUsed": "1140457", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc4cc88f26356a511acb4c18d1e1ed83116b38c32a7b4365db06dada176e4081d", + "transactionHash": "0x1b3f1712b47eeb998b76c07a6585c1f197329d2824cb05e9837ecf071b6a1294", + "logs": [], + "blockNumber": 10962054, + "cumulativeGasUsed": "1447714", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "2bdb5d76d23966dfb9b70ec2522d23dc", + "metadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dropERC721\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"}],\"name\":\"getAllData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeClaimConditionIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxClaimableSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyClaimed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantityLimitPerWallet\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"pricePerToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"struct IDropERC721.ClaimCondition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalMinted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedByUser\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToClaim\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"baseURICount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockTimeStamp\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"defaultRoyaltyInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"platformFeeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct DropERC721Reader.GlobalData\",\"name\":\"globalData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_native1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_native2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/drop-reader/DropERC721Reader.sol\":\"DropERC721Reader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\\n * initialization step. This is essential to configure modules that are added through upgrades and that require\\n * initialization.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC20 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/20\\n */\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address who) external view returns (uint256);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n function transferFrom(\\n address from,\\n address to,\\n uint256 value\\n ) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5bdd9dd97ba7d9d7c9a2953db287e4d9d7fa93a27a96bc2e72a8da4919b6f7ff\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/DropERC721Reader.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.11;\\n\\n/// @author rarible\\n\\n// /$$$$$$$ /$$ /$$ /$$\\n// | $$__ $$ |__/| $$ | $$\\n// | $$ \\\\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\\n// | $$__ $$ /$$$$$$$| $$ \\\\__/| $$| $$ \\\\ $$| $$| $$$$$$$$\\n// | $$ \\\\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\\n// |__/ |__/ \\\\_______/|__/ |__/|_______/ |__/ \\\\_______/\\n\\n\\n// ========== Features ==========\\n\\nimport \\\"hardhat/console.sol\\\";\\nimport \\\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./IDropERC721.sol\\\";\\n\\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\\n\\n struct FeeData {\\n address recipient;\\n uint256 bps;\\n }\\n\\n struct GlobalData {\\n uint256 totalMinted;\\n uint256 claimedByUser;\\n uint256 totalSupply;\\n uint256 maxTotalSupply;\\n uint256 nextTokenIdToMint;\\n uint256 nextTokenIdToClaim;\\n string name;\\n string symbol;\\n string contractURI;\\n uint256 baseURICount;\\n uint256 userBalance;\\n uint256 blockTimeStamp;\\n FeeData defaultRoyaltyInfo;\\n FeeData platformFeeInfo;\\n }\\n\\n address public native1;\\n address public native2;\\n\\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\\n __Ownable_init();\\n native1 = _native1;\\n native2 = _native2;\\n // Transfer ownership to the initial owner provided\\n _transferOwnership(initialOwner);\\n }\\n\\n function getAllData(\\n address _dropERC721,\\n address _claimer\\n ) public view returns (\\n uint256 activeClaimConditionIndex,\\n IDropERC721.ClaimCondition[] memory conditions,\\n GlobalData memory globalData\\n ) {\\n IDropERC721 drop = IDropERC721(_dropERC721);\\n\\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\\n uint256 _claimedByUser = 0;\\n if(stopConditionIndex != 0) {\\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\\n activeClaimConditionIndex = _activeClaimConditionIndex;\\n } catch {\\n activeClaimConditionIndex = 0;\\n }\\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\\n \\n for (uint i = 0; i < stopConditionIndex; i++) {\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\\n conditions[i] = condition;\\n }\\n }\\n\\n DropERC721Reader.GlobalData memory _globalData;\\n if(stopConditionIndex > 0) {\\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\\n if(condition.currency == native1 || condition.currency == native2) {\\n _globalData.userBalance = _claimer.balance;\\n } else {\\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\\n }\\n\\n }\\n\\n _globalData.totalMinted = drop.totalMinted();\\n _globalData.claimedByUser = _claimedByUser;\\n _globalData.totalSupply = drop.totalSupply();\\n _globalData.maxTotalSupply = drop.maxTotalSupply();\\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\\n _globalData.name = drop.name();\\n _globalData.symbol = drop.symbol();\\n _globalData.contractURI = drop.contractURI();\\n _globalData.baseURICount = drop.getBaseURICount();\\n _globalData.blockTimeStamp = block.timestamp;\\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\\n _globalData.defaultRoyaltyInfo.bps = rBps;\\n\\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.bps = pBps;\\n return (activeClaimConditionIndex, conditions, _globalData);\\n }\\n}\",\"keccak256\":\"0x1e5633984124ff64630f990fa899abc71d721ba471fc0fa253fa5e06ba28d23d\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/IDropERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDropERC721 {\\n // This struct describes a single claim condition\\n struct ClaimCondition {\\n uint256 startTimestamp;\\n uint256 maxClaimableSupply;\\n uint256 supplyClaimed;\\n uint256 quantityLimitPerWallet;\\n bytes32 merkleRoot;\\n uint256 pricePerToken;\\n address currency;\\n string metadata;\\n }\\n\\n // Events\\n event ClaimConditionsUpdated(\\n ClaimCondition[] claimConditions,\\n bool resetEligibility\\n );\\n event TokensClaimed(\\n uint256 indexed claimConditionIndex,\\n address indexed claimer,\\n address indexed receiver,\\n uint256 startTokenId,\\n uint256 quantityClaimed\\n );\\n\\n // View functions for global data\\n function totalMinted() external view returns (uint256);\\n function totalSupply() external view returns (uint256);\\n function maxTotalSupply() external view returns (uint256);\\n function nextTokenIdToMint() external view returns (uint256);\\n function nextTokenIdToClaim() external view returns (uint256);\\n function name() external view returns (string memory);\\n function symbol() external view returns (string memory);\\n function contractURI() external view returns (string memory);\\n function getBaseURICount() external view returns (uint256);\\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\\n function getPlatformFeeInfo() external view returns (address, uint16);\\n\\n // Specific claim condition methods\\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\\n function getActiveClaimConditionId() external view returns (uint256);\\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x78c04c177793bc91b8c4f7efe8bd7c163ca4cbdb5a19f88fe71309a075f2f415\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506113ab806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 138, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 141, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 566, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 130, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 685, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native1", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 687, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native2", + "offset": 0, + "slot": "102", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/base_sepolia/DropERC721Reader_Proxy.json b/projects/thridweb-query/deployments/base_sepolia/DropERC721Reader_Proxy.json new file mode 100644 index 000000000..269fdd7d8 --- /dev/null +++ b/projects/thridweb-query/deployments/base_sepolia/DropERC721Reader_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "transactionIndex": 5, + "gasUsed": "797894", + "logsBloom": "0x000008000000000000000000002000004000000000000000008000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000020800010000000000000000000000000000000000000200000000000000000008000000008000000000000000000000005000000000000000000000000040000000000000000000800000000000008000000000000000000000000000000004000000000000000000000000000000001000000000200000000000000000000c0000000000040400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x835419aa42728683422d7ccb4b85d1ebf99b03161b7d22d5ef21230b4432c804", + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "logs": [ + { + "transactionIndex": 5, + "blockNumber": 10962057, + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "address": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000004e045abf1e239bfa224c8dcb8f889c3d447d3804" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0x835419aa42728683422d7ccb4b85d1ebf99b03161b7d22d5ef21230b4432c804" + }, + { + "transactionIndex": 5, + "blockNumber": 10962057, + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "address": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 5, + "blockHash": "0x835419aa42728683422d7ccb4b85d1ebf99b03161b7d22d5ef21230b4432c804" + }, + { + "transactionIndex": 5, + "blockNumber": 10962057, + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "address": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 6, + "blockHash": "0x835419aa42728683422d7ccb4b85d1ebf99b03161b7d22d5ef21230b4432c804" + }, + { + "transactionIndex": 5, + "blockNumber": 10962057, + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "address": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 7, + "blockHash": "0x835419aa42728683422d7ccb4b85d1ebf99b03161b7d22d5ef21230b4432c804" + }, + { + "transactionIndex": 5, + "blockNumber": 10962057, + "transactionHash": "0x52a84c8bcb8e455c3287ac96a7aa41d4e6548dfec6f41a7463693cc2012cae29", + "address": "0x47F6d59216aAdb2e5aA6bFAf0b06d790EdC35118", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012b372153249f006f756d0668fcdbd8fbd8b0a15", + "logIndex": 8, + "blockHash": "0x835419aa42728683422d7ccb4b85d1ebf99b03161b7d22d5ef21230b4432c804" + } + ], + "blockNumber": 10962057, + "cumulativeGasUsed": "1096916", + "status": 1, + "byzantium": true + }, + "args": [ + "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "0x12B372153249F006F756d0668fCDBD8fbD8b0a15", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/base_sepolia/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json b/projects/thridweb-query/deployments/base_sepolia/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json new file mode 100644 index 000000000..060ca3f6a --- /dev/null +++ b/projects/thridweb-query/deployments/base_sepolia/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n struct FeeData {\n address recipient;\n uint256 bps;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n _globalData.maxTotalSupply = drop.maxTotalSupply();\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n _globalData.baseURICount = drop.getBaseURICount();\n _globalData.blockTimeStamp = block.timestamp;\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.bps = rBps;\n\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.bps = pBps;\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeInfo() external view returns (address, uint16);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/base_sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/thridweb-query/deployments/base_sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/thridweb-query/deployments/base_sepolia/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file From b76a5da408ef8ee69816052be32bb693402bc0a3 Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Wed, 3 Jul 2024 11:54:30 +0100 Subject: [PATCH 18/25] feat: add lightlink for thirdweb query --- .../deployments/lightlink/.chainId | 1 + .../lightlink/DefaultProxyAdmin.json | 259 ++++++++ .../lightlink/DropERC721Reader.json | 570 ++++++++++++++++++ .../DropERC721Reader_Implementation.json | 427 +++++++++++++ .../lightlink/DropERC721Reader_Proxy.json | 275 +++++++++ .../2bdb5d76d23966dfb9b70ec2522d23dc.json | 56 ++ .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 +++++ .../deployments/lightlink_pegasus/.chainId | 1 + .../lightlink_pegasus/DefaultProxyAdmin.json | 259 ++++++++ .../lightlink_pegasus/DropERC721Reader.json | 570 ++++++++++++++++++ .../DropERC721Reader_Implementation.json | 427 +++++++++++++ .../DropERC721Reader_Proxy.json | 275 +++++++++ .../2bdb5d76d23966dfb9b70ec2522d23dc.json | 56 ++ .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 +++++ 14 files changed, 3462 insertions(+) create mode 100644 projects/thridweb-query/deployments/lightlink/.chainId create mode 100644 projects/thridweb-query/deployments/lightlink/DefaultProxyAdmin.json create mode 100644 projects/thridweb-query/deployments/lightlink/DropERC721Reader.json create mode 100644 projects/thridweb-query/deployments/lightlink/DropERC721Reader_Implementation.json create mode 100644 projects/thridweb-query/deployments/lightlink/DropERC721Reader_Proxy.json create mode 100644 projects/thridweb-query/deployments/lightlink/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json create mode 100644 projects/thridweb-query/deployments/lightlink/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json create mode 100644 projects/thridweb-query/deployments/lightlink_pegasus/.chainId create mode 100644 projects/thridweb-query/deployments/lightlink_pegasus/DefaultProxyAdmin.json create mode 100644 projects/thridweb-query/deployments/lightlink_pegasus/DropERC721Reader.json create mode 100644 projects/thridweb-query/deployments/lightlink_pegasus/DropERC721Reader_Implementation.json create mode 100644 projects/thridweb-query/deployments/lightlink_pegasus/DropERC721Reader_Proxy.json create mode 100644 projects/thridweb-query/deployments/lightlink_pegasus/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json create mode 100644 projects/thridweb-query/deployments/lightlink_pegasus/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json diff --git a/projects/thridweb-query/deployments/lightlink/.chainId b/projects/thridweb-query/deployments/lightlink/.chainId new file mode 100644 index 000000000..d7e6ae9fa --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink/.chainId @@ -0,0 +1 @@ +1890 \ No newline at end of file diff --git a/projects/thridweb-query/deployments/lightlink/DefaultProxyAdmin.json b/projects/thridweb-query/deployments/lightlink/DefaultProxyAdmin.json new file mode 100644 index 000000000..3d7888814 --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink/DefaultProxyAdmin.json @@ -0,0 +1,259 @@ +{ + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0x7c00490d8188f5ae943c905af170c5ada99ff3e9a490147aedbb3a4400b5e639", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "transactionIndex": 0, + "gasUsed": "644163", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080001000000000000000000000000000000000000020000000000000000000800400000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000001000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x5a3d65a7f2112dbacbc5721bb5b669eee01abb370634575c88ae1d1d11cfac86", + "transactionHash": "0x7c00490d8188f5ae943c905af170c5ada99ff3e9a490147aedbb3a4400b5e639", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 89852426, + "transactionHash": "0x7c00490d8188f5ae943c905af170c5ada99ff3e9a490147aedbb3a4400b5e639", + "address": "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x5a3d65a7f2112dbacbc5721bb5b669eee01abb370634575c88ae1d1d11cfac86" + } + ], + "blockNumber": 89852426, + "cumulativeGasUsed": "644163", + "status": 1, + "byzantium": true + }, + "args": [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/lightlink/DropERC721Reader.json b/projects/thridweb-query/deployments/lightlink/DropERC721Reader.json new file mode 100644 index 000000000..6888c39f4 --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink/DropERC721Reader.json @@ -0,0 +1,570 @@ +{ + "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "transactionIndex": 0, + "gasUsed": "797870", + "logsBloom": "0x000000000000000000004000000000004000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800010000000010000000000000000800000000000200000200000000000008000000008000000000000000000000005000000000000000000000000000000000000000000000800000000000008000000000000000000000000000000004000000000000000000000000004000000000000000200000000000000000000c0000000000000400000000000000000020000010000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x319b0cd1809a6f723ec0c0330e9c264e87ffbaa8b31c496e6cf89adcf8cc1a97", + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 89853308, + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000000c74ed067cea48f1d6f7d00ababa3c1d5b2598b" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x319b0cd1809a6f723ec0c0330e9c264e87ffbaa8b31c496e6cf89adcf8cc1a97" + }, + { + "transactionIndex": 0, + "blockNumber": 89853308, + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x319b0cd1809a6f723ec0c0330e9c264e87ffbaa8b31c496e6cf89adcf8cc1a97" + }, + { + "transactionIndex": 0, + "blockNumber": 89853308, + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x319b0cd1809a6f723ec0c0330e9c264e87ffbaa8b31c496e6cf89adcf8cc1a97" + }, + { + "transactionIndex": 0, + "blockNumber": 89853308, + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x319b0cd1809a6f723ec0c0330e9c264e87ffbaa8b31c496e6cf89adcf8cc1a97" + }, + { + "transactionIndex": 0, + "blockNumber": 89853308, + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1f689646861870d44b33dbbb413fa7d06a2b52f", + "logIndex": 4, + "blockHash": "0x319b0cd1809a6f723ec0c0330e9c264e87ffbaa8b31c496e6cf89adcf8cc1a97" + } + ], + "blockNumber": 89853308, + "cumulativeGasUsed": "797870", + "status": 1, + "byzantium": true + }, + "args": [ + "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x0000000000000000000000000000000000000000", + "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ] + }, + "implementation": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/lightlink/DropERC721Reader_Implementation.json b/projects/thridweb-query/deployments/lightlink/DropERC721Reader_Implementation.json new file mode 100644 index 000000000..a9c9a3a70 --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink/DropERC721Reader_Implementation.json @@ -0,0 +1,427 @@ +{ + "address": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x4bb813b861b4e90fe0fadbf05a335d7a2d88425609e369fc1998d441401e6740", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "transactionIndex": 0, + "gasUsed": "1140457", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x7effa2f2007c44b1c4b8d4ed1e25460fa4f9878ff7b3b1d7d2913b70c0bd2f9e", + "transactionHash": "0x4bb813b861b4e90fe0fadbf05a335d7a2d88425609e369fc1998d441401e6740", + "logs": [], + "blockNumber": 89853038, + "cumulativeGasUsed": "1140457", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "2bdb5d76d23966dfb9b70ec2522d23dc", + "metadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dropERC721\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"}],\"name\":\"getAllData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeClaimConditionIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxClaimableSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyClaimed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantityLimitPerWallet\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"pricePerToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"struct IDropERC721.ClaimCondition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalMinted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedByUser\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToClaim\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"baseURICount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockTimeStamp\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"defaultRoyaltyInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"platformFeeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct DropERC721Reader.GlobalData\",\"name\":\"globalData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_native1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_native2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/drop-reader/DropERC721Reader.sol\":\"DropERC721Reader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\\n * initialization step. This is essential to configure modules that are added through upgrades and that require\\n * initialization.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC20 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/20\\n */\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address who) external view returns (uint256);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n function transferFrom(\\n address from,\\n address to,\\n uint256 value\\n ) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5bdd9dd97ba7d9d7c9a2953db287e4d9d7fa93a27a96bc2e72a8da4919b6f7ff\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/DropERC721Reader.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.11;\\n\\n/// @author rarible\\n\\n// /$$$$$$$ /$$ /$$ /$$\\n// | $$__ $$ |__/| $$ | $$\\n// | $$ \\\\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\\n// | $$__ $$ /$$$$$$$| $$ \\\\__/| $$| $$ \\\\ $$| $$| $$$$$$$$\\n// | $$ \\\\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\\n// |__/ |__/ \\\\_______/|__/ |__/|_______/ |__/ \\\\_______/\\n\\n\\n// ========== Features ==========\\n\\nimport \\\"hardhat/console.sol\\\";\\nimport \\\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./IDropERC721.sol\\\";\\n\\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\\n\\n struct FeeData {\\n address recipient;\\n uint256 bps;\\n }\\n\\n struct GlobalData {\\n uint256 totalMinted;\\n uint256 claimedByUser;\\n uint256 totalSupply;\\n uint256 maxTotalSupply;\\n uint256 nextTokenIdToMint;\\n uint256 nextTokenIdToClaim;\\n string name;\\n string symbol;\\n string contractURI;\\n uint256 baseURICount;\\n uint256 userBalance;\\n uint256 blockTimeStamp;\\n FeeData defaultRoyaltyInfo;\\n FeeData platformFeeInfo;\\n }\\n\\n address public native1;\\n address public native2;\\n\\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\\n __Ownable_init();\\n native1 = _native1;\\n native2 = _native2;\\n // Transfer ownership to the initial owner provided\\n _transferOwnership(initialOwner);\\n }\\n\\n function getAllData(\\n address _dropERC721,\\n address _claimer\\n ) public view returns (\\n uint256 activeClaimConditionIndex,\\n IDropERC721.ClaimCondition[] memory conditions,\\n GlobalData memory globalData\\n ) {\\n IDropERC721 drop = IDropERC721(_dropERC721);\\n\\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\\n uint256 _claimedByUser = 0;\\n if(stopConditionIndex != 0) {\\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\\n activeClaimConditionIndex = _activeClaimConditionIndex;\\n } catch {\\n activeClaimConditionIndex = 0;\\n }\\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\\n \\n for (uint i = 0; i < stopConditionIndex; i++) {\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\\n conditions[i] = condition;\\n }\\n }\\n\\n DropERC721Reader.GlobalData memory _globalData;\\n if(stopConditionIndex > 0) {\\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\\n if(condition.currency == native1 || condition.currency == native2) {\\n _globalData.userBalance = _claimer.balance;\\n } else {\\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\\n }\\n\\n }\\n\\n _globalData.totalMinted = drop.totalMinted();\\n _globalData.claimedByUser = _claimedByUser;\\n _globalData.totalSupply = drop.totalSupply();\\n _globalData.maxTotalSupply = drop.maxTotalSupply();\\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\\n _globalData.name = drop.name();\\n _globalData.symbol = drop.symbol();\\n _globalData.contractURI = drop.contractURI();\\n _globalData.baseURICount = drop.getBaseURICount();\\n _globalData.blockTimeStamp = block.timestamp;\\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\\n _globalData.defaultRoyaltyInfo.bps = rBps;\\n\\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.bps = pBps;\\n return (activeClaimConditionIndex, conditions, _globalData);\\n }\\n}\",\"keccak256\":\"0x1e5633984124ff64630f990fa899abc71d721ba471fc0fa253fa5e06ba28d23d\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/IDropERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDropERC721 {\\n // This struct describes a single claim condition\\n struct ClaimCondition {\\n uint256 startTimestamp;\\n uint256 maxClaimableSupply;\\n uint256 supplyClaimed;\\n uint256 quantityLimitPerWallet;\\n bytes32 merkleRoot;\\n uint256 pricePerToken;\\n address currency;\\n string metadata;\\n }\\n\\n // Events\\n event ClaimConditionsUpdated(\\n ClaimCondition[] claimConditions,\\n bool resetEligibility\\n );\\n event TokensClaimed(\\n uint256 indexed claimConditionIndex,\\n address indexed claimer,\\n address indexed receiver,\\n uint256 startTokenId,\\n uint256 quantityClaimed\\n );\\n\\n // View functions for global data\\n function totalMinted() external view returns (uint256);\\n function totalSupply() external view returns (uint256);\\n function maxTotalSupply() external view returns (uint256);\\n function nextTokenIdToMint() external view returns (uint256);\\n function nextTokenIdToClaim() external view returns (uint256);\\n function name() external view returns (string memory);\\n function symbol() external view returns (string memory);\\n function contractURI() external view returns (string memory);\\n function getBaseURICount() external view returns (uint256);\\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\\n function getPlatformFeeInfo() external view returns (address, uint16);\\n\\n // Specific claim condition methods\\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\\n function getActiveClaimConditionId() external view returns (uint256);\\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x78c04c177793bc91b8c4f7efe8bd7c163ca4cbdb5a19f88fe71309a075f2f415\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506113ab806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 138, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 141, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 566, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 130, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 685, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native1", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 687, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native2", + "offset": 0, + "slot": "102", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/lightlink/DropERC721Reader_Proxy.json b/projects/thridweb-query/deployments/lightlink/DropERC721Reader_Proxy.json new file mode 100644 index 000000000..bc4f5652e --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink/DropERC721Reader_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "transactionIndex": 0, + "gasUsed": "797870", + "logsBloom": "0x000000000000000000004000000000004000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020800010000000010000000000000000800000000000200000200000000000008000000008000000000000000000000005000000000000000000000000000000000000000000000800000000000008000000000000000000000000000000004000000000000000000000000004000000000000000200000000000000000000c0000000000000400000000000000000020000010000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x319b0cd1809a6f723ec0c0330e9c264e87ffbaa8b31c496e6cf89adcf8cc1a97", + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 89853308, + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000000c74ed067cea48f1d6f7d00ababa3c1d5b2598b" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x319b0cd1809a6f723ec0c0330e9c264e87ffbaa8b31c496e6cf89adcf8cc1a97" + }, + { + "transactionIndex": 0, + "blockNumber": 89853308, + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x319b0cd1809a6f723ec0c0330e9c264e87ffbaa8b31c496e6cf89adcf8cc1a97" + }, + { + "transactionIndex": 0, + "blockNumber": 89853308, + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x319b0cd1809a6f723ec0c0330e9c264e87ffbaa8b31c496e6cf89adcf8cc1a97" + }, + { + "transactionIndex": 0, + "blockNumber": 89853308, + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x319b0cd1809a6f723ec0c0330e9c264e87ffbaa8b31c496e6cf89adcf8cc1a97" + }, + { + "transactionIndex": 0, + "blockNumber": 89853308, + "transactionHash": "0x2a2cdd0783665ace4d0a31782cec89c1fc280e5515d2453b9bed88eb6e7da212", + "address": "0x4f4cC63D7f2bC894078d41f284453062842Afa46", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1f689646861870d44b33dbbb413fa7d06a2b52f", + "logIndex": 4, + "blockHash": "0x319b0cd1809a6f723ec0c0330e9c264e87ffbaa8b31c496e6cf89adcf8cc1a97" + } + ], + "blockNumber": 89853308, + "cumulativeGasUsed": "797870", + "status": 1, + "byzantium": true + }, + "args": [ + "0x00C74eD067Cea48F1D6F7D00aBABa3C1D5B2598b", + "0xD1f689646861870D44B33dBBb413Fa7D06A2B52f", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/lightlink/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json b/projects/thridweb-query/deployments/lightlink/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json new file mode 100644 index 000000000..060ca3f6a --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n struct FeeData {\n address recipient;\n uint256 bps;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n _globalData.maxTotalSupply = drop.maxTotalSupply();\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n _globalData.baseURICount = drop.getBaseURICount();\n _globalData.blockTimeStamp = block.timestamp;\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.bps = rBps;\n\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.bps = pBps;\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeInfo() external view returns (address, uint16);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/lightlink/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/thridweb-query/deployments/lightlink/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/lightlink_pegasus/.chainId b/projects/thridweb-query/deployments/lightlink_pegasus/.chainId new file mode 100644 index 000000000..ab6a66639 --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink_pegasus/.chainId @@ -0,0 +1 @@ +1891 \ No newline at end of file diff --git a/projects/thridweb-query/deployments/lightlink_pegasus/DefaultProxyAdmin.json b/projects/thridweb-query/deployments/lightlink_pegasus/DefaultProxyAdmin.json new file mode 100644 index 000000000..b4621e050 --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink_pegasus/DefaultProxyAdmin.json @@ -0,0 +1,259 @@ +{ + "address": "0xFAe20376790675B36030118cF2D8d41ffC0D981D", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0xa3e4c91924d62176c4e1a34b875302eaef3f3a45cd727c5811559fd5086251f6", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0xFAe20376790675B36030118cF2D8d41ffC0D981D", + "transactionIndex": 0, + "gasUsed": "644163", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000080001000000000000000000000000000000000000020000000000002000000800000000000000000000000000000000500000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xcb90c209ea2a773d3a7997d2fd62a035ffb9ebb3b3c078b519b0c4e802ab69de", + "transactionHash": "0xa3e4c91924d62176c4e1a34b875302eaef3f3a45cd727c5811559fd5086251f6", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 92525717, + "transactionHash": "0xa3e4c91924d62176c4e1a34b875302eaef3f3a45cd727c5811559fd5086251f6", + "address": "0xFAe20376790675B36030118cF2D8d41ffC0D981D", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xcb90c209ea2a773d3a7997d2fd62a035ffb9ebb3b3c078b519b0c4e802ab69de" + } + ], + "blockNumber": 92525717, + "cumulativeGasUsed": "644163", + "status": 1, + "byzantium": true + }, + "args": [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/lightlink_pegasus/DropERC721Reader.json b/projects/thridweb-query/deployments/lightlink_pegasus/DropERC721Reader.json new file mode 100644 index 000000000..a10ac3e6e --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink_pegasus/DropERC721Reader.json @@ -0,0 +1,570 @@ +{ + "address": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "transactionIndex": 0, + "gasUsed": "797894", + "logsBloom": "0x000000000000000000000000004000004000000000000000008000000000000000000000000020000000000000000000000000000000000000000004000000000000000000000000000000000000020800010000000000000000000000000000000000000200000000000000000008000000008000000000000000000000005000000000000000000000000000000000000008000000800000000000008000000000000000000000000000000004000000000200000000000000000000000000000000200000000000000000000c0000000000000400000000000000000020000000000000000000000000000400000000000000000000000000000000000000", + "blockHash": "0x38b8cb91eaa75de5a0174307824c74cb225ba96bf6a390102449abe266d2f278", + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 92525736, + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "address": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000000a233a5cc5d22facbbf04ba5c207a3cc9b816e0e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x38b8cb91eaa75de5a0174307824c74cb225ba96bf6a390102449abe266d2f278" + }, + { + "transactionIndex": 0, + "blockNumber": 92525736, + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "address": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x38b8cb91eaa75de5a0174307824c74cb225ba96bf6a390102449abe266d2f278" + }, + { + "transactionIndex": 0, + "blockNumber": 92525736, + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "address": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x38b8cb91eaa75de5a0174307824c74cb225ba96bf6a390102449abe266d2f278" + }, + { + "transactionIndex": 0, + "blockNumber": 92525736, + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "address": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x38b8cb91eaa75de5a0174307824c74cb225ba96bf6a390102449abe266d2f278" + }, + { + "transactionIndex": 0, + "blockNumber": 92525736, + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "address": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fae20376790675b36030118cf2d8d41ffc0d981d", + "logIndex": 4, + "blockHash": "0x38b8cb91eaa75de5a0174307824c74cb225ba96bf6a390102449abe266d2f278" + } + ], + "blockNumber": 92525736, + "cumulativeGasUsed": "797894", + "status": 1, + "byzantium": true + }, + "args": [ + "0x0a233a5cC5D22faCBBf04BA5c207A3cC9b816E0e", + "0xFAe20376790675B36030118cF2D8d41ffC0D981D", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x0000000000000000000000000000000000000000", + "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ] + }, + "implementation": "0x0a233a5cC5D22faCBBf04BA5c207A3cC9b816E0e", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/lightlink_pegasus/DropERC721Reader_Implementation.json b/projects/thridweb-query/deployments/lightlink_pegasus/DropERC721Reader_Implementation.json new file mode 100644 index 000000000..9748ddf49 --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink_pegasus/DropERC721Reader_Implementation.json @@ -0,0 +1,427 @@ +{ + "address": "0x0a233a5cC5D22faCBBf04BA5c207A3cC9b816E0e", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "bps", + "type": "uint256" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0xeb72445d3ed340a3175df2fe1e8d9b80145cac46da9244bd0e0f7dad5edd9058", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x0a233a5cC5D22faCBBf04BA5c207A3cC9b816E0e", + "transactionIndex": 0, + "gasUsed": "1140457", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x5d09a9e9edb8758bf82ffd6b39d60e916423682b0621952996a3f6f9c9bc2836", + "transactionHash": "0xeb72445d3ed340a3175df2fe1e8d9b80145cac46da9244bd0e0f7dad5edd9058", + "logs": [], + "blockNumber": 92525727, + "cumulativeGasUsed": "1140457", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "2bdb5d76d23966dfb9b70ec2522d23dc", + "metadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dropERC721\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"}],\"name\":\"getAllData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeClaimConditionIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxClaimableSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyClaimed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantityLimitPerWallet\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"pricePerToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"struct IDropERC721.ClaimCondition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalMinted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedByUser\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToClaim\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"baseURICount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockTimeStamp\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"defaultRoyaltyInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"bps\",\"type\":\"uint256\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"platformFeeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct DropERC721Reader.GlobalData\",\"name\":\"globalData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_native1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_native2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/drop-reader/DropERC721Reader.sol\":\"DropERC721Reader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\\n * initialization step. This is essential to configure modules that are added through upgrades and that require\\n * initialization.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC20 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/20\\n */\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address who) external view returns (uint256);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n function transferFrom(\\n address from,\\n address to,\\n uint256 value\\n ) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5bdd9dd97ba7d9d7c9a2953db287e4d9d7fa93a27a96bc2e72a8da4919b6f7ff\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/DropERC721Reader.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.11;\\n\\n/// @author rarible\\n\\n// /$$$$$$$ /$$ /$$ /$$\\n// | $$__ $$ |__/| $$ | $$\\n// | $$ \\\\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\\n// | $$__ $$ /$$$$$$$| $$ \\\\__/| $$| $$ \\\\ $$| $$| $$$$$$$$\\n// | $$ \\\\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\\n// |__/ |__/ \\\\_______/|__/ |__/|_______/ |__/ \\\\_______/\\n\\n\\n// ========== Features ==========\\n\\nimport \\\"hardhat/console.sol\\\";\\nimport \\\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./IDropERC721.sol\\\";\\n\\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\\n\\n struct FeeData {\\n address recipient;\\n uint256 bps;\\n }\\n\\n struct GlobalData {\\n uint256 totalMinted;\\n uint256 claimedByUser;\\n uint256 totalSupply;\\n uint256 maxTotalSupply;\\n uint256 nextTokenIdToMint;\\n uint256 nextTokenIdToClaim;\\n string name;\\n string symbol;\\n string contractURI;\\n uint256 baseURICount;\\n uint256 userBalance;\\n uint256 blockTimeStamp;\\n FeeData defaultRoyaltyInfo;\\n FeeData platformFeeInfo;\\n }\\n\\n address public native1;\\n address public native2;\\n\\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\\n __Ownable_init();\\n native1 = _native1;\\n native2 = _native2;\\n // Transfer ownership to the initial owner provided\\n _transferOwnership(initialOwner);\\n }\\n\\n function getAllData(\\n address _dropERC721,\\n address _claimer\\n ) public view returns (\\n uint256 activeClaimConditionIndex,\\n IDropERC721.ClaimCondition[] memory conditions,\\n GlobalData memory globalData\\n ) {\\n IDropERC721 drop = IDropERC721(_dropERC721);\\n\\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\\n uint256 _claimedByUser = 0;\\n if(stopConditionIndex != 0) {\\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\\n activeClaimConditionIndex = _activeClaimConditionIndex;\\n } catch {\\n activeClaimConditionIndex = 0;\\n }\\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\\n \\n for (uint i = 0; i < stopConditionIndex; i++) {\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\\n conditions[i] = condition;\\n }\\n }\\n\\n DropERC721Reader.GlobalData memory _globalData;\\n if(stopConditionIndex > 0) {\\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\\n if(condition.currency == native1 || condition.currency == native2) {\\n _globalData.userBalance = _claimer.balance;\\n } else {\\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\\n }\\n\\n }\\n\\n _globalData.totalMinted = drop.totalMinted();\\n _globalData.claimedByUser = _claimedByUser;\\n _globalData.totalSupply = drop.totalSupply();\\n _globalData.maxTotalSupply = drop.maxTotalSupply();\\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\\n _globalData.name = drop.name();\\n _globalData.symbol = drop.symbol();\\n _globalData.contractURI = drop.contractURI();\\n _globalData.baseURICount = drop.getBaseURICount();\\n _globalData.blockTimeStamp = block.timestamp;\\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\\n _globalData.defaultRoyaltyInfo.bps = rBps;\\n\\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.bps = pBps;\\n return (activeClaimConditionIndex, conditions, _globalData);\\n }\\n}\",\"keccak256\":\"0x1e5633984124ff64630f990fa899abc71d721ba471fc0fa253fa5e06ba28d23d\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/IDropERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDropERC721 {\\n // This struct describes a single claim condition\\n struct ClaimCondition {\\n uint256 startTimestamp;\\n uint256 maxClaimableSupply;\\n uint256 supplyClaimed;\\n uint256 quantityLimitPerWallet;\\n bytes32 merkleRoot;\\n uint256 pricePerToken;\\n address currency;\\n string metadata;\\n }\\n\\n // Events\\n event ClaimConditionsUpdated(\\n ClaimCondition[] claimConditions,\\n bool resetEligibility\\n );\\n event TokensClaimed(\\n uint256 indexed claimConditionIndex,\\n address indexed claimer,\\n address indexed receiver,\\n uint256 startTokenId,\\n uint256 quantityClaimed\\n );\\n\\n // View functions for global data\\n function totalMinted() external view returns (uint256);\\n function totalSupply() external view returns (uint256);\\n function maxTotalSupply() external view returns (uint256);\\n function nextTokenIdToMint() external view returns (uint256);\\n function nextTokenIdToClaim() external view returns (uint256);\\n function name() external view returns (string memory);\\n function symbol() external view returns (string memory);\\n function contractURI() external view returns (string memory);\\n function getBaseURICount() external view returns (uint256);\\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\\n function getPlatformFeeInfo() external view returns (address, uint16);\\n\\n // Specific claim condition methods\\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\\n function getActiveClaimConditionId() external view returns (uint256);\\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\\n}\\n\",\"keccak256\":\"0x78c04c177793bc91b8c4f7efe8bd7c163ca4cbdb5a19f88fe71309a075f2f415\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506113ab806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610dd5565b61013c565b6040516100b393929190610f62565b60665461009f906001600160a01b031681565b61008a610110366004611039565b610a39565b61008a610123366004611084565b610b8b565b610130610c04565b61013a6000610c5e565b565b60006060610148610d0a565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b191906110a8565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f19168201909252610216918101906110cc565b60015b6102265760009650610229565b96505b8167ffffffffffffffff811115610242576102426110e5565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261034591908101906111bd565b90508088838151811061035a5761035a611278565b60200260200101819052505080806103719061128e565b9150506102cd565b505b610383610d0a565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa91906110cc565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d91908101906111bd565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e91906110cc565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059991906110cc565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061060891906110cc565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061067391906110cc565b816060018181525050846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106de91906110cc565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074991906110cc565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610790573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107b891908101906112b7565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082691908101906112b7565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561086c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261089491908101906112b7565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906110cc565b610120820152426101608201526040805163b24f2d3960e01b8152815160009283926001600160a01b038a169263b24f2d39926004808401939192918290030181865afa158015610954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097891906112f4565b610180850180516001600160a01b03808516909152905161ffff831660209091015260408051636a2ab9fb60e11b815281519496509294506000938493928c169263d45573f69260048083019391928290030181865afa1580156109e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0491906112f4565b6101a0870180516001600160a01b03909316909252905161ffff90911660209091015250929750505050505050509250925092565b600054610100900460ff1615808015610a595750600054600160ff909116105b80610a735750303b158015610a73575060005460ff166001145b610adb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610afe576000805461ff0019166101001790555b610b06610cb0565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610b3f82610c5e565b8015610b85576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610b93610c04565b6001600160a01b038116610bf85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ad2565b610c0181610c5e565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ad2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610cd75760405162461bcd60e51b8152600401610ad29061132a565b61013a600054610100900460ff16610d015760405162461bcd60e51b8152600401610ad29061132a565b61013a33610c5e565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610d90604051806040016040528060006001600160a01b03168152602001600081525090565b8152602001610dbb604051806040016040528060006001600160a01b03168152602001600081525090565b905290565b6001600160a01b0381168114610c0157600080fd5b60008060408385031215610de857600080fd5b8235610df381610dc0565b91506020830135610e0381610dc0565b809150509250929050565b60005b83811015610e29578181015183820152602001610e11565b83811115610b855750506000910152565b60008151808452610e52816020860160208601610e0e565b601f01601f19169290920160200192915050565b6000610200825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c0860152610eb882860182610e3a565b91505060e083015184820360e0860152610ed28282610e3a565b9150506101008084015185830382870152610eed8382610e3a565b6101208681015190880152610140808701519088015261016080870151908801526101808087015180516001600160a01b0316828a015260208101516101a08a01529194509250905050506101a083015180516001600160a01b03166101c086015260208101516101e0860152509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561101657898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061100281860183610e3a565b968801969450505090850190600101610f90565b5050878103604089015261102a818a610e66565b9b9a5050505050505050505050565b60008060006060848603121561104e57600080fd5b833561105981610dc0565b9250602084013561106981610dc0565b9150604084013561107981610dc0565b809150509250925092565b60006020828403121561109657600080fd5b81356110a181610dc0565b9392505050565b600080604083850312156110bb57600080fd5b505080516020909101519092909150565b6000602082840312156110de57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561111f5761111f6110e5565b60405290565b805161113081610dc0565b919050565b600082601f83011261114657600080fd5b815167ffffffffffffffff80821115611161576111616110e5565b604051601f8301601f19908116603f01168101908282118183101715611189576111896110e5565b816040528381528660208588010111156111a257600080fd5b6111b3846020830160208901610e0e565b9695505050505050565b6000602082840312156111cf57600080fd5b815167ffffffffffffffff808211156111e757600080fd5b9083019061010082860312156111fc57600080fd5b6112046110fb565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a082015261124660c08401611125565b60c082015260e08301518281111561125d57600080fd5b61126987828601611135565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156112b057634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156112c957600080fd5b815167ffffffffffffffff8111156112e057600080fd5b6112ec84828501611135565b949350505050565b6000806040838503121561130757600080fd5b825161131281610dc0565b602084015190925061ffff81168114610e0357600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea264697066735822122048f2fd891b67b5dd9732620b3ee6ad1d948303d9f77c146f67997f293b5cd85564736f6c634300080c0033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 138, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 141, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 566, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 130, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 685, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native1", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 687, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native2", + "offset": 0, + "slot": "102", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/lightlink_pegasus/DropERC721Reader_Proxy.json b/projects/thridweb-query/deployments/lightlink_pegasus/DropERC721Reader_Proxy.json new file mode 100644 index 000000000..fd4b7eb8a --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink_pegasus/DropERC721Reader_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "transactionIndex": 0, + "gasUsed": "797894", + "logsBloom": "0x000000000000000000000000004000004000000000000000008000000000000000000000000020000000000000000000000000000000000000000004000000000000000000000000000000000000020800010000000000000000000000000000000000000200000000000000000008000000008000000000000000000000005000000000000000000000000000000000000008000000800000000000008000000000000000000000000000000004000000000200000000000000000000000000000000200000000000000000000c0000000000000400000000000000000020000000000000000000000000000400000000000000000000000000000000000000", + "blockHash": "0x38b8cb91eaa75de5a0174307824c74cb225ba96bf6a390102449abe266d2f278", + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 92525736, + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "address": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000000a233a5cc5d22facbbf04ba5c207a3cc9b816e0e" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x38b8cb91eaa75de5a0174307824c74cb225ba96bf6a390102449abe266d2f278" + }, + { + "transactionIndex": 0, + "blockNumber": 92525736, + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "address": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x38b8cb91eaa75de5a0174307824c74cb225ba96bf6a390102449abe266d2f278" + }, + { + "transactionIndex": 0, + "blockNumber": 92525736, + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "address": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x38b8cb91eaa75de5a0174307824c74cb225ba96bf6a390102449abe266d2f278" + }, + { + "transactionIndex": 0, + "blockNumber": 92525736, + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "address": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x38b8cb91eaa75de5a0174307824c74cb225ba96bf6a390102449abe266d2f278" + }, + { + "transactionIndex": 0, + "blockNumber": 92525736, + "transactionHash": "0x36c2f042721a1fb2f761cd49f68638c740ddfe0273afc0dd913c02db83e15689", + "address": "0x2Fa8c194C4881d59D688EC69d3C6130f98887Ca4", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fae20376790675b36030118cf2d8d41ffc0d981d", + "logIndex": 4, + "blockHash": "0x38b8cb91eaa75de5a0174307824c74cb225ba96bf6a390102449abe266d2f278" + } + ], + "blockNumber": 92525736, + "cumulativeGasUsed": "797894", + "status": 1, + "byzantium": true + }, + "args": [ + "0x0a233a5cC5D22faCBBf04BA5c207A3cC9b816E0e", + "0xFAe20376790675B36030118cF2D8d41ffC0D981D", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/lightlink_pegasus/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json b/projects/thridweb-query/deployments/lightlink_pegasus/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json new file mode 100644 index 000000000..060ca3f6a --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink_pegasus/solcInputs/2bdb5d76d23966dfb9b70ec2522d23dc.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n struct FeeData {\n address recipient;\n uint256 bps;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n _globalData.maxTotalSupply = drop.maxTotalSupply();\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n _globalData.baseURICount = drop.getBaseURICount();\n _globalData.blockTimeStamp = block.timestamp;\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.bps = rBps;\n\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.bps = pBps;\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeInfo() external view returns (address, uint16);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/lightlink_pegasus/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/thridweb-query/deployments/lightlink_pegasus/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/thridweb-query/deployments/lightlink_pegasus/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file From f38e8208de7771d9958893849e084367f24240f9 Mon Sep 17 00:00:00 2001 From: gonzaotc <86085168+gonzaotc@users.noreply.github.com> Date: Wed, 17 Jul 2024 05:10:33 -0300 Subject: [PATCH 19/25] [Fixes] PT-5586: Fix all tests in develop-branch (#303) * fix: all tests --- package.json | 7 +- projects/custom-matchers/package.json | 3 +- projects/deploy-utils/package.json | 3 +- .../migrations/10_initial_exchange_wrapper.js | 9 +- .../migrations/22_initial_CryptoPunks.js | 57 - .../migrations/4_tokens_and_factories.js | 12 +- .../7_deploy_ERC721Minimal_tokens_factory.js | 13 +- .../8_update_ERC1155_deploy_factory.js | 12 +- projects/deploy/migrations/config.js | 16 - projects/deploy/package.json | 2 +- .../deploy/test/exchange/ExchangeV2.test.js | 54 +- .../build/contracts/RaribleTestHelper.json | 20534 ++++++++++++++++ .../build/contracts/X2Y2TestHelper.json | 10952 +++++++++ .../gas-usage-tests/test/marketplaces.test.js | 44 +- projects/gas-usage-tests/test/rarible.test.js | 85 +- .../test/exchange/ExchangeV2.test.js | 24 +- projects/interfaces/package.json | 1 + projects/lazy-mint/package.json | 1 + projects/lib-asset/package.json | 1 + projects/lib-bp/package.json | 1 + projects/lib-part/package.json | 1 + projects/lib-signature/package.json | 1 + .../meta-tx/.openzeppelin/unknown-1337.json | 10 +- projects/meta-tx/package.json | 1 + projects/role-operator/package.json | 1 + projects/royalties-upgradeable/package.json | 1 + projects/royalties/package.json | 1 + projects/royalties/test/ierc2981.test.js | 15 +- .../drop-reader/DropERC721Reader.sol | 47 +- .../contracts/drop-reader/IDropERC721.sol | 30 + .../deployments/polygon/.chainId | 1 + .../polygon/DefaultProxyAdmin.json | 274 + .../deployments/polygon/DropERC721Reader.json | 587 + .../DropERC721Reader_Implementation.json | 453 + .../polygon/DropERC721Reader_Proxy.json | 290 + .../3894b9afc8c8d533af64a475c5c264fb.json | 56 + .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 + .../63b2d6c5717d5484fe7e1171f77605e8.json | 56 + .../b1c828768fa0832da15cbd25d898ed88.json | 56 + .../e91e428fad7f11da8f23baddfcf53d1d.json | 56 + projects/thridweb-query/package.json | 5 +- .../thridweb-query/test/DropErc721Reader.ts | 35 +- .../utils/get-claim-illegebility.ts | 7 +- .../thridweb-query/utils/get-drop-data.ts | 7 +- projects/thridweb-query/utils/utils.ts | 4 +- projects/tokens/hardhat.config.ts | 1 + .../{test => test-hardhat}/ZkAddress.test.ts | 0 projects/tokens/tsconfig.json | 29 +- .../test/trasnfer-ownership.test.ts | 47 +- scripts/balance.js | 2 +- yarn.lock | 102 +- 51 files changed, 33793 insertions(+), 357 deletions(-) delete mode 100644 projects/deploy/migrations/22_initial_CryptoPunks.js create mode 100644 projects/gas-usage-tests/build/contracts/RaribleTestHelper.json create mode 100644 projects/gas-usage-tests/build/contracts/X2Y2TestHelper.json create mode 100644 projects/thridweb-query/deployments/polygon/.chainId create mode 100644 projects/thridweb-query/deployments/polygon/DefaultProxyAdmin.json create mode 100644 projects/thridweb-query/deployments/polygon/DropERC721Reader.json create mode 100644 projects/thridweb-query/deployments/polygon/DropERC721Reader_Implementation.json create mode 100644 projects/thridweb-query/deployments/polygon/DropERC721Reader_Proxy.json create mode 100644 projects/thridweb-query/deployments/polygon/solcInputs/3894b9afc8c8d533af64a475c5c264fb.json create mode 100644 projects/thridweb-query/deployments/polygon/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json create mode 100644 projects/thridweb-query/deployments/polygon/solcInputs/63b2d6c5717d5484fe7e1171f77605e8.json create mode 100644 projects/thridweb-query/deployments/polygon/solcInputs/b1c828768fa0832da15cbd25d898ed88.json create mode 100644 projects/thridweb-query/deployments/polygon/solcInputs/e91e428fad7f11da8f23baddfcf53d1d.json rename projects/tokens/{test => test-hardhat}/ZkAddress.test.ts (100%) diff --git a/package.json b/package.json index d886e55cf..8f6f6585c 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,12 @@ "private": true, "workspaces": [ "projects/*" - ], + ], "scripts": { "bootstrap": "lerna bootstrap --no-ci && lerna link", "bootstrap:ci": "lerna bootstrap --ci && lerna link", "build": "sh scripts/build.sh", - "test": "sh scripts/test.sh", + "test": "yarn workspaces run test", "release": "git reset --hard && lerna publish from-package", "build:deploy": "yarn workspace @rarible/deploy run build", "build:exchange-v2": "yarn workspace @rarible/exchange-v2 run build", @@ -45,5 +45,6 @@ "tslib": "^2.5.0", "typechain": "^8.2.0", "typescript": "^5.0.4" - } + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/projects/custom-matchers/package.json b/projects/custom-matchers/package.json index 0efab3784..a6db6f5b0 100644 --- a/projects/custom-matchers/package.json +++ b/projects/custom-matchers/package.json @@ -38,6 +38,7 @@ }, "gitHead": "c149f3e740650a91e0764245230dbddc8f8f423e", "scripts": { - "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck" + "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck", + "test": "pwd" } } diff --git a/projects/deploy-utils/package.json b/projects/deploy-utils/package.json index fa77b6de7..25ecef9ff 100644 --- a/projects/deploy-utils/package.json +++ b/projects/deploy-utils/package.json @@ -21,7 +21,8 @@ "url": "git+https://github.com/rarible/protocol-contracts.git" }, "scripts": { - "build": "tsc -skipLibCheck" + "build": "tsc -skipLibCheck", + "test": "pwd" }, "bugs": { "url": "https://github.com/rarible/protocol-contracts/issues" diff --git a/projects/deploy/migrations/10_initial_exchange_wrapper.js b/projects/deploy/migrations/10_initial_exchange_wrapper.js index 48cfa70d7..d2e736a07 100644 --- a/projects/deploy/migrations/10_initial_exchange_wrapper.js +++ b/projects/deploy/migrations/10_initial_exchange_wrapper.js @@ -70,6 +70,7 @@ const def = { zeroAddress, // looksRareV2 zeroAddress, // blur "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 + zeroAddress, // seaport_1_6 @dev ensure a working seaport_1_6 is not needed for proper truffle tests functionality. ], weth: zeroAddress, @@ -168,7 +169,9 @@ function getWrapperSettings(network) { } } -module.exports = async function (deployer, network) { +module.exports = async function (deployer, network, accounts) { + const deployerAddress = accounts[0]; + const { deploy_meta, deploy_non_meta } = getSettings(network); let exchangeV2; @@ -195,9 +198,9 @@ module.exports = async function (deployer, network) { settings.transferProxies.push(erc20TransferProxy.address) if (network === "polygon_mainnet") { - await deployer.deploy(RaribleExchangeWrapper, settings.marketplaces, settings.weth, settings.transferProxies, { gas: 4500000 * getGasMultiplier(network), nonce: 141 }); + await deployer.deploy(RaribleExchangeWrapper, settings.marketplaces, settings.weth, settings.transferProxies, deployerAddress, { gas: 4500000 * getGasMultiplier(network), nonce: 141 }); } else { - await deployer.deploy(RaribleExchangeWrapper, settings.marketplaces, settings.weth, settings.transferProxies, { gas: 4500000 * getGasMultiplier(network) }); + await deployer.deploy(RaribleExchangeWrapper, settings.marketplaces, settings.weth, settings.transferProxies, deployerAddress, { gas: 4500000 * getGasMultiplier(network) }); } diff --git a/projects/deploy/migrations/22_initial_CryptoPunks.js b/projects/deploy/migrations/22_initial_CryptoPunks.js deleted file mode 100644 index 4f1c90a80..000000000 --- a/projects/deploy/migrations/22_initial_CryptoPunks.js +++ /dev/null @@ -1,57 +0,0 @@ -const CryptoPunksMarket = artifacts.require('CryptoPunksMarket'); -const PunkTransferProxy = artifacts.require('PunkTransferProxy'); -const ExchangeV2 = artifacts.require('ExchangeV2'); -const ExchangeMetaV2 = artifacts.require('ExchangeMetaV2'); - -const { getSettings, getGasMultiplier } = require("./config.js") -const { CRYPTO_PUNKS } = require("../../../scripts/assets.js"); - -module.exports = async function (deployer, network) { - const settings = getSettings(network); - let cryptoPunksMarket; - - if (!settings.deploy_CryptoPunks && settings.address_CryptoPunks === "0x0000000000000000000000000000000000000000") { - return; - } - - if (settings.deploy_CryptoPunks) { - await deployer.deploy(CryptoPunksMarket, { gas: 4500000 * getGasMultiplier(network) }); - cryptoPunksMarket = await CryptoPunksMarket.deployed(); - } else { - cryptoPunksMarket = await CryptoPunksMarket.at(settings.address_CryptoPunks); - } - console.log("cryptoPunksMarket address: ", cryptoPunksMarket.address); - - await deployer.deploy(PunkTransferProxy, { gas: 1500000 * getGasMultiplier(network) }); - const punkTransferProxy = await PunkTransferProxy.deployed(); - console.log("deployed punkTransferProxy: ", punkTransferProxy.address); - await punkTransferProxy.__OperatorRole_init({ gas: 200000 * getGasMultiplier(network) }); - - if (!!settings.deploy_meta) { - const exchangeV2 = await ExchangeMetaV2.deployed(); - await punkTransferProxy.addOperator(exchangeV2.address); - await exchangeV2.setTransferProxy(CRYPTO_PUNKS, punkTransferProxy.address); - } - - if (!!settings.deploy_non_meta) { - const exchangeV2 = await ExchangeV2.deployed(); - await punkTransferProxy.addOperator(exchangeV2.address); - await exchangeV2.setTransferProxy(CRYPTO_PUNKS, punkTransferProxy.address); - } - - //await setTestCryptoPunks(settings.deploy_CryptoPunks, settings.address_ownerTestCryptoPunks, punkTransferProxy.address); -}; - -async function setTestCryptoPunks(_needDeploy, _owner, _punkTransferProxy) { - if (_needDeploy) { - const cryptoPunksMarket = await CryptoPunksMarket.deployed(); - await cryptoPunksMarket.allInitialOwnersAssigned(); - let punkIndex = 1; - let punkNumber = 10; - while (punkIndex <= punkNumber) { - await cryptoPunksMarket.getPunk(punkIndex, { from: _owner }); - await cryptoPunksMarket.offerPunkForSaleToAddress(punkIndex, 0, _punkTransferProxy, { from: _owner }); - punkIndex++; - } - } -} \ No newline at end of file diff --git a/projects/deploy/migrations/4_tokens_and_factories.js b/projects/deploy/migrations/4_tokens_and_factories.js index 8d1ad2b1b..f8ef54ace 100644 --- a/projects/deploy/migrations/4_tokens_and_factories.js +++ b/projects/deploy/migrations/4_tokens_and_factories.js @@ -18,7 +18,9 @@ const ERC1155LazyMintTransferProxy = artifacts.require('ERC1155LazyMintTransferP const ERC1155RaribleMeta = artifacts.require('ERC1155RaribleMeta'); -module.exports = async function (deployer, network) { +module.exports = async function (deployer, network, accounts) { + const deployerAddress = accounts[0]; + const transferProxy = (await TransferProxy.deployed()).address; const erc721LazyMintTransferProxy = (await ERC721LazyMintTransferProxy.deployed()).address; const erc1155LazyMintTransferProxy = (await ERC1155LazyMintTransferProxy.deployed()).address; @@ -26,11 +28,11 @@ module.exports = async function (deployer, network) { const { deploy_meta, deploy_non_meta } = getSettings(network); //deploying ERC1155 with meta support if needed if (!!deploy_meta) { - await deployERC1155(ERC1155RaribleMeta, ERC1155RaribleBeaconMeta, transferProxy, erc1155LazyMintTransferProxy, deployer, network); + await deployERC1155(ERC1155RaribleMeta, ERC1155RaribleBeaconMeta, transferProxy, erc1155LazyMintTransferProxy, deployer, deployerAddress, network); } if (!!deploy_non_meta){ - await deployERC1155(ERC1155Rarible, ERC1155RaribleBeacon, transferProxy, erc1155LazyMintTransferProxy, deployer, network); + await deployERC1155(ERC1155Rarible, ERC1155RaribleBeacon, transferProxy, erc1155LazyMintTransferProxy, deployer, deployerAddress, network); } //deploying erc721 proxy @@ -46,7 +48,7 @@ module.exports = async function (deployer, network) { }; -async function deployERC1155(erc1155toDeploy, beaconToDeploy, transferProxy, erc1155LazyMintTransferProxy, deployer, network) { +async function deployERC1155(erc1155toDeploy, beaconToDeploy, transferProxy, erc1155LazyMintTransferProxy, deployer, deployerAddress, network) { //deploying erc1155 proxy const erc1155Proxy = await deployProxy(erc1155toDeploy, ["Rarible", "RARI", "ipfs:/", "", transferProxy, erc1155LazyMintTransferProxy], { deployer, initializer: '__ERC1155Rarible_init' }); console.log("deployed erc1155 at", erc1155Proxy.address) @@ -56,5 +58,5 @@ async function deployERC1155(erc1155toDeploy, beaconToDeploy, transferProxy, erc const erc1155 = await getProxyImplementation(erc1155toDeploy, network, ProxyAdmin) //deploying beacon - const beacon1155 = await deployer.deploy(beaconToDeploy, erc1155, { gas: 1000000 * getGasMultiplier(network) }); + const beacon1155 = await deployer.deploy(beaconToDeploy, erc1155, deployerAddress, { gas: 1000000 * getGasMultiplier(network) }); } diff --git a/projects/deploy/migrations/7_deploy_ERC721Minimal_tokens_factory.js b/projects/deploy/migrations/7_deploy_ERC721Minimal_tokens_factory.js index 71cadef7d..c188e2e5c 100644 --- a/projects/deploy/migrations/7_deploy_ERC721Minimal_tokens_factory.js +++ b/projects/deploy/migrations/7_deploy_ERC721Minimal_tokens_factory.js @@ -18,21 +18,22 @@ const ERC721LazyMintTransferProxy = artifacts.require('ERC721LazyMintTransferPro const ERC721RaribleMeta = artifacts.require('ERC721RaribleMeta'); -module.exports = async function (deployer, network) { +module.exports = async function (deployer, network, accounts) { + const deployerAddress = accounts[0]; const { deploy_meta, deploy_non_meta } = getSettings(network); if (!!deploy_meta) { - await deployERC721Minimal(ERC721RaribleMeta, ERC721RaribleMinimalBeaconMeta, deployer, network); + await deployERC721Minimal(ERC721RaribleMeta, ERC721RaribleMinimalBeaconMeta, deployer, deployerAddress, network); } if (!!deploy_non_meta){ - await deployERC721Minimal(ERC721RaribleMinimal, ERC721RaribleMinimalBeacon, deployer, network); + await deployERC721Minimal(ERC721RaribleMinimal, ERC721RaribleMinimalBeacon, deployer, deployerAddress, network); } }; -async function deployERC721Minimal(erc721toDeploy, beacon, deployer, network) { +async function deployERC721Minimal(erc721toDeploy, beacon, deployer, deployerAddress, network) { const transferProxy = (await TransferProxy.deployed()).address; const erc721LazyMintTransferProxy = (await ERC721LazyMintTransferProxy.deployed()).address; @@ -43,10 +44,10 @@ async function deployERC721Minimal(erc721toDeploy, beacon, deployer, network) { const erc721minimal = await getProxyImplementation(erc721toDeploy, network, ProxyAdmin) //upgrading 721 beacon - await deployer.deploy(beacon, erc721minimal, { gas: 1000000 * getGasMultiplier(network) }); + await deployer.deploy(beacon, erc721minimal, deployerAddress, { gas: 1000000 * getGasMultiplier(network) }); const beacon721Minimal = await beacon.deployed() //deploying factory - const factory721 = await deployer.deploy(ERC721RaribleFactoryC2, beacon721Minimal.address, transferProxy, erc721LazyMintTransferProxy, { gas: 2500000 * getGasMultiplier(network) }); + const factory721 = await deployer.deploy(ERC721RaribleFactoryC2, beacon721Minimal.address, transferProxy, erc721LazyMintTransferProxy, deployerAddress, { gas: 2500000 * getGasMultiplier(network) }); console.log(`deployed factory721 minimal at ${factory721.address}`) } diff --git a/projects/deploy/migrations/8_update_ERC1155_deploy_factory.js b/projects/deploy/migrations/8_update_ERC1155_deploy_factory.js index a316b758a..2539fd0b3 100644 --- a/projects/deploy/migrations/8_update_ERC1155_deploy_factory.js +++ b/projects/deploy/migrations/8_update_ERC1155_deploy_factory.js @@ -16,23 +16,25 @@ const ERC1155LazyMintTransferProxy = artifacts.require('ERC1155LazyMintTransferP const ERC1155RaribleMeta = artifacts.require('ERC1155RaribleMeta'); -module.exports = async function (deployer, network) { +module.exports = async function (deployer, network, accounts) { + const deployerAddress = accounts[0]; + const transferProxy = (await TransferProxy.deployed()).address; const erc1155LazyMintTransferProxy = (await ERC1155LazyMintTransferProxy.deployed()).address; const { deploy_meta, deploy_non_meta } = getSettings(network); if (!!deploy_meta) { - await updateERC1155(ERC1155RaribleMeta, ERC1155RaribleBeaconMeta, transferProxy, erc1155LazyMintTransferProxy, deployer, network); + await updateERC1155(ERC1155RaribleMeta, ERC1155RaribleBeaconMeta, transferProxy, erc1155LazyMintTransferProxy, deployer, deployerAddress, network); } if (!!deploy_non_meta){ - await updateERC1155(ERC1155Rarible, ERC1155RaribleBeacon, transferProxy, erc1155LazyMintTransferProxy, deployer, network); + await updateERC1155(ERC1155Rarible, ERC1155RaribleBeacon, transferProxy, erc1155LazyMintTransferProxy, deployer, deployerAddress, network); } }; -async function updateERC1155(erc1155toDeploy, beacon, transferProxy, erc1155LazyMintTransferProxy, deployer, network) { +async function updateERC1155(erc1155toDeploy, beacon, transferProxy, erc1155LazyMintTransferProxy, deployer, deployerAddress, network) { //upgrade 1155 proxy const erc1155Proxy = await erc1155toDeploy.deployed(); await upgradeProxy(erc1155Proxy.address, erc1155toDeploy, { deployer }); @@ -44,6 +46,6 @@ async function updateERC1155(erc1155toDeploy, beacon, transferProxy, erc1155Lazy await updateImplementation(beacon1155, erc1155) //deploying new factory - const factory1155 = await deployer.deploy(ERC1155RaribleFactoryC2, beacon1155.address, transferProxy, erc1155LazyMintTransferProxy, { gas: 2500000 * getGasMultiplier(network) }); + const factory1155 = await deployer.deploy(ERC1155RaribleFactoryC2, beacon1155.address, transferProxy, erc1155LazyMintTransferProxy, deployerAddress, { gas: 2500000 * getGasMultiplier(network) }); console.log(`deployed factory1155 at ${factory1155.address}`) } \ No newline at end of file diff --git a/projects/deploy/migrations/config.js b/projects/deploy/migrations/config.js index 4e256a5e3..2685278e1 100644 --- a/projects/deploy/migrations/config.js +++ b/projects/deploy/migrations/config.js @@ -217,22 +217,6 @@ const zkatana_mainnet = { deploy_non_meta: false, } -const lightlink_pegasus = { - communityWallet: "0xc66d094ed928f7840a6b0d373c1cd825c97e3c7c", - deploy_CryptoPunks: false, - address_CryptoPunks: "0x0000000000000000000000000000000000000000", - deploy_meta: true, - deploy_non_meta: false, -} - -const lightlink_phoenix = { - communityWallet: "0x424ACe4669579986D200eBeb3C75924282324a42", - deploy_CryptoPunks: false, - address_CryptoPunks: "0x0000000000000000000000000000000000000000", - deploy_meta: true, - deploy_non_meta: false, -} - const lightlink_pegasus = { communityWallet: "0xc66d094ed928f7840a6b0d373c1cd825c97e3c7c", deploy_CryptoPunks: false, diff --git a/projects/deploy/package.json b/projects/deploy/package.json index 7758477b6..2ea43eb96 100644 --- a/projects/deploy/package.json +++ b/projects/deploy/package.json @@ -42,7 +42,7 @@ }, "scripts": { "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck", - "test": "pwd", + "test": "./test-exchange.sh && ./test-tokens.sh && ./test-wrapper.sh", "deploy": "./deploy.bash", "verify": "./verify-all.bash", "generate-erthers": "typechain --target ethers-v5 'build/contracts/*.json'", diff --git a/projects/deploy/test/exchange/ExchangeV2.test.js b/projects/deploy/test/exchange/ExchangeV2.test.js index bccde97dd..386d17dfa 100644 --- a/projects/deploy/test/exchange/ExchangeV2.test.js +++ b/projects/deploy/test/exchange/ExchangeV2.test.js @@ -13,10 +13,6 @@ const ERC20TransferProxy = artifacts.require("ERC20TransferProxy.sol"); const RaribleTestHelper = artifacts.require("RaribleTestHelper.sol"); -//punk -const CryptoPunksMarket = artifacts.require('CryptoPunksMarket'); -const PunkTransferProxy = artifacts.require('PunkTransferProxy'); - //Lazy const ERC721LazyMintTest = artifacts.require("ERC721LazyMintTest.sol"); @@ -24,7 +20,7 @@ const { Order, Asset, sign } = require("../../../../scripts/order.js"); const ZERO = "0x0000000000000000000000000000000000000000"; const zeroAddress = "0x0000000000000000000000000000000000000000"; const { expectThrow } = require("@daonomic/tests-common"); -const { ETH, ERC20, ERC721, ERC1155, ORDER_DATA_V1, ORDER_DATA_V2, TO_MAKER, TO_TAKER, PROTOCOL, ROYALTY, ORIGIN, PAYOUT, CRYPTO_PUNKS, COLLECTION, TO_LOCK, LOCK, enc, id } = require("../../../../scripts/assets.js"); +const { ETH, ERC20, ERC721, ERC1155, ORDER_DATA_V1, ORDER_DATA_V2, ORDER_DATA_V3, TO_MAKER, TO_TAKER, PROTOCOL, ROYALTY, ORIGIN, PAYOUT, CRYPTO_PUNKS, COLLECTION, TO_LOCK, LOCK, enc, id } = require("../../../../scripts/assets.js"); const MARKET_MARKER_SELL = "0x68619b8adb206de04f676007b2437f99ff6129b672495a6951499c6c56bc2f10"; const MARKET_MARKER_BUY = "0x68619b8adb206de04f676007b2437f99ff6129b672495a6951499c6c56bc2f11"; @@ -1566,7 +1562,7 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { }) describe("protocol fee", () => { - it("protocol fee should work correctly with V2 orders", async () => { + it("protocol fee should work correctly with V3 orders", async () => { await exchangeV2.setAllProtocolFeeData(protocol, 0, 500) const fee = (await exchangeV2.protocolFee()) @@ -1584,12 +1580,12 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { let addrOriginLeft = [[accounts[6], 300]]; let addrOriginRight = [[accounts[5], 300]]; - let encDataLeft = await encDataV2([[], addrOriginLeft, true]); - let encDataRight = await encDataV2([[], addrOriginRight, false]); + let encDataLeft = await encDataV3([[], addrOriginLeft, true]); + let encDataRight = await encDataV3([[], addrOriginRight, false]); const _nftSellAssetData = enc(erc721.address, erc721TokenId1); const _nftPurchaseAssetData = "0x"; - const left = Order(makerLeft, Asset(ERC721, _nftSellAssetData, nftAmount), ZERO, Asset(ETH, _nftPurchaseAssetData, _priceSell), salt, 0, 0, ORDER_DATA_V2, encDataLeft); + const left = Order(makerLeft, Asset(ERC721, _nftSellAssetData, nftAmount), ZERO, Asset(ETH, _nftPurchaseAssetData, _priceSell), salt, 0, 0, ORDER_DATA_V3, encDataLeft); const signature = await getSignature(left, makerLeft); const directPurchaseParams = { @@ -1602,7 +1598,7 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { sellOrderSalt: salt, sellOrderStart: 0, sellOrderEnd: 0, - sellOrderDataType: ORDER_DATA_V2, + sellOrderDataType: ORDER_DATA_V3, sellOrderData: encDataLeft, sellOrderSignature: signature, buyOrderPaymentAmount: _pricePurchase, @@ -1629,7 +1625,7 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { assert.equal(await erc721.balanceOf(makerRight), 1); }) - it("protocol fee should work correctly with V2 orders", async () => { + it("protocol fee should work correctly with V3 orders", async () => { await exchangeV2.setAllProtocolFeeData(protocol, 400, 500) let fee = (await exchangeV2.protocolFee()) @@ -1642,10 +1638,10 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { const nftAmount = 1 const erc721 = await prepareERC721(makerLeft, erc721TokenId1, [[accounts[7], 100]]); //with royalties - let encDataLeft = await encDataV2([[], [[accounts[6], 300]], true]); - let encDataRight = await encDataV2([[], [[accounts[5], 300]], false]); + let encDataLeft = await encDataV3([[], [[accounts[6], 300]], true]); + let encDataRight = await encDataV3([[], [[accounts[5], 300]], false]); - const left = Order(makerLeft, Asset(ERC721, enc(erc721.address, erc721TokenId1), nftAmount), ZERO, Asset(ETH, "0x", _priceSell), salt, 0, 0, ORDER_DATA_V2, encDataLeft); + const left = Order(makerLeft, Asset(ERC721, enc(erc721.address, erc721TokenId1), nftAmount), ZERO, Asset(ETH, "0x", _priceSell), salt, 0, 0, ORDER_DATA_V3, encDataLeft); const signature = await getSignature(left, makerLeft); const _nftSellAssetData = enc(erc721.address, erc721TokenId1); @@ -1660,7 +1656,7 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { sellOrderSalt: salt, sellOrderStart: 0, sellOrderEnd: 0, - sellOrderDataType: ORDER_DATA_V2, + sellOrderDataType: ORDER_DATA_V3, sellOrderData: encDataLeft, sellOrderSignature: signature, buyOrderPaymentAmount: _pricePurchase, @@ -1698,30 +1694,6 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { }) describe("integrity", () => { - it("should match orders with crypto punks", async () => { - const cryptoPunksMarket = await CryptoPunksMarket.deployed(); - await cryptoPunksMarket.allInitialOwnersAssigned(); //allow test contract work with Punk CONTRACT_OWNER accounts[0] - const punkIndex = 256; - await cryptoPunksMarket.getPunk(punkIndex, { from: makerLeft }); //makerLeft - owner punk with punkIndex - - const proxy = await PunkTransferProxy.deployed(); - - await cryptoPunksMarket.offerPunkForSaleToAddress(punkIndex, 0, proxy.address, { from: makerLeft }); //makerLeft - wants to sell punk with punkIndex, min price 0 wei - - const encodedMintData = await enc(cryptoPunksMarket.address, punkIndex);; - - const erc20 = await prepareERC20(makerRight, 106); - - const left = Order(makerLeft, Asset((CRYPTO_PUNKS), encodedMintData, 1), ZERO, Asset(ERC20, enc(erc20.address), 100), 1, 0, 0, "0xffffffff", "0x"); - const right = Order(makerRight, Asset(ERC20, enc(erc20.address), 100), ZERO, Asset((CRYPTO_PUNKS), encodedMintData, 1), 1, 0, 0, "0xffffffff", "0x"); - - await exchangeV2.matchOrders(left, await getSignature(left, makerLeft), right, await getSignature(right, makerRight)); - - assert.equal(await erc20.balanceOf(makerLeft), 100); - assert.equal(await cryptoPunksMarket.balanceOf(makerLeft), 0);//makerLeft - not owner now - assert.equal(await cryptoPunksMarket.balanceOf(makerRight), 1);//punk owner - makerRight - }) - it("should match orders with ERC721 сollections", async () => { const erc721 = await prepareERC721(makerLeft) @@ -1745,6 +1717,10 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { return helper.encodeV2(tuple); } + function encDataV3(tuple) { + return helper.encodeV3(tuple); + } + async function LibPartToUint(account = zeroAddress, value = 0) { return await helper.encodeOriginFeeIntoUint(account, value); } diff --git a/projects/gas-usage-tests/build/contracts/RaribleTestHelper.json b/projects/gas-usage-tests/build/contracts/RaribleTestHelper.json new file mode 100644 index 000000000..ff5afb287 --- /dev/null +++ b/projects/gas-usage-tests/build/contracts/RaribleTestHelper.json @@ -0,0 +1,20534 @@ +{ + "contractName": "RaribleTestHelper", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "payouts", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "originFees", + "type": "tuple[]" + } + ], + "internalType": "struct LibOrderDataV1.DataV1", + "name": "data", + "type": "tuple" + } + ], + "name": "encode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "payouts", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "originFees", + "type": "tuple[]" + }, + { + "internalType": "bool", + "name": "isMakeFill", + "type": "bool" + } + ], + "internalType": "struct LibOrderDataV2.DataV2", + "name": "data", + "type": "tuple" + } + ], + "name": "encodeV2", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "payouts", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "originFees", + "type": "tuple[]" + }, + { + "internalType": "bool", + "name": "isMakeFill", + "type": "bool" + } + ], + "internalType": "struct LibOrderDataV3.DataV3", + "name": "data", + "type": "tuple" + } + ], + "name": "encodeV3", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "name": "encodeOriginFeeIntoUint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "internalType": "address", + "name": "taker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "end", + "type": "uint256" + }, + { + "internalType": "bytes4", + "name": "dataType", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibOrder.Order", + "name": "order", + "type": "tuple" + } + ], + "name": "hashKey", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "makeAsset", + "type": "tuple" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes4", + "name": "assetClass", + "type": "bytes4" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct LibAsset.AssetType", + "name": "assetType", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "internalType": "struct LibAsset.Asset", + "name": "takeAsset", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "hashV2", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC721LazyMint.Mint721Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "encodeLazy721", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "string", + "name": "tokenURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "supply", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "creators", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "address payable", + "name": "account", + "type": "address" + }, + { + "internalType": "uint96", + "name": "value", + "type": "uint96" + } + ], + "internalType": "struct LibPart.Part[]", + "name": "royalties", + "type": "tuple[]" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "internalType": "struct LibERC1155LazyMint.Mint1155Data", + "name": "data", + "type": "tuple" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "encodeLazy1155", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"payouts\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"originFees\",\"type\":\"tuple[]\"}],\"internalType\":\"struct LibOrderDataV1.DataV1\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"encode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"supply\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC1155LazyMint.Mint1155Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"encodeLazy1155\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"tokenURI\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"creators\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"royalties\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signatures\",\"type\":\"bytes[]\"}],\"internalType\":\"struct LibERC721LazyMint.Mint721Data\",\"name\":\"data\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"encodeLazy721\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"name\":\"encodeOriginFeeIntoUint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"payouts\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"originFees\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isMakeFill\",\"type\":\"bool\"}],\"internalType\":\"struct LibOrderDataV2.DataV2\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"encodeV2\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"payouts\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address payable\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"value\",\"type\":\"uint96\"}],\"internalType\":\"struct LibPart.Part[]\",\"name\":\"originFees\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isMakeFill\",\"type\":\"bool\"}],\"internalType\":\"struct LibOrderDataV3.DataV3\",\"name\":\"data\",\"type\":\"tuple\"}],\"name\":\"encodeV3\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"taker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"},{\"internalType\":\"bytes4\",\"name\":\"dataType\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibOrder.Order\",\"name\":\"order\",\"type\":\"tuple\"}],\"name\":\"hashKey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"maker\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"makeAsset\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes4\",\"name\":\"assetClass\",\"type\":\"bytes4\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct LibAsset.AssetType\",\"name\":\"assetType\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"internalType\":\"struct LibAsset.Asset\",\"name\":\"takeAsset\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"hashV2\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/projects/exchange-v2/test/contracts/RaribleTestHelper.sol\":\"RaribleTestHelper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a85355cc4f2554f4a8d334336d66b48d616abf1d90ec3d6b602e825c6fe63f0c\",\"dweb:/ipfs/QmTJYtsKJjBy3ShAt4kEjvM6nfVS8ZAFQqE29fG16tUP8d\"]},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aee85054062c8bcc9fdbdfbc92a459e04b4b9437b04c98b820d0772c11aa7268\",\"dweb:/ipfs/QmQZLXFFGNh2qni7fJp9maYU1XoaP77sMBVY3MnFb2Cyed\"]},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://359411cc44a4499f37d46562ef3f348db443f9a699138c1797264d20b14697b7\",\"dweb:/ipfs/QmUmeQNUwve4MFCc1ace6zMnstqa8S9SZe1nXG9THcpQ5v\"]},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5e30d594df25d0651c2cd6f85d856e5fc9f3dbae68d017e1da33eb3c7e2f1ecc\",\"dweb:/ipfs/QmPgkV99jZr3Zs9ex8dJ5j22oX4wDuDtMCnXNy67bTwgAB\"]},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7dbc89479d30592e82442edc38053b380f611037a5e6ceafc7bf57a7aa1f0305\",\"dweb:/ipfs/QmcdYtt56WmjeYvsFjK69FnahnAriw88VzY3XRZwXkQKKN\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://45ee9cb5a548db9a3805b934f995770272583ef6c0abd31aeffb7bd1f4c2f696\",\"dweb:/ipfs/QmcHGENdTcAzU6NuaoJWgMDA2rH1JdCWJf2EXRnSE967Qw\"]},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2cbeb499bad52667b96dd7df8e9b1f583e8c07afaba0018a75e5b7ff6e777173\",\"dweb:/ipfs/QmPLJnuhEcWnpmhMHKsiuVHVxMwb5k6idYyjajbrtZLz5B\"]},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ecc8ae8f1f85e11b6f749e147ac298d1d66879f3bfe3d4518b919f7b6151a73b\",\"dweb:/ipfs/QmYXZfcnCd1N1AaxUTfNQjNHJXAAfVGvae6Bte1SfTCKEz\"]},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6b81dcc816857a9d981386f6d8de49198420ee41cdc0ecade366ab412174d03\",\"dweb:/ipfs/QmV2vznMT6m9qo3pFMAWi3Nz3UDhwesgwFxeXe6Tod3v8A\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\",\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\"]},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf05f7d8655dea90b54c9ec8d24c1e0cd9205c6f9ab9d0ff98cce01ab3988a9e\",\"dweb:/ipfs/QmTKeDUTXYD98M6heQtHwEZUP9A48pFWgU5YzMSLEvDpRq\"]},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://330001e598d2648c07a4e4c0276ed4822a24533dd6f5ad288738d8bee3c86404\",\"dweb:/ipfs/QmddZvc39hJ9nm2jvnxbjjj8v95XWnn8G4CEzuFxzWCHH6\"]},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7dd71504d010833b1c9b38c2489f85408750fa32a2752bd66ba97ace27ffffa6\",\"dweb:/ipfs/QmSfNDJQua2ErfXFj3ce1DGhdpBCQAXRW4RLnZmWJp4iNi\"]},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5bb01c6cfdb83f8574fabfc711cc8fd8a8b19f5c2cbc5821a4d4883032b2b70a\",\"dweb:/ipfs/QmdtjTyjLq7v4nAW5pU4ginva8buJCXMzcaVjbaV9Ae55n\"]},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b35890f8173983e3ac230df020cc51d79e36c53a7691a122b932bf780c6a20a\",\"dweb:/ipfs/QmbNkWijJ9xK9b1TrFXgmVvMxoxs3j1Hev6XLt3P6UBSsR\"]},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0846a9543a1d93c28d74164b18489e3b4a9f56426db431b1487a494a7fc07a27\",\"dweb:/ipfs/QmcitvWqvnYdt6i6SP5DWwB92H8bYpdbBeP7d8mdV2isRA\"]},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86e9151e83e7d5d8834d6f878961a0a86370feaf17fead696fc9a2f2e0365409\",\"dweb:/ipfs/QmdfjzMPSA71x4AQEDm9w1bhSo16Zyky1FuLiSeB8vxwFV\"]},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9826768c7f5c5423d9bbf49be50bd21ed2db5374ee47648150e50aa10e3c0151\",\"dweb:/ipfs/Qmex4xCv4MFRfCxMNZzzsKXYAFxbYWQRFsbaHiJfDTozYG\"]},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb8c814ee6e5d212551da934ead2ac847f05a57757465bd4fda124b34a44089e\",\"dweb:/ipfs/QmdsXTw92ow7gnDyCjReMFdBZArYFBFCsKdhQzE7YG3ENp\"]},\"@rarible/lib-part/contracts/LibPart.sol\":{\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://447b449f7f986ecfdea10cbc96ae276877102866353b4f8410fec0bdb357d5ae\",\"dweb:/ipfs/QmatbYwMc1UXCGGH1D9fvgLbLPNdgzBVafYW84B1nJJiRr\"]},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://21f162bc4d1ee1c5d0184c09d9d367882bae5f737d1a13bd53acf96a8e14f36d\",\"dweb:/ipfs/Qmcv1Z6P8ikAN6L8QLodA5VtYKEykgmjKmPjs6e562DoMo\"]},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3463cea638e616b682f97f288566d8f9bf0c255c8c3c71c3f856faaa1a101fa9\",\"dweb:/ipfs/QmWj1KRmFNTmAMBQYFbjCQ7thD2kpb7V2QDSZzPMEt8QQv\"]},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"keccak256\":\"0x26817b8e94229124aa1298725cc122d23ee26ca5d63effc935910aa962fe4a83\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://10fccbc38e88c4c919fe0616a946c7a18aa91d3f610f0bc5b39de945afb87d2c\",\"dweb:/ipfs/Qmd6Cmbj6frV7rhDVD85szS2y1fRygGZxagQv5ETSigwbZ\"]},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"keccak256\":\"0xea639616c66696b5ae9b278d3c6c9a85839bb5e815a4db046b4fd0225cd86625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c396a4f56d9fbd2ab50325e1d02f440972cc2fdc6e839dcdc7b3a97ee0dac62\",\"dweb:/ipfs/QmNziWD58oNGi1w7uahhXGLNzUELdCYRRBpx2XV4pVAFvA\"]},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7095c7ef181c65fae6376be15585633ce8c48c80950cc2a36c64574ee3c2b70e\",\"dweb:/ipfs/QmeB7Ysoqw9jZSkXBWa9ngm2SCQkpzc84ZUpX1mvbEWhdg\"]},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7205214325602f627f3c1ded6e33c86c6efa9f90ff2375865b2b9b4e5e22ad6b\",\"dweb:/ipfs/QmZZRcygh45GkWt723dCvaKDkRHo3SPLz3NPi3zFqA91by\"]},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"keccak256\":\"0xa547c45c10324eb0ffa9bcc246406a88f9a07cbf198c5df5832544f27495b0e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://23a0bc9507299ef10619995307a46f04c2cddf327279fcc43ce93bc3730a5345\",\"dweb:/ipfs/QmY6A2bkDEau4znQhUC9BZbMQhrHJDJ7786ChGL49sp6L6\"]},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a89218f4574b6819325391df194e287b07c7bf0d8f5f33713cf8f1ea642ab11\",\"dweb:/ipfs/QmRRWsL3jn8y7wRQdJehQU9cFo8UFzDWRf3MpzR2TKb5Fd\"]},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b739d82f1a1f9936a6cc41559f406b44b2fa1a62c12195e905c85260b7b50505\",\"dweb:/ipfs/QmNWDoTA13yCb2gvrmNWwY71nVZzPAinR6418dsVzo1TDg\"]},\"project:/projects/exchange-v2/contracts/AssetMatcher.sol\":{\"keccak256\":\"0x8fceb04eec1c1b32bea097a019b57e9422c31fa2e020e9957db91d5b03edb1bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f404c0791e24c10e8f0bc970a0114a776281e7052a1264c1d2a7eca3b01461ef\",\"dweb:/ipfs/Qmchc8HAAWGgDRh4veYW5Ne8XsKdTaWTRaD3zN5Zk3DeJe\"]},\"project:/projects/exchange-v2/contracts/ExchangeV2.sol\":{\"keccak256\":\"0x8b5d108d1e027792fd3494dda7feb79937b5bb68cec82109f3ce69fe1f01c59a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b0f9505e14c28ad986741221e3ee5b5942c312d57ee756604aaa6df7a836b192\",\"dweb:/ipfs/QmTD1xnmFmmNskFGubBthbXPxt1JxrtiZxruEKE1JMpHjW\"]},\"project:/projects/exchange-v2/contracts/ExchangeV2Core.sol\":{\"keccak256\":\"0xa93d432fd4012eb69625b23fc71744f0d28dbb1acf58165b68647beb18f5baa2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87551f89e3a1649d24ac7840dd17e204f913e413914e22763b1ef5d33dde77b0\",\"dweb:/ipfs/QmZpm54oDNZNUxsaAgFBf5Z6JTKnmcrodJAk6ngEwiNtXq\"]},\"project:/projects/exchange-v2/contracts/OrderValidator.sol\":{\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40f24037fac24f9671d6b31c65ad92b8e1f19457558511b2ce605a2ed564c108\",\"dweb:/ipfs/QmYJVwBmqwyutfqvQxLnvaK7HXHtVqKsKWNtWNYQqjsSEV\"]},\"project:/projects/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://64d413379346fce68d8ed76bbe0cd6944ca04e54d544a7d34507347d5c36c051\",\"dweb:/ipfs/Qmaae59exeAyHwEhTqhpbp8oCAejvmA5GJhyxTnixbrXLL\"]},\"project:/projects/exchange-v2/contracts/libraries/LibFill.sol\":{\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33a176237c1113ac879abcc2a8d28fd1ea95b447fa53f8c43ff745198db2bead\",\"dweb:/ipfs/QmbYCtCh5EMSD4Mz5c8adCPrb5DGo2GWU3BMPAGJR2FcY3\"]},\"project:/projects/exchange-v2/contracts/libraries/LibMath.sol\":{\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2924c6587b528fdecd101443271472ddc497cc6f4d44d61f1b62620dbce03897\",\"dweb:/ipfs/QmW6udkwDbXuJT6Pdk2KA7y6NzTm8UMkvTFFL666rd3pSD\"]},\"project:/projects/exchange-v2/contracts/libraries/LibOrder.sol\":{\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2eb634f6538f15df60dc65073de69c08a0bd341f08184fd0bc71b411ea727223\",\"dweb:/ipfs/QmReywWzzNM93bV3LjJJpPEhiLXZUVuTa28pZ5KDkF3U8X\"]},\"project:/projects/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"keccak256\":\"0x7ade2e0f39574183261011013a7eebe7a06abad9b8585e48d132a4579c2334bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://69672cdfb3befaa19f5a50b986028cc93dc07359b6dad680f467715de3425162\",\"dweb:/ipfs/QmWMH7UyGn5E9u4xX2tYuZBEsexLaKxKPgrwu9xKkHzUDi\"]},\"project:/projects/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5afbdbfb097cc777df17a25f5c936cb136bce96fc6d9f6f42d104ed7dfd9dc87\",\"dweb:/ipfs/Qme6vhxmfX5oYCBtY9bSLx4Y2WktErkupJZSqGbL37GeBx\"]},\"project:/projects/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17342ba01715b36926f06f308976491c709e8710215fe011854c9867e5a5f9e5\",\"dweb:/ipfs/QmUvbWfPNC8Loygtgf6QDn1KZyJdSQwgGDFoj58eJ2YKaV\"]},\"project:/projects/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"keccak256\":\"0x73efab7636308c9dbc8dd54db91535dd0f8915624ffe1547f545f5ba617dc126\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3600eb1193ad4582ac979493d42b0dce65d4aeb2706677b465da266855b7efa\",\"dweb:/ipfs/QmddXvqbsb81i4F2Wybb3Bnjdjkx7n1Q7mRrXT4g4i4nGH\"]},\"project:/projects/exchange-v2/test/contracts/RaribleTestHelper.sol\":{\"keccak256\":\"0x82a1251ae23acae0a390d7ecb365eddb247df19a9898b3596376db4374076134\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6896a3758344fc0a071f53f0a418e52d5a6792a41fc0081c3a355b7e31cf3938\",\"dweb:/ipfs/QmZpNB3qhVQh5McjmniKW8X495sjxg2aAMcBG5zwo3MDKc\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610f84806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638a2dc0b41161005b5780638a2dc0b4146100fc5780639a3c40fb1461010f5780639d461f5114610122578063aaed63041461012257610088565b8063058dbeef1461008d5780634fa8d605146100b65780635613ab11146100c957806375ac6ca2146100e9575b600080fd5b6100a061009b366004610ab0565b610135565b6040516100ad9190610d9d565b60405180910390f35b6100a06100c4366004610731565b610150565b6100dc6100d73660046108da565b6101a2565b6040516100ad9190610da6565b6100dc6100f73660046109ca565b6101ce565b6100a061010a3660046107d1565b6101e3565b6100dc61011d366004610805565b610203565b6100dc6101303660046108a0565b61022c565b600061014861014383610e4e565b61023f565b90505b919050565b60008561016086600001516103c7565b855161016b906103c7565b8585604051602001610181959493929190610c30565b60405160208183030381529060405280519060200120905095945050505050565b606081836040516020016101b7929190610c6e565b604051602081830303815290604052905092915050565b606081836040516020016101b7929190610d10565b6001600160a01b031960a082901b166001600160a01b0383160192915050565b6060816040516020016102169190610db9565b6040516020818303038152906040529050919050565b6060816040516020016102169190610dfb565b60e08101516000906001600160e01b031916632611a13360e11b1480610273575060e08201516001600160e01b0319908116145b156102e8578151602083015151610289906103c7565b606084015151610298906103c7565b846080015160405160200180856001600160a01b0316815260200184815260200183815260200182815260200194505050505060405160208183030381529060405280519060200120905061014b565b81516020830151516102f9906103c7565b606084015151610308906103c7565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561037457818101518382015260200161035c565b50505050905090810190601f1680156103a15780820380516001836020036101000a031916815260200191505b50965050505050505060405160208183030381529060405280519060200120905061014b565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b803561014b81610f36565b600082601f83011261044c578081fd5b8135602061046161045c83610e31565b610e0e565b82815281810190858301855b8581101561049657610484898684358b0101610569565b8452928401929084019060010161046d565b5090979650505050505050565b600082601f8301126104b3578081fd5b813560206104c361045c83610e31565b828152818101908583016040808602880185018910156104e1578687fd5b865b868110156105435781838b0312156104f9578788fd5b81518281018181106001600160401b038211171561051357fe5b8352833561052081610f36565b815261052d848801610715565b81880152855293850193918101916001016104e3565b509198975050505050505050565b80356001600160e01b03198116811461014b57600080fd5b600082601f830112610579578081fd5b81356001600160401b0381111561058c57fe5b61059f601f8201601f1916602001610e0e565b8181528460208386010111156105b3578283fd5b816020850160208301379081016020019190915292915050565b600060408083850312156105df578182fd5b80518181016001600160401b0382821081831117156105fa57fe5b81845282945085358181111561060f57600080fd5b860180880385131561062057600080fd5b60808401838110838211171561063257fe5b855261063d81610551565b8352602081013594508185111561065357600080fd5b61065f88868301610569565b60608501525050815260209384013593019290925292915050565b60006060828403121561068b578081fd5b604051606081016001600160401b0382821081831117156106a857fe5b8160405282935084359150808211156106c057600080fd5b6106cc868387016104a3565b835260208501359150808211156106e257600080fd5b506106ef858286016104a3565b6020830152506040830135801515811461070857600080fd5b6040919091015292915050565b80356bffffffffffffffffffffffff8116811461014b57600080fd5b600080600080600060a08688031215610748578081fd5b853561075381610f36565b945060208601356001600160401b038082111561076e578283fd5b61077a89838a016105cd565b9550604088013591508082111561078f578283fd5b61079b89838a016105cd565b94506060880135935060808801359150808211156107b7578283fd5b506107c488828901610569565b9150509295509295909350565b600080604083850312156107e3578182fd5b82356107ee81610f36565b91506107fc60208401610715565b90509250929050565b600060208284031215610816578081fd5b81356001600160401b038082111561082c578283fd5b908301906040828603121561083f578283fd5b60405160408101818110838211171561085457fe5b604052823582811115610865578485fd5b610871878286016104a3565b825250602083013582811115610885578485fd5b610891878286016104a3565b60208301525095945050505050565b6000602082840312156108b1578081fd5b81356001600160401b038111156108c6578182fd5b6108d28482850161067a565b949350505050565b600080604083850312156108ec578182fd5b82356001600160401b0380821115610902578384fd5b9084019060c08287031215610915578384fd5b61091f60c0610e0e565b82358152602083013582811115610934578586fd5b61094088828601610569565b60208301525060408301356040820152606083013582811115610961578586fd5b61096d888286016104a3565b606083015250608083013582811115610984578586fd5b610990888286016104a3565b60808301525060a0830135828111156109a7578586fd5b6109b38882860161043c565b60a08301525093506107fc91505060208401610431565b600080604083850312156109dc578182fd5b82356001600160401b03808211156109f2578384fd5b9084019060a08287031215610a05578384fd5b610a0f60a0610e0e565b82358152602083013582811115610a24578586fd5b610a3088828601610569565b602083015250604083013582811115610a47578586fd5b610a53888286016104a3565b604083015250606083013582811115610a6a578586fd5b610a76888286016104a3565b606083015250608083013582811115610a8d578586fd5b610a998882860161043c565b60808301525093506107fc91505060208401610431565b600060208284031215610ac1578081fd5b81356001600160401b03811115610ad6578182fd5b82016101208185031215610ae8578182fd5b9392505050565b6000815180845260208085018081965082840281019150828601855b85811015610b35578284038952610b23848351610b9e565b98850198935090840190600101610b0b565b5091979650505050505050565b6000815180845260208085019450808401835b83811015610b9357815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b55565b509495945050505050565b60008151808452815b81811015610bc357602081850181015186830182015201610ba7565b81811115610bd45782602083870101525b50601f01601f19169290920160200192915050565b6000815160608452610bfe6060850182610b42565b905060208301518482036020860152610c178282610b42565b9150506040830151151560408501528091505092915050565b600060018060a01b038716825285602083015284604083015283606083015260a06080830152610c6360a0830184610b9e565b979650505050505050565b600060018060a01b03841682526040602083015282516040830152602083015160c06060840152610ca3610100840182610b9e565b9050604084015160808401526060840151603f19808584030160a0860152610ccb8383610b42565b925060808601519150808584030160c0860152610ce88383610b42565b925060a08601519150808584030160e086015250610d068282610aef565b9695505050505050565b600060018060a01b03841682526040602083015282516040830152602083015160a06060840152610d4460e0840182610b9e565b90506040840151603f1980858403016080860152610d628383610b42565b925060608601519150808584030160a0860152610d7f8383610b42565b925060808601519150808584030160c086015250610d068282610aef565b90815260200190565b600060208252610ae86020830184610b9e565b600060208252825160406020840152610dd56060840182610b42565b90506020840151601f19848303016040850152610df28282610b42565b95945050505050565b600060208252610ae86020830184610be9565b6040518181016001600160401b0381118282101715610e2957fe5b604052919050565b60006001600160401b03821115610e4457fe5b5060209081020190565b6000610120808336031215610e61578182fd5b610e6a81610e0e565b9050610e7583610431565b815260208301356001600160401b0380821115610e90578384fd5b610e9c368387016105cd565b6020840152610ead60408601610431565b60408401526060850135915080821115610ec5578384fd5b610ed1368387016105cd565b60608401526080850135608084015260a085013560a084015260c085013560c0840152610f0060e08601610551565b60e084015261010091508185013581811115610f1a578485fd5b610f2636828801610569565b8385015250505080915050919050565b6001600160a01b0381168114610f4b57600080fd5b5056fea2646970667358221220824972a66f67a26ad3cebe69d8ea5c6f73ede9f55f05741b1aac87df6bcbe29664736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100885760003560e01c80638a2dc0b41161005b5780638a2dc0b4146100fc5780639a3c40fb1461010f5780639d461f5114610122578063aaed63041461012257610088565b8063058dbeef1461008d5780634fa8d605146100b65780635613ab11146100c957806375ac6ca2146100e9575b600080fd5b6100a061009b366004610ab0565b610135565b6040516100ad9190610d9d565b60405180910390f35b6100a06100c4366004610731565b610150565b6100dc6100d73660046108da565b6101a2565b6040516100ad9190610da6565b6100dc6100f73660046109ca565b6101ce565b6100a061010a3660046107d1565b6101e3565b6100dc61011d366004610805565b610203565b6100dc6101303660046108a0565b61022c565b600061014861014383610e4e565b61023f565b90505b919050565b60008561016086600001516103c7565b855161016b906103c7565b8585604051602001610181959493929190610c30565b60405160208183030381529060405280519060200120905095945050505050565b606081836040516020016101b7929190610c6e565b604051602081830303815290604052905092915050565b606081836040516020016101b7929190610d10565b6001600160a01b031960a082901b166001600160a01b0383160192915050565b6060816040516020016102169190610db9565b6040516020818303038152906040529050919050565b6060816040516020016102169190610dfb565b60e08101516000906001600160e01b031916632611a13360e11b1480610273575060e08201516001600160e01b0319908116145b156102e8578151602083015151610289906103c7565b606084015151610298906103c7565b846080015160405160200180856001600160a01b0316815260200184815260200183815260200182815260200194505050505060405160208183030381529060405280519060200120905061014b565b81516020830151516102f9906103c7565b606084015151610308906103c7565b846080015185610100015160405160200180866001600160a01b0316815260200185815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561037457818101518382015260200161035c565b50505050905090810190601f1680156103a15780820380516001836020036101000a031916815260200191505b50965050505050505060405160208183030381529060405280519060200120905061014b565b8051602091820151805190830120604080517f452a0dc408cb0d27ffc3b3caff933a5208040a53a9dbecd8d89cad2c0d40e00c818601526001600160e01b031990931683820152606080840192909252805180840390920182526080909201909152805191012090565b803561014b81610f36565b600082601f83011261044c578081fd5b8135602061046161045c83610e31565b610e0e565b82815281810190858301855b8581101561049657610484898684358b0101610569565b8452928401929084019060010161046d565b5090979650505050505050565b600082601f8301126104b3578081fd5b813560206104c361045c83610e31565b828152818101908583016040808602880185018910156104e1578687fd5b865b868110156105435781838b0312156104f9578788fd5b81518281018181106001600160401b038211171561051357fe5b8352833561052081610f36565b815261052d848801610715565b81880152855293850193918101916001016104e3565b509198975050505050505050565b80356001600160e01b03198116811461014b57600080fd5b600082601f830112610579578081fd5b81356001600160401b0381111561058c57fe5b61059f601f8201601f1916602001610e0e565b8181528460208386010111156105b3578283fd5b816020850160208301379081016020019190915292915050565b600060408083850312156105df578182fd5b80518181016001600160401b0382821081831117156105fa57fe5b81845282945085358181111561060f57600080fd5b860180880385131561062057600080fd5b60808401838110838211171561063257fe5b855261063d81610551565b8352602081013594508185111561065357600080fd5b61065f88868301610569565b60608501525050815260209384013593019290925292915050565b60006060828403121561068b578081fd5b604051606081016001600160401b0382821081831117156106a857fe5b8160405282935084359150808211156106c057600080fd5b6106cc868387016104a3565b835260208501359150808211156106e257600080fd5b506106ef858286016104a3565b6020830152506040830135801515811461070857600080fd5b6040919091015292915050565b80356bffffffffffffffffffffffff8116811461014b57600080fd5b600080600080600060a08688031215610748578081fd5b853561075381610f36565b945060208601356001600160401b038082111561076e578283fd5b61077a89838a016105cd565b9550604088013591508082111561078f578283fd5b61079b89838a016105cd565b94506060880135935060808801359150808211156107b7578283fd5b506107c488828901610569565b9150509295509295909350565b600080604083850312156107e3578182fd5b82356107ee81610f36565b91506107fc60208401610715565b90509250929050565b600060208284031215610816578081fd5b81356001600160401b038082111561082c578283fd5b908301906040828603121561083f578283fd5b60405160408101818110838211171561085457fe5b604052823582811115610865578485fd5b610871878286016104a3565b825250602083013582811115610885578485fd5b610891878286016104a3565b60208301525095945050505050565b6000602082840312156108b1578081fd5b81356001600160401b038111156108c6578182fd5b6108d28482850161067a565b949350505050565b600080604083850312156108ec578182fd5b82356001600160401b0380821115610902578384fd5b9084019060c08287031215610915578384fd5b61091f60c0610e0e565b82358152602083013582811115610934578586fd5b61094088828601610569565b60208301525060408301356040820152606083013582811115610961578586fd5b61096d888286016104a3565b606083015250608083013582811115610984578586fd5b610990888286016104a3565b60808301525060a0830135828111156109a7578586fd5b6109b38882860161043c565b60a08301525093506107fc91505060208401610431565b600080604083850312156109dc578182fd5b82356001600160401b03808211156109f2578384fd5b9084019060a08287031215610a05578384fd5b610a0f60a0610e0e565b82358152602083013582811115610a24578586fd5b610a3088828601610569565b602083015250604083013582811115610a47578586fd5b610a53888286016104a3565b604083015250606083013582811115610a6a578586fd5b610a76888286016104a3565b606083015250608083013582811115610a8d578586fd5b610a998882860161043c565b60808301525093506107fc91505060208401610431565b600060208284031215610ac1578081fd5b81356001600160401b03811115610ad6578182fd5b82016101208185031215610ae8578182fd5b9392505050565b6000815180845260208085018081965082840281019150828601855b85811015610b35578284038952610b23848351610b9e565b98850198935090840190600101610b0b565b5091979650505050505050565b6000815180845260208085019450808401835b83811015610b9357815180516001600160a01b031688528301516bffffffffffffffffffffffff168388015260409096019590820190600101610b55565b509495945050505050565b60008151808452815b81811015610bc357602081850181015186830182015201610ba7565b81811115610bd45782602083870101525b50601f01601f19169290920160200192915050565b6000815160608452610bfe6060850182610b42565b905060208301518482036020860152610c178282610b42565b9150506040830151151560408501528091505092915050565b600060018060a01b038716825285602083015284604083015283606083015260a06080830152610c6360a0830184610b9e565b979650505050505050565b600060018060a01b03841682526040602083015282516040830152602083015160c06060840152610ca3610100840182610b9e565b9050604084015160808401526060840151603f19808584030160a0860152610ccb8383610b42565b925060808601519150808584030160c0860152610ce88383610b42565b925060a08601519150808584030160e086015250610d068282610aef565b9695505050505050565b600060018060a01b03841682526040602083015282516040830152602083015160a06060840152610d4460e0840182610b9e565b90506040840151603f1980858403016080860152610d628383610b42565b925060608601519150808584030160a0860152610d7f8383610b42565b925060808601519150808584030160c086015250610d068282610aef565b90815260200190565b600060208252610ae86020830184610b9e565b600060208252825160406020840152610dd56060840182610b42565b90506020840151601f19848303016040850152610df28282610b42565b95945050505050565b600060208252610ae86020830184610be9565b6040518181016001600160401b0381118282101715610e2957fe5b604052919050565b60006001600160401b03821115610e4457fe5b5060209081020190565b6000610120808336031215610e61578182fd5b610e6a81610e0e565b9050610e7583610431565b815260208301356001600160401b0380821115610e90578384fd5b610e9c368387016105cd565b6020840152610ead60408601610431565b60408401526060850135915080821115610ec5578384fd5b610ed1368387016105cd565b60608401526080850135608084015260a085013560a084015260c085013560c0840152610f0060e08601610551565b60e084015261010091508185013581811115610f1a578485fd5b610f2636828801610569565b8385015250505080915050919050565b6001600160a01b0381168114610f4b57600080fd5b5056fea2646970667358221220824972a66f67a26ad3cebe69d8ea5c6f73ede9f55f05741b1aac87df6bcbe29664736f6c63430007060033", + "immutableReferences": {}, + "generatedSources": [], + "deployedGeneratedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:20131:42", + "statements": [ + { + "nodeType": "YulBlock", + "src": "6:3:42", + "statements": [] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "65:87:42", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "75:29:42", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "97:6:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "84:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "84:20:42" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "75:5:42" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "140:5:42" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "113:26:42" + }, + "nodeType": "YulFunctionCall", + "src": "113:33:42" + }, + "nodeType": "YulExpressionStatement", + "src": "113:33:42" + } + ] + }, + "name": "abi_decode_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "44:6:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "55:5:42", + "type": "" + } + ], + "src": "14:138:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "225:601:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "274:24:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "283:5:42" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "290:5:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "276:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "276:20:42" + }, + "nodeType": "YulExpressionStatement", + "src": "276:20:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "253:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "261:4:42", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "249:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "249:17:42" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "268:3:42" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "245:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "245:27:42" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "238:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "238:35:42" + }, + "nodeType": "YulIf", + "src": "235:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "307:30:42", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "330:6:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "317:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "317:20:42" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "311:2:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "346:14:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "356:4:42", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "350:2:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "369:74:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "439:2:42" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_bytes_$dyn", + "nodeType": "YulIdentifier", + "src": "395:43:42" + }, + "nodeType": "YulFunctionCall", + "src": "395:47:42" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "380:14:42" + }, + "nodeType": "YulFunctionCall", + "src": "380:63:42" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "373:3:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "452:16:42", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "465:3:42" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "456:5:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "484:3:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "489:2:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "477:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "477:15:42" + }, + "nodeType": "YulExpressionStatement", + "src": "477:15:42" + }, + { + "nodeType": "YulAssignment", + "src": "501:19:42", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "512:3:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "517:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "508:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "508:12:42" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "501:3:42" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "529:26:42", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "544:6:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "552:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "540:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "540:15:42" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "533:3:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "564:14:42", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "573:5:42" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "568:1:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "632:165:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "653:3:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "685:6:42" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "706:3:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "693:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "693:17:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "681:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "681:30:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "713:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "677:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "677:39:42" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "718:3:42" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "658:18:42" + }, + "nodeType": "YulFunctionCall", + "src": "658:64:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "646:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "646:77:42" + }, + "nodeType": "YulExpressionStatement", + "src": "646:77:42" + }, + { + "nodeType": "YulAssignment", + "src": "736:19:42", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "747:3:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "752:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "743:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "743:12:42" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "736:3:42" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "768:19:42", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "779:3:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "784:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "775:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "775:12:42" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "768:3:42" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "598:1:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "601:2:42" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "595:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "595:9:42" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "605:18:42", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "607:14:42", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "616:1:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "619:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "612:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "612:9:42" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "607:1:42" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "591:3:42", + "statements": [] + }, + "src": "587:210:42" + }, + { + "nodeType": "YulAssignment", + "src": "806:14:42", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "815:5:42" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "806:5:42" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_bytes_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "199:6:42", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "207:3:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "215:5:42", + "type": "" + } + ], + "src": "157:669:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "906:1111:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "955:24:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "964:5:42" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "971:5:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "957:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "957:20:42" + }, + "nodeType": "YulExpressionStatement", + "src": "957:20:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "934:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "942:4:42", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "930:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "930:17:42" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "949:3:42" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "926:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "926:27:42" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "919:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "919:35:42" + }, + "nodeType": "YulIf", + "src": "916:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "988:30:42", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1011:6:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "998:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "998:20:42" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "992:2:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1027:14:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1037:4:42", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "1031:2:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1050:74:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1120:2:42" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_bytes_$dyn", + "nodeType": "YulIdentifier", + "src": "1076:43:42" + }, + "nodeType": "YulFunctionCall", + "src": "1076:47:42" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "1061:14:42" + }, + "nodeType": "YulFunctionCall", + "src": "1061:63:42" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "1054:3:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1133:16:42", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1146:3:42" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "1137:5:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1165:3:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1170:2:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1158:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "1158:15:42" + }, + "nodeType": "YulExpressionStatement", + "src": "1158:15:42" + }, + { + "nodeType": "YulAssignment", + "src": "1182:19:42", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1193:3:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1198:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1189:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "1189:12:42" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1182:3:42" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1210:26:42", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1225:6:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1233:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1221:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "1221:15:42" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "1214:3:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1245:14:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1255:4:42", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "1249:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1314:24:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1323:5:42" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1330:5:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1316:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "1316:20:42" + }, + "nodeType": "YulExpressionStatement", + "src": "1316:20:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1282:6:42" + }, + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1294:2:42" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1298:2:42" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "1290:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "1290:11:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1278:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "1278:24:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1304:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1274:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "1274:33:42" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1309:3:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1271:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "1271:42:42" + }, + "nodeType": "YulIf", + "src": "1268:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1347:14:42", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1356:5:42" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "1351:1:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1415:573:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1455:24:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1464:5:42" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1471:5:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1457:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "1457:20:42" + }, + "nodeType": "YulExpressionStatement", + "src": "1457:20:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1440:3:42" + }, + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "1445:3:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1436:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "1436:13:42" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1451:2:42" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1432:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "1432:22:42" + }, + "nodeType": "YulIf", + "src": "1429:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1492:23:42", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1512:2:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "1506:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "1506:9:42" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "1496:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1528:33:42", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1550:6:42" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1558:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1546:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "1546:15:42" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "1532:10:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1640:13:42", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "1642:7:42" + }, + "nodeType": "YulFunctionCall", + "src": "1642:9:42" + }, + "nodeType": "YulExpressionStatement", + "src": "1642:9:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "1583:10:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1595:18:42", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1580:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "1580:34:42" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "1619:10:42" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1631:6:42" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "1616:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "1616:22:42" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "1577:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "1577:62:42" + }, + "nodeType": "YulIf", + "src": "1574:2:42" + }, + { + "expression": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1673:2:42" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "1677:10:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1666:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "1666:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "1666:22:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1701:30:42", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "1727:3:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "1714:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "1714:17:42" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1705:5:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1771:5:42" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "1744:26:42" + }, + "nodeType": "YulFunctionCall", + "src": "1744:33:42" + }, + "nodeType": "YulExpressionStatement", + "src": "1744:33:42" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1797:6:42" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1805:5:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1790:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "1790:21:42" + }, + "nodeType": "YulExpressionStatement", + "src": "1790:21:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1835:6:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1843:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1831:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "1831:15:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "1872:3:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1877:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1868:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "1868:12:42" + } + ], + "functionName": { + "name": "abi_decode_t_uint96", + "nodeType": "YulIdentifier", + "src": "1848:19:42" + }, + "nodeType": "YulFunctionCall", + "src": "1848:33:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1824:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "1824:58:42" + }, + "nodeType": "YulExpressionStatement", + "src": "1824:58:42" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1902:3:42" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1907:6:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1895:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "1895:19:42" + }, + "nodeType": "YulExpressionStatement", + "src": "1895:19:42" + }, + { + "nodeType": "YulAssignment", + "src": "1927:19:42", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1938:3:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1943:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1934:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "1934:12:42" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1927:3:42" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1959:19:42", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "1970:3:42" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1975:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1966:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "1966:12:42" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "1959:3:42" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1381:1:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1384:2:42" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "1378:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "1378:9:42" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "1388:18:42", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1390:14:42", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1399:1:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1402:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1395:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "1395:9:42" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1390:1:42" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "1374:3:42", + "statements": [] + }, + "src": "1370:618:42" + }, + { + "nodeType": "YulAssignment", + "src": "1997:14:42", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "2006:5:42" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1997:5:42" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "880:6:42", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "888:3:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "896:5:42", + "type": "" + } + ], + "src": "831:1186:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2072:125:42", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2082:29:42", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2104:6:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "2091:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "2091:20:42" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2082:5:42" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2175:16:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2184:1:42", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2187:1:42", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2177:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "2177:12:42" + }, + "nodeType": "YulExpressionStatement", + "src": "2177:12:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2133:5:42" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2144:5:42" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2155:3:42", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2160:10:42", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "2151:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2151:20:42" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "2140:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2140:32:42" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "2130:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "2130:43:42" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "2123:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "2123:51:42" + }, + "nodeType": "YulIf", + "src": "2120:2:42" + } + ] + }, + "name": "abi_decode_t_bytes4", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2051:6:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "2062:5:42", + "type": "" + } + ], + "src": "2022:175:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2256:488:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "2305:24:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2314:5:42" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2321:5:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2307:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "2307:20:42" + }, + "nodeType": "YulExpressionStatement", + "src": "2307:20:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2284:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2292:4:42", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2280:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2280:17:42" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "2299:3:42" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "2276:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2276:27:42" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "2269:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "2269:35:42" + }, + "nodeType": "YulIf", + "src": "2266:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2338:30:42", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2361:6:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "2348:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "2348:20:42" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "2342:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2407:13:42", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "2409:7:42" + }, + "nodeType": "YulFunctionCall", + "src": "2409:9:42" + }, + "nodeType": "YulExpressionStatement", + "src": "2409:9:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2383:2:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2387:18:42", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "2380:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "2380:26:42" + }, + "nodeType": "YulIf", + "src": "2377:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2429:69:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2471:2:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2475:4:42", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2467:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2467:13:42" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2486:2:42", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "2482:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2482:7:42" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "2463:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2463:27:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2492:4:42", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2459:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2459:38:42" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "2444:14:42" + }, + "nodeType": "YulFunctionCall", + "src": "2444:54:42" + }, + "variables": [ + { + "name": "array_1", + "nodeType": "YulTypedName", + "src": "2433:7:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "2514:7:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2523:2:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2507:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "2507:19:42" + }, + "nodeType": "YulExpressionStatement", + "src": "2507:19:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2574:24:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2583:5:42" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2590:5:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2576:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "2576:20:42" + }, + "nodeType": "YulExpressionStatement", + "src": "2576:20:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2549:6:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2557:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2545:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2545:15:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2562:4:42", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2541:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2541:26:42" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "2569:3:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "2538:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "2538:35:42" + }, + "nodeType": "YulIf", + "src": "2535:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "2624:7:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2633:4:42", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2620:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2620:18:42" + }, + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2644:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2652:4:42", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2640:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2640:17:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2659:2:42" + } + ], + "functionName": { + "name": "calldatacopy", + "nodeType": "YulIdentifier", + "src": "2607:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "2607:55:42" + }, + "nodeType": "YulExpressionStatement", + "src": "2607:55:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "2686:7:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2695:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2682:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2682:16:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2700:4:42", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2678:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2678:27:42" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2707:5:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2671:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "2671:42:42" + }, + "nodeType": "YulExpressionStatement", + "src": "2671:42:42" + }, + { + "nodeType": "YulAssignment", + "src": "2722:16:42", + "value": { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "2731:7:42" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2722:5:42" + } + ] + } + ] + }, + "name": "abi_decode_t_bytes", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2230:6:42", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "2238:3:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "2246:5:42", + "type": "" + } + ], + "src": "2202:542:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2814:995:42", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "2824:14:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2834:4:42", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "2828:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2879:24:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2888:5:42" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2895:5:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2881:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "2881:20:42" + }, + "nodeType": "YulExpressionStatement", + "src": "2881:20:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "2858:3:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2863:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "2854:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2854:19:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2875:2:42" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "2850:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2850:28:42" + }, + "nodeType": "YulIf", + "src": "2847:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2912:23:42", + "value": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2932:2:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "2926:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "2926:9:42" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "2916:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2944:33:42", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2966:6:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2974:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2962:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "2962:15:42" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "2948:10:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2986:28:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2996:18:42", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "2990:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3073:13:42", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "3075:7:42" + }, + "nodeType": "YulFunctionCall", + "src": "3075:9:42" + }, + "nodeType": "YulExpressionStatement", + "src": "3075:9:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "3032:10:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3044:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3029:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "3029:18:42" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "3052:10:42" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3064:6:42" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "3049:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "3049:22:42" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "3026:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "3026:46:42" + }, + "nodeType": "YulIf", + "src": "3023:2:42" + }, + { + "expression": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "3102:2:42" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "3106:10:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3095:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "3095:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "3095:22:42" + }, + { + "nodeType": "YulAssignment", + "src": "3126:15:42", + "value": { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3135:6:42" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3126:5:42" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3150:37:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3177:9:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "3164:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "3164:23:42" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "3154:6:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3214:16:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3223:1:42", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3226:1:42", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3216:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "3216:12:42" + }, + "nodeType": "YulExpressionStatement", + "src": "3216:12:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3202:6:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3210:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3199:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "3199:14:42" + }, + "nodeType": "YulIf", + "src": "3196:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3239:32:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3253:9:42" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3264:6:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3249:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "3249:22:42" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "3243:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3305:16:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3314:1:42", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3317:1:42", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3307:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "3307:12:42" + }, + "nodeType": "YulExpressionStatement", + "src": "3307:12:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3291:3:42" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3296:2:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3287:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "3287:12:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "3301:2:42" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "3283:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "3283:21:42" + }, + "nodeType": "YulIf", + "src": "3280:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3330:36:42", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3354:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3362:3:42", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3350:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "3350:16:42" + }, + "variables": [ + { + "name": "newFreePtr_1", + "nodeType": "YulTypedName", + "src": "3334:12:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3433:13:42", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "3435:7:42" + }, + "nodeType": "YulFunctionCall", + "src": "3435:9:42" + }, + "nodeType": "YulExpressionStatement", + "src": "3435:9:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr_1", + "nodeType": "YulIdentifier", + "src": "3384:12:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3398:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3381:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "3381:20:42" + }, + { + "arguments": [ + { + "name": "newFreePtr_1", + "nodeType": "YulIdentifier", + "src": "3406:12:42" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "3420:10:42" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "3403:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "3403:28:42" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "3378:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "3378:54:42" + }, + "nodeType": "YulIf", + "src": "3375:2:42" + }, + { + "expression": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "3462:2:42" + }, + { + "name": "newFreePtr_1", + "nodeType": "YulIdentifier", + "src": "3466:12:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3455:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "3455:24:42" + }, + "nodeType": "YulExpressionStatement", + "src": "3455:24:42" + }, + { + "expression": { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "3495:10:42" + }, + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3527:2:42" + } + ], + "functionName": { + "name": "abi_decode_t_bytes4", + "nodeType": "YulIdentifier", + "src": "3507:19:42" + }, + "nodeType": "YulFunctionCall", + "src": "3507:23:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3488:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "3488:43:42" + }, + "nodeType": "YulExpressionStatement", + "src": "3488:43:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3540:41:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3573:2:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3577:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3569:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "3569:11:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "3556:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "3556:25:42" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "3544:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3610:16:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3619:1:42", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3622:1:42", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3612:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "3612:12:42" + }, + "nodeType": "YulExpressionStatement", + "src": "3612:12:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "3596:8:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3606:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3593:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "3593:16:42" + }, + "nodeType": "YulIf", + "src": "3590:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3646:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3654:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3642:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "3642:15:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3682:2:42" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "3686:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3678:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "3678:17:42" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3697:3:42" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "3659:18:42" + }, + "nodeType": "YulFunctionCall", + "src": "3659:42:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3635:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "3635:67:42" + }, + "nodeType": "YulExpressionStatement", + "src": "3635:67:42" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3718:6:42" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "3726:10:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3711:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "3711:26:42" + }, + "nodeType": "YulExpressionStatement", + "src": "3711:26:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3757:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3765:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3753:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "3753:15:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3787:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3798:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3783:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "3783:18:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "3770:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "3770:32:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3746:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "3746:57:42" + }, + "nodeType": "YulExpressionStatement", + "src": "3746:57:42" + } + ] + }, + "name": "abi_decode_t_struct$_Asset", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "2785:9:42", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "2796:3:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "2804:5:42", + "type": "" + } + ], + "src": "2749:1060:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3880:872:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "3924:24:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3933:5:42" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3940:5:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3926:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "3926:20:42" + }, + "nodeType": "YulExpressionStatement", + "src": "3926:20:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3901:3:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3906:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3897:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "3897:19:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3918:4:42", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "3893:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "3893:30:42" + }, + "nodeType": "YulIf", + "src": "3890:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3957:23:42", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3977:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3971:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "3971:9:42" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "3961:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3989:35:42", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4011:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4019:4:42", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4007:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "4007:17:42" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "3993:10:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4033:28:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4043:18:42", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "4037:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4120:13:42", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "4122:7:42" + }, + "nodeType": "YulFunctionCall", + "src": "4122:9:42" + }, + "nodeType": "YulExpressionStatement", + "src": "4122:9:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "4079:10:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "4091:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "4076:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "4076:18:42" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "4099:10:42" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4111:6:42" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "4096:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "4096:22:42" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "4073:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "4073:46:42" + }, + "nodeType": "YulIf", + "src": "4070:2:42" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4149:2:42", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "4153:10:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4142:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "4142:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "4142:22:42" + }, + { + "nodeType": "YulAssignment", + "src": "4173:15:42", + "value": { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4182:6:42" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4173:5:42" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4197:37:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4224:9:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4211:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "4211:23:42" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "4201:6:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4261:16:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4270:1:42", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4273:1:42", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4263:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "4263:12:42" + }, + "nodeType": "YulExpressionStatement", + "src": "4263:12:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4249:6:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "4257:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "4246:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "4246:14:42" + }, + "nodeType": "YulIf", + "src": "4243:2:42" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4293:6:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4345:9:42" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4356:6:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4341:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "4341:22:42" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "4365:3:42" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "4301:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "4301:68:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4286:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "4286:84:42" + }, + "nodeType": "YulExpressionStatement", + "src": "4286:84:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4379:48:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4412:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4423:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4408:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "4408:18:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4395:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "4395:32:42" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "4383:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4456:16:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4465:1:42", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4468:1:42", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4458:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "4458:12:42" + }, + "nodeType": "YulExpressionStatement", + "src": "4458:12:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "4442:8:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "4452:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "4439:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "4439:16:42" + }, + "nodeType": "YulIf", + "src": "4436:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4492:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4500:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4488:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "4488:15:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4549:9:42" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "4560:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4545:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "4545:24:42" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "4571:3:42" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "4505:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "4505:70:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4481:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "4481:95:42" + }, + "nodeType": "YulExpressionStatement", + "src": "4481:95:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4585:47:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4617:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4628:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4613:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "4613:18:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4600:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "4600:32:42" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "4589:7:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4689:16:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4698:1:42", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4701:1:42", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4691:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "4691:12:42" + }, + "nodeType": "YulExpressionStatement", + "src": "4691:12:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "4654:7:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "4677:7:42" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "4670:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "4670:15:42" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "4663:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "4663:23:42" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "4651:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "4651:36:42" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "4644:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "4644:44:42" + }, + "nodeType": "YulIf", + "src": "4641:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4725:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4733:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4721:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "4721:15:42" + }, + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "4738:7:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4714:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "4714:32:42" + }, + "nodeType": "YulExpressionStatement", + "src": "4714:32:42" + } + ] + }, + "name": "abi_decode_t_struct$_DataV2", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "3851:9:42", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "3862:3:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3870:5:42", + "type": "" + } + ], + "src": "3814:938:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4807:131:42", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4817:29:42", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4839:6:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4826:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "4826:20:42" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4817:5:42" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4916:16:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4925:1:42", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4928:1:42", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4918:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "4918:12:42" + }, + "nodeType": "YulExpressionStatement", + "src": "4918:12:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4868:5:42" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4879:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4886:26:42", + "type": "", + "value": "0xffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "4875:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "4875:38:42" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "4865:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "4865:49:42" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "4858:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "4858:57:42" + }, + "nodeType": "YulIf", + "src": "4855:2:42" + } + ] + }, + "name": "abi_decode_t_uint96", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "4786:6:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "4797:5:42", + "type": "" + } + ], + "src": "4757:181:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5136:841:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "5183:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "5192:6:42" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "5200:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "5185:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "5185:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "5185:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "5157:7:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5166:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "5153:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "5153:23:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5178:3:42", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "5149:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "5149:33:42" + }, + "nodeType": "YulIf", + "src": "5146:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5218:36:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5244:9:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "5231:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "5231:23:42" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "5222:5:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5290:5:42" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "5263:26:42" + }, + "nodeType": "YulFunctionCall", + "src": "5263:33:42" + }, + "nodeType": "YulExpressionStatement", + "src": "5263:33:42" + }, + { + "nodeType": "YulAssignment", + "src": "5305:15:42", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5315:5:42" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "5305:6:42" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5329:46:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5360:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5371:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5356:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "5356:18:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "5343:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "5343:32:42" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "5333:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5384:28:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5394:18:42", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "5388:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5439:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "5448:6:42" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "5456:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "5441:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "5441:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "5441:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5427:6:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "5435:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "5424:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "5424:14:42" + }, + "nodeType": "YulIf", + "src": "5421:2:42" + }, + { + "nodeType": "YulAssignment", + "src": "5474:69:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5515:9:42" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5526:6:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5511:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "5511:22:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "5535:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_Asset", + "nodeType": "YulIdentifier", + "src": "5484:26:42" + }, + "nodeType": "YulFunctionCall", + "src": "5484:59:42" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "5474:6:42" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5552:48:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5585:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5596:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5581:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "5581:18:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "5568:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "5568:32:42" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "5556:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5629:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "5638:6:42" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "5646:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "5631:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "5631:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "5631:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "5615:8:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "5625:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "5612:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "5612:16:42" + }, + "nodeType": "YulIf", + "src": "5609:2:42" + }, + { + "nodeType": "YulAssignment", + "src": "5664:71:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5705:9:42" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "5716:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5701:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "5701:24:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "5727:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_Asset", + "nodeType": "YulIdentifier", + "src": "5674:26:42" + }, + "nodeType": "YulFunctionCall", + "src": "5674:61:42" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "5664:6:42" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "5744:42:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5771:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5782:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5767:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "5767:18:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "5754:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "5754:32:42" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "5744:6:42" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5795:49:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5828:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5839:3:42", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5824:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "5824:19:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "5811:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "5811:33:42" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "5799:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5873:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "5882:6:42" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "5890:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "5875:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "5875:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "5875:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "5859:8:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "5869:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "5856:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "5856:16:42" + }, + "nodeType": "YulIf", + "src": "5853:2:42" + }, + { + "nodeType": "YulAssignment", + "src": "5908:63:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5941:9:42" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "5952:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5937:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "5937:24:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "5963:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "5918:18:42" + }, + "nodeType": "YulFunctionCall", + "src": "5918:53:42" + }, + "variableNames": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "5908:6:42" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_struct$_Asset_$1789_memory_ptrt_struct$_Asset_$1789_memory_ptrt_uint256t_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "5070:9:42", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "5081:7:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "5093:6:42", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "5101:6:42", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "5109:6:42", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "5117:6:42", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "5125:6:42", + "type": "" + } + ], + "src": "4943:1034:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6068:247:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "6114:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "6123:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "6131:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "6116:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "6116:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "6116:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "6089:7:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6098:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "6085:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "6085:23:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6110:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "6081:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "6081:32:42" + }, + "nodeType": "YulIf", + "src": "6078:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6149:36:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6175:9:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "6162:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "6162:23:42" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "6153:5:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6221:5:42" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "6194:26:42" + }, + "nodeType": "YulFunctionCall", + "src": "6194:33:42" + }, + "nodeType": "YulExpressionStatement", + "src": "6194:33:42" + }, + { + "nodeType": "YulAssignment", + "src": "6236:15:42", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6246:5:42" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "6236:6:42" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "6260:49:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6294:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6305:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6290:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "6290:18:42" + } + ], + "functionName": { + "name": "abi_decode_t_uint96", + "nodeType": "YulIdentifier", + "src": "6270:19:42" + }, + "nodeType": "YulFunctionCall", + "src": "6270:39:42" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "6260:6:42" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_uint96", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "6026:9:42", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "6037:7:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "6049:6:42", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "6057:6:42", + "type": "" + } + ], + "src": "5982:333:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6414:923:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "6460:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "6469:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "6477:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "6462:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "6462:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "6462:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "6435:7:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6444:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "6431:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "6431:23:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6456:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "6427:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "6427:32:42" + }, + "nodeType": "YulIf", + "src": "6424:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6495:37:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6522:9:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "6509:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "6509:23:42" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "6499:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6541:28:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6551:18:42", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "6545:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6596:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "6605:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "6613:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "6598:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "6598:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "6598:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "6584:6:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "6592:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "6581:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "6581:14:42" + }, + "nodeType": "YulIf", + "src": "6578:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6631:32:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6645:9:42" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "6656:6:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6641:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "6641:22:42" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "6635:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6703:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "6712:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "6720:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "6705:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "6705:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "6705:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "6683:7:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "6692:2:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "6679:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "6679:16:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6697:4:42", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "6675:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "6675:27:42" + }, + "nodeType": "YulIf", + "src": "6672:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6738:25:42", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6758:4:42", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "6752:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "6752:11:42" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "6742:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6772:35:42", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "6794:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6802:4:42", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6790:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "6790:17:42" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "6776:10:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6866:13:42", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "6868:7:42" + }, + "nodeType": "YulFunctionCall", + "src": "6868:9:42" + }, + "nodeType": "YulExpressionStatement", + "src": "6868:9:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "6825:10:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "6837:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "6822:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "6822:18:42" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "6845:10:42" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "6857:6:42" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "6842:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "6842:22:42" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "6819:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "6819:46:42" + }, + "nodeType": "YulIf", + "src": "6816:2:42" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6895:4:42", + "type": "", + "value": "0x40" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "6901:10:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6888:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "6888:24:42" + }, + "nodeType": "YulExpressionStatement", + "src": "6888:24:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6921:32:42", + "value": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "6950:2:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "6937:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "6937:16:42" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "6925:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6982:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "6991:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "6999:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "6984:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "6984:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "6984:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "6968:8:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "6978:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "6965:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "6965:16:42" + }, + "nodeType": "YulIf", + "src": "6962:2:42" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "7024:6:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7076:2:42" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "7080:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7072:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "7072:17:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "7091:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "7032:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "7032:67:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7017:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "7017:83:42" + }, + "nodeType": "YulExpressionStatement", + "src": "7017:83:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7109:41:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7142:2:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7146:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7138:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "7138:11:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "7125:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "7125:25:42" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "7113:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7179:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7188:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7196:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7181:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "7181:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "7181:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "7165:8:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "7175:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "7162:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "7162:16:42" + }, + "nodeType": "YulIf", + "src": "7159:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "7225:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7233:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7221:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "7221:15:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7282:2:42" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "7286:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7278:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "7278:17:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "7297:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "7238:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "7238:67:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7214:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "7214:92:42" + }, + "nodeType": "YulExpressionStatement", + "src": "7214:92:42" + }, + { + "nodeType": "YulAssignment", + "src": "7315:16:42", + "value": { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "7325:6:42" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7315:6:42" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_DataV1_$6245_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "6380:9:42", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "6391:7:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "6403:6:42", + "type": "" + } + ], + "src": "6320:1017:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7436:272:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "7482:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7491:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7499:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7484:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "7484:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "7484:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "7457:7:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7466:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "7453:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "7453:23:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7478:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "7449:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "7449:32:42" + }, + "nodeType": "YulIf", + "src": "7446:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7517:37:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7544:9:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "7531:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "7531:23:42" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "7521:6:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7597:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7606:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7614:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7599:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "7599:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "7599:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7569:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7577:18:42", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "7566:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "7566:30:42" + }, + "nodeType": "YulIf", + "src": "7563:2:42" + }, + { + "nodeType": "YulAssignment", + "src": "7632:70:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7674:9:42" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7685:6:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7670:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "7670:22:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "7694:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_DataV2", + "nodeType": "YulIdentifier", + "src": "7642:27:42" + }, + "nodeType": "YulFunctionCall", + "src": "7642:60:42" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7632:6:42" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_DataV2_$6267_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "7402:9:42", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "7413:7:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "7425:6:42", + "type": "" + } + ], + "src": "7342:366:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7807:272:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "7853:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7862:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7870:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7855:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "7855:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "7855:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "7828:7:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7837:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "7824:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "7824:23:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7849:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "7820:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "7820:32:42" + }, + "nodeType": "YulIf", + "src": "7817:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7888:37:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7915:9:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "7902:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "7902:23:42" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "7892:6:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7968:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7977:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7985:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7970:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "7970:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "7970:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7940:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7948:18:42", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "7937:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "7937:30:42" + }, + "nodeType": "YulIf", + "src": "7934:2:42" + }, + { + "nodeType": "YulAssignment", + "src": "8003:70:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8045:9:42" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "8056:6:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8041:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "8041:22:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8065:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_DataV2", + "nodeType": "YulIdentifier", + "src": "8013:27:42" + }, + "nodeType": "YulFunctionCall", + "src": "8013:60:42" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8003:6:42" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_DataV3_$6289_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "7773:9:42", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "7784:7:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "7796:6:42", + "type": "" + } + ], + "src": "7713:366:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8201:1340:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "8247:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8256:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8264:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "8249:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "8249:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "8249:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8222:7:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8231:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "8218:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "8218:23:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8243:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "8214:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "8214:32:42" + }, + "nodeType": "YulIf", + "src": "8211:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8282:37:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8309:9:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "8296:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "8296:23:42" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "8286:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8328:28:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8338:18:42", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "8332:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8383:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8392:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8400:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "8385:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "8385:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "8385:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "8371:6:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "8379:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "8368:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "8368:14:42" + }, + "nodeType": "YulIf", + "src": "8365:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8418:32:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8432:9:42" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "8443:6:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8428:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "8428:22:42" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "8422:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8490:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8499:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8507:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "8492:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "8492:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "8492:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8470:7:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8479:2:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "8466:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "8466:16:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8484:4:42", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "8462:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "8462:27:42" + }, + "nodeType": "YulIf", + "src": "8459:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8525:33:42", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8553:4:42", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "8538:14:42" + }, + "nodeType": "YulFunctionCall", + "src": "8538:20:42" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "8529:5:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8574:5:42" + }, + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8594:2:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "8581:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "8581:16:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8567:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "8567:31:42" + }, + "nodeType": "YulExpressionStatement", + "src": "8567:31:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8607:41:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8640:2:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8644:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8636:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "8636:11:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "8623:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "8623:25:42" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "8611:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8677:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8686:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8694:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "8679:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "8679:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "8679:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "8663:8:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "8673:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "8660:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "8660:16:42" + }, + "nodeType": "YulIf", + "src": "8657:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8723:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8730:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8719:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "8719:14:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8758:2:42" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "8762:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8754:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "8754:17:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "8773:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "8735:18:42" + }, + "nodeType": "YulFunctionCall", + "src": "8735:46:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8712:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "8712:70:42" + }, + "nodeType": "YulExpressionStatement", + "src": "8712:70:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8802:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8809:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8798:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "8798:14:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8831:2:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8835:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8827:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "8827:11:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "8814:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "8814:25:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8791:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "8791:49:42" + }, + "nodeType": "YulExpressionStatement", + "src": "8791:49:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8849:41:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8882:2:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8886:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8878:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "8878:11:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "8865:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "8865:25:42" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "8853:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8919:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8928:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8936:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "8921:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "8921:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "8921:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "8905:8:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "8915:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "8902:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "8902:16:42" + }, + "nodeType": "YulIf", + "src": "8899:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8965:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8972:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8961:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "8961:14:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9021:2:42" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "9025:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9017:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "9017:17:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "9036:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "8977:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "8977:67:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8954:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "8954:91:42" + }, + "nodeType": "YulExpressionStatement", + "src": "8954:91:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9054:42:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9087:2:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9091:3:42", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9083:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "9083:12:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "9070:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "9070:26:42" + }, + "variables": [ + { + "name": "offset_3", + "nodeType": "YulTypedName", + "src": "9058:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9125:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9134:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9142:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "9127:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "9127:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "9127:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_3", + "nodeType": "YulIdentifier", + "src": "9111:8:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "9121:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "9108:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "9108:16:42" + }, + "nodeType": "YulIf", + "src": "9105:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9171:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9178:3:42", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9167:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "9167:15:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9228:2:42" + }, + { + "name": "offset_3", + "nodeType": "YulIdentifier", + "src": "9232:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9224:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "9224:17:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "9243:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "9184:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "9184:67:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9160:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "9160:92:42" + }, + "nodeType": "YulExpressionStatement", + "src": "9160:92:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9261:42:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9294:2:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9298:3:42", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9290:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "9290:12:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "9277:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "9277:26:42" + }, + "variables": [ + { + "name": "offset_4", + "nodeType": "YulTypedName", + "src": "9265:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9332:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9341:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9349:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "9334:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "9334:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "9334:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_4", + "nodeType": "YulIdentifier", + "src": "9318:8:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "9328:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "9315:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "9315:16:42" + }, + "nodeType": "YulIf", + "src": "9312:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9378:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9385:3:42", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9374:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "9374:15:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9428:2:42" + }, + { + "name": "offset_4", + "nodeType": "YulIdentifier", + "src": "9432:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9424:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "9424:17:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "9443:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_bytes_$dyn", + "nodeType": "YulIdentifier", + "src": "9391:32:42" + }, + "nodeType": "YulFunctionCall", + "src": "9391:60:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9367:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "9367:85:42" + }, + "nodeType": "YulExpressionStatement", + "src": "9367:85:42" + }, + { + "nodeType": "YulAssignment", + "src": "9461:15:42", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9471:5:42" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9461:6:42" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "9485:50:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9520:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9531:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9516:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "9516:18:42" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "9495:20:42" + }, + "nodeType": "YulFunctionCall", + "src": "9495:40:42" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "9485:6:42" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_Mint1155Data_$1449_memory_ptrt_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "8159:9:42", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "8170:7:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "8182:6:42", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "8190:6:42", + "type": "" + } + ], + "src": "8084:1457:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9662:1280:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "9708:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9717:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9725:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "9710:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "9710:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "9710:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "9683:7:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9692:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "9679:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "9679:23:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9704:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "9675:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "9675:32:42" + }, + "nodeType": "YulIf", + "src": "9672:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9743:37:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9770:9:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "9757:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "9757:23:42" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "9747:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9789:28:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9799:18:42", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "9793:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9844:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9853:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9861:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "9846:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "9846:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "9846:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9832:6:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "9840:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "9829:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "9829:14:42" + }, + "nodeType": "YulIf", + "src": "9826:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9879:32:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9893:9:42" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9904:6:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9889:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "9889:22:42" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "9883:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9951:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9960:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "9968:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "9953:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "9953:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "9953:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "9931:7:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9940:2:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "9927:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "9927:16:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9945:4:42", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "9923:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "9923:27:42" + }, + "nodeType": "YulIf", + "src": "9920:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9986:33:42", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10014:4:42", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "9999:14:42" + }, + "nodeType": "YulFunctionCall", + "src": "9999:20:42" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "9990:5:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10035:5:42" + }, + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "10055:2:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "10042:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "10042:16:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10028:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "10028:31:42" + }, + "nodeType": "YulExpressionStatement", + "src": "10028:31:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10068:41:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "10101:2:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10105:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10097:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "10097:11:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "10084:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "10084:25:42" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "10072:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10138:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "10147:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "10155:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "10140:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "10140:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "10140:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "10124:8:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10134:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "10121:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "10121:16:42" + }, + "nodeType": "YulIf", + "src": "10118:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10184:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10191:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10180:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "10180:14:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "10219:2:42" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "10223:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10215:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "10215:17:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "10234:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "10196:18:42" + }, + "nodeType": "YulFunctionCall", + "src": "10196:46:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10173:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "10173:70:42" + }, + "nodeType": "YulExpressionStatement", + "src": "10173:70:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10252:41:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "10285:2:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10289:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10281:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "10281:11:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "10268:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "10268:25:42" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "10256:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10322:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "10331:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "10339:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "10324:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "10324:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "10324:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "10308:8:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10318:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "10305:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "10305:16:42" + }, + "nodeType": "YulIf", + "src": "10302:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10368:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10375:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10364:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "10364:14:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "10424:2:42" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "10428:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10420:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "10420:17:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "10439:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "10380:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "10380:67:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10357:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "10357:91:42" + }, + "nodeType": "YulExpressionStatement", + "src": "10357:91:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10457:41:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "10490:2:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10494:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10486:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "10486:11:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "10473:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "10473:25:42" + }, + "variables": [ + { + "name": "offset_3", + "nodeType": "YulTypedName", + "src": "10461:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10527:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "10536:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "10544:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "10529:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "10529:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "10529:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_3", + "nodeType": "YulIdentifier", + "src": "10513:8:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10523:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "10510:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "10510:16:42" + }, + "nodeType": "YulIf", + "src": "10507:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10573:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10580:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10569:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "10569:14:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "10629:2:42" + }, + { + "name": "offset_3", + "nodeType": "YulIdentifier", + "src": "10633:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10625:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "10625:17:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "10644:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "10585:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "10585:67:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10562:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "10562:91:42" + }, + "nodeType": "YulExpressionStatement", + "src": "10562:91:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10662:42:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "10695:2:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10699:3:42", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10691:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "10691:12:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "10678:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "10678:26:42" + }, + "variables": [ + { + "name": "offset_4", + "nodeType": "YulTypedName", + "src": "10666:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10733:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "10742:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "10750:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "10735:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "10735:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "10735:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_4", + "nodeType": "YulIdentifier", + "src": "10719:8:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10729:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "10716:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "10716:16:42" + }, + "nodeType": "YulIf", + "src": "10713:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10779:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10786:3:42", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10775:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "10775:15:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "10829:2:42" + }, + { + "name": "offset_4", + "nodeType": "YulIdentifier", + "src": "10833:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10825:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "10825:17:42" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "10844:7:42" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_bytes_$dyn", + "nodeType": "YulIdentifier", + "src": "10792:32:42" + }, + "nodeType": "YulFunctionCall", + "src": "10792:60:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10768:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "10768:85:42" + }, + "nodeType": "YulExpressionStatement", + "src": "10768:85:42" + }, + { + "nodeType": "YulAssignment", + "src": "10862:15:42", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10872:5:42" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "10862:6:42" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "10886:50:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "10921:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10932:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10917:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "10917:18:42" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "10896:20:42" + }, + "nodeType": "YulFunctionCall", + "src": "10896:40:42" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "10886:6:42" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_Mint721Data_$1599_memory_ptrt_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "9620:9:42", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "9631:7:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "9643:6:42", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "9651:6:42", + "type": "" + } + ], + "src": "9546:1396:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11042:320:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "11088:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "11097:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "11105:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "11090:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "11090:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "11090:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "11063:7:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11072:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "11059:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "11059:23:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11084:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "11055:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "11055:32:42" + }, + "nodeType": "YulIf", + "src": "11052:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11123:37:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11150:9:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "11137:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "11137:23:42" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "11127:6:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11203:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "11212:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "11220:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "11205:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "11205:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "11205:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11175:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11183:18:42", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "11172:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "11172:30:42" + }, + "nodeType": "YulIf", + "src": "11169:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11238:32:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11252:9:42" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11263:6:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11248:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "11248:22:42" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "11242:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11309:26:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "11318:6:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "11326:6:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "11311:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "11311:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "11311:22:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "11290:7:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "11299:2:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "11286:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "11286:16:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11304:3:42", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "11282:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "11282:26:42" + }, + "nodeType": "YulIf", + "src": "11279:2:42" + }, + { + "nodeType": "YulAssignment", + "src": "11344:12:42", + "value": { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "11354:2:42" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "11344:6:42" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_Order_$5625_calldata_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "11008:9:42", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "11019:7:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "11031:6:42", + "type": "" + } + ], + "src": "10947:415:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11432:560:42", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "11442:26:42", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11462:5:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11456:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "11456:12:42" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "11446:6:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11484:3:42" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "11489:6:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11477:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "11477:19:42" + }, + "nodeType": "YulExpressionStatement", + "src": "11477:19:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11505:14:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11515:4:42", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "11509:2:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11528:31:42", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11551:3:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "11556:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11547:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "11547:12:42" + }, + "variables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "11532:11:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11568:24:42", + "value": { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "11581:11:42" + }, + "variables": [ + { + "name": "pos_1", + "nodeType": "YulTypedName", + "src": "11572:5:42", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "11601:18:42", + "value": { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "11608:11:42" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11601:3:42" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11628:39:42", + "value": { + "arguments": [ + { + "name": "pos_1", + "nodeType": "YulIdentifier", + "src": "11644:5:42" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "11655:6:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "11663:2:42" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "11651:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "11651:15:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11640:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "11640:27:42" + }, + "variables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "11632:4:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11676:28:42", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11694:5:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "11701:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11690:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "11690:14:42" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "11680:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11713:12:42", + "value": { + "name": "end", + "nodeType": "YulIdentifier", + "src": "11722:3:42" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "11717:1:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11783:183:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11804:3:42" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "11813:4:42" + }, + { + "name": "pos_1", + "nodeType": "YulIdentifier", + "src": "11819:5:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "11809:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "11809:16:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11797:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "11797:29:42" + }, + "nodeType": "YulExpressionStatement", + "src": "11797:29:42" + }, + { + "nodeType": "YulAssignment", + "src": "11839:47:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "11872:6:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11866:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "11866:13:42" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "11881:4:42" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "11847:18:42" + }, + "nodeType": "YulFunctionCall", + "src": "11847:39:42" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "11839:4:42" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "11899:25:42", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "11913:6:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "11921:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11909:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "11909:15:42" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "11899:6:42" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "11937:19:42", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11948:3:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "11953:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11944:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "11944:12:42" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "11937:3:42" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "11745:1:42" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "11748:6:42" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "11742:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "11742:13:42" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "11756:18:42", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11758:14:42", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "11767:1:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11770:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11763:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "11763:9:42" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "11758:1:42" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "11738:3:42", + "statements": [] + }, + "src": "11734:232:42" + }, + { + "nodeType": "YulAssignment", + "src": "11975:11:42", + "value": { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "11982:4:42" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "11975:3:42" + } + ] + } + ] + }, + "name": "abi_encode_t_array$_t_bytes_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "11409:5:42", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "11416:3:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "11424:3:42", + "type": "" + } + ], + "src": "11367:625:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12069:522:42", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "12079:26:42", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12099:5:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12093:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "12093:12:42" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "12083:6:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12121:3:42" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "12126:6:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12114:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "12114:19:42" + }, + "nodeType": "YulExpressionStatement", + "src": "12114:19:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "12142:14:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12152:4:42", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "12146:2:42", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "12165:19:42", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12176:3:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "12181:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12172:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12172:12:42" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12165:3:42" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "12193:28:42", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12211:5:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "12218:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12207:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12207:14:42" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "12197:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "12230:12:42", + "value": { + "name": "end", + "nodeType": "YulIdentifier", + "src": "12239:3:42" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "12234:1:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12300:266:42", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "12314:23:42", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "12330:6:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12324:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "12324:13:42" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "12318:2:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12357:3:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "12372:2:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12366:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "12366:9:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12385:3:42", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12390:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "12381:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12381:11:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12394:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "12377:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12377:19:42" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "12362:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12362:35:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12350:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "12350:48:42" + }, + "nodeType": "YulExpressionStatement", + "src": "12350:48:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12422:3:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "12427:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12418:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12418:12:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "12446:2:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "12450:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12442:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12442:11:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12436:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "12436:18:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12456:26:42", + "type": "", + "value": "0xffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "12432:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12432:51:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12411:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "12411:73:42" + }, + "nodeType": "YulExpressionStatement", + "src": "12411:73:42" + }, + { + "nodeType": "YulAssignment", + "src": "12497:21:42", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12508:3:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12513:4:42", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12504:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12504:14:42" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12497:3:42" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "12531:25:42", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "12545:6:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "12553:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12541:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12541:15:42" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "12531:6:42" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "12262:1:42" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "12265:6:42" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "12259:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "12259:13:42" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "12273:18:42", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "12275:14:42", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "12284:1:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12287:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12280:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12280:9:42" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "12275:1:42" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "12255:3:42", + "statements": [] + }, + "src": "12251:315:42" + }, + { + "nodeType": "YulAssignment", + "src": "12575:10:42", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12582:3:42" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "12575:3:42" + } + ] + } + ] + }, + "name": "abi_encode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "12046:5:42", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "12053:3:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "12061:3:42", + "type": "" + } + ], + "src": "11997:594:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12647:426:42", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "12657:26:42", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12677:5:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12671:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "12671:12:42" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "12661:6:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12699:3:42" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "12704:6:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12692:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "12692:19:42" + }, + "nodeType": "YulExpressionStatement", + "src": "12692:19:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "12720:12:42", + "value": { + "name": "end", + "nodeType": "YulIdentifier", + "src": "12729:3:42" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "12724:1:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12793:110:42", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "12807:14:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12817:4:42", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "12811:2:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12849:3:42" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "12854:1:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12845:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12845:11:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "12858:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12841:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12841:20:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12877:5:42" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "12884:1:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12873:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12873:13:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "12888:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12869:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12869:22:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12863:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "12863:29:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12834:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "12834:59:42" + }, + "nodeType": "YulExpressionStatement", + "src": "12834:59:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "12752:1:42" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "12755:6:42" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "12749:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "12749:13:42" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "12763:21:42", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "12765:17:42", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "12774:1:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12777:4:42", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12770:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12770:12:42" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "12765:1:42" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "12745:3:42", + "statements": [] + }, + "src": "12741:162:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12937:64:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "12966:3:42" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "12971:6:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12962:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12962:16:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12980:4:42", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12958:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "12958:27:42" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "12987:3:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12951:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "12951:40:42" + }, + "nodeType": "YulExpressionStatement", + "src": "12951:40:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "12918:1:42" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "12921:6:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "12915:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "12915:13:42" + }, + "nodeType": "YulIf", + "src": "12912:2:42" + }, + { + "nodeType": "YulAssignment", + "src": "13010:57:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "13025:3:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "13038:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13046:2:42", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13034:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13034:15:42" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13055:2:42", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "13051:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13051:7:42" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "13030:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13030:29:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13021:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13021:39:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13062:4:42", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13017:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13017:50:42" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "13010:3:42" + } + ] + } + ] + }, + "name": "abi_encode_t_bytes", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "12624:5:42", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "12631:3:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "12639:3:42", + "type": "" + } + ], + "src": "12596:477:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13138:443:42", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "13148:32:42", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13174:5:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13168:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "13168:12:42" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "13152:12:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "13196:3:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13201:4:42", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13189:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "13189:17:42" + }, + "nodeType": "YulExpressionStatement", + "src": "13189:17:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13215:81:42", + "value": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "13267:12:42" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "13285:3:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13290:4:42", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13281:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13281:14:42" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "13227:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "13227:69:42" + }, + "variables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "13219:4:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13305:45:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13337:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13344:4:42", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13333:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13333:16:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13327:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "13327:23:42" + }, + "variables": [ + { + "name": "memberValue0_1", + "nodeType": "YulTypedName", + "src": "13309:14:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "13370:3:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13375:4:42", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13366:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13366:14:42" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "13386:4:42" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "13392:3:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "13382:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13382:14:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13359:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "13359:38:42" + }, + "nodeType": "YulExpressionStatement", + "src": "13359:38:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13406:75:42", + "value": { + "arguments": [ + { + "name": "memberValue0_1", + "nodeType": "YulIdentifier", + "src": "13460:14:42" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "13476:4:42" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "13420:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "13420:61:42" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "13410:6:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "13501:3:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13506:4:42", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13497:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13497:14:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13537:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13544:4:42", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13533:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13533:16:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13527:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "13527:23:42" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "13520:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "13520:31:42" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "13513:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "13513:39:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13490:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "13490:63:42" + }, + "nodeType": "YulExpressionStatement", + "src": "13490:63:42" + }, + { + "nodeType": "YulAssignment", + "src": "13562:13:42", + "value": { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "13569:6:42" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "13562:3:42" + } + ] + } + ] + }, + "name": "abi_encode_t_struct$_DataV2", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "13115:5:42", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "13122:3:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "13130:3:42", + "type": "" + } + ], + "src": "13078:503:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13817:301:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13834:9:42" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "13849:6:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13865:3:42", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13870:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "13861:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13861:11:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13874:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "13857:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13857:19:42" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "13845:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13845:32:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13827:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "13827:51:42" + }, + "nodeType": "YulExpressionStatement", + "src": "13827:51:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13898:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13909:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13894:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13894:18:42" + }, + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "13914:6:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13887:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "13887:34:42" + }, + "nodeType": "YulExpressionStatement", + "src": "13887:34:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13941:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13952:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13937:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13937:18:42" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "13957:6:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13930:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "13930:34:42" + }, + "nodeType": "YulExpressionStatement", + "src": "13930:34:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13984:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13995:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13980:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "13980:18:42" + }, + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "14000:6:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13973:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "13973:34:42" + }, + "nodeType": "YulExpressionStatement", + "src": "13973:34:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14027:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14038:3:42", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14023:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14023:19:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14044:3:42", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14016:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "14016:32:42" + }, + "nodeType": "YulExpressionStatement", + "src": "14016:32:42" + }, + { + "nodeType": "YulAssignment", + "src": "14057:55:42", + "value": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "14084:6:42" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14096:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14107:3:42", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14092:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14092:19:42" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "14065:18:42" + }, + "nodeType": "YulFunctionCall", + "src": "14065:47:42" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "14057:4:42" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_address_t_bytes32_t_bytes32_t_uint256_t_bytes_memory_ptr__to_t_address_t_bytes32_t_bytes32_t_uint256_t_bytes_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "13754:9:42", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "13765:6:42", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "13773:6:42", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "13781:6:42", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "13789:6:42", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "13797:6:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "13808:4:42", + "type": "" + } + ], + "src": "13586:532:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14312:1024:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14329:9:42" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "14344:6:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14360:3:42", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14365:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "14356:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14356:11:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14369:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "14352:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14352:19:42" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "14340:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14340:32:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14322:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "14322:51:42" + }, + "nodeType": "YulExpressionStatement", + "src": "14322:51:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14393:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14404:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14389:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14389:18:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14409:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14382:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "14382:30:42" + }, + "nodeType": "YulExpressionStatement", + "src": "14382:30:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14432:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14443:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14428:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14428:18:42" + }, + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "14454:6:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14448:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "14448:13:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14421:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "14421:41:42" + }, + "nodeType": "YulExpressionStatement", + "src": "14421:41:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14471:42:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "14501:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14509:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14497:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14497:15:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14491:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "14491:22:42" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "14475:12:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14533:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14544:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14529:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14529:18:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14549:4:42", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14522:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "14522:32:42" + }, + "nodeType": "YulExpressionStatement", + "src": "14522:32:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14563:67:42", + "value": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "14596:12:42" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14614:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14625:3:42", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14610:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14610:19:42" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "14577:18:42" + }, + "nodeType": "YulFunctionCall", + "src": "14577:53:42" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "14567:6:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14650:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14661:3:42", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14646:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14646:19:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "14677:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14685:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14673:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14673:15:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14667:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "14667:22:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14639:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "14639:51:42" + }, + "nodeType": "YulExpressionStatement", + "src": "14639:51:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14699:44:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "14731:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14739:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14727:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14727:15:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14721:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "14721:22:42" + }, + "variables": [ + { + "name": "memberValue0_1", + "nodeType": "YulTypedName", + "src": "14703:14:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14752:17:42", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14766:2:42", + "type": "", + "value": "63" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "14762:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14762:7:42" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "14756:2:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14789:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14800:3:42", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14785:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14785:19:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "14814:6:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14822:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "14810:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14810:22:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "14834:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14806:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14806:31:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14778:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "14778:60:42" + }, + "nodeType": "YulExpressionStatement", + "src": "14778:60:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14847:77:42", + "value": { + "arguments": [ + { + "name": "memberValue0_1", + "nodeType": "YulIdentifier", + "src": "14901:14:42" + }, + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "14917:6:42" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "14861:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "14861:63:42" + }, + "variables": [ + { + "name": "tail_2", + "nodeType": "YulTypedName", + "src": "14851:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14933:45:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "14965:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14973:3:42", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14961:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14961:16:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14955:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "14955:23:42" + }, + "variables": [ + { + "name": "memberValue0_2", + "nodeType": "YulTypedName", + "src": "14937:14:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14998:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15009:4:42", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14994:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "14994:20:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "15024:6:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15032:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "15020:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15020:22:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "15044:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15016:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15016:31:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14987:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "14987:61:42" + }, + "nodeType": "YulExpressionStatement", + "src": "14987:61:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15057:77:42", + "value": { + "arguments": [ + { + "name": "memberValue0_2", + "nodeType": "YulIdentifier", + "src": "15111:14:42" + }, + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "15127:6:42" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "15071:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "15071:63:42" + }, + "variables": [ + { + "name": "tail_3", + "nodeType": "YulTypedName", + "src": "15061:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15143:45:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "15175:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15183:3:42", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15171:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15171:16:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15165:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "15165:23:42" + }, + "variables": [ + { + "name": "memberValue0_3", + "nodeType": "YulTypedName", + "src": "15147:14:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15208:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15219:3:42", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15204:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15204:19:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail_3", + "nodeType": "YulIdentifier", + "src": "15233:6:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15241:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "15229:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15229:22:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "15253:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15225:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15225:31:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15197:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "15197:60:42" + }, + "nodeType": "YulExpressionStatement", + "src": "15197:60:42" + }, + { + "nodeType": "YulAssignment", + "src": "15266:64:42", + "value": { + "arguments": [ + { + "name": "memberValue0_3", + "nodeType": "YulIdentifier", + "src": "15307:14:42" + }, + { + "name": "tail_3", + "nodeType": "YulIdentifier", + "src": "15323:6:42" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_bytes_$dyn", + "nodeType": "YulIdentifier", + "src": "15274:32:42" + }, + "nodeType": "YulFunctionCall", + "src": "15274:56:42" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "15266:4:42" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_address_t_struct$_Mint1155Data_$1449_memory_ptr__to_t_address_t_struct$_Mint1155Data_$1449_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "14273:9:42", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "14284:6:42", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "14292:6:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "14303:4:42", + "type": "" + } + ], + "src": "14123:1213:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15528:963:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15545:9:42" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "15560:6:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15576:3:42", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15581:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "15572:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15572:11:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15585:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "15568:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15568:19:42" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "15556:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15556:32:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15538:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "15538:51:42" + }, + "nodeType": "YulExpressionStatement", + "src": "15538:51:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15609:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15620:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15605:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15605:18:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15625:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15598:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "15598:30:42" + }, + "nodeType": "YulExpressionStatement", + "src": "15598:30:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15648:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15659:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15644:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15644:18:42" + }, + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "15670:6:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15664:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "15664:13:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15637:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "15637:41:42" + }, + "nodeType": "YulExpressionStatement", + "src": "15637:41:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15687:42:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "15717:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15725:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15713:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15713:15:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15707:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "15707:22:42" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "15691:12:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15749:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15760:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15745:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15745:18:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15765:4:42", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15738:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "15738:32:42" + }, + "nodeType": "YulExpressionStatement", + "src": "15738:32:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15779:67:42", + "value": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "15812:12:42" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15830:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15841:3:42", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15826:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15826:19:42" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "15793:18:42" + }, + "nodeType": "YulFunctionCall", + "src": "15793:53:42" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "15783:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15855:44:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "15887:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15895:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15883:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15883:15:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15877:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "15877:22:42" + }, + "variables": [ + { + "name": "memberValue0_1", + "nodeType": "YulTypedName", + "src": "15859:14:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15908:17:42", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15922:2:42", + "type": "", + "value": "63" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "15918:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15918:7:42" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "15912:2:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15945:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15956:3:42", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15941:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15941:19:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "15970:6:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15978:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "15966:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15966:22:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "15990:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15962:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "15962:31:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15934:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "15934:60:42" + }, + "nodeType": "YulExpressionStatement", + "src": "15934:60:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "16003:77:42", + "value": { + "arguments": [ + { + "name": "memberValue0_1", + "nodeType": "YulIdentifier", + "src": "16057:14:42" + }, + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "16073:6:42" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "16017:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "16017:63:42" + }, + "variables": [ + { + "name": "tail_2", + "nodeType": "YulTypedName", + "src": "16007:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "16089:44:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "16121:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16129:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16117:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "16117:15:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16111:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "16111:22:42" + }, + "variables": [ + { + "name": "memberValue0_2", + "nodeType": "YulTypedName", + "src": "16093:14:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16153:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16164:4:42", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16149:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "16149:20:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "16179:6:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16187:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "16175:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "16175:22:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "16199:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16171:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "16171:31:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16142:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "16142:61:42" + }, + "nodeType": "YulExpressionStatement", + "src": "16142:61:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "16212:77:42", + "value": { + "arguments": [ + { + "name": "memberValue0_2", + "nodeType": "YulIdentifier", + "src": "16266:14:42" + }, + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "16282:6:42" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "16226:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "16226:63:42" + }, + "variables": [ + { + "name": "tail_3", + "nodeType": "YulTypedName", + "src": "16216:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "16298:45:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "16330:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16338:3:42", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16326:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "16326:16:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16320:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "16320:23:42" + }, + "variables": [ + { + "name": "memberValue0_3", + "nodeType": "YulTypedName", + "src": "16302:14:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16363:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16374:3:42", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16359:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "16359:19:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail_3", + "nodeType": "YulIdentifier", + "src": "16388:6:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16396:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "16384:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "16384:22:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "16408:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16380:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "16380:31:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16352:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "16352:60:42" + }, + "nodeType": "YulExpressionStatement", + "src": "16352:60:42" + }, + { + "nodeType": "YulAssignment", + "src": "16421:64:42", + "value": { + "arguments": [ + { + "name": "memberValue0_3", + "nodeType": "YulIdentifier", + "src": "16462:14:42" + }, + { + "name": "tail_3", + "nodeType": "YulIdentifier", + "src": "16478:6:42" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_bytes_$dyn", + "nodeType": "YulIdentifier", + "src": "16429:32:42" + }, + "nodeType": "YulFunctionCall", + "src": "16429:56:42" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "16421:4:42" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_address_t_struct$_Mint721Data_$1599_memory_ptr__to_t_address_t_struct$_Mint721Data_$1599_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "15489:9:42", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "15500:6:42", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "15508:6:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "15519:4:42", + "type": "" + } + ], + "src": "15341:1150:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16597:76:42", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "16607:26:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16619:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16630:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16615:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "16615:18:42" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "16607:4:42" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16649:9:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "16660:6:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16642:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "16642:25:42" + }, + "nodeType": "YulExpressionStatement", + "src": "16642:25:42" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "16566:9:42", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "16577:6:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "16588:4:42", + "type": "" + } + ], + "src": "16496:177:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16797:100:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16814:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16825:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16807:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "16807:21:42" + }, + "nodeType": "YulExpressionStatement", + "src": "16807:21:42" + }, + { + "nodeType": "YulAssignment", + "src": "16837:54:42", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "16864:6:42" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16876:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16887:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16872:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "16872:18:42" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "16845:18:42" + }, + "nodeType": "YulFunctionCall", + "src": "16845:46:42" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "16837:4:42" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "16766:9:42", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "16777:6:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "16788:4:42", + "type": "" + } + ], + "src": "16678:219:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "17051:424:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17068:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17079:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17061:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "17061:21:42" + }, + "nodeType": "YulExpressionStatement", + "src": "17061:21:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "17091:33:42", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "17117:6:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17111:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "17111:13:42" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "17095:12:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17144:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17155:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17140:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "17140:18:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17160:4:42", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17133:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "17133:32:42" + }, + "nodeType": "YulExpressionStatement", + "src": "17133:32:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "17174:87:42", + "value": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "17228:12:42" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17246:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17257:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17242:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "17242:18:42" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "17188:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "17188:73:42" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "17178:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "17270:44:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "17302:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17310:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17298:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "17298:15:42" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17292:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "17292:22:42" + }, + "variables": [ + { + "name": "memberValue0_1", + "nodeType": "YulTypedName", + "src": "17274:14:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17334:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17345:4:42", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17330:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "17330:20:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "17360:6:42" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17368:9:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "17356:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "17356:22:42" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17384:2:42", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "17380:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "17380:7:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17352:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "17352:36:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17323:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "17323:66:42" + }, + "nodeType": "YulExpressionStatement", + "src": "17323:66:42" + }, + { + "nodeType": "YulAssignment", + "src": "17398:71:42", + "value": { + "arguments": [ + { + "name": "memberValue0_1", + "nodeType": "YulIdentifier", + "src": "17446:14:42" + }, + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "17462:6:42" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_Part_$dyn", + "nodeType": "YulIdentifier", + "src": "17406:39:42" + }, + "nodeType": "YulFunctionCall", + "src": "17406:63:42" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "17398:4:42" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_struct$_DataV1_$6245_memory_ptr__to_t_struct$_DataV1_$6245_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "17020:9:42", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "17031:6:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "17042:4:42", + "type": "" + } + ], + "src": "16902:573:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "17629:109:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17646:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17657:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17639:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "17639:21:42" + }, + "nodeType": "YulExpressionStatement", + "src": "17639:21:42" + }, + { + "nodeType": "YulAssignment", + "src": "17669:63:42", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "17705:6:42" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17717:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17728:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17713:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "17713:18:42" + } + ], + "functionName": { + "name": "abi_encode_t_struct$_DataV2", + "nodeType": "YulIdentifier", + "src": "17677:27:42" + }, + "nodeType": "YulFunctionCall", + "src": "17677:55:42" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "17669:4:42" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_struct$_DataV2_$6267_memory_ptr__to_t_struct$_DataV2_$6267_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "17598:9:42", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "17609:6:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "17620:4:42", + "type": "" + } + ], + "src": "17480:258:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "17892:109:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17909:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17920:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17902:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "17902:21:42" + }, + "nodeType": "YulExpressionStatement", + "src": "17902:21:42" + }, + { + "nodeType": "YulAssignment", + "src": "17932:63:42", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "17968:6:42" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17980:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17991:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17976:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "17976:18:42" + } + ], + "functionName": { + "name": "abi_encode_t_struct$_DataV2", + "nodeType": "YulIdentifier", + "src": "17940:27:42" + }, + "nodeType": "YulFunctionCall", + "src": "17940:55:42" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "17932:4:42" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_struct$_DataV3_$6289_memory_ptr__to_t_struct$_DataV3_$6289_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "17861:9:42", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "17872:6:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "17883:4:42", + "type": "" + } + ], + "src": "17743:258:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18107:76:42", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "18117:26:42", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18129:9:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18140:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18125:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "18125:18:42" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "18117:4:42" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18159:9:42" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "18170:6:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "18152:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "18152:25:42" + }, + "nodeType": "YulExpressionStatement", + "src": "18152:25:42" + } + ] + }, + "name": "abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "18076:9:42", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "18087:6:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "18098:4:42", + "type": "" + } + ], + "src": "18006:177:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18232:198:42", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "18242:19:42", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18258:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "18252:5:42" + }, + "nodeType": "YulFunctionCall", + "src": "18252:9:42" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "18242:6:42" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18270:35:42", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "18292:6:42" + }, + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "18300:4:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18288:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "18288:17:42" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "18274:10:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18380:13:42", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "18382:7:42" + }, + "nodeType": "YulFunctionCall", + "src": "18382:9:42" + }, + "nodeType": "YulExpressionStatement", + "src": "18382:9:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "18323:10:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18335:18:42", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "18320:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "18320:34:42" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "18359:10:42" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "18371:6:42" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "18356:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "18356:22:42" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "18317:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "18317:62:42" + }, + "nodeType": "YulIf", + "src": "18314:2:42" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18409:2:42", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "18413:10:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "18402:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "18402:22:42" + }, + "nodeType": "YulExpressionStatement", + "src": "18402:22:42" + } + ] + }, + "name": "allocateMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "18212:4:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "18221:6:42", + "type": "" + } + ], + "src": "18188:242:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18508:108:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "18552:13:42", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "18554:7:42" + }, + "nodeType": "YulFunctionCall", + "src": "18554:9:42" + }, + "nodeType": "YulExpressionStatement", + "src": "18554:9:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "18524:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18532:18:42", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "18521:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "18521:30:42" + }, + "nodeType": "YulIf", + "src": "18518:2:42" + }, + { + "nodeType": "YulAssignment", + "src": "18574:36:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "18590:6:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18598:4:42", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "18586:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "18586:17:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18605:4:42", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18582:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "18582:28:42" + }, + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "18574:4:42" + } + ] + } + ] + }, + "name": "array_allocation_size_t_array$_t_bytes_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "18488:6:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "18499:4:42", + "type": "" + } + ], + "src": "18435:181:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18733:1258:42", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "18743:16:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18753:6:42", + "type": "", + "value": "0x0120" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "18747:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18807:32:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "18816:9:42" + }, + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "18827:9:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "18809:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "18809:28:42" + }, + "nodeType": "YulExpressionStatement", + "src": "18809:28:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "calldatasize", + "nodeType": "YulIdentifier", + "src": "18779:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "18779:14:42" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "18795:5:42" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "18775:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "18775:26:42" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "18803:2:42" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "18771:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "18771:35:42" + }, + "nodeType": "YulIf", + "src": "18768:2:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18848:33:42", + "value": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "18878:2:42" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "18863:14:42" + }, + "nodeType": "YulFunctionCall", + "src": "18863:18:42" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "18852:7:42", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "18897:7:42" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "18927:5:42" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "18906:20:42" + }, + "nodeType": "YulFunctionCall", + "src": "18906:27:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "18890:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "18890:44:42" + }, + "nodeType": "YulExpressionStatement", + "src": "18890:44:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18943:42:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "18974:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18981:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18970:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "18970:14:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "18957:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "18957:28:42" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "18947:6:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18994:28:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19004:18:42", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "18998:2:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "19049:32:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "19058:9:42" + }, + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "19069:9:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "19051:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "19051:28:42" + }, + "nodeType": "YulExpressionStatement", + "src": "19051:28:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "19037:6:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "19045:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "19034:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "19034:14:42" + }, + "nodeType": "YulIf", + "src": "19031:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19101:7:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19110:2:42", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19097:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19097:16:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19146:5:42" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "19153:6:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19142:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19142:18:42" + }, + { + "arguments": [], + "functionName": { + "name": "calldatasize", + "nodeType": "YulIdentifier", + "src": "19162:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "19162:14:42" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_Asset", + "nodeType": "YulIdentifier", + "src": "19115:26:42" + }, + "nodeType": "YulFunctionCall", + "src": "19115:62:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "19090:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "19090:88:42" + }, + "nodeType": "YulExpressionStatement", + "src": "19090:88:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19198:7:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19207:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19194:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19194:16:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19237:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19244:2:42", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19233:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19233:14:42" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "19212:20:42" + }, + "nodeType": "YulFunctionCall", + "src": "19212:36:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "19187:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "19187:62:42" + }, + "nodeType": "YulExpressionStatement", + "src": "19187:62:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19258:44:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19291:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19298:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19287:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19287:14:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19274:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "19274:28:42" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "19262:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "19331:32:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "19340:9:42" + }, + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "19351:9:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "19333:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "19333:28:42" + }, + "nodeType": "YulExpressionStatement", + "src": "19333:28:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "19317:8:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "19327:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "19314:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "19314:16:42" + }, + "nodeType": "YulIf", + "src": "19311:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19383:7:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19392:2:42", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19379:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19379:16:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19428:5:42" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "19435:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19424:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19424:20:42" + }, + { + "arguments": [], + "functionName": { + "name": "calldatasize", + "nodeType": "YulIdentifier", + "src": "19446:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "19446:14:42" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_Asset", + "nodeType": "YulIdentifier", + "src": "19397:26:42" + }, + "nodeType": "YulFunctionCall", + "src": "19397:64:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "19372:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "19372:90:42" + }, + "nodeType": "YulExpressionStatement", + "src": "19372:90:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19482:7:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19491:3:42", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19478:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19478:17:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19514:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19521:3:42", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19510:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19510:15:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19497:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "19497:29:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "19471:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "19471:56:42" + }, + "nodeType": "YulExpressionStatement", + "src": "19471:56:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19547:7:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19556:3:42", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19543:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19543:17:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19579:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19586:3:42", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19575:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19575:15:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19562:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "19562:29:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "19536:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "19536:56:42" + }, + "nodeType": "YulExpressionStatement", + "src": "19536:56:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19612:7:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19621:3:42", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19608:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19608:17:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19644:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19651:3:42", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19640:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19640:15:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19627:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "19627:29:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "19601:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "19601:56:42" + }, + "nodeType": "YulExpressionStatement", + "src": "19601:56:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19677:7:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19686:3:42", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19673:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19673:17:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19716:5:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19723:3:42", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19712:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19712:15:42" + } + ], + "functionName": { + "name": "abi_decode_t_bytes4", + "nodeType": "YulIdentifier", + "src": "19692:19:42" + }, + "nodeType": "YulFunctionCall", + "src": "19692:36:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "19666:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "19666:63:42" + }, + "nodeType": "YulExpressionStatement", + "src": "19666:63:42" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19738:13:42", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19748:3:42", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "19742:2:42", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19760:44:42", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19793:5:42" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "19800:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19789:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19789:14:42" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19776:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "19776:28:42" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "19764:8:42", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "19833:32:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "19842:9:42" + }, + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "19853:9:42" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "19835:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "19835:28:42" + }, + "nodeType": "YulExpressionStatement", + "src": "19835:28:42" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "19819:8:42" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "19829:2:42" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "19816:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "19816:16:42" + }, + "nodeType": "YulIf", + "src": "19813:2:42" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19885:7:42" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "19894:2:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19881:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19881:16:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19922:5:42" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "19929:8:42" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19918:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "19918:20:42" + }, + { + "arguments": [], + "functionName": { + "name": "calldatasize", + "nodeType": "YulIdentifier", + "src": "19940:12:42" + }, + "nodeType": "YulFunctionCall", + "src": "19940:14:42" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "19899:18:42" + }, + "nodeType": "YulFunctionCall", + "src": "19899:56:42" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "19874:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "19874:82:42" + }, + "nodeType": "YulExpressionStatement", + "src": "19874:82:42" + }, + { + "nodeType": "YulAssignment", + "src": "19965:20:42", + "value": { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19978:7:42" + }, + "variableNames": [ + { + "name": "converted", + "nodeType": "YulIdentifier", + "src": "19965:9:42" + } + ] + } + ] + }, + "name": "convert_t_struct$_Order_$5625_calldata_ptr_to_t_struct$_Order_$5625_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "18709:5:42", + "type": "" + } + ], + "returnVariables": [ + { + "name": "converted", + "nodeType": "YulTypedName", + "src": "18719:9:42", + "type": "" + } + ], + "src": "18621:1370:42" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "20043:86:42", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "20107:16:42", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20116:1:42", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20119:1:42", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "20109:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "20109:12:42" + }, + "nodeType": "YulExpressionStatement", + "src": "20109:12:42" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "20066:5:42" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "20077:5:42" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20092:3:42", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20097:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "20088:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "20088:11:42" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20101:1:42", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "20084:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "20084:19:42" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "20073:3:42" + }, + "nodeType": "YulFunctionCall", + "src": "20073:31:42" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "20063:2:42" + }, + "nodeType": "YulFunctionCall", + "src": "20063:42:42" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "20056:6:42" + }, + "nodeType": "YulFunctionCall", + "src": "20056:50:42" + }, + "nodeType": "YulIf", + "src": "20053:2:42" + } + ] + }, + "name": "validator_revert_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "20032:5:42", + "type": "" + } + ], + "src": "19996:133:42" + } + ] + }, + "contents": "{\n { }\n function abi_decode_t_address(offset) -> value\n {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n function abi_decode_t_array$_t_bytes_$dyn(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := calldataload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_bytes_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n mstore(dst, abi_decode_t_bytes(add(add(offset, calldataload(src)), _2), end))\n dst := add(dst, _2)\n src := add(src, _2)\n }\n array := dst_1\n }\n function abi_decode_t_array$_t_struct$_Part_$dyn(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := calldataload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_bytes_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n let _3 := 0x40\n if gt(add(add(offset, mul(_1, _3)), _2), end) { revert(array, array) }\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n if slt(sub(end, src), _3) { revert(array, array) }\n let memPtr := mload(_3)\n let newFreePtr := add(memPtr, _3)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n mstore(_3, newFreePtr)\n let value := calldataload(src)\n validator_revert_t_address(value)\n mstore(memPtr, value)\n mstore(add(memPtr, _2), abi_decode_t_uint96(add(src, _2)))\n mstore(dst, memPtr)\n dst := add(dst, _2)\n src := add(src, _3)\n }\n array := dst_1\n }\n function abi_decode_t_bytes4(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n }\n function abi_decode_t_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := calldataload(offset)\n if gt(_1, 0xffffffffffffffff) { invalid() }\n let array_1 := allocateMemory(add(and(add(_1, 0x1f), not(31)), 0x20))\n mstore(array_1, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n mstore(add(add(array_1, _1), 0x20), array)\n array := array_1\n }\n function abi_decode_t_struct$_Asset(headStart, end) -> value\n {\n let _1 := 0x40\n if slt(sub(end, headStart), _1) { revert(value, value) }\n let memPtr := mload(_1)\n let newFreePtr := add(memPtr, _1)\n let _2 := 0xffffffffffffffff\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { invalid() }\n mstore(_1, newFreePtr)\n value := memPtr\n let offset := calldataload(headStart)\n if gt(offset, _2) { revert(0, 0) }\n let _3 := add(headStart, offset)\n if slt(sub(end, _3), _1) { revert(0, 0) }\n let newFreePtr_1 := add(memPtr, 128)\n if or(gt(newFreePtr_1, _2), lt(newFreePtr_1, newFreePtr)) { invalid() }\n mstore(_1, newFreePtr_1)\n mstore(newFreePtr, abi_decode_t_bytes4(_3))\n let offset_1 := calldataload(add(_3, 32))\n if gt(offset_1, _2) { revert(0, 0) }\n mstore(add(memPtr, 96), abi_decode_t_bytes(add(_3, offset_1), end))\n mstore(memPtr, newFreePtr)\n mstore(add(memPtr, 32), calldataload(add(headStart, 32)))\n }\n function abi_decode_t_struct$_DataV2(headStart, end) -> value\n {\n if slt(sub(end, headStart), 0x60) { revert(value, value) }\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, 0x60)\n let _1 := 0xffffffffffffffff\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { invalid() }\n mstore(64, newFreePtr)\n value := memPtr\n let offset := calldataload(headStart)\n if gt(offset, _1) { revert(0, 0) }\n mstore(memPtr, abi_decode_t_array$_t_struct$_Part_$dyn(add(headStart, offset), end))\n let offset_1 := calldataload(add(headStart, 32))\n if gt(offset_1, _1) { revert(0, 0) }\n mstore(add(memPtr, 32), abi_decode_t_array$_t_struct$_Part_$dyn(add(headStart, offset_1), end))\n let value_1 := calldataload(add(headStart, 64))\n if iszero(eq(value_1, iszero(iszero(value_1)))) { revert(0, 0) }\n mstore(add(memPtr, 64), value_1)\n }\n function abi_decode_t_uint96(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_struct$_Asset_$1789_memory_ptrt_struct$_Asset_$1789_memory_ptrt_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(value4, value4) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n let offset := calldataload(add(headStart, 32))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value4, value4) }\n value1 := abi_decode_t_struct$_Asset(add(headStart, offset), dataEnd)\n let offset_1 := calldataload(add(headStart, 64))\n if gt(offset_1, _1) { revert(value4, value4) }\n value2 := abi_decode_t_struct$_Asset(add(headStart, offset_1), dataEnd)\n value3 := calldataload(add(headStart, 96))\n let offset_2 := calldataload(add(headStart, 128))\n if gt(offset_2, _1) { revert(value4, value4) }\n value4 := abi_decode_t_bytes(add(headStart, offset_2), dataEnd)\n }\n function abi_decode_tuple_t_addresst_uint96(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n value1 := abi_decode_t_uint96(add(headStart, 32))\n }\n function abi_decode_tuple_t_struct$_DataV1_$6245_memory_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value0, value0) }\n let _2 := add(headStart, offset)\n if slt(sub(dataEnd, _2), 0x40) { revert(value0, value0) }\n let memPtr := mload(0x40)\n let newFreePtr := add(memPtr, 0x40)\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { invalid() }\n mstore(0x40, newFreePtr)\n let offset_1 := calldataload(_2)\n if gt(offset_1, _1) { revert(value0, value0) }\n mstore(memPtr, abi_decode_t_array$_t_struct$_Part_$dyn(add(_2, offset_1), dataEnd))\n let offset_2 := calldataload(add(_2, 32))\n if gt(offset_2, _1) { revert(value0, value0) }\n mstore(add(memPtr, 32), abi_decode_t_array$_t_struct$_Part_$dyn(add(_2, offset_2), dataEnd))\n value0 := memPtr\n }\n function abi_decode_tuple_t_struct$_DataV2_$6267_memory_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n value0 := abi_decode_t_struct$_DataV2(add(headStart, offset), dataEnd)\n }\n function abi_decode_tuple_t_struct$_DataV3_$6289_memory_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n value0 := abi_decode_t_struct$_DataV2(add(headStart, offset), dataEnd)\n }\n function abi_decode_tuple_t_struct$_Mint1155Data_$1449_memory_ptrt_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value0, value0) }\n let _2 := add(headStart, offset)\n if slt(sub(dataEnd, _2), 0xc0) { revert(value0, value0) }\n let value := allocateMemory(0xc0)\n mstore(value, calldataload(_2))\n let offset_1 := calldataload(add(_2, 32))\n if gt(offset_1, _1) { revert(value0, value0) }\n mstore(add(value, 32), abi_decode_t_bytes(add(_2, offset_1), dataEnd))\n mstore(add(value, 64), calldataload(add(_2, 64)))\n let offset_2 := calldataload(add(_2, 96))\n if gt(offset_2, _1) { revert(value0, value0) }\n mstore(add(value, 96), abi_decode_t_array$_t_struct$_Part_$dyn(add(_2, offset_2), dataEnd))\n let offset_3 := calldataload(add(_2, 128))\n if gt(offset_3, _1) { revert(value0, value0) }\n mstore(add(value, 128), abi_decode_t_array$_t_struct$_Part_$dyn(add(_2, offset_3), dataEnd))\n let offset_4 := calldataload(add(_2, 160))\n if gt(offset_4, _1) { revert(value0, value0) }\n mstore(add(value, 160), abi_decode_t_array$_t_bytes_$dyn(add(_2, offset_4), dataEnd))\n value0 := value\n value1 := abi_decode_t_address(add(headStart, 32))\n }\n function abi_decode_tuple_t_struct$_Mint721Data_$1599_memory_ptrt_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value0, value0) }\n let _2 := add(headStart, offset)\n if slt(sub(dataEnd, _2), 0xa0) { revert(value0, value0) }\n let value := allocateMemory(0xa0)\n mstore(value, calldataload(_2))\n let offset_1 := calldataload(add(_2, 32))\n if gt(offset_1, _1) { revert(value0, value0) }\n mstore(add(value, 32), abi_decode_t_bytes(add(_2, offset_1), dataEnd))\n let offset_2 := calldataload(add(_2, 64))\n if gt(offset_2, _1) { revert(value0, value0) }\n mstore(add(value, 64), abi_decode_t_array$_t_struct$_Part_$dyn(add(_2, offset_2), dataEnd))\n let offset_3 := calldataload(add(_2, 96))\n if gt(offset_3, _1) { revert(value0, value0) }\n mstore(add(value, 96), abi_decode_t_array$_t_struct$_Part_$dyn(add(_2, offset_3), dataEnd))\n let offset_4 := calldataload(add(_2, 128))\n if gt(offset_4, _1) { revert(value0, value0) }\n mstore(add(value, 128), abi_decode_t_array$_t_bytes_$dyn(add(_2, offset_4), dataEnd))\n value0 := value\n value1 := abi_decode_t_address(add(headStart, 32))\n }\n function abi_decode_tuple_t_struct$_Order_$5625_calldata_ptr(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(value0, value0) }\n let _1 := add(headStart, offset)\n if slt(sub(dataEnd, _1), 288) { revert(value0, value0) }\n value0 := _1\n }\n function abi_encode_t_array$_t_bytes_$dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n let updated_pos := add(pos, _1)\n let pos_1 := updated_pos\n pos := updated_pos\n let tail := add(pos_1, mul(length, _1))\n let srcPtr := add(value, _1)\n let i := end\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, sub(tail, pos_1))\n tail := abi_encode_t_bytes(mload(srcPtr), tail)\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n end := tail\n }\n function abi_encode_t_array$_t_struct$_Part_$dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let srcPtr := add(value, _1)\n let i := end\n for { } lt(i, length) { i := add(i, 1) }\n {\n let _2 := mload(srcPtr)\n mstore(pos, and(mload(_2), sub(shl(160, 1), 1)))\n mstore(add(pos, _1), and(mload(add(_2, _1)), 0xffffffffffffffffffffffff))\n pos := add(pos, 0x40)\n srcPtr := add(srcPtr, _1)\n }\n end := pos\n }\n function abi_encode_t_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let i := end\n for { } lt(i, length) { i := add(i, 0x20) }\n {\n let _1 := 0x20\n mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n }\n if gt(i, length)\n {\n mstore(add(add(pos, length), 0x20), end)\n }\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_t_struct$_DataV2(value, pos) -> end\n {\n let memberValue0 := mload(value)\n mstore(pos, 0x60)\n let tail := abi_encode_t_array$_t_struct$_Part_$dyn(memberValue0, add(pos, 0x60))\n let memberValue0_1 := mload(add(value, 0x20))\n mstore(add(pos, 0x20), sub(tail, pos))\n let tail_1 := abi_encode_t_array$_t_struct$_Part_$dyn(memberValue0_1, tail)\n mstore(add(pos, 0x40), iszero(iszero(mload(add(value, 0x40)))))\n end := tail_1\n }\n function abi_encode_tuple_t_address_t_bytes32_t_bytes32_t_uint256_t_bytes_memory_ptr__to_t_address_t_bytes32_t_bytes32_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value4, value3, value2, value1, value0) -> tail\n {\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), 160)\n tail := abi_encode_t_bytes(value4, add(headStart, 160))\n }\n function abi_encode_tuple_t_address_t_struct$_Mint1155Data_$1449_memory_ptr__to_t_address_t_struct$_Mint1155Data_$1449_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), 64)\n mstore(add(headStart, 64), mload(value1))\n let memberValue0 := mload(add(value1, 32))\n mstore(add(headStart, 96), 0xc0)\n let tail_1 := abi_encode_t_bytes(memberValue0, add(headStart, 256))\n mstore(add(headStart, 128), mload(add(value1, 64)))\n let memberValue0_1 := mload(add(value1, 96))\n let _1 := not(63)\n mstore(add(headStart, 160), add(sub(tail_1, headStart), _1))\n let tail_2 := abi_encode_t_array$_t_struct$_Part_$dyn(memberValue0_1, tail_1)\n let memberValue0_2 := mload(add(value1, 128))\n mstore(add(headStart, 0xc0), add(sub(tail_2, headStart), _1))\n let tail_3 := abi_encode_t_array$_t_struct$_Part_$dyn(memberValue0_2, tail_2)\n let memberValue0_3 := mload(add(value1, 160))\n mstore(add(headStart, 224), add(sub(tail_3, headStart), _1))\n tail := abi_encode_t_array$_t_bytes_$dyn(memberValue0_3, tail_3)\n }\n function abi_encode_tuple_t_address_t_struct$_Mint721Data_$1599_memory_ptr__to_t_address_t_struct$_Mint721Data_$1599_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), 64)\n mstore(add(headStart, 64), mload(value1))\n let memberValue0 := mload(add(value1, 32))\n mstore(add(headStart, 96), 0xa0)\n let tail_1 := abi_encode_t_bytes(memberValue0, add(headStart, 224))\n let memberValue0_1 := mload(add(value1, 64))\n let _1 := not(63)\n mstore(add(headStart, 128), add(sub(tail_1, headStart), _1))\n let tail_2 := abi_encode_t_array$_t_struct$_Part_$dyn(memberValue0_1, tail_1)\n let memberValue0_2 := mload(add(value1, 96))\n mstore(add(headStart, 0xa0), add(sub(tail_2, headStart), _1))\n let tail_3 := abi_encode_t_array$_t_struct$_Part_$dyn(memberValue0_2, tail_2)\n let memberValue0_3 := mload(add(value1, 128))\n mstore(add(headStart, 192), add(sub(tail_3, headStart), _1))\n tail := abi_encode_t_array$_t_bytes_$dyn(memberValue0_3, tail_3)\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_t_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_struct$_DataV1_$6245_memory_ptr__to_t_struct$_DataV1_$6245_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let memberValue0 := mload(value0)\n mstore(add(headStart, 32), 0x40)\n let tail_1 := abi_encode_t_array$_t_struct$_Part_$dyn(memberValue0, add(headStart, 96))\n let memberValue0_1 := mload(add(value0, 32))\n mstore(add(headStart, 0x40), add(sub(tail_1, headStart), not(31)))\n tail := abi_encode_t_array$_t_struct$_Part_$dyn(memberValue0_1, tail_1)\n }\n function abi_encode_tuple_t_struct$_DataV2_$6267_memory_ptr__to_t_struct$_DataV2_$6267_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_t_struct$_DataV2(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_struct$_DataV3_$6289_memory_ptr__to_t_struct$_DataV3_$6289_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_t_struct$_DataV2(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_uint256__to_t_uint256__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function allocateMemory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, size)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_t_array$_t_bytes_$dyn(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { invalid() }\n size := add(mul(length, 0x20), 0x20)\n }\n function convert_t_struct$_Order_$5625_calldata_ptr_to_t_struct$_Order_$5625_memory_ptr(value) -> converted\n {\n let _1 := 0x0120\n if slt(sub(calldatasize(), value), _1) { revert(converted, converted) }\n let value_1 := allocateMemory(_1)\n mstore(value_1, abi_decode_t_address(value))\n let offset := calldataload(add(value, 32))\n let _2 := 0xffffffffffffffff\n if gt(offset, _2) { revert(converted, converted) }\n mstore(add(value_1, 32), abi_decode_t_struct$_Asset(add(value, offset), calldatasize()))\n mstore(add(value_1, 64), abi_decode_t_address(add(value, 64)))\n let offset_1 := calldataload(add(value, 96))\n if gt(offset_1, _2) { revert(converted, converted) }\n mstore(add(value_1, 96), abi_decode_t_struct$_Asset(add(value, offset_1), calldatasize()))\n mstore(add(value_1, 128), calldataload(add(value, 128)))\n mstore(add(value_1, 160), calldataload(add(value, 160)))\n mstore(add(value_1, 192), calldataload(add(value, 192)))\n mstore(add(value_1, 224), abi_decode_t_bytes4(add(value, 224)))\n let _3 := 256\n let offset_2 := calldataload(add(value, _3))\n if gt(offset_2, _2) { revert(converted, converted) }\n mstore(add(value_1, _3), abi_decode_t_bytes(add(value, offset_2), calldatasize()))\n converted := value_1\n }\n function validator_revert_t_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n}", + "id": 42, + "language": "Yul", + "name": "#utility.yul" + } + ], + "sourceMap": "119:1786:41:-:0;;;;;;;;;;;;;;;;;;;", + "deployedSourceMap": "119:1786:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;838:155;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;999:502;;;;;;:::i;:::-;;:::i;1706:196::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1507:193::-;;;;;;:::i;:::-;;:::i;642:190::-;;;;;;:::i;:::-;;:::i;152:156::-;;;;;;:::i;:::-;;:::i;314:158::-;;;;;;:::i;:::-;;:::i;838:155::-;933:7;963:23;;980:5;963:23;:::i;:::-;:16;:23::i;:::-;956:30;;838:155;;;;:::o;999:502::-;1196:7;1293:5;1320:34;1334:9;:19;;;1320:13;:34::i;:::-;1390:19;;1376:34;;:13;:34::i;:::-;1432:4;1458;1261:219;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1234:260;;;;;;1215:279;;999:502;;;;;;;:::o;1706:196::-;1837:12;1883:5;1890:4;1872:23;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1865:30;;1706:196;;;;:::o;1507:193::-;1635:12;1681:5;1688:4;1670:23;;;;;;;;;:::i;642:190::-;-1:-1:-1;;;;;;802:3:41;784:21;;;;-1:-1:-1;;;;;809:16:41;;783:42;642:190;;;;:::o;152:156::-;250:12;296:4;285:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;278:23;;152:156;;;:::o;314:158::-;414:12;460:4;449:16;;;;;;;;:::i;1997:745:36:-;2080:14;;;;2057:7;;-1:-1:-1;;;;;;2080:35:36;-1:-1:-1;;;2080:35:36;;:75;;-1:-1:-1;2137:18:36;2119:14;;;-1:-1:-1;;;;;;2119:36:36;;;;2080:75;2076:660;;;2216:11;;2259:15;;;;:25;2245:40;;:13;:40::i;:::-;2317:15;;;;:25;2303:40;;:13;:40::i;:::-;2361:5;:10;;;2188:197;;;;;;-1:-1:-1;;;;;2188:197:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2178:208;;;;;;2171:215;;;;2076:660;2527:11;;2570:15;;;;:25;2556:40;;:13;:40::i;:::-;2628:15;;;;:25;2614:40;;:13;:40::i;:::-;2672:5;:10;;;2700:5;:10;;;2499:225;;;;;;-1:-1:-1;;;;;2499:225:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2489:236;;;;;;2482:243;;;;944:251:17;1110:20;;1158:14;;;;;1148:25;;;;;;1045:142;;;572:66;1045:142;;;;-1:-1:-1;;;;;;1045:142:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1035:153;;;;;;944:251::o;14:138:42:-;84:20;;113:33;84:20;113:33;:::i;157:669::-;;268:3;261:4;253:6;249:17;245:27;235:2;;290:5;283;276:20;235:2;330:6;317:20;356:4;380:63;395:47;439:2;395:47;:::i;:::-;380:63;:::i;:::-;477:15;;;508:12;;;;540:15;;;573:5;587:210;601:2;598:1;595:9;587:210;;;658:64;718:3;713:2;706:3;693:17;685:6;681:30;677:39;658:64;:::i;:::-;646:77;;743:12;;;;775;;;;619:1;612:9;587:210;;;-1:-1:-1;815:5:42;;225:601;-1:-1:-1;;;;;;;225:601:42:o;831:1186::-;;949:3;942:4;934:6;930:17;926:27;916:2;;971:5;964;957:20;916:2;1011:6;998:20;1037:4;1061:63;1076:47;1120:2;1076:47;:::i;1061:63::-;1158:15;;;1189:12;;;;1221:15;;;1255:4;1290:11;;;1278:24;;1274:33;;1271:42;-1:-1:-1;1268:2:42;;;1330:5;1323;1316:20;1268:2;1356:5;1370:618;1384:2;1381:1;1378:9;1370:618;;;1451:2;1445:3;1440;1436:13;1432:22;1429:2;;;1471:5;1464;1457:20;1429:2;1512;1506:9;1558:2;1550:6;1546:15;1631:6;1619:10;1616:22;-1:-1:-1;;;;;1583:10:42;1580:34;1577:62;1574:2;;;1642:9;1574:2;1666:22;;1714:17;;1744:33;1714:17;1744:33;:::i;:::-;1790:21;;1848:33;1868:12;;;1848:33;:::i;:::-;1831:15;;;1824:58;1895:19;;1934:12;;;;1966;;;;1402:1;1395:9;1370:618;;;-1:-1:-1;2006:5:42;;906:1111;-1:-1:-1;;;;;;;;906:1111:42:o;2022:175::-;2091:20;;-1:-1:-1;;;;;;2140:32:42;;2130:43;;2120:2;;2187:1;2184;2177:12;2202:542;;2299:3;2292:4;2284:6;2280:17;2276:27;2266:2;;2321:5;2314;2307:20;2266:2;2361:6;2348:20;-1:-1:-1;;;;;2383:2:42;2380:26;2377:2;;;2409:9;2377:2;2444:54;2486:2;2467:13;;-1:-1:-1;;2463:27:42;2492:4;2459:38;2444:54;:::i;:::-;2523:2;2514:7;2507:19;2569:3;2562:4;2557:2;2549:6;2545:15;2541:26;2538:35;2535:2;;;2590:5;2583;2576:20;2535:2;2659;2652:4;2644:6;2640:17;2633:4;2624:7;2620:18;2607:55;2682:16;;;2700:4;2678:27;2671:42;;;;2686:7;2256:488;-1:-1:-1;;2256:488:42:o;2749:1060::-;;2834:4;2875:2;2863:9;2858:3;2854:19;2850:28;2847:2;;;2895:5;2888;2881:20;2847:2;2932;2926:9;2974:2;2966:6;2962:15;-1:-1:-1;;;;;3064:6:42;3052:10;3049:22;3044:2;3032:10;3029:18;3026:46;3023:2;;;3075:9;3023:2;3106:10;3102:2;3095:22;3135:6;3126:15;;3177:9;3164:23;3210:2;3202:6;3199:14;3196:2;;;3226:1;3223;3216:12;3196:2;3249:22;;3287:12;;;3283:21;-1:-1:-1;3280:2:42;;;3317:1;3314;3307:12;3280:2;3362:3;3354:6;3350:16;3420:10;3406:12;3403:28;3398:2;3384:12;3381:20;3378:54;3375:2;;;3435:9;3375:2;3455:24;;3507:23;3527:2;3507:23;:::i;:::-;3495:10;3488:43;3577:2;3573;3569:11;3556:25;3540:41;;3606:2;3596:8;3593:16;3590:2;;;3622:1;3619;3612:12;3590:2;3659:42;3697:3;3686:8;3682:2;3678:17;3659:42;:::i;:::-;3654:2;3642:15;;3635:67;-1:-1:-1;;3711:26:42;;3798:2;3783:18;;;3770:32;3753:15;;3746:57;;;;2814:995;;-1:-1:-1;;2814:995:42:o;3814:938::-;;3918:4;3906:9;3901:3;3897:19;3893:30;3890:2;;;3940:5;3933;3926:20;3890:2;3977;3971:9;4019:4;4011:6;4007:17;-1:-1:-1;;;;;4111:6:42;4099:10;4096:22;4091:2;4079:10;4076:18;4073:46;4070:2;;;4122:9;4070:2;4153:10;4149:2;4142:22;4182:6;4173:15;;4224:9;4211:23;4197:37;;4257:2;4249:6;4246:14;4243:2;;;4273:1;4270;4263:12;4243:2;4301:68;4365:3;4356:6;4345:9;4341:22;4301:68;:::i;:::-;4293:6;4286:84;4423:2;4412:9;4408:18;4395:32;4379:48;;4452:2;4442:8;4439:16;4436:2;;;4468:1;4465;4458:12;4436:2;;4505:70;4571:3;4560:8;4549:9;4545:24;4505:70;:::i;:::-;4500:2;4492:6;4488:15;4481:95;;4628:2;4617:9;4613:18;4600:32;4677:7;4670:15;4663:23;4654:7;4651:36;4641:2;;4701:1;4698;4691:12;4641:2;4733;4721:15;;;;4714:32;3880:872;;-1:-1:-1;;3880:872:42:o;4757:181::-;4826:20;;4886:26;4875:38;;4865:49;;4855:2;;4928:1;4925;4918:12;4943:1034;;;;;;5178:3;5166:9;5157:7;5153:23;5149:33;5146:2;;;5200:6;5192;5185:22;5146:2;5244:9;5231:23;5263:33;5290:5;5263:33;:::i;:::-;5315:5;-1:-1:-1;5371:2:42;5356:18;;5343:32;-1:-1:-1;;;;;5424:14:42;;;5421:2;;;5456:6;5448;5441:22;5421:2;5484:59;5535:7;5526:6;5515:9;5511:22;5484:59;:::i;:::-;5474:69;;5596:2;5585:9;5581:18;5568:32;5552:48;;5625:2;5615:8;5612:16;5609:2;;;5646:6;5638;5631:22;5609:2;5674:61;5727:7;5716:8;5705:9;5701:24;5674:61;:::i;:::-;5664:71;;5782:2;5771:9;5767:18;5754:32;5744:42;;5839:3;5828:9;5824:19;5811:33;5795:49;;5869:2;5859:8;5856:16;5853:2;;;5890:6;5882;5875:22;5853:2;;5918:53;5963:7;5952:8;5941:9;5937:24;5918:53;:::i;:::-;5908:63;;;5136:841;;;;;;;;:::o;5982:333::-;;;6110:2;6098:9;6089:7;6085:23;6081:32;6078:2;;;6131:6;6123;6116:22;6078:2;6175:9;6162:23;6194:33;6221:5;6194:33;:::i;:::-;6246:5;-1:-1:-1;6270:39:42;6305:2;6290:18;;6270:39;:::i;:::-;6260:49;;6068:247;;;;;:::o;6320:1017::-;;6456:2;6444:9;6435:7;6431:23;6427:32;6424:2;;;6477:6;6469;6462:22;6424:2;6522:9;6509:23;-1:-1:-1;;;;;6592:2:42;6584:6;6581:14;6578:2;;;6613:6;6605;6598:22;6578:2;6641:22;;;;6697:4;6679:16;;;6675:27;6672:2;;;6720:6;6712;6705:22;6672:2;6758:4;6752:11;6802:4;6794:6;6790:17;6857:6;6845:10;6842:22;6837:2;6825:10;6822:18;6819:46;6816:2;;;6868:9;6816:2;6895:4;6888:24;6937:16;;6965;;;6962:2;;;6999:6;6991;6984:22;6962:2;7032:67;7091:7;7080:8;7076:2;7072:17;7032:67;:::i;:::-;7024:6;7017:83;;7146:2;7142;7138:11;7125:25;7175:2;7165:8;7162:16;7159:2;;;7196:6;7188;7181:22;7159:2;7238:67;7297:7;7286:8;7282:2;7278:17;7238:67;:::i;:::-;7233:2;7221:15;;7214:92;-1:-1:-1;7225:6:42;6414:923;-1:-1:-1;;;;;6414:923:42:o;7342:366::-;;7478:2;7466:9;7457:7;7453:23;7449:32;7446:2;;;7499:6;7491;7484:22;7446:2;7544:9;7531:23;-1:-1:-1;;;;;7569:6:42;7566:30;7563:2;;;7614:6;7606;7599:22;7563:2;7642:60;7694:7;7685:6;7674:9;7670:22;7642:60;:::i;:::-;7632:70;7436:272;-1:-1:-1;;;;7436:272:42:o;8084:1457::-;;;8243:2;8231:9;8222:7;8218:23;8214:32;8211:2;;;8264:6;8256;8249:22;8211:2;8309:9;8296:23;-1:-1:-1;;;;;8379:2:42;8371:6;8368:14;8365:2;;;8400:6;8392;8385:22;8365:2;8428:22;;;;8484:4;8466:16;;;8462:27;8459:2;;;8507:6;8499;8492:22;8459:2;8538:20;8553:4;8538:20;:::i;:::-;8594:2;8581:16;8574:5;8567:31;8644:2;8640;8636:11;8623:25;8673:2;8663:8;8660:16;8657:2;;;8694:6;8686;8679:22;8657:2;8735:46;8773:7;8762:8;8758:2;8754:17;8735:46;:::i;:::-;8730:2;8723:5;8719:14;8712:70;;8835:2;8831;8827:11;8814:25;8809:2;8802:5;8798:14;8791:49;8886:2;8882;8878:11;8865:25;8915:2;8905:8;8902:16;8899:2;;;8936:6;8928;8921:22;8899:2;8977:67;9036:7;9025:8;9021:2;9017:17;8977:67;:::i;:::-;8972:2;8965:5;8961:14;8954:91;;9091:3;9087:2;9083:12;9070:26;9121:2;9111:8;9108:16;9105:2;;;9142:6;9134;9127:22;9105:2;9184:67;9243:7;9232:8;9228:2;9224:17;9184:67;:::i;:::-;9178:3;9171:5;9167:15;9160:92;;9298:3;9294:2;9290:12;9277:26;9328:2;9318:8;9315:16;9312:2;;;9349:6;9341;9334:22;9312:2;9391:60;9443:7;9432:8;9428:2;9424:17;9391:60;:::i;:::-;9385:3;9374:15;;9367:85;-1:-1:-1;9378:5:42;-1:-1:-1;9495:40:42;;-1:-1:-1;;9531:2:42;9516:18;;9495:40;:::i;9546:1396::-;;;9704:2;9692:9;9683:7;9679:23;9675:32;9672:2;;;9725:6;9717;9710:22;9672:2;9770:9;9757:23;-1:-1:-1;;;;;9840:2:42;9832:6;9829:14;9826:2;;;9861:6;9853;9846:22;9826:2;9889:22;;;;9945:4;9927:16;;;9923:27;9920:2;;;9968:6;9960;9953:22;9920:2;9999:20;10014:4;9999:20;:::i;:::-;10055:2;10042:16;10035:5;10028:31;10105:2;10101;10097:11;10084:25;10134:2;10124:8;10121:16;10118:2;;;10155:6;10147;10140:22;10118:2;10196:46;10234:7;10223:8;10219:2;10215:17;10196:46;:::i;:::-;10191:2;10184:5;10180:14;10173:70;;10289:2;10285;10281:11;10268:25;10318:2;10308:8;10305:16;10302:2;;;10339:6;10331;10324:22;10302:2;10380:67;10439:7;10428:8;10424:2;10420:17;10380:67;:::i;:::-;10375:2;10368:5;10364:14;10357:91;;10494:2;10490;10486:11;10473:25;10523:2;10513:8;10510:16;10507:2;;;10544:6;10536;10529:22;10507:2;10585:67;10644:7;10633:8;10629:2;10625:17;10585:67;:::i;:::-;10580:2;10573:5;10569:14;10562:91;;10699:3;10695:2;10691:12;10678:26;10729:2;10719:8;10716:16;10713:2;;;10750:6;10742;10735:22;10713:2;10792:60;10844:7;10833:8;10829:2;10825:17;10792:60;:::i;:::-;10786:3;10775:15;;10768:85;-1:-1:-1;10779:5:42;-1:-1:-1;10896:40:42;;-1:-1:-1;;10932:2:42;10917:18;;10896:40;:::i;10947:415::-;;11084:2;11072:9;11063:7;11059:23;11055:32;11052:2;;;11105:6;11097;11090:22;11052:2;11150:9;11137:23;-1:-1:-1;;;;;11175:6:42;11172:30;11169:2;;;11220:6;11212;11205:22;11169:2;11248:22;;11304:3;11286:16;;;11282:26;11279:2;;;11326:6;11318;11311:22;11279:2;11354;11042:320;-1:-1:-1;;;11042:320:42:o;11367:625::-;;11462:5;11456:12;11489:6;11484:3;11477:19;11515:4;11556:2;11551:3;11547:12;11581:11;11608;11601:18;;11663:2;11655:6;11651:15;11644:5;11640:27;11628:39;;11701:2;11694:5;11690:14;11722:3;11734:232;11748:6;11745:1;11742:13;11734:232;;;11819:5;11813:4;11809:16;11804:3;11797:29;11847:39;11881:4;11872:6;11866:13;11847:39;:::i;:::-;11944:12;;;;11839:47;-1:-1:-1;11909:15:42;;;;11770:1;11763:9;11734:232;;;-1:-1:-1;11982:4:42;;11432:560;-1:-1:-1;;;;;;;11432:560:42:o;11997:594::-;;12099:5;12093:12;12126:6;12121:3;12114:19;12152:4;12181:2;12176:3;12172:12;12165:19;;12218:2;12211:5;12207:14;12239:3;12251:315;12265:6;12262:1;12259:13;12251:315;;;12324:13;;12366:9;;-1:-1:-1;;;;;12362:35:42;12350:48;;12442:11;;12436:18;12456:26;12432:51;12418:12;;;12411:73;12513:4;12504:14;;;;12541:15;;;;12394:1;12280:9;12251:315;;;-1:-1:-1;12582:3:42;;12069:522;-1:-1:-1;;;;;12069:522:42:o;12596:477::-;;12677:5;12671:12;12704:6;12699:3;12692:19;12729:3;12741:162;12755:6;12752:1;12749:13;12741:162;;;12817:4;12873:13;;;12869:22;;12863:29;12845:11;;;12841:20;;12834:59;12770:12;12741:162;;;12921:6;12918:1;12915:13;12912:2;;;12987:3;12980:4;12971:6;12966:3;12962:16;12958:27;12951:40;12912:2;-1:-1:-1;13055:2:42;13034:15;-1:-1:-1;;13030:29:42;13021:39;;;;13062:4;13017:50;;12647:426;-1:-1:-1;;12647:426:42:o;13078:503::-;;13174:5;13168:12;13201:4;13196:3;13189:17;13227:69;13290:4;13285:3;13281:14;13267:12;13227:69;:::i;:::-;13215:81;;13344:4;13337:5;13333:16;13327:23;13392:3;13386:4;13382:14;13375:4;13370:3;13366:14;13359:38;13420:61;13476:4;13460:14;13420:61;:::i;:::-;13406:75;;;13544:4;13537:5;13533:16;13527:23;13520:31;13513:39;13506:4;13501:3;13497:14;13490:63;13569:6;13562:13;;;13138:443;;;;:::o;13586:532::-;;13874:1;13870;13865:3;13861:11;13857:19;13849:6;13845:32;13834:9;13827:51;13914:6;13909:2;13898:9;13894:18;13887:34;13957:6;13952:2;13941:9;13937:18;13930:34;14000:6;13995:2;13984:9;13980:18;13973:34;14044:3;14038;14027:9;14023:19;14016:32;14065:47;14107:3;14096:9;14092:19;14084:6;14065:47;:::i;:::-;14057:55;13817:301;-1:-1:-1;;;;;;;13817:301:42:o;14123:1213::-;;14369:1;14365;14360:3;14356:11;14352:19;14344:6;14340:32;14329:9;14322:51;14409:2;14404;14393:9;14389:18;14382:30;14454:6;14448:13;14443:2;14432:9;14428:18;14421:41;14509:2;14501:6;14497:15;14491:22;14549:4;14544:2;14533:9;14529:18;14522:32;14577:53;14625:3;14614:9;14610:19;14596:12;14577:53;:::i;:::-;14563:67;;14685:2;14677:6;14673:15;14667:22;14661:3;14650:9;14646:19;14639:51;14739:2;14731:6;14727:15;14721:22;14766:2;14762:7;14834:2;14822:9;14814:6;14810:22;14806:31;14800:3;14789:9;14785:19;14778:60;14861:63;14917:6;14901:14;14861:63;:::i;:::-;14847:77;;14973:3;14965:6;14961:16;14955:23;14933:45;;15044:2;15032:9;15024:6;15020:22;15016:31;15009:4;14998:9;14994:20;14987:61;15071:63;15127:6;15111:14;15071:63;:::i;:::-;15057:77;;15183:3;15175:6;15171:16;15165:23;15143:45;;15253:2;15241:9;15233:6;15229:22;15225:31;15219:3;15208:9;15204:19;15197:60;;15274:56;15323:6;15307:14;15274:56;:::i;:::-;15266:64;14312:1024;-1:-1:-1;;;;;;14312:1024:42:o;15341:1150::-;;15585:1;15581;15576:3;15572:11;15568:19;15560:6;15556:32;15545:9;15538:51;15625:2;15620;15609:9;15605:18;15598:30;15670:6;15664:13;15659:2;15648:9;15644:18;15637:41;15725:2;15717:6;15713:15;15707:22;15765:4;15760:2;15749:9;15745:18;15738:32;15793:53;15841:3;15830:9;15826:19;15812:12;15793:53;:::i;:::-;15779:67;;15895:2;15887:6;15883:15;15877:22;15922:2;15918:7;15990:2;15978:9;15970:6;15966:22;15962:31;15956:3;15945:9;15941:19;15934:60;16017:63;16073:6;16057:14;16017:63;:::i;:::-;16003:77;;16129:2;16121:6;16117:15;16111:22;16089:44;;16199:2;16187:9;16179:6;16175:22;16171:31;16164:4;16153:9;16149:20;16142:61;16226:63;16282:6;16266:14;16226:63;:::i;:::-;16212:77;;16338:3;16330:6;16326:16;16320:23;16298:45;;16408:2;16396:9;16388:6;16384:22;16380:31;16374:3;16363:9;16359:19;16352:60;;16429:56;16478:6;16462:14;16429:56;:::i;16496:177::-;16642:25;;;16630:2;16615:18;;16597:76::o;16678:219::-;;16825:2;16814:9;16807:21;16845:46;16887:2;16876:9;16872:18;16864:6;16845:46;:::i;16902:573::-;;17079:2;17068:9;17061:21;17117:6;17111:13;17160:4;17155:2;17144:9;17140:18;17133:32;17188:73;17257:2;17246:9;17242:18;17228:12;17188:73;:::i;:::-;17174:87;;17310:2;17302:6;17298:15;17292:22;17384:2;17380:7;17368:9;17360:6;17356:22;17352:36;17345:4;17334:9;17330:20;17323:66;17406:63;17462:6;17446:14;17406:63;:::i;:::-;17398:71;17051:424;-1:-1:-1;;;;;17051:424:42:o;17480:258::-;;17657:2;17646:9;17639:21;17677:55;17728:2;17717:9;17713:18;17705:6;17677:55;:::i;18188:242::-;18258:2;18252:9;18288:17;;;-1:-1:-1;;;;;18320:34:42;;18356:22;;;18317:62;18314:2;;;18382:9;18314:2;18409;18402:22;18232:198;;-1:-1:-1;18232:198:42:o;18435:181::-;;-1:-1:-1;;;;;18524:6:42;18521:30;18518:2;;;18554:9;18518:2;-1:-1:-1;18605:4:42;18586:17;;;18582:28;;18508:108::o;18621:1370::-;;18753:6;18803:2;18795:5;18779:14;18775:26;18771:35;18768:2;;;18827:9;18816;18809:28;18768:2;18863:18;18878:2;18863:18;:::i;:::-;18848:33;;18906:27;18927:5;18906:27;:::i;:::-;18897:7;18890:44;18981:2;18974:5;18970:14;18957:28;-1:-1:-1;;;;;19045:2:42;19037:6;19034:14;19031:2;;;19069:9;19058;19051:28;19031:2;19115:62;19162:14;19153:6;19146:5;19142:18;19115:62;:::i;:::-;19110:2;19101:7;19097:16;19090:88;19212:36;19244:2;19237:5;19233:14;19212:36;:::i;:::-;19207:2;19198:7;19194:16;19187:62;19298:2;19291:5;19287:14;19274:28;19258:44;;19327:2;19317:8;19314:16;19311:2;;;19351:9;19340;19333:28;19311:2;19397:64;19446:14;19435:8;19428:5;19424:20;19397:64;:::i;:::-;19392:2;19383:7;19379:16;19372:90;19521:3;19514:5;19510:15;19497:29;19491:3;19482:7;19478:17;19471:56;19586:3;19579:5;19575:15;19562:29;19556:3;19547:7;19543:17;19536:56;19651:3;19644:5;19640:15;19627:29;19621:3;19612:7;19608:17;19601:56;19692:36;19723:3;19716:5;19712:15;19692:36;:::i;:::-;19686:3;19677:7;19673:17;19666:63;19748:3;19738:13;;19800:2;19793:5;19789:14;19776:28;19829:2;19819:8;19816:16;19813:2;;;19853:9;19842;19835:28;19813:2;19899:56;19940:14;19929:8;19922:5;19918:20;19899:56;:::i;:::-;19894:2;19885:7;19881:16;19874:82;;;;19978:7;19965:20;;;18733:1258;;;:::o;19996:133::-;-1:-1:-1;;;;;20073:31:42;;20063:42;;20053:2;;20119:1;20116;20109:12;20053:2;20043:86;:::o", + "source": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"../../contracts/ExchangeV2.sol\";\n\ncontract RaribleTestHelper {\n function encode(LibOrderDataV1.DataV1 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV2(LibOrderDataV2.DataV2 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeV3(LibOrderDataV3.DataV3 memory data)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(data);\n }\n\n function encodeOriginFeeIntoUint(address account, uint96 value)\n external\n pure\n returns (uint256)\n {\n return (uint256(value) << 160) + uint256(account);\n }\n\n function hashKey(LibOrder.Order calldata order)\n external\n pure\n returns (bytes32)\n {\n return LibOrder.hashKey(order);\n }\n\n function hashV2(\n address maker,\n LibAsset.Asset memory makeAsset,\n LibAsset.Asset memory takeAsset,\n uint256 salt,\n bytes memory data\n ) public pure returns (bytes32) {\n return\n keccak256(\n abi.encode(\n maker,\n LibAsset.hash(makeAsset.assetType),\n LibAsset.hash(takeAsset.assetType),\n salt,\n data\n )\n );\n }\n\n function encodeLazy721(LibERC721LazyMint.Mint721Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n function encodeLazy1155(LibERC1155LazyMint.Mint1155Data memory data, address token)\n external\n pure\n returns (bytes memory)\n {\n return abi.encode(token, data);\n }\n\n}\n", + "sourcePath": "/Users/gonzaotc/developer/github/rarible/protocol-contracts/projects/exchange-v2/test/contracts/RaribleTestHelper.sol", + "ast": { + "absolutePath": "project:/projects/exchange-v2/test/contracts/RaribleTestHelper.sol", + "exportedSymbols": { + "AddressUpgradeable": [ + 1283 + ], + "AssetMatcher": [ + 3926 + ], + "BpLibrary": [ + 1857 + ], + "ContextUpgradeable": [ + 1328 + ], + "EIP712Upgradeable": [ + 290 + ], + "ExchangeV2": [ + 4051 + ], + "ExchangeV2Core": [ + 5028 + ], + "IAssetMatcher": [ + 1342 + ], + "IERC1155Upgradeable": [ + 845 + ], + "IERC1271": [ + 1902 + ], + "IERC165Upgradeable": [ + 302 + ], + "IERC20TransferProxy": [ + 1358 + ], + "IERC20Upgradeable": [ + 923 + ], + "IERC721Upgradeable": [ + 1039 + ], + "INftTransferProxy": [ + 1390 + ], + "IRoyaltiesProvider": [ + 1405 + ], + "ITransferExecutor": [ + 3500 + ], + "ITransferManager": [ + 3521 + ], + "ITransferProxy": [ + 1419 + ], + "Initializable": [ + 723 + ], + "LibAsset": [ + 1832 + ], + "LibDeal": [ + 3543 + ], + "LibDirectTransfer": [ + 5230 + ], + "LibERC1155LazyMint": [ + 1571 + ], + "LibERC721LazyMint": [ + 1719 + ], + "LibFeeSide": [ + 3618 + ], + "LibFill": [ + 5391 + ], + "LibMath": [ + 5588 + ], + "LibOrder": [ + 5831 + ], + "LibOrderData": [ + 6226 + ], + "LibOrderDataV1": [ + 6246 + ], + "LibOrderDataV2": [ + 6268 + ], + "LibOrderDataV3": [ + 6290 + ], + "LibPart": [ + 1889 + ], + "LibSignature": [ + 2054 + ], + "LibTransfer": [ + 3643 + ], + "OrderValidator": [ + 5164 + ], + "OwnableUpgradeable": [ + 130 + ], + "RaribleTestHelper": [ + 6437 + ], + "RaribleTransferManager": [ + 3144 + ], + "SafeMathUpgradeable": [ + 657 + ], + "TransferExecutor": [ + 3484 + ] + }, + "id": 6438, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 6292, + "literals": [ + "solidity", + "0.7", + ".6" + ], + "nodeType": "PragmaDirective", + "src": "33:22:41" + }, + { + "id": 6293, + "literals": [ + "abicoder", + "v2" + ], + "nodeType": "PragmaDirective", + "src": "56:19:41" + }, + { + "absolutePath": "project:/projects/exchange-v2/contracts/ExchangeV2.sol", + "file": "../../contracts/ExchangeV2.sol", + "id": 6294, + "nodeType": "ImportDirective", + "scope": 6438, + "sourceUnit": 4052, + "src": "77:40:41", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 6437, + "linearizedBaseContracts": [ + 6437 + ], + "name": "RaribleTestHelper", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 6306, + "nodeType": "Block", + "src": "268:40:41", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6303, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6296, + "src": "296:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DataV1_$6245_memory_ptr", + "typeString": "struct LibOrderDataV1.DataV1 memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_DataV1_$6245_memory_ptr", + "typeString": "struct LibOrderDataV1.DataV1 memory" + } + ], + "expression": { + "id": 6301, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "285:3:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 6302, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "285:10:41", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 6304, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "285:16:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 6300, + "id": 6305, + "nodeType": "Return", + "src": "278:23:41" + } + ] + }, + "functionSelector": "9a3c40fb", + "id": 6307, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "encode", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6297, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6296, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 6307, + "src": "168:33:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DataV1_$6245_memory_ptr", + "typeString": "struct LibOrderDataV1.DataV1" + }, + "typeName": { + "id": 6295, + "name": "LibOrderDataV1.DataV1", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6245, + "src": "168:21:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DataV1_$6245_storage_ptr", + "typeString": "struct LibOrderDataV1.DataV1" + } + }, + "visibility": "internal" + } + ], + "src": "167:35:41" + }, + "returnParameters": { + "id": 6300, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6299, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6307, + "src": "250:12:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6298, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "250:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "249:14:41" + }, + "scope": 6437, + "src": "152:156:41", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6319, + "nodeType": "Block", + "src": "432:40:41", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6316, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6309, + "src": "460:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DataV2_$6267_memory_ptr", + "typeString": "struct LibOrderDataV2.DataV2 memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_DataV2_$6267_memory_ptr", + "typeString": "struct LibOrderDataV2.DataV2 memory" + } + ], + "expression": { + "id": 6314, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "449:3:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 6315, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "449:10:41", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 6317, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "449:16:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 6313, + "id": 6318, + "nodeType": "Return", + "src": "442:23:41" + } + ] + }, + "functionSelector": "9d461f51", + "id": 6320, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "encodeV2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6310, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6309, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 6320, + "src": "332:33:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DataV2_$6267_memory_ptr", + "typeString": "struct LibOrderDataV2.DataV2" + }, + "typeName": { + "id": 6308, + "name": "LibOrderDataV2.DataV2", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6267, + "src": "332:21:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DataV2_$6267_storage_ptr", + "typeString": "struct LibOrderDataV2.DataV2" + } + }, + "visibility": "internal" + } + ], + "src": "331:35:41" + }, + "returnParameters": { + "id": 6313, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6312, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6320, + "src": "414:12:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6311, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "414:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "413:14:41" + }, + "scope": 6437, + "src": "314:158:41", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6332, + "nodeType": "Block", + "src": "596:40:41", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6329, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6322, + "src": "624:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DataV3_$6289_memory_ptr", + "typeString": "struct LibOrderDataV3.DataV3 memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_DataV3_$6289_memory_ptr", + "typeString": "struct LibOrderDataV3.DataV3 memory" + } + ], + "expression": { + "id": 6327, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "613:3:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 6328, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "613:10:41", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 6330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "613:16:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 6326, + "id": 6331, + "nodeType": "Return", + "src": "606:23:41" + } + ] + }, + "functionSelector": "aaed6304", + "id": 6333, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "encodeV3", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6323, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6322, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 6333, + "src": "496:33:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DataV3_$6289_memory_ptr", + "typeString": "struct LibOrderDataV3.DataV3" + }, + "typeName": { + "id": 6321, + "name": "LibOrderDataV3.DataV3", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 6289, + "src": "496:21:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_DataV3_$6289_storage_ptr", + "typeString": "struct LibOrderDataV3.DataV3" + } + }, + "visibility": "internal" + } + ], + "src": "495:35:41" + }, + "returnParameters": { + "id": 6326, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6325, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6333, + "src": "578:12:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6324, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "578:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "577:14:41" + }, + "scope": 6437, + "src": "478:158:41", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6355, + "nodeType": "Block", + "src": "766:66:41", + "statements": [ + { + "expression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 6347, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "id": 6344, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6337, + "src": "792:5:41", + "typeDescriptions": { + "typeIdentifier": "t_uint96", + "typeString": "uint96" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint96", + "typeString": "uint96" + } + ], + "id": 6343, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "784:7:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6342, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "784:7:41", + "typeDescriptions": {} + } + }, + "id": 6345, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "784:14:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<<", + "rightExpression": { + "hexValue": "313630", + "id": 6346, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "802:3:41", + "typeDescriptions": { + "typeIdentifier": "t_rational_160_by_1", + "typeString": "int_const 160" + }, + "value": "160" + }, + "src": "784:21:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 6348, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "783:23:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "arguments": [ + { + "id": 6351, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6335, + "src": "817:7:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 6350, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "809:7:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 6349, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "809:7:41", + "typeDescriptions": {} + } + }, + "id": 6352, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "809:16:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "783:42:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 6341, + "id": 6354, + "nodeType": "Return", + "src": "776:49:41" + } + ] + }, + "functionSelector": "8a2dc0b4", + "id": 6356, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "encodeOriginFeeIntoUint", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6338, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6335, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 6356, + "src": "675:15:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6334, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "675:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6337, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 6356, + "src": "692:12:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint96", + "typeString": "uint96" + }, + "typeName": { + "id": 6336, + "name": "uint96", + "nodeType": "ElementaryTypeName", + "src": "692:6:41", + "typeDescriptions": { + "typeIdentifier": "t_uint96", + "typeString": "uint96" + } + }, + "visibility": "internal" + } + ], + "src": "674:31:41" + }, + "returnParameters": { + "id": 6341, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6340, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6356, + "src": "753:7:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6339, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "753:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "752:9:41" + }, + "scope": 6437, + "src": "642:190:41", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6368, + "nodeType": "Block", + "src": "946:47:41", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6365, + "name": "order", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6358, + "src": "980:5:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$5625_calldata_ptr", + "typeString": "struct LibOrder.Order calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Order_$5625_calldata_ptr", + "typeString": "struct LibOrder.Order calldata" + } + ], + "expression": { + "id": 6363, + "name": "LibOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5831, + "src": "963:8:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibOrder_$5831_$", + "typeString": "type(library LibOrder)" + } + }, + "id": 6364, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "hashKey", + "nodeType": "MemberAccess", + "referencedDeclaration": 5755, + "src": "963:16:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_Order_$5625_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (struct LibOrder.Order memory) pure returns (bytes32)" + } + }, + "id": 6366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "963:23:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 6362, + "id": 6367, + "nodeType": "Return", + "src": "956:30:41" + } + ] + }, + "functionSelector": "058dbeef", + "id": 6369, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "hashKey", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6359, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6358, + "mutability": "mutable", + "name": "order", + "nodeType": "VariableDeclaration", + "scope": 6369, + "src": "855:29:41", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$5625_calldata_ptr", + "typeString": "struct LibOrder.Order" + }, + "typeName": { + "id": 6357, + "name": "LibOrder.Order", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 5625, + "src": "855:14:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$5625_storage_ptr", + "typeString": "struct LibOrder.Order" + } + }, + "visibility": "internal" + } + ], + "src": "854:31:41" + }, + "returnParameters": { + "id": 6362, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6361, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6369, + "src": "933:7:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6360, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "933:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "932:9:41" + }, + "scope": 6437, + "src": "838:155:41", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6403, + "nodeType": "Block", + "src": "1205:296:41", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 6387, + "name": "maker", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6371, + "src": "1293:5:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "expression": { + "id": 6390, + "name": "makeAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6373, + "src": "1334:9:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Asset_$1789_memory_ptr", + "typeString": "struct LibAsset.Asset memory" + } + }, + "id": 6391, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "assetType", + "nodeType": "MemberAccess", + "referencedDeclaration": 1786, + "src": "1334:19:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AssetType_$1784_memory_ptr", + "typeString": "struct LibAsset.AssetType memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_AssetType_$1784_memory_ptr", + "typeString": "struct LibAsset.AssetType memory" + } + ], + "expression": { + "id": 6388, + "name": "LibAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1832, + "src": "1320:8:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibAsset_$1832_$", + "typeString": "type(library LibAsset)" + } + }, + "id": 6389, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "hash", + "nodeType": "MemberAccess", + "referencedDeclaration": 1810, + "src": "1320:13:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_AssetType_$1784_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (struct LibAsset.AssetType memory) pure returns (bytes32)" + } + }, + "id": 6392, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1320:34:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "expression": { + "id": 6395, + "name": "takeAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6375, + "src": "1390:9:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Asset_$1789_memory_ptr", + "typeString": "struct LibAsset.Asset memory" + } + }, + "id": 6396, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "assetType", + "nodeType": "MemberAccess", + "referencedDeclaration": 1786, + "src": "1390:19:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AssetType_$1784_memory_ptr", + "typeString": "struct LibAsset.AssetType memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_AssetType_$1784_memory_ptr", + "typeString": "struct LibAsset.AssetType memory" + } + ], + "expression": { + "id": 6393, + "name": "LibAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1832, + "src": "1376:8:41", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibAsset_$1832_$", + "typeString": "type(library LibAsset)" + } + }, + "id": 6394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "hash", + "nodeType": "MemberAccess", + "referencedDeclaration": 1810, + "src": "1376:13:41", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_AssetType_$1784_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (struct LibAsset.AssetType memory) pure returns (bytes32)" + } + }, + "id": 6397, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1376:34:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 6398, + "name": "salt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6377, + "src": "1432:4:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 6399, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6379, + "src": "1458:4:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 6385, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "1261:3:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 6386, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "1261:10:41", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 6400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1261:219:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 6384, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967288, + "src": "1234:9:41", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 6401, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1234:260:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 6383, + "id": 6402, + "nodeType": "Return", + "src": "1215:279:41" + } + ] + }, + "functionSelector": "4fa8d605", + "id": 6404, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "hashV2", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6380, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6371, + "mutability": "mutable", + "name": "maker", + "nodeType": "VariableDeclaration", + "scope": 6404, + "src": "1024:13:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6370, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1024:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6373, + "mutability": "mutable", + "name": "makeAsset", + "nodeType": "VariableDeclaration", + "scope": 6404, + "src": "1047:31:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Asset_$1789_memory_ptr", + "typeString": "struct LibAsset.Asset" + }, + "typeName": { + "id": 6372, + "name": "LibAsset.Asset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1789, + "src": "1047:14:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Asset_$1789_storage_ptr", + "typeString": "struct LibAsset.Asset" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6375, + "mutability": "mutable", + "name": "takeAsset", + "nodeType": "VariableDeclaration", + "scope": 6404, + "src": "1088:31:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Asset_$1789_memory_ptr", + "typeString": "struct LibAsset.Asset" + }, + "typeName": { + "id": 6374, + "name": "LibAsset.Asset", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1789, + "src": "1088:14:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Asset_$1789_storage_ptr", + "typeString": "struct LibAsset.Asset" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6377, + "mutability": "mutable", + "name": "salt", + "nodeType": "VariableDeclaration", + "scope": 6404, + "src": "1129:12:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 6376, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1129:7:41", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6379, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 6404, + "src": "1151:17:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6378, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1151:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1014:160:41" + }, + "returnParameters": { + "id": 6383, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6382, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6404, + "src": "1196:7:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 6381, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1196:7:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1195:9:41" + }, + "scope": 6437, + "src": "999:502:41", + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 6419, + "nodeType": "Block", + "src": "1653:47:41", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6415, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6408, + "src": "1681:5:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 6416, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6406, + "src": "1688:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mint721Data_$1599_memory_ptr", + "typeString": "struct LibERC721LazyMint.Mint721Data memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_struct$_Mint721Data_$1599_memory_ptr", + "typeString": "struct LibERC721LazyMint.Mint721Data memory" + } + ], + "expression": { + "id": 6413, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "1670:3:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 6414, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "1670:10:41", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 6417, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1670:23:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 6412, + "id": 6418, + "nodeType": "Return", + "src": "1663:30:41" + } + ] + }, + "functionSelector": "75ac6ca2", + "id": 6420, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "encodeLazy721", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6409, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6406, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 6420, + "src": "1530:41:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mint721Data_$1599_memory_ptr", + "typeString": "struct LibERC721LazyMint.Mint721Data" + }, + "typeName": { + "id": 6405, + "name": "LibERC721LazyMint.Mint721Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1599, + "src": "1530:29:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mint721Data_$1599_storage_ptr", + "typeString": "struct LibERC721LazyMint.Mint721Data" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6408, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 6420, + "src": "1573:13:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6407, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1573:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1529:58:41" + }, + "returnParameters": { + "id": 6412, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6411, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6420, + "src": "1635:12:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6410, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1635:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1634:14:41" + }, + "scope": 6437, + "src": "1507:193:41", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 6435, + "nodeType": "Block", + "src": "1855:47:41", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 6431, + "name": "token", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6424, + "src": "1883:5:41", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 6432, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 6422, + "src": "1890:4:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mint1155Data_$1449_memory_ptr", + "typeString": "struct LibERC1155LazyMint.Mint1155Data memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_struct$_Mint1155Data_$1449_memory_ptr", + "typeString": "struct LibERC1155LazyMint.Mint1155Data memory" + } + ], + "expression": { + "id": 6429, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "1872:3:41", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 6430, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "1872:10:41", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 6433, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1872:23:41", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 6428, + "id": 6434, + "nodeType": "Return", + "src": "1865:30:41" + } + ] + }, + "functionSelector": "5613ab11", + "id": 6436, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "encodeLazy1155", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 6425, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6422, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 6436, + "src": "1730:43:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mint1155Data_$1449_memory_ptr", + "typeString": "struct LibERC1155LazyMint.Mint1155Data" + }, + "typeName": { + "id": 6421, + "name": "LibERC1155LazyMint.Mint1155Data", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1449, + "src": "1730:31:41", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Mint1155Data_$1449_storage_ptr", + "typeString": "struct LibERC1155LazyMint.Mint1155Data" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6424, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 6436, + "src": "1775:13:41", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 6423, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1775:7:41", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1729:60:41" + }, + "returnParameters": { + "id": 6428, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 6427, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 6436, + "src": "1837:12:41", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 6426, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1837:5:41", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1836:14:41" + }, + "scope": 6437, + "src": "1706:196:41", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + } + ], + "scope": 6438, + "src": "119:1786:41" + } + ], + "src": "33:1873:41" + }, + "legacyAST": { + "attributes": { + "absolutePath": "project:/projects/exchange-v2/test/contracts/RaribleTestHelper.sol", + "exportedSymbols": { + "AddressUpgradeable": [ + 1283 + ], + "AssetMatcher": [ + 3926 + ], + "BpLibrary": [ + 1857 + ], + "ContextUpgradeable": [ + 1328 + ], + "EIP712Upgradeable": [ + 290 + ], + "ExchangeV2": [ + 4051 + ], + "ExchangeV2Core": [ + 5028 + ], + "IAssetMatcher": [ + 1342 + ], + "IERC1155Upgradeable": [ + 845 + ], + "IERC1271": [ + 1902 + ], + "IERC165Upgradeable": [ + 302 + ], + "IERC20TransferProxy": [ + 1358 + ], + "IERC20Upgradeable": [ + 923 + ], + "IERC721Upgradeable": [ + 1039 + ], + "INftTransferProxy": [ + 1390 + ], + "IRoyaltiesProvider": [ + 1405 + ], + "ITransferExecutor": [ + 3500 + ], + "ITransferManager": [ + 3521 + ], + "ITransferProxy": [ + 1419 + ], + "Initializable": [ + 723 + ], + "LibAsset": [ + 1832 + ], + "LibDeal": [ + 3543 + ], + "LibDirectTransfer": [ + 5230 + ], + "LibERC1155LazyMint": [ + 1571 + ], + "LibERC721LazyMint": [ + 1719 + ], + "LibFeeSide": [ + 3618 + ], + "LibFill": [ + 5391 + ], + "LibMath": [ + 5588 + ], + "LibOrder": [ + 5831 + ], + "LibOrderData": [ + 6226 + ], + "LibOrderDataV1": [ + 6246 + ], + "LibOrderDataV2": [ + 6268 + ], + "LibOrderDataV3": [ + 6290 + ], + "LibPart": [ + 1889 + ], + "LibSignature": [ + 2054 + ], + "LibTransfer": [ + 3643 + ], + "OrderValidator": [ + 5164 + ], + "OwnableUpgradeable": [ + 130 + ], + "RaribleTestHelper": [ + 6437 + ], + "RaribleTransferManager": [ + 3144 + ], + "SafeMathUpgradeable": [ + 657 + ], + "TransferExecutor": [ + 3484 + ] + }, + "license": "MIT" + }, + "children": [ + { + "attributes": { + "literals": [ + "solidity", + "0.7", + ".6" + ] + }, + "id": 6292, + "name": "PragmaDirective", + "src": "33:22:41" + }, + { + "attributes": { + "literals": [ + "abicoder", + "v2" + ] + }, + "id": 6293, + "name": "PragmaDirective", + "src": "56:19:41" + }, + { + "attributes": { + "SourceUnit": 4052, + "absolutePath": "project:/projects/exchange-v2/contracts/ExchangeV2.sol", + "file": "../../contracts/ExchangeV2.sol", + "scope": 6438, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 6294, + "name": "ImportDirective", + "src": "77:40:41" + }, + { + "attributes": { + "abstract": false, + "baseContracts": [ + null + ], + "contractDependencies": [ + null + ], + "contractKind": "contract", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 6437 + ], + "name": "RaribleTestHelper", + "scope": 6438 + }, + "children": [ + { + "attributes": { + "functionSelector": "9a3c40fb", + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "encode", + "scope": 6437, + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 6307, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct LibOrderDataV1.DataV1", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "LibOrderDataV1.DataV1", + "referencedDeclaration": 6245, + "type": "struct LibOrderDataV1.DataV1" + }, + "id": 6295, + "name": "UserDefinedTypeName", + "src": "168:21:41" + } + ], + "id": 6296, + "name": "VariableDeclaration", + "src": "168:33:41" + } + ], + "id": 6297, + "name": "ParameterList", + "src": "167:35:41" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 6307, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 6298, + "name": "ElementaryTypeName", + "src": "250:5:41" + } + ], + "id": 6299, + "name": "VariableDeclaration", + "src": "250:12:41" + } + ], + "id": 6300, + "name": "ParameterList", + "src": "249:14:41" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 6300 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_DataV1_$6245_memory_ptr", + "typeString": "struct LibOrderDataV1.DataV1 memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "encode", + "type": "function () pure returns (bytes memory)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 6301, + "name": "Identifier", + "src": "285:3:41" + } + ], + "id": 6302, + "name": "MemberAccess", + "src": "285:10:41" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6296, + "type": "struct LibOrderDataV1.DataV1 memory", + "value": "data" + }, + "id": 6303, + "name": "Identifier", + "src": "296:4:41" + } + ], + "id": 6304, + "name": "FunctionCall", + "src": "285:16:41" + } + ], + "id": 6305, + "name": "Return", + "src": "278:23:41" + } + ], + "id": 6306, + "name": "Block", + "src": "268:40:41" + } + ], + "id": 6307, + "name": "FunctionDefinition", + "src": "152:156:41" + }, + { + "attributes": { + "functionSelector": "9d461f51", + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "encodeV2", + "scope": 6437, + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 6320, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct LibOrderDataV2.DataV2", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "LibOrderDataV2.DataV2", + "referencedDeclaration": 6267, + "type": "struct LibOrderDataV2.DataV2" + }, + "id": 6308, + "name": "UserDefinedTypeName", + "src": "332:21:41" + } + ], + "id": 6309, + "name": "VariableDeclaration", + "src": "332:33:41" + } + ], + "id": 6310, + "name": "ParameterList", + "src": "331:35:41" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 6320, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 6311, + "name": "ElementaryTypeName", + "src": "414:5:41" + } + ], + "id": 6312, + "name": "VariableDeclaration", + "src": "414:12:41" + } + ], + "id": 6313, + "name": "ParameterList", + "src": "413:14:41" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 6313 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_DataV2_$6267_memory_ptr", + "typeString": "struct LibOrderDataV2.DataV2 memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "encode", + "type": "function () pure returns (bytes memory)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 6314, + "name": "Identifier", + "src": "449:3:41" + } + ], + "id": 6315, + "name": "MemberAccess", + "src": "449:10:41" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6309, + "type": "struct LibOrderDataV2.DataV2 memory", + "value": "data" + }, + "id": 6316, + "name": "Identifier", + "src": "460:4:41" + } + ], + "id": 6317, + "name": "FunctionCall", + "src": "449:16:41" + } + ], + "id": 6318, + "name": "Return", + "src": "442:23:41" + } + ], + "id": 6319, + "name": "Block", + "src": "432:40:41" + } + ], + "id": 6320, + "name": "FunctionDefinition", + "src": "314:158:41" + }, + { + "attributes": { + "functionSelector": "aaed6304", + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "encodeV3", + "scope": 6437, + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 6333, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct LibOrderDataV3.DataV3", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "LibOrderDataV3.DataV3", + "referencedDeclaration": 6289, + "type": "struct LibOrderDataV3.DataV3" + }, + "id": 6321, + "name": "UserDefinedTypeName", + "src": "496:21:41" + } + ], + "id": 6322, + "name": "VariableDeclaration", + "src": "496:33:41" + } + ], + "id": 6323, + "name": "ParameterList", + "src": "495:35:41" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 6333, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 6324, + "name": "ElementaryTypeName", + "src": "578:5:41" + } + ], + "id": 6325, + "name": "VariableDeclaration", + "src": "578:12:41" + } + ], + "id": 6326, + "name": "ParameterList", + "src": "577:14:41" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 6326 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_DataV3_$6289_memory_ptr", + "typeString": "struct LibOrderDataV3.DataV3 memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "encode", + "type": "function () pure returns (bytes memory)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 6327, + "name": "Identifier", + "src": "613:3:41" + } + ], + "id": 6328, + "name": "MemberAccess", + "src": "613:10:41" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6322, + "type": "struct LibOrderDataV3.DataV3 memory", + "value": "data" + }, + "id": 6329, + "name": "Identifier", + "src": "624:4:41" + } + ], + "id": 6330, + "name": "FunctionCall", + "src": "613:16:41" + } + ], + "id": 6331, + "name": "Return", + "src": "606:23:41" + } + ], + "id": 6332, + "name": "Block", + "src": "596:40:41" + } + ], + "id": 6333, + "name": "FunctionDefinition", + "src": "478:158:41" + }, + { + "attributes": { + "functionSelector": "8a2dc0b4", + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "encodeOriginFeeIntoUint", + "scope": 6437, + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "account", + "scope": 6356, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 6334, + "name": "ElementaryTypeName", + "src": "675:7:41" + } + ], + "id": 6335, + "name": "VariableDeclaration", + "src": "675:15:41" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "value", + "scope": 6356, + "stateVariable": false, + "storageLocation": "default", + "type": "uint96", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint96", + "type": "uint96" + }, + "id": 6336, + "name": "ElementaryTypeName", + "src": "692:6:41" + } + ], + "id": 6337, + "name": "VariableDeclaration", + "src": "692:12:41" + } + ], + "id": 6338, + "name": "ParameterList", + "src": "674:31:41" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 6356, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 6339, + "name": "ElementaryTypeName", + "src": "753:7:41" + } + ], + "id": 6340, + "name": "VariableDeclaration", + "src": "753:7:41" + } + ], + "id": 6341, + "name": "ParameterList", + "src": "752:9:41" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 6341 + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<<", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint96", + "typeString": "uint96" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 6342, + "name": "ElementaryTypeName", + "src": "784:7:41" + } + ], + "id": 6343, + "name": "ElementaryTypeNameExpression", + "src": "784:7:41" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6337, + "type": "uint96", + "value": "value" + }, + "id": 6344, + "name": "Identifier", + "src": "792:5:41" + } + ], + "id": 6345, + "name": "FunctionCall", + "src": "784:14:41" + }, + { + "attributes": { + "hexvalue": "313630", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 160", + "value": "160" + }, + "id": 6346, + "name": "Literal", + "src": "802:3:41" + } + ], + "id": 6347, + "name": "BinaryOperation", + "src": "784:21:41" + } + ], + "id": 6348, + "name": "TupleExpression", + "src": "783:23:41" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 6349, + "name": "ElementaryTypeName", + "src": "809:7:41" + } + ], + "id": 6350, + "name": "ElementaryTypeNameExpression", + "src": "809:7:41" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6335, + "type": "address", + "value": "account" + }, + "id": 6351, + "name": "Identifier", + "src": "817:7:41" + } + ], + "id": 6352, + "name": "FunctionCall", + "src": "809:16:41" + } + ], + "id": 6353, + "name": "BinaryOperation", + "src": "783:42:41" + } + ], + "id": 6354, + "name": "Return", + "src": "776:49:41" + } + ], + "id": 6355, + "name": "Block", + "src": "766:66:41" + } + ], + "id": 6356, + "name": "FunctionDefinition", + "src": "642:190:41" + }, + { + "attributes": { + "functionSelector": "058dbeef", + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "hashKey", + "scope": 6437, + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "order", + "scope": 6369, + "stateVariable": false, + "storageLocation": "calldata", + "type": "struct LibOrder.Order", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "LibOrder.Order", + "referencedDeclaration": 5625, + "type": "struct LibOrder.Order" + }, + "id": 6357, + "name": "UserDefinedTypeName", + "src": "855:14:41" + } + ], + "id": 6358, + "name": "VariableDeclaration", + "src": "855:29:41" + } + ], + "id": 6359, + "name": "ParameterList", + "src": "854:31:41" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 6369, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes32", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes32", + "type": "bytes32" + }, + "id": 6360, + "name": "ElementaryTypeName", + "src": "933:7:41" + } + ], + "id": 6361, + "name": "VariableDeclaration", + "src": "933:7:41" + } + ], + "id": 6362, + "name": "ParameterList", + "src": "932:9:41" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 6362 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes32", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Order_$5625_calldata_ptr", + "typeString": "struct LibOrder.Order calldata" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "hashKey", + "referencedDeclaration": 5755, + "type": "function (struct LibOrder.Order memory) pure returns (bytes32)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 5831, + "type": "type(library LibOrder)", + "value": "LibOrder" + }, + "id": 6363, + "name": "Identifier", + "src": "963:8:41" + } + ], + "id": 6364, + "name": "MemberAccess", + "src": "963:16:41" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6358, + "type": "struct LibOrder.Order calldata", + "value": "order" + }, + "id": 6365, + "name": "Identifier", + "src": "980:5:41" + } + ], + "id": 6366, + "name": "FunctionCall", + "src": "963:23:41" + } + ], + "id": 6367, + "name": "Return", + "src": "956:30:41" + } + ], + "id": 6368, + "name": "Block", + "src": "946:47:41" + } + ], + "id": 6369, + "name": "FunctionDefinition", + "src": "838:155:41" + }, + { + "attributes": { + "functionSelector": "4fa8d605", + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "hashV2", + "scope": 6437, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "maker", + "scope": 6404, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 6370, + "name": "ElementaryTypeName", + "src": "1024:7:41" + } + ], + "id": 6371, + "name": "VariableDeclaration", + "src": "1024:13:41" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "makeAsset", + "scope": 6404, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct LibAsset.Asset", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "LibAsset.Asset", + "referencedDeclaration": 1789, + "type": "struct LibAsset.Asset" + }, + "id": 6372, + "name": "UserDefinedTypeName", + "src": "1047:14:41" + } + ], + "id": 6373, + "name": "VariableDeclaration", + "src": "1047:31:41" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "takeAsset", + "scope": 6404, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct LibAsset.Asset", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "LibAsset.Asset", + "referencedDeclaration": 1789, + "type": "struct LibAsset.Asset" + }, + "id": 6374, + "name": "UserDefinedTypeName", + "src": "1088:14:41" + } + ], + "id": 6375, + "name": "VariableDeclaration", + "src": "1088:31:41" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "salt", + "scope": 6404, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 6376, + "name": "ElementaryTypeName", + "src": "1129:7:41" + } + ], + "id": 6377, + "name": "VariableDeclaration", + "src": "1129:12:41" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 6404, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 6378, + "name": "ElementaryTypeName", + "src": "1151:5:41" + } + ], + "id": 6379, + "name": "VariableDeclaration", + "src": "1151:17:41" + } + ], + "id": 6380, + "name": "ParameterList", + "src": "1014:160:41" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 6404, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes32", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes32", + "type": "bytes32" + }, + "id": 6381, + "name": "ElementaryTypeName", + "src": "1196:7:41" + } + ], + "id": 6382, + "name": "VariableDeclaration", + "src": "1196:7:41" + } + ], + "id": 6383, + "name": "ParameterList", + "src": "1195:9:41" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 6383 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes32", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967288, + "type": "function (bytes memory) pure returns (bytes32)", + "value": "keccak256" + }, + "id": 6384, + "name": "Identifier", + "src": "1234:9:41" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "encode", + "type": "function () pure returns (bytes memory)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 6385, + "name": "Identifier", + "src": "1261:3:41" + } + ], + "id": 6386, + "name": "MemberAccess", + "src": "1261:10:41" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6371, + "type": "address", + "value": "maker" + }, + "id": 6387, + "name": "Identifier", + "src": "1293:5:41" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes32", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_AssetType_$1784_memory_ptr", + "typeString": "struct LibAsset.AssetType memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "hash", + "referencedDeclaration": 1810, + "type": "function (struct LibAsset.AssetType memory) pure returns (bytes32)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1832, + "type": "type(library LibAsset)", + "value": "LibAsset" + }, + "id": 6388, + "name": "Identifier", + "src": "1320:8:41" + } + ], + "id": 6389, + "name": "MemberAccess", + "src": "1320:13:41" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "assetType", + "referencedDeclaration": 1786, + "type": "struct LibAsset.AssetType memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6373, + "type": "struct LibAsset.Asset memory", + "value": "makeAsset" + }, + "id": 6390, + "name": "Identifier", + "src": "1334:9:41" + } + ], + "id": 6391, + "name": "MemberAccess", + "src": "1334:19:41" + } + ], + "id": 6392, + "name": "FunctionCall", + "src": "1320:34:41" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes32", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_AssetType_$1784_memory_ptr", + "typeString": "struct LibAsset.AssetType memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "hash", + "referencedDeclaration": 1810, + "type": "function (struct LibAsset.AssetType memory) pure returns (bytes32)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1832, + "type": "type(library LibAsset)", + "value": "LibAsset" + }, + "id": 6393, + "name": "Identifier", + "src": "1376:8:41" + } + ], + "id": 6394, + "name": "MemberAccess", + "src": "1376:13:41" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "assetType", + "referencedDeclaration": 1786, + "type": "struct LibAsset.AssetType memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6375, + "type": "struct LibAsset.Asset memory", + "value": "takeAsset" + }, + "id": 6395, + "name": "Identifier", + "src": "1390:9:41" + } + ], + "id": 6396, + "name": "MemberAccess", + "src": "1390:19:41" + } + ], + "id": 6397, + "name": "FunctionCall", + "src": "1376:34:41" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6377, + "type": "uint256", + "value": "salt" + }, + "id": 6398, + "name": "Identifier", + "src": "1432:4:41" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6379, + "type": "bytes memory", + "value": "data" + }, + "id": 6399, + "name": "Identifier", + "src": "1458:4:41" + } + ], + "id": 6400, + "name": "FunctionCall", + "src": "1261:219:41" + } + ], + "id": 6401, + "name": "FunctionCall", + "src": "1234:260:41" + } + ], + "id": 6402, + "name": "Return", + "src": "1215:279:41" + } + ], + "id": 6403, + "name": "Block", + "src": "1205:296:41" + } + ], + "id": 6404, + "name": "FunctionDefinition", + "src": "999:502:41" + }, + { + "attributes": { + "functionSelector": "75ac6ca2", + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "encodeLazy721", + "scope": 6437, + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 6420, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct LibERC721LazyMint.Mint721Data", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "LibERC721LazyMint.Mint721Data", + "referencedDeclaration": 1599, + "type": "struct LibERC721LazyMint.Mint721Data" + }, + "id": 6405, + "name": "UserDefinedTypeName", + "src": "1530:29:41" + } + ], + "id": 6406, + "name": "VariableDeclaration", + "src": "1530:41:41" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "token", + "scope": 6420, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 6407, + "name": "ElementaryTypeName", + "src": "1573:7:41" + } + ], + "id": 6408, + "name": "VariableDeclaration", + "src": "1573:13:41" + } + ], + "id": 6409, + "name": "ParameterList", + "src": "1529:58:41" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 6420, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 6410, + "name": "ElementaryTypeName", + "src": "1635:5:41" + } + ], + "id": 6411, + "name": "VariableDeclaration", + "src": "1635:12:41" + } + ], + "id": 6412, + "name": "ParameterList", + "src": "1634:14:41" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 6412 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_struct$_Mint721Data_$1599_memory_ptr", + "typeString": "struct LibERC721LazyMint.Mint721Data memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "encode", + "type": "function () pure returns (bytes memory)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 6413, + "name": "Identifier", + "src": "1670:3:41" + } + ], + "id": 6414, + "name": "MemberAccess", + "src": "1670:10:41" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6408, + "type": "address", + "value": "token" + }, + "id": 6415, + "name": "Identifier", + "src": "1681:5:41" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6406, + "type": "struct LibERC721LazyMint.Mint721Data memory", + "value": "data" + }, + "id": 6416, + "name": "Identifier", + "src": "1688:4:41" + } + ], + "id": 6417, + "name": "FunctionCall", + "src": "1670:23:41" + } + ], + "id": 6418, + "name": "Return", + "src": "1663:30:41" + } + ], + "id": 6419, + "name": "Block", + "src": "1653:47:41" + } + ], + "id": 6420, + "name": "FunctionDefinition", + "src": "1507:193:41" + }, + { + "attributes": { + "functionSelector": "5613ab11", + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "encodeLazy1155", + "scope": 6437, + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 6436, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct LibERC1155LazyMint.Mint1155Data", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "LibERC1155LazyMint.Mint1155Data", + "referencedDeclaration": 1449, + "type": "struct LibERC1155LazyMint.Mint1155Data" + }, + "id": 6421, + "name": "UserDefinedTypeName", + "src": "1730:31:41" + } + ], + "id": 6422, + "name": "VariableDeclaration", + "src": "1730:43:41" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "token", + "scope": 6436, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 6423, + "name": "ElementaryTypeName", + "src": "1775:7:41" + } + ], + "id": 6424, + "name": "VariableDeclaration", + "src": "1775:13:41" + } + ], + "id": 6425, + "name": "ParameterList", + "src": "1729:60:41" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 6436, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 6426, + "name": "ElementaryTypeName", + "src": "1837:5:41" + } + ], + "id": 6427, + "name": "VariableDeclaration", + "src": "1837:12:41" + } + ], + "id": 6428, + "name": "ParameterList", + "src": "1836:14:41" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 6428 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_struct$_Mint1155Data_$1449_memory_ptr", + "typeString": "struct LibERC1155LazyMint.Mint1155Data memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "encode", + "type": "function () pure returns (bytes memory)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 6429, + "name": "Identifier", + "src": "1872:3:41" + } + ], + "id": 6430, + "name": "MemberAccess", + "src": "1872:10:41" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6424, + "type": "address", + "value": "token" + }, + "id": 6431, + "name": "Identifier", + "src": "1883:5:41" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 6422, + "type": "struct LibERC1155LazyMint.Mint1155Data memory", + "value": "data" + }, + "id": 6432, + "name": "Identifier", + "src": "1890:4:41" + } + ], + "id": 6433, + "name": "FunctionCall", + "src": "1872:23:41" + } + ], + "id": 6434, + "name": "Return", + "src": "1865:30:41" + } + ], + "id": 6435, + "name": "Block", + "src": "1855:47:41" + } + ], + "id": 6436, + "name": "FunctionDefinition", + "src": "1706:196:41" + } + ], + "id": 6437, + "name": "ContractDefinition", + "src": "119:1786:41" + } + ], + "id": 6438, + "name": "SourceUnit", + "src": "33:1873:41" + }, + "compiler": { + "name": "solc", + "version": "0.7.6+commit.7338295f.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "3.4.16", + "updatedAt": "2024-07-10T16:30:46.019Z", + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } +} \ No newline at end of file diff --git a/projects/gas-usage-tests/build/contracts/X2Y2TestHelper.json b/projects/gas-usage-tests/build/contracts/X2Y2TestHelper.json new file mode 100644 index 000000000..467c737c3 --- /dev/null +++ b/projects/gas-usage-tests/build/contracts/X2Y2TestHelper.json @@ -0,0 +1,10952 @@ +{ + "contractName": "X2Y2TestHelper", + "abi": [ + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + } + ], + "internalType": "struct X2Y2TestHelper.Pair721[]", + "name": "data", + "type": "tuple[]" + } + ], + "name": "encodeData", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct X2Y2TestHelper.Pair1155[]", + "name": "data", + "type": "tuple[]" + } + ], + "name": "encodeData1155", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "salt", + "type": "uint256" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint256", + "name": "network", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "intent", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "delegateType", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "bytes", + "name": "dataMask", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct X2Y2TestHelper.OrderItem[]", + "name": "items", + "type": "tuple[]" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "signVersion", + "type": "uint8" + } + ], + "internalType": "struct X2Y2TestHelper.Order", + "name": "order", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct X2Y2TestHelper.OrderItem", + "name": "item", + "type": "tuple" + } + ], + "name": "hashItem", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"internalType\":\"struct X2Y2TestHelper.Pair721[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"encodeData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct X2Y2TestHelper.Pair1155[]\",\"name\":\"data\",\"type\":\"tuple[]\"}],\"name\":\"encodeData1155\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"salt\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"network\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"intent\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"delegateType\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"dataMask\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct X2Y2TestHelper.OrderItem[]\",\"name\":\"items\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"signVersion\",\"type\":\"uint8\"}],\"internalType\":\"struct X2Y2TestHelper.Order\",\"name\":\"order\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"price\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct X2Y2TestHelper.OrderItem\",\"name\":\"item\",\"type\":\"tuple\"}],\"name\":\"hashItem\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/test/contracts/X2Y2TestHelper.sol\":\"X2Y2TestHelper\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"project:/test/contracts/X2Y2TestHelper.sol\":{\"keccak256\":\"0x23a00593fb3cb27391ca93e920e9a7690af379d0875ab9280d5290df9ea1e0ae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9adac9577e40ef642394b61f22e8998b5fd6d807ec0c57893de6ce86232d3b24\",\"dweb:/ipfs/QmPFu3TWqUEgz2i6z3fSUAyHzjwv39rSiw24GoAz192pjj\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b506106ab806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806332b2f29514610046578063558cbeab1461006f578063d7892e2e14610082575b600080fd5b61005961005436600461031c565b6100a2565b60405161006691906105b4565b60405180910390f35b61005961007d3660046102ac565b6100ce565b61009561009036600461037a565b6100e3565b60405161006691906105ab565b606082826040516020016100b7929190610561565b604051602081830303815290604052905092915050565b606082826040516020016100b792919061050d565b81516020808401516040808601516060870151608088015160a089015160c08a015160e08b0151955160009961011f99909897918c91016105ce565b60405160208183030381529060405280519060200120905092915050565b80356001600160a01b038116811461015457600080fd5b919050565b600082601f830112610169578081fd5b8135602067ffffffffffffffff82111561017f57fe5b61018c8182840201610651565b82815281810190858301855b858110156101c1576101af898684358b0101610233565b84529284019290840190600101610198565b5090979650505050505050565b600082601f8301126101de578081fd5b813567ffffffffffffffff8111156101f257fe5b610205601f8201601f1916602001610651565b818152846020838601011115610219578283fd5b816020850160208301379081016020019190915292915050565b600060408284031215610244578081fd5b6040516040810167ffffffffffffffff828210818311171561026257fe5b8160405282935084358352602085013591508082111561028157600080fd5b5061028e858286016101ce565b6020830152505092915050565b803560ff8116811461015457600080fd5b600080602083850312156102be578182fd5b823567ffffffffffffffff808211156102d5578384fd5b818501915085601f8301126102e8578384fd5b8135818111156102f6578485fd5b86602060608302850101111561030a578485fd5b60209290920196919550909350505050565b6000806020838503121561032e578182fd5b823567ffffffffffffffff80821115610345578384fd5b818501915085601f830112610358578384fd5b813581811115610366578485fd5b86602060408302850101111561030a578485fd5b6000806040838503121561038c578182fd5b823567ffffffffffffffff808211156103a3578384fd5b81850191506101a08083880312156103b9578485fd5b6103c281610651565b9050823581526103d46020840161013d565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015261040d60c0840161013d565b60c082015260e083013582811115610423578586fd5b61042f888286016101ce565b60e0830152506101008084013583811115610448578687fd5b61045489828701610159565b82840152505061012080840135818301525061014080840135818301525061016061048081850161029b565b9082015261018061049284820161029b565b90820152935060208501359150808211156104ab578283fd5b506104b885828601610233565b9150509250929050565b60008151808452815b818110156104e7576020818501810151868301820152016104cb565b818111156104f85782602083870101525b50601f01601f19169290920160200192915050565b6020808252818101839052600090604080840186845b878110156101c1576001600160a01b0361053c8361013d565b1683528185013585840152838201358484015260609283019290910190600101610523565b6020808252818101839052600090604080840186845b878110156101c1576001600160a01b036105908361013d565b16835281850135858401529183019190830190600101610577565b90815260200190565b6000602082526105c760208301846104c2565b9392505050565b60006101208b835260018060a01b03808c1660208501528a60408501528960608501528860808501528760a085015280871660c0850152508060e0840152610618818401866104c2565b90508281036101008401528351815260208401516040602083015261064060408301826104c2565b9d9c50505050505050505050505050565b60405181810167ffffffffffffffff8111828210171561066d57fe5b60405291905056fea264697066735822122053a4ae40122d1f53f328bf2c27446eb9507715866676102c2cc56bd5b0f112c664736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c806332b2f29514610046578063558cbeab1461006f578063d7892e2e14610082575b600080fd5b61005961005436600461031c565b6100a2565b60405161006691906105b4565b60405180910390f35b61005961007d3660046102ac565b6100ce565b61009561009036600461037a565b6100e3565b60405161006691906105ab565b606082826040516020016100b7929190610561565b604051602081830303815290604052905092915050565b606082826040516020016100b792919061050d565b81516020808401516040808601516060870151608088015160a089015160c08a015160e08b0151955160009961011f99909897918c91016105ce565b60405160208183030381529060405280519060200120905092915050565b80356001600160a01b038116811461015457600080fd5b919050565b600082601f830112610169578081fd5b8135602067ffffffffffffffff82111561017f57fe5b61018c8182840201610651565b82815281810190858301855b858110156101c1576101af898684358b0101610233565b84529284019290840190600101610198565b5090979650505050505050565b600082601f8301126101de578081fd5b813567ffffffffffffffff8111156101f257fe5b610205601f8201601f1916602001610651565b818152846020838601011115610219578283fd5b816020850160208301379081016020019190915292915050565b600060408284031215610244578081fd5b6040516040810167ffffffffffffffff828210818311171561026257fe5b8160405282935084358352602085013591508082111561028157600080fd5b5061028e858286016101ce565b6020830152505092915050565b803560ff8116811461015457600080fd5b600080602083850312156102be578182fd5b823567ffffffffffffffff808211156102d5578384fd5b818501915085601f8301126102e8578384fd5b8135818111156102f6578485fd5b86602060608302850101111561030a578485fd5b60209290920196919550909350505050565b6000806020838503121561032e578182fd5b823567ffffffffffffffff80821115610345578384fd5b818501915085601f830112610358578384fd5b813581811115610366578485fd5b86602060408302850101111561030a578485fd5b6000806040838503121561038c578182fd5b823567ffffffffffffffff808211156103a3578384fd5b81850191506101a08083880312156103b9578485fd5b6103c281610651565b9050823581526103d46020840161013d565b602082015260408301356040820152606083013560608201526080830135608082015260a083013560a082015261040d60c0840161013d565b60c082015260e083013582811115610423578586fd5b61042f888286016101ce565b60e0830152506101008084013583811115610448578687fd5b61045489828701610159565b82840152505061012080840135818301525061014080840135818301525061016061048081850161029b565b9082015261018061049284820161029b565b90820152935060208501359150808211156104ab578283fd5b506104b885828601610233565b9150509250929050565b60008151808452815b818110156104e7576020818501810151868301820152016104cb565b818111156104f85782602083870101525b50601f01601f19169290920160200192915050565b6020808252818101839052600090604080840186845b878110156101c1576001600160a01b0361053c8361013d565b1683528185013585840152838201358484015260609283019290910190600101610523565b6020808252818101839052600090604080840186845b878110156101c1576001600160a01b036105908361013d565b16835281850135858401529183019190830190600101610577565b90815260200190565b6000602082526105c760208301846104c2565b9392505050565b60006101208b835260018060a01b03808c1660208501528a60408501528960608501528860808501528760a085015280871660c0850152508060e0840152610618818401866104c2565b90508281036101008401528351815260208401516040602083015261064060408301826104c2565b9d9c50505050505050505050505050565b60405181810167ffffffffffffffff8111828210171561066d57fe5b60405291905056fea264697066735822122053a4ae40122d1f53f328bf2c27446eb9507715866676102c2cc56bd5b0f112c664736f6c63430007060033", + "immutableReferences": {}, + "generatedSources": [], + "deployedGeneratedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:9463:1", + "statements": [ + { + "nodeType": "YulBlock", + "src": "6:3:1", + "statements": [] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "65:124:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "75:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "97:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "84:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "84:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "75:5:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "167:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "176:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "179:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "169:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "169:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "169:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "126:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "137:5:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "152:3:1", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "157:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "148:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "148:11:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "161:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "144:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "144:19:1" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "133:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "133:31:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "123:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "123:42:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "116:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "116:50:1" + }, + "nodeType": "YulIf", + "src": "113:2:1" + } + ] + }, + "name": "abi_decode_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "44:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "55:5:1", + "type": "" + } + ], + "src": "14:175:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "274:638:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "323:24:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "332:5:1" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "339:5:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "325:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "325:20:1" + }, + "nodeType": "YulExpressionStatement", + "src": "325:20:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "302:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "310:4:1", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "298:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "298:17:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "317:3:1" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "294:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "294:27:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "287:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "287:35:1" + }, + "nodeType": "YulIf", + "src": "284:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "356:30:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "379:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "366:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "366:20:1" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "360:2:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "395:14:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "405:4:1", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "399:2:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "448:13:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "450:7:1" + }, + "nodeType": "YulFunctionCall", + "src": "450:9:1" + }, + "nodeType": "YulExpressionStatement", + "src": "450:9:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "424:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "428:18:1", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "421:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "421:26:1" + }, + "nodeType": "YulIf", + "src": "418:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "470:47:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "504:2:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "508:2:1" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "500:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "500:11:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "513:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "496:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "496:20:1" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "481:14:1" + }, + "nodeType": "YulFunctionCall", + "src": "481:36:1" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "474:3:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "526:16:1", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "539:3:1" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "530:5:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "558:3:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "563:2:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "551:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "551:15:1" + }, + "nodeType": "YulExpressionStatement", + "src": "551:15:1" + }, + { + "nodeType": "YulAssignment", + "src": "575:19:1", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "586:3:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "591:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "582:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "582:12:1" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "575:3:1" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "603:26:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "618:6:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "626:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "614:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "614:15:1" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "607:3:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "638:14:1", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "647:5:1" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "642:1:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "706:177:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "727:3:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "771:6:1" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "792:3:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "779:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "779:17:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "767:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "767:30:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "799:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "763:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "763:39:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "804:3:1" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_OrderItem", + "nodeType": "YulIdentifier", + "src": "732:30:1" + }, + "nodeType": "YulFunctionCall", + "src": "732:76:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "720:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "720:89:1" + }, + "nodeType": "YulExpressionStatement", + "src": "720:89:1" + }, + { + "nodeType": "YulAssignment", + "src": "822:19:1", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "833:3:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "838:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "829:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "829:12:1" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "822:3:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "854:19:1", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "865:3:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "870:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "861:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "861:12:1" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "854:3:1" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "672:1:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "675:2:1" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "669:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "669:9:1" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "679:18:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "681:14:1", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "690:1:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "693:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "686:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "686:9:1" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "681:1:1" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "665:3:1", + "statements": [] + }, + "src": "661:222:1" + }, + { + "nodeType": "YulAssignment", + "src": "892:14:1", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "901:5:1" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "892:5:1" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_struct$_OrderItem_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "248:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "256:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "264:5:1", + "type": "" + } + ], + "src": "194:718:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "971:488:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1020:24:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1029:5:1" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1036:5:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1022:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1022:20:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1022:20:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "999:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1007:4:1", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "995:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "995:17:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1014:3:1" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "991:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "991:27:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "984:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "984:35:1" + }, + "nodeType": "YulIf", + "src": "981:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1053:30:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1076:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "1063:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "1063:20:1" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "1057:2:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1122:13:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "1124:7:1" + }, + "nodeType": "YulFunctionCall", + "src": "1124:9:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1124:9:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1098:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1102:18:1", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1095:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1095:26:1" + }, + "nodeType": "YulIf", + "src": "1092:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1144:69:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1186:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1190:4:1", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1182:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1182:13:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1201:2:1", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "1197:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1197:7:1" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "1178:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1178:27:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1207:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1174:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1174:38:1" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "1159:14:1" + }, + "nodeType": "YulFunctionCall", + "src": "1159:54:1" + }, + "variables": [ + { + "name": "array_1", + "nodeType": "YulTypedName", + "src": "1148:7:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "1229:7:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1238:2:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1222:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1222:19:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1222:19:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1289:24:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1298:5:1" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1305:5:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1291:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1291:20:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1291:20:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1264:6:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1272:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1260:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1260:15:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1277:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1256:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1256:26:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1284:3:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1253:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1253:35:1" + }, + "nodeType": "YulIf", + "src": "1250:2:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "1339:7:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1348:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1335:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1335:18:1" + }, + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1359:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1367:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1355:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1355:17:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1374:2:1" + } + ], + "functionName": { + "name": "calldatacopy", + "nodeType": "YulIdentifier", + "src": "1322:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "1322:55:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1322:55:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "1401:7:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1410:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1397:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1397:16:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1415:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1393:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1393:27:1" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1422:5:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1386:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1386:42:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1386:42:1" + }, + { + "nodeType": "YulAssignment", + "src": "1437:16:1", + "value": { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "1446:7:1" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1437:5:1" + } + ] + } + ] + }, + "name": "abi_decode_t_bytes", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "945:6:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "953:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "961:5:1", + "type": "" + } + ], + "src": "917:542:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1533:545:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1577:24:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1586:5:1" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1593:5:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1579:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1579:20:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1579:20:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1554:3:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1559:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1550:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1550:19:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1571:4:1", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1546:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1546:30:1" + }, + "nodeType": "YulIf", + "src": "1543:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1610:25:1", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1630:4:1", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "1624:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "1624:11:1" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "1614:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1644:35:1", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1666:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1674:4:1", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1662:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1662:17:1" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "1648:10:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1688:28:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1698:18:1", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "1692:2:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1775:13:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "1777:7:1" + }, + "nodeType": "YulFunctionCall", + "src": "1777:9:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1777:9:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "1734:10:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1746:2:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1731:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1731:18:1" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "1754:10:1" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1766:6:1" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "1751:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1751:22:1" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "1728:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1728:46:1" + }, + "nodeType": "YulIf", + "src": "1725:2:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1804:4:1", + "type": "", + "value": "0x40" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "1810:10:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1797:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1797:24:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1797:24:1" + }, + { + "nodeType": "YulAssignment", + "src": "1830:15:1", + "value": { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1839:6:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "1830:5:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1861:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1882:9:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "1869:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "1869:23:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1854:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1854:39:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1854:39:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1902:46:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "1933:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1944:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1929:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "1929:18:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "1916:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "1916:32:1" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1906:6:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1975:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1984:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1987:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1977:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "1977:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "1977:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1963:6:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1971:2:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1960:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "1960:14:1" + }, + "nodeType": "YulIf", + "src": "1957:2:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2011:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2019:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2007:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2007:15:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2047:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2058:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2043:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2043:22:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "2067:3:1" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "2024:18:1" + }, + "nodeType": "YulFunctionCall", + "src": "2024:47:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2000:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2000:72:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2000:72:1" + } + ] + }, + "name": "abi_decode_t_struct$_OrderItem", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "1504:9:1", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "1515:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1523:5:1", + "type": "" + } + ], + "src": "1464:614:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2132:109:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2142:29:1", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2164:6:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "2151:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "2151:20:1" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2142:5:1" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2219:16:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2228:1:1", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2231:1:1", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2221:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2221:12:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2221:12:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2193:5:1" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2204:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2211:4:1", + "type": "", + "value": "0xff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "2200:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2200:16:1" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "2190:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "2190:27:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "2183:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2183:35:1" + }, + "nodeType": "YulIf", + "src": "2180:2:1" + } + ] + }, + "name": "abi_decode_t_uint8", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2111:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "2122:5:1", + "type": "" + } + ], + "src": "2083:158:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2377:563:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "2423:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2432:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2440:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2425:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2425:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2425:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2398:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2407:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "2394:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2394:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2419:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "2390:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2390:32:1" + }, + "nodeType": "YulIf", + "src": "2387:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2458:37:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2485:9:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "2472:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "2472:23:1" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2462:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2504:28:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2514:18:1", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "2508:2:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2559:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2568:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2576:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2561:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2561:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2561:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2547:6:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2555:2:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "2544:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "2544:14:1" + }, + "nodeType": "YulIf", + "src": "2541:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2594:32:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "2608:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2619:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2604:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2604:22:1" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "2598:2:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2674:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2683:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2691:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2676:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2676:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2676:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2653:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2657:4:1", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2649:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2649:13:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2664:7:1" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "2645:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2645:27:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "2638:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2638:35:1" + }, + "nodeType": "YulIf", + "src": "2635:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2709:30:1", + "value": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2736:2:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "2723:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "2723:16:1" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "2713:6:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2766:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2775:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2783:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2768:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2768:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2768:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2754:6:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2762:2:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "2751:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "2751:14:1" + }, + "nodeType": "YulIf", + "src": "2748:2:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2853:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2862:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2870:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2855:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "2855:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "2855:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2815:2:1" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2823:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2831:4:1", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "2819:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2819:17:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2811:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2811:26:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2839:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2807:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2807:35:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "2844:7:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "2804:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "2804:48:1" + }, + "nodeType": "YulIf", + "src": "2801:2:1" + }, + { + "nodeType": "YulAssignment", + "src": "2888:21:1", + "value": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2902:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2906:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2898:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "2898:11:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "2888:6:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2918:16:1", + "value": { + "name": "length", + "nodeType": "YulIdentifier", + "src": "2928:6:1" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "2918:6:1" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_array$_t_struct$_Pair1155_$14_calldata_ptr_$dyn_calldata_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "2335:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "2346:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "2358:6:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "2366:6:1", + "type": "" + } + ], + "src": "2246:694:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3074:563:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "3120:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3129:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3137:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3122:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3122:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3122:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "3095:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3104:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3091:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3091:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3116:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "3087:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3087:32:1" + }, + "nodeType": "YulIf", + "src": "3084:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3155:37:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3182:9:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "3169:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "3169:23:1" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "3159:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3201:28:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3211:18:1", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "3205:2:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3256:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3265:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3273:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3258:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3258:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3258:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3244:6:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "3252:2:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3241:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "3241:14:1" + }, + "nodeType": "YulIf", + "src": "3238:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3291:32:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3305:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3316:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3301:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3301:22:1" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "3295:2:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3371:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3380:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3388:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3373:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3373:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3373:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3350:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3354:4:1", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3346:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3346:13:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "3361:7:1" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "3342:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3342:27:1" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "3335:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3335:35:1" + }, + "nodeType": "YulIf", + "src": "3332:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3406:30:1", + "value": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3433:2:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "3420:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "3420:16:1" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "3410:6:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3463:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3472:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3480:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3465:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3465:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3465:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "3451:6:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "3459:2:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3448:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "3448:14:1" + }, + "nodeType": "YulIf", + "src": "3445:2:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3550:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3559:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3567:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3552:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3552:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3552:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3512:2:1" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "3520:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3528:4:1", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "3516:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3516:17:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3508:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3508:26:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3536:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3504:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3504:35:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "3541:7:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3501:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "3501:48:1" + }, + "nodeType": "YulIf", + "src": "3498:2:1" + }, + { + "nodeType": "YulAssignment", + "src": "3585:21:1", + "value": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3599:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3603:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3595:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3595:11:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3585:6:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "3615:16:1", + "value": { + "name": "length", + "nodeType": "YulIdentifier", + "src": "3625:6:1" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "3615:6:1" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_array$_t_struct$_Pair721_$7_calldata_ptr_$dyn_calldata_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "3032:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "3043:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "3055:6:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "3063:6:1", + "type": "" + } + ], + "src": "2945:692:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3775:1764:1", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "3821:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3830:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3838:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3823:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3823:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3823:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "3796:7:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3805:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3792:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3792:23:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3817:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "3788:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "3788:32:1" + }, + "nodeType": "YulIf", + "src": "3785:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3856:37:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "3883:9:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "3870:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "3870:23:1" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "3860:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3902:28:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3912:18:1", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "3906:2:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3957:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3966:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "3974:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3959:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "3959:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "3959:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3945:6:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "3953:2:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3942:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "3942:14:1" + }, + "nodeType": "YulIf", + "src": "3939:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3992:32:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "4006:9:1" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4017:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4002:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4002:22:1" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "3996:2:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4033:16:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4043:6:1", + "type": "", + "value": "0x01a0" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "4037:2:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4087:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "4096:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "4104:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4089:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4089:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4089:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "4069:7:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4078:2:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "4065:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4065:16:1" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "4083:2:1" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "4061:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4061:25:1" + }, + "nodeType": "YulIf", + "src": "4058:2:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4122:31:1", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "4150:2:1" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "4135:14:1" + }, + "nodeType": "YulFunctionCall", + "src": "4135:18:1" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "4126:5:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4169:5:1" + }, + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4189:2:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4176:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "4176:16:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4162:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4162:31:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4162:31:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4213:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4220:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4209:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4209:14:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4250:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4254:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4246:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4246:11:1" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "4225:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "4225:33:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4202:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4202:57:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4202:57:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4279:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4286:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4275:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4275:14:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4308:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4312:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4304:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4304:11:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4291:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "4291:25:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4268:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4268:49:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4268:49:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4337:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4344:2:1", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4333:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4333:14:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4366:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4370:2:1", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4362:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4362:11:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4349:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "4349:25:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4326:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4326:49:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4326:49:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4395:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4402:3:1", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4391:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4391:15:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4425:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4429:3:1", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4421:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4421:12:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4408:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "4408:26:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4384:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4384:51:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4384:51:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4455:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4462:3:1", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4451:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4451:15:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4485:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4489:3:1", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4481:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4481:12:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4468:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "4468:26:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4444:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4444:51:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4444:51:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4515:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4522:3:1", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4511:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4511:15:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4553:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4557:3:1", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4549:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4549:12:1" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "4528:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "4528:34:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4504:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4504:59:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4504:59:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4572:42:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4605:2:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4609:3:1", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4601:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4601:12:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4588:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "4588:26:1" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "4576:8:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4643:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "4652:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "4660:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4645:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4645:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4645:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "4629:8:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "4639:2:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "4626:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "4626:16:1" + }, + "nodeType": "YulIf", + "src": "4623:2:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4689:5:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4696:3:1", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4685:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4685:15:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4725:2:1" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "4729:8:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4721:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4721:17:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "4740:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "4702:18:1" + }, + "nodeType": "YulFunctionCall", + "src": "4702:46:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4678:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4678:71:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4678:71:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4758:13:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4768:3:1", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "4762:2:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4780:41:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4813:2:1" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "4817:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4809:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4809:11:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "4796:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "4796:25:1" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "4784:8:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4850:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "4859:6:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "4867:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4852:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4852:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4852:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "4836:8:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "4846:2:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "4833:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "4833:16:1" + }, + "nodeType": "YulIf", + "src": "4830:2:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "4896:5:1" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "4903:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4892:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4892:14:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4957:2:1" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "4961:8:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4953:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "4953:17:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "4972:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_OrderItem_$dyn", + "nodeType": "YulIdentifier", + "src": "4908:44:1" + }, + "nodeType": "YulFunctionCall", + "src": "4908:72:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4885:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "4885:96:1" + }, + "nodeType": "YulExpressionStatement", + "src": "4885:96:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4990:13:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5000:3:1", + "type": "", + "value": "288" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "4994:2:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5023:5:1" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "5030:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5019:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5019:14:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "5052:2:1" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "5056:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5048:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5048:11:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "5035:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "5035:25:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5012:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "5012:49:1" + }, + "nodeType": "YulExpressionStatement", + "src": "5012:49:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5070:13:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5080:3:1", + "type": "", + "value": "320" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "5074:2:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5103:5:1" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "5110:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5099:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5099:14:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "5132:2:1" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "5136:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5128:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5128:11:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "5115:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "5115:25:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5092:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "5092:49:1" + }, + "nodeType": "YulExpressionStatement", + "src": "5092:49:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5150:13:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5160:3:1", + "type": "", + "value": "352" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "5154:2:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5183:5:1" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "5190:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5179:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5179:14:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "5218:2:1" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "5222:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5214:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5214:11:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint8", + "nodeType": "YulIdentifier", + "src": "5195:18:1" + }, + "nodeType": "YulFunctionCall", + "src": "5195:31:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5172:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "5172:55:1" + }, + "nodeType": "YulExpressionStatement", + "src": "5172:55:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5236:13:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5246:3:1", + "type": "", + "value": "384" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "5240:2:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5269:5:1" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "5276:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5265:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5265:14:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "5304:2:1" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "5308:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5300:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5300:11:1" + } + ], + "functionName": { + "name": "abi_decode_t_uint8", + "nodeType": "YulIdentifier", + "src": "5281:18:1" + }, + "nodeType": "YulFunctionCall", + "src": "5281:31:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5258:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "5258:55:1" + }, + "nodeType": "YulExpressionStatement", + "src": "5258:55:1" + }, + { + "nodeType": "YulAssignment", + "src": "5322:15:1", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5332:5:1" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "5322:6:1" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5346:48:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5379:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5390:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5375:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5375:18:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "5362:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "5362:32:1" + }, + "variables": [ + { + "name": "offset_3", + "nodeType": "YulTypedName", + "src": "5350:8:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5423:26:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "5432:6:1" + }, + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "5440:6:1" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "5425:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "5425:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "5425:22:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_3", + "nodeType": "YulIdentifier", + "src": "5409:8:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "5419:2:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "5406:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "5406:16:1" + }, + "nodeType": "YulIf", + "src": "5403:2:1" + }, + { + "nodeType": "YulAssignment", + "src": "5458:75:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "5503:9:1" + }, + { + "name": "offset_3", + "nodeType": "YulIdentifier", + "src": "5514:8:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5499:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5499:24:1" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "5525:7:1" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_OrderItem", + "nodeType": "YulIdentifier", + "src": "5468:30:1" + }, + "nodeType": "YulFunctionCall", + "src": "5468:65:1" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "5458:6:1" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_Order_$47_memory_ptrt_struct$_OrderItem_$19_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "3733:9:1", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "3744:7:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "3756:6:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "3764:6:1", + "type": "" + } + ], + "src": "3642:1897:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5595:426:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "5605:26:1", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5625:5:1" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5619:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "5619:12:1" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "5609:6:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "5647:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "5652:6:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5640:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "5640:19:1" + }, + "nodeType": "YulExpressionStatement", + "src": "5640:19:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5668:12:1", + "value": { + "name": "end", + "nodeType": "YulIdentifier", + "src": "5677:3:1" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "5672:1:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5741:110:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "5755:14:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5765:4:1", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "5759:2:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "5797:3:1" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "5802:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5793:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5793:11:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "5806:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5789:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5789:20:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5825:5:1" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "5832:1:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5821:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5821:13:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "5836:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5817:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5817:22:1" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5811:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "5811:29:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5782:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "5782:59:1" + }, + "nodeType": "YulExpressionStatement", + "src": "5782:59:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "5700:1:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "5703:6:1" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "5697:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "5697:13:1" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "5711:21:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5713:17:1", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "5722:1:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5725:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5718:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5718:12:1" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "5713:1:1" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "5693:3:1", + "statements": [] + }, + "src": "5689:162:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5885:64:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "5914:3:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "5919:6:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5910:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5910:16:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5928:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5906:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5906:27:1" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "5935:3:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5899:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "5899:40:1" + }, + "nodeType": "YulExpressionStatement", + "src": "5899:40:1" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "5866:1:1" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "5869:6:1" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "5863:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "5863:13:1" + }, + "nodeType": "YulIf", + "src": "5860:2:1" + }, + { + "nodeType": "YulAssignment", + "src": "5958:57:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "5973:3:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "5986:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5994:2:1", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5982:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5982:15:1" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6003:2:1", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "5999:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5999:7:1" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "5978:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5978:29:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5969:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5969:39:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6010:4:1", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5965:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "5965:50:1" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "5958:3:1" + } + ] + } + ] + }, + "name": "abi_encode_t_bytes", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "5572:5:1", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "5579:3:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "5587:3:1", + "type": "" + } + ], + "src": "5544:477:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6237:656:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "6247:12:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6257:2:1", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "6251:2:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6268:32:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6286:9:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "6297:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6282:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6282:18:1" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "6272:6:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6316:9:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "6327:2:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6309:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "6309:21:1" + }, + "nodeType": "YulExpressionStatement", + "src": "6309:21:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6339:17:1", + "value": { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "6350:6:1" + }, + "variables": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "6343:3:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "6372:6:1" + }, + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "6380:6:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6365:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "6365:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "6365:22:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6396:12:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6406:2:1", + "type": "", + "value": "64" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "6400:2:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "6417:25:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "6428:9:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "6439:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6424:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6424:18:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "6417:3:1" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6451:20:1", + "value": { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "6465:6:1" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "6455:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6480:13:1", + "value": { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "6489:4:1" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "6484:1:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6551:316:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "6572:3:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "6602:6:1" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "6581:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "6581:28:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6619:3:1", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6624:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "6615:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6615:11:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6628:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "6611:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6611:19:1" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "6577:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6577:54:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6565:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "6565:67:1" + }, + "nodeType": "YulExpressionStatement", + "src": "6565:67:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "6656:3:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "6661:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6652:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6652:12:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "6683:6:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "6691:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6679:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6679:15:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "6666:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "6666:29:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6645:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "6645:51:1" + }, + "nodeType": "YulExpressionStatement", + "src": "6645:51:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "6720:3:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "6725:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6716:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6716:12:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "6747:6:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "6755:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6743:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6743:15:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "6730:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "6730:29:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6709:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "6709:51:1" + }, + "nodeType": "YulExpressionStatement", + "src": "6709:51:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6773:14:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6783:4:1", + "type": "", + "value": "0x60" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "6777:2:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "6800:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "6811:3:1" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6816:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6807:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6807:12:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "6800:3:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "6832:25:1", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "6846:6:1" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6854:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6842:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6842:15:1" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "6832:6:1" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "6513:1:1" + }, + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "6516:6:1" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "6510:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "6510:13:1" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "6524:18:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "6526:14:1", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "6535:1:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6538:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6531:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "6531:9:1" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "6526:1:1" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "6506:3:1", + "statements": [] + }, + "src": "6502:365:1" + }, + { + "nodeType": "YulAssignment", + "src": "6876:11:1", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "6884:3:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "6876:4:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_array$_t_struct$_Pair1155_$14_calldata_ptr_$dyn_calldata_ptr__to_t_array$_t_struct$_Pair1155_$14_memory_ptr_$dyn_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "6198:9:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "6209:6:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "6217:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "6228:4:1", + "type": "" + } + ], + "src": "6026:867:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7105:565:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "7115:12:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7125:2:1", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "7119:2:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7136:32:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7154:9:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "7165:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7150:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7150:18:1" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "7140:6:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7184:9:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "7195:2:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7177:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "7177:21:1" + }, + "nodeType": "YulExpressionStatement", + "src": "7177:21:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7207:17:1", + "value": { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "7218:6:1" + }, + "variables": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "7211:3:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "7240:6:1" + }, + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "7248:6:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7233:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "7233:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "7233:22:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7264:12:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7274:2:1", + "type": "", + "value": "64" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "7268:2:1", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "7285:25:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7296:9:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7307:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7292:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7292:18:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "7285:3:1" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7319:20:1", + "value": { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7333:6:1" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "7323:6:1", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7348:13:1", + "value": { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "7357:4:1" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "7352:1:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7419:225:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "7440:3:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "7470:6:1" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "7449:20:1" + }, + "nodeType": "YulFunctionCall", + "src": "7449:28:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7487:3:1", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7492:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "7483:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7483:11:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7496:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "7479:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7479:19:1" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "7445:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7445:54:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7433:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "7433:67:1" + }, + "nodeType": "YulExpressionStatement", + "src": "7433:67:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "7524:3:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "7529:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7520:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7520:12:1" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "7551:6:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "7559:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7547:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7547:15:1" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "7534:12:1" + }, + "nodeType": "YulFunctionCall", + "src": "7534:29:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7513:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "7513:51:1" + }, + "nodeType": "YulExpressionStatement", + "src": "7513:51:1" + }, + { + "nodeType": "YulAssignment", + "src": "7577:19:1", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "7588:3:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7593:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7584:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7584:12:1" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "7577:3:1" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "7609:25:1", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "7623:6:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7631:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7619:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7619:15:1" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "7609:6:1" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "7381:1:1" + }, + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "7384:6:1" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "7378:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "7378:13:1" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "7392:18:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7394:14:1", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "7403:1:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7406:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7399:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7399:9:1" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "7394:1:1" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "7374:3:1", + "statements": [] + }, + "src": "7370:274:1" + }, + { + "nodeType": "YulAssignment", + "src": "7653:11:1", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "7661:3:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "7653:4:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_array$_t_struct$_Pair721_$7_calldata_ptr_$dyn_calldata_ptr__to_t_array$_t_struct$_Pair721_$7_memory_ptr_$dyn_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "7066:9:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "7077:6:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "7085:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "7096:4:1", + "type": "" + } + ], + "src": "6898:772:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7776:76:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7786:26:1", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7798:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7809:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7794:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "7794:18:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "7786:4:1" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7828:9:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "7839:6:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7821:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "7821:25:1" + }, + "nodeType": "YulExpressionStatement", + "src": "7821:25:1" + } + ] + }, + "name": "abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "7745:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "7756:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "7767:4:1", + "type": "" + } + ], + "src": "7675:177:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7976:100:1", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "7993:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8004:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7986:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "7986:21:1" + }, + "nodeType": "YulExpressionStatement", + "src": "7986:21:1" + }, + { + "nodeType": "YulAssignment", + "src": "8016:54:1", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8043:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8055:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8066:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8051:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8051:18:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "8024:18:1" + }, + "nodeType": "YulFunctionCall", + "src": "8024:46:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "8016:4:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "7945:9:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "7956:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "7967:4:1", + "type": "" + } + ], + "src": "7857:219:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8474:740:1", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "8484:13:1", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8494:3:1", + "type": "", + "value": "288" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "8488:2:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8513:9:1" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "8524:6:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8506:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "8506:25:1" + }, + "nodeType": "YulExpressionStatement", + "src": "8506:25:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8540:29:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8558:3:1", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8563:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "8554:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8554:11:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8567:1:1", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "8550:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8550:19:1" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "8544:2:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8589:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8600:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8585:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8585:18:1" + }, + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "8609:6:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8617:2:1" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "8605:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8605:15:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8578:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "8578:43:1" + }, + "nodeType": "YulExpressionStatement", + "src": "8578:43:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8641:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8652:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8637:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8637:18:1" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "8657:6:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8630:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "8630:34:1" + }, + "nodeType": "YulExpressionStatement", + "src": "8630:34:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8684:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8695:2:1", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8680:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8680:18:1" + }, + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "8700:6:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8673:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "8673:34:1" + }, + "nodeType": "YulExpressionStatement", + "src": "8673:34:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8727:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8738:3:1", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8723:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8723:19:1" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "8744:6:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8716:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "8716:35:1" + }, + "nodeType": "YulExpressionStatement", + "src": "8716:35:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8771:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8782:3:1", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8767:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8767:19:1" + }, + { + "name": "value5", + "nodeType": "YulIdentifier", + "src": "8788:6:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8760:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "8760:35:1" + }, + "nodeType": "YulExpressionStatement", + "src": "8760:35:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8815:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8826:3:1", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8811:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8811:19:1" + }, + { + "arguments": [ + { + "name": "value6", + "nodeType": "YulIdentifier", + "src": "8836:6:1" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8844:2:1" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "8832:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8832:15:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8804:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "8804:44:1" + }, + "nodeType": "YulExpressionStatement", + "src": "8804:44:1" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8868:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8879:3:1", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8864:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8864:19:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "8885:2:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8857:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "8857:31:1" + }, + "nodeType": "YulExpressionStatement", + "src": "8857:31:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8897:60:1", + "value": { + "arguments": [ + { + "name": "value7", + "nodeType": "YulIdentifier", + "src": "8930:6:1" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8942:9:1" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "8953:2:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8938:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8938:18:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "8911:18:1" + }, + "nodeType": "YulFunctionCall", + "src": "8911:46:1" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "8901:6:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "8977:9:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8988:3:1", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8973:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8973:19:1" + }, + { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "8998:6:1" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "9006:9:1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "8994:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "8994:22:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8966:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "8966:51:1" + }, + "nodeType": "YulExpressionStatement", + "src": "8966:51:1" + }, + { + "expression": { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "9033:6:1" + }, + { + "arguments": [ + { + "name": "value8", + "nodeType": "YulIdentifier", + "src": "9047:6:1" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "9041:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "9041:13:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9026:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "9026:29:1" + }, + "nodeType": "YulExpressionStatement", + "src": "9026:29:1" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9064:42:1", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value8", + "nodeType": "YulIdentifier", + "src": "9094:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9102:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9090:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "9090:15:1" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "9084:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "9084:22:1" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "9068:12:1", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "9126:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9134:2:1", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9122:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "9122:15:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9139:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9115:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "9115:27:1" + }, + "nodeType": "YulExpressionStatement", + "src": "9115:27:1" + }, + { + "nodeType": "YulAssignment", + "src": "9151:57:1", + "value": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "9178:12:1" + }, + { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "9196:6:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9204:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9192:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "9192:15:1" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "9159:18:1" + }, + "nodeType": "YulFunctionCall", + "src": "9159:49:1" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "9151:4:1" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_uint256_t_address_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bytes_memory_ptr_t_struct$_OrderItem_$19_memory_ptr__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bytes_memory_ptr_t_struct$_OrderItem_$19_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "8379:9:1", + "type": "" + }, + { + "name": "value8", + "nodeType": "YulTypedName", + "src": "8390:6:1", + "type": "" + }, + { + "name": "value7", + "nodeType": "YulTypedName", + "src": "8398:6:1", + "type": "" + }, + { + "name": "value6", + "nodeType": "YulTypedName", + "src": "8406:6:1", + "type": "" + }, + { + "name": "value5", + "nodeType": "YulTypedName", + "src": "8414:6:1", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "8422:6:1", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "8430:6:1", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "8438:6:1", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "8446:6:1", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "8454:6:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "8465:4:1", + "type": "" + } + ], + "src": "8081:1133:1" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9263:198:1", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9273:19:1", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9289:2:1", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "9283:5:1" + }, + "nodeType": "YulFunctionCall", + "src": "9283:9:1" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "9273:6:1" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9301:35:1", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "9323:6:1" + }, + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "9331:4:1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9319:3:1" + }, + "nodeType": "YulFunctionCall", + "src": "9319:17:1" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "9305:10:1", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9411:13:1", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "9413:7:1" + }, + "nodeType": "YulFunctionCall", + "src": "9413:9:1" + }, + "nodeType": "YulExpressionStatement", + "src": "9413:9:1" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "9354:10:1" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9366:18:1", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "9351:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "9351:34:1" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "9390:10:1" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "9402:6:1" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "9387:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "9387:22:1" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "9348:2:1" + }, + "nodeType": "YulFunctionCall", + "src": "9348:62:1" + }, + "nodeType": "YulIf", + "src": "9345:2:1" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9440:2:1", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "9444:10:1" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9433:6:1" + }, + "nodeType": "YulFunctionCall", + "src": "9433:22:1" + }, + "nodeType": "YulExpressionStatement", + "src": "9433:22:1" + } + ] + }, + "name": "allocateMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "9243:4:1", + "type": "" + } + ], + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "9252:6:1", + "type": "" + } + ], + "src": "9219:242:1" + } + ] + }, + "contents": "{\n { }\n function abi_decode_t_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function abi_decode_t_array$_t_struct$_OrderItem_$dyn(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := calldataload(offset)\n let _2 := 0x20\n if gt(_1, 0xffffffffffffffff) { invalid() }\n let dst := allocateMemory(add(mul(_1, _2), _2))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n mstore(dst, abi_decode_t_struct$_OrderItem(add(add(offset, calldataload(src)), _2), end))\n dst := add(dst, _2)\n src := add(src, _2)\n }\n array := dst_1\n }\n function abi_decode_t_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := calldataload(offset)\n if gt(_1, 0xffffffffffffffff) { invalid() }\n let array_1 := allocateMemory(add(and(add(_1, 0x1f), not(31)), 0x20))\n mstore(array_1, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n mstore(add(add(array_1, _1), 0x20), array)\n array := array_1\n }\n function abi_decode_t_struct$_OrderItem(headStart, end) -> value\n {\n if slt(sub(end, headStart), 0x40) { revert(value, value) }\n let memPtr := mload(0x40)\n let newFreePtr := add(memPtr, 0x40)\n let _1 := 0xffffffffffffffff\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { invalid() }\n mstore(0x40, newFreePtr)\n value := memPtr\n mstore(memPtr, calldataload(headStart))\n let offset := calldataload(add(headStart, 32))\n if gt(offset, _1) { revert(0, 0) }\n mstore(add(memPtr, 32), abi_decode_t_bytes(add(headStart, offset), end))\n }\n function abi_decode_t_uint8(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_array$_t_struct$_Pair1155_$14_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value0, value0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value0, value0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(value0, value0) }\n if gt(add(add(_2, mul(length, 0x60)), 32), dataEnd) { revert(value0, value0) }\n value0 := add(_2, 32)\n value1 := length\n }\n function abi_decode_tuple_t_array$_t_struct$_Pair721_$7_calldata_ptr_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value0, value0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value0, value0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(value0, value0) }\n if gt(add(add(_2, mul(length, 0x40)), 32), dataEnd) { revert(value0, value0) }\n value0 := add(_2, 32)\n value1 := length\n }\n function abi_decode_tuple_t_struct$_Order_$47_memory_ptrt_struct$_OrderItem_$19_memory_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value0, value0) }\n let _2 := add(headStart, offset)\n let _3 := 0x01a0\n if slt(sub(dataEnd, _2), _3) { revert(value0, value0) }\n let value := allocateMemory(_3)\n mstore(value, calldataload(_2))\n mstore(add(value, 32), abi_decode_t_address(add(_2, 32)))\n mstore(add(value, 64), calldataload(add(_2, 64)))\n mstore(add(value, 96), calldataload(add(_2, 96)))\n mstore(add(value, 128), calldataload(add(_2, 128)))\n mstore(add(value, 160), calldataload(add(_2, 160)))\n mstore(add(value, 192), abi_decode_t_address(add(_2, 192)))\n let offset_1 := calldataload(add(_2, 224))\n if gt(offset_1, _1) { revert(value0, value0) }\n mstore(add(value, 224), abi_decode_t_bytes(add(_2, offset_1), dataEnd))\n let _4 := 256\n let offset_2 := calldataload(add(_2, _4))\n if gt(offset_2, _1) { revert(value0, value0) }\n mstore(add(value, _4), abi_decode_t_array$_t_struct$_OrderItem_$dyn(add(_2, offset_2), dataEnd))\n let _5 := 288\n mstore(add(value, _5), calldataload(add(_2, _5)))\n let _6 := 320\n mstore(add(value, _6), calldataload(add(_2, _6)))\n let _7 := 352\n mstore(add(value, _7), abi_decode_t_uint8(add(_2, _7)))\n let _8 := 384\n mstore(add(value, _8), abi_decode_t_uint8(add(_2, _8)))\n value0 := value\n let offset_3 := calldataload(add(headStart, 32))\n if gt(offset_3, _1) { revert(value1, value1) }\n value1 := abi_decode_t_struct$_OrderItem(add(headStart, offset_3), dataEnd)\n }\n function abi_encode_t_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let i := end\n for { } lt(i, length) { i := add(i, 0x20) }\n {\n let _1 := 0x20\n mstore(add(add(pos, i), _1), mload(add(add(value, i), _1)))\n }\n if gt(i, length)\n {\n mstore(add(add(pos, length), 0x20), end)\n }\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_array$_t_struct$_Pair1155_$14_calldata_ptr_$dyn_calldata_ptr__to_t_array$_t_struct$_Pair1155_$14_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n mstore(tail_1, value1)\n let _2 := 64\n pos := add(headStart, _2)\n let srcPtr := value0\n let i := tail\n for { } lt(i, value1) { i := add(i, 1) }\n {\n mstore(pos, and(abi_decode_t_address(srcPtr), sub(shl(160, 1), 1)))\n mstore(add(pos, _1), calldataload(add(srcPtr, _1)))\n mstore(add(pos, _2), calldataload(add(srcPtr, _2)))\n let _3 := 0x60\n pos := add(pos, _3)\n srcPtr := add(srcPtr, _3)\n }\n tail := pos\n }\n function abi_encode_tuple_t_array$_t_struct$_Pair721_$7_calldata_ptr_$dyn_calldata_ptr__to_t_array$_t_struct$_Pair721_$7_memory_ptr_$dyn_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n let _1 := 32\n let tail_1 := add(headStart, _1)\n mstore(headStart, _1)\n let pos := tail_1\n mstore(tail_1, value1)\n let _2 := 64\n pos := add(headStart, _2)\n let srcPtr := value0\n let i := tail\n for { } lt(i, value1) { i := add(i, 1) }\n {\n mstore(pos, and(abi_decode_t_address(srcPtr), sub(shl(160, 1), 1)))\n mstore(add(pos, _1), calldataload(add(srcPtr, _1)))\n pos := add(pos, _2)\n srcPtr := add(srcPtr, _2)\n }\n tail := pos\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_t_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_uint256_t_address_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bytes_memory_ptr_t_struct$_OrderItem_$19_memory_ptr__to_t_uint256_t_address_t_uint256_t_uint256_t_uint256_t_uint256_t_address_t_bytes_memory_ptr_t_struct$_OrderItem_$19_memory_ptr__fromStack_reversed(headStart, value8, value7, value6, value5, value4, value3, value2, value1, value0) -> tail\n {\n let _1 := 288\n mstore(headStart, value0)\n let _2 := sub(shl(160, 1), 1)\n mstore(add(headStart, 32), and(value1, _2))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), value4)\n mstore(add(headStart, 160), value5)\n mstore(add(headStart, 192), and(value6, _2))\n mstore(add(headStart, 224), _1)\n let tail_1 := abi_encode_t_bytes(value7, add(headStart, _1))\n mstore(add(headStart, 256), sub(tail_1, headStart))\n mstore(tail_1, mload(value8))\n let memberValue0 := mload(add(value8, 32))\n mstore(add(tail_1, 32), 64)\n tail := abi_encode_t_bytes(memberValue0, add(tail_1, 64))\n }\n function allocateMemory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, size)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n mstore(64, newFreePtr)\n }\n}", + "id": 1, + "language": "Yul", + "name": "#utility.yul" + } + ], + "sourceMap": "77:1435:0:-:0;;;;;;;;;;;;;;;;;;;", + "deployedSourceMap": "77:1435:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;714:120;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;840:125;;;;;;:::i;:::-;;:::i;971:533::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;714:120::-;781:12;822:4;;811:16;;;;;;;;;:::i;:::-;;;;;;;;;;;;;804:23;;714:120;;;;:::o;840:125::-;912:12;953:4;;942:16;;;;;;;;;:::i;971:533::-;1180:10;;1212;;;;;1244:13;;;;;1279:12;;;;1313:18;;;;1353:14;;;;1389;;;;1425;;;;1148:335;;1079:7;;1148:335;;1180:10;;1212;1425:14;1461:4;;1148:335;;:::i;:::-;;;;;;;;;;;;;1121:376;;;;;;1102:395;;971:533;;;;:::o;14:175:1:-;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;113:2;65:124;;;:::o;194:718::-;;317:3;310:4;302:6;298:17;294:27;284:2;;339:5;332;325:20;284:2;379:6;366:20;405:4;428:18;424:2;421:26;418:2;;;450:9;418:2;481:36;513:2;508;504;500:11;496:20;481:36;:::i;:::-;551:15;;;582:12;;;;614:15;;;647:5;661:222;675:2;672:1;669:9;661:222;;;732:76;804:3;799:2;792:3;779:17;771:6;767:30;763:39;732:76;:::i;:::-;720:89;;829:12;;;;861;;;;693:1;686:9;661:222;;;-1:-1:-1;901:5:1;;274:638;-1:-1:-1;;;;;;;274:638:1:o;917:542::-;;1014:3;1007:4;999:6;995:17;991:27;981:2;;1036:5;1029;1022:20;981:2;1076:6;1063:20;1102:18;1098:2;1095:26;1092:2;;;1124:9;1092:2;1159:54;1201:2;1182:13;;-1:-1:-1;;1178:27:1;1207:4;1174:38;1159:54;:::i;:::-;1238:2;1229:7;1222:19;1284:3;1277:4;1272:2;1264:6;1260:15;1256:26;1253:35;1250:2;;;1305:5;1298;1291:20;1250:2;1374;1367:4;1359:6;1355:17;1348:4;1339:7;1335:18;1322:55;1397:16;;;1415:4;1393:27;1386:42;;;;1401:7;971:488;-1:-1:-1;;971:488:1:o;1464:614::-;;1571:4;1559:9;1554:3;1550:19;1546:30;1543:2;;;1593:5;1586;1579:20;1543:2;1630:4;1624:11;1674:4;1666:6;1662:17;1698:18;1766:6;1754:10;1751:22;1746:2;1734:10;1731:18;1728:46;1725:2;;;1777:9;1725:2;1810:10;1804:4;1797:24;1839:6;1830:15;;1882:9;1869:23;1861:6;1854:39;1944:2;1933:9;1929:18;1916:32;1902:46;;1971:2;1963:6;1960:14;1957:2;;;1987:1;1984;1977:12;1957:2;;2024:47;2067:3;2058:6;2047:9;2043:22;2024:47;:::i;:::-;2019:2;2011:6;2007:15;2000:72;;;1533:545;;;;:::o;2083:158::-;2151:20;;2211:4;2200:16;;2190:27;;2180:2;;2231:1;2228;2221:12;2246:694;;;2419:2;2407:9;2398:7;2394:23;2390:32;2387:2;;;2440:6;2432;2425:22;2387:2;2485:9;2472:23;2514:18;2555:2;2547:6;2544:14;2541:2;;;2576:6;2568;2561:22;2541:2;2619:6;2608:9;2604:22;2594:32;;2664:7;2657:4;2653:2;2649:13;2645:27;2635:2;;2691:6;2683;2676:22;2635:2;2736;2723:16;2762:2;2754:6;2751:14;2748:2;;;2783:6;2775;2768:22;2748:2;2844:7;2839:2;2831:4;2823:6;2819:17;2815:2;2811:26;2807:35;2804:48;2801:2;;;2870:6;2862;2855:22;2801:2;2906;2898:11;;;;;2928:6;;-1:-1:-1;2377:563:1;;-1:-1:-1;;;;2377:563:1:o;2945:692::-;;;3116:2;3104:9;3095:7;3091:23;3087:32;3084:2;;;3137:6;3129;3122:22;3084:2;3182:9;3169:23;3211:18;3252:2;3244:6;3241:14;3238:2;;;3273:6;3265;3258:22;3238:2;3316:6;3305:9;3301:22;3291:32;;3361:7;3354:4;3350:2;3346:13;3342:27;3332:2;;3388:6;3380;3373:22;3332:2;3433;3420:16;3459:2;3451:6;3448:14;3445:2;;;3480:6;3472;3465:22;3445:2;3541:7;3536:2;3528:4;3520:6;3516:17;3512:2;3508:26;3504:35;3501:48;3498:2;;;3567:6;3559;3552:22;3642:1897;;;3817:2;3805:9;3796:7;3792:23;3788:32;3785:2;;;3838:6;3830;3823:22;3785:2;3883:9;3870:23;3912:18;3953:2;3945:6;3942:14;3939:2;;;3974:6;3966;3959:22;3939:2;4017:6;4006:9;4002:22;3992:32;;4043:6;4083:2;4078;4069:7;4065:16;4061:25;4058:2;;;4104:6;4096;4089:22;4058:2;4135:18;4150:2;4135:18;:::i;:::-;4122:31;;4189:2;4176:16;4169:5;4162:31;4225:33;4254:2;4250;4246:11;4225:33;:::i;:::-;4220:2;4213:5;4209:14;4202:57;4312:2;4308;4304:11;4291:25;4286:2;4279:5;4275:14;4268:49;4370:2;4366;4362:11;4349:25;4344:2;4337:5;4333:14;4326:49;4429:3;4425:2;4421:12;4408:26;4402:3;4395:5;4391:15;4384:51;4489:3;4485:2;4481:12;4468:26;4462:3;4455:5;4451:15;4444:51;4528:34;4557:3;4553:2;4549:12;4528:34;:::i;:::-;4522:3;4515:5;4511:15;4504:59;4609:3;4605:2;4601:12;4588:26;4639:2;4629:8;4626:16;4623:2;;;4660:6;4652;4645:22;4623:2;4702:46;4740:7;4729:8;4725:2;4721:17;4702:46;:::i;:::-;4696:3;4689:5;4685:15;4678:71;;4768:3;4817:2;4813;4809:11;4796:25;4846:2;4836:8;4833:16;4830:2;;;4867:6;4859;4852:22;4830:2;4908:72;4972:7;4961:8;4957:2;4953:17;4908:72;:::i;:::-;4903:2;4896:5;4892:14;4885:96;;;5000:3;5056:2;5052;5048:11;5035:25;5030:2;5023:5;5019:14;5012:49;;5080:3;5136:2;5132;5128:11;5115:25;5110:2;5103:5;5099:14;5092:49;;5160:3;5195:31;5222:2;5218;5214:11;5195:31;:::i;:::-;5179:14;;;5172:55;5246:3;5281:31;5300:11;;;5281:31;:::i;:::-;5265:14;;;5258:55;5269:5;-1:-1:-1;5390:2:1;5375:18;;5362:32;;-1:-1:-1;5406:16:1;;;5403:2;;;5440:6;5432;5425:22;5403:2;;5468:65;5525:7;5514:8;5503:9;5499:24;5468:65;:::i;:::-;5458:75;;;3775:1764;;;;;:::o;5544:477::-;;5625:5;5619:12;5652:6;5647:3;5640:19;5677:3;5689:162;5703:6;5700:1;5697:13;5689:162;;;5765:4;5821:13;;;5817:22;;5811:29;5793:11;;;5789:20;;5782:59;5718:12;5689:162;;;5869:6;5866:1;5863:13;5860:2;;;5935:3;5928:4;5919:6;5914:3;5910:16;5906:27;5899:40;5860:2;-1:-1:-1;6003:2:1;5982:15;-1:-1:-1;;5978:29:1;5969:39;;;;6010:4;5965:50;;5595:426;-1:-1:-1;;5595:426:1:o;6026:867::-;6257:2;6309:21;;;6282:18;;;6365:22;;;6026:867;;6406:2;6424:18;;;6465:6;6026:867;6502:365;6516:6;6513:1;6510:13;6502:365;;;-1:-1:-1;;;;;6581:28:1;6602:6;6581:28;:::i;:::-;6577:54;6565:67;;6679:15;;;6666:29;6652:12;;;6645:51;6743:15;;;6730:29;6716:12;;;6709:51;6783:4;6807:12;;;;6842:15;;;;6538:1;6531:9;6502:365;;6898:772;7125:2;7177:21;;;7150:18;;;7233:22;;;6898:772;;7274:2;7292:18;;;7333:6;6898:772;7370:274;7384:6;7381:1;7378:13;7370:274;;;-1:-1:-1;;;;;7449:28:1;7470:6;7449:28;:::i;:::-;7445:54;7433:67;;7547:15;;;7534:29;7520:12;;;7513:51;7584:12;;;;7619:15;;;;7406:1;7399:9;7370:274;;7675:177;7821:25;;;7809:2;7794:18;;7776:76::o;7857:219::-;;8004:2;7993:9;7986:21;8024:46;8066:2;8055:9;8051:18;8043:6;8024:46;:::i;:::-;8016:54;7976:100;-1:-1:-1;;;7976:100:1:o;8081:1133::-;;8494:3;8524:6;8513:9;8506:25;8567:1;8563;8558:3;8554:11;8550:19;8617:2;8609:6;8605:15;8600:2;8589:9;8585:18;8578:43;8657:6;8652:2;8641:9;8637:18;8630:34;8700:6;8695:2;8684:9;8680:18;8673:34;8744:6;8738:3;8727:9;8723:19;8716:35;8788:6;8782:3;8771:9;8767:19;8760:35;8844:2;8836:6;8832:15;8826:3;8815:9;8811:19;8804:44;;8885:2;8879:3;8868:9;8864:19;8857:31;8911:46;8953:2;8942:9;8938:18;8930:6;8911:46;:::i;:::-;8897:60;;9006:9;8998:6;8994:22;8988:3;8977:9;8973:19;8966:51;9047:6;9041:13;9033:6;9026:29;9102:2;9094:6;9090:15;9084:22;9139:2;9134;9126:6;9122:15;9115:27;9159:49;9204:2;9196:6;9192:15;9178:12;9159:49;:::i;:::-;9151:57;8474:740;-1:-1:-1;;;;;;;;;;;;;8474:740:1:o;9219:242::-;9289:2;9283:9;9319:17;;;9366:18;9351:34;;9387:22;;;9348:62;9345:2;;;9413:9;9345:2;9440;9433:22;9263:198;;-1:-1:-1;9263:198:1:o", + "source": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\ncontract X2Y2TestHelper {\n\n struct Pair721 {\n address token;\n uint256 tokenId;\n }\n\n struct Pair1155 {\n address token;\n uint256 tokenId;\n uint256 amount;\n }\n\n struct OrderItem {\n uint256 price;\n bytes data;\n }\n\n struct Order {\n uint256 salt;\n address user;\n uint256 network;\n uint256 intent;\n uint256 delegateType;\n uint256 deadline;\n address currency;\n bytes dataMask;\n OrderItem[] items;\n // signature\n bytes32 r;\n bytes32 s;\n uint8 v;\n uint8 signVersion;\n }\n\n\n function encodeData(Pair721[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function encodeData1155(Pair1155[] calldata data) external pure returns(bytes memory){\n return abi.encode(data);\n }\n\n function hashItem(Order memory order, OrderItem memory item)\n external\n pure\n returns (bytes32)\n {\n return\n keccak256(\n abi.encode(\n order.salt,\n order.user,\n order.network,\n order.intent,\n order.delegateType,\n order.deadline,\n order.currency,\n order.dataMask,\n item\n )\n );\n }\n\n \n}\n", + "sourcePath": "/Users/gonzaotc/developer/github/rarible/protocol-contracts/projects/gas-usage-tests/test/contracts/X2Y2TestHelper.sol", + "ast": { + "absolutePath": "project:/test/contracts/X2Y2TestHelper.sol", + "exportedSymbols": { + "X2Y2TestHelper": [ + 109 + ] + }, + "id": 110, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 1, + "literals": [ + "solidity", + "0.7", + ".6" + ], + "nodeType": "PragmaDirective", + "src": "33:22:0" + }, + { + "id": 2, + "literals": [ + "abicoder", + "v2" + ], + "nodeType": "PragmaDirective", + "src": "56:19:0" + }, + { + "abstract": false, + "baseContracts": [], + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "id": 109, + "linearizedBaseContracts": [ + 109 + ], + "name": "X2Y2TestHelper", + "nodeType": "ContractDefinition", + "nodes": [ + { + "canonicalName": "X2Y2TestHelper.Pair721", + "id": 7, + "members": [ + { + "constant": false, + "id": 4, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 7, + "src": "133:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 3, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "133:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 6, + "mutability": "mutable", + "name": "tokenId", + "nodeType": "VariableDeclaration", + "scope": 7, + "src": "156:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 5, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "156:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "Pair721", + "nodeType": "StructDefinition", + "scope": 109, + "src": "108:70:0", + "visibility": "public" + }, + { + "canonicalName": "X2Y2TestHelper.Pair1155", + "id": 14, + "members": [ + { + "constant": false, + "id": 9, + "mutability": "mutable", + "name": "token", + "nodeType": "VariableDeclaration", + "scope": 14, + "src": "210:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "210:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 11, + "mutability": "mutable", + "name": "tokenId", + "nodeType": "VariableDeclaration", + "scope": 14, + "src": "233:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "233:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 13, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 14, + "src": "258:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 12, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "258:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "name": "Pair1155", + "nodeType": "StructDefinition", + "scope": 109, + "src": "184:95:0", + "visibility": "public" + }, + { + "canonicalName": "X2Y2TestHelper.OrderItem", + "id": 19, + "members": [ + { + "constant": false, + "id": 16, + "mutability": "mutable", + "name": "price", + "nodeType": "VariableDeclaration", + "scope": 19, + "src": "312:13:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 15, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "312:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 18, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 19, + "src": "335:10:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 17, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "335:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "OrderItem", + "nodeType": "StructDefinition", + "scope": 109, + "src": "285:67:0", + "visibility": "public" + }, + { + "canonicalName": "X2Y2TestHelper.Order", + "id": 47, + "members": [ + { + "constant": false, + "id": 21, + "mutability": "mutable", + "name": "salt", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "381:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 20, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "381:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 23, + "mutability": "mutable", + "name": "user", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "403:12:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 22, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "403:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 25, + "mutability": "mutable", + "name": "network", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "425:15:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 24, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "425:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 27, + "mutability": "mutable", + "name": "intent", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "450:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 26, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "450:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 29, + "mutability": "mutable", + "name": "delegateType", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "474:20:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 28, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "474:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 31, + "mutability": "mutable", + "name": "deadline", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "504:16:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 30, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "504:7:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 33, + "mutability": "mutable", + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "530:16:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 32, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "530:7:0", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 35, + "mutability": "mutable", + "name": "dataMask", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "556:14:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 34, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "556:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 38, + "mutability": "mutable", + "name": "items", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "580:17:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_OrderItem_$19_storage_$dyn_storage_ptr", + "typeString": "struct X2Y2TestHelper.OrderItem[]" + }, + "typeName": { + "baseType": { + "id": 36, + "name": "OrderItem", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 19, + "src": "580:9:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OrderItem_$19_storage_ptr", + "typeString": "struct X2Y2TestHelper.OrderItem" + } + }, + "id": 37, + "nodeType": "ArrayTypeName", + "src": "580:11:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_OrderItem_$19_storage_$dyn_storage_ptr", + "typeString": "struct X2Y2TestHelper.OrderItem[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 40, + "mutability": "mutable", + "name": "r", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "628:9:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 39, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "628:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 42, + "mutability": "mutable", + "name": "s", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "647:9:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 41, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "647:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 44, + "mutability": "mutable", + "name": "v", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "666:7:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 43, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "666:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 46, + "mutability": "mutable", + "name": "signVersion", + "nodeType": "VariableDeclaration", + "scope": 47, + "src": "683:17:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 45, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "683:5:0", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "name": "Order", + "nodeType": "StructDefinition", + "scope": 109, + "src": "358:349:0", + "visibility": "public" + }, + { + "body": { + "id": 60, + "nodeType": "Block", + "src": "794:40:0", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 57, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 50, + "src": "822:4:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair721_$7_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct X2Y2TestHelper.Pair721 calldata[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_struct$_Pair721_$7_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct X2Y2TestHelper.Pair721 calldata[] calldata" + } + ], + "expression": { + "id": 55, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "811:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 56, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "811:10:0", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 58, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "811:16:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 54, + "id": 59, + "nodeType": "Return", + "src": "804:23:0" + } + ] + }, + "functionSelector": "32b2f295", + "id": 61, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "encodeData", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 51, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 50, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 61, + "src": "734:23:0", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair721_$7_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct X2Y2TestHelper.Pair721[]" + }, + "typeName": { + "baseType": { + "id": 48, + "name": "Pair721", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7, + "src": "734:7:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair721_$7_storage_ptr", + "typeString": "struct X2Y2TestHelper.Pair721" + } + }, + "id": 49, + "nodeType": "ArrayTypeName", + "src": "734:9:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair721_$7_storage_$dyn_storage_ptr", + "typeString": "struct X2Y2TestHelper.Pair721[]" + } + }, + "visibility": "internal" + } + ], + "src": "733:25:0" + }, + "returnParameters": { + "id": 54, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 53, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 61, + "src": "781:12:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 52, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "781:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "780:14:0" + }, + "scope": 109, + "src": "714:120:0", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 74, + "nodeType": "Block", + "src": "925:40:0", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 71, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 64, + "src": "953:4:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$14_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct X2Y2TestHelper.Pair1155 calldata[] calldata" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$14_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct X2Y2TestHelper.Pair1155 calldata[] calldata" + } + ], + "expression": { + "id": 69, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "942:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 70, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "942:10:0", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 72, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "942:16:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "functionReturnParameters": 68, + "id": 73, + "nodeType": "Return", + "src": "935:23:0" + } + ] + }, + "functionSelector": "558cbeab", + "id": 75, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "encodeData1155", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 65, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 64, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 75, + "src": "864:24:0", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$14_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct X2Y2TestHelper.Pair1155[]" + }, + "typeName": { + "baseType": { + "id": 62, + "name": "Pair1155", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 14, + "src": "864:8:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$14_storage_ptr", + "typeString": "struct X2Y2TestHelper.Pair1155" + } + }, + "id": 63, + "nodeType": "ArrayTypeName", + "src": "864:10:0", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$14_storage_$dyn_storage_ptr", + "typeString": "struct X2Y2TestHelper.Pair1155[]" + } + }, + "visibility": "internal" + } + ], + "src": "863:26:0" + }, + "returnParameters": { + "id": 68, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 67, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 75, + "src": "912:12:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 66, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "912:5:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "911:14:0" + }, + "scope": 109, + "src": "840:125:0", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 107, + "nodeType": "Block", + "src": "1092:412:0", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 87, + "name": "order", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "1180:5:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$47_memory_ptr", + "typeString": "struct X2Y2TestHelper.Order memory" + } + }, + "id": 88, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "salt", + "nodeType": "MemberAccess", + "referencedDeclaration": 21, + "src": "1180:10:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 89, + "name": "order", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "1212:5:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$47_memory_ptr", + "typeString": "struct X2Y2TestHelper.Order memory" + } + }, + "id": 90, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "user", + "nodeType": "MemberAccess", + "referencedDeclaration": 23, + "src": "1212:10:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 91, + "name": "order", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "1244:5:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$47_memory_ptr", + "typeString": "struct X2Y2TestHelper.Order memory" + } + }, + "id": 92, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "network", + "nodeType": "MemberAccess", + "referencedDeclaration": 25, + "src": "1244:13:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 93, + "name": "order", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "1279:5:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$47_memory_ptr", + "typeString": "struct X2Y2TestHelper.Order memory" + } + }, + "id": 94, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "intent", + "nodeType": "MemberAccess", + "referencedDeclaration": 27, + "src": "1279:12:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 95, + "name": "order", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "1313:5:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$47_memory_ptr", + "typeString": "struct X2Y2TestHelper.Order memory" + } + }, + "id": 96, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "delegateType", + "nodeType": "MemberAccess", + "referencedDeclaration": 29, + "src": "1313:18:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 97, + "name": "order", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "1353:5:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$47_memory_ptr", + "typeString": "struct X2Y2TestHelper.Order memory" + } + }, + "id": 98, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "deadline", + "nodeType": "MemberAccess", + "referencedDeclaration": 31, + "src": "1353:14:0", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 99, + "name": "order", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "1389:5:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$47_memory_ptr", + "typeString": "struct X2Y2TestHelper.Order memory" + } + }, + "id": 100, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "currency", + "nodeType": "MemberAccess", + "referencedDeclaration": 33, + "src": "1389:14:0", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "id": 101, + "name": "order", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77, + "src": "1425:5:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$47_memory_ptr", + "typeString": "struct X2Y2TestHelper.Order memory" + } + }, + "id": 102, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "dataMask", + "nodeType": "MemberAccess", + "referencedDeclaration": 35, + "src": "1425:14:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 103, + "name": "item", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79, + "src": "1461:4:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OrderItem_$19_memory_ptr", + "typeString": "struct X2Y2TestHelper.OrderItem memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_struct$_OrderItem_$19_memory_ptr", + "typeString": "struct X2Y2TestHelper.OrderItem memory" + } + ], + "expression": { + "id": 85, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "1148:3:0", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 86, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "1148:10:0", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 104, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1148:335:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 84, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967288, + "src": "1121:9:0", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 105, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "1121:376:0", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 83, + "id": 106, + "nodeType": "Return", + "src": "1102:395:0" + } + ] + }, + "functionSelector": "d7892e2e", + "id": 108, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "hashItem", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 80, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 77, + "mutability": "mutable", + "name": "order", + "nodeType": "VariableDeclaration", + "scope": 108, + "src": "989:18:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$47_memory_ptr", + "typeString": "struct X2Y2TestHelper.Order" + }, + "typeName": { + "id": 76, + "name": "Order", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 47, + "src": "989:5:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$47_storage_ptr", + "typeString": "struct X2Y2TestHelper.Order" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79, + "mutability": "mutable", + "name": "item", + "nodeType": "VariableDeclaration", + "scope": 108, + "src": "1009:21:0", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OrderItem_$19_memory_ptr", + "typeString": "struct X2Y2TestHelper.OrderItem" + }, + "typeName": { + "id": 78, + "name": "OrderItem", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 19, + "src": "1009:9:0", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OrderItem_$19_storage_ptr", + "typeString": "struct X2Y2TestHelper.OrderItem" + } + }, + "visibility": "internal" + } + ], + "src": "988:43:0" + }, + "returnParameters": { + "id": 83, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 82, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 108, + "src": "1079:7:0", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 81, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1079:7:0", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1078:9:0" + }, + "scope": 109, + "src": "971:533:0", + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + } + ], + "scope": 110, + "src": "77:1435:0" + } + ], + "src": "33:1480:0" + }, + "legacyAST": { + "attributes": { + "absolutePath": "project:/test/contracts/X2Y2TestHelper.sol", + "exportedSymbols": { + "X2Y2TestHelper": [ + 109 + ] + }, + "license": "MIT" + }, + "children": [ + { + "attributes": { + "literals": [ + "solidity", + "0.7", + ".6" + ] + }, + "id": 1, + "name": "PragmaDirective", + "src": "33:22:0" + }, + { + "attributes": { + "literals": [ + "abicoder", + "v2" + ] + }, + "id": 2, + "name": "PragmaDirective", + "src": "56:19:0" + }, + { + "attributes": { + "abstract": false, + "baseContracts": [ + null + ], + "contractDependencies": [ + null + ], + "contractKind": "contract", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 109 + ], + "name": "X2Y2TestHelper", + "scope": 110 + }, + "children": [ + { + "attributes": { + "canonicalName": "X2Y2TestHelper.Pair721", + "name": "Pair721", + "scope": 109, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "token", + "scope": 7, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 3, + "name": "ElementaryTypeName", + "src": "133:7:0" + } + ], + "id": 4, + "name": "VariableDeclaration", + "src": "133:13:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "tokenId", + "scope": 7, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 5, + "name": "ElementaryTypeName", + "src": "156:7:0" + } + ], + "id": 6, + "name": "VariableDeclaration", + "src": "156:15:0" + } + ], + "id": 7, + "name": "StructDefinition", + "src": "108:70:0" + }, + { + "attributes": { + "canonicalName": "X2Y2TestHelper.Pair1155", + "name": "Pair1155", + "scope": 109, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "token", + "scope": 14, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8, + "name": "ElementaryTypeName", + "src": "210:7:0" + } + ], + "id": 9, + "name": "VariableDeclaration", + "src": "210:13:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "tokenId", + "scope": 14, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10, + "name": "ElementaryTypeName", + "src": "233:7:0" + } + ], + "id": 11, + "name": "VariableDeclaration", + "src": "233:15:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "amount", + "scope": 14, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 12, + "name": "ElementaryTypeName", + "src": "258:7:0" + } + ], + "id": 13, + "name": "VariableDeclaration", + "src": "258:14:0" + } + ], + "id": 14, + "name": "StructDefinition", + "src": "184:95:0" + }, + { + "attributes": { + "canonicalName": "X2Y2TestHelper.OrderItem", + "name": "OrderItem", + "scope": 109, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "price", + "scope": 19, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 15, + "name": "ElementaryTypeName", + "src": "312:7:0" + } + ], + "id": 16, + "name": "VariableDeclaration", + "src": "312:13:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 19, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 17, + "name": "ElementaryTypeName", + "src": "335:5:0" + } + ], + "id": 18, + "name": "VariableDeclaration", + "src": "335:10:0" + } + ], + "id": 19, + "name": "StructDefinition", + "src": "285:67:0" + }, + { + "attributes": { + "canonicalName": "X2Y2TestHelper.Order", + "name": "Order", + "scope": 109, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "salt", + "scope": 47, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 20, + "name": "ElementaryTypeName", + "src": "381:7:0" + } + ], + "id": 21, + "name": "VariableDeclaration", + "src": "381:12:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "user", + "scope": 47, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 22, + "name": "ElementaryTypeName", + "src": "403:7:0" + } + ], + "id": 23, + "name": "VariableDeclaration", + "src": "403:12:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "network", + "scope": 47, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 24, + "name": "ElementaryTypeName", + "src": "425:7:0" + } + ], + "id": 25, + "name": "VariableDeclaration", + "src": "425:15:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "intent", + "scope": 47, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 26, + "name": "ElementaryTypeName", + "src": "450:7:0" + } + ], + "id": 27, + "name": "VariableDeclaration", + "src": "450:14:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "delegateType", + "scope": 47, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 28, + "name": "ElementaryTypeName", + "src": "474:7:0" + } + ], + "id": 29, + "name": "VariableDeclaration", + "src": "474:20:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "deadline", + "scope": 47, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 30, + "name": "ElementaryTypeName", + "src": "504:7:0" + } + ], + "id": 31, + "name": "VariableDeclaration", + "src": "504:16:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "currency", + "scope": 47, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 32, + "name": "ElementaryTypeName", + "src": "530:7:0" + } + ], + "id": 33, + "name": "VariableDeclaration", + "src": "530:16:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "dataMask", + "scope": 47, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 34, + "name": "ElementaryTypeName", + "src": "556:5:0" + } + ], + "id": 35, + "name": "VariableDeclaration", + "src": "556:14:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "items", + "scope": 47, + "stateVariable": false, + "storageLocation": "default", + "type": "struct X2Y2TestHelper.OrderItem[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "struct X2Y2TestHelper.OrderItem[]" + }, + "children": [ + { + "attributes": { + "name": "OrderItem", + "referencedDeclaration": 19, + "type": "struct X2Y2TestHelper.OrderItem" + }, + "id": 36, + "name": "UserDefinedTypeName", + "src": "580:9:0" + } + ], + "id": 37, + "name": "ArrayTypeName", + "src": "580:11:0" + } + ], + "id": 38, + "name": "VariableDeclaration", + "src": "580:17:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "r", + "scope": 47, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes32", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes32", + "type": "bytes32" + }, + "id": 39, + "name": "ElementaryTypeName", + "src": "628:7:0" + } + ], + "id": 40, + "name": "VariableDeclaration", + "src": "628:9:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "s", + "scope": 47, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes32", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes32", + "type": "bytes32" + }, + "id": 41, + "name": "ElementaryTypeName", + "src": "647:7:0" + } + ], + "id": 42, + "name": "VariableDeclaration", + "src": "647:9:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "v", + "scope": 47, + "stateVariable": false, + "storageLocation": "default", + "type": "uint8", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint8", + "type": "uint8" + }, + "id": 43, + "name": "ElementaryTypeName", + "src": "666:5:0" + } + ], + "id": 44, + "name": "VariableDeclaration", + "src": "666:7:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "signVersion", + "scope": 47, + "stateVariable": false, + "storageLocation": "default", + "type": "uint8", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint8", + "type": "uint8" + }, + "id": 45, + "name": "ElementaryTypeName", + "src": "683:5:0" + } + ], + "id": 46, + "name": "VariableDeclaration", + "src": "683:17:0" + } + ], + "id": 47, + "name": "StructDefinition", + "src": "358:349:0" + }, + { + "attributes": { + "functionSelector": "32b2f295", + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "encodeData", + "scope": 109, + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 61, + "stateVariable": false, + "storageLocation": "calldata", + "type": "struct X2Y2TestHelper.Pair721[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "struct X2Y2TestHelper.Pair721[]" + }, + "children": [ + { + "attributes": { + "name": "Pair721", + "referencedDeclaration": 7, + "type": "struct X2Y2TestHelper.Pair721" + }, + "id": 48, + "name": "UserDefinedTypeName", + "src": "734:7:0" + } + ], + "id": 49, + "name": "ArrayTypeName", + "src": "734:9:0" + } + ], + "id": 50, + "name": "VariableDeclaration", + "src": "734:23:0" + } + ], + "id": 51, + "name": "ParameterList", + "src": "733:25:0" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 61, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 52, + "name": "ElementaryTypeName", + "src": "781:5:0" + } + ], + "id": 53, + "name": "VariableDeclaration", + "src": "781:12:0" + } + ], + "id": 54, + "name": "ParameterList", + "src": "780:14:0" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 54 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_struct$_Pair721_$7_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct X2Y2TestHelper.Pair721 calldata[] calldata" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "encode", + "type": "function () pure returns (bytes memory)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 55, + "name": "Identifier", + "src": "811:3:0" + } + ], + "id": 56, + "name": "MemberAccess", + "src": "811:10:0" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 50, + "type": "struct X2Y2TestHelper.Pair721 calldata[] calldata", + "value": "data" + }, + "id": 57, + "name": "Identifier", + "src": "822:4:0" + } + ], + "id": 58, + "name": "FunctionCall", + "src": "811:16:0" + } + ], + "id": 59, + "name": "Return", + "src": "804:23:0" + } + ], + "id": 60, + "name": "Block", + "src": "794:40:0" + } + ], + "id": 61, + "name": "FunctionDefinition", + "src": "714:120:0" + }, + { + "attributes": { + "functionSelector": "558cbeab", + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "encodeData1155", + "scope": 109, + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 75, + "stateVariable": false, + "storageLocation": "calldata", + "type": "struct X2Y2TestHelper.Pair1155[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "struct X2Y2TestHelper.Pair1155[]" + }, + "children": [ + { + "attributes": { + "name": "Pair1155", + "referencedDeclaration": 14, + "type": "struct X2Y2TestHelper.Pair1155" + }, + "id": 62, + "name": "UserDefinedTypeName", + "src": "864:8:0" + } + ], + "id": 63, + "name": "ArrayTypeName", + "src": "864:10:0" + } + ], + "id": 64, + "name": "VariableDeclaration", + "src": "864:24:0" + } + ], + "id": 65, + "name": "ParameterList", + "src": "863:26:0" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 75, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 66, + "name": "ElementaryTypeName", + "src": "912:5:0" + } + ], + "id": 67, + "name": "VariableDeclaration", + "src": "912:12:0" + } + ], + "id": 68, + "name": "ParameterList", + "src": "911:14:0" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 68 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$14_calldata_ptr_$dyn_calldata_ptr", + "typeString": "struct X2Y2TestHelper.Pair1155 calldata[] calldata" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "encode", + "type": "function () pure returns (bytes memory)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 69, + "name": "Identifier", + "src": "942:3:0" + } + ], + "id": 70, + "name": "MemberAccess", + "src": "942:10:0" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 64, + "type": "struct X2Y2TestHelper.Pair1155 calldata[] calldata", + "value": "data" + }, + "id": 71, + "name": "Identifier", + "src": "953:4:0" + } + ], + "id": 72, + "name": "FunctionCall", + "src": "942:16:0" + } + ], + "id": 73, + "name": "Return", + "src": "935:23:0" + } + ], + "id": 74, + "name": "Block", + "src": "925:40:0" + } + ], + "id": 75, + "name": "FunctionDefinition", + "src": "840:125:0" + }, + { + "attributes": { + "functionSelector": "d7892e2e", + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "hashItem", + "scope": 109, + "stateMutability": "pure", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "order", + "scope": 108, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct X2Y2TestHelper.Order", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Order", + "referencedDeclaration": 47, + "type": "struct X2Y2TestHelper.Order" + }, + "id": 76, + "name": "UserDefinedTypeName", + "src": "989:5:0" + } + ], + "id": 77, + "name": "VariableDeclaration", + "src": "989:18:0" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "item", + "scope": 108, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct X2Y2TestHelper.OrderItem", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "OrderItem", + "referencedDeclaration": 19, + "type": "struct X2Y2TestHelper.OrderItem" + }, + "id": 78, + "name": "UserDefinedTypeName", + "src": "1009:9:0" + } + ], + "id": 79, + "name": "VariableDeclaration", + "src": "1009:21:0" + } + ], + "id": 80, + "name": "ParameterList", + "src": "988:43:0" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 108, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes32", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes32", + "type": "bytes32" + }, + "id": 81, + "name": "ElementaryTypeName", + "src": "1079:7:0" + } + ], + "id": 82, + "name": "VariableDeclaration", + "src": "1079:7:0" + } + ], + "id": 83, + "name": "ParameterList", + "src": "1078:9:0" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 83 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes32", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967288, + "type": "function (bytes memory) pure returns (bytes32)", + "value": "keccak256" + }, + "id": 84, + "name": "Identifier", + "src": "1121:9:0" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bytes memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_struct$_OrderItem_$19_memory_ptr", + "typeString": "struct X2Y2TestHelper.OrderItem memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "encode", + "type": "function () pure returns (bytes memory)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 85, + "name": "Identifier", + "src": "1148:3:0" + } + ], + "id": 86, + "name": "MemberAccess", + "src": "1148:10:0" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "salt", + "referencedDeclaration": 21, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 77, + "type": "struct X2Y2TestHelper.Order memory", + "value": "order" + }, + "id": 87, + "name": "Identifier", + "src": "1180:5:0" + } + ], + "id": 88, + "name": "MemberAccess", + "src": "1180:10:0" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "user", + "referencedDeclaration": 23, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 77, + "type": "struct X2Y2TestHelper.Order memory", + "value": "order" + }, + "id": 89, + "name": "Identifier", + "src": "1212:5:0" + } + ], + "id": 90, + "name": "MemberAccess", + "src": "1212:10:0" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "network", + "referencedDeclaration": 25, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 77, + "type": "struct X2Y2TestHelper.Order memory", + "value": "order" + }, + "id": 91, + "name": "Identifier", + "src": "1244:5:0" + } + ], + "id": 92, + "name": "MemberAccess", + "src": "1244:13:0" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "intent", + "referencedDeclaration": 27, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 77, + "type": "struct X2Y2TestHelper.Order memory", + "value": "order" + }, + "id": 93, + "name": "Identifier", + "src": "1279:5:0" + } + ], + "id": 94, + "name": "MemberAccess", + "src": "1279:12:0" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "delegateType", + "referencedDeclaration": 29, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 77, + "type": "struct X2Y2TestHelper.Order memory", + "value": "order" + }, + "id": 95, + "name": "Identifier", + "src": "1313:5:0" + } + ], + "id": 96, + "name": "MemberAccess", + "src": "1313:18:0" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "deadline", + "referencedDeclaration": 31, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 77, + "type": "struct X2Y2TestHelper.Order memory", + "value": "order" + }, + "id": 97, + "name": "Identifier", + "src": "1353:5:0" + } + ], + "id": 98, + "name": "MemberAccess", + "src": "1353:14:0" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "currency", + "referencedDeclaration": 33, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 77, + "type": "struct X2Y2TestHelper.Order memory", + "value": "order" + }, + "id": 99, + "name": "Identifier", + "src": "1389:5:0" + } + ], + "id": 100, + "name": "MemberAccess", + "src": "1389:14:0" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "dataMask", + "referencedDeclaration": 35, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 77, + "type": "struct X2Y2TestHelper.Order memory", + "value": "order" + }, + "id": 101, + "name": "Identifier", + "src": "1425:5:0" + } + ], + "id": 102, + "name": "MemberAccess", + "src": "1425:14:0" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 79, + "type": "struct X2Y2TestHelper.OrderItem memory", + "value": "item" + }, + "id": 103, + "name": "Identifier", + "src": "1461:4:0" + } + ], + "id": 104, + "name": "FunctionCall", + "src": "1148:335:0" + } + ], + "id": 105, + "name": "FunctionCall", + "src": "1121:376:0" + } + ], + "id": 106, + "name": "Return", + "src": "1102:395:0" + } + ], + "id": 107, + "name": "Block", + "src": "1092:412:0" + } + ], + "id": 108, + "name": "FunctionDefinition", + "src": "971:533:0" + } + ], + "id": 109, + "name": "ContractDefinition", + "src": "77:1435:0" + } + ], + "id": 110, + "name": "SourceUnit", + "src": "33:1480:0" + }, + "compiler": { + "name": "solc", + "version": "0.7.6+commit.7338295f.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "3.4.16", + "updatedAt": "2024-07-10T16:25:10.943Z", + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } +} \ No newline at end of file diff --git a/projects/gas-usage-tests/test/marketplaces.test.js b/projects/gas-usage-tests/test/marketplaces.test.js index 40ae52cd5..b9459b5ef 100644 --- a/projects/gas-usage-tests/test/marketplaces.test.js +++ b/projects/gas-usage-tests/test/marketplaces.test.js @@ -359,8 +359,8 @@ contract("Test gas usage for marketplaces", accounts => { await token.mint(seller, tokenId) await token.setApprovalForAll(transferProxy.address, true, {from: seller}) - let encDataLeft = await encDataV3_BUY([ 0, await LibPartToUint(protocol, protocolFeeBP), 0, MARKET_MARKER_BUY ]); - let encDataRight = await encDataV3_SELL([ 0, await LibPartToUint(), 0, 1000, MARKET_MARKER_SELL ]); + let encDataLeft = await encDataV3([[], [], true]); + let encDataRight = await encDataV3([[], [], false]); const right = Order(seller, Asset(ERC721, enc( token.address, tokenId), 1), zeroAddress, Asset(ETH, "0x", price), 1, 0, 0, ORDER_DATA_V3, encDataRight); @@ -439,12 +439,21 @@ contract("Test gas usage for marketplaces", accounts => { await token.mint(seller, tokenId) await token.setApprovalForAll(transferProxy.address, true, {from: seller}) - await erc20.mint(buyer, price) - await erc20.approve(erc20TransferProxy.address, price, {from: buyer}) - assert.equal(await erc20.balanceOf(buyer), price, "erc20 deposit") - - let encDataLeft = await encDataV3_BUY([ 0, await LibPartToUint(protocol, protocolFeeBP), 0, MARKET_MARKER_BUY]); - let encDataRight = await encDataV3_SELL([ 0, await LibPartToUint(), 0, 1000, MARKET_MARKER_SELL]); + const erc20Fees = price * protocolFeeBP / 10000; + await erc20.mint(buyer, price + erc20Fees) + await erc20.approve(erc20TransferProxy.address, price + erc20Fees, {from: buyer}) + assert.equal(await erc20.balanceOf(buyer), price + erc20Fees, "erc20 deposit") + + let encDataLeft = await encDataV3([ + [], + [{ + account: protocol, + value: protocolFeeBP + }], + true + ]); + let encDataRight = await encDataV3([[], [], false + ]); const left = Order(buyer, Asset(ERC20, enc(erc20.address), price), zeroAddress, Asset(ERC721, enc( token.address, tokenId), 1), 1, 0, 0, ORDER_DATA_V3, encDataLeft); @@ -475,7 +484,7 @@ contract("Test gas usage for marketplaces", accounts => { assert.equal(await token.ownerOf(tokenId), buyer, "buyer has token1"); assert.equal(await erc20.balanceOf(buyer), 0, "erc20 buyer"); assert.equal(await erc20.balanceOf(protocol), 30, "protocol") - assert.equal(await erc20.balanceOf(seller), 970, "seller") + assert.equal(await erc20.balanceOf(seller), 1000, "seller") const tokenid1 = "1235112312" @@ -483,9 +492,10 @@ contract("Test gas usage for marketplaces", accounts => { await token.mint(seller, tokenid1) await token.setApprovalForAll(transferProxy.address, true, {from: seller}) - await erc20.mint(buyer, price) - await erc20.approve(erc20TransferProxy.address, price, {from: buyer}) - assert.equal(await erc20.balanceOf(buyer), price, "erc20 deposit") + const erc20Fees1 = price * protocolFeeBP / 10000; + await erc20.mint(buyer, price + erc20Fees1) + await erc20.approve(erc20TransferProxy.address, price + erc20Fees1, {from: buyer}) + assert.equal(await erc20.balanceOf(buyer), price + erc20Fees1, "erc20 deposit") const left1 = Order(buyer, Asset(ERC20, enc(erc20.address), price), zeroAddress, Asset(ERC721, enc( token.address, tokenid1), 1), 2, 0, 0, ORDER_DATA_V3, encDataLeft); @@ -518,7 +528,7 @@ contract("Test gas usage for marketplaces", accounts => { assert.equal(await token.ownerOf(tokenid1), buyer, "buyer has token1"); assert.equal(await erc20.balanceOf(buyer), 0, "erc20 buyer"); assert.equal(await erc20.balanceOf(protocol), 60, "protocol") - assert.equal(await erc20.balanceOf(seller), 1940, "seller") + assert.equal(await erc20.balanceOf(seller), 2000, "seller") }) it("OLD rarible ETH", async () => { @@ -1511,12 +1521,8 @@ it("blur V2 ETH", async () => { return testHelper.encodeV2(tuple); } - function encDataV3_BUY(tuple) { - return testHelper.encodeV3_BUY(tuple); - } - - function encDataV3_SELL(tuple) { - return testHelper.encodeV3_SELL(tuple); + function encDataV3(tuple) { + return testHelper.encodeV3(tuple); } async function LibPartToUint(account = zeroAddress, value = 0) { diff --git a/projects/gas-usage-tests/test/rarible.test.js b/projects/gas-usage-tests/test/rarible.test.js index 2e24e6093..5b802d257 100644 --- a/projects/gas-usage-tests/test/rarible.test.js +++ b/projects/gas-usage-tests/test/rarible.test.js @@ -76,7 +76,7 @@ contract("rarible only gas usage tests", accounts => { it("NEW + OLD: cancel()", async () => { const token = await TestERC721.new("Rarible", "RARI"); - let encDataRight = await encDataV3_SELL([await LibPartToUint(seller, 10000), await LibPartToUint(), 0, 1000, MARKET_MARKER_SELL]); + let encDataRight = await encDataV3([[{account: seller, value: 10000}], [], true]); const right = Order(seller, Asset(ERC721, enc(token.address, tokenId1), 1), zeroAddress, Asset(ETH, "0x", 1000), 1, 0, 0, ORDER_DATA_V3, encDataRight); @@ -94,11 +94,10 @@ contract("rarible only gas usage tests", accounts => { await token.mint(seller, tokenId1) await token.setApprovalForAll(transferProxy.address, true, { from: seller }) - let addrOriginLeft = await LibPartToUint(origin1, 300); - let addrOriginRight = await LibPartToUint(origin1, 300); + let encDataLeft = await encDataV3([[], [{account: origin1, value: 300}], true]); + let encDataRight = await encDataV3([[], [{account: origin1, value: 300}], false]); - let encDataLeft = await encDataV3_SELL([0, addrOriginRight, 0, 1000, MARKET_MARKER_SELL]); - let encDataRight = await encDataV3_BUY([0, addrOriginLeft, 0, MARKET_MARKER_BUY]); + const buyerFees = price * 300 / 10000; const _nftSellAssetData = enc(token.address, tokenId1); const _nftPurchaseAssetData = "0x"; @@ -127,12 +126,12 @@ contract("rarible only gas usage tests", accounts => { }; console.log("RARIBLE NEW: direct buy ETH <=> ERC721 ROYALTIES = SELLER"); - await verifyBalanceChangeReturnTx(web3, buyer, 1000, async () => + await verifyBalanceChangeReturnTx(web3, buyer, 1030, async () => verifyBalanceChangeReturnTx(web3, protocol, 0, async () => verifyBalanceChangeReturnTx(web3, origin1, -60, async () => verifyBalanceChangeReturnTx(web3, additionalRoyalties, 0, async () => - verifyBalanceChangeReturnTx(web3, seller, -940, async () => - exchangeV2.directPurchase(directPurchaseParams, { from: buyer, value: price}) + verifyBalanceChangeReturnTx(web3, seller, -970, async () => + exchangeV2.directPurchase(directPurchaseParams, { from: buyer, value: price + buyerFees}) ) ) ) @@ -147,11 +146,10 @@ contract("rarible only gas usage tests", accounts => { await token.mint(seller, tokenId1) await token.setApprovalForAll(transferProxy.address, true, { from: seller }) - let addrOriginLeft = await LibPartToUint(origin1, 300); - let addrOriginRight = await LibPartToUint(origin1, 300); + let encDataLeft = await encDataV3([[], [{account: origin1, value: 300}], true]); + let encDataRight = await encDataV3([[], [{account: origin1, value: 300}], false]); - let encDataLeft = await encDataV3_SELL([0, addrOriginRight, 0, 1000, MARKET_MARKER_SELL]); - let encDataRight = await encDataV3_BUY([0, addrOriginLeft, 0, MARKET_MARKER_BUY]); + const buyerFees = price * 300 / 10000; const _nftSellAssetData = enc(token.address, tokenId1); const _nftPurchaseAssetData = "0x"; @@ -181,12 +179,12 @@ contract("rarible only gas usage tests", accounts => { }; console.log("RARIBLE NEW: direct buy ETH <=> ERC721 ROYALTIES != SELLER:"); - await verifyBalanceChangeReturnTx(web3, buyer, 1000, async () => + await verifyBalanceChangeReturnTx(web3, buyer, 1030, async () => verifyBalanceChangeReturnTx(web3, protocol, 0, async () => verifyBalanceChangeReturnTx(web3, origin1, -60, async () => verifyBalanceChangeReturnTx(web3, additionalRoyalties, -100, async () => - verifyBalanceChangeReturnTx(web3, seller, -840, async () => - exchangeV2.directPurchase(directPurchaseParams, { from: buyer, value: price}) + verifyBalanceChangeReturnTx(web3, seller, -870, async () => + exchangeV2.directPurchase(directPurchaseParams, { from: buyer, value: price + buyerFees}) ) ) ) @@ -201,11 +199,10 @@ contract("rarible only gas usage tests", accounts => { await token.mint(seller, tokenId1) await token.setApprovalForAll(transferProxy.address, true, { from: seller }) - let addrOriginLeft = await LibPartToUint(origin1, 300); - let addrOriginRight = await LibPartToUint(origin1, 300); + let encDataLeft = await encDataV3([[], [{account: origin1, value: 300}], true]); + let encDataRight = await encDataV3([[], [{account: origin1, value: 300}], false]); - let encDataLeft = await encDataV3_SELL([0, addrOriginRight, 0, 1000, MARKET_MARKER_SELL]); - let encDataRight = await encDataV3_BUY([0, addrOriginLeft, 0, MARKET_MARKER_BUY]); + const buyerFees = price * 300 / 10000; const left = Order(seller, Asset(ERC721, enc(token.address, tokenId1), 1), zeroAddress, Asset(ETH, "0x", price), salt, 0, 0, ORDER_DATA_V3, encDataLeft); const right = Order(buyer, Asset(ETH, "0x", price), zeroAddress, Asset(ERC721, enc(token.address, tokenId1), 1), 0, 0, 0, ORDER_DATA_V3, encDataRight); @@ -215,12 +212,12 @@ contract("rarible only gas usage tests", accounts => { const signature = await getSignature(exchangeV2, left, seller); console.log("RARIBLE NEW: matchOrders ETH <=> ERC721 ROYALTIES != SELLER:"); - await verifyBalanceChangeReturnTx(web3, buyer, 1000, async () => + await verifyBalanceChangeReturnTx(web3, buyer, 1030, async () => verifyBalanceChangeReturnTx(web3, protocol, 0, async () => verifyBalanceChangeReturnTx(web3, origin1, -60, async () => verifyBalanceChangeReturnTx(web3, additionalRoyalties, -100, async () => - verifyBalanceChangeReturnTx(web3, seller, -840, async () => - exchangeV2.matchOrders(left, signature, right, "0x", { from: buyer, value: price}) + verifyBalanceChangeReturnTx(web3, seller, -870, async () => + exchangeV2.matchOrders(left, signature, right, "0x", { from: buyer, value: price + buyerFees}) ) ) ) @@ -262,18 +259,17 @@ contract("rarible only gas usage tests", accounts => { const token = await TestERC721.new("Rarible", "RARI"); const erc20 = await TestERC20.new(); const nftAmount = 1; - await erc20.mint(buyer, price) - await erc20.approve(erc20TransferProxy.address, price, { from: buyer }) - assert.equal(await erc20.balanceOf(buyer), price, "erc20 deposit") + + const buyerFees = price * 300 / 10000; + await erc20.mint(buyer, price + buyerFees) + await erc20.approve(erc20TransferProxy.address, price + buyerFees, { from: buyer }) + assert.equal(await erc20.balanceOf(buyer), price + buyerFees, "erc20 deposit") await token.mint(seller, tokenId1) await token.setApprovalForAll(transferProxy.address, true, { from: seller }) - let addrOriginLeft = await LibPartToUint(origin1, 300); - let addrOriginRight = await LibPartToUint(origin1, 300); - - let encDataRight = await encDataV3_SELL([0, addrOriginRight, 0, 1000, MARKET_MARKER_SELL]); - let encDataLeft = await encDataV3_BUY([0, addrOriginLeft, 0, MARKET_MARKER_BUY]); + let encDataLeft = await encDataV3([[], [{account: origin1, value: 300}], true]); + let encDataRight = await encDataV3([[], [{account: origin1, value: 300}], false]); const _nftAssetData = enc(token.address, tokenId1); const _paymentAssetData = enc(erc20.address); @@ -310,25 +306,24 @@ contract("rarible only gas usage tests", accounts => { assert.equal(await erc20.balanceOf(buyer), 0, "erc20 buyer"); assert.equal(await erc20.balanceOf(protocol), 0, "erc20 buyer"); assert.equal(await erc20.balanceOf(origin1), 60, "origin") - assert.equal(await erc20.balanceOf(seller), 940, "seller") + assert.equal(await erc20.balanceOf(seller), 970, "seller") }) it("RARIBLE NEW: ERC-20 ROYALTIES != SELLER", async () => { const token = await TestERC721.new("Rarible", "RARI"); const erc20 = await TestERC20.new(); const nftAmount = 1; - await erc20.mint(buyer, price) - await erc20.approve(erc20TransferProxy.address, price, { from: buyer }) - assert.equal(await erc20.balanceOf(buyer), price, "erc20 deposit") + + const buyerFees = price * 300 / 10000; + await erc20.mint(buyer, price + buyerFees) + await erc20.approve(erc20TransferProxy.address, price + buyerFees, { from: buyer }) + assert.equal(await erc20.balanceOf(buyer), price + buyerFees, "erc20 deposit") await token.mint(seller, tokenId1) await token.setApprovalForAll(transferProxy.address, true, { from: seller }) - let addrOriginLeft = await LibPartToUint(origin1, 300); - let addrOriginRight = await LibPartToUint(origin1, 300); - - let encDataLeft = await encDataV3_BUY([0, addrOriginLeft, 0, MARKET_MARKER_BUY]); - let encDataRight = await encDataV3_SELL([0, addrOriginRight, 0, 1000, MARKET_MARKER_SELL]); + let encDataLeft = await encDataV3([[], [{account: origin1, value: 300}], true]); + let encDataRight = await encDataV3([[], [{account: origin1, value: 300}], false]); const _nftAssetData = enc(token.address, tokenId1); const _paymentAssetData = enc(erc20.address); @@ -366,7 +361,7 @@ contract("rarible only gas usage tests", accounts => { assert.equal(await erc20.balanceOf(protocol), 0, "erc20 buyer"); assert.equal(await erc20.balanceOf(origin1), 60, "origin") assert.equal(await erc20.balanceOf(additionalRoyalties), 100, "origin") - assert.equal(await erc20.balanceOf(seller), 840, "seller") + assert.equal(await erc20.balanceOf(seller), 870, "seller") }) it("RARIBLE OLD: ERC-20 ROYALTIES = SELLER", async () => { @@ -403,12 +398,8 @@ contract("rarible only gas usage tests", accounts => { return testHelper.encodeV2(tuple); } - function encDataV3_BUY(tuple) { - return testHelper.encodeV3_BUY(tuple); - } - - function encDataV3_SELL(tuple) { - return testHelper.encodeV3_SELL(tuple); + function encDataV3(tuple) { + return testHelper.encodeV3(tuple); } async function LibPartToUint(account = zeroAddress, value = 0) { @@ -420,3 +411,5 @@ contract("rarible only gas usage tests", accounts => { } }); + + diff --git a/projects/hardhat-deploy/test/exchange/ExchangeV2.test.js b/projects/hardhat-deploy/test/exchange/ExchangeV2.test.js index d5a75563a..88f910d07 100644 --- a/projects/hardhat-deploy/test/exchange/ExchangeV2.test.js +++ b/projects/hardhat-deploy/test/exchange/ExchangeV2.test.js @@ -1671,7 +1671,7 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { }) describe("other", () => { - it("protocol fee should work correctly with V2 orders", async () => { + it("protocol fee should work correctly with V3 orders", async () => { await exchangeV2.setAllProtocolFeeData(protocol, 0, 500) const fee = (await exchangeV2.protocolFee()) @@ -1689,12 +1689,12 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { let addrOriginLeft = [[accounts[6], 300]]; let addrOriginRight = [[accounts[5], 300]]; - let encDataLeft = await encDataV2([[], addrOriginLeft, true]); - let encDataRight = await encDataV2([[], addrOriginRight, false]); + let encDataLeft = await encDataV3([[], addrOriginLeft, true]); + let encDataRight = await encDataV3([[], addrOriginRight, false]); const _nftSellAssetData = enc(erc721.address, erc721TokenId1); const _nftPurchaseAssetData = "0x"; - const left = Order(makerLeft, Asset(ERC721, _nftSellAssetData, nftAmount), ZERO, Asset(ETH, _nftPurchaseAssetData, _priceSell), salt, 0, 0, ORDER_DATA_V2, encDataLeft); + const left = Order(makerLeft, Asset(ERC721, _nftSellAssetData, nftAmount), ZERO, Asset(ETH, _nftPurchaseAssetData, _priceSell), salt, 0, 0, ORDER_DATA_V3, encDataLeft); const signature = await getSignature(left, makerLeft); const directPurchaseParams = { @@ -1707,7 +1707,7 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { sellOrderSalt: salt, sellOrderStart: 0, sellOrderEnd: 0, - sellOrderDataType: ORDER_DATA_V2, + sellOrderDataType: ORDER_DATA_V3, sellOrderData: encDataLeft, sellOrderSignature: signature, buyOrderPaymentAmount: _pricePurchase, @@ -1734,7 +1734,7 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { assert.equal(await erc721.balanceOf(makerRight), 1); }) - it("protocol fee should work correctly with V2 orders", async () => { + it("protocol fee should work correctly with V3 orders", async () => { await exchangeV2.setAllProtocolFeeData(protocol, 400, 500) let fee = (await exchangeV2.protocolFee()) @@ -1747,10 +1747,10 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { const nftAmount = 1 const erc721 = await prepareERC721(makerLeft, erc721TokenId1, [[accounts[7], 100]]); //with royalties - let encDataLeft = await encDataV2([[], [[accounts[6], 300]], true]); - let encDataRight = await encDataV2([[], [[accounts[5], 300]], false]); + let encDataLeft = await encDataV3([[], [[accounts[6], 300]], true]); + let encDataRight = await encDataV3([[], [[accounts[5], 300]], false]); - const left = Order(makerLeft, Asset(ERC721, enc(erc721.address, erc721TokenId1), nftAmount), ZERO, Asset(ETH, "0x", _priceSell), salt, 0, 0, ORDER_DATA_V2, encDataLeft); + const left = Order(makerLeft, Asset(ERC721, enc(erc721.address, erc721TokenId1), nftAmount), ZERO, Asset(ETH, "0x", _priceSell), salt, 0, 0, ORDER_DATA_V3, encDataLeft); const signature = await getSignature(left, makerLeft); const _nftSellAssetData = enc(erc721.address, erc721TokenId1); @@ -1765,7 +1765,7 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { sellOrderSalt: salt, sellOrderStart: 0, sellOrderEnd: 0, - sellOrderDataType: ORDER_DATA_V2, + sellOrderDataType: ORDER_DATA_V3, sellOrderData: encDataLeft, sellOrderSignature: signature, buyOrderPaymentAmount: _pricePurchase, @@ -1871,6 +1871,10 @@ contract("ExchangeV2, sellerFee + buyerFee = 6%,", accounts => { return helper.encodeV2(tuple); } + function encDataV3(tuple) { + return helper.encodeV3(tuple); + } + async function LibPartToUint(account = zeroAddress, value = 0) { return await helper.encodeOriginFeeIntoUint(account, value); } diff --git a/projects/interfaces/package.json b/projects/interfaces/package.json index 1e5adefd1..e4eb18199 100644 --- a/projects/interfaces/package.json +++ b/projects/interfaces/package.json @@ -32,6 +32,7 @@ "access": "public" }, "scripts": { + "test": "pwd", "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck" }, "gitHead": "42b09a59ac1d3e7f1449e8492668943eabdb4106" diff --git a/projects/lazy-mint/package.json b/projects/lazy-mint/package.json index 88cf4a289..a1fac856c 100644 --- a/projects/lazy-mint/package.json +++ b/projects/lazy-mint/package.json @@ -35,6 +35,7 @@ "access": "public" }, "scripts": { + "test": "truffle test", "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck" }, "gitHead": "42b09a59ac1d3e7f1449e8492668943eabdb4106" diff --git a/projects/lib-asset/package.json b/projects/lib-asset/package.json index cdfee6147..9d7933640 100644 --- a/projects/lib-asset/package.json +++ b/projects/lib-asset/package.json @@ -26,6 +26,7 @@ "access": "public" }, "scripts": { + "test": "pwd", "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck" }, "gitHead": "9830dc5f40a9cb462b8a46097d4e452e456e3b41", diff --git a/projects/lib-bp/package.json b/projects/lib-bp/package.json index 5ac477222..3899695de 100644 --- a/projects/lib-bp/package.json +++ b/projects/lib-bp/package.json @@ -26,6 +26,7 @@ "access": "public" }, "scripts": { + "test": "pwd", "build": "truffle compile --all" }, "gitHead": "9830dc5f40a9cb462b8a46097d4e452e456e3b41", diff --git a/projects/lib-part/package.json b/projects/lib-part/package.json index 7b0e637e2..9b3297ab8 100644 --- a/projects/lib-part/package.json +++ b/projects/lib-part/package.json @@ -26,6 +26,7 @@ "access": "public" }, "scripts": { + "test": "pwd", "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck" }, "gitHead": "9830dc5f40a9cb462b8a46097d4e452e456e3b41", diff --git a/projects/lib-signature/package.json b/projects/lib-signature/package.json index 57864d8d5..7c67bda68 100644 --- a/projects/lib-signature/package.json +++ b/projects/lib-signature/package.json @@ -26,6 +26,7 @@ "access": "public" }, "scripts": { + "test": "pwd", "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck" }, "gitHead": "9830dc5f40a9cb462b8a46097d4e452e456e3b41", diff --git a/projects/meta-tx/.openzeppelin/unknown-1337.json b/projects/meta-tx/.openzeppelin/unknown-1337.json index 87807dda4..6a278da91 100644 --- a/projects/meta-tx/.openzeppelin/unknown-1337.json +++ b/projects/meta-tx/.openzeppelin/unknown-1337.json @@ -2,20 +2,21 @@ "manifestVersion": "3.2", "admin": { "address": "0xF12b5dd4EAD5F743C6BaA640B0216200e89B60Da", - "txHash": "0x2e745eeddfb1d3fccb7b5149766ddf85c5230fe2950876d10c0f64c2a6e1bc2c" + "txHash": "0x2bcd1d410e1016f99cead35eee6189504fc85eaa1ceb11e585eb39828d0b41d5" }, "proxies": [ { "address": "0x345cA3e014Aaf5dcA488057592ee47305D9B3e10", - "txHash": "0xd8a5ee96852e18f80e36313d2a9a0b32970cb49f25a83e1d34ee9db236b51a4f", + "txHash": "0x8d94921013269d5cd01f21e6da6060b6c6b36a8988574ffcbcb400d87bc0c4eb", "kind": "transparent" } ], "impls": { "553f2766b45e7bea26de5bc1bacc6c686b8b2f81daf1bad50b3b05c763d1fcc4": { "address": "0x8CdaF0CD259887258Bc13a92C0a6dA92698644C0", - "txHash": "0x84a52fd8e8a8a24bcfa8eb4aff19f0eea430d391a789b7564662e53dbfdf35ec", + "txHash": "0xe316dab8f822bb39f7585f229f83c58e5d1b5b1e61497657420d55409a48482c", "layout": { + "solcVersion": "0.7.6", "storage": [ { "contract": "Initializable", @@ -67,7 +68,8 @@ "t_bool": { "label": "bool" } - } + }, + "namespaces": {} } } } diff --git a/projects/meta-tx/package.json b/projects/meta-tx/package.json index 1b7ff4066..066216a14 100644 --- a/projects/meta-tx/package.json +++ b/projects/meta-tx/package.json @@ -40,6 +40,7 @@ "access": "public" }, "scripts": { + "test": "pwd", "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck" }, "gitHead": "c149f3e740650a91e0764245230dbddc8f8f423e" diff --git a/projects/role-operator/package.json b/projects/role-operator/package.json index 8ca29e1b8..9cb1e6d2f 100644 --- a/projects/role-operator/package.json +++ b/projects/role-operator/package.json @@ -26,6 +26,7 @@ "access": "public" }, "scripts": { + "test": "pwd", "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck" }, "gitHead": "9830dc5f40a9cb462b8a46097d4e452e456e3b41", diff --git a/projects/royalties-upgradeable/package.json b/projects/royalties-upgradeable/package.json index 0119827ce..38eede533 100644 --- a/projects/royalties-upgradeable/package.json +++ b/projects/royalties-upgradeable/package.json @@ -32,6 +32,7 @@ "access": "public" }, "scripts": { + "test": "pwd", "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck" }, "gitHead": "42b09a59ac1d3e7f1449e8492668943eabdb4106" diff --git a/projects/royalties/package.json b/projects/royalties/package.json index ec01dfb12..362b73bc6 100644 --- a/projects/royalties/package.json +++ b/projects/royalties/package.json @@ -28,6 +28,7 @@ "truffle-plugin-verify": "^0.6.5" }, "scripts": { + "test": "pwd", "build": "truffle compile --all && typechain --target ethers-v5 'build/contracts/*.json' && tsc -skipLibCheck" }, "publishConfig": { diff --git a/projects/royalties/test/ierc2981.test.js b/projects/royalties/test/ierc2981.test.js index 812b6fa3d..12a25da92 100644 --- a/projects/royalties/test/ierc2981.test.js +++ b/projects/royalties/test/ierc2981.test.js @@ -1,14 +1,16 @@ const Impl = artifacts.require("Royalties2981TestImpl.sol"); const Test = artifacts.require("Royalties2981Test.sol"); -contract("royalties 2981 ", accounts => { +contract("royalties 2981 ", (accounts) => { let impl; let testing; beforeEach(async () => { impl = await Impl.new(); + /* 1000 base point = 10% */ + await impl.setRoyalties(1000); testing = await Test.new(impl.address); - }) + }); it("simple impl works", async () => { const amount = 100; @@ -16,12 +18,15 @@ contract("royalties 2981 ", accounts => { const tokenId = getRoyalties + "b00000000000000000000001"; const result = await impl.royaltyInfo(tokenId, amount); + + const royaltiesBasePoint = await impl.royaltiesBasePoint(); + assert.equal(royaltiesBasePoint, 1000); assert.equal(result[0], getRoyalties); assert.equal(result[1], 10); const tx = await testing.royaltyInfoTest(tokenId, amount); console.log("used gas", tx.receipt.gasUsed); - }) + }); it("calculateRoyalties check", async () => { const getterRoyalties = accounts[1]; @@ -29,5 +34,5 @@ contract("royalties 2981 ", accounts => { assert.equal(result.length, 1); assert.equal(result[0][0], getterRoyalties); assert.equal(result[0][1], 1500); - }) -}) \ No newline at end of file + }); +}); diff --git a/projects/thridweb-query/contracts/drop-reader/DropERC721Reader.sol b/projects/thridweb-query/contracts/drop-reader/DropERC721Reader.sol index 814f15781..535218448 100644 --- a/projects/thridweb-query/contracts/drop-reader/DropERC721Reader.sol +++ b/projects/thridweb-query/contracts/drop-reader/DropERC721Reader.sol @@ -23,9 +23,15 @@ import "./IDropERC721.sol"; contract DropERC721Reader is Initializable, OwnableUpgradeable { + enum FeeType { + Bps, + Flat + } + struct FeeData { address recipient; - uint256 bps; + uint256 value; + FeeType feeType; } struct GlobalData { @@ -97,21 +103,48 @@ contract DropERC721Reader is Initializable, OwnableUpgradeable { _globalData.totalMinted = drop.totalMinted(); _globalData.claimedByUser = _claimedByUser; _globalData.totalSupply = drop.totalSupply(); - _globalData.maxTotalSupply = drop.maxTotalSupply(); + try drop.maxTotalSupply() returns (uint maxTotalSupply) { + _globalData.maxTotalSupply = maxTotalSupply; + } catch { + _globalData.maxTotalSupply = 0; + } _globalData.nextTokenIdToMint = drop.nextTokenIdToMint(); _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim(); _globalData.name = drop.name(); _globalData.symbol = drop.symbol(); _globalData.contractURI = drop.contractURI(); - _globalData.baseURICount = drop.getBaseURICount(); + try drop.getBaseURICount() returns (uint baseURICount) { + _globalData.baseURICount = baseURICount; + } catch { + _globalData.baseURICount = 0; + } + _globalData.blockTimeStamp = block.timestamp; + (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo(); _globalData.defaultRoyaltyInfo.recipient = rAddress; - _globalData.defaultRoyaltyInfo.bps = rBps; + _globalData.defaultRoyaltyInfo.value = rBps; + _globalData.defaultRoyaltyInfo.feeType = FeeType.Bps; + + IDropERC721.PlatformFeeType feeType = IDropERC721.PlatformFeeType.Bps; + try drop.getPlatformFeeType() returns (IDropERC721.PlatformFeeType resultFeeType) { + feeType = resultFeeType; + } catch { + feeType = IDropERC721.PlatformFeeType.Bps; + } + + if (feeType == IDropERC721.PlatformFeeType.Flat) { + (address pAddress, uint256 pValue) = drop.getFlatPlatformFeeInfo(); + _globalData.platformFeeInfo.recipient = pAddress; + _globalData.platformFeeInfo.value = pValue; + _globalData.platformFeeInfo.feeType = FeeType.Flat; + } else { + (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo(); + _globalData.platformFeeInfo.recipient = pAddress; + _globalData.platformFeeInfo.value = pBps; + _globalData.platformFeeInfo.feeType = FeeType.Bps; + } - (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo(); - _globalData.platformFeeInfo.recipient = pAddress; - _globalData.platformFeeInfo.bps = pBps; return (activeClaimConditionIndex, conditions, _globalData); } } \ No newline at end of file diff --git a/projects/thridweb-query/contracts/drop-reader/IDropERC721.sol b/projects/thridweb-query/contracts/drop-reader/IDropERC721.sol index 20c97c0e6..9080829c5 100644 --- a/projects/thridweb-query/contracts/drop-reader/IDropERC721.sol +++ b/projects/thridweb-query/contracts/drop-reader/IDropERC721.sol @@ -2,6 +2,19 @@ pragma solidity ^0.8.0; interface IDropERC721 { + /** + * @param proof Proof of concerned wallet's inclusion in an allowlist. + * @param quantityLimitPerWallet The total quantity of tokens the allowlisted wallet is eligible to claim over time. + * @param pricePerToken The price per token the allowlisted wallet must pay to claim tokens. + * @param currency The currency in which the allowlisted wallet must pay the price for claiming tokens. + */ + struct AllowlistProof { + bytes32[] proof; + uint256 quantityLimitPerWallet; + uint256 pricePerToken; + address currency; + } + // This struct describes a single claim condition struct ClaimCondition { uint256 startTimestamp; @@ -19,6 +32,7 @@ interface IDropERC721 { ClaimCondition[] claimConditions, bool resetEligibility ); + event TokensClaimed( uint256 indexed claimConditionIndex, address indexed claimer, @@ -27,6 +41,12 @@ interface IDropERC721 { uint256 quantityClaimed ); + // Enums + enum PlatformFeeType { + Bps, + Flat + } + // View functions for global data function totalMinted() external view returns (uint256); function totalSupply() external view returns (uint256); @@ -38,11 +58,21 @@ interface IDropERC721 { function contractURI() external view returns (string memory); function getBaseURICount() external view returns (uint256); function getDefaultRoyaltyInfo() external view returns (address, uint16); + function getPlatformFeeType() external view returns (PlatformFeeType); function getPlatformFeeInfo() external view returns (address, uint16); + function getFlatPlatformFeeInfo() external view returns (address, uint256); // Specific claim condition methods function claimCondition() external view returns (uint256 currentStartId, uint256 count); function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition); function getActiveClaimConditionId() external view returns (uint256); function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256); + function verifyClaim( + uint256 _conditionId, + address _claimer, + uint256 _quantity, + address _currency, + uint256 _pricePerToken, + AllowlistProof calldata _allowlistProof + ) external view returns (bool isOverride); } diff --git a/projects/thridweb-query/deployments/polygon/.chainId b/projects/thridweb-query/deployments/polygon/.chainId new file mode 100644 index 000000000..0973804c4 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon/.chainId @@ -0,0 +1 @@ +137 \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon/DefaultProxyAdmin.json b/projects/thridweb-query/deployments/polygon/DefaultProxyAdmin.json new file mode 100644 index 000000000..39d091c86 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon/DefaultProxyAdmin.json @@ -0,0 +1,274 @@ +{ + "address": "0xe0967461cc7436EE94EC07acB07d0423828ea117", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0x9461a9d1b890c94e8571ed3a669336f8caa6505bc3d9a0e9b31b6ddd49b6701f", + "receipt": { + "to": null, + "from": "0x7E31749358659c627F7f74dD0305A0Bd84c980da", + "contractAddress": "0xe0967461cc7436EE94EC07acB07d0423828ea117", + "transactionIndex": 24, + "gasUsed": "644163", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000008000000000000000000000000000000000000002000000000001000000800001000000000000000110000000000000000000020000000000000000000800000090000000000080000400000000400000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000020000000001000000000000000000000000000000100000000020000000100000080000000000000000000000000000000000000000000000100000", + "blockHash": "0x5c28069a01f2e2c554593fdbb2a9a5088c4961d197bae0db7844cdede6ef38b5", + "transactionHash": "0x9461a9d1b890c94e8571ed3a669336f8caa6505bc3d9a0e9b31b6ddd49b6701f", + "logs": [ + { + "transactionIndex": 24, + "blockNumber": 59270538, + "transactionHash": "0x9461a9d1b890c94e8571ed3a669336f8caa6505bc3d9a0e9b31b6ddd49b6701f", + "address": "0xe0967461cc7436EE94EC07acB07d0423828ea117", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000007e31749358659c627f7f74dd0305a0bd84c980da" + ], + "data": "0x", + "logIndex": 98, + "blockHash": "0x5c28069a01f2e2c554593fdbb2a9a5088c4961d197bae0db7844cdede6ef38b5" + }, + { + "transactionIndex": 24, + "blockNumber": 59270538, + "transactionHash": "0x9461a9d1b890c94e8571ed3a669336f8caa6505bc3d9a0e9b31b6ddd49b6701f", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000007e31749358659c627f7f74dd0305a0bd84c980da", + "0x00000000000000000000000002f70172f7f490653665c9bfac0666147c8af1f5" + ], + "data": "0x00000000000000000000000000000000000000000000000000501933b7e1d398000000000000000000000000000000000000000000000001089d638e995bce570000000000000000000000000000000000000000000001a2aef8d6be47fd663a000000000000000000000000000000000000000000000001084d4a5ae179fabf0000000000000000000000000000000000000000000001a2af48eff1ffdf39d2", + "logIndex": 99, + "blockHash": "0x5c28069a01f2e2c554593fdbb2a9a5088c4961d197bae0db7844cdede6ef38b5" + } + ], + "blockNumber": 59270538, + "cumulativeGasUsed": "5072845", + "status": 1, + "byzantium": true + }, + "args": [ + "0x7E31749358659c627F7f74dD0305A0Bd84c980da" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon/DropERC721Reader.json b/projects/thridweb-query/deployments/polygon/DropERC721Reader.json new file mode 100644 index 000000000..a919c5e2e --- /dev/null +++ b/projects/thridweb-query/deployments/polygon/DropERC721Reader.json @@ -0,0 +1,587 @@ +{ + "address": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "enum DropERC721Reader.FeeType", + "name": "feeType", + "type": "uint8" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "enum DropERC721Reader.FeeType", + "name": "feeType", + "type": "uint8" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "receipt": { + "to": null, + "from": "0x7E31749358659c627F7f74dD0305A0Bd84c980da", + "contractAddress": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "transactionIndex": 44, + "gasUsed": "797894", + "logsBloom": "0x00000000000000000000000000000000402000000000000000800000000000000000000000000000000000000000000000008000000000000000004000000000000000000000000000000000000002800001000000000000000100000000000800000000020000000000000000000800000080800000000080000400240000400000000000000000000000000000000000000000000080000200000000800000200000000000000000000000000400000000000020000000000000000000004000000020000000000021000000040000000000000400000000100000000060000000100000000000000000000000000000000000000000000000000000100000", + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed", + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "logs": [ + { + "transactionIndex": 44, + "blockNumber": 59270558, + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "address": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000e55ff93f578b164b852aeacdb38e37621cc13a6a" + ], + "data": "0x", + "logIndex": 331, + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed" + }, + { + "transactionIndex": 44, + "blockNumber": 59270558, + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "address": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000007e31749358659c627f7f74dd0305a0bd84c980da" + ], + "data": "0x", + "logIndex": 332, + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed" + }, + { + "transactionIndex": 44, + "blockNumber": 59270558, + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "address": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000007e31749358659c627f7f74dd0305a0bd84c980da", + "0x0000000000000000000000007e31749358659c627f7f74dd0305a0bd84c980da" + ], + "data": "0x", + "logIndex": 333, + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed" + }, + { + "transactionIndex": 44, + "blockNumber": 59270558, + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "address": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 334, + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed" + }, + { + "transactionIndex": 44, + "blockNumber": 59270558, + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "address": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0967461cc7436ee94ec07acb07d0423828ea117", + "logIndex": 335, + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed" + }, + { + "transactionIndex": 44, + "blockNumber": 59270558, + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000007e31749358659c627f7f74dd0305a0bd84c980da", + "0x00000000000000000000000009385a960a2e0b6b4516d341534da92cb2a50085" + ], + "data": "0x000000000000000000000000000000000000000000000000005d8b8b923a714a00000000000000000000000000000000000000000000000107b402d7babdebac00000000000000000000000000000000000000000000030889492b8f45f89d8b0000000000000000000000000000000000000000000000010756774c28837a6200000000000000000000000000000000000000000000030889a6b71ad8330ed5", + "logIndex": 336, + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed" + } + ], + "blockNumber": 59270558, + "cumulativeGasUsed": "8767761", + "status": 1, + "byzantium": true + }, + "args": [ + "0xE55fF93F578b164B852AEAcdb38e37621Cc13A6a", + "0xe0967461cc7436EE94EC07acB07d0423828ea117", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000007e31749358659c627f7f74dd0305a0bd84c980da" + ], + "numDeployments": 4, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "implementation": "0x0aB946e69eb86fF3A1c7225572268Bb0B3281475", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon/DropERC721Reader_Implementation.json b/projects/thridweb-query/deployments/polygon/DropERC721Reader_Implementation.json new file mode 100644 index 000000000..b7485d340 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon/DropERC721Reader_Implementation.json @@ -0,0 +1,453 @@ +{ + "address": "0x0aB946e69eb86fF3A1c7225572268Bb0B3281475", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "enum DropERC721Reader.FeeType", + "name": "feeType", + "type": "uint8" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "enum DropERC721Reader.FeeType", + "name": "feeType", + "type": "uint8" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x09c079881eb11dbd88df6ea2e490b2e6c5e7547903fc14b0376d176315f98c95", + "receipt": { + "to": null, + "from": "0x7E31749358659c627F7f74dD0305A0Bd84c980da", + "contractAddress": "0x0aB946e69eb86fF3A1c7225572268Bb0B3281475", + "transactionIndex": 54, + "gasUsed": "1236134", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000080000000000080000400000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000800000000000000001000000008000000000000000000000100000000000000000120000000000000000000000000000000000000000000000000000100000", + "blockHash": "0x0e8de194df587aef2c41baf57d47d46f15158438c5add212a1ae4c941eec693f", + "transactionHash": "0x09c079881eb11dbd88df6ea2e490b2e6c5e7547903fc14b0376d176315f98c95", + "logs": [ + { + "transactionIndex": 54, + "blockNumber": 59271458, + "transactionHash": "0x09c079881eb11dbd88df6ea2e490b2e6c5e7547903fc14b0376d176315f98c95", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000007e31749358659c627f7f74dd0305a0bd84c980da", + "0x00000000000000000000000067b94473d81d0cd00849d563c94d0432ac988b49" + ], + "data": "0x000000000000000000000000000000000000000000000000008510ff35553a00000000000000000000000000000000000000000000000001061a83fb24f847ee000000000000000000000000000000000000000000000bc09cf3426dd95afae1000000000000000000000000000000000000000000000001059572fbefa30dee000000000000000000000000000000000000000000000bc09d78536d0eb034e1", + "logIndex": 195, + "blockHash": "0x0e8de194df587aef2c41baf57d47d46f15158438c5add212a1ae4c941eec693f" + } + ], + "blockNumber": 59271458, + "cumulativeGasUsed": "8094627", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 4, + "solcInputHash": "e91e428fad7f11da8f23baddfcf53d1d", + "metadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dropERC721\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"}],\"name\":\"getAllData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeClaimConditionIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxClaimableSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyClaimed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantityLimitPerWallet\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"pricePerToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"struct IDropERC721.ClaimCondition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalMinted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedByUser\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToClaim\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"baseURICount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockTimeStamp\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"enum DropERC721Reader.FeeType\",\"name\":\"feeType\",\"type\":\"uint8\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"defaultRoyaltyInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"enum DropERC721Reader.FeeType\",\"name\":\"feeType\",\"type\":\"uint8\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"platformFeeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct DropERC721Reader.GlobalData\",\"name\":\"globalData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_native1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_native2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/drop-reader/DropERC721Reader.sol\":\"DropERC721Reader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\\n * initialization step. This is essential to configure modules that are added through upgrades and that require\\n * initialization.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC20 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/20\\n */\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address who) external view returns (uint256);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n function transferFrom(\\n address from,\\n address to,\\n uint256 value\\n ) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5bdd9dd97ba7d9d7c9a2953db287e4d9d7fa93a27a96bc2e72a8da4919b6f7ff\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/DropERC721Reader.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.11;\\n\\n/// @author rarible\\n\\n// /$$$$$$$ /$$ /$$ /$$\\n// | $$__ $$ |__/| $$ | $$\\n// | $$ \\\\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\\n// | $$__ $$ /$$$$$$$| $$ \\\\__/| $$| $$ \\\\ $$| $$| $$$$$$$$\\n// | $$ \\\\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\\n// |__/ |__/ \\\\_______/|__/ |__/|_______/ |__/ \\\\_______/\\n\\n\\n// ========== Features ==========\\n\\nimport \\\"hardhat/console.sol\\\";\\nimport \\\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./IDropERC721.sol\\\";\\n\\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\\n\\n enum FeeType {\\n Bps,\\n Flat\\n }\\n\\n struct FeeData {\\n address recipient;\\n uint256 value;\\n FeeType feeType;\\n }\\n\\n struct GlobalData {\\n uint256 totalMinted;\\n uint256 claimedByUser;\\n uint256 totalSupply;\\n uint256 maxTotalSupply;\\n uint256 nextTokenIdToMint;\\n uint256 nextTokenIdToClaim;\\n string name;\\n string symbol;\\n string contractURI;\\n uint256 baseURICount;\\n uint256 userBalance;\\n uint256 blockTimeStamp;\\n FeeData defaultRoyaltyInfo;\\n FeeData platformFeeInfo;\\n }\\n\\n address public native1;\\n address public native2;\\n\\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\\n __Ownable_init();\\n native1 = _native1;\\n native2 = _native2;\\n // Transfer ownership to the initial owner provided\\n _transferOwnership(initialOwner);\\n }\\n\\n function getAllData(\\n address _dropERC721,\\n address _claimer\\n ) public view returns (\\n uint256 activeClaimConditionIndex,\\n IDropERC721.ClaimCondition[] memory conditions,\\n GlobalData memory globalData\\n ) {\\n IDropERC721 drop = IDropERC721(_dropERC721);\\n\\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\\n uint256 _claimedByUser = 0;\\n if(stopConditionIndex != 0) {\\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\\n activeClaimConditionIndex = _activeClaimConditionIndex;\\n } catch {\\n activeClaimConditionIndex = 0;\\n }\\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\\n \\n for (uint i = 0; i < stopConditionIndex; i++) {\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\\n conditions[i] = condition;\\n }\\n }\\n\\n DropERC721Reader.GlobalData memory _globalData;\\n if(stopConditionIndex > 0) {\\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\\n if(condition.currency == native1 || condition.currency == native2) {\\n _globalData.userBalance = _claimer.balance;\\n } else {\\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\\n }\\n\\n }\\n\\n _globalData.totalMinted = drop.totalMinted();\\n _globalData.claimedByUser = _claimedByUser;\\n _globalData.totalSupply = drop.totalSupply();\\n try drop.maxTotalSupply() returns (uint maxTotalSupply) {\\n _globalData.maxTotalSupply = maxTotalSupply;\\n } catch {\\n _globalData.maxTotalSupply = 0;\\n } \\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\\n _globalData.name = drop.name();\\n _globalData.symbol = drop.symbol();\\n _globalData.contractURI = drop.contractURI();\\n try drop.getBaseURICount() returns (uint baseURICount) {\\n _globalData.baseURICount = baseURICount;\\n } catch {\\n _globalData.baseURICount = 0;\\n }\\n \\n _globalData.blockTimeStamp = block.timestamp;\\n\\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\\n _globalData.defaultRoyaltyInfo.value = rBps;\\n _globalData.defaultRoyaltyInfo.feeType = FeeType.Bps;\\n\\n IDropERC721.PlatformFeeType feeType = IDropERC721.PlatformFeeType.Bps;\\n try drop.getPlatformFeeType() returns (IDropERC721.PlatformFeeType resultFeeType) {\\n feeType = resultFeeType;\\n } catch {\\n feeType = IDropERC721.PlatformFeeType.Bps;\\n }\\n \\n if (feeType == IDropERC721.PlatformFeeType.Flat) {\\n (address pAddress, uint256 pValue) = drop.getFlatPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.value = pValue;\\n _globalData.platformFeeInfo.feeType = FeeType.Flat;\\n } else {\\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.value = pBps;\\n _globalData.platformFeeInfo.feeType = FeeType.Bps;\\n }\\n\\n return (activeClaimConditionIndex, conditions, _globalData);\\n }\\n}\",\"keccak256\":\"0xe93497de83b411e5b2e3ee00eb8afb82f56477ae70870fa1a70f7f642223fb16\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/IDropERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDropERC721 {\\n /**\\n * @param proof Proof of concerned wallet's inclusion in an allowlist.\\n * @param quantityLimitPerWallet The total quantity of tokens the allowlisted wallet is eligible to claim over time.\\n * @param pricePerToken The price per token the allowlisted wallet must pay to claim tokens.\\n * @param currency The currency in which the allowlisted wallet must pay the price for claiming tokens.\\n */\\n struct AllowlistProof {\\n bytes32[] proof;\\n uint256 quantityLimitPerWallet;\\n uint256 pricePerToken;\\n address currency;\\n }\\n\\n // This struct describes a single claim condition\\n struct ClaimCondition {\\n uint256 startTimestamp;\\n uint256 maxClaimableSupply;\\n uint256 supplyClaimed;\\n uint256 quantityLimitPerWallet;\\n bytes32 merkleRoot;\\n uint256 pricePerToken;\\n address currency;\\n string metadata;\\n }\\n\\n // Events\\n event ClaimConditionsUpdated(\\n ClaimCondition[] claimConditions,\\n bool resetEligibility\\n );\\n\\n event TokensClaimed(\\n uint256 indexed claimConditionIndex,\\n address indexed claimer,\\n address indexed receiver,\\n uint256 startTokenId,\\n uint256 quantityClaimed\\n );\\n\\n // Enums\\n enum PlatformFeeType {\\n Bps,\\n Flat\\n }\\n\\n // View functions for global data\\n function totalMinted() external view returns (uint256);\\n function totalSupply() external view returns (uint256);\\n function maxTotalSupply() external view returns (uint256);\\n function nextTokenIdToMint() external view returns (uint256);\\n function nextTokenIdToClaim() external view returns (uint256);\\n function name() external view returns (string memory);\\n function symbol() external view returns (string memory);\\n function contractURI() external view returns (string memory);\\n function getBaseURICount() external view returns (uint256);\\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\\n function getPlatformFeeType() external view returns (PlatformFeeType);\\n function getPlatformFeeInfo() external view returns (address, uint16);\\n function getFlatPlatformFeeInfo() external view returns (address, uint256);\\n\\n // Specific claim condition methods\\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\\n function getActiveClaimConditionId() external view returns (uint256);\\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\\n function verifyClaim(\\n uint256 _conditionId,\\n address _claimer,\\n uint256 _quantity,\\n address _currency,\\n uint256 _pricePerToken,\\n AllowlistProof calldata _allowlistProof\\n ) external view returns (bool isOverride);\\n}\\n\",\"keccak256\":\"0x600949e7a3959bc074f0dd43a557b896c764c0cd8c693d0cc4b752aa21e1c609\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50611566806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610f02565b61013c565b6040516100b3939291906110ce565b60665461009f906001600160a01b031681565b61008a6101103660046111a5565b610b70565b61008a6101233660046111f0565b610cc2565b610130610d3b565b61013a6000610d95565b565b60006060610148610e41565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b19190611214565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f1916820190925261021691810190611238565b60015b6102265760009650610229565b96505b8167ffffffffffffffff81111561024257610242611251565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103459190810190611329565b90508088838151811061035a5761035a6113e4565b6020026020010181905250508080610371906113fa565b9150506102cd565b505b610383610e41565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa9190611238565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d9190810190611329565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e9190611238565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105999190611238565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106089190611238565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561066b575060408051601f3d908101601f1916820190925261066891810190611238565b60015b61067b5760006060820152610681565b60608201525b846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e39190611238565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e9190611238565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610795573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107bd9190810190611423565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082b9190810190611423565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa158015610871573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108999190810190611423565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108fc575060408051601f3d908101601f191682019092526108f991810190611238565b60015b61090d576000610120820152610914565b6101208201525b4281610160018181525050600080866001600160a01b031663b24f2d396040518163ffffffff1660e01b81526004016040805180830381865afa15801561095f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109839190611460565b610180850180516001600160a01b0384169052805161ffff831660209091015251919350915060009060400181815250506000876001600160a01b031663f28083c36040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a10575060408051601f3d908101601f19168201909252610a0d91810190611496565b60015b610a1c57506000610a1f565b90505b6001816001811115610a3357610a33610f93565b1415610aca57600080896001600160a01b031663e57553da6040518163ffffffff1660e01b81526004016040805180830381865afa158015610a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9d91906114b7565b6101a0880180516001600160a01b039390931690925281516020015251600160409091015250610b5f9050565b600080896001600160a01b031663d45573f66040518163ffffffff1660e01b81526004016040805180830381865afa158015610b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e9190611460565b6101a0880180516001600160a01b0393909316909252815161ffff9190911660209091015251600060409091015250505b509196505050505050509250925092565b600054610100900460ff1615808015610b905750600054600160ff909116105b80610baa5750303b158015610baa575060005460ff166001145b610c125760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610c35576000805461ff0019166101001790555b610c3d610de7565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610c7682610d95565b8015610cbc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610cca610d3b565b6001600160a01b038116610d2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c09565b610d3881610d95565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c09565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610e0e5760405162461bcd60e51b8152600401610c09906114e5565b61013a600054610100900460ff16610e385760405162461bcd60e51b8152600401610c09906114e5565b61013a33610d95565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610ec260408051606081018252600080825260208201819052909182015290565b8152602001610ee860408051606081018252600080825260208201819052909182015290565b905290565b6001600160a01b0381168114610d3857600080fd5b60008060408385031215610f1557600080fd5b8235610f2081610eed565b91506020830135610f3081610eed565b809150509250929050565b60005b83811015610f56578181015183820152602001610f3e565b83811115610cbc5750506000910152565b60008151808452610f7f816020860160208601610f3b565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b80516001600160a01b0316825260208082015190830152604081015160028110610fe357634e487b7160e01b600052602160045260246000fd5b806040840152505050565b6000610240825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c086015261104082860182610f67565b91505060e083015184820360e086015261105a8282610f67565b91505061010080840151858303828701526110758382610f67565b92505050610120808401518186015250610140808401518186015250610160808401518186015250610180808401516110b082870182610fa9565b50506101a08301516110c66101e0860182610fa9565b509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561118257898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061116e81860183610f67565b9688019694505050908501906001016110fc565b50508781036040890152611196818a610fee565b9b9a5050505050505050505050565b6000806000606084860312156111ba57600080fd5b83356111c581610eed565b925060208401356111d581610eed565b915060408401356111e581610eed565b809150509250925092565b60006020828403121561120257600080fd5b813561120d81610eed565b9392505050565b6000806040838503121561122757600080fd5b505080516020909101519092909150565b60006020828403121561124a57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561128b5761128b611251565b60405290565b805161129c81610eed565b919050565b600082601f8301126112b257600080fd5b815167ffffffffffffffff808211156112cd576112cd611251565b604051601f8301601f19908116603f011681019082821181831017156112f5576112f5611251565b8160405283815286602085880101111561130e57600080fd5b61131f846020830160208901610f3b565b9695505050505050565b60006020828403121561133b57600080fd5b815167ffffffffffffffff8082111561135357600080fd5b90830190610100828603121561136857600080fd5b611370611267565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201526113b260c08401611291565b60c082015260e0830151828111156113c957600080fd5b6113d5878286016112a1565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561141c57634e487b7160e01b600052601160045260246000fd5b5060010190565b60006020828403121561143557600080fd5b815167ffffffffffffffff81111561144c57600080fd5b611458848285016112a1565b949350505050565b6000806040838503121561147357600080fd5b825161147e81610eed565b602084015190925061ffff81168114610f3057600080fd5b6000602082840312156114a857600080fd5b81516002811061120d57600080fd5b600080604083850312156114ca57600080fd5b82516114d581610eed565b6020939093015192949293505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220baf1a28dbc8835916a123c5acd33cdba3b66e67ce684e05283155d8de27348da64736f6c634300080c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610f02565b61013c565b6040516100b3939291906110ce565b60665461009f906001600160a01b031681565b61008a6101103660046111a5565b610b70565b61008a6101233660046111f0565b610cc2565b610130610d3b565b61013a6000610d95565b565b60006060610148610e41565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b19190611214565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f1916820190925261021691810190611238565b60015b6102265760009650610229565b96505b8167ffffffffffffffff81111561024257610242611251565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103459190810190611329565b90508088838151811061035a5761035a6113e4565b6020026020010181905250508080610371906113fa565b9150506102cd565b505b610383610e41565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa9190611238565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d9190810190611329565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e9190611238565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105999190611238565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106089190611238565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561066b575060408051601f3d908101601f1916820190925261066891810190611238565b60015b61067b5760006060820152610681565b60608201525b846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e39190611238565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e9190611238565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610795573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107bd9190810190611423565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082b9190810190611423565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa158015610871573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108999190810190611423565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108fc575060408051601f3d908101601f191682019092526108f991810190611238565b60015b61090d576000610120820152610914565b6101208201525b4281610160018181525050600080866001600160a01b031663b24f2d396040518163ffffffff1660e01b81526004016040805180830381865afa15801561095f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109839190611460565b610180850180516001600160a01b0384169052805161ffff831660209091015251919350915060009060400181815250506000876001600160a01b031663f28083c36040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a10575060408051601f3d908101601f19168201909252610a0d91810190611496565b60015b610a1c57506000610a1f565b90505b6001816001811115610a3357610a33610f93565b1415610aca57600080896001600160a01b031663e57553da6040518163ffffffff1660e01b81526004016040805180830381865afa158015610a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9d91906114b7565b6101a0880180516001600160a01b039390931690925281516020015251600160409091015250610b5f9050565b600080896001600160a01b031663d45573f66040518163ffffffff1660e01b81526004016040805180830381865afa158015610b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e9190611460565b6101a0880180516001600160a01b0393909316909252815161ffff9190911660209091015251600060409091015250505b509196505050505050509250925092565b600054610100900460ff1615808015610b905750600054600160ff909116105b80610baa5750303b158015610baa575060005460ff166001145b610c125760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610c35576000805461ff0019166101001790555b610c3d610de7565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610c7682610d95565b8015610cbc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610cca610d3b565b6001600160a01b038116610d2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c09565b610d3881610d95565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c09565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610e0e5760405162461bcd60e51b8152600401610c09906114e5565b61013a600054610100900460ff16610e385760405162461bcd60e51b8152600401610c09906114e5565b61013a33610d95565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610ec260408051606081018252600080825260208201819052909182015290565b8152602001610ee860408051606081018252600080825260208201819052909182015290565b905290565b6001600160a01b0381168114610d3857600080fd5b60008060408385031215610f1557600080fd5b8235610f2081610eed565b91506020830135610f3081610eed565b809150509250929050565b60005b83811015610f56578181015183820152602001610f3e565b83811115610cbc5750506000910152565b60008151808452610f7f816020860160208601610f3b565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b80516001600160a01b0316825260208082015190830152604081015160028110610fe357634e487b7160e01b600052602160045260246000fd5b806040840152505050565b6000610240825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c086015261104082860182610f67565b91505060e083015184820360e086015261105a8282610f67565b91505061010080840151858303828701526110758382610f67565b92505050610120808401518186015250610140808401518186015250610160808401518186015250610180808401516110b082870182610fa9565b50506101a08301516110c66101e0860182610fa9565b509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561118257898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061116e81860183610f67565b9688019694505050908501906001016110fc565b50508781036040890152611196818a610fee565b9b9a5050505050505050505050565b6000806000606084860312156111ba57600080fd5b83356111c581610eed565b925060208401356111d581610eed565b915060408401356111e581610eed565b809150509250925092565b60006020828403121561120257600080fd5b813561120d81610eed565b9392505050565b6000806040838503121561122757600080fd5b505080516020909101519092909150565b60006020828403121561124a57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561128b5761128b611251565b60405290565b805161129c81610eed565b919050565b600082601f8301126112b257600080fd5b815167ffffffffffffffff808211156112cd576112cd611251565b604051601f8301601f19908116603f011681019082821181831017156112f5576112f5611251565b8160405283815286602085880101111561130e57600080fd5b61131f846020830160208901610f3b565b9695505050505050565b60006020828403121561133b57600080fd5b815167ffffffffffffffff8082111561135357600080fd5b90830190610100828603121561136857600080fd5b611370611267565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201526113b260c08401611291565b60c082015260e0830151828111156113c957600080fd5b6113d5878286016112a1565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561141c57634e487b7160e01b600052601160045260246000fd5b5060010190565b60006020828403121561143557600080fd5b815167ffffffffffffffff81111561144c57600080fd5b611458848285016112a1565b949350505050565b6000806040838503121561147357600080fd5b825161147e81610eed565b602084015190925061ffff81168114610f3057600080fd5b6000602082840312156114a857600080fd5b81516002811061120d57600080fd5b600080604083850312156114ca57600080fd5b82516114d581610eed565b6020939093015192949293505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220baf1a28dbc8835916a123c5acd33cdba3b66e67ce684e05283155d8de27348da64736f6c634300080c0033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 138, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 141, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 566, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 130, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 691, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native1", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 693, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native2", + "offset": 0, + "slot": "102", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon/DropERC721Reader_Proxy.json b/projects/thridweb-query/deployments/polygon/DropERC721Reader_Proxy.json new file mode 100644 index 000000000..ceb33ab9a --- /dev/null +++ b/projects/thridweb-query/deployments/polygon/DropERC721Reader_Proxy.json @@ -0,0 +1,290 @@ +{ + "address": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "receipt": { + "to": null, + "from": "0x7E31749358659c627F7f74dD0305A0Bd84c980da", + "contractAddress": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "transactionIndex": 44, + "gasUsed": "797894", + "logsBloom": "0x00000000000000000000000000000000402000000000000000800000000000000000000000000000000000000000000000008000000000000000004000000000000000000000000000000000000002800001000000000000000100000000000800000000020000000000000000000800000080800000000080000400240000400000000000000000000000000000000000000000000080000200000000800000200000000000000000000000000400000000000020000000000000000000004000000020000000000021000000040000000000000400000000100000000060000000100000000000000000000000000000000000000000000000000000100000", + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed", + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "logs": [ + { + "transactionIndex": 44, + "blockNumber": 59270558, + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "address": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000e55ff93f578b164b852aeacdb38e37621cc13a6a" + ], + "data": "0x", + "logIndex": 331, + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed" + }, + { + "transactionIndex": 44, + "blockNumber": 59270558, + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "address": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000007e31749358659c627f7f74dd0305a0bd84c980da" + ], + "data": "0x", + "logIndex": 332, + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed" + }, + { + "transactionIndex": 44, + "blockNumber": 59270558, + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "address": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000007e31749358659c627f7f74dd0305a0bd84c980da", + "0x0000000000000000000000007e31749358659c627f7f74dd0305a0bd84c980da" + ], + "data": "0x", + "logIndex": 333, + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed" + }, + { + "transactionIndex": 44, + "blockNumber": 59270558, + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "address": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 334, + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed" + }, + { + "transactionIndex": 44, + "blockNumber": 59270558, + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "address": "0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0967461cc7436ee94ec07acb07d0423828ea117", + "logIndex": 335, + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed" + }, + { + "transactionIndex": 44, + "blockNumber": 59270558, + "transactionHash": "0x13e80594545d2bf650336e77bedf4f6bace4c65a84123bd467f7b2764bc3cec8", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000007e31749358659c627f7f74dd0305a0bd84c980da", + "0x00000000000000000000000009385a960a2e0b6b4516d341534da92cb2a50085" + ], + "data": "0x000000000000000000000000000000000000000000000000005d8b8b923a714a00000000000000000000000000000000000000000000000107b402d7babdebac00000000000000000000000000000000000000000000030889492b8f45f89d8b0000000000000000000000000000000000000000000000010756774c28837a6200000000000000000000000000000000000000000000030889a6b71ad8330ed5", + "logIndex": 336, + "blockHash": "0x8d781d58585b44681ff8ceaf92e6e13f50ad73afebf9d4fe56f6d64293c787ed" + } + ], + "blockNumber": 59270558, + "cumulativeGasUsed": "8767761", + "status": 1, + "byzantium": true + }, + "args": [ + "0xE55fF93F578b164B852AEAcdb38e37621Cc13A6a", + "0xe0967461cc7436EE94EC07acB07d0423828ea117", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000007e31749358659c627f7f74dd0305a0bd84c980da" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon/solcInputs/3894b9afc8c8d533af64a475c5c264fb.json b/projects/thridweb-query/deployments/polygon/solcInputs/3894b9afc8c8d533af64a475c5c264fb.json new file mode 100644 index 000000000..8be89e0f2 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon/solcInputs/3894b9afc8c8d533af64a475c5c264fb.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n enum FeeType {\n Bps,\n Flat\n }\n\n struct FeeData {\n address recipient;\n uint256 value;\n FeeType feeType;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n _globalData.maxTotalSupply = drop.maxTotalSupply();\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n _globalData.baseURICount = drop.getBaseURICount();\n _globalData.blockTimeStamp = block.timestamp;\n\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.value = rBps;\n _globalData.defaultRoyaltyInfo.feeType = FeeType.Bps;\n\n IDropERC721.PlatformFeeType feeType = IDropERC721.PlatformFeeType.Bps;\n try drop.getPlatformFeeType() returns (IDropERC721.PlatformFeeType resultFeeType) {\n feeType = resultFeeType;\n } catch {\n feeType = IDropERC721.PlatformFeeType.Bps;\n }\n \n if (feeType == IDropERC721.PlatformFeeType.Flat) {\n (address pAddress, uint256 pValue) = drop.getFlatPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.value = pValue;\n _globalData.platformFeeInfo.feeType = FeeType.Flat;\n } else {\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.value = pBps;\n _globalData.platformFeeInfo.feeType = FeeType.Bps;\n }\n\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n /**\n * @param proof Proof of concerned wallet's inclusion in an allowlist.\n * @param quantityLimitPerWallet The total quantity of tokens the allowlisted wallet is eligible to claim over time.\n * @param pricePerToken The price per token the allowlisted wallet must pay to claim tokens.\n * @param currency The currency in which the allowlisted wallet must pay the price for claiming tokens.\n */\n struct AllowlistProof {\n bytes32[] proof;\n uint256 quantityLimitPerWallet;\n uint256 pricePerToken;\n address currency;\n }\n\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // Enums\n enum PlatformFeeType {\n Bps,\n Flat\n }\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeType() external view returns (PlatformFeeType);\n function getPlatformFeeInfo() external view returns (address, uint16);\n function getFlatPlatformFeeInfo() external view returns (address, uint256);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n function verifyClaim(\n uint256 _conditionId,\n address _claimer,\n uint256 _quantity,\n address _currency,\n uint256 _pricePerToken,\n AllowlistProof calldata _allowlistProof\n ) external view returns (bool isOverride);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/thridweb-query/deployments/polygon/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/thridweb-query/deployments/polygon/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon/solcInputs/63b2d6c5717d5484fe7e1171f77605e8.json b/projects/thridweb-query/deployments/polygon/solcInputs/63b2d6c5717d5484fe7e1171f77605e8.json new file mode 100644 index 000000000..2c0e5c5c1 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon/solcInputs/63b2d6c5717d5484fe7e1171f77605e8.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n enum FeeType {\n Bps,\n Flat\n }\n\n struct FeeData {\n address recipient;\n uint256 value;\n FeeType feeType;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n _globalData.maxTotalSupply = drop.maxTotalSupply();\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n _globalData.baseURICount = drop.getBaseURICount();\n _globalData.blockTimeStamp = block.timestamp;\n\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.value = rBps;\n _globalData.defaultRoyaltyInfo.feeType = FeeType.Bps;\n\n IDropERC721.PlatformFeeType feeType = drop.getPlatformFeeType();\n if (feeType == IDropERC721.PlatformFeeType.Flat) {\n (address pAddress, uint256 pValue) = drop.getFlatPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.value = pValue;\n _globalData.platformFeeInfo.feeType = FeeType.Flat;\n } else {\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.value = pBps;\n _globalData.platformFeeInfo.feeType = FeeType.Bps;\n }\n\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n /**\n * @param proof Proof of concerned wallet's inclusion in an allowlist.\n * @param quantityLimitPerWallet The total quantity of tokens the allowlisted wallet is eligible to claim over time.\n * @param pricePerToken The price per token the allowlisted wallet must pay to claim tokens.\n * @param currency The currency in which the allowlisted wallet must pay the price for claiming tokens.\n */\n struct AllowlistProof {\n bytes32[] proof;\n uint256 quantityLimitPerWallet;\n uint256 pricePerToken;\n address currency;\n }\n\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // Enums\n enum PlatformFeeType {\n Bps,\n Flat\n }\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeType() external view returns (PlatformFeeType);\n function getPlatformFeeInfo() external view returns (address, uint16);\n function getFlatPlatformFeeInfo() external view returns (address, uint256);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n function verifyClaim(\n uint256 _conditionId,\n address _claimer,\n uint256 _quantity,\n address _currency,\n uint256 _pricePerToken,\n AllowlistProof calldata _allowlistProof\n ) external view returns (bool isOverride);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon/solcInputs/b1c828768fa0832da15cbd25d898ed88.json b/projects/thridweb-query/deployments/polygon/solcInputs/b1c828768fa0832da15cbd25d898ed88.json new file mode 100644 index 000000000..b22176804 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon/solcInputs/b1c828768fa0832da15cbd25d898ed88.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n enum FeeType {\n Bps,\n Flat\n }\n\n struct FeeData {\n address recipient;\n uint256 value;\n FeeType feeType;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n try drop.maxTotalSupply() returns (uint resultMaxTotalSupply) {\n _globalData.maxTotalSupply = resultMaxTotalSupply;\n } catch {\n _globalData.maxTotalSupply = 0;\n } \n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n _globalData.baseURICount = drop.getBaseURICount();\n _globalData.blockTimeStamp = block.timestamp;\n\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.value = rBps;\n _globalData.defaultRoyaltyInfo.feeType = FeeType.Bps;\n\n IDropERC721.PlatformFeeType feeType = IDropERC721.PlatformFeeType.Bps;\n try drop.getPlatformFeeType() returns (IDropERC721.PlatformFeeType resultFeeType) {\n feeType = resultFeeType;\n } catch {\n feeType = IDropERC721.PlatformFeeType.Bps;\n }\n \n if (feeType == IDropERC721.PlatformFeeType.Flat) {\n (address pAddress, uint256 pValue) = drop.getFlatPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.value = pValue;\n _globalData.platformFeeInfo.feeType = FeeType.Flat;\n } else {\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.value = pBps;\n _globalData.platformFeeInfo.feeType = FeeType.Bps;\n }\n\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n /**\n * @param proof Proof of concerned wallet's inclusion in an allowlist.\n * @param quantityLimitPerWallet The total quantity of tokens the allowlisted wallet is eligible to claim over time.\n * @param pricePerToken The price per token the allowlisted wallet must pay to claim tokens.\n * @param currency The currency in which the allowlisted wallet must pay the price for claiming tokens.\n */\n struct AllowlistProof {\n bytes32[] proof;\n uint256 quantityLimitPerWallet;\n uint256 pricePerToken;\n address currency;\n }\n\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // Enums\n enum PlatformFeeType {\n Bps,\n Flat\n }\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeType() external view returns (PlatformFeeType);\n function getPlatformFeeInfo() external view returns (address, uint16);\n function getFlatPlatformFeeInfo() external view returns (address, uint256);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n function verifyClaim(\n uint256 _conditionId,\n address _claimer,\n uint256 _quantity,\n address _currency,\n uint256 _pricePerToken,\n AllowlistProof calldata _allowlistProof\n ) external view returns (bool isOverride);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon/solcInputs/e91e428fad7f11da8f23baddfcf53d1d.json b/projects/thridweb-query/deployments/polygon/solcInputs/e91e428fad7f11da8f23baddfcf53d1d.json new file mode 100644 index 000000000..2d328d9b7 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon/solcInputs/e91e428fad7f11da8f23baddfcf53d1d.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n enum FeeType {\n Bps,\n Flat\n }\n\n struct FeeData {\n address recipient;\n uint256 value;\n FeeType feeType;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n try drop.maxTotalSupply() returns (uint maxTotalSupply) {\n _globalData.maxTotalSupply = maxTotalSupply;\n } catch {\n _globalData.maxTotalSupply = 0;\n } \n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n try drop.getBaseURICount() returns (uint baseURICount) {\n _globalData.baseURICount = baseURICount;\n } catch {\n _globalData.baseURICount = 0;\n }\n \n _globalData.blockTimeStamp = block.timestamp;\n\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.value = rBps;\n _globalData.defaultRoyaltyInfo.feeType = FeeType.Bps;\n\n IDropERC721.PlatformFeeType feeType = IDropERC721.PlatformFeeType.Bps;\n try drop.getPlatformFeeType() returns (IDropERC721.PlatformFeeType resultFeeType) {\n feeType = resultFeeType;\n } catch {\n feeType = IDropERC721.PlatformFeeType.Bps;\n }\n \n if (feeType == IDropERC721.PlatformFeeType.Flat) {\n (address pAddress, uint256 pValue) = drop.getFlatPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.value = pValue;\n _globalData.platformFeeInfo.feeType = FeeType.Flat;\n } else {\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.value = pBps;\n _globalData.platformFeeInfo.feeType = FeeType.Bps;\n }\n\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n /**\n * @param proof Proof of concerned wallet's inclusion in an allowlist.\n * @param quantityLimitPerWallet The total quantity of tokens the allowlisted wallet is eligible to claim over time.\n * @param pricePerToken The price per token the allowlisted wallet must pay to claim tokens.\n * @param currency The currency in which the allowlisted wallet must pay the price for claiming tokens.\n */\n struct AllowlistProof {\n bytes32[] proof;\n uint256 quantityLimitPerWallet;\n uint256 pricePerToken;\n address currency;\n }\n\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // Enums\n enum PlatformFeeType {\n Bps,\n Flat\n }\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeType() external view returns (PlatformFeeType);\n function getPlatformFeeInfo() external view returns (address, uint16);\n function getFlatPlatformFeeInfo() external view returns (address, uint256);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n function verifyClaim(\n uint256 _conditionId,\n address _claimer,\n uint256 _quantity,\n address _currency,\n uint256 _pricePerToken,\n AllowlistProof calldata _allowlistProof\n ) external view returns (bool isOverride);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/package.json b/projects/thridweb-query/package.json index 06a997c0d..ac21dd273 100644 --- a/projects/thridweb-query/package.json +++ b/projects/thridweb-query/package.json @@ -68,9 +68,10 @@ }, "scripts": { "build": "hardhat compile && ./fix-interface.sh && tsc -skipLibCheck", - "test": "hardhat test --network polygon", + "test": "pwd", + "test-polygon": "hardhat test --network polygon", "deploy-release": "npm publish --access public", - "deploy": "hardhat deploy --network polygon_mainnet", + "deploy": "hardhat deploy --network polygon", "verify": "hardhat verify 0x5f1B0bD330fEfc7b56A4c39415d658521781bF3d --network polygon" }, "repository": { diff --git a/projects/thridweb-query/test/DropErc721Reader.ts b/projects/thridweb-query/test/DropErc721Reader.ts index ee74ee06f..ea70d8ee0 100644 --- a/projects/thridweb-query/test/DropErc721Reader.ts +++ b/projects/thridweb-query/test/DropErc721Reader.ts @@ -3,8 +3,7 @@ import { ethers } from "hardhat"; import "@nomicfoundation/hardhat-toolbox"; import { network } from "hardhat" -import {DropERC721Reader, DropERC721Reader__factory, Initializable} from "../typechain-types"; -import {DropERC721, DropERC721__factory} from "../typechain-types"; +import {DropERC721Reader, DropERC721Reader__factory, IDropERC721__factory} from "../typechain-types"; import {SignerWithAddress} from "@nomiclabs/hardhat-ethers/signers"; import {ClaimEligibility, ThirdwebSDK} from "@thirdweb-dev/sdk"; import {ThirdwebStorage} from "@thirdweb-dev/storage"; @@ -22,7 +21,7 @@ describe("Test Erc721 Reader", function () { beforeEach(async function () { [owner] = await ethers.getSigners(); - erc721Reader = await DropERC721Reader__factory.connect("0x29433D84cCb7241097Df27E30f36fe7433B19232", owner) + erc721Reader = await DropERC721Reader__factory.connect("0x507F27bb1d442B45cAC8fbEa8AedeE11eEAdfa2d", owner) console.log(erc721Reader.address) sdk = ThirdwebSDK.fromSigner( owner, // Your wallet's private key (only required for write operations) @@ -44,21 +43,21 @@ describe("Test Erc721 Reader", function () { // NoWallet = "No wallet connected.", it("There is no claim condition set.", async function () { const collectionAddress = "0x0Fe7B48225f2c7E24952747F5D644Ba9937a199E" - const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const erc721Drop = IDropERC721__factory.connect(collectionAddress, owner) const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, undefined) expect(claimReason).to.eq(ClaimEligibility.NoWallet) }); it("There is no claim condition set.", async function () { const collectionAddress = "0x0Fe7B48225f2c7E24952747F5D644Ba9937a199E" - const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const erc721Drop = IDropERC721__factory.connect(collectionAddress, owner) const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, owner.address) expect(claimReason).to.eq(ClaimEligibility.NoClaimConditionSet) }); it("This address is not on the allowlist.", async function () { const collectionAddress = "0xA00412829A4fFB09b5a85042941f8EC4B2F385cA" - const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const erc721Drop = IDropERC721__factory.connect(collectionAddress, owner) const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, owner.address) expect(claimReason).to.eq(ClaimEligibility.AddressNotAllowed) }); @@ -72,14 +71,14 @@ describe("Test Erc721 Reader", function () { it("Claim phase has not started yet.", async function () { const collectionAddress = "0xe114A562C3F994859fd9077A804A3E5084D62FeF" - const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const erc721Drop = IDropERC721__factory.connect(collectionAddress, owner) const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, owner.address) expect(claimReason).to.eq(ClaimEligibility.ClaimPhaseNotStarted, "Claim phase has not started yet.") }); it("Cannot claim more than maximum allowed quantity.", async function () { const collectionAddress = "0x19cFE5f37024B2f4E48Ee090897548A48C88237C" - const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const erc721Drop = IDropERC721__factory.connect(collectionAddress, owner) const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 4, storage, sdk, owner.address) expect(claimReason).to.eq(ClaimEligibility.OverMaxClaimablePerWallet, "Cannot claim more than maximum allowed quantity.") }); @@ -87,7 +86,7 @@ describe("Test Erc721 Reader", function () { // NotEnoughSupply = "There is not enough supply to claim.", it("There is not enough supply to claim.", async function () { const collectionAddress = "0x0645336C3C2A892926b18e5B85aA009805C377d8" - const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const erc721Drop = IDropERC721__factory.connect(collectionAddress, owner) const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 4, storage, sdk, owner.address) expect(claimReason).to.eq(ClaimEligibility.NotEnoughSupply, "There is not enough supply to claim.") }); @@ -95,7 +94,7 @@ describe("Test Erc721 Reader", function () { // OverMaxClaimablePerWallet = "Cannot claim more than maximum allowed quantity.", it("Cannot claim more than maximum allowed quantity.", async function () { const collectionAddress = "0x8e0d557d99B4AB7a066327a819c579D0CfdCe3E1" - const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const erc721Drop = IDropERC721__factory.connect(collectionAddress, owner) const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 10, storage, sdk, owner.address) expect(claimReason).to.eq(ClaimEligibility.OverMaxClaimablePerWallet, "Cannot claim more than maximum allowed quantity.") }); @@ -103,24 +102,34 @@ describe("Test Erc721 Reader", function () { // NotEnoughTokens = "There are not enough tokens in the wallet to pay for the claim.", it("There are not enough tokens in the wallet to pay for the claim.", async function () { const collectionAddress = "0x5fafecB2E623b84d5EE824e82d35a18DFe6B0f20" - const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const erc721Drop = IDropERC721__factory.connect(collectionAddress, owner) const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, owner.address) expect(claimReason).to.eq(ClaimEligibility.NotEnoughTokens, "There are not enough tokens in the wallet to pay for the claim.") }); it("can claim public", async function () { const collectionAddress = "0x8e0d557d99B4AB7a066327a819c579D0CfdCe3E1" - const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const erc721Drop = IDropERC721__factory.connect(collectionAddress, owner) const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, owner.address) expect(claimReason).to.eq(null, "Claim reason should be null for a public mint") }); it("can claim private", async function () { const collectionAddress = "0x19cFE5f37024B2f4E48Ee090897548A48C88237C" - const erc721Drop = DropERC721__factory.connect(collectionAddress, owner) + const erc721Drop = IDropERC721__factory.connect(collectionAddress, owner) const claimReason = await getClaimIneligibilityReasons(erc721Reader, erc721Drop, 1, storage, sdk, owner.address) expect(claimReason).to.eq(null, "Claim illegebility reason should be null for a private mint") }); + + it("can read flat fees info", async function () { + const collectionAddress = "0x7672fB1D8C7f2e53bB5BF983Eb687F7A26331A23" + const erc721Drop = IDropERC721__factory.connect(collectionAddress, owner) + + const [,,data] = await erc721Reader.getAllData(collectionAddress, owner.address) + expect(data.platformFeeInfo.feeType).to.eq(1) + expect(data.platformFeeInfo.recipient).to.eq("0x7E31749358659c627F7f74dD0305A0Bd84c980da") + expect(data.platformFeeInfo.value).to.eq(1000000000000) + }); }); diff --git a/projects/thridweb-query/utils/get-claim-illegebility.ts b/projects/thridweb-query/utils/get-claim-illegebility.ts index 3c7e4282e..097c21fad 100644 --- a/projects/thridweb-query/utils/get-claim-illegebility.ts +++ b/projects/thridweb-query/utils/get-claim-illegebility.ts @@ -14,14 +14,13 @@ import { ThirdwebSDK } from "@thirdweb-dev/sdk"; import {BigNumber, ethers, utils} from "ethers"; -import {DropERC721, DropERC721Reader} from "../typechain-types"; -import {IClaimCondition} from "../typechain-types/contracts/drop-reader/DropERC721Reader"; +import {IDropERC721, DropERC721Reader} from "../typechain-types"; import {ThirdwebStorage} from "@thirdweb-dev/storage"; import {getClaimerProofs, prepareClaim} from "./utils"; export async function getClaimIneligibilityReasons( erc721Reader: DropERC721Reader, - erc721: DropERC721, + erc721: IDropERC721, quantity: number, storage: ThirdwebStorage, sdk: ThirdwebSDK, @@ -44,7 +43,7 @@ export async function getClaimIneligibilityReasons( } activeConditionIndex = eligibilityData.activeClaimConditionIndex; - const claimCondition = eligibilityData.conditions[activeConditionIndex.toNumber()] as IClaimCondition.ClaimConditionStructOutput; + const claimCondition = eligibilityData.conditions[activeConditionIndex.toNumber()] as IDropERC721.ClaimConditionStructOutput; // Check if the claim phase has not started yet if (claimCondition.startTimestamp.gt(eligibilityData.globalData.blockTimeStamp)) { diff --git a/projects/thridweb-query/utils/get-drop-data.ts b/projects/thridweb-query/utils/get-drop-data.ts index c017d4e19..cb24b54eb 100644 --- a/projects/thridweb-query/utils/get-drop-data.ts +++ b/projects/thridweb-query/utils/get-drop-data.ts @@ -1,14 +1,13 @@ -import {DropERC721, DropERC721Reader} from "../typechain-types"; +import {IDropERC721, DropERC721Reader} from "../typechain-types"; import {ThirdwebStorage} from "@thirdweb-dev/storage"; import {ClaimVerification, SnapshotEntryWithProof, ThirdwebSDK} from "@thirdweb-dev/sdk"; import {AddressZero} from "@ethersproject/constants"; -import {IClaimCondition} from "../typechain-types/contracts/drop-reader/DropERC721Reader"; import {BigNumber, utils} from "ethers"; import {getClaimerProofs, prepareClaim} from "./utils"; export interface DropData { activeClaimConditionIndex: BigNumber; - conditions: IClaimCondition.ClaimConditionStructOutput[]; + conditions: IDropERC721.ClaimConditionStructOutput[]; globalData: DropERC721Reader.GlobalDataStructOutput; snapshot: SnapshotEntryWithProof | null; claimVerification: ClaimVerification | null; @@ -16,7 +15,7 @@ export interface DropData { export async function getDropData( erc721Reader: DropERC721Reader, - erc721: DropERC721, + erc721: IDropERC721, quantity: number, storage: ThirdwebStorage, sdk: ThirdwebSDK, diff --git a/projects/thridweb-query/utils/utils.ts b/projects/thridweb-query/utils/utils.ts index 7e6812548..482748c2b 100644 --- a/projects/thridweb-query/utils/utils.ts +++ b/projects/thridweb-query/utils/utils.ts @@ -1,11 +1,11 @@ -import {IClaimCondition} from "../typechain-types/contracts/drop-reader/DropERC721Reader"; import {ThirdwebStorage} from "@thirdweb-dev/storage"; import {ClaimVerification, fetchSnapshotEntryForAddress, SnapshotEntryWithProof, ThirdwebSDK} from "@thirdweb-dev/sdk"; import {BigNumber, ethers, utils} from "ethers"; +import { IDropERC721 } from "../typechain-types"; export async function getClaimerProofs( claimerAddress: string, - claimCondition: IClaimCondition.ClaimConditionStructOutput, + claimCondition: IDropERC721.ClaimConditionStructOutput, merkleRootArray: Uint8Array, collectionUri: string, storage: ThirdwebStorage, diff --git a/projects/tokens/hardhat.config.ts b/projects/tokens/hardhat.config.ts index d4f29c08a..0c0e6b5ce 100644 --- a/projects/tokens/hardhat.config.ts +++ b/projects/tokens/hardhat.config.ts @@ -77,6 +77,7 @@ const config: HardhatUserConfig = { }, paths: { sources: "contracts", + tests: "test-hardhat" }, networks: loadNetworkConfigs(), etherscan: { diff --git a/projects/tokens/test/ZkAddress.test.ts b/projects/tokens/test-hardhat/ZkAddress.test.ts similarity index 100% rename from projects/tokens/test/ZkAddress.test.ts rename to projects/tokens/test-hardhat/ZkAddress.test.ts diff --git a/projects/tokens/tsconfig.json b/projects/tokens/tsconfig.json index d048da993..40675f563 100644 --- a/projects/tokens/tsconfig.json +++ b/projects/tokens/tsconfig.json @@ -1,13 +1,18 @@ { - "compilerOptions": { - "target": "ES6", - "module": "CommonJS", - "pretty": true, - "outDir": "./dist", - "esModuleInterop": true, - "sourceMap": true, - "declaration": true, - }, - "include": ["./types/ethers-contracts/**/*"], - "exclude": ["node_modules"] - } \ No newline at end of file + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "strict": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "moduleResolution": "node", + "forceConsistentCasingInFileNames": true, + "outDir": "dist" + }, + "include": [ + "hardhat.config.ts", + "./deploy", + "./test", + "./typechain-types/**/*", + "test/ZkAddress.test.ts", "test-hardhat/ZkAddress.test.ts" ] +} \ No newline at end of file diff --git a/projects/upgrade-executor/test/trasnfer-ownership.test.ts b/projects/upgrade-executor/test/trasnfer-ownership.test.ts index 0e7f46d3f..399270eaa 100644 --- a/projects/upgrade-executor/test/trasnfer-ownership.test.ts +++ b/projects/upgrade-executor/test/trasnfer-ownership.test.ts @@ -17,6 +17,17 @@ describe("Transfer Ownership", function () { let settings: any; + enum ProposalState { + Pending, + Active, + Canceled, + Defeated, + Succeeded, + Queued, + Expired, + Executed + } + before(async () => { [newOwner, ...signers] = await ethers.getSigners(); @@ -149,6 +160,19 @@ describe("Transfer Ownership", function () { //prepare data for proposal const governor = new ethers.Contract("0x6552C8fb228f7776Fc0e4056AA217c139D4baDa1", RariGovernorABI, userSigner) + const votingPeriod = await governor.votingPeriod(); + console.log(`Voting Period: ${votingPeriod}`); + + const votingDelay = await governor.votingDelay(); + console.log(`Voting Delay: ${votingDelay}`); + + const proposalThreshold = await governor.proposalThreshold(); + console.log(`Proposal Threshold: ${proposalThreshold}`); + + const votingPower = await governor.getVotes(user, await ethers.provider.getBlockNumber() - 1); + console.log(`Voting Power: ${votingPower}`); + expect(votingPower).to.be.gte(proposalThreshold); + const ownableContracts = [ "0xDc8BaA86f136F8B0851F090a4DfFDc7b5F46688D", //admin1 "0x80033c932904E077e55a6E43E5E9a796f34d2525", //admin2 @@ -183,6 +207,10 @@ describe("Transfer Ownership", function () { const proposalId = proposalReceipt.events[0].args.proposalId; + const initialProposalState = await governor.state(proposalId); + console.log(`Proposal ${proposalId} State: ${initialProposalState}`); + expect(initialProposalState).to.be.eq(ProposalState.Active); + const VoteType = { Against: 0, For: 1, @@ -192,10 +220,27 @@ describe("Transfer Ownership", function () { //vote for proposal const voteTx = await governor.castVote(proposalId, VoteType.For) - const voteReceipt = await voteTx.wait(37000) + const voteReceipt = await voteTx.wait() const hashDiscr = await testHelper.hashDescription(discr) + const proposalDeadline = await governor.proposalDeadline(proposalId); + console.log(`Proposal ${proposalId} Deadline: ${proposalDeadline}`); + + const currentBlock = await ethers.provider.getBlockNumber(); + console.log(`Current Block: ${currentBlock}`); + + /* Advance Voting Periods time, measured on blocks */ + await network.provider.send("hardhat_mine", ['0x'+ ((36000).toString(16))]); + + const currentBlockAfter = await ethers.provider.getBlockNumber(); + console.log(`Current Block After: ${currentBlockAfter}`); + expect(currentBlockAfter).to.be.gt(proposalDeadline); + + const proposalState = await governor.state(proposalId); + console.log(`Proposal ${proposalId} State: ${proposalState}`); + expect(proposalState).to.be.eq(ProposalState.Succeeded); + //queue proposal const queueTx = await governor['queue(address[],uint256[],bytes[],bytes32)']( arrayOfUpgradeExecutorAddresses, diff --git a/scripts/balance.js b/scripts/balance.js index 5b5b1974f..852a85554 100644 --- a/scripts/balance.js +++ b/scripts/balance.js @@ -17,7 +17,7 @@ async function verifyBalanceChangeReturnTx(web3, account, change, todo) { actual = actual.sub(moneyUsedForGas); } - assert.equal(change, actual); + assert.equal(actual, change); return tx; } diff --git a/yarn.lock b/yarn.lock index c4bd9f5d4..cb367624f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2501,8 +2501,7 @@ dependencies: "@octokit/openapi-types" "^18.0.0" -"@openzeppelin/contracts-4-7-3@npm:@openzeppelin/contracts@4.7.3", "@openzeppelin/contracts@4.7.3": - name "@openzeppelin/contracts-4-7-3" +"@openzeppelin/contracts-4-7-3@npm:@openzeppelin/contracts@4.7.3": version "4.7.3" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.7.3.tgz#939534757a81f8d69cc854c7692805684ff3111e" integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== @@ -2512,8 +2511,7 @@ resolved "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.7.3.tgz#939534757a81f8d69cc854c7692805684ff3111e" integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== -"@openzeppelin/contracts-upgradeable-4-7-3@npm:@openzeppelin/contracts-upgradeable@4.7.3", "@openzeppelin/contracts-upgradeable@4.7.3": - name "@openzeppelin/contracts-upgradeable-4-7-3" +"@openzeppelin/contracts-upgradeable-4-7-3@npm:@openzeppelin/contracts-upgradeable@4.7.3": version "4.7.3" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz#f1d606e2827d409053f3e908ba4eb8adb1dd6995" integrity sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A== @@ -2528,6 +2526,11 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-3.4.0.tgz#7674c73c643a509f1b90c509e3e72fe9aae02aeb" integrity sha512-7wBcbukDqWZt/B1zjb7zyeWq+AC7rx7nGln7/hPxHdKd8PAiiteXd51Cp2KmGP8qaY0/TXh/fQLsA082LWp8Zw== +"@openzeppelin/contracts-upgradeable@4.7.3": + version "4.7.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.7.3.tgz#f1d606e2827d409053f3e908ba4eb8adb1dd6995" + integrity sha512-+wuegAMaLcZnLCJIvrVUDzA9z/Wp93f0Dla/4jJvIhijRrPabjQbZe6fWiECLaJyfn5ci9fqf9vTw3xpQOad2A== + "@openzeppelin/contracts-upgradeable@^3.4.0": version "3.4.2" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-3.4.2.tgz#2c2a1b0fa748235a1f495b6489349776365c51b3" @@ -2553,6 +2556,11 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.0-solc-0.7.tgz#c4fbd1b761714745c4bce6fc97e8b44d4c29d5b9" integrity sha512-bJz1YgmeKRYVnYZedYSiy5/YmaYTxOhb76ftCseN1z2r4DK7PwCGvRCF2fRavTxAmGkIC/Q5zSy/Dr3OerPw0w== +"@openzeppelin/contracts@4.7.3": + version "4.7.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.7.3.tgz#939534757a81f8d69cc854c7692805684ff3111e" + integrity sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw== + "@openzeppelin/contracts@~4.3.3": version "4.3.3" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.3.3.tgz#ff6ee919fc2a1abaf72b22814bfb72ed129ec137" @@ -2750,17 +2758,6 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= -"@rarible/auction@^0.8.4-beta.3": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@rarible/auction/-/auction-0.8.6.tgz#3cea41a178e087db858493ba747e5ad7eb3d6fb3" - integrity sha512-M6ogiJv0VydDIqBdoRDhJg+4T3/To6kP7cjUHVRJ6JtjfELqAl88D6zLm1LWeBuUJ1yT9/9BtM7TiPldfn6NJg== - dependencies: - "@openzeppelin/contracts-upgradeable" "3.4.0" - "@rarible/exchange-interfaces" "^0.8.6" - "@rarible/transfer-manager" "^0.8.6" - ethers "5.7.2" - truffle-plugin-verify "^0.6.5" - "@rarible/estimate-middleware@0.5.6": version "0.5.6" resolved "https://registry.yarnpkg.com/@rarible/estimate-middleware/-/estimate-middleware-0.5.6.tgz#de4f02afd1185f251833e012f3739421941ea682" @@ -2769,81 +2766,6 @@ eth-json-rpc-middleware "^7.0.1" json-rpc-engine "^6.1.0" -"@rarible/exchange-interfaces@^0.8.6": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@rarible/exchange-interfaces/-/exchange-interfaces-0.8.6.tgz#1df7bcdf7680161fa5cf5792875a34d47be4ba25" - integrity sha512-O3MnVOziWYLOnS28lJIGKzHQeMn0eS2Yr7rzR8K/bfFPjgUVEDJ5o2M0lLUY3v9rKOE0unHZFUGDgEJD9SnjVg== - dependencies: - "@openzeppelin/contracts-upgradeable" "3.4.0" - "@rarible/lib-asset" "^0.8.6" - "@rarible/lib-part" "^0.8.6" - truffle-plugin-verify "^0.6.5" - -"@rarible/lazy-mint@^0.8.6": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@rarible/lazy-mint/-/lazy-mint-0.8.6.tgz#7db5746b007abde69083cc30ac783ea100ce01c9" - integrity sha512-rWQe4o95/tZni9OnYISLF6bNnGKUyKylIPFnOy/rnonOLc1FHR2rKh8t8dSbFk/cFa03gmpTt5KSMa9K535KIw== - dependencies: - "@openzeppelin/contracts-upgradeable" "3.4.0" - "@rarible/lib-part" "^0.8.6" - truffle-plugin-verify "^0.6.5" - -"@rarible/lib-asset@^0.8.6": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@rarible/lib-asset/-/lib-asset-0.8.6.tgz#df861b317f228c441be4d339ee26ab29faded6a2" - integrity sha512-kTZfjYNyjBE2CzbHpPZ8CJxvqf9T4dJsEL1kN/uZyDeM2/z9s2573lbiK4HdpXTcXFIMyLUqB4xwQI03pUM6gA== - dependencies: - truffle-plugin-verify "^0.6.5" - -"@rarible/lib-bp@^0.8.6": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@rarible/lib-bp/-/lib-bp-0.8.6.tgz#c43ad086dbaf3f15163ecf0fa6b6cbaa5c695ca1" - integrity sha512-TKs9wWEJB7CUGbeeBv2E1XthyoG8f3ZHFIPHJk8J9a2jbz6sQB2OJvjMKj2y/Ei6rArgoAKql056108hNPM8BA== - dependencies: - "@openzeppelin/contracts-upgradeable" "3.4.0" - truffle-plugin-verify "^0.6.5" - -"@rarible/lib-part@^0.8.6": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@rarible/lib-part/-/lib-part-0.8.6.tgz#d021a96da2c2a91d556bdb33682566cfc4275aec" - integrity sha512-yZAlXq7nF9uqeM7zhFISO3SRooWDbUjjg8i1qBmaXNkgAQ3m6fVQ2JsP74FNVM81e0x8iA2xOvr6ge6SWDcAvA== - dependencies: - truffle-plugin-verify "^0.6.5" - -"@rarible/royalties-upgradeable@^0.8.6": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@rarible/royalties-upgradeable/-/royalties-upgradeable-0.8.6.tgz#0261f4de787967926c2f2c9ac86511afba974590" - integrity sha512-gePcKxE2IoqO3vRPQXC9AcE57yamhiV/2jYS4oWniJZUqw6vtaxO6ptwJAp05DqqcNE5CNsZQnW+o780xvvB7w== - dependencies: - "@openzeppelin/contracts-upgradeable" "3.4.0" - "@rarible/royalties" "^0.8.6" - truffle-plugin-verify "^0.6.5" - -"@rarible/royalties@^0.8.6": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@rarible/royalties/-/royalties-0.8.6.tgz#8313426a78327b6aa9f23e3e9f77380f35a27eb1" - integrity sha512-WD4Nrs7IRz8jYAnZNVFPGM4MlYoQ+UHcXM3WauH3knuDQygOx64lXIFubsat2t1QmV1qZ7zWeHlkAyAhZdmgKA== - dependencies: - "@rarible/lib-part" "^0.8.6" - truffle-plugin-verify "^0.6.5" - -"@rarible/transfer-manager@^0.8.6": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@rarible/transfer-manager/-/transfer-manager-0.8.6.tgz#0a89ca451047bcb4fe7caeeabd90809fe65b1369" - integrity sha512-5nT0d2iyE3RjZ0C6QpYGnoKmq3Qhlcgoo9IBB9s7qC3m/oGW8GTr1MjUR64gLHv6SjWzoEHdWuYiK1xN8+w8UA== - dependencies: - "@openzeppelin/contracts-upgradeable" "3.4.0" - "@rarible/exchange-interfaces" "^0.8.6" - "@rarible/lazy-mint" "^0.8.6" - "@rarible/lib-asset" "^0.8.6" - "@rarible/lib-bp" "^0.8.6" - "@rarible/lib-part" "^0.8.6" - "@rarible/royalties" "^0.8.6" - "@rarible/royalties-upgradeable" "^0.8.6" - eth-sig-util "^3.0.1" - ethers "5.7.2" - truffle-plugin-verify "^0.6.5" - "@rarible/trezor-provider@0.0.11": version "0.0.11" resolved "https://registry.yarnpkg.com/@rarible/trezor-provider/-/trezor-provider-0.0.11.tgz#e1e2a599de8a1ceab0784544f31c9741d952301b" From 3c0518f27182c95442a1f97470b533cd7ec97e6f Mon Sep 17 00:00:00 2001 From: Eugene Nacu Date: Thu, 18 Jul 2024 12:07:23 +0100 Subject: [PATCH 20/25] Support for flat fees in Drop contracts (#302) * feat: support for flat fees in Drop contracts * fix: fixed some type errors From 5da61301307a689d098dfbff1ea76adfa0906ffd Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Thu, 18 Jul 2024 15:04:15 +0100 Subject: [PATCH 21/25] feat: update nvm --- .nvmrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.nvmrc b/.nvmrc index 0e9dc6b58..7950a4457 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v18.13.0 +v18.17.0 From 3a0c785d52bc66a943e102611d0de33d06b24269 Mon Sep 17 00:00:00 2001 From: gonzaotc <86085168+gonzaotc@users.noreply.github.com> Date: Mon, 29 Jul 2024 08:59:35 -0300 Subject: [PATCH 22/25] Update LibOrderData.md (#301) * Update LibOrderData.md Updated description for Orders V3 * updated libDataOrder docs for v2 and v1 --- .../contracts/libraries/LibOrderData.md | 55 ++++++------------- 1 file changed, 16 insertions(+), 39 deletions(-) diff --git a/projects/exchange-v2/contracts/libraries/LibOrderData.md b/projects/exchange-v2/contracts/libraries/LibOrderData.md index 46cf4312e..347bca184 100644 --- a/projects/exchange-v2/contracts/libraries/LibOrderData.md +++ b/projects/exchange-v2/contracts/libraries/LibOrderData.md @@ -16,6 +16,8 @@ - `originFees` from buy-order is taken from the buyer, `originFees` from sell-order is taken from the seller. e.g. sell order is `1 ERC721` => `100 ETH`, buy order is `100 ETH` => `1 ERC721`. Buy order has `originFees` = [`{5% to addr1}`,`{10% to addr2}`]. Sell order has `originFees` = [`{5% to addr3}`]. Then, total amount that buyer needs to send is `100 ETH` + `5%*100ETH` + `10%*100ETH` = `115 ETH` (15% more than order value, buy-order `origin fees` are added. So buyer pays for their `origin fees`). From this amount `5 ETH` will be transfered to addr1, `10 ETH` to addr2 (now we have `100ETH` left) and `5ETH` to addr3 (it is seller `origin fee`, so it is taken from their part). - after that NFT `royalties` are taken - what's left after that is distributed according to sell-order `payouts` + - contract-level protocol fees are not enabled on `V1` orders + - `"V2"` - fields - `LibPart.Part[] payouts`, works the same as in `V1` orders @@ -23,46 +25,21 @@ - `bool isMakeFill` - if false, order's `fill` (what part of order is completed, stored on-chain) is calculated from take side (in `V1` orders it always works like that) - if true, `fill` is calculated from the make side of the order - - fees logic, works the same as in `V1` orders -- `"V3"` two types of `V3` orders. - - `"V3_BUY"` - - fields - - `uint payouts`, works the same as in `V1` orders, but there is only 1 value and address + amount are encoded into uint (first 12 bytes for amount, last 20 bytes for address), not using `LibPart.Part` struct - - `uint originFeeFirst`, instead of array there can only be 2 originFee in different vairables (originFeeFirst and originFeeSecond), and address + amount are encoded into uint (first 12 bytes for amount, last 20 bytes for address), not using `LibPart.Part` struct - - `uint originFeeSecond`, instead of array there can only be 2 originFee in different vairables (originFeeFirst and originFeeSecond), and address + amount are encoded into uint (first 12 bytes for amount, last 20 bytes for address), not using `LibPart.Part` struct - - `bytes32 marketplaceMarker`, bytes32 id marketplace, which generate this order - - `"V3_SELL"` - - fields - - `uint payouts`, works the same as in `V1` orders, but there is only 1 value and address + amount are encoded into uint (first 12 bytes for amount, last 20 bytes for address), not using `LibPart.Part` struct - - `uint originFeeFirst`, instead of array there can only be 2 originFee in different vairables (originFeeFirst and originFeeSecond), and address + amount are encoded into uint (first 12 bytes for amount, last 20 bytes for address), not using `LibPart.Part` struct - - `uint originFeeSecond`, instead of array there can only be 2 originFee in different vairables (originFeeFirst and originFeeSecond), and address + amount are encoded into uint (first 12 bytes for amount, last 20 bytes for address), not using `LibPart.Part` struct - - `uint maxFeesBasePoint` - - maximum amount of fees that can be taken from payment (e.g. 10%) - - chosen by seller, that's why it's only present in `V3_SELL` orders - - `maxFeesBasePoint` should be more than `0` - - `maxFeesBasePoint` should not be bigger than `10%` - - `bytes32 marketplaceMarker`, bytes32 id marketplace, which generate this order - - `V3` orders can only be matched if buy-order is `V3_BUY` and the sell-order is `V3_SELL` - - `V3` orders don't have `isMakeFill` field - - `V3_SELL` orders' fills are always calculated from make side (as if `isMakeFill` = true) - - `V3_BUY` orders' fills are always calculated from take side (as if `isMakeFill` = false) + - fees logic + - works the same as in `V1` orders + - contract-level protocol fees are not enabled on `V2` orders + +- `"V3"` + - fields + - `LibPart.Part[] payouts`, works the same as in `V1` and `V2` orders + - `LibPart.Part[] originFees`, works the same as in `V1` and `V2` orders + - `bool isMakeFill`, works the same as in `V2` orders - fees logic - - `V3` orders' fees work differently from all previous orders types - - `originFees` are taken from seller side only. - - sum of buy-order `originFees` + sell-order `originFees` should not be bigger than `maxFeesBasePoint` - - example: - - sell order is `1 ERC721` => `100 ETH` - - `maxFeesBasePoint` is 10 % - - Sell order has `originFeeFirst` = `{2% to addr3}` - - buy order is `100 ETH` => `1 ERC721` - - Buy order has - - `originFeeFirst` = `{3% to addr1}`, - - `originFeeSecond` = `{2% to addr2}` - - total amount for buyer is not affected by fees. it remains `100 ETH` - - `3% * 100 ETH` + `2% * 100 ETH` is taken as buy order's origin fee, `95 ETH` remaining - - `2% * 100 ETH` is taken as sell order's origin, `93 ETH` remaining - - after that NFT `royalties` are taken (same as with previous orders' types) - - what's left after that is distributed according to sell-order `payouts` (same as with previous orders' types) + - works the same as in `V1` and `V2` orders, with the difference that the contract-level protocol fee is enabled. + - `originFees` are taken from both sides, but the protocol fee is also deducted in the following manner: + - if the protocol fee is set with values greater than zero, it is deducted as `uint48 buyerAmount` percentage for the buyer, and `uint48 sellerAmount` percentage for the seller. + - for direct reference on the protocolFee, check [RaribleTransferManager.sol](../../../transfer-manager/contracts/RaribleTransferManager.sol) + From d967fdd66b9a5c1f1127a66eb1088c5ed9b3c115 Mon Sep 17 00:00:00 2001 From: gonzaotc <86085168+gonzaotc@users.noreply.github.com> Date: Mon, 12 Aug 2024 09:01:14 -0300 Subject: [PATCH 23/25] [Feature] PT-5616 Upgradeable ExchangeWrapper + Upgradeability Tests (#306) add upgradeable wrapper --- .../RaribleExchangeWrapperUpgradeable.json | 109970 ++++++++++++++ .../RaribleExchangeWrapperUpgradeableV2.json | 111817 +++++++++++++++ .../RaribleExchangeWrapperUpgradeable.sol | 760 + .../RaribleExchangeWrapperUpgradeableV2.sol | 779 + .../deploy/905_deploy_exchangeWrapper.ts | 222 +- .../906_deploy_exchageWrapperUpgradeable.ts | 67 + ...geWrapperUpgradeable_by_upgradeExecutor.ts | 100 + ...aribleExchangeWrapperUpgradeableImport.sol | 5 + .../RaribleExchangeWrapperUpgradeableV2.sol | 5 + .../ExchangeWrapperUpgradeable.test.js | 489 + .../utils/exchangeWrapperSettings.ts | 217 + .../src/actions/UpdateAddressAction.sol | 14 + .../RaribleExchangeWrapperUpgradeable.sol | 5 + .../RaribleExchangeWrapperUpgradeableV2.sol | 5 + .../test/contracts/TestHelper.sol | 26 +- .../test/contracts/TestHelperV7.sol | 17 + .../test/upgrade-exchange-wrapper.test.ts | 176 + scripts/balance.js | 44 +- 18 files changed, 224490 insertions(+), 228 deletions(-) create mode 100644 projects/exchange-wrapper/build/contracts/RaribleExchangeWrapperUpgradeable.json create mode 100644 projects/exchange-wrapper/build/contracts/RaribleExchangeWrapperUpgradeableV2.json create mode 100644 projects/exchange-wrapper/contracts/RaribleExchangeWrapperUpgradeable.sol create mode 100644 projects/exchange-wrapper/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol create mode 100644 projects/hardhat-deploy/deploy/906_deploy_exchageWrapperUpgradeable.ts create mode 100644 projects/hardhat-deploy/deploy/907_update_exchangeWrapperUpgradeable_by_upgradeExecutor.ts create mode 100644 projects/hardhat-deploy/src/RaribleExchangeWrapperUpgradeableImport.sol create mode 100644 projects/hardhat-deploy/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol create mode 100644 projects/hardhat-deploy/test/wrapper/ExchangeWrapperUpgradeable.test.js create mode 100644 projects/hardhat-deploy/utils/exchangeWrapperSettings.ts create mode 100644 projects/upgrade-executor/src/actions/UpdateAddressAction.sol create mode 100644 projects/upgrade-executor/test/contracts/RaribleExchangeWrapperUpgradeable.sol create mode 100644 projects/upgrade-executor/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol create mode 100644 projects/upgrade-executor/test/contracts/TestHelperV7.sol create mode 100644 projects/upgrade-executor/test/upgrade-exchange-wrapper.test.ts diff --git a/projects/exchange-wrapper/build/contracts/RaribleExchangeWrapperUpgradeable.json b/projects/exchange-wrapper/build/contracts/RaribleExchangeWrapperUpgradeable.json new file mode 100644 index 000000000..f5346ccc5 --- /dev/null +++ b/projects/exchange-wrapper/build/contracts/RaribleExchangeWrapperUpgradeable.json @@ -0,0 +1,109970 @@ +{ + "contractName": "RaribleExchangeWrapperUpgradeable", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "result", + "type": "bool" + } + ], + "name": "Execution", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum RaribleExchangeWrapperUpgradeable.Markets", + "name": "_type", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "address", + "name": "_newAddress", + "type": "address" + } + ], + "name": "MarketplaceAddressUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "blur", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "exchangeV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRare", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRareV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_4", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_5", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_6", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "sudoswap", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "weth", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wyvernExchange", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "x2y2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "inputs": [ + { + "internalType": "address[11]", + "name": "_marketplaces", + "type": "address[11]" + }, + { + "internalType": "address", + "name": "_weth", + "type": "address" + }, + { + "internalType": "address[]", + "name": "_transferProxies", + "type": "address[]" + }, + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ExchangeWrapper_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapperUpgradeable.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails", + "name": "purchaseDetails", + "type": "tuple" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + } + ], + "name": "singlePurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapperUpgradeable.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails[]", + "name": "purchaseDetails", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowFail", + "type": "bool" + } + ], + "name": "bulkPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + } + ], + "name": "approveWETH", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum RaribleExchangeWrapperUpgradeable.Markets", + "name": "_type", + "type": "uint8" + }, + { + "internalType": "address", + "name": "_newAddress", + "type": "address" + } + ], + "name": "updateMarketplaceAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum RaribleExchangeWrapperUpgradeable.Markets\",\"name\":\"_type\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newAddress\",\"type\":\"address\"}],\"name\":\"MarketplaceAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[11]\",\"name\":\"_marketplaces\",\"type\":\"address[11]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_transferProxies\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ExchangeWrapper_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapperUpgradeable.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapperUpgradeable.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_6\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapperUpgradeable.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapperUpgradeable.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum RaribleExchangeWrapperUpgradeable.Markets\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"_newAddress\",\"type\":\"address\"}],\"name\":\"updateMarketplaceAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"__ExchangeWrapper_init_proxy(address[11],address,address[],address)\":{\"params\":{\"_initialOwner\":\"- address of the owner\",\"_marketplaces\":\"- array of addresses of the marketplaces\",\"_transferProxies\":\"- array of addresses of the transfer proxies\",\"_weth\":\"- address of the WETH erc-20 token\"}},\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateMarketplaceAddress(uint8,address)\":{\"params\":{\"_newAddress\":\"- new address of the marketplace\",\"_type\":\"- type of the marketplace\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"__ExchangeWrapper_init_proxy(address[11],address,address[],address)\":{\"notice\":\"initializes the proxy contract\"},\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"},\"updateMarketplaceAddress(uint8,address)\":{\"notice\":\"updates the address of the marketplace\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/RaribleExchangeWrapperUpgradeable.sol\":\"RaribleExchangeWrapperUpgradeable\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a85355cc4f2554f4a8d334336d66b48d616abf1d90ec3d6b602e825c6fe63f0c\",\"dweb:/ipfs/QmTJYtsKJjBy3ShAt4kEjvM6nfVS8ZAFQqE29fG16tUP8d\"]},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aee85054062c8bcc9fdbdfbc92a459e04b4b9437b04c98b820d0772c11aa7268\",\"dweb:/ipfs/QmQZLXFFGNh2qni7fJp9maYU1XoaP77sMBVY3MnFb2Cyed\"]},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ff3a66f685a49d3750c9b3588770d1ee43ce3cb718e1dc911ac65d8a6d1c1f0d\",\"dweb:/ipfs/QmVK2mdcbZTZ81YQ1rxWWNbYgy3Gpb3yz3L2qtDPTdx9hu\"]},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://359411cc44a4499f37d46562ef3f348db443f9a699138c1797264d20b14697b7\",\"dweb:/ipfs/QmUmeQNUwve4MFCc1ace6zMnstqa8S9SZe1nXG9THcpQ5v\"]},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5e30d594df25d0651c2cd6f85d856e5fc9f3dbae68d017e1da33eb3c7e2f1ecc\",\"dweb:/ipfs/QmPgkV99jZr3Zs9ex8dJ5j22oX4wDuDtMCnXNy67bTwgAB\"]},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7dbc89479d30592e82442edc38053b380f611037a5e6ceafc7bf57a7aa1f0305\",\"dweb:/ipfs/QmcdYtt56WmjeYvsFjK69FnahnAriw88VzY3XRZwXkQKKN\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol\":{\"keccak256\":\"0x9e6b4b970877d19735e8c488a8c66d3b5a3e01e4705d982379feaafb451057a1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4027c55b0b196d0fc4c468a78f92748871b53798f4cfc38e9d41291407f878a6\",\"dweb:/ipfs/QmevYPTYvTafShnbbbQpPP2BwkikqeXbxo7oeiwmwqdk5s\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b9231fc5ac386d7b7ee0b98fe8bcfad4764bede276fd7caf234561882ffec973\",\"dweb:/ipfs/QmQiZebJjL7WLmYY1446SVSDMxojje3pvJSdjMEVdAMa32\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7cfb43a748605e9d48e38cdeddce66206ad7319ed3a5c0b60e9136c9e18d0ad1\",\"dweb:/ipfs/QmPqP3hzZVfZvK6PXnjHkzyJwkwDvuT3aV8gPzhMZ1QmvG\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://45ee9cb5a548db9a3805b934f995770272583ef6c0abd31aeffb7bd1f4c2f696\",\"dweb:/ipfs/QmcHGENdTcAzU6NuaoJWgMDA2rH1JdCWJf2EXRnSE967Qw\"]},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2cbeb499bad52667b96dd7df8e9b1f583e8c07afaba0018a75e5b7ff6e777173\",\"dweb:/ipfs/QmPLJnuhEcWnpmhMHKsiuVHVxMwb5k6idYyjajbrtZLz5B\"]},\"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol\":{\"keccak256\":\"0x3c9a42b988127a0ac1314c3190c9100fdc7964898f77a75da733fb81a696d672\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4fc10f5a39a82cdc32e092b9933b895ca6df5dcc7ad8cf97e65291d0c995532b\",\"dweb:/ipfs/QmWuEppwgLpFd6R22dZaSnP7Y2xJDrh6c7eUxPXvvhi8mk\"]},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://795c6d0e2058529f2b9e190207bb6dbe208cf793e70cf99999d5bb39029a3887\",\"dweb:/ipfs/QmTDtUmqY2BwMZjqLPEtz4k1c4DLhEt8p2rSAMN9wNJKQd\"]},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ecc8ae8f1f85e11b6f749e147ac298d1d66879f3bfe3d4518b919f7b6151a73b\",\"dweb:/ipfs/QmYXZfcnCd1N1AaxUTfNQjNHJXAAfVGvae6Bte1SfTCKEz\"]},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6b81dcc816857a9d981386f6d8de49198420ee41cdc0ecade366ab412174d03\",\"dweb:/ipfs/QmV2vznMT6m9qo3pFMAWi3Nz3UDhwesgwFxeXe6Tod3v8A\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\",\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\"]},\"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x73bef0a5dec3efde8183c4858d90f683ed2771656c4329647b4d5b0f89498fd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef58fce3c601850d4137223f8df56635f7fa3691e42bd6e2e296747f821a2540\",\"dweb:/ipfs/QmSiJPHcY399BPDgimEosXzsW38MSXPTCxqT1ibbF4AdoZ\"]},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf05f7d8655dea90b54c9ec8d24c1e0cd9205c6f9ab9d0ff98cce01ab3988a9e\",\"dweb:/ipfs/QmTKeDUTXYD98M6heQtHwEZUP9A48pFWgU5YzMSLEvDpRq\"]},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://330001e598d2648c07a4e4c0276ed4822a24533dd6f5ad288738d8bee3c86404\",\"dweb:/ipfs/QmddZvc39hJ9nm2jvnxbjjj8v95XWnn8G4CEzuFxzWCHH6\"]},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7dd71504d010833b1c9b38c2489f85408750fa32a2752bd66ba97ace27ffffa6\",\"dweb:/ipfs/QmSfNDJQua2ErfXFj3ce1DGhdpBCQAXRW4RLnZmWJp4iNi\"]},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5bb01c6cfdb83f8574fabfc711cc8fd8a8b19f5c2cbc5821a4d4883032b2b70a\",\"dweb:/ipfs/QmdtjTyjLq7v4nAW5pU4ginva8buJCXMzcaVjbaV9Ae55n\"]},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b35890f8173983e3ac230df020cc51d79e36c53a7691a122b932bf780c6a20a\",\"dweb:/ipfs/QmbNkWijJ9xK9b1TrFXgmVvMxoxs3j1Hev6XLt3P6UBSsR\"]},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"keccak256\":\"0x8fceb04eec1c1b32bea097a019b57e9422c31fa2e020e9957db91d5b03edb1bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f404c0791e24c10e8f0bc970a0114a776281e7052a1264c1d2a7eca3b01461ef\",\"dweb:/ipfs/Qmchc8HAAWGgDRh4veYW5Ne8XsKdTaWTRaD3zN5Zk3DeJe\"]},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"keccak256\":\"0x8b5d108d1e027792fd3494dda7feb79937b5bb68cec82109f3ce69fe1f01c59a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b0f9505e14c28ad986741221e3ee5b5942c312d57ee756604aaa6df7a836b192\",\"dweb:/ipfs/QmTD1xnmFmmNskFGubBthbXPxt1JxrtiZxruEKE1JMpHjW\"]},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"keccak256\":\"0xa93d432fd4012eb69625b23fc71744f0d28dbb1acf58165b68647beb18f5baa2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87551f89e3a1649d24ac7840dd17e204f913e413914e22763b1ef5d33dde77b0\",\"dweb:/ipfs/QmZpm54oDNZNUxsaAgFBf5Z6JTKnmcrodJAk6ngEwiNtXq\"]},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40f24037fac24f9671d6b31c65ad92b8e1f19457558511b2ce605a2ed564c108\",\"dweb:/ipfs/QmYJVwBmqwyutfqvQxLnvaK7HXHtVqKsKWNtWNYQqjsSEV\"]},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://64d413379346fce68d8ed76bbe0cd6944ca04e54d544a7d34507347d5c36c051\",\"dweb:/ipfs/Qmaae59exeAyHwEhTqhpbp8oCAejvmA5GJhyxTnixbrXLL\"]},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33a176237c1113ac879abcc2a8d28fd1ea95b447fa53f8c43ff745198db2bead\",\"dweb:/ipfs/QmbYCtCh5EMSD4Mz5c8adCPrb5DGo2GWU3BMPAGJR2FcY3\"]},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2924c6587b528fdecd101443271472ddc497cc6f4d44d61f1b62620dbce03897\",\"dweb:/ipfs/QmW6udkwDbXuJT6Pdk2KA7y6NzTm8UMkvTFFL666rd3pSD\"]},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2eb634f6538f15df60dc65073de69c08a0bd341f08184fd0bc71b411ea727223\",\"dweb:/ipfs/QmReywWzzNM93bV3LjJJpPEhiLXZUVuTa28pZ5KDkF3U8X\"]},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"keccak256\":\"0x7ade2e0f39574183261011013a7eebe7a06abad9b8585e48d132a4579c2334bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://69672cdfb3befaa19f5a50b986028cc93dc07359b6dad680f467715de3425162\",\"dweb:/ipfs/QmWMH7UyGn5E9u4xX2tYuZBEsexLaKxKPgrwu9xKkHzUDi\"]},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5afbdbfb097cc777df17a25f5c936cb136bce96fc6d9f6f42d104ed7dfd9dc87\",\"dweb:/ipfs/Qme6vhxmfX5oYCBtY9bSLx4Y2WktErkupJZSqGbL37GeBx\"]},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17342ba01715b36926f06f308976491c709e8710215fe011854c9867e5a5f9e5\",\"dweb:/ipfs/QmUvbWfPNC8Loygtgf6QDn1KZyJdSQwgGDFoj58eJ2YKaV\"]},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"keccak256\":\"0x73efab7636308c9dbc8dd54db91535dd0f8915624ffe1547f545f5ba617dc126\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3600eb1193ad4582ac979493d42b0dce65d4aeb2706677b465da266855b7efa\",\"dweb:/ipfs/QmddXvqbsb81i4F2Wybb3Bnjdjkx7n1Q7mRrXT4g4i4nGH\"]},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0846a9543a1d93c28d74164b18489e3b4a9f56426db431b1487a494a7fc07a27\",\"dweb:/ipfs/QmcitvWqvnYdt6i6SP5DWwB92H8bYpdbBeP7d8mdV2isRA\"]},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86e9151e83e7d5d8834d6f878961a0a86370feaf17fead696fc9a2f2e0365409\",\"dweb:/ipfs/QmdfjzMPSA71x4AQEDm9w1bhSo16Zyky1FuLiSeB8vxwFV\"]},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9826768c7f5c5423d9bbf49be50bd21ed2db5374ee47648150e50aa10e3c0151\",\"dweb:/ipfs/Qmex4xCv4MFRfCxMNZzzsKXYAFxbYWQRFsbaHiJfDTozYG\"]},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb8c814ee6e5d212551da934ead2ac847f05a57757465bd4fda124b34a44089e\",\"dweb:/ipfs/QmdsXTw92ow7gnDyCjReMFdBZArYFBFCsKdhQzE7YG3ENp\"]},\"@rarible/lib-part/contracts/LibPart.sol\":{\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://447b449f7f986ecfdea10cbc96ae276877102866353b4f8410fec0bdb357d5ae\",\"dweb:/ipfs/QmatbYwMc1UXCGGH1D9fvgLbLPNdgzBVafYW84B1nJJiRr\"]},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://21f162bc4d1ee1c5d0184c09d9d367882bae5f737d1a13bd53acf96a8e14f36d\",\"dweb:/ipfs/Qmcv1Z6P8ikAN6L8QLodA5VtYKEykgmjKmPjs6e562DoMo\"]},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3463cea638e616b682f97f288566d8f9bf0c255c8c3c71c3f856faaa1a101fa9\",\"dweb:/ipfs/QmWj1KRmFNTmAMBQYFbjCQ7thD2kpb7V2QDSZzPMEt8QQv\"]},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://941831530cfc15efb8d92dc2f6ea93da4fc3ddc2011752e4ebdeffe4579e6a11\",\"dweb:/ipfs/QmasfHCQ845qg6UMoTMciYU7CScKowMm4fABmCLxpVBnmW\"]},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"keccak256\":\"0xe0ea605e62d7b65dae93684b5102383b3b9fec0ade21efca0f2831d468738f50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://65c7e1466159726bcca91b29df67786cfcaa5eb27991fd52675b8513e1c8ce22\",\"dweb:/ipfs/Qma5X4ApFihKGYiutkd8Nie4Vd9M31khna52YGy9seEhu9\"]},\"@rarible/royalties/contracts/IERC2981.sol\":{\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf92b14151928d1ec8c9e62486dd6d738e9dffdf8968f9165ff7bec3b8efe4d3\",\"dweb:/ipfs/QmPf8EJiaGceT2Jd77sgcves2mDZkznPWgqmgv1NEzrP3A\"]},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85090a0a89cb7b19d35cdd47a6695358bebb507a37f94ae9cd24c44ae78aff4b\",\"dweb:/ipfs/QmSFdveYMMDcU45JPeQSMkgwPz3QPNAab19YaD2Z6infS7\"]},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bb1b575738f2ebb531b3156e86915d4222377e6b62968e911e92a82267222a0\",\"dweb:/ipfs/QmQtnjU8QNgPKspPwHR8bD8zY76ygcztEuQAaKWPUimN7e\"]},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c69e8d4549f5ae6e74206accf89dcd85c24fc043628bcb0bc2cc35e5a0a072e9\",\"dweb:/ipfs/Qmacor2RvcJKqfJG7ewvMcGkeyyhtJCkW8npDNdUE8hqwx\"]},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://84d7a5e09f1e1232fbc526c8584e3e689072e2f731e4cb55edbfb92b5bc8b584\",\"dweb:/ipfs/QmbCTLg22HRW1fcJq9NLVF5DaPJVQFEGzPmCDmNjGTbC6i\"]},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://912ea032af419d8bee48bdeace6298c8d5eabf04dfa54e85e2b90a5a89a0b406\",\"dweb:/ipfs/QmfHuuWwE8FbTuu73GQVAnHKjb1e6QEQj7W1jtuJeR2qvY\"]},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"keccak256\":\"0x26817b8e94229124aa1298725cc122d23ee26ca5d63effc935910aa962fe4a83\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://10fccbc38e88c4c919fe0616a946c7a18aa91d3f610f0bc5b39de945afb87d2c\",\"dweb:/ipfs/Qmd6Cmbj6frV7rhDVD85szS2y1fRygGZxagQv5ETSigwbZ\"]},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"keccak256\":\"0xea639616c66696b5ae9b278d3c6c9a85839bb5e815a4db046b4fd0225cd86625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c396a4f56d9fbd2ab50325e1d02f440972cc2fdc6e839dcdc7b3a97ee0dac62\",\"dweb:/ipfs/QmNziWD58oNGi1w7uahhXGLNzUELdCYRRBpx2XV4pVAFvA\"]},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7095c7ef181c65fae6376be15585633ce8c48c80950cc2a36c64574ee3c2b70e\",\"dweb:/ipfs/QmeB7Ysoqw9jZSkXBWa9ngm2SCQkpzc84ZUpX1mvbEWhdg\"]},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7205214325602f627f3c1ded6e33c86c6efa9f90ff2375865b2b9b4e5e22ad6b\",\"dweb:/ipfs/QmZZRcygh45GkWt723dCvaKDkRHo3SPLz3NPi3zFqA91by\"]},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"keccak256\":\"0xa547c45c10324eb0ffa9bcc246406a88f9a07cbf198c5df5832544f27495b0e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://23a0bc9507299ef10619995307a46f04c2cddf327279fcc43ce93bc3730a5345\",\"dweb:/ipfs/QmY6A2bkDEau4znQhUC9BZbMQhrHJDJ7786ChGL49sp6L6\"]},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a89218f4574b6819325391df194e287b07c7bf0d8f5f33713cf8f1ea642ab11\",\"dweb:/ipfs/QmRRWsL3jn8y7wRQdJehQU9cFo8UFzDWRf3MpzR2TKb5Fd\"]},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b739d82f1a1f9936a6cc41559f406b44b2fa1a62c12195e905c85260b7b50505\",\"dweb:/ipfs/QmNWDoTA13yCb2gvrmNWwY71nVZzPAinR6418dsVzo1TDg\"]},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"keccak256\":\"0x2fce5fa6025c24a87072eed4cec6ff8e9172ec7b72ca211286904847adf4a324\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e93b66821936f4061d9faae5b7386e7c9d051a03bacca6ace08376b80ad4872\",\"dweb:/ipfs/Qmb7h6tARsjUF4qzwRY2oqHT8iC5kjWp6NeYuw4x4Aitrb\"]},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"keccak256\":\"0x23a035508922fbe29dfb91796175b391943f830eead313134142a01bd776f848\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cddd2fb58f917d45b606a241c404614f378f7c9ed2594040f13e702fff75bee1\",\"dweb:/ipfs/QmYjWY5EirJnF9WTtPn5nLHyUy4eECcYPuWMx83RJLw9TR\"]},\"project:/contracts/RaribleExchangeWrapperUpgradeable.sol\":{\"keccak256\":\"0x763df21d1e3ad39912690131fad13c69200fb0bf81746b9d3d61d1dbeea70b33\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://250c9aadce1716a665c0fab695c85de2681f1b0a32d7b94a58d53bb5403360d8\",\"dweb:/ipfs/QmeCsL94a2GWBvzYkCJS1XjkE227yubeBEGtAPNjyaVU7R\"]},\"project:/contracts/interfaces/IBlur.sol\":{\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce916da9aeccb7bae0d1e690252865336511a1f23e34a9d1f42bcd67693f8d09\",\"dweb:/ipfs/QmY47ArsEfAEWDVFFLYSVb4gDvRZS5FEK8Ao1kqhsH714b\"]},\"project:/contracts/interfaces/IExchangeV2.sol\":{\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f635e88ec9ac31039279a810d7845cf6a5263c9fdca3875308148329dd4c2443\",\"dweb:/ipfs/Qmb25o6eBbdfLVasGA6m7LPj2gZrB2hFDqPMNkL5ypt8xj\"]},\"project:/contracts/interfaces/ILooksRare.sol\":{\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0b56d309a9b7ae7ccf3948624b9990e9834a12fb7e4a38d51ef10da5c2336996\",\"dweb:/ipfs/QmdVgwuJM2qSAVEJx8AmvTYKPUhweuQyHFKrPvPznW4gZb\"]},\"project:/contracts/interfaces/ISeaPort.sol\":{\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6345c81e25312647eae143b804cc31024bf3398ee5d33fe03eceae171b4d0576\",\"dweb:/ipfs/QmQgiS1HYaXEBgUiv7kp2WgUKwVfsD6RzHFRE6XYuWkoD4\"]},\"project:/contracts/interfaces/IWyvernExchange.sol\":{\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddcb31937ec345147b0ed8160bb0818b78d8e8087e563696d9dd3078f66b59e\",\"dweb:/ipfs/QmRL94Nzr27Tp6cEvMu1udApJryTAVmrpvZvzHHLYmMiAv\"]},\"project:/contracts/interfaces/Ix2y2.sol\":{\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9956b3003332c0bd50bf0fc5d3cde4437b40132a14d98711bfab11309cdb6b24\",\"dweb:/ipfs/QmeDkSTk45vHsq6yNcrCL5q43i9ti79QebX9ehFi2MrA1i\"]},\"project:/contracts/libraries/LibLooksRare.sol\":{\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df8f176b8c3b626c1155ff63cdee5530d12bf1eedbae3de9a8b5e1919f0acc97\",\"dweb:/ipfs/QmSKCwvyvEUTKFfobLthB6RVMYQQpVCjv7Q3yPcdeBpfo1\"]},\"project:/contracts/libraries/LibSeaPort.sol\":{\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b5e2348cde48f62ab2c21609bd0b805fe3a02ed8ab6ebe336707f305fda87b3c\",\"dweb:/ipfs/QmNShKsK7eA89BXk2b73i372mUCesqSCQvMyGSkHT1F9uG\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50615413806100206000396000f3fe6080604052600436106101695760003560e01c806386dcbd27116100d1578063bd4486ee1161008a578063f23a6e6111610064578063f23a6e611461039e578063f2fde38b146103be578063f66ac0cb146103de578063fc40c9c7146103f357610170565b8063bd4486ee1461035f578063c9f0a2fa14610374578063df6c25581461038957610170565b806386dcbd27146102cd5780638da5cb5b146102ed5780639110c77714610302578063a05f32dc14610317578063b94ee3321461032c578063bc197c811461033f57610170565b80635c975abb116101235780635c975abb146102395780635cdb43671461024e5780635ea1e4c914610270578063715018a6146102855780637dfdd89b1461029a57806386496e7a146102ba57610170565b80628534f71461017557806301ffc9a7146101a0578063150b7a02146101cd578063349d6a85146101fa5780633733b82b1461020f5780633fc8cef31461022457610170565b3661017057005b600080fd5b34801561018157600080fd5b5061018a610408565b6040516101979190614a31565b60405180910390f35b3480156101ac57600080fd5b506101c06101bb366004614262565b610418565b6040516101979190614aba565b3480156101d957600080fd5b506101ed6101e8366004613dfb565b61043b565b6040516101979190614ac5565b34801561020657600080fd5b5061018a61044b565b34801561021b57600080fd5b5061018a61045b565b34801561023057600080fd5b5061018a61046b565b34801561024557600080fd5b506101c061047b565b34801561025a57600080fd5b5061026e61026936600461427e565b610485565b005b34801561027c57600080fd5b5061018a6107b8565b34801561029157600080fd5b5061026e6107c8565b3480156102a657600080fd5b5061026e6102b5366004613eca565b610874565b61026e6102c836600461441c565b610b12565b3480156102d957600080fd5b5061026e6102e8366004613f8a565b610cfc565b3480156102f957600080fd5b5061018a610e1c565b34801561030e57600080fd5b5061018a610e2b565b34801561032357600080fd5b5061018a610e3b565b61026e61033a366004614196565b610e4b565b34801561034b57600080fd5b506101ed61035a366004613d52565b6110fc565b34801561036b57600080fd5b5061018a61110d565b34801561038057600080fd5b5061018a61111d565b34801561039557600080fd5b5061018a61112d565b3480156103aa57600080fd5b506101ed6103b9366004613e64565b61113d565b3480156103ca57600080fd5b5061026e6103d9366004613d36565b61114e565b3480156103ea57600080fd5b5061018a611251565b3480156103ff57600080fd5b5061018a611261565b610161546001600160a01b031681565b6001600160e01b0319811660009081526097602052604090205460ff165b919050565b630a85bd0160e11b949350505050565b610168546001600160a01b031681565b610166546001600160a01b031681565b61016a546001600160a01b031681565b61012d5460ff1690565b61048d611271565b6001600160a01b031661049e610e1c565b6001600160a01b0316146104e7576040805162461bcd60e51b815260206004820181905260248201526000805160206153be833981519152604482015290519081900360640190fd5b6001600160a01b0381166105165760405162461bcd60e51b815260040161050d90614c85565b60405180910390fd5b600182600a81111561052457fe5b141561054b5761015f80546001600160a01b0319166001600160a01b038316179055610775565b600082600a81111561055957fe5b14156105805761016080546001600160a01b0319166001600160a01b038316179055610775565b600282600a81111561058e57fe5b14156105b55761016180546001600160a01b0319166001600160a01b038316179055610775565b600382600a8111156105c357fe5b14156105ea5761016280546001600160a01b0319166001600160a01b038316179055610775565b600482600a8111156105f857fe5b141561061f5761016380546001600160a01b0319166001600160a01b038316179055610775565b600582600a81111561062d57fe5b14156106545761016480546001600160a01b0319166001600160a01b038316179055610775565b600682600a81111561066257fe5b14156106895761016580546001600160a01b0319166001600160a01b038316179055610775565b600782600a81111561069757fe5b14156106be5761016680546001600160a01b0319166001600160a01b038316179055610775565b600882600a8111156106cc57fe5b14156106f35761016780546001600160a01b0319166001600160a01b038316179055610775565b600982600a81111561070157fe5b14156107285761016880546001600160a01b0319166001600160a01b038316179055610775565b600a82600a81111561073657fe5b141561075d5761016980546001600160a01b0319166001600160a01b038316179055610775565b60405162461bcd60e51b815260040161050d90614f39565b806001600160a01b031682600a81111561078b57fe5b6040517f90b0e35c110f9f250b584328e42e7eb7c007b77bf8c081c5aaef84c63a121efc90600090a35050565b610164546001600160a01b031681565b6107d0611271565b6001600160a01b03166107e1610e1c565b6001600160a01b03161461082a576040805162461bcd60e51b815260206004820181905260248201526000805160206153be833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff168061088d575061088d611275565b8061089b575060005460ff16155b6108d65760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015610901576000805460ff1961ff0019909116610100171660011790555b610909611286565b610911611338565b6109196113cd565b61092161146a565b845161015f80546001600160a01b03199081166001600160a01b039384161790915560208701516101608054831691841691909117905560408701516101618054831691841691909117905560608701516101628054831691841691909117905560808701516101638054831691841691909117905560a08701516101648054831691841691909117905560c08701516101658054831691841691909117905560e08701516101668054831691841691909117905561010087015161016780548316918416919091179055610120870151610168805483169184169190911790556101408701516101698054831691841691909117905561016a805490911691861691909117905560005b8351811015610aef5761016a546001600160a01b031615610ae75761016a5484516001600160a01b039091169063095ea7b390869084908110610a6b57fe5b60200260200101516000196040518363ffffffff1660e01b8152600401610a93929190614aa1565b602060405180830381600087803b158015610aad57600080fd5b505af1158015610ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae59190614246565b505b600101610a2c565b50610af98261114e565b8015610b0b576000805461ff00191690555b5050505050565b610b1a61047b565b15610b5f576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000610b6a84611507565b90508015610c005761016a546001600160a01b03166323b872dd610b8c611271565b30846040518463ffffffff1660e01b8152600401610bac93929190614a45565b602060405180830381600087803b158015610bc657600080fd5b505af1158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190614246565b505b6000610c0f85604001516115d2565b90506000808080846001811115610c2257fe5b1415610c5357610c338860006115ee565b91945092509050610c448288612464565b610c4e8187612464565b610ca5565b6001846001811115610c6157fe5b1415610c8d57610c7288600061248f565b91945092509050610c838288612894565b610c4e8187612894565b60405162461bcd60e51b815260040161050d90614cbc565b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610cd49190614aba565b60405180910390a1610ce4612936565b8415610cf257610cf2612947565b5050505050505050565b610d04611271565b6001600160a01b0316610d15610e1c565b6001600160a01b031614610d5e576040805162461bcd60e51b815260206004820181905260248201526000805160206153be833981519152604482015290519081900360640190fd5b60005b81811015610e175761016a546001600160a01b031663095ea7b3848484818110610d8757fe5b9050602002016020810190610d9c9190613d36565b6000196040518363ffffffff1660e01b8152600401610dbc929190614aa1565b602060405180830381600087803b158015610dd657600080fd5b505af1158015610dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0e9190614246565b50600101610d61565b505050565b6033546001600160a01b031690565b610163546001600160a01b031681565b610160546001600160a01b031681565b610e5361047b565b15610e98576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60008060008060008060005b8a51811015610ed557610ec98b8281518110610ebc57fe5b6020026020010151611507565b90910190600101610ea4565b508015610f6a5761016a546001600160a01b03166323b872dd610ef6611271565b30846040518463ffffffff1660e01b8152600401610f1693929190614a45565b602060405180830381600087803b158015610f3057600080fd5b505af1158015610f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f689190614246565b505b60005b8a51811015611094576000610f988c8381518110610f8757fe5b6020026020010151604001516115d2565b90506000808080846001811115610fab57fe5b1415610ff257610fce8f8681518110610fc057fe5b60200260200101518d6115ee565b91945092509050610fdf8b83612a5b565b9a50610feb8a82612a5b565b9950611043565b600184600181111561100057fe5b1415610c8d576110238f868151811061101557fe5b60200260200101518d61248f565b919450925090506110348983612a5b565b98506110408882612a5b565b97505b868061104c5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc08360405161107d9190614aba565b60405180910390a150505050806001019050610f6d565b50816110b25760405162461bcd60e51b815260040161050d90614f02565b6110bc868a612464565b6110c68589612464565b6110d0848a612894565b6110da8389612894565b6110e2612936565b80156110f0576110f0612947565b50505050505050505050565b63bc197c8160e01b95945050505050565b610165546001600160a01b031681565b61015f546001600160a01b031681565b610167546001600160a01b031681565b63f23a6e6160e01b95945050505050565b611156611271565b6001600160a01b0316611167610e1c565b6001600160a01b0316146111b0576040805162461bcd60e51b815260206004820181905260248201526000805160206153be833981519152604482015290519081900360640190fd5b6001600160a01b0381166111f55760405162461bcd60e51b81526004018080602001828103825260268152602001806153496026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b610169546001600160a01b031681565b610162546001600160a01b031681565b3390565b600061128030612abc565b15905090565b600054610100900460ff168061129f575061129f611275565b806112ad575060005460ff16155b6112e85760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015611313576000805460ff1961ff0019909116610100171660011790555b61131b612ac2565b611323612b62565b8015611335576000805461ff00191690555b50565b600054610100900460ff16806113515750611351611275565b8061135f575060005460ff16155b61139a5760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff161580156113c5576000805460ff1961ff0019909116610100171660011790555b611323612ac2565b600054610100900460ff16806113e657506113e6611275565b806113f4575060005460ff16155b61142f5760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff1615801561145a576000805460ff1961ff0019909116610100171660011790555b611462612c5b565b6113c5612cf8565b600054610100900460ff16806114835750611483611275565b80611491575060005460ff16155b6114cc5760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff161580156114f7576000805460ff1961ff0019909116610100171660011790555b6114ff612ac2565b611323612d95565b60008060009050600061151d84604001516115d2565b9050600181600181111561152d57fe5b14156115cb576020840151604085015192810192600091829161154f91612e41565b91509150808285010193506000611573876060015188604001518960000151612e72565b91505060005b81518110156115c657600060a083838151811061159257fe5b6020026020010151901c905060006115b7828b60200151612f2b90919063ffffffff16565b97909701965050600101611579565b505050505b5092915050565b6000603082901c61ffff1660018111156115e857fe5b92915050565b600080600080600061160d876060015188604001518960000151612e72565b6020890151919350915060028851600a81111561162657fe5b14156116da57610161546040516000916001600160a01b031690839061164d908790614a15565b60006040518083038185875af1925050503d806000811461168a576040519150601f19603f3d011682016040523d82523d6000602084013e61168f565b606091505b5050905087156116b757806116b25760008060009650965096505050505061245d565b6116d4565b806116d45760405162461bcd60e51b815260040161050d90614d22565b5061242b565b60018851600a8111156116e957fe5b14156117925761015f546040516000916001600160a01b0316908390611710908790614a15565b60006040518083038185875af1925050503d806000811461174d576040519150601f19603f3d011682016040523d82523d6000602084013e611752565b606091505b50509050871561177557806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614b44565b60008851600a8111156117a157fe5b141561184a57610160546040516000916001600160a01b03169083906117c8908790614a15565b60006040518083038185875af1925050503d8060008114611805576040519150601f19603f3d011682016040523d82523d6000602084013e61180a565b606091505b50509050871561182d57806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614bb2565b60038851600a81111561185957fe5b1415611c66576000838060200190518101906118759190614472565b905087156118f8576101625460405163357a150b60e01b81526001600160a01b039091169063357a150b9084906118b0908590600401614f9e565b6000604051808303818588803b1580156118c957600080fd5b505af1935050505080156118db575060015b6118f35760008060009650965096505050505061245d565b61195e565b6101625460405163357a150b60e01b81526001600160a01b039091169063357a150b90849061192b908590600401614f9e565b6000604051808303818588803b15801561194457600080fd5b505af1158015611958573d6000803e3d6000fd5b50505050505b60005b816020015151811015611c5f5760008260200151828151811061198057fe5b60200260200101516020015190506000836020015183815181106119a057fe5b60200260200101516040015190506000846000015183815181106119c057fe5b6020026020010151610100015182815181106119d857fe5b60200260200101516020015190506000856000015184815181106119f857fe5b602002602001015160e0015151118015611a2e5750600085602001518581518110611a1f57fe5b602002602001015160c0015151115b15611a7457611a748186602001518681518110611a4757fe5b602002602001015160c0015187600001518681518110611a6357fe5b602002602001015160e00151612f43565b8451805184908110611a8257fe5b60200260200101516080015160011415611b5757600081806020019051810190611aac91906140d5565b905060005b8151811015611b50576000828281518110611ac857fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611aee611271565b84602001516040518463ffffffff1660e01b8152600401611b1193929190614a45565b600060405180830381600087803b158015611b2b57600080fd5b505af1158015611b3f573d6000803e3d6000fd5b505060019093019250611ab1915050565b5050611c51565b8451805184908110611b6557fe5b60200260200101516080015160021415611c3957600081806020019051810190611b8f9190613ff8565b905060005b8151811015611b50576000828281518110611bab57fe5b6020026020010151905080600001516001600160a01b031663f242432a30611bd1611271565b846020015185604001516040518563ffffffff1660e01b8152600401611bfa9493929190614a69565b600060405180830381600087803b158015611c1457600080fd5b505af1158015611c28573d6000803e3d6000fd5b505060019093019250611b94915050565b60405162461bcd60e51b815260040161050d90614e31565b505050806001019050611961565b505061242b565b60048851600a811115611c7557fe5b1415611e9457600080600085806020019051810190611c94919061453a565b9250925092508915611d1f5761016354604051635a72594b60e11b81526001600160a01b039091169063b4e4b296908690611cd59087908790600401615125565b6000604051808303818588803b158015611cee57600080fd5b505af193505050508015611d00575060015b611d1a57600080600098509850985050505050505061245d565b611d87565b61016354604051635a72594b60e11b81526001600160a01b039091169063b4e4b296908690611d549087908790600401615125565b6000604051808303818588803b158015611d6d57600080fd5b505af1158015611d81573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611e165781604001516001600160a01b03166342842e0e30611dbc611271565b85608001516040518463ffffffff1660e01b8152600401611ddf93929190614a45565b600060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b50505050611e8c565b6001600160e01b0319811663025ceed960e61b1415611e745781604001516001600160a01b031663f242432a30611e4b611271565b85608001518660a001516040518563ffffffff1660e01b8152600401611ddf9493929190614a69565b60405162461bcd60e51b815260040161050d90614e9f565b50505061242b565b60058851600a811115611ea357fe5b1415611f4c57610164546040516000916001600160a01b0316908390611eca908790614a15565b60006040518083038185875af1925050503d8060008114611f07576040519150601f19603f3d011682016040523d82523d6000602084013e611f0c565b606091505b505090508715611f2f57806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614dfa565b60068851600a811115611f5b57fe5b141561200457610165546040516000916001600160a01b0316908390611f82908790614a15565b60006040518083038185875af1925050503d8060008114611fbf576040519150601f19603f3d011682016040523d82523d6000602084013e611fc4565b606091505b505090508715611fe757806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614b7b565b60078851600a81111561201357fe5b14156120bc57610166546040516000916001600160a01b031690839061203a908790614a15565b60006040518083038185875af1925050503d8060008114612077576040519150601f19603f3d011682016040523d82523d6000602084013e61207c565b606091505b50509050871561209f57806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614e68565b60088851600a8111156120cb57fe5b14156122a3576000806000858060200190518101906120ea91906143a8565b92509250925089156121755761016754604051639a1fc3a760e01b81526001600160a01b0390911690639a1fc3a790869061212b9087908790600401614f70565b6000604051808303818588803b15801561214457600080fd5b505af193505050508015612156575060015b61217057600080600098509850985050505050505061245d565b6121dd565b61016754604051639a1fc3a760e01b81526001600160a01b0390911690639a1fc3a79086906121aa9087908790600401614f70565b6000604051808303818588803b1580156121c357600080fd5b505af11580156121d7573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b141561223c578251606001516001600160a01b03166342842e0e30612213611271565b8651608001516040516001600160e01b031960e086901b168152611ddf93929190600401614a45565b6001600160e01b0319811663025ceed960e61b1415611e74578251606001516001600160a01b031663f242432a30612272611271565b8651608081015160a0909101516040516001600160e01b031960e087901b168152611ddf9493929190600401614a69565b60098851600a8111156122b257fe5b141561235b57610168546040516000916001600160a01b03169083906122d9908790614a15565b60006040518083038185875af1925050503d8060008114612316576040519150601f19603f3d011682016040523d82523d6000602084013e61231b565b606091505b50509050871561233e57806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614d8e565b600a8851600a81111561236a57fe5b141561241357610169546040516000916001600160a01b0316908390612391908790614a15565b60006040518083038185875af1925050503d80600081146123ce576040519150601f19603f3d011682016040523d82523d6000602084013e6123d3565b606091505b5050905087156123f657806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614c4e565b60405162461bcd60e51b815260040161050d90614c20565b612439828960200151612fd4565b60008061244e8a604001518b60200151612e41565b60019950909750955050505050505b9250925092565b60008211801561247c57506001600160a01b03811615155b1561248b5761248b818361305d565b5050565b60008060008060006124ae876060015188604001518960000151612e72565b909250905060028751600a8111156124c257fe5b141561257357610161546040516000916001600160a01b0316906124e7908590614a15565b6000604051808303816000865af19150503d8060008114612524576040519150601f19603f3d011682016040523d82523d6000602084013e612529565b606091505b505090508615612550578061254b57600080600095509550955050505061245d565b61256d565b8061256d5760405162461bcd60e51b815260040161050d90614dc5565b5061285f565b60008751600a81111561258257fe5b141561262857610160546040516000916001600160a01b0316906125a7908590614a15565b6000604051808303816000865af19150503d80600081146125e4576040519150601f19603f3d011682016040523d82523d6000602084013e6125e9565b606091505b50509050861561260b578061254b57600080600095509550955050505061245d565b8061256d5760405162461bcd60e51b815260040161050d90614be9565b60068751600a81111561263757fe5b14156126dd57610165546040516000916001600160a01b03169061265c908590614a15565b6000604051808303816000865af19150503d8060008114612699576040519150601f19603f3d011682016040523d82523d6000602084013e61269e565b606091505b5050905086156126c0578061254b57600080600095509550955050505061245d565b8061256d5760405162461bcd60e51b815260040161050d90614ada565b60098751600a8111156126ec57fe5b141561279257610168546040516000916001600160a01b031690612711908590614a15565b6000604051808303816000865af19150503d806000811461274e576040519150601f19603f3d011682016040523d82523d6000602084013e612753565b606091505b505090508615612775578061254b57600080600095509550955050505061245d565b8061256d5760405162461bcd60e51b815260040161050d90614b0f565b600a8751600a8111156127a157fe5b141561284757610169546040516000916001600160a01b0316906127c6908590614a15565b6000604051808303816000865af19150503d8060008114612803576040519150601f19603f3d011682016040523d82523d6000602084013e612808565b606091505b50509050861561282a578061254b57600080600095509550955050505061245d565b8061256d5760405162461bcd60e51b815260040161050d90614d59565b60405162461bcd60e51b815260040161050d90614cf3565b61286d8188602001516130f5565b60008061288289604001518a60200151612e41565b60019b919a5098509650505050505050565b6000821180156128ac57506001600160a01b03811615155b1561248b5761016a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906128e49084908690600401614aa1565b602060405180830381600087803b1580156128fe57600080fd5b505af1158015612912573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e179190614246565b47801561133557611335338261305d565b61016a546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612979903090600401614a31565b60206040518083038186803b15801561299157600080fd5b505afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614627565b905080156113355761016a546001600160a01b031663a9059cbb6129eb611271565b836040518363ffffffff1660e01b8152600401612a09929190614aa1565b602060405180830381600087803b158015612a2357600080fd5b505af1158015612a37573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248b9190614246565b600082820183811015612ab5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3b151590565b600054610100900460ff1680612adb5750612adb611275565b80612ae9575060005460ff16155b612b245760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015611323576000805460ff1961ff0019909116610100171660011790558015611335576000805461ff001916905550565b600054610100900460ff1680612b7b5750612b7b611275565b80612b89575060005460ff16155b612bc45760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015612bef576000805460ff1961ff0019909116610100171660011790555b6000612bf9611271565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611335576000805461ff001916905550565b600054610100900460ff1680612c745750612c74611275565b80612c82575060005460ff16155b612cbd5760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015612ce8576000805460ff1961ff0019909116610100171660011790555b6113236301ffc9a760e01b61317e565b600054610100900460ff1680612d115750612d11611275565b80612d1f575060005460ff16155b612d5a5760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015612d85576000805460ff1961ff0019909116610100171660011790555b611323630271189760e51b61317e565b600054610100900460ff1680612dae5750612dae611275565b80612dbc575060005460ff16155b612df75760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015612e22576000805460ff1961ff0019909116610100171660011790555b61012d805460ff191690558015611335576000805461ff001916905550565b60008061ffff601085901c8116908516612e5b8583612f2b565b612e658683612f2b565b9350935050509250929050565b6060806000602085901c61ffff166001811115612e8b57fe5b905060606000826001811115612e9d57fe5b1415612eaf578693509150612f239050565b6001826001811115612ebd57fe5b1415612f0b57600087806020019051810190612ed991906142b4565b9050612ee486613202565b15612eff578060000151816020015194509450505050612f23565b5193509150612f239050565b60405162461bcd60e51b815260040161050d90614ecb565b935093915050565b6000612ab5612710612f3d8585613254565b906132ad565b8151835114612f5157600080fd5b8051835114612f5f57600080fd5b60005b8351811015612fce57818181518110612f7757fe5b01602001516001600160f81b03191615612fc657828181518110612f9757fe5b602001015160f81c60f81b848281518110612fae57fe5b60200101906001600160f81b031916908160001a9053505b600101612f62565b50505050565b60005b8251811015610e17576000838281518110612fee57fe5b6020026020010151111561305557600083828151811061300a57fe5b60200260200101519050600060a085848151811061302457fe5b6020026020010151901c905060006130458286612f2b90919063ffffffff16565b90506130518184612464565b5050505b600101612fd7565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146130a8576040519150601f19603f3d011682016040523d82523d6000602084013e6130ad565b606091505b5050905080610e17576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b8251811015610e1757600083828151811061310f57fe5b6020026020010151111561317657600083828151811061312b57fe5b60200260200101519050600060a085848151811061314557fe5b6020026020010151901c905060006131668286612f2b90919063ffffffff16565b90506131728184612894565b5050505b6001016130f8565b6001600160e01b031980821614156131dd576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152609760205260409020805460ff19166001179055565b6000600582600a81111561321257fe5b14806132295750600482600a81111561322757fe5b145b8061323f5750600782600a81111561323d57fe5b145b1561324c57506001610436565b506000919050565b600082613263575060006115e8565b8282028284828161327057fe5b0414612ab55760405162461bcd60e51b815260040180806020018281038252602181526020018061539d6021913960400191505060405180910390fd5b6000808211613303576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161330c57fe5b049392505050565b80356104368161530f565b80516104368161530f565b600082601f83011261333a578081fd5b8135602061334f61334a836152a5565b615282565b828152818101908583018385028701840188101561336b578586fd5b855b858110156133925781356133808161530f565b8452928401929084019060010161336d565b5090979650505050505050565b600082601f8301126133af578081fd5b815160206133bf61334a836152a5565b828152818101908583016040808602880185018910156133dd578687fd5b865b868110156134475781838b0312156133f5578788fd5b81518281018181106001600160401b038211171561340f57fe5b8352835161ffff8116811461342257898afd5b8152838701516134318161530f565b81880152855293850193918101916001016133df565b509198975050505050505050565b600082601f830112613465578081fd5b8151602061347561334a836152a5565b82815281810190858301604080860288018501891015613493578687fd5b865b868110156134475781838b0312156134ab578788fd5b81518281018181106001600160401b03821117156134c557fe5b835283518152868401516134d88161530f565b8188015285529385019391810191600101613495565b600082601f8301126134fe578081fd5b8151602061350e61334a836152a5565b82815281810190858301855b858110156133925781518801604080601f19838d0301121561353a578889fd5b80518181016001600160401b03828210818311171561355557fe5b818452848a0151835292840151928084111561356f578b8cfd5b505061357f8c89848601016138d6565b8189015286525050928401929084019060010161351a565b600082601f8301126135a7578081fd5b815160206135b761334a836152a5565b82815281810190858301855b8581101561339257815188016101a080601f19838d030112156135e4578889fd5b6135ed81615282565b8783015181526135ff6040840161331f565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a082015261363760e0840161331f565b60c0820152610100808401516001600160401b0380821115613657578c8dfd5b6136658f8c848901016138d6565b60e085015261012086015191508082111561367e578c8dfd5b5061368d8e8b838801016134ee565b82840152505061014080840151610120830152610160808501518284015261018091506136bb828601613d25565b908301526136ca848401613d25565b908201528652505092840192908401906001016135c3565b600082601f8301126136f2578081fd5b8151602061370261334a836152a5565b82815281810190858301855b85811015613392578151880161016080601f19838d0301121561372f578889fd5b61373881615282565b613743888401613930565b815260408084015189830152606080850151828401526080915081850151818401525060a0808501518284015261377c60c0860161331f565b908301525060e0838101516001600160401b038082111561379b578c8dfd5b6137a98f8c848901016138d6565b60c0850152610100915081860151838501526101209250828601518285015261014091508186015183850152848601519450808511156137e7578c8dfd5b506137f68e8b86880101613455565b908301525086525050928401929084019060010161370e565b600082601f83011261381f578081fd5b8135602061382f61334a836152a5565b828152818101908583018385028701840188101561384b578586fd5b855b858110156133925781358452928401929084019060010161384d565b803561043681615324565b805161043681615324565b805161043681615332565b600082601f83011261389a578081fd5b81356138a861334a826152c2565b8181528460208386010111156138bc578283fd5b816020850160208301379081016020019190915292915050565b600082601f8301126138e6578081fd5b81516138f461334a826152c2565b818152846020838601011115613908578283fd5b6139198260208301602087016152e3565b949350505050565b8035600b811061043657600080fd5b80516008811061043657600080fd5b80516002811061043657600080fd5b600060e0828403121561395f578081fd5b61396960e0615282565b905081516001600160401b038082111561398257600080fd5b61398e85838601613b12565b835261399c60208501613d25565b6020840152604084015160408401526060840151606084015260808401519150808211156139c957600080fd5b506139d6848285016138d6565b6080830152506139e860a0830161393f565b60a082015260c082015160c082015292915050565b6000610200808385031215613a10578182fd5b613a1981615282565b915050613a2582613874565b8152613a336020830161331f565b6020820152613a446040830161331f565b6040820152606082015160608201526080820151608082015260a082015160a0820152613a7360c0830161331f565b60c0820152613a8460e0830161331f565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b03811115613ad057600080fd5b613adc858286016138d6565b8284015250506101a0613af0818401613d25565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a0808385031215613b25578182fd5b613b2e81615282565b915050613b3a8261331f565b8152613b486020830161393f565b6020820152613b596040830161331f565b6040820152613b6a6060830161331f565b60608201526080820151608082015260a082015160a0820152613b8f60c0830161331f565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b0380821115613bd057600080fd5b613bdc8683870161339f565b8385015261016092508285015183850152610180925082850151915080821115613c0557600080fd5b50613c12858286016138d6565b82840152505092915050565b600060808284031215613c2f578081fd5b604051608081016001600160401b038282108183111715613c4c57fe5b81604052829350613c5c85613921565b835260208501356020840152604085013560408401526060850135915080821115613c8657600080fd5b50613c938582860161388a565b6060830152505092915050565b600060c08284031215613cb1578081fd5b60405160c081018181106001600160401b0382111715613ccd57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613d058161530f565b608082015260a0830151613d1881615324565b60a0919091015292915050565b805160ff8116811461043657600080fd5b600060208284031215613d47578081fd5b8135612ab58161530f565b600080600080600060a08688031215613d69578081fd5b8535613d748161530f565b94506020860135613d848161530f565b935060408601356001600160401b0380821115613d9f578283fd5b613dab89838a0161380f565b94506060880135915080821115613dc0578283fd5b613dcc89838a0161380f565b93506080880135915080821115613de1578283fd5b50613dee8882890161388a565b9150509295509295909350565b60008060008060808587031215613e10578182fd5b8435613e1b8161530f565b93506020850135613e2b8161530f565b92506040850135915060608501356001600160401b03811115613e4c578182fd5b613e588782880161388a565b91505092959194509250565b600080600080600060a08688031215613e7b578283fd5b8535613e868161530f565b94506020860135613e968161530f565b9350604086013592506060860135915060808601356001600160401b03811115613ebe578182fd5b613dee8882890161388a565b6000806000806101c08587031215613ee0578182fd5b85601f860112613eee578182fd5b610160613efa81615282565b90860190808789841115613f0c578586fd5b855b600b811015613f37578135613f228161530f565b84526020938401939190910190600101613f0e565b50508096505050613f4781613314565b9350506101808501356001600160401b03811115613f63578283fd5b613f6f8782880161332a565b925050613f7f6101a08601613314565b905092959194509250565b60008060208385031215613f9c578182fd5b82356001600160401b0380821115613fb2578384fd5b818501915085601f830112613fc5578384fd5b813581811115613fd3578485fd5b8660208083028501011115613fe6578485fd5b60209290920196919550909350505050565b6000602080838503121561400a578182fd5b82516001600160401b0380821115614020578384fd5b818501915085601f830112614033578384fd5b815161404161334a826152a5565b818152848101908486016060808502870188018b101561405f578889fd5b8896505b848710156140c65780828c031215614079578889fd5b60408051828101818110898211171561408e57fe5b8252835161409b8161530f565b8152838a01518a82015281840151918101919091528452600196909601959287019290810190614063565b50909998505050505050505050565b600060208083850312156140e7578182fd5b82516001600160401b03808211156140fd578384fd5b818501915085601f830112614110578384fd5b815161411e61334a826152a5565b818152848101908486016040808502870188018b101561413c578889fd5b8896505b848710156140c65780828c031215614156578889fd5b8051818101818110888211171561416957fe5b825282516141768161530f565b815282890151898201528452600196909601959287019290810190614140565b600080600080608085870312156141ab578182fd5b84356001600160401b038111156141c0578283fd5b8501601f810187136141d0578283fd5b803560206141e061334a836152a5565b82815281810190848301875b85811015614215576142038d8684358a0101613c1e565b845292840192908401906001016141ec565b50508098505050614227818901613314565b955050505061423860408601613314565b9150613f7f60608601613869565b600060208284031215614257578081fd5b8151612ab581615324565b600060208284031215614273578081fd5b8135612ab581615332565b60008060408385031215614290578182fd5b61429983613921565b915060208301356142a98161530f565b809150509250929050565b600060208083850312156142c6578182fd5b82516001600160401b03808211156142dc578384fd5b90840190604082870312156142ef578384fd5b60405160408101818110838211171561430457fe5b604052825182811115614315578586fd5b614321888286016138d6565b8252508383015182811115614334578586fd5b80840193505086601f840112614348578485fd5b8251915061435861334a836152a5565b82815284810190848601868502860187018a1015614374578788fd5b8795505b84861015614396578051835260019590950194918601918601614378565b50948201949094529695505050505050565b6000806000606084860312156143bc578081fd5b83516001600160401b03808211156143d2578283fd5b6143de8783880161394e565b945060208601519150808211156143f3578283fd5b506144008682870161394e565b925050604084015161441181615332565b809150509250925092565b600080600060608486031215614430578081fd5b83356001600160401b03811115614445578182fd5b61445186828701613c1e565b93505060208401356144628161530f565b915060408401356144118161530f565b600060208284031215614483578081fd5b81516001600160401b0380821115614499578283fd5b9083019061016082860312156144ad578283fd5b6144b760c0615282565b8251828111156144c5578485fd5b6144d187828601613597565b8252506020830151828111156144e5578485fd5b6144f1878286016136e2565b6020830152506145048660408501613ca0565b60408201526101008301516060820152610120830151608082015261452c6101408401613d25565b60a082015295945050505050565b60008060006060848603121561454e578081fd5b83516001600160401b0380821115614564578283fd5b9085019060c08288031215614577578283fd5b60405160c08101818110838211171561458c57fe5b60405261459883613874565b81526145a66020840161331f565b602082015260408301516040820152606083015160608201526080830151608082015260a0830151828111156145da578485fd5b6145e6898286016138d6565b60a0830152506020870151909550915080821115614602578283fd5b5061460f868287016139fd565b92505061461e6040850161387f565b90509250925092565b600060208284031215614638578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015614693578151805161ffff1688528301516001600160a01b0316838801526040909601959082019060010161465f565b509495945050505050565b6000815180845260208085019450808401835b83811015614693578151805188528301516001600160a01b031683880152604090960195908201906001016146b1565b6000815180845260208085018081965082840281019150828601855b8581101561473b57828403895281518051855285015160408686018190526147278187018361482a565b9a87019a95505050908401906001016146fd565b5091979650505050505050565b6000815180845260208085019450848183028601828601855b85811015613392578383038952815161016061477e858351614856565b818701518588015260408083015190860152606080830151908601526080808301519086015260a0808301516147b68288018261463f565b505060c08083015182828801526147cf8388018261482a565b60e08581015190890152610100808601519089015261012080860151908901526101409485015188820395890195909552925061481091508290508361469e565b9a87019a9450505090840190600101614761565b15159052565b600081518084526148428160208601602086016152e3565b601f01601f19169290920160200192915050565b6008811061486057fe5b9052565b6002811061486057fe5b6000815160e0845261488460e08501825161463f565b602081015161010061489881870183614864565b604083015191506101206148ae8188018461463f565b606084015192506101406148c48189018561463f565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a06148f8818c018861463f565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c0152506149336102808b018761464c565b918701516102408b01529095015188860360df19016102608a0152949350614961925083915084905061482a565b91505060208301516149766020860182614a0e565b506040830151604085015260608301516060850152608083015184820360808601526149a2828261482a565b91505060a08301516149b760a0860182614864565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b60008251614a278184602087016152e3565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b6020808252601a908201527f4e657720616464726573732063616e6e6f74206265207a65726f000000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60208082526018908201527f496e76616c6964206d61726b6574706c61636520747970650000000000000000604082015260600190565b600060408252614f83604083018561486e565b8281036020840152614f95818561486e565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b828110156150bb578a820361019f1901845285518051835289810151614ffb8b85018261463f565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516150368286018261463f565b505060e080820151898286015261504f8a86018261482a565b915050610100808301518583038287015261506a83826146e1565b925050506101208083015181860152506101408083015181860152508682015161509688860182614a0e565b5090890151906150a8848b0183614a0e565b968a0196948a0194925050600101614fd3565b50968a0151898803601f190160408b0152966150d78189614748565b9750505050604088015193506150f060608801856149cc565b6060880151610120880152608088015161014088015260a0880151935061511981880185614a0e565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261517f8285018261482a565b90508381036020850152610200615197828751614824565b60208601516151a9602084018261463f565b5060408601516151bc604084018261463f565b50606086015160608301526080860151608083015260a086015160a083015260c08601516151ed60c084018261463f565b5060e086015161520060e084018261463f565b508583015192820192909252610120808601519082015261014080860151908201526101608086015190820152610180808601518183018490529092906152498284018261482a565b935050506101a08086015161526082840182614a0e565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561529d57fe5b604052919050565b60006001600160401b038211156152b857fe5b5060209081020190565b60006001600160401b038211156152d557fe5b50601f01601f191660200190565b60005b838110156152fe5781810151838201526020016152e6565b83811115612fce5750506000910152565b6001600160a01b038116811461133557600080fd5b801515811461133557600080fd5b6001600160e01b03198116811461133557600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122069c38ad04cb394bac9ef8d867dee515f6fb18db783c1ccdedda687a01e8f3e1964736f6c63430007060033", + "deployedBytecode": "0x6080604052600436106101695760003560e01c806386dcbd27116100d1578063bd4486ee1161008a578063f23a6e6111610064578063f23a6e611461039e578063f2fde38b146103be578063f66ac0cb146103de578063fc40c9c7146103f357610170565b8063bd4486ee1461035f578063c9f0a2fa14610374578063df6c25581461038957610170565b806386dcbd27146102cd5780638da5cb5b146102ed5780639110c77714610302578063a05f32dc14610317578063b94ee3321461032c578063bc197c811461033f57610170565b80635c975abb116101235780635c975abb146102395780635cdb43671461024e5780635ea1e4c914610270578063715018a6146102855780637dfdd89b1461029a57806386496e7a146102ba57610170565b80628534f71461017557806301ffc9a7146101a0578063150b7a02146101cd578063349d6a85146101fa5780633733b82b1461020f5780633fc8cef31461022457610170565b3661017057005b600080fd5b34801561018157600080fd5b5061018a610408565b6040516101979190614a31565b60405180910390f35b3480156101ac57600080fd5b506101c06101bb366004614262565b610418565b6040516101979190614aba565b3480156101d957600080fd5b506101ed6101e8366004613dfb565b61043b565b6040516101979190614ac5565b34801561020657600080fd5b5061018a61044b565b34801561021b57600080fd5b5061018a61045b565b34801561023057600080fd5b5061018a61046b565b34801561024557600080fd5b506101c061047b565b34801561025a57600080fd5b5061026e61026936600461427e565b610485565b005b34801561027c57600080fd5b5061018a6107b8565b34801561029157600080fd5b5061026e6107c8565b3480156102a657600080fd5b5061026e6102b5366004613eca565b610874565b61026e6102c836600461441c565b610b12565b3480156102d957600080fd5b5061026e6102e8366004613f8a565b610cfc565b3480156102f957600080fd5b5061018a610e1c565b34801561030e57600080fd5b5061018a610e2b565b34801561032357600080fd5b5061018a610e3b565b61026e61033a366004614196565b610e4b565b34801561034b57600080fd5b506101ed61035a366004613d52565b6110fc565b34801561036b57600080fd5b5061018a61110d565b34801561038057600080fd5b5061018a61111d565b34801561039557600080fd5b5061018a61112d565b3480156103aa57600080fd5b506101ed6103b9366004613e64565b61113d565b3480156103ca57600080fd5b5061026e6103d9366004613d36565b61114e565b3480156103ea57600080fd5b5061018a611251565b3480156103ff57600080fd5b5061018a611261565b610161546001600160a01b031681565b6001600160e01b0319811660009081526097602052604090205460ff165b919050565b630a85bd0160e11b949350505050565b610168546001600160a01b031681565b610166546001600160a01b031681565b61016a546001600160a01b031681565b61012d5460ff1690565b61048d611271565b6001600160a01b031661049e610e1c565b6001600160a01b0316146104e7576040805162461bcd60e51b815260206004820181905260248201526000805160206153be833981519152604482015290519081900360640190fd5b6001600160a01b0381166105165760405162461bcd60e51b815260040161050d90614c85565b60405180910390fd5b600182600a81111561052457fe5b141561054b5761015f80546001600160a01b0319166001600160a01b038316179055610775565b600082600a81111561055957fe5b14156105805761016080546001600160a01b0319166001600160a01b038316179055610775565b600282600a81111561058e57fe5b14156105b55761016180546001600160a01b0319166001600160a01b038316179055610775565b600382600a8111156105c357fe5b14156105ea5761016280546001600160a01b0319166001600160a01b038316179055610775565b600482600a8111156105f857fe5b141561061f5761016380546001600160a01b0319166001600160a01b038316179055610775565b600582600a81111561062d57fe5b14156106545761016480546001600160a01b0319166001600160a01b038316179055610775565b600682600a81111561066257fe5b14156106895761016580546001600160a01b0319166001600160a01b038316179055610775565b600782600a81111561069757fe5b14156106be5761016680546001600160a01b0319166001600160a01b038316179055610775565b600882600a8111156106cc57fe5b14156106f35761016780546001600160a01b0319166001600160a01b038316179055610775565b600982600a81111561070157fe5b14156107285761016880546001600160a01b0319166001600160a01b038316179055610775565b600a82600a81111561073657fe5b141561075d5761016980546001600160a01b0319166001600160a01b038316179055610775565b60405162461bcd60e51b815260040161050d90614f39565b806001600160a01b031682600a81111561078b57fe5b6040517f90b0e35c110f9f250b584328e42e7eb7c007b77bf8c081c5aaef84c63a121efc90600090a35050565b610164546001600160a01b031681565b6107d0611271565b6001600160a01b03166107e1610e1c565b6001600160a01b03161461082a576040805162461bcd60e51b815260206004820181905260248201526000805160206153be833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff168061088d575061088d611275565b8061089b575060005460ff16155b6108d65760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015610901576000805460ff1961ff0019909116610100171660011790555b610909611286565b610911611338565b6109196113cd565b61092161146a565b845161015f80546001600160a01b03199081166001600160a01b039384161790915560208701516101608054831691841691909117905560408701516101618054831691841691909117905560608701516101628054831691841691909117905560808701516101638054831691841691909117905560a08701516101648054831691841691909117905560c08701516101658054831691841691909117905560e08701516101668054831691841691909117905561010087015161016780548316918416919091179055610120870151610168805483169184169190911790556101408701516101698054831691841691909117905561016a805490911691861691909117905560005b8351811015610aef5761016a546001600160a01b031615610ae75761016a5484516001600160a01b039091169063095ea7b390869084908110610a6b57fe5b60200260200101516000196040518363ffffffff1660e01b8152600401610a93929190614aa1565b602060405180830381600087803b158015610aad57600080fd5b505af1158015610ac1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae59190614246565b505b600101610a2c565b50610af98261114e565b8015610b0b576000805461ff00191690555b5050505050565b610b1a61047b565b15610b5f576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000610b6a84611507565b90508015610c005761016a546001600160a01b03166323b872dd610b8c611271565b30846040518463ffffffff1660e01b8152600401610bac93929190614a45565b602060405180830381600087803b158015610bc657600080fd5b505af1158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190614246565b505b6000610c0f85604001516115d2565b90506000808080846001811115610c2257fe5b1415610c5357610c338860006115ee565b91945092509050610c448288612464565b610c4e8187612464565b610ca5565b6001846001811115610c6157fe5b1415610c8d57610c7288600061248f565b91945092509050610c838288612894565b610c4e8187612894565b60405162461bcd60e51b815260040161050d90614cbc565b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610cd49190614aba565b60405180910390a1610ce4612936565b8415610cf257610cf2612947565b5050505050505050565b610d04611271565b6001600160a01b0316610d15610e1c565b6001600160a01b031614610d5e576040805162461bcd60e51b815260206004820181905260248201526000805160206153be833981519152604482015290519081900360640190fd5b60005b81811015610e175761016a546001600160a01b031663095ea7b3848484818110610d8757fe5b9050602002016020810190610d9c9190613d36565b6000196040518363ffffffff1660e01b8152600401610dbc929190614aa1565b602060405180830381600087803b158015610dd657600080fd5b505af1158015610dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0e9190614246565b50600101610d61565b505050565b6033546001600160a01b031690565b610163546001600160a01b031681565b610160546001600160a01b031681565b610e5361047b565b15610e98576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60008060008060008060005b8a51811015610ed557610ec98b8281518110610ebc57fe5b6020026020010151611507565b90910190600101610ea4565b508015610f6a5761016a546001600160a01b03166323b872dd610ef6611271565b30846040518463ffffffff1660e01b8152600401610f1693929190614a45565b602060405180830381600087803b158015610f3057600080fd5b505af1158015610f44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f689190614246565b505b60005b8a51811015611094576000610f988c8381518110610f8757fe5b6020026020010151604001516115d2565b90506000808080846001811115610fab57fe5b1415610ff257610fce8f8681518110610fc057fe5b60200260200101518d6115ee565b91945092509050610fdf8b83612a5b565b9a50610feb8a82612a5b565b9950611043565b600184600181111561100057fe5b1415610c8d576110238f868151811061101557fe5b60200260200101518d61248f565b919450925090506110348983612a5b565b98506110408882612a5b565b97505b868061104c5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc08360405161107d9190614aba565b60405180910390a150505050806001019050610f6d565b50816110b25760405162461bcd60e51b815260040161050d90614f02565b6110bc868a612464565b6110c68589612464565b6110d0848a612894565b6110da8389612894565b6110e2612936565b80156110f0576110f0612947565b50505050505050505050565b63bc197c8160e01b95945050505050565b610165546001600160a01b031681565b61015f546001600160a01b031681565b610167546001600160a01b031681565b63f23a6e6160e01b95945050505050565b611156611271565b6001600160a01b0316611167610e1c565b6001600160a01b0316146111b0576040805162461bcd60e51b815260206004820181905260248201526000805160206153be833981519152604482015290519081900360640190fd5b6001600160a01b0381166111f55760405162461bcd60e51b81526004018080602001828103825260268152602001806153496026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b610169546001600160a01b031681565b610162546001600160a01b031681565b3390565b600061128030612abc565b15905090565b600054610100900460ff168061129f575061129f611275565b806112ad575060005460ff16155b6112e85760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015611313576000805460ff1961ff0019909116610100171660011790555b61131b612ac2565b611323612b62565b8015611335576000805461ff00191690555b50565b600054610100900460ff16806113515750611351611275565b8061135f575060005460ff16155b61139a5760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff161580156113c5576000805460ff1961ff0019909116610100171660011790555b611323612ac2565b600054610100900460ff16806113e657506113e6611275565b806113f4575060005460ff16155b61142f5760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff1615801561145a576000805460ff1961ff0019909116610100171660011790555b611462612c5b565b6113c5612cf8565b600054610100900460ff16806114835750611483611275565b80611491575060005460ff16155b6114cc5760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff161580156114f7576000805460ff1961ff0019909116610100171660011790555b6114ff612ac2565b611323612d95565b60008060009050600061151d84604001516115d2565b9050600181600181111561152d57fe5b14156115cb576020840151604085015192810192600091829161154f91612e41565b91509150808285010193506000611573876060015188604001518960000151612e72565b91505060005b81518110156115c657600060a083838151811061159257fe5b6020026020010151901c905060006115b7828b60200151612f2b90919063ffffffff16565b97909701965050600101611579565b505050505b5092915050565b6000603082901c61ffff1660018111156115e857fe5b92915050565b600080600080600061160d876060015188604001518960000151612e72565b6020890151919350915060028851600a81111561162657fe5b14156116da57610161546040516000916001600160a01b031690839061164d908790614a15565b60006040518083038185875af1925050503d806000811461168a576040519150601f19603f3d011682016040523d82523d6000602084013e61168f565b606091505b5050905087156116b757806116b25760008060009650965096505050505061245d565b6116d4565b806116d45760405162461bcd60e51b815260040161050d90614d22565b5061242b565b60018851600a8111156116e957fe5b14156117925761015f546040516000916001600160a01b0316908390611710908790614a15565b60006040518083038185875af1925050503d806000811461174d576040519150601f19603f3d011682016040523d82523d6000602084013e611752565b606091505b50509050871561177557806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614b44565b60008851600a8111156117a157fe5b141561184a57610160546040516000916001600160a01b03169083906117c8908790614a15565b60006040518083038185875af1925050503d8060008114611805576040519150601f19603f3d011682016040523d82523d6000602084013e61180a565b606091505b50509050871561182d57806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614bb2565b60038851600a81111561185957fe5b1415611c66576000838060200190518101906118759190614472565b905087156118f8576101625460405163357a150b60e01b81526001600160a01b039091169063357a150b9084906118b0908590600401614f9e565b6000604051808303818588803b1580156118c957600080fd5b505af1935050505080156118db575060015b6118f35760008060009650965096505050505061245d565b61195e565b6101625460405163357a150b60e01b81526001600160a01b039091169063357a150b90849061192b908590600401614f9e565b6000604051808303818588803b15801561194457600080fd5b505af1158015611958573d6000803e3d6000fd5b50505050505b60005b816020015151811015611c5f5760008260200151828151811061198057fe5b60200260200101516020015190506000836020015183815181106119a057fe5b60200260200101516040015190506000846000015183815181106119c057fe5b6020026020010151610100015182815181106119d857fe5b60200260200101516020015190506000856000015184815181106119f857fe5b602002602001015160e0015151118015611a2e5750600085602001518581518110611a1f57fe5b602002602001015160c0015151115b15611a7457611a748186602001518681518110611a4757fe5b602002602001015160c0015187600001518681518110611a6357fe5b602002602001015160e00151612f43565b8451805184908110611a8257fe5b60200260200101516080015160011415611b5757600081806020019051810190611aac91906140d5565b905060005b8151811015611b50576000828281518110611ac857fe5b6020026020010151905080600001516001600160a01b03166342842e0e30611aee611271565b84602001516040518463ffffffff1660e01b8152600401611b1193929190614a45565b600060405180830381600087803b158015611b2b57600080fd5b505af1158015611b3f573d6000803e3d6000fd5b505060019093019250611ab1915050565b5050611c51565b8451805184908110611b6557fe5b60200260200101516080015160021415611c3957600081806020019051810190611b8f9190613ff8565b905060005b8151811015611b50576000828281518110611bab57fe5b6020026020010151905080600001516001600160a01b031663f242432a30611bd1611271565b846020015185604001516040518563ffffffff1660e01b8152600401611bfa9493929190614a69565b600060405180830381600087803b158015611c1457600080fd5b505af1158015611c28573d6000803e3d6000fd5b505060019093019250611b94915050565b60405162461bcd60e51b815260040161050d90614e31565b505050806001019050611961565b505061242b565b60048851600a811115611c7557fe5b1415611e9457600080600085806020019051810190611c94919061453a565b9250925092508915611d1f5761016354604051635a72594b60e11b81526001600160a01b039091169063b4e4b296908690611cd59087908790600401615125565b6000604051808303818588803b158015611cee57600080fd5b505af193505050508015611d00575060015b611d1a57600080600098509850985050505050505061245d565b611d87565b61016354604051635a72594b60e11b81526001600160a01b039091169063b4e4b296908690611d549087908790600401615125565b6000604051808303818588803b158015611d6d57600080fd5b505af1158015611d81573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611e165781604001516001600160a01b03166342842e0e30611dbc611271565b85608001516040518463ffffffff1660e01b8152600401611ddf93929190614a45565b600060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b50505050611e8c565b6001600160e01b0319811663025ceed960e61b1415611e745781604001516001600160a01b031663f242432a30611e4b611271565b85608001518660a001516040518563ffffffff1660e01b8152600401611ddf9493929190614a69565b60405162461bcd60e51b815260040161050d90614e9f565b50505061242b565b60058851600a811115611ea357fe5b1415611f4c57610164546040516000916001600160a01b0316908390611eca908790614a15565b60006040518083038185875af1925050503d8060008114611f07576040519150601f19603f3d011682016040523d82523d6000602084013e611f0c565b606091505b505090508715611f2f57806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614dfa565b60068851600a811115611f5b57fe5b141561200457610165546040516000916001600160a01b0316908390611f82908790614a15565b60006040518083038185875af1925050503d8060008114611fbf576040519150601f19603f3d011682016040523d82523d6000602084013e611fc4565b606091505b505090508715611fe757806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614b7b565b60078851600a81111561201357fe5b14156120bc57610166546040516000916001600160a01b031690839061203a908790614a15565b60006040518083038185875af1925050503d8060008114612077576040519150601f19603f3d011682016040523d82523d6000602084013e61207c565b606091505b50509050871561209f57806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614e68565b60088851600a8111156120cb57fe5b14156122a3576000806000858060200190518101906120ea91906143a8565b92509250925089156121755761016754604051639a1fc3a760e01b81526001600160a01b0390911690639a1fc3a790869061212b9087908790600401614f70565b6000604051808303818588803b15801561214457600080fd5b505af193505050508015612156575060015b61217057600080600098509850985050505050505061245d565b6121dd565b61016754604051639a1fc3a760e01b81526001600160a01b0390911690639a1fc3a79086906121aa9087908790600401614f70565b6000604051808303818588803b1580156121c357600080fd5b505af11580156121d7573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b141561223c578251606001516001600160a01b03166342842e0e30612213611271565b8651608001516040516001600160e01b031960e086901b168152611ddf93929190600401614a45565b6001600160e01b0319811663025ceed960e61b1415611e74578251606001516001600160a01b031663f242432a30612272611271565b8651608081015160a0909101516040516001600160e01b031960e087901b168152611ddf9493929190600401614a69565b60098851600a8111156122b257fe5b141561235b57610168546040516000916001600160a01b03169083906122d9908790614a15565b60006040518083038185875af1925050503d8060008114612316576040519150601f19603f3d011682016040523d82523d6000602084013e61231b565b606091505b50509050871561233e57806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614d8e565b600a8851600a81111561236a57fe5b141561241357610169546040516000916001600160a01b0316908390612391908790614a15565b60006040518083038185875af1925050503d80600081146123ce576040519150601f19603f3d011682016040523d82523d6000602084013e6123d3565b606091505b5050905087156123f657806116b25760008060009650965096505050505061245d565b806116d45760405162461bcd60e51b815260040161050d90614c4e565b60405162461bcd60e51b815260040161050d90614c20565b612439828960200151612fd4565b60008061244e8a604001518b60200151612e41565b60019950909750955050505050505b9250925092565b60008211801561247c57506001600160a01b03811615155b1561248b5761248b818361305d565b5050565b60008060008060006124ae876060015188604001518960000151612e72565b909250905060028751600a8111156124c257fe5b141561257357610161546040516000916001600160a01b0316906124e7908590614a15565b6000604051808303816000865af19150503d8060008114612524576040519150601f19603f3d011682016040523d82523d6000602084013e612529565b606091505b505090508615612550578061254b57600080600095509550955050505061245d565b61256d565b8061256d5760405162461bcd60e51b815260040161050d90614dc5565b5061285f565b60008751600a81111561258257fe5b141561262857610160546040516000916001600160a01b0316906125a7908590614a15565b6000604051808303816000865af19150503d80600081146125e4576040519150601f19603f3d011682016040523d82523d6000602084013e6125e9565b606091505b50509050861561260b578061254b57600080600095509550955050505061245d565b8061256d5760405162461bcd60e51b815260040161050d90614be9565b60068751600a81111561263757fe5b14156126dd57610165546040516000916001600160a01b03169061265c908590614a15565b6000604051808303816000865af19150503d8060008114612699576040519150601f19603f3d011682016040523d82523d6000602084013e61269e565b606091505b5050905086156126c0578061254b57600080600095509550955050505061245d565b8061256d5760405162461bcd60e51b815260040161050d90614ada565b60098751600a8111156126ec57fe5b141561279257610168546040516000916001600160a01b031690612711908590614a15565b6000604051808303816000865af19150503d806000811461274e576040519150601f19603f3d011682016040523d82523d6000602084013e612753565b606091505b505090508615612775578061254b57600080600095509550955050505061245d565b8061256d5760405162461bcd60e51b815260040161050d90614b0f565b600a8751600a8111156127a157fe5b141561284757610169546040516000916001600160a01b0316906127c6908590614a15565b6000604051808303816000865af19150503d8060008114612803576040519150601f19603f3d011682016040523d82523d6000602084013e612808565b606091505b50509050861561282a578061254b57600080600095509550955050505061245d565b8061256d5760405162461bcd60e51b815260040161050d90614d59565b60405162461bcd60e51b815260040161050d90614cf3565b61286d8188602001516130f5565b60008061288289604001518a60200151612e41565b60019b919a5098509650505050505050565b6000821180156128ac57506001600160a01b03811615155b1561248b5761016a5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906128e49084908690600401614aa1565b602060405180830381600087803b1580156128fe57600080fd5b505af1158015612912573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e179190614246565b47801561133557611335338261305d565b61016a546040516370a0823160e01b81526000916001600160a01b0316906370a0823190612979903090600401614a31565b60206040518083038186803b15801561299157600080fd5b505afa1580156129a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c99190614627565b905080156113355761016a546001600160a01b031663a9059cbb6129eb611271565b836040518363ffffffff1660e01b8152600401612a09929190614aa1565b602060405180830381600087803b158015612a2357600080fd5b505af1158015612a37573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248b9190614246565b600082820183811015612ab5576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3b151590565b600054610100900460ff1680612adb5750612adb611275565b80612ae9575060005460ff16155b612b245760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015611323576000805460ff1961ff0019909116610100171660011790558015611335576000805461ff001916905550565b600054610100900460ff1680612b7b5750612b7b611275565b80612b89575060005460ff16155b612bc45760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015612bef576000805460ff1961ff0019909116610100171660011790555b6000612bf9611271565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015611335576000805461ff001916905550565b600054610100900460ff1680612c745750612c74611275565b80612c82575060005460ff16155b612cbd5760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015612ce8576000805460ff1961ff0019909116610100171660011790555b6113236301ffc9a760e01b61317e565b600054610100900460ff1680612d115750612d11611275565b80612d1f575060005460ff16155b612d5a5760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015612d85576000805460ff1961ff0019909116610100171660011790555b611323630271189760e51b61317e565b600054610100900460ff1680612dae5750612dae611275565b80612dbc575060005460ff16155b612df75760405162461bcd60e51b815260040180806020018281038252602e81526020018061536f602e913960400191505060405180910390fd5b600054610100900460ff16158015612e22576000805460ff1961ff0019909116610100171660011790555b61012d805460ff191690558015611335576000805461ff001916905550565b60008061ffff601085901c8116908516612e5b8583612f2b565b612e658683612f2b565b9350935050509250929050565b6060806000602085901c61ffff166001811115612e8b57fe5b905060606000826001811115612e9d57fe5b1415612eaf578693509150612f239050565b6001826001811115612ebd57fe5b1415612f0b57600087806020019051810190612ed991906142b4565b9050612ee486613202565b15612eff578060000151816020015194509450505050612f23565b5193509150612f239050565b60405162461bcd60e51b815260040161050d90614ecb565b935093915050565b6000612ab5612710612f3d8585613254565b906132ad565b8151835114612f5157600080fd5b8051835114612f5f57600080fd5b60005b8351811015612fce57818181518110612f7757fe5b01602001516001600160f81b03191615612fc657828181518110612f9757fe5b602001015160f81c60f81b848281518110612fae57fe5b60200101906001600160f81b031916908160001a9053505b600101612f62565b50505050565b60005b8251811015610e17576000838281518110612fee57fe5b6020026020010151111561305557600083828151811061300a57fe5b60200260200101519050600060a085848151811061302457fe5b6020026020010151901c905060006130458286612f2b90919063ffffffff16565b90506130518184612464565b5050505b600101612fd7565b6040516000906001600160a01b0384169083908381818185875af1925050503d80600081146130a8576040519150601f19603f3d011682016040523d82523d6000602084013e6130ad565b606091505b5050905080610e17576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b8251811015610e1757600083828151811061310f57fe5b6020026020010151111561317657600083828151811061312b57fe5b60200260200101519050600060a085848151811061314557fe5b6020026020010151901c905060006131668286612f2b90919063ffffffff16565b90506131728184612894565b5050505b6001016130f8565b6001600160e01b031980821614156131dd576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152609760205260409020805460ff19166001179055565b6000600582600a81111561321257fe5b14806132295750600482600a81111561322757fe5b145b8061323f5750600782600a81111561323d57fe5b145b1561324c57506001610436565b506000919050565b600082613263575060006115e8565b8282028284828161327057fe5b0414612ab55760405162461bcd60e51b815260040180806020018281038252602181526020018061539d6021913960400191505060405180910390fd5b6000808211613303576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161330c57fe5b049392505050565b80356104368161530f565b80516104368161530f565b600082601f83011261333a578081fd5b8135602061334f61334a836152a5565b615282565b828152818101908583018385028701840188101561336b578586fd5b855b858110156133925781356133808161530f565b8452928401929084019060010161336d565b5090979650505050505050565b600082601f8301126133af578081fd5b815160206133bf61334a836152a5565b828152818101908583016040808602880185018910156133dd578687fd5b865b868110156134475781838b0312156133f5578788fd5b81518281018181106001600160401b038211171561340f57fe5b8352835161ffff8116811461342257898afd5b8152838701516134318161530f565b81880152855293850193918101916001016133df565b509198975050505050505050565b600082601f830112613465578081fd5b8151602061347561334a836152a5565b82815281810190858301604080860288018501891015613493578687fd5b865b868110156134475781838b0312156134ab578788fd5b81518281018181106001600160401b03821117156134c557fe5b835283518152868401516134d88161530f565b8188015285529385019391810191600101613495565b600082601f8301126134fe578081fd5b8151602061350e61334a836152a5565b82815281810190858301855b858110156133925781518801604080601f19838d0301121561353a578889fd5b80518181016001600160401b03828210818311171561355557fe5b818452848a0151835292840151928084111561356f578b8cfd5b505061357f8c89848601016138d6565b8189015286525050928401929084019060010161351a565b600082601f8301126135a7578081fd5b815160206135b761334a836152a5565b82815281810190858301855b8581101561339257815188016101a080601f19838d030112156135e4578889fd5b6135ed81615282565b8783015181526135ff6040840161331f565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a082015261363760e0840161331f565b60c0820152610100808401516001600160401b0380821115613657578c8dfd5b6136658f8c848901016138d6565b60e085015261012086015191508082111561367e578c8dfd5b5061368d8e8b838801016134ee565b82840152505061014080840151610120830152610160808501518284015261018091506136bb828601613d25565b908301526136ca848401613d25565b908201528652505092840192908401906001016135c3565b600082601f8301126136f2578081fd5b8151602061370261334a836152a5565b82815281810190858301855b85811015613392578151880161016080601f19838d0301121561372f578889fd5b61373881615282565b613743888401613930565b815260408084015189830152606080850151828401526080915081850151818401525060a0808501518284015261377c60c0860161331f565b908301525060e0838101516001600160401b038082111561379b578c8dfd5b6137a98f8c848901016138d6565b60c0850152610100915081860151838501526101209250828601518285015261014091508186015183850152848601519450808511156137e7578c8dfd5b506137f68e8b86880101613455565b908301525086525050928401929084019060010161370e565b600082601f83011261381f578081fd5b8135602061382f61334a836152a5565b828152818101908583018385028701840188101561384b578586fd5b855b858110156133925781358452928401929084019060010161384d565b803561043681615324565b805161043681615324565b805161043681615332565b600082601f83011261389a578081fd5b81356138a861334a826152c2565b8181528460208386010111156138bc578283fd5b816020850160208301379081016020019190915292915050565b600082601f8301126138e6578081fd5b81516138f461334a826152c2565b818152846020838601011115613908578283fd5b6139198260208301602087016152e3565b949350505050565b8035600b811061043657600080fd5b80516008811061043657600080fd5b80516002811061043657600080fd5b600060e0828403121561395f578081fd5b61396960e0615282565b905081516001600160401b038082111561398257600080fd5b61398e85838601613b12565b835261399c60208501613d25565b6020840152604084015160408401526060840151606084015260808401519150808211156139c957600080fd5b506139d6848285016138d6565b6080830152506139e860a0830161393f565b60a082015260c082015160c082015292915050565b6000610200808385031215613a10578182fd5b613a1981615282565b915050613a2582613874565b8152613a336020830161331f565b6020820152613a446040830161331f565b6040820152606082015160608201526080820151608082015260a082015160a0820152613a7360c0830161331f565b60c0820152613a8460e0830161331f565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b03811115613ad057600080fd5b613adc858286016138d6565b8284015250506101a0613af0818401613d25565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a0808385031215613b25578182fd5b613b2e81615282565b915050613b3a8261331f565b8152613b486020830161393f565b6020820152613b596040830161331f565b6040820152613b6a6060830161331f565b60608201526080820151608082015260a082015160a0820152613b8f60c0830161331f565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b0380821115613bd057600080fd5b613bdc8683870161339f565b8385015261016092508285015183850152610180925082850151915080821115613c0557600080fd5b50613c12858286016138d6565b82840152505092915050565b600060808284031215613c2f578081fd5b604051608081016001600160401b038282108183111715613c4c57fe5b81604052829350613c5c85613921565b835260208501356020840152604085013560408401526060850135915080821115613c8657600080fd5b50613c938582860161388a565b6060830152505092915050565b600060c08284031215613cb1578081fd5b60405160c081018181106001600160401b0382111715613ccd57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613d058161530f565b608082015260a0830151613d1881615324565b60a0919091015292915050565b805160ff8116811461043657600080fd5b600060208284031215613d47578081fd5b8135612ab58161530f565b600080600080600060a08688031215613d69578081fd5b8535613d748161530f565b94506020860135613d848161530f565b935060408601356001600160401b0380821115613d9f578283fd5b613dab89838a0161380f565b94506060880135915080821115613dc0578283fd5b613dcc89838a0161380f565b93506080880135915080821115613de1578283fd5b50613dee8882890161388a565b9150509295509295909350565b60008060008060808587031215613e10578182fd5b8435613e1b8161530f565b93506020850135613e2b8161530f565b92506040850135915060608501356001600160401b03811115613e4c578182fd5b613e588782880161388a565b91505092959194509250565b600080600080600060a08688031215613e7b578283fd5b8535613e868161530f565b94506020860135613e968161530f565b9350604086013592506060860135915060808601356001600160401b03811115613ebe578182fd5b613dee8882890161388a565b6000806000806101c08587031215613ee0578182fd5b85601f860112613eee578182fd5b610160613efa81615282565b90860190808789841115613f0c578586fd5b855b600b811015613f37578135613f228161530f565b84526020938401939190910190600101613f0e565b50508096505050613f4781613314565b9350506101808501356001600160401b03811115613f63578283fd5b613f6f8782880161332a565b925050613f7f6101a08601613314565b905092959194509250565b60008060208385031215613f9c578182fd5b82356001600160401b0380821115613fb2578384fd5b818501915085601f830112613fc5578384fd5b813581811115613fd3578485fd5b8660208083028501011115613fe6578485fd5b60209290920196919550909350505050565b6000602080838503121561400a578182fd5b82516001600160401b0380821115614020578384fd5b818501915085601f830112614033578384fd5b815161404161334a826152a5565b818152848101908486016060808502870188018b101561405f578889fd5b8896505b848710156140c65780828c031215614079578889fd5b60408051828101818110898211171561408e57fe5b8252835161409b8161530f565b8152838a01518a82015281840151918101919091528452600196909601959287019290810190614063565b50909998505050505050505050565b600060208083850312156140e7578182fd5b82516001600160401b03808211156140fd578384fd5b818501915085601f830112614110578384fd5b815161411e61334a826152a5565b818152848101908486016040808502870188018b101561413c578889fd5b8896505b848710156140c65780828c031215614156578889fd5b8051818101818110888211171561416957fe5b825282516141768161530f565b815282890151898201528452600196909601959287019290810190614140565b600080600080608085870312156141ab578182fd5b84356001600160401b038111156141c0578283fd5b8501601f810187136141d0578283fd5b803560206141e061334a836152a5565b82815281810190848301875b85811015614215576142038d8684358a0101613c1e565b845292840192908401906001016141ec565b50508098505050614227818901613314565b955050505061423860408601613314565b9150613f7f60608601613869565b600060208284031215614257578081fd5b8151612ab581615324565b600060208284031215614273578081fd5b8135612ab581615332565b60008060408385031215614290578182fd5b61429983613921565b915060208301356142a98161530f565b809150509250929050565b600060208083850312156142c6578182fd5b82516001600160401b03808211156142dc578384fd5b90840190604082870312156142ef578384fd5b60405160408101818110838211171561430457fe5b604052825182811115614315578586fd5b614321888286016138d6565b8252508383015182811115614334578586fd5b80840193505086601f840112614348578485fd5b8251915061435861334a836152a5565b82815284810190848601868502860187018a1015614374578788fd5b8795505b84861015614396578051835260019590950194918601918601614378565b50948201949094529695505050505050565b6000806000606084860312156143bc578081fd5b83516001600160401b03808211156143d2578283fd5b6143de8783880161394e565b945060208601519150808211156143f3578283fd5b506144008682870161394e565b925050604084015161441181615332565b809150509250925092565b600080600060608486031215614430578081fd5b83356001600160401b03811115614445578182fd5b61445186828701613c1e565b93505060208401356144628161530f565b915060408401356144118161530f565b600060208284031215614483578081fd5b81516001600160401b0380821115614499578283fd5b9083019061016082860312156144ad578283fd5b6144b760c0615282565b8251828111156144c5578485fd5b6144d187828601613597565b8252506020830151828111156144e5578485fd5b6144f1878286016136e2565b6020830152506145048660408501613ca0565b60408201526101008301516060820152610120830151608082015261452c6101408401613d25565b60a082015295945050505050565b60008060006060848603121561454e578081fd5b83516001600160401b0380821115614564578283fd5b9085019060c08288031215614577578283fd5b60405160c08101818110838211171561458c57fe5b60405261459883613874565b81526145a66020840161331f565b602082015260408301516040820152606083015160608201526080830151608082015260a0830151828111156145da578485fd5b6145e6898286016138d6565b60a0830152506020870151909550915080821115614602578283fd5b5061460f868287016139fd565b92505061461e6040850161387f565b90509250925092565b600060208284031215614638578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015614693578151805161ffff1688528301516001600160a01b0316838801526040909601959082019060010161465f565b509495945050505050565b6000815180845260208085019450808401835b83811015614693578151805188528301516001600160a01b031683880152604090960195908201906001016146b1565b6000815180845260208085018081965082840281019150828601855b8581101561473b57828403895281518051855285015160408686018190526147278187018361482a565b9a87019a95505050908401906001016146fd565b5091979650505050505050565b6000815180845260208085019450848183028601828601855b85811015613392578383038952815161016061477e858351614856565b818701518588015260408083015190860152606080830151908601526080808301519086015260a0808301516147b68288018261463f565b505060c08083015182828801526147cf8388018261482a565b60e08581015190890152610100808601519089015261012080860151908901526101409485015188820395890195909552925061481091508290508361469e565b9a87019a9450505090840190600101614761565b15159052565b600081518084526148428160208601602086016152e3565b601f01601f19169290920160200192915050565b6008811061486057fe5b9052565b6002811061486057fe5b6000815160e0845261488460e08501825161463f565b602081015161010061489881870183614864565b604083015191506101206148ae8188018461463f565b606084015192506101406148c48189018561463f565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a06148f8818c018861463f565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c0152506149336102808b018761464c565b918701516102408b01529095015188860360df19016102608a0152949350614961925083915084905061482a565b91505060208301516149766020860182614a0e565b506040830151604085015260608301516060850152608083015184820360808601526149a2828261482a565b91505060a08301516149b760a0860182614864565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b60008251614a278184602087016152e3565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b6020808252601a908201527f4e657720616464726573732063616e6e6f74206265207a65726f000000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b60208082526018908201527f496e76616c6964206d61726b6574706c61636520747970650000000000000000604082015260600190565b600060408252614f83604083018561486e565b8281036020840152614f95818561486e565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b828110156150bb578a820361019f1901845285518051835289810151614ffb8b85018261463f565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c0808201516150368286018261463f565b505060e080820151898286015261504f8a86018261482a565b915050610100808301518583038287015261506a83826146e1565b925050506101208083015181860152506101408083015181860152508682015161509688860182614a0e565b5090890151906150a8848b0183614a0e565b968a0196948a0194925050600101614fd3565b50968a0151898803601f190160408b0152966150d78189614748565b9750505050604088015193506150f060608801856149cc565b6060880151610120880152608088015161014088015260a0880151935061511981880185614a0e565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e085015261517f8285018261482a565b90508381036020850152610200615197828751614824565b60208601516151a9602084018261463f565b5060408601516151bc604084018261463f565b50606086015160608301526080860151608083015260a086015160a083015260c08601516151ed60c084018261463f565b5060e086015161520060e084018261463f565b508583015192820192909252610120808601519082015261014080860151908201526101608086015190820152610180808601518183018490529092906152498284018261482a565b935050506101a08086015161526082840182614a0e565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b038111828210171561529d57fe5b604052919050565b60006001600160401b038211156152b857fe5b5060209081020190565b60006001600160401b038211156152d557fe5b50601f01601f191660200190565b60005b838110156152fe5781810151838201526020016152e6565b83811115612fce5750506000910152565b6001600160a01b038116811461133557600080fd5b801515811461133557600080fd5b6001600160e01b03198116811461133557600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122069c38ad04cb394bac9ef8d867dee515f6fb18db783c1ccdedda687a01e8f3e1964736f6c63430007060033", + "immutableReferences": {}, + "generatedSources": [], + "deployedGeneratedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:58028:67", + "statements": [ + { + "nodeType": "YulBlock", + "src": "6:3:67", + "statements": [] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "65:87:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "75:29:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "97:6:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "84:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "84:20:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "75:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "140:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "113:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "113:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "113:33:67" + } + ] + }, + "name": "abi_decode_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "44:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "55:5:67", + "type": "" + } + ], + "src": "14:138:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "219:80:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "229:22:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "244:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "238:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "238:13:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "229:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "287:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "260:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "260:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "260:33:67" + } + ] + }, + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "198:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "209:5:67", + "type": "" + } + ], + "src": "157:142:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "374:712:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "423:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "432:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "439:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "425:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "425:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "425:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "402:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "410:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "398:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "398:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "417:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "394:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "394:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "387:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "387:35:67" + }, + "nodeType": "YulIf", + "src": "384:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "456:30:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "479:6:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "466:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "466:20:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "460:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "495:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "505:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "499:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "518:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "590:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "544:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "544:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "529:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "529:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "522:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "603:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "616:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "607:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "635:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "640:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "628:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "628:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "628:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "652:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "663:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "668:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "659:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "659:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "652:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "680:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "695:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "703:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "691:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "691:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "684:3:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "761:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "770:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "777:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "763:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "763:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "763:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "729:6:67" + }, + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "741:2:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "745:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "737:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "737:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "725:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "725:24:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "751:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "721:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "721:33:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "756:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "718:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "718:42:67" + }, + "nodeType": "YulIf", + "src": "715:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "794:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "803:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "798:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "862:195:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "876:30:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "902:3:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "889:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "889:17:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "880:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "946:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "919:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "919:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "919:33:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "972:3:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "977:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "965:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "965:18:67" + }, + "nodeType": "YulExpressionStatement", + "src": "965:18:67" + }, + { + "nodeType": "YulAssignment", + "src": "996:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1007:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1012:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1003:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1003:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "996:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1028:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "1039:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1044:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1035:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1035:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "1028:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "828:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "831:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "825:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "825:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "835:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "837:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "846:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "849:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "842:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "842:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "837:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "821:3:67", + "statements": [] + }, + "src": "817:240:67" + }, + { + "nodeType": "YulAssignment", + "src": "1066:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "1075:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1066:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_address_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "348:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "356:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "364:5:67", + "type": "" + } + ], + "src": "304:782:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1198:1200:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1247:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1256:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1263:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1249:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "1249:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "1249:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1226:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1234:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1222:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1222:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1241:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1218:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1218:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1211:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "1211:35:67" + }, + "nodeType": "YulIf", + "src": "1208:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1280:23:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1296:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "1290:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "1290:13:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "1284:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1312:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1322:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "1316:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1335:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1407:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "1361:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "1361:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "1346:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "1346:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "1339:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1420:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1433:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "1424:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1452:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1457:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1445:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "1445:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "1445:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "1469:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1480:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1485:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1476:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1476:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1469:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1497:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1512:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1520:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1508:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1508:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "1501:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1532:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1542:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "1536:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1601:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1610:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1617:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1603:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "1603:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "1603:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1569:6:67" + }, + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1581:2:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1585:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "1577:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1577:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1565:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1565:24:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1591:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1561:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1561:33:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1596:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1558:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "1558:42:67" + }, + "nodeType": "YulIf", + "src": "1555:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1634:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1643:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "1638:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1702:667:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1742:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1751:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1758:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1744:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "1744:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "1744:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1727:3:67" + }, + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "1732:3:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1723:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1723:13:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1738:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1719:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1719:22:67" + }, + "nodeType": "YulIf", + "src": "1716:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1779:23:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1799:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "1793:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "1793:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "1783:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1815:33:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1837:6:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1845:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1833:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1833:15:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "1819:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1927:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "1929:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "1929:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "1929:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "1870:10:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1882:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1867:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "1867:34:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "1906:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1918:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "1903:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "1903:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "1864:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "1864:62:67" + }, + "nodeType": "YulIf", + "src": "1861:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1960:2:67" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "1964:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1953:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "1953:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "1953:22:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1988:23:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "2007:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "2001:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "2001:10:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1992:5:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2065:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2074:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2081:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2067:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2067:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2067:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2037:5:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2048:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2055:6:67", + "type": "", + "value": "0xffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "2044:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2044:18:67" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "2034:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "2034:29:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "2027:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2027:37:67" + }, + "nodeType": "YulIf", + "src": "2024:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2109:6:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2117:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2102:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2102:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2102:21:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2136:34:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "2161:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2166:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2157:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2157:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "2151:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "2151:19:67" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "2140:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "2210:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "2183:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "2183:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2183:35:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2242:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2250:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2238:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2238:15:67" + }, + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "2255:7:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2231:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2231:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2231:32:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2283:3:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2288:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2276:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2276:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2276:19:67" + }, + { + "nodeType": "YulAssignment", + "src": "2308:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2319:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2324:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2315:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2315:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2308:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2340:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "2351:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "2356:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2347:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2347:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "2340:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1668:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1671:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "1665:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "1665:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "1675:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1677:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1686:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1689:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1682:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1682:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1677:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "1661:3:67", + "statements": [] + }, + "src": "1657:712:67" + }, + { + "nodeType": "YulAssignment", + "src": "2378:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "2387:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2378:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1172:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "1180:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "1188:5:67", + "type": "" + } + ], + "src": "1091:1307:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2488:1085:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "2537:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2546:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2553:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2539:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2539:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2539:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2516:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2524:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2512:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2512:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "2531:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "2508:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2508:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "2501:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2501:35:67" + }, + "nodeType": "YulIf", + "src": "2498:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2570:23:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2586:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "2580:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "2580:13:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "2574:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2602:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2612:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "2606:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2625:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2697:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "2651:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "2651:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "2636:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "2636:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "2629:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2710:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2723:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "2714:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2742:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2747:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2735:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2735:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2735:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "2759:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2770:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2775:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2766:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2766:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2759:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2787:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2802:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2810:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2798:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2798:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "2791:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2822:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2832:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "2826:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2891:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2900:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2907:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2893:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2893:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2893:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2859:6:67" + }, + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2871:2:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "2875:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "2867:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2867:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2855:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2855:24:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2881:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2851:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2851:33:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "2886:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "2848:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "2848:42:67" + }, + "nodeType": "YulIf", + "src": "2845:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2924:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2933:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "2928:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2992:552:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "3032:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3041:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3048:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3034:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3034:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3034:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3017:3:67" + }, + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3022:3:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3013:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3013:13:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3028:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "3009:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3009:22:67" + }, + "nodeType": "YulIf", + "src": "3006:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3069:23:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3089:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3083:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "3083:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "3073:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3105:33:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3127:6:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3135:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3123:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3123:15:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "3109:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3217:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "3219:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "3219:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3219:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "3160:10:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3172:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3157:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "3157:34:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "3196:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3208:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "3193:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "3193:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "3154:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "3154:62:67" + }, + "nodeType": "YulIf", + "src": "3151:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3250:2:67" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "3254:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3243:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3243:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3243:22:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3285:6:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3299:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3293:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "3293:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3278:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3278:26:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3278:26:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3317:32:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3340:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3345:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3336:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3336:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3330:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "3330:19:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3321:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3389:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "3362:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "3362:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3362:33:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3419:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3427:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3415:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3415:15:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3432:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3408:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3408:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3408:30:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3458:3:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3463:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3451:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3451:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3451:19:67" + }, + { + "nodeType": "YulAssignment", + "src": "3483:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3494:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3499:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3490:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3490:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3483:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "3515:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3526:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3531:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3522:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3522:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3515:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "2958:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2961:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "2955:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "2955:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "2965:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2967:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "2976:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2979:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2972:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2972:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "2967:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "2951:3:67", + "statements": [] + }, + "src": "2947:597:67" + }, + { + "nodeType": "YulAssignment", + "src": "3553:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "3562:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3553:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_struct$_Fee_$dyn_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2462:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "2470:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "2478:5:67", + "type": "" + } + ], + "src": "2403:1170:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3669:1172:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "3718:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3727:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3734:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3720:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3720:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3720:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3697:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3705:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3693:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3693:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3712:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "3689:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3689:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "3682:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3682:35:67" + }, + "nodeType": "YulIf", + "src": "3679:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3751:23:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3767:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3761:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "3761:13:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "3755:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3783:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3793:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "3787:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3806:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "3878:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "3832:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "3832:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "3817:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "3817:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "3810:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3891:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3904:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "3895:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3923:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "3928:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3916:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3916:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3916:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "3940:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3951:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3956:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3947:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3947:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3940:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3968:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3983:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3991:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3979:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3979:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "3972:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4003:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4012:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "4007:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4071:741:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "4085:33:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4099:6:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4113:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "4107:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "4107:10:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4095:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4095:23:67" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "4089:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4131:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4141:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "4135:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4197:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4206:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4213:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4199:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4199:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4199:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "4173:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "4178:2:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "4169:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4169:12:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4187:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "4183:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4183:7:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4165:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4165:26:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "4193:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "4161:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4161:35:67" + }, + "nodeType": "YulIf", + "src": "4158:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4234:23:67", + "value": { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "4254:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "4248:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "4248:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "4238:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4270:33:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4292:6:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "4300:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4288:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4288:15:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "4274:10:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4316:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4326:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "4320:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4407:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "4409:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "4409:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4409:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "4366:10:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "4378:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "4363:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "4363:18:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "4386:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4398:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "4383:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "4383:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "4360:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "4360:46:67" + }, + "nodeType": "YulIf", + "src": "4357:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "4440:2:67" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "4444:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4433:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4433:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4433:22:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4475:6:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "4493:2:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4497:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4489:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4489:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "4483:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "4483:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4468:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4468:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4468:34:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4515:34:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "4541:2:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "4545:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4537:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4537:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "4531:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "4531:18:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "4519:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4582:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4591:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4598:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4584:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4584:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4584:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "4568:8:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "4578:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "4565:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "4565:16:67" + }, + "nodeType": "YulIf", + "src": "4562:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4630:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4638:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4626:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4626:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "4681:2:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "4685:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4677:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4677:17:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4696:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4673:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4673:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "4701:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "4643:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "4643:62:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4619:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4619:87:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4619:87:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "4726:3:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4731:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4719:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4719:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4719:19:67" + }, + { + "nodeType": "YulAssignment", + "src": "4751:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "4762:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4767:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4758:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4758:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "4751:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "4783:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4794:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4799:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4790:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4790:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4783:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "4037:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "4040:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "4034:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "4034:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "4044:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4046:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "4055:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4058:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4051:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4051:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "4046:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "4030:3:67", + "statements": [] + }, + "src": "4026:786:67" + }, + { + "nodeType": "YulAssignment", + "src": "4821:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "4830:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4821:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_struct$_OrderItem_$dyn_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "3643:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "3651:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "3659:5:67", + "type": "" + } + ], + "src": "3578:1263:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4933:2015:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "4982:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4991:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4998:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4984:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4984:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4984:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4961:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4969:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4957:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4957:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "4976:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "4953:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4953:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "4946:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4946:35:67" + }, + "nodeType": "YulIf", + "src": "4943:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5015:23:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5031:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5025:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5025:13:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "5019:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5047:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5057:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "5051:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5070:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "5142:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "5096:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "5096:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "5081:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "5081:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "5074:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5155:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "5168:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "5159:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "5187:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "5192:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5180:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5180:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5180:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "5204:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "5215:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "5220:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5211:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5211:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "5204:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5232:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5247:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "5255:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5243:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5243:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "5236:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5267:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "5276:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "5271:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5335:1584:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "5349:33:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5363:6:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "5377:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5371:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5371:10:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5359:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5359:23:67" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "5353:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5395:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5405:6:67", + "type": "", + "value": "0x01a0" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "5399:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5463:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "5472:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "5479:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "5465:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5465:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5465:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "5439:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5444:2:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "5435:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5435:12:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5453:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "5449:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5449:7:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5431:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5431:26:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "5459:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "5427:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5427:35:67" + }, + "nodeType": "YulIf", + "src": "5424:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5500:31:67", + "value": { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "5528:2:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "5513:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "5513:18:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "5504:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5551:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5568:2:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "5572:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5564:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5564:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5558:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5558:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5544:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5544:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5544:33:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5601:5:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "5608:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5597:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5597:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5649:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5653:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5645:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5645:11:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "5613:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "5613:44:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5590:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5590:68:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5590:68:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5682:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5689:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5678:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5678:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5704:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5708:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5700:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5700:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5694:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5694:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5671:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5671:42:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5671:42:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5737:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5744:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5733:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5733:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5759:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5763:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5755:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5755:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5749:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5749:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5726:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5726:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5726:43:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5793:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5800:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5789:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5789:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5816:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5820:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5812:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5812:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5806:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5806:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5782:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5782:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5782:44:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5850:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5857:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5846:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5846:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5873:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5877:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5869:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5869:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5863:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5863:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5839:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5839:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5839:44:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5907:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5914:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5903:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5903:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5956:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5960:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5952:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5952:12:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "5920:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "5920:45:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5896:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5896:70:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5896:70:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5979:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5989:3:67", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "5983:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6005:34:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6031:2:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "6035:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6027:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6027:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "6021:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "6021:18:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "6009:8:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6052:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6062:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "6056:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6113:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "6122:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "6129:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "6115:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6115:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6115:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "6099:8:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "6109:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "6096:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "6096:16:67" + }, + "nodeType": "YulIf", + "src": "6093:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6161:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6168:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6157:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6157:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6212:2:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "6216:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6208:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6208:17:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "6227:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6204:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6204:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "6232:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "6174:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "6174:62:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6150:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6150:87:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6150:87:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6250:35:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6276:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6280:3:67", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6272:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6272:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "6266:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "6266:19:67" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "6254:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6318:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "6327:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "6334:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "6320:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6320:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6320:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "6304:8:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "6314:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "6301:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "6301:16:67" + }, + "nodeType": "YulIf", + "src": "6298:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6366:5:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "6373:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6362:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6362:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6442:2:67" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "6446:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6438:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6438:17:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "6457:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6434:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6434:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "6462:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_OrderItem_$dyn_fromMemory", + "nodeType": "YulIdentifier", + "src": "6378:55:67" + }, + "nodeType": "YulFunctionCall", + "src": "6378:88:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6355:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6355:112:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6355:112:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6480:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6490:3:67", + "type": "", + "value": "320" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "6484:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6517:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6524:3:67", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6513:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6513:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6540:2:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "6544:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6536:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6536:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "6530:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "6530:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6506:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6506:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6506:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6562:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6572:3:67", + "type": "", + "value": "352" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "6566:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6599:5:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "6606:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6595:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6595:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6621:2:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "6625:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6617:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6617:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "6611:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "6611:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6588:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6588:42:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6588:42:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6643:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6653:3:67", + "type": "", + "value": "384" + }, + "variables": [ + { + "name": "_9", + "nodeType": "YulTypedName", + "src": "6647:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6680:5:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "6687:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6676:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6676:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6726:2:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "6730:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6722:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6722:11:67" + } + ], + "functionName": { + "name": "abi_decode_t_uint8_fromMemory", + "nodeType": "YulIdentifier", + "src": "6692:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "6692:42:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6669:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6669:66:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6669:66:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6759:5:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "6766:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6755:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6755:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6805:2:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "6809:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6801:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6801:11:67" + } + ], + "functionName": { + "name": "abi_decode_t_uint8_fromMemory", + "nodeType": "YulIdentifier", + "src": "6771:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "6771:42:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6748:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6748:66:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6748:66:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "6834:3:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6839:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6827:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6827:18:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6827:18:67" + }, + { + "nodeType": "YulAssignment", + "src": "6858:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "6869:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "6874:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6865:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6865:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "6858:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "6890:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "6901:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "6906:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6897:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6897:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "6890:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "5301:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "5304:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "5298:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "5298:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "5308:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5310:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "5319:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5322:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5315:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5315:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "5310:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "5294:3:67", + "statements": [] + }, + "src": "5290:1629:67" + }, + { + "nodeType": "YulAssignment", + "src": "6928:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "6937:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "6928:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_struct$_Order_$dyn_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "4907:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "4915:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "4923:5:67", + "type": "" + } + ], + "src": "4846:2102:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7047:1958:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "7096:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "7105:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "7112:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7098:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7098:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7098:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7075:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7083:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7071:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7071:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "7090:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "7067:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7067:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "7060:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7060:35:67" + }, + "nodeType": "YulIf", + "src": "7057:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7129:23:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7145:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "7139:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "7139:13:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "7133:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7161:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7171:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "7165:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7184:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "7256:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "7210:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "7210:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "7195:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "7195:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "7188:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7269:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "7282:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "7273:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "7301:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "7306:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7294:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7294:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7294:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "7318:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "7329:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7334:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7325:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7325:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "7318:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7346:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7361:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7369:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7357:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7357:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "7350:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7381:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "7390:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "7385:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7449:1527:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "7463:33:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7477:6:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "7491:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "7485:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "7485:10:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7473:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7473:23:67" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "7467:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7509:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7519:6:67", + "type": "", + "value": "0x0160" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "7513:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7577:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "7586:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "7593:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7579:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7579:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7579:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "7553:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "7558:2:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "7549:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7549:12:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7567:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "7563:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7563:7:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7545:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7545:26:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "7573:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "7541:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7541:35:67" + }, + "nodeType": "YulIf", + "src": "7538:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7614:31:67", + "value": { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "7642:2:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "7627:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "7627:18:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "7618:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7665:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "7709:2:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7713:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7705:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7705:11:67" + } + ], + "functionName": { + "name": "abi_decode_t_enum$_Op_fromMemory", + "nodeType": "YulIdentifier", + "src": "7672:32:67" + }, + "nodeType": "YulFunctionCall", + "src": "7672:45:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7658:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7658:60:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7658:60:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7731:12:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7741:2:67", + "type": "", + "value": "64" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "7735:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7767:5:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7774:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7763:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7763:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "7789:2:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "7793:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7785:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7785:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "7779:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "7779:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7756:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7756:42:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7756:42:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7811:12:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7821:2:67", + "type": "", + "value": "96" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "7815:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7847:5:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "7854:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7843:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7843:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "7869:2:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "7873:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7865:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7865:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "7859:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "7859:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7836:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7836:42:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7836:42:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7891:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7901:3:67", + "type": "", + "value": "128" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "7895:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7928:5:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "7935:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7924:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7924:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "7950:2:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "7954:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7946:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7946:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "7940:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "7940:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7917:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7917:42:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7917:42:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7972:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7982:3:67", + "type": "", + "value": "160" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "7976:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8009:5:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "8016:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8005:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8005:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8031:2:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "8035:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8027:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8027:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "8021:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "8021:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7998:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7998:42:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7998:42:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8064:5:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "8071:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8060:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8060:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8112:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8116:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8108:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8108:12:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "8076:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "8076:45:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8053:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8053:69:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8053:69:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8135:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8145:3:67", + "type": "", + "value": "224" + }, + "variables": [ + { + "name": "_9", + "nodeType": "YulTypedName", + "src": "8139:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8161:34:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8187:2:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "8191:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8183:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8183:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "8177:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "8177:18:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "8165:8:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8208:29:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8219:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_10", + "nodeType": "YulTypedName", + "src": "8212:3:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8271:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "8280:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "8287:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "8273:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8273:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8273:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "8256:8:67" + }, + { + "name": "_10", + "nodeType": "YulIdentifier", + "src": "8266:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "8253:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "8253:17:67" + }, + "nodeType": "YulIf", + "src": "8250:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8319:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8326:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8315:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8315:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8370:2:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "8374:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8366:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8366:17:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8385:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8362:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8362:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "8390:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "8332:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "8332:62:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8308:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8308:87:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8308:87:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8408:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8419:3:67", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_11", + "nodeType": "YulTypedName", + "src": "8412:3:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8446:5:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "8453:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8442:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8442:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8468:2:67" + }, + { + "name": "_11", + "nodeType": "YulIdentifier", + "src": "8472:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8464:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8464:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "8458:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "8458:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8435:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8435:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8435:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8491:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8502:3:67", + "type": "", + "value": "288" + }, + "variables": [ + { + "name": "_12", + "nodeType": "YulTypedName", + "src": "8495:3:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8529:5:67" + }, + { + "name": "_11", + "nodeType": "YulIdentifier", + "src": "8536:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8525:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8525:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8552:2:67" + }, + { + "name": "_12", + "nodeType": "YulIdentifier", + "src": "8556:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8548:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8548:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "8542:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "8542:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8518:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8518:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8518:44:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8575:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8586:3:67", + "type": "", + "value": "320" + }, + "variables": [ + { + "name": "_13", + "nodeType": "YulTypedName", + "src": "8579:3:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8613:5:67" + }, + { + "name": "_12", + "nodeType": "YulIdentifier", + "src": "8620:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8609:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8609:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8636:2:67" + }, + { + "name": "_13", + "nodeType": "YulIdentifier", + "src": "8640:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8632:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8632:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "8626:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "8626:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8602:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8602:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8602:44:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8659:34:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8685:2:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "8689:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8681:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8681:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "8675:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "8675:18:67" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "8663:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8727:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "8736:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "8743:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "8729:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8729:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8729:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "8712:8:67" + }, + { + "name": "_10", + "nodeType": "YulIdentifier", + "src": "8722:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "8709:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "8709:17:67" + }, + "nodeType": "YulIf", + "src": "8706:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8775:5:67" + }, + { + "name": "_13", + "nodeType": "YulIdentifier", + "src": "8782:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8771:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8771:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8846:2:67" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "8850:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8842:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8842:17:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8861:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8838:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8838:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "8866:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Fee_$dyn_fromMemory", + "nodeType": "YulIdentifier", + "src": "8788:49:67" + }, + "nodeType": "YulFunctionCall", + "src": "8788:82:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8764:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8764:107:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8764:107:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "8891:3:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8896:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8884:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8884:18:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8884:18:67" + }, + { + "nodeType": "YulAssignment", + "src": "8915:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "8926:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8931:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8922:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8922:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "8915:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "8947:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "8958:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8963:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8954:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8954:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "8947:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "7415:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "7418:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "7412:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "7412:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "7422:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7424:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "7433:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7436:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7429:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7429:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "7424:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "7408:3:67", + "statements": [] + }, + "src": "7404:1572:67" + }, + { + "nodeType": "YulAssignment", + "src": "8985:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "8994:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "8985:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_struct$_SettleDetail_$dyn_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "7021:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "7029:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "7037:5:67", + "type": "" + } + ], + "src": "6953:2052:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9080:635:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "9129:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "9138:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "9145:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "9131:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "9131:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "9131:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9108:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9116:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9104:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9104:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "9123:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "9100:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9100:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "9093:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "9093:35:67" + }, + "nodeType": "YulIf", + "src": "9090:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9162:30:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9185:6:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "9172:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "9172:20:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "9166:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9201:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9211:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "9205:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9224:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "9296:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "9250:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "9250:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "9235:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "9235:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "9228:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9309:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9322:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "9313:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9341:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "9346:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9334:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "9334:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "9334:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "9358:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9369:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9374:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9365:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9365:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9358:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9386:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9401:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9409:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9397:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9397:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "9390:3:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9467:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "9476:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "9483:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "9469:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "9469:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "9469:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9435:6:67" + }, + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "9447:2:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9451:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "9443:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9443:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9431:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9431:24:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9457:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9427:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9427:33:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "9462:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "9424:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "9424:42:67" + }, + "nodeType": "YulIf", + "src": "9421:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9500:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "9509:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "9504:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9568:118:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9589:3:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "9607:3:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "9594:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "9594:17:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9582:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "9582:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "9582:30:67" + }, + { + "nodeType": "YulAssignment", + "src": "9625:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9636:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9641:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9632:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9632:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9625:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "9657:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "9668:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9673:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9664:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9664:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "9657:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "9534:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "9537:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "9531:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "9531:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "9541:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9543:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "9552:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9555:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9548:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9548:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "9543:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "9527:3:67", + "statements": [] + }, + "src": "9523:163:67" + }, + { + "nodeType": "YulAssignment", + "src": "9695:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "9704:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "9695:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_uint256_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "9054:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "9062:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "9070:5:67", + "type": "" + } + ], + "src": "9010:705:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9768:84:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9778:29:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9800:6:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "9787:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "9787:20:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9778:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9840:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_bool", + "nodeType": "YulIdentifier", + "src": "9816:23:67" + }, + "nodeType": "YulFunctionCall", + "src": "9816:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "9816:30:67" + } + ] + }, + "name": "abi_decode_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "9747:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "9758:5:67", + "type": "" + } + ], + "src": "9720:132:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9916:77:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9926:22:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9941:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "9935:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "9935:13:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9926:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9981:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_bool", + "nodeType": "YulIdentifier", + "src": "9957:23:67" + }, + "nodeType": "YulFunctionCall", + "src": "9957:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "9957:30:67" + } + ] + }, + "name": "abi_decode_t_bool_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "9895:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "9906:5:67", + "type": "" + } + ], + "src": "9857:136:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10059:79:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "10069:22:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10084:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "10078:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "10078:13:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10069:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "10126:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_bytes4", + "nodeType": "YulIdentifier", + "src": "10100:25:67" + }, + "nodeType": "YulFunctionCall", + "src": "10100:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10100:32:67" + } + ] + }, + "name": "abi_decode_t_bytes4_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "10038:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "10049:5:67", + "type": "" + } + ], + "src": "9998:140:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10197:431:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "10246:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10255:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10262:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "10248:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10248:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10248:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10225:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10233:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10221:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10221:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "10240:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "10217:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10217:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "10210:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10210:35:67" + }, + "nodeType": "YulIf", + "src": "10207:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10279:30:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10302:6:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "10289:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "10289:20:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "10283:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10318:64:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10378:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_bytes", + "nodeType": "YulIdentifier", + "src": "10348:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "10348:33:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "10333:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "10333:49:67" + }, + "variables": [ + { + "name": "array_1", + "nodeType": "YulTypedName", + "src": "10322:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "10398:7:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10407:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10391:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10391:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10391:19:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10458:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10467:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10474:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "10460:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10460:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10460:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10433:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10441:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10429:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10429:15:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10446:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10425:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10425:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "10453:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "10422:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "10422:35:67" + }, + "nodeType": "YulIf", + "src": "10419:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "10508:7:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10517:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10504:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10504:18:67" + }, + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10528:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10536:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10524:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10524:17:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10543:2:67" + } + ], + "functionName": { + "name": "calldatacopy", + "nodeType": "YulIdentifier", + "src": "10491:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "10491:55:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10491:55:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "10570:7:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10579:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10566:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10566:16:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10584:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10562:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10562:27:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10591:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10555:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10555:42:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10555:42:67" + }, + { + "nodeType": "YulAssignment", + "src": "10606:16:67", + "value": { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "10615:7:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10606:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_bytes", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "10171:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "10179:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "10187:5:67", + "type": "" + } + ], + "src": "10143:485:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10698:382:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "10747:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10756:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10763:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "10749:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10749:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10749:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10726:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10734:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10722:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10722:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "10741:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "10718:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10718:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "10711:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10711:35:67" + }, + "nodeType": "YulIf", + "src": "10708:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10780:23:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10796:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "10790:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "10790:13:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "10784:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10812:64:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10872:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_bytes", + "nodeType": "YulIdentifier", + "src": "10842:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "10842:33:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "10827:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "10827:49:67" + }, + "variables": [ + { + "name": "array_1", + "nodeType": "YulTypedName", + "src": "10816:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "10892:7:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10901:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10885:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10885:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10885:19:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10952:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10961:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10968:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "10954:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10954:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10954:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10927:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10935:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10923:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10923:15:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10940:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10919:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10919:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "10947:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "10916:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "10916:35:67" + }, + "nodeType": "YulIf", + "src": "10913:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11011:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11019:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11007:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11007:17:67" + }, + { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "11030:7:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11039:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11026:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11026:18:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "11046:2:67" + } + ], + "functionName": { + "name": "copy_memory_to_memory", + "nodeType": "YulIdentifier", + "src": "10985:21:67" + }, + "nodeType": "YulFunctionCall", + "src": "10985:64:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10985:64:67" + }, + { + "nodeType": "YulAssignment", + "src": "11058:16:67", + "value": { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "11067:7:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "11058:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "10672:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "10680:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "10688:5:67", + "type": "" + } + ], + "src": "10633:447:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11142:95:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11152:29:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11174:6:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "11161:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "11161:20:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11152:5:67" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11215:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11224:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11227:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "11217:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11217:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11217:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11203:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11210:2:67", + "type": "", + "value": "11" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "11200:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "11200:13:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "11193:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11193:21:67" + }, + "nodeType": "YulIf", + "src": "11190:2:67" + } + ] + }, + "name": "abi_decode_t_enum$_Markets", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "11121:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "11132:5:67", + "type": "" + } + ], + "src": "11085:152:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11305:87:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11315:22:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11330:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11324:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "11324:13:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11315:5:67" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11370:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11379:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11382:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "11372:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11372:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11372:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11359:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11366:1:67", + "type": "", + "value": "8" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "11356:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "11356:12:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "11349:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11349:20:67" + }, + "nodeType": "YulIf", + "src": "11346:2:67" + } + ] + }, + "name": "abi_decode_t_enum$_Op_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "11284:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "11295:5:67", + "type": "" + } + ], + "src": "11242:150:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11462:87:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11472:22:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11487:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11481:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "11481:13:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11472:5:67" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11527:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11536:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11539:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "11529:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11529:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11529:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11516:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11523:1:67", + "type": "", + "value": "2" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "11513:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "11513:12:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "11506:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11506:20:67" + }, + "nodeType": "YulIf", + "src": "11503:2:67" + } + ] + }, + "name": "abi_decode_t_enum$_Side_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "11441:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "11452:5:67", + "type": "" + } + ], + "src": "11397:152:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11630:858:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "11674:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11683:5:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11690:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "11676:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11676:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11676:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "11651:3:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11656:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "11647:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11647:19:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11668:4:67", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "11643:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11643:30:67" + }, + "nodeType": "YulIf", + "src": "11640:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "11707:29:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11731:4:67", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "11716:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "11716:20:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11707:5:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11745:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11765:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11759:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "11759:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "11749:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11784:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11794:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "11788:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11839:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11848:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11851:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "11841:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11841:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11841:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11827:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "11835:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "11824:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "11824:14:67" + }, + "nodeType": "YulIf", + "src": "11821:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11871:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11920:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11931:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11916:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11916:22:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "11940:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_Order_fromMemory", + "nodeType": "YulIdentifier", + "src": "11878:37:67" + }, + "nodeType": "YulFunctionCall", + "src": "11878:66:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11864:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11864:81:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11864:81:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11965:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11972:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11961:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11961:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12011:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12022:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12007:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12007:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_uint8_fromMemory", + "nodeType": "YulIdentifier", + "src": "11977:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "11977:49:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11954:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11954:73:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11954:73:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12047:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12054:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12043:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12043:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12069:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12080:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12065:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12065:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12059:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "12059:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12036:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12036:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12036:49:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12105:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12112:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12101:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12101:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12127:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12138:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12123:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12123:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12117:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "12117:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12094:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12094:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12094:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "12152:42:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12178:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12189:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12174:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12174:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12168:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "12168:26:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "12156:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12223:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12232:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12235:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "12225:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12225:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12225:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "12209:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "12219:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "12206:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "12206:16:67" + }, + "nodeType": "YulIf", + "src": "12203:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12259:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12266:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12255:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12255:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12306:9:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "12317:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12302:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12302:24:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "12328:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "12272:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "12272:60:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12248:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12248:85:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12248:85:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12353:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12360:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12349:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12349:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12405:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12416:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12401:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12401:19:67" + } + ], + "functionName": { + "name": "abi_decode_t_enum$_Side_fromMemory", + "nodeType": "YulIdentifier", + "src": "12366:34:67" + }, + "nodeType": "YulFunctionCall", + "src": "12366:55:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12342:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12342:80:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12342:80:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12442:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12449:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12438:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12438:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12465:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12476:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12461:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12461:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12455:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "12455:26:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12431:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12431:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12431:51:67" + } + ] + }, + "name": "abi_decode_t_struct$_Input_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "11601:9:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "11612:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "11620:5:67", + "type": "" + } + ], + "src": "11554:934:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12574:1518:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "12584:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12594:6:67", + "type": "", + "value": "0x0200" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "12588:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12641:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12650:5:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12657:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "12643:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12643:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12643:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "12620:3:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12625:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "12616:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12616:19:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "12637:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "12612:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12612:28:67" + }, + "nodeType": "YulIf", + "src": "12609:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "12674:27:67", + "value": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "12698:2:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "12683:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "12683:18:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12674:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12717:5:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12753:9:67" + } + ], + "functionName": { + "name": "abi_decode_t_bool_fromMemory", + "nodeType": "YulIdentifier", + "src": "12724:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "12724:39:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12710:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12710:54:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12710:54:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12784:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12791:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12780:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12780:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12832:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12843:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12828:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12828:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "12796:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "12796:51:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12773:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12773:75:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12773:75:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12868:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12875:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12864:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12864:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12916:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12927:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12912:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12912:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "12880:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "12880:51:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12857:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12857:75:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12857:75:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12952:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12959:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12948:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12948:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12974:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12985:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12970:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12970:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12964:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "12964:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12941:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12941:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12941:49:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13010:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13017:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13006:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13006:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13033:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13044:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13029:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13029:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13023:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13023:26:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12999:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12999:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12999:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13070:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13077:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13066:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13066:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13093:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13104:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13089:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13089:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13083:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13083:26:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13059:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13059:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13059:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13130:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13137:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13126:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13126:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13179:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13190:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13175:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13175:19:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "13143:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "13143:52:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13119:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13119:77:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13119:77:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13216:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13223:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13212:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13212:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13265:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13276:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13261:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13261:19:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "13229:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "13229:52:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13205:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13205:77:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13205:77:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13291:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13301:3:67", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "13295:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13324:5:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "13331:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13320:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13320:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13346:9:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "13357:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13342:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13342:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13336:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13336:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13313:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13313:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13313:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13371:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13381:3:67", + "type": "", + "value": "288" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "13375:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13404:5:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "13411:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13400:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13400:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13426:9:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "13437:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13422:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13422:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13416:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13416:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13393:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13393:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13393:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13451:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13461:3:67", + "type": "", + "value": "320" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "13455:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13484:5:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "13491:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13480:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13480:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13506:9:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "13517:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13502:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13502:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13496:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13496:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13473:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13473:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13473:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13531:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13541:3:67", + "type": "", + "value": "352" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "13535:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13564:5:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "13571:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13560:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13560:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13586:9:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "13597:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13582:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13582:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13576:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13576:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13553:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13553:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13553:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13611:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13621:3:67", + "type": "", + "value": "384" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "13615:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13633:39:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13657:9:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "13668:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13653:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13653:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13647:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13647:25:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "13637:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13715:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13724:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13727:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "13717:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13717:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13717:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "13687:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13695:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "13684:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "13684:30:67" + }, + "nodeType": "YulIf", + "src": "13681:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13751:5:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "13758:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13747:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13747:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13797:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "13808:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13793:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13793:22:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "13817:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "13763:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "13763:58:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13740:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13740:82:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13740:82:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13831:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13841:3:67", + "type": "", + "value": "416" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "13835:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13864:5:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "13871:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13860:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13860:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13910:9:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "13921:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13906:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13906:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_uint8_fromMemory", + "nodeType": "YulIdentifier", + "src": "13876:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "13876:49:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13853:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13853:73:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13853:73:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13935:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13945:3:67", + "type": "", + "value": "448" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "13939:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13968:5:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "13975:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13964:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13964:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13990:9:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "14001:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13986:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13986:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13980:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13980:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13957:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13957:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13957:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14015:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14025:3:67", + "type": "", + "value": "480" + }, + "variables": [ + { + "name": "_9", + "nodeType": "YulTypedName", + "src": "14019:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14048:5:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "14055:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14044:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14044:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14070:9:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "14081:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14066:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14066:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14060:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "14060:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14037:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14037:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14037:49:67" + } + ] + }, + "name": "abi_decode_t_struct$_MakerOrder_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "12545:9:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "12556:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "12564:5:67", + "type": "" + } + ], + "src": "12493:1599:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14173:1453:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "14183:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14193:6:67", + "type": "", + "value": "0x01a0" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "14187:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14240:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14249:5:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14256:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "14242:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14242:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14242:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "14219:3:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14224:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "14215:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14215:19:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "14236:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "14211:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14211:28:67" + }, + "nodeType": "YulIf", + "src": "14208:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "14273:27:67", + "value": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "14297:2:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "14282:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "14282:18:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14273:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14316:5:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14355:9:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "14323:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "14323:42:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14309:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14309:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14309:57:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14386:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14393:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14382:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14382:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14437:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14448:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14433:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14433:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_enum$_Side_fromMemory", + "nodeType": "YulIdentifier", + "src": "14398:34:67" + }, + "nodeType": "YulFunctionCall", + "src": "14398:54:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14375:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14375:78:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14375:78:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14473:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14480:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14469:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14469:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14521:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14532:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14517:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14517:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "14485:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "14485:51:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14462:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14462:75:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14462:75:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14557:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14564:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14553:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14553:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14605:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14616:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14601:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14601:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "14569:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "14569:51:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14546:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14546:75:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14546:75:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14641:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14648:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14637:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14637:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14664:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14675:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14660:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14660:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14654:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "14654:26:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14630:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14630:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14630:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14701:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14708:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14697:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14697:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14724:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14735:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14720:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14720:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14714:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "14714:26:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14690:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14690:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14690:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14761:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14768:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14757:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14757:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14810:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14821:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14806:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14806:19:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "14774:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "14774:52:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14750:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14750:77:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14750:77:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14847:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14854:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14843:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14843:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14870:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14881:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14866:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14866:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14860:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "14860:26:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14836:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14836:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14836:51:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14896:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14906:3:67", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "14900:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14929:5:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "14936:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14925:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14925:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14951:9:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "14962:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14947:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14947:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14941:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "14941:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14918:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14918:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14918:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14976:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14986:3:67", + "type": "", + "value": "288" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "14980:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15009:5:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "15016:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15005:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15005:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15031:9:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "15042:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15027:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15027:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15021:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "15021:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14998:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14998:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14998:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15056:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15066:3:67", + "type": "", + "value": "320" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "15060:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15078:39:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15102:9:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "15113:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15098:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15098:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15092:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "15092:25:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "15082:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15126:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15136:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "15130:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15181:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15190:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15193:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "15183:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15183:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15183:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "15169:6:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "15177:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "15166:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "15166:14:67" + }, + "nodeType": "YulIf", + "src": "15163:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15217:5:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "15224:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15213:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15213:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15305:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "15316:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15301:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15301:22:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "15325:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr_fromMemory", + "nodeType": "YulIdentifier", + "src": "15229:71:67" + }, + "nodeType": "YulFunctionCall", + "src": "15229:100:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15206:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15206:124:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15206:124:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15339:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15349:3:67", + "type": "", + "value": "352" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "15343:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15372:5:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "15379:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15368:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15368:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15394:9:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "15405:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15390:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15390:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15384:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "15384:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15361:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15361:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15361:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15419:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15429:3:67", + "type": "", + "value": "384" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "15423:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15441:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15467:9:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "15478:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15463:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15463:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15457:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "15457:25:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "15445:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15511:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15520:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15523:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "15513:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15513:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15513:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "15497:8:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "15507:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "15494:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "15494:16:67" + }, + "nodeType": "YulIf", + "src": "15491:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15547:5:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "15554:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15543:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15543:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15593:9:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "15604:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15589:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15589:24:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "15615:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "15559:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "15559:60:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15536:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15536:84:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15536:84:67" + } + ] + }, + "name": "abi_decode_t_struct$_Order_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "14144:9:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "14155:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "14163:5:67", + "type": "" + } + ], + "src": "14097:1529:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15706:687:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "15750:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15759:5:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15766:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "15752:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15752:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15752:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "15727:3:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15732:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "15723:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15723:19:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15744:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "15719:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15719:30:67" + }, + "nodeType": "YulIf", + "src": "15716:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15783:23:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15803:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15797:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "15797:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "15787:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15815:35:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "15837:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15845:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15833:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15833:17:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "15819:10:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15859:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15869:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "15863:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15946:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "15948:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "15948:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15948:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "15905:10:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "15917:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "15902:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "15902:18:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "15925:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "15937:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "15922:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "15922:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "15899:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "15899:46:67" + }, + "nodeType": "YulIf", + "src": "15896:2:67" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15975:2:67", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "15979:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15968:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15968:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15968:22:67" + }, + { + "nodeType": "YulAssignment", + "src": "15999:15:67", + "value": { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16008:6:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15999:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16030:6:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16065:9:67" + } + ], + "functionName": { + "name": "abi_decode_t_enum$_Markets", + "nodeType": "YulIdentifier", + "src": "16038:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "16038:37:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16023:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16023:53:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16023:53:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16096:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16104:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16092:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16092:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16126:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16137:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16122:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16122:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "16109:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "16109:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16085:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16085:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16085:57:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16162:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16170:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16158:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16158:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16192:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16203:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16188:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16188:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "16175:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "16175:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16151:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16151:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16151:57:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "16217:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16248:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16259:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16244:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16244:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "16231:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "16231:32:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "16221:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16290:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16299:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16302:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "16292:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16292:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16292:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "16278:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "16286:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "16275:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "16275:14:67" + }, + "nodeType": "YulIf", + "src": "16272:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16326:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16334:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16322:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16322:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16362:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "16373:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16358:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16358:22:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "16382:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "16339:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "16339:47:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16315:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16315:72:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16315:72:67" + } + ] + }, + "name": "abi_decode_t_struct$_PurchaseDetails", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "15677:9:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "15688:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "15696:5:67", + "type": "" + } + ], + "src": "15631:762:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16481:780:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "16525:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "16534:5:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "16541:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "16527:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16527:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16527:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "16502:3:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16507:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "16498:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16498:19:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16519:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "16494:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16494:30:67" + }, + "nodeType": "YulIf", + "src": "16491:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "16558:23:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16578:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16572:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "16572:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "16562:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "16590:35:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16612:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16620:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16608:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16608:17:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "16594:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16700:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "16702:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "16702:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16702:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "16643:10:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16655:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "16640:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "16640:34:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "16679:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16691:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "16676:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "16676:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "16637:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "16637:62:67" + }, + "nodeType": "YulIf", + "src": "16634:2:67" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16729:2:67", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "16733:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16722:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16722:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16722:22:67" + }, + { + "nodeType": "YulAssignment", + "src": "16753:15:67", + "value": { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16762:6:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "16753:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16784:6:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16798:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16792:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "16792:16:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16777:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16777:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16777:32:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16829:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16837:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16825:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16825:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16852:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16863:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16848:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16848:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16842:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "16842:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16818:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16818:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16818:50:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16888:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16896:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16884:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16884:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16911:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16922:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16907:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16907:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16901:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "16901:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16877:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16877:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16877:50:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16947:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16955:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16943:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16943:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16970:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16981:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16966:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16966:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16960:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "16960:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16936:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16936:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16936:50:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "16995:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17020:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17031:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17016:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17016:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17010:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "17010:26:67" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "16999:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "17072:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "17045:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "17045:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17045:35:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "17100:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17108:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17096:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17096:16:67" + }, + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "17114:7:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17089:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "17089:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17089:33:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "17131:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17156:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17167:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17152:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17152:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17146:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "17146:26:67" + }, + "variables": [ + { + "name": "value_2", + "nodeType": "YulTypedName", + "src": "17135:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_2", + "nodeType": "YulIdentifier", + "src": "17205:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_bool", + "nodeType": "YulIdentifier", + "src": "17181:23:67" + }, + "nodeType": "YulFunctionCall", + "src": "17181:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17181:32:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "17233:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17241:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17229:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17229:16:67" + }, + { + "name": "value_2", + "nodeType": "YulIdentifier", + "src": "17247:7:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17222:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "17222:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17222:33:67" + } + ] + }, + "name": "abi_decode_t_struct$_SettleShared_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "16452:9:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "16463:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "16471:5:67", + "type": "" + } + ], + "src": "16398:863:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "17326:102:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "17336:22:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "17351:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17345:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "17345:13:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "17336:5:67" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "17406:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17415:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17418:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "17408:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "17408:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17408:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "17380:5:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "17391:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17398:4:67", + "type": "", + "value": "0xff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "17387:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17387:16:67" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "17377:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "17377:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "17370:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "17370:35:67" + }, + "nodeType": "YulIf", + "src": "17367:2:67" + } + ] + }, + "name": "abi_decode_t_uint8_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "17305:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "17316:5:67", + "type": "" + } + ], + "src": "17266:162:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "17503:189:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "17549:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "17558:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "17566:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "17551:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "17551:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17551:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "17524:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17533:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "17520:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17520:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17545:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "17516:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17516:32:67" + }, + "nodeType": "YulIf", + "src": "17513:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "17584:36:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17610:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "17597:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "17597:23:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "17588:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "17656:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "17629:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "17629:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17629:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "17671:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "17681:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "17671:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "17469:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "17480:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "17492:6:67", + "type": "" + } + ], + "src": "17433:259:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "17894:932:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "17941:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "17950:6:67" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "17958:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "17943:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "17943:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17943:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "17915:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17924:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "17911:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17911:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17936:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "17907:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17907:33:67" + }, + "nodeType": "YulIf", + "src": "17904:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "17976:36:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18002:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "17989:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "17989:23:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "17980:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "18048:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "18021:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "18021:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "18021:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "18063:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "18073:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "18063:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18087:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18119:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18130:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18115:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18115:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "18102:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "18102:32:67" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "18091:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "18170:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "18143:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "18143:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "18143:35:67" + }, + { + "nodeType": "YulAssignment", + "src": "18187:17:67", + "value": { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "18197:7:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "18187:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18213:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18244:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18255:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18240:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18240:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "18227:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "18227:32:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "18217:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18268:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18278:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "18272:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18323:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18332:6:67" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18340:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "18325:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "18325:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "18325:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "18311:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "18319:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "18308:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "18308:14:67" + }, + "nodeType": "YulIf", + "src": "18305:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "18358:77:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18407:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "18418:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18403:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18403:22:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "18427:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_uint256_$dyn", + "nodeType": "YulIdentifier", + "src": "18368:34:67" + }, + "nodeType": "YulFunctionCall", + "src": "18368:67:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "18358:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18444:48:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18477:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18488:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18473:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18473:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "18460:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "18460:32:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "18448:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18521:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18530:6:67" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18538:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "18523:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "18523:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "18523:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "18507:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "18517:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "18504:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "18504:16:67" + }, + "nodeType": "YulIf", + "src": "18501:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "18556:79:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18605:9:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "18616:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18601:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18601:24:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "18627:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_uint256_$dyn", + "nodeType": "YulIdentifier", + "src": "18566:34:67" + }, + "nodeType": "YulFunctionCall", + "src": "18566:69:67" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "18556:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18644:49:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18677:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18688:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18673:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18673:19:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "18660:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "18660:33:67" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "18648:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18722:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18731:6:67" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18739:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "18724:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "18724:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "18724:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "18708:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "18718:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "18705:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "18705:16:67" + }, + "nodeType": "YulIf", + "src": "18702:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "18757:63:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18790:9:67" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "18801:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18786:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18786:24:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "18812:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "18767:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "18767:53:67" + }, + "variableNames": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18757:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_addresst_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "17828:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "17839:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "17851:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "17859:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "17867:6:67", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "17875:6:67", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "17883:6:67", + "type": "" + } + ], + "src": "17697:1129:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18961:561:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "19008:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "19017:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "19025:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "19010:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "19010:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "19010:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "18982:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18991:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "18978:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18978:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19003:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "18974:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18974:33:67" + }, + "nodeType": "YulIf", + "src": "18971:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19043:36:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19069:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19056:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19056:23:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "19047:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19115:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "19088:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "19088:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "19088:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "19130:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19140:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "19130:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19154:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19186:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19197:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19182:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19182:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19169:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19169:32:67" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "19158:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19237:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "19210:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "19210:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "19210:35:67" + }, + { + "nodeType": "YulAssignment", + "src": "19254:17:67", + "value": { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19264:7:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "19254:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "19280:42:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19307:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19318:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19303:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19303:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19290:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19290:32:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "19280:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19331:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19362:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19373:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19358:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19358:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19345:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19345:32:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "19335:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "19420:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "19429:6:67" + }, + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "19437:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "19422:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "19422:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "19422:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "19392:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19400:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "19389:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "19389:30:67" + }, + "nodeType": "YulIf", + "src": "19386:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "19455:61:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19488:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "19499:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19484:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19484:22:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "19508:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "19465:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "19465:51:67" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "19455:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "18903:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "18914:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "18926:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "18934:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "18942:6:67", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "18950:6:67", + "type": "" + } + ], + "src": "18831:691:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "19674:613:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "19721:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "19730:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "19738:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "19723:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "19723:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "19723:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "19695:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19704:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "19691:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19691:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19716:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "19687:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19687:33:67" + }, + "nodeType": "YulIf", + "src": "19684:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19756:36:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19782:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19769:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19769:23:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "19760:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19828:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "19801:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "19801:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "19801:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "19843:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19853:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "19843:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19867:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19899:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19910:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19895:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19895:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19882:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19882:32:67" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "19871:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19950:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "19923:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "19923:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "19923:35:67" + }, + { + "nodeType": "YulAssignment", + "src": "19967:17:67", + "value": { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19977:7:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "19967:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "19993:42:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20020:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20031:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20016:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20016:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "20003:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "20003:32:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "19993:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "20044:42:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20071:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20082:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20067:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20067:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "20054:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "20054:32:67" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "20044:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20095:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20126:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20137:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20122:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20122:19:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "20109:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "20109:33:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "20099:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "20185:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "20194:6:67" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "20202:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "20187:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "20187:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "20187:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "20157:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20165:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "20154:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "20154:30:67" + }, + "nodeType": "YulIf", + "src": "20151:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "20220:61:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20253:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "20264:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20249:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20249:22:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "20273:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "20230:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "20230:51:67" + }, + "variableNames": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "20220:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "19608:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "19619:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "19631:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "19639:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "19647:6:67", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "19655:6:67", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "19663:6:67", + "type": "" + } + ], + "src": "19527:760:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "20462:1005:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "20509:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20518:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20526:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "20511:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "20511:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "20511:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "20483:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20492:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "20479:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20479:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20504:3:67", + "type": "", + "value": "448" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "20475:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20475:33:67" + }, + "nodeType": "YulIf", + "src": "20472:2:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "20590:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20599:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20607:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "20592:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "20592:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "20592:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20562:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20573:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20558:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20558:20:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "20580:7:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "20554:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20554:34:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "20547:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "20547:42:67" + }, + "nodeType": "YulIf", + "src": "20544:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20625:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20635:3:67", + "type": "", + "value": "352" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "20629:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20647:29:67", + "value": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "20673:2:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "20658:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "20658:18:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "20651:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20685:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "20698:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "20689:5:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20710:20:67", + "value": { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20721:9:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "20714:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20739:28:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20753:9:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "20764:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20749:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20749:18:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "20743:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "20795:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20804:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20812:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "20797:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "20797:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "20797:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "20782:2:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "20786:7:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "20779:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "20779:15:67" + }, + "nodeType": "YulIf", + "src": "20776:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20830:15:67", + "value": { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20839:6:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "20834:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "20901:222:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "20915:30:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "20941:3:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "20928:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "20928:17:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "20919:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "20985:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "20958:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "20958:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "20958:33:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "21011:3:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "21016:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "21004:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21004:18:67" + }, + "nodeType": "YulExpressionStatement", + "src": "21004:18:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21035:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21045:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "21039:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "21062:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "21073:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "21078:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21069:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21069:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "21062:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "21094:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "21105:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "21110:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21101:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21101:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "21094:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "20865:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20868:4:67", + "type": "", + "value": "0x0b" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "20862:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "20862:11:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "20874:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "20876:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "20885:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20888:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20881:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20881:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "20876:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "20858:3:67", + "statements": [] + }, + "src": "20854:269:67" + }, + { + "nodeType": "YulAssignment", + "src": "21132:15:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "21142:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21132:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "21156:34:67", + "value": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "21187:2:67" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "21166:20:67" + }, + "nodeType": "YulFunctionCall", + "src": "21166:24:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "21156:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21199:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21230:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21241:3:67", + "type": "", + "value": "384" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21226:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21226:19:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "21213:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "21213:33:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "21203:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "21289:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "21298:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "21306:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "21291:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21291:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "21291:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "21261:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21269:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "21258:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "21258:30:67" + }, + "nodeType": "YulIf", + "src": "21255:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "21324:77:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21373:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "21384:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21369:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21369:22:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "21393:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "21334:34:67" + }, + "nodeType": "YulFunctionCall", + "src": "21334:67:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "21324:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "21410:51:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21445:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21456:3:67", + "type": "", + "value": "416" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21441:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21441:19:67" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "21420:20:67" + }, + "nodeType": "YulFunctionCall", + "src": "21420:41:67" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "21410:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_array$_t_address_$11_memory_ptrt_addresst_array$_t_address_$dyn_memory_ptrt_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "20404:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "20415:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "20427:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "20435:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "20443:6:67", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "20451:6:67", + "type": "" + } + ], + "src": "20292:1175:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "21577:561:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "21623:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21632:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21640:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "21625:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21625:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "21625:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "21598:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21607:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "21594:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21594:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21619:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "21590:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21590:32:67" + }, + "nodeType": "YulIf", + "src": "21587:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21658:37:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21685:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "21672:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "21672:23:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "21662:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21704:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21714:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "21708:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "21759:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21768:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21776:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "21761:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21761:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "21761:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "21747:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "21755:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "21744:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "21744:14:67" + }, + "nodeType": "YulIf", + "src": "21741:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21794:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21808:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "21819:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21804:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21804:22:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "21798:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "21874:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21883:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21891:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "21876:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21876:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "21876:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "21853:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21857:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21849:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21849:13:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "21864:7:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "21845:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21845:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "21838:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21838:35:67" + }, + "nodeType": "YulIf", + "src": "21835:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21909:30:67", + "value": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "21936:2:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "21923:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "21923:16:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "21913:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "21966:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21975:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21983:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "21968:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21968:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "21968:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "21954:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "21962:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "21951:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "21951:14:67" + }, + "nodeType": "YulIf", + "src": "21948:2:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22051:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22060:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22068:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "22053:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22053:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "22053:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "22015:2:67" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "22023:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22031:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "22019:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22019:15:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22011:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22011:24:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22037:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22007:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22007:33:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "22042:7:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "22004:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "22004:46:67" + }, + "nodeType": "YulIf", + "src": "22001:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "22086:21:67", + "value": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "22100:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22104:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22096:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22096:11:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22086:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "22116:16:67", + "value": { + "name": "length", + "nodeType": "YulIdentifier", + "src": "22126:6:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "22116:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "21535:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "21546:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "21558:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "21566:6:67", + "type": "" + } + ], + "src": "21472:666:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22276:1394:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "22286:12:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22296:2:67", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "22290:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22343:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22352:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22360:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "22345:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22345:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "22345:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "22318:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22327:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "22314:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22314:23:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "22339:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "22310:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22310:32:67" + }, + "nodeType": "YulIf", + "src": "22307:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22378:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22398:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "22392:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "22392:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "22382:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22417:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22427:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "22421:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22472:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22481:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22489:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "22474:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22474:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "22474:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "22460:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "22468:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "22457:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "22457:14:67" + }, + "nodeType": "YulIf", + "src": "22454:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22507:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22521:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "22532:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22517:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22517:22:67" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "22511:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22587:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22596:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22604:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "22589:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22589:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "22589:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "22566:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22570:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22562:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22562:13:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "22577:7:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "22558:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22558:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "22551:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22551:35:67" + }, + "nodeType": "YulIf", + "src": "22548:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22622:19:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "22638:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "22632:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "22632:9:67" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "22626:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22650:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "22722:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "22676:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "22676:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "22661:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "22661:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "22654:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22735:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "22748:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "22739:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "22767:3:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "22772:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "22760:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22760:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "22760:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "22784:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "22795:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "22800:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22791:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22791:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "22784:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22812:22:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "22827:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "22831:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22823:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22823:11:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "22816:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22843:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22853:4:67", + "type": "", + "value": "0x60" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "22847:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22912:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22921:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22929:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "22914:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22914:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "22914:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "22880:2:67" + }, + { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "22888:2:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "22892:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "22884:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22884:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22876:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22876:20:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "22898:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22872:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22872:29:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "22903:7:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "22869:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "22869:42:67" + }, + "nodeType": "YulIf", + "src": "22866:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22947:15:67", + "value": { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22956:6:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "22951:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "23016:624:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "23060:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23069:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23077:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "23062:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23062:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23062:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "23041:7:67" + }, + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "23050:3:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "23037:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23037:17:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "23056:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "23033:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23033:26:67" + }, + "nodeType": "YulIf", + "src": "23030:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23099:12:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23109:2:67", + "type": "", + "value": "64" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "23103:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23124:23:67", + "value": { + "arguments": [ + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "23144:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23138:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "23138:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "23128:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23160:33:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "23182:6:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "23190:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23178:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23178:15:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "23164:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "23256:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "23258:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "23258:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23258:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "23215:10:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "23227:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "23212:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "23212:18:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "23235:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "23247:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "23232:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "23232:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "23209:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "23209:46:67" + }, + "nodeType": "YulIf", + "src": "23206:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "23289:2:67" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "23293:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "23282:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23282:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23282:22:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23317:23:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "23336:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23330:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "23330:10:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "23321:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "23380:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "23353:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "23353:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23353:33:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "23406:6:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "23414:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "23399:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23399:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23399:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "23444:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "23452:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23440:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23440:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "23467:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "23472:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23463:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23463:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23457:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "23457:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "23433:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23433:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23433:44:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "23501:6:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "23509:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23497:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23497:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "23524:3:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "23529:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23520:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23520:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23514:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "23514:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "23490:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23490:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23490:44:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "23554:3:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "23559:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "23547:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23547:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23547:19:67" + }, + { + "nodeType": "YulAssignment", + "src": "23579:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "23590:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "23595:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23586:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23586:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "23579:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "23611:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "23622:3:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "23627:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23618:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23618:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "23611:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "22982:1:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "22985:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "22979:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "22979:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "22989:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "22991:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "23000:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23003:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22996:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22996:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "22991:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "22975:3:67", + "statements": [] + }, + "src": "22971:669:67" + }, + { + "nodeType": "YulAssignment", + "src": "23649:15:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "23659:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23649:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_array$_t_struct$_Pair1155_$10640_memory_ptr_$dyn_memory_ptr_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "22242:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "22253:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "22265:6:67", + "type": "" + } + ], + "src": "22143:1527:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "23807:1312:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "23817:12:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23827:2:67", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "23821:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "23874:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23883:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23891:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "23876:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23876:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23876:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "23849:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "23858:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "23845:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23845:23:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "23870:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "23841:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23841:32:67" + }, + "nodeType": "YulIf", + "src": "23838:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23909:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "23929:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23923:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "23923:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "23913:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23948:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23958:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "23952:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "24003:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24012:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24020:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "24005:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24005:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24005:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "23991:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "23999:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "23988:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "23988:14:67" + }, + "nodeType": "YulIf", + "src": "23985:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24038:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "24052:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "24063:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24048:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24048:22:67" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "24042:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "24118:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24127:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24135:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "24120:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24120:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24120:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "24097:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "24101:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24093:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24093:13:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "24108:7:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "24089:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24089:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "24082:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24082:35:67" + }, + "nodeType": "YulIf", + "src": "24079:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24153:19:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "24169:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "24163:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "24163:9:67" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "24157:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24181:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "24253:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "24207:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "24207:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "24192:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "24192:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "24185:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24266:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "24279:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "24270:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "24298:3:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "24303:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "24291:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24291:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24291:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "24315:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "24326:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "24331:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24322:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24322:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "24315:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24343:22:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "24358:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "24362:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24354:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24354:11:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "24347:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24374:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "24384:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "24378:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "24443:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24452:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24460:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "24445:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24445:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24445:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "24411:2:67" + }, + { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "24419:2:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "24423:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "24415:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24415:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24407:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24407:20:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "24429:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24403:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24403:29:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "24434:7:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "24400:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "24400:42:67" + }, + "nodeType": "YulIf", + "src": "24397:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24478:15:67", + "value": { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24487:6:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "24482:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "24547:542:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "24591:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24600:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24608:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "24593:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24593:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24593:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "24572:7:67" + }, + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "24581:3:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "24568:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24568:17:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "24587:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "24564:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24564:26:67" + }, + "nodeType": "YulIf", + "src": "24561:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24630:23:67", + "value": { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "24650:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "24644:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "24644:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "24634:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24666:33:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "24688:6:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "24696:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24684:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24684:15:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "24670:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "24762:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "24764:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "24764:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24764:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "24721:10:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "24733:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "24718:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "24718:18:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "24741:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "24753:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "24738:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "24738:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "24715:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "24715:46:67" + }, + "nodeType": "YulIf", + "src": "24712:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "24795:2:67" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "24799:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "24788:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24788:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24788:22:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24823:23:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "24842:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "24836:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "24836:10:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "24827:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "24886:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "24859:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "24859:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24859:33:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "24912:6:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "24920:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "24905:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24905:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24905:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "24950:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "24958:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24946:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24946:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "24973:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "24978:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24969:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24969:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "24963:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "24963:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "24939:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24939:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24939:44:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25003:3:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "25008:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "24996:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24996:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24996:19:67" + }, + { + "nodeType": "YulAssignment", + "src": "25028:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25039:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "25044:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25035:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25035:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25028:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "25060:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "25071:3:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "25076:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25067:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25067:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "25060:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "24513:1:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "24516:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "24510:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "24510:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "24520:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "24522:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "24531:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "24534:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24527:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24527:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "24522:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "24506:3:67", + "statements": [] + }, + "src": "24502:587:67" + }, + { + "nodeType": "YulAssignment", + "src": "25098:15:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "25108:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "25098:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_array$_t_struct$_Pair721_$10633_memory_ptr_$dyn_memory_ptr_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "23773:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "23784:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "23796:6:67", + "type": "" + } + ], + "src": "23675:1444:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "25300:1019:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "25347:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25356:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25364:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "25349:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "25349:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "25349:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "25321:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "25330:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "25317:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25317:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25342:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "25313:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25313:33:67" + }, + "nodeType": "YulIf", + "src": "25310:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25382:37:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "25409:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "25396:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "25396:23:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "25386:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "25462:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25471:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25479:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "25464:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "25464:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "25464:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "25434:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25442:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "25431:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "25431:30:67" + }, + "nodeType": "YulIf", + "src": "25428:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25497:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "25511:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "25522:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25507:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25507:22:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "25501:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "25577:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25586:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25594:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "25579:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "25579:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "25579:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "25556:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25560:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25552:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25552:13:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "25567:7:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "25548:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25548:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "25541:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "25541:35:67" + }, + "nodeType": "YulIf", + "src": "25538:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25612:26:67", + "value": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "25635:2:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "25622:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "25622:16:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "25616:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25647:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25657:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "25651:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25670:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "25742:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "25696:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "25696:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "25681:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "25681:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "25674:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25755:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25768:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "25759:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25787:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "25792:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "25780:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "25780:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "25780:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "25804:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25815:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "25820:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25811:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25811:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25804:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25832:22:67", + "value": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "25847:2:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "25851:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25843:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25843:11:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "25836:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25863:15:67", + "value": { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25872:6:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "25867:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "25932:183:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25953:3:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "26003:2:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "26020:3:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "26007:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "26007:17:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25999:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25999:26:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "26027:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25995:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25995:35:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "26032:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_PurchaseDetails", + "nodeType": "YulIdentifier", + "src": "25958:36:67" + }, + "nodeType": "YulFunctionCall", + "src": "25958:82:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "25946:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "25946:95:67" + }, + "nodeType": "YulExpressionStatement", + "src": "25946:95:67" + }, + { + "nodeType": "YulAssignment", + "src": "26054:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "26065:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "26070:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26061:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26061:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "26054:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "26086:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "26097:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "26102:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26093:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26093:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "26086:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "25898:1:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "25901:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "25895:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "25895:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "25905:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "25907:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "25916:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25919:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25912:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25912:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "25907:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "25891:3:67", + "statements": [] + }, + "src": "25887:228:67" + }, + { + "nodeType": "YulAssignment", + "src": "26124:15:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "26134:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26124:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "26148:50:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26183:9:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "26194:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26179:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26179:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "26158:20:67" + }, + "nodeType": "YulFunctionCall", + "src": "26158:40:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "26148:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "26207:50:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26242:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26253:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26238:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26238:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "26217:20:67" + }, + "nodeType": "YulFunctionCall", + "src": "26217:40:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "26207:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "26266:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26298:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26309:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26294:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26294:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_bool", + "nodeType": "YulIdentifier", + "src": "26276:17:67" + }, + "nodeType": "YulFunctionCall", + "src": "26276:37:67" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "26266:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_array$_t_struct$_PurchaseDetails_$8061_memory_ptr_$dyn_memory_ptrt_addresst_addresst_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "25242:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "25253:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "25265:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "25273:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "25281:6:67", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "25289:6:67", + "type": "" + } + ], + "src": "25124:1195:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "26402:179:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "26448:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26457:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26465:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "26450:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "26450:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "26450:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "26423:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26432:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "26419:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26419:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26444:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "26415:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26415:32:67" + }, + "nodeType": "YulIf", + "src": "26412:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "26483:29:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26502:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26496:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "26496:16:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "26487:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "26545:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_bool", + "nodeType": "YulIdentifier", + "src": "26521:23:67" + }, + "nodeType": "YulFunctionCall", + "src": "26521:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "26521:30:67" + }, + { + "nodeType": "YulAssignment", + "src": "26560:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "26570:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26560:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bool_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "26368:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "26379:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "26391:6:67", + "type": "" + } + ], + "src": "26324:257:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "26655:188:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "26701:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26710:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26718:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "26703:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "26703:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "26703:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "26676:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26685:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "26672:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26672:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26697:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "26668:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26668:32:67" + }, + "nodeType": "YulIf", + "src": "26665:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "26736:36:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26762:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "26749:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "26749:23:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "26740:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "26807:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_bytes4", + "nodeType": "YulIdentifier", + "src": "26781:25:67" + }, + "nodeType": "YulFunctionCall", + "src": "26781:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "26781:32:67" + }, + { + "nodeType": "YulAssignment", + "src": "26822:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "26832:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26822:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes4", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "26621:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "26632:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "26644:6:67", + "type": "" + } + ], + "src": "26586:257:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "26947:254:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "26993:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27002:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27010:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "26995:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "26995:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "26995:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "26968:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26977:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "26964:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26964:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26989:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "26960:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26960:32:67" + }, + "nodeType": "YulIf", + "src": "26957:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "27028:47:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "27065:9:67" + } + ], + "functionName": { + "name": "abi_decode_t_enum$_Markets", + "nodeType": "YulIdentifier", + "src": "27038:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "27038:37:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27028:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27084:45:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "27114:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27125:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27110:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27110:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "27097:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "27097:32:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "27088:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "27165:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "27138:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "27138:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27138:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "27180:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "27190:5:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "27180:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_enum$_Markets_$8046t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "26905:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "26916:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "26928:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "26936:6:67", + "type": "" + } + ], + "src": "26848:353:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "27319:1452:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "27329:12:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27339:2:67", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "27333:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "27386:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27395:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27403:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "27388:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27388:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27388:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "27361:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "27370:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "27357:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27357:23:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "27382:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "27353:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27353:32:67" + }, + "nodeType": "YulIf", + "src": "27350:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27421:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "27441:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27435:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "27435:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "27425:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27460:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27470:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "27464:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "27515:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27524:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27532:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "27517:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27517:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27517:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "27503:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "27511:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "27500:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "27500:14:67" + }, + "nodeType": "YulIf", + "src": "27497:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27550:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "27564:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "27575:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27560:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27560:22:67" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "27554:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "27622:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27631:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27639:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "27624:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27624:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27624:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "27602:7:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "27611:2:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "27598:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27598:16:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27616:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "27594:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27594:27:67" + }, + "nodeType": "YulIf", + "src": "27591:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27657:25:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27677:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27671:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "27671:11:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "27661:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27691:35:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "27713:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27721:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27709:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27709:17:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "27695:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "27785:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "27787:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "27787:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27787:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "27744:10:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "27756:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "27741:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "27741:18:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "27764:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "27776:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "27761:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "27761:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "27738:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "27738:46:67" + }, + "nodeType": "YulIf", + "src": "27735:2:67" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27814:4:67", + "type": "", + "value": "0x40" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "27820:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "27807:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27807:24:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27807:24:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27840:25:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "27862:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27856:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "27856:9:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "27844:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "27894:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27903:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27911:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "27896:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27896:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27896:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "27880:8:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "27890:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "27877:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "27877:16:67" + }, + "nodeType": "YulIf", + "src": "27874:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "27936:6:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "27978:2:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "27982:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27974:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27974:17:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "27993:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "27944:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "27944:57:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "27929:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27929:73:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27929:73:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28011:34:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "28037:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28041:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28033:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28033:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28027:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "28027:18:67" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "28015:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "28074:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28083:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28091:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "28076:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28076:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28076:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "28060:8:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "28070:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "28057:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "28057:16:67" + }, + "nodeType": "YulIf", + "src": "28054:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28109:27:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "28123:2:67" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "28127:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28119:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28119:17:67" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "28113:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "28184:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28193:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28201:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "28186:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28186:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28186:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "28163:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28167:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28159:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28159:13:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "28174:7:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "28155:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28155:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "28148:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28148:35:67" + }, + "nodeType": "YulIf", + "src": "28145:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28219:19:67", + "value": { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "28235:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28229:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "28229:9:67" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "28223:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28247:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "28319:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "28273:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "28273:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "28258:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "28258:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "28251:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28332:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28345:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "28336:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28364:3:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "28369:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28357:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28357:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28357:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "28381:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28392:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28397:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28388:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28388:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28381:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28409:22:67", + "value": { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "28424:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28428:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28420:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28420:11:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "28413:3:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "28486:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28495:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28503:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "28488:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28488:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28488:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "28454:2:67" + }, + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "28462:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28466:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "28458:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28458:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28450:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28450:20:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28472:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28446:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28446:29:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "28477:7:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "28443:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "28443:42:67" + }, + "nodeType": "YulIf", + "src": "28440:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28521:15:67", + "value": { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28530:6:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "28525:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "28590:111:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28611:3:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "28622:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28616:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "28616:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28604:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28604:23:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28604:23:67" + }, + { + "nodeType": "YulAssignment", + "src": "28640:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28651:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28656:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28647:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28647:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28640:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "28672:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "28683:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28688:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28679:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28679:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "28672:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "28556:1:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "28559:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "28553:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "28553:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "28563:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "28565:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "28574:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28577:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28570:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28570:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "28565:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "28549:3:67", + "statements": [] + }, + "src": "28545:156:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "28721:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28729:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28717:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28717:15:67" + }, + { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "28734:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28710:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28710:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28710:30:67" + }, + { + "nodeType": "YulAssignment", + "src": "28749:16:67", + "value": { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "28759:6:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28749:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_AdditionalData_$8067_memory_ptr_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "27285:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "27296:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "27308:6:67", + "type": "" + } + ], + "src": "27206:1565:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "28938:604:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "28984:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "28993:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29001:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "28986:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28986:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28986:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "28959:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "28968:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "28955:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28955:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28980:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "28951:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28951:32:67" + }, + "nodeType": "YulIf", + "src": "28948:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "29019:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29039:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29033:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "29033:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "29023:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "29058:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29068:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "29062:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "29113:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29122:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29130:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "29115:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "29115:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "29115:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "29101:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "29109:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "29098:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "29098:14:67" + }, + "nodeType": "YulIf", + "src": "29095:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "29148:80:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29200:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "29211:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29196:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29196:22:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "29220:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_Input_fromMemory", + "nodeType": "YulIdentifier", + "src": "29158:37:67" + }, + "nodeType": "YulFunctionCall", + "src": "29158:70:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "29148:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "29237:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29263:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29274:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29259:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29259:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29253:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "29253:25:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "29241:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "29307:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29316:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29324:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "29309:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "29309:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "29309:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "29293:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "29303:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "29290:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "29290:16:67" + }, + "nodeType": "YulIf", + "src": "29287:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "29342:82:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29394:9:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "29405:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29390:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29390:24:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "29416:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_Input_fromMemory", + "nodeType": "YulIdentifier", + "src": "29352:37:67" + }, + "nodeType": "YulFunctionCall", + "src": "29352:72:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "29342:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "29433:38:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29456:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29467:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29452:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29452:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29446:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "29446:25:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "29437:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "29506:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_bytes4", + "nodeType": "YulIdentifier", + "src": "29480:25:67" + }, + "nodeType": "YulFunctionCall", + "src": "29480:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "29480:32:67" + }, + { + "nodeType": "YulAssignment", + "src": "29521:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "29531:5:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29521:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_Input_$10442_memory_ptrt_struct$_Input_$10442_memory_ptrt_bytes4_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "28888:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "28899:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "28911:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "28919:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "28927:6:67", + "type": "" + } + ], + "src": "28776:766:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "29684:527:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "29730:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29739:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29747:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "29732:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "29732:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "29732:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "29705:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29714:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "29701:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29701:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29726:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "29697:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29697:32:67" + }, + "nodeType": "YulIf", + "src": "29694:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "29765:37:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29792:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "29779:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "29779:23:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "29769:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "29845:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29854:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29862:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "29847:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "29847:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "29847:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "29817:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29825:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "29814:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "29814:30:67" + }, + "nodeType": "YulIf", + "src": "29811:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "29880:79:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29931:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "29942:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29927:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29927:22:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "29951:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_PurchaseDetails", + "nodeType": "YulIdentifier", + "src": "29890:36:67" + }, + "nodeType": "YulFunctionCall", + "src": "29890:69:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "29880:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "29968:45:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29998:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30009:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29994:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29994:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "29981:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "29981:32:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "29972:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "30049:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "30022:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "30022:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30022:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "30064:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "30074:5:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "30064:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30088:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "30120:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30131:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30116:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30116:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "30103:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "30103:32:67" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "30092:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "30171:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "30144:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "30144:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30144:35:67" + }, + { + "nodeType": "YulAssignment", + "src": "30188:17:67", + "value": { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "30198:7:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "30188:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_PurchaseDetails_$8061_memory_ptrt_addresst_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "29634:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "29645:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "29657:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "29665:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "29673:6:67", + "type": "" + } + ], + "src": "29547:664:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "30324:1076:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "30370:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30379:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30387:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "30372:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30372:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30372:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "30345:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "30354:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "30341:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30341:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30366:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "30337:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30337:32:67" + }, + "nodeType": "YulIf", + "src": "30334:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30405:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "30425:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30419:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "30419:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "30409:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30444:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30454:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "30448:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "30499:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30508:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30516:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "30501:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30501:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30501:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "30487:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "30495:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "30484:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "30484:14:67" + }, + "nodeType": "YulIf", + "src": "30481:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30534:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "30548:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "30559:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30544:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30544:22:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "30538:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "30608:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30617:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30625:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "30610:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30610:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30610:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "30586:7:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "30595:2:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "30582:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30582:16:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30600:6:67", + "type": "", + "value": "0x0160" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "30578:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30578:29:67" + }, + "nodeType": "YulIf", + "src": "30575:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30643:33:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30671:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "30656:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "30656:20:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "30647:5:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30685:25:67", + "value": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "30707:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30701:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "30701:9:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "30689:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "30739:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30748:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30756:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "30741:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30741:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30741:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "30725:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "30735:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "30722:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "30722:16:67" + }, + "nodeType": "YulIf", + "src": "30719:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "30781:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "30844:2:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "30848:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30840:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30840:17:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "30859:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Order_$dyn_fromMemory", + "nodeType": "YulIdentifier", + "src": "30788:51:67" + }, + "nodeType": "YulFunctionCall", + "src": "30788:79:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "30774:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30774:94:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30774:94:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30877:34:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "30903:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30907:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30899:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30899:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30893:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "30893:18:67" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "30881:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "30940:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30949:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30957:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "30942:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30942:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30942:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "30926:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "30936:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "30923:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "30923:16:67" + }, + "nodeType": "YulIf", + "src": "30920:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "30986:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30993:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30982:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30982:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "31061:2:67" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "31065:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31057:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31057:17:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "31076:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_SettleDetail_$dyn_fromMemory", + "nodeType": "YulIdentifier", + "src": "30998:58:67" + }, + "nodeType": "YulFunctionCall", + "src": "30998:86:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "30975:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30975:110:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30975:110:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "31105:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31112:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31101:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31101:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "31166:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31170:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31162:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31162:11:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "31175:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_SettleShared_fromMemory", + "nodeType": "YulIdentifier", + "src": "31117:44:67" + }, + "nodeType": "YulFunctionCall", + "src": "31117:66:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "31094:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31094:90:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31094:90:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "31204:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31211:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31200:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31200:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "31228:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31232:3:67", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31224:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31224:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31218:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "31218:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "31193:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31193:45:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31193:45:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "31258:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31265:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31254:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31254:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "31282:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31286:3:67", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31278:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31278:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31272:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "31272:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "31247:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31247:45:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31247:45:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "31312:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31319:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31308:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31308:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "31360:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31364:3:67", + "type": "", + "value": "320" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31356:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31356:12:67" + } + ], + "functionName": { + "name": "abi_decode_t_uint8_fromMemory", + "nodeType": "YulIdentifier", + "src": "31326:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "31326:43:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "31301:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31301:69:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31301:69:67" + }, + { + "nodeType": "YulAssignment", + "src": "31379:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "31389:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "31379:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_RunInput_$10725_memory_ptr_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "30290:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "30301:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "30313:6:67", + "type": "" + } + ], + "src": "30216:1184:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "31577:1272:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "31623:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "31632:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "31640:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "31625:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31625:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31625:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "31598:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "31607:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "31594:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31594:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31619:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "31590:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31590:32:67" + }, + "nodeType": "YulIf", + "src": "31587:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "31658:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "31678:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31672:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "31672:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "31662:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "31697:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31707:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "31701:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "31752:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "31761:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "31769:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "31754:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31754:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31754:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "31740:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "31748:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "31737:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "31737:14:67" + }, + "nodeType": "YulIf", + "src": "31734:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "31787:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "31801:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "31812:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31797:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31797:22:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "31791:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "31859:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "31868:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "31876:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "31861:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31861:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31861:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "31839:7:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "31848:2:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "31835:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31835:16:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31853:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "31831:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31831:27:67" + }, + "nodeType": "YulIf", + "src": "31828:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "31894:23:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31914:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31908:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "31908:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "31898:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "31926:35:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "31948:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31956:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31944:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31944:17:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "31930:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "32020:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "32022:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "32022:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32022:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "31979:10:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "31991:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "31976:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "31976:18:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "31999:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "32011:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "31996:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "31996:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "31973:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "31973:46:67" + }, + "nodeType": "YulIf", + "src": "31970:2:67" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32049:2:67", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "32053:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "32042:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32042:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32042:22:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "32080:6:67" + }, + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "32117:2:67" + } + ], + "functionName": { + "name": "abi_decode_t_bool_fromMemory", + "nodeType": "YulIdentifier", + "src": "32088:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "32088:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "32073:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32073:48:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32073:48:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "32141:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32149:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32137:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32137:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "32190:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32194:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32186:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32186:11:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "32154:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "32154:44:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "32130:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32130:69:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32130:69:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "32219:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32227:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32215:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32215:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "32242:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32246:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32238:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32238:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32232:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "32232:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "32208:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32208:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32208:43:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "32271:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32279:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32267:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32267:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "32294:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32298:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32290:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32290:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32284:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "32284:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "32260:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32260:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32260:43:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "32323:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32331:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32319:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32319:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "32347:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32351:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32343:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32343:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32337:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "32337:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "32312:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32312:45:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32312:45:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "32366:35:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "32392:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32396:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32388:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32388:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32382:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "32382:19:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "32370:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "32430:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "32439:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "32447:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "32432:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32432:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32432:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "32416:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "32426:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "32413:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "32413:16:67" + }, + "nodeType": "YulIf", + "src": "32410:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "32476:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32484:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32472:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32472:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "32524:2:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "32528:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32520:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32520:17:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "32539:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "32490:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "32490:57:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "32465:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32465:83:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32465:83:67" + }, + { + "nodeType": "YulAssignment", + "src": "32557:16:67", + "value": { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "32567:6:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "32557:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "32582:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "32608:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32619:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32604:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32604:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32598:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "32598:25:67" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "32586:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "32652:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "32661:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "32669:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "32654:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32654:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32654:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "32638:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "32648:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "32635:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "32635:16:67" + }, + "nodeType": "YulIf", + "src": "32632:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "32687:87:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "32744:9:67" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "32755:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32740:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32740:24:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "32766:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_MakerOrder_fromMemory", + "nodeType": "YulIdentifier", + "src": "32697:42:67" + }, + "nodeType": "YulFunctionCall", + "src": "32697:77:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "32687:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "32783:60:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "32828:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32839:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32824:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32824:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes4_fromMemory", + "nodeType": "YulIdentifier", + "src": "32793:30:67" + }, + "nodeType": "YulFunctionCall", + "src": "32793:50:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "32783:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_TakerOrder_$10789_memory_ptrt_struct$_MakerOrder_$10776_memory_ptrt_bytes4_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "31527:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "31538:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "31550:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "31558:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "31566:6:67", + "type": "" + } + ], + "src": "31405:1444:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "32935:113:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "32981:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "32990:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "32998:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "32983:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32983:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32983:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "32956:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "32965:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "32952:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32952:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32977:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "32948:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32948:32:67" + }, + "nodeType": "YulIf", + "src": "32945:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "33016:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "33032:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33026:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "33026:16:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "33016:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "32901:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "32912:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "32924:6:67", + "type": "" + } + ], + "src": "32854:194:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "33107:60:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33124:3:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "33133:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33148:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33153:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "33144:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33144:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33157:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "33140:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33140:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "33129:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33129:31:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "33117:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "33117:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "33117:44:67" + } + ] + }, + "name": "abi_encode_t_address_payable", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "33091:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "33098:3:67", + "type": "" + } + ], + "src": "33053:114:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "33265:502:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "33275:26:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "33295:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33289:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "33289:12:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "33279:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33317:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "33322:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "33310:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "33310:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "33310:19:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33338:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33348:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "33342:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "33361:19:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33372:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33377:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33368:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33368:12:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33361:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33389:28:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "33407:5:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33414:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33403:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33403:14:67" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "33393:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33426:12:67", + "value": { + "name": "end", + "nodeType": "YulIdentifier", + "src": "33435:3:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "33430:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "33496:246:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "33510:23:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "33526:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33520:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "33520:13:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "33514:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33553:3:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "33568:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33562:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "33562:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33573:6:67", + "type": "", + "value": "0xffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "33558:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33558:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "33546:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "33546:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "33546:35:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33605:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33610:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33601:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33601:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "33629:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33633:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33625:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33625:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33619:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "33619:18:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33647:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33652:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "33643:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33643:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33656:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "33639:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33639:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "33615:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33615:44:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "33594:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "33594:66:67" + }, + "nodeType": "YulExpressionStatement", + "src": "33594:66:67" + }, + { + "nodeType": "YulAssignment", + "src": "33673:21:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33684:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33689:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33680:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33680:14:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33673:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "33707:25:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "33721:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33729:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33717:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33717:15:67" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "33707:6:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "33458:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "33461:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "33455:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "33455:13:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "33469:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "33471:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "33480:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33483:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33476:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33476:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "33471:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "33451:3:67", + "statements": [] + }, + "src": "33447:295:67" + }, + { + "nodeType": "YulAssignment", + "src": "33751:10:67", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33758:3:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "33751:3:67" + } + ] + } + ] + }, + "name": "abi_encode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "33242:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "33249:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "33257:3:67", + "type": "" + } + ], + "src": "33172:595:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "33843:489:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "33853:26:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "33873:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33867:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "33867:12:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "33857:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33895:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "33900:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "33888:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "33888:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "33888:19:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33916:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33926:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "33920:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "33939:19:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33950:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33955:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33946:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33946:12:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33939:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33967:28:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "33985:5:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33992:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33981:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33981:14:67" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "33971:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34004:12:67", + "value": { + "name": "end", + "nodeType": "YulIdentifier", + "src": "34013:3:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "34008:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "34074:233:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "34088:23:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "34104:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34098:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "34098:13:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "34092:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34131:3:67" + }, + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "34142:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34136:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "34136:9:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "34124:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "34124:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "34124:22:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34170:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34175:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34166:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34166:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "34194:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34198:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34190:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34190:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34184:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "34184:18:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34212:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34217:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "34208:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34208:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34221:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "34204:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34204:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "34180:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34180:44:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "34159:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "34159:66:67" + }, + "nodeType": "YulExpressionStatement", + "src": "34159:66:67" + }, + { + "nodeType": "YulAssignment", + "src": "34238:21:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34249:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34254:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34245:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34245:14:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34238:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "34272:25:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "34286:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34294:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34282:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34282:15:67" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "34272:6:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "34036:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "34039:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "34033:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "34033:13:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "34047:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "34049:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "34058:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34061:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34054:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34054:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "34049:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "34029:3:67", + "statements": [] + }, + "src": "34025:282:67" + }, + { + "nodeType": "YulAssignment", + "src": "34316:10:67", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34323:3:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "34316:3:67" + } + ] + } + ] + }, + "name": "abi_encode_t_array$_t_struct$_Fee_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "33820:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "33827:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "33835:3:67", + "type": "" + } + ], + "src": "33772:560:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "34414:756:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "34424:26:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "34444:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34438:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "34438:12:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "34428:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34466:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "34471:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "34459:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "34459:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "34459:19:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34487:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34497:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "34491:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34510:31:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34533:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34538:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34529:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34529:12:67" + }, + "variables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "34514:11:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34550:24:67", + "value": { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "34563:11:67" + }, + "variables": [ + { + "name": "pos_1", + "nodeType": "YulTypedName", + "src": "34554:5:67", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "34583:18:67", + "value": { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "34590:11:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34583:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34610:39:67", + "value": { + "arguments": [ + { + "name": "pos_1", + "nodeType": "YulIdentifier", + "src": "34626:5:67" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "34637:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34645:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "34633:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34633:15:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34622:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34622:27:67" + }, + "variables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "34614:4:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34658:28:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "34676:5:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34683:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34672:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34672:14:67" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "34662:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34695:12:67", + "value": { + "name": "end", + "nodeType": "YulIdentifier", + "src": "34704:3:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "34699:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "34765:379:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34786:3:67" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "34795:4:67" + }, + { + "name": "pos_1", + "nodeType": "YulIdentifier", + "src": "34801:5:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "34791:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34791:16:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "34779:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "34779:29:67" + }, + "nodeType": "YulExpressionStatement", + "src": "34779:29:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34821:23:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "34837:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34831:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "34831:13:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "34825:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34857:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34867:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "34861:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "34891:4:67" + }, + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "34903:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34897:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "34897:9:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "34884:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "34884:23:67" + }, + "nodeType": "YulExpressionStatement", + "src": "34884:23:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34920:38:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "34950:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34954:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34946:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34946:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34940:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "34940:18:67" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "34924:12:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "34982:4:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34988:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34978:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34978:13:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "34993:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "34971:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "34971:25:67" + }, + "nodeType": "YulExpressionStatement", + "src": "34971:25:67" + }, + { + "nodeType": "YulAssignment", + "src": "35009:55:67", + "value": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "35036:12:67" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35054:4:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "35060:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35050:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35050:13:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "35017:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "35017:47:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35009:4:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "35077:25:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "35091:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "35099:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35087:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35087:15:67" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "35077:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "35115:19:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "35126:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "35131:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35122:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35122:12:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "35115:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "34727:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "34730:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "34724:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "34724:13:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "34738:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "34740:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "34749:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34752:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34745:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34745:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "34740:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "34720:3:67", + "statements": [] + }, + "src": "34716:428:67" + }, + { + "nodeType": "YulAssignment", + "src": "35153:11:67", + "value": { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35160:4:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "35153:3:67" + } + ] + } + ] + }, + "name": "abi_encode_t_array$_t_struct$_OrderItem_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "34391:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "34398:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "34406:3:67", + "type": "" + } + ], + "src": "34337:833:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "35255:1680:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "35265:26:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "35285:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35279:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35279:12:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "35269:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "35307:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "35312:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "35300:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "35300:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35300:19:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35328:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35338:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "35332:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "35351:19:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "35362:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "35367:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35358:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35358:12:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "35351:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35379:16:67", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "35392:3:67" + }, + "variables": [ + { + "name": "pos_1", + "nodeType": "YulTypedName", + "src": "35383:5:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35404:37:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "35420:3:67" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "35429:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "35437:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "35425:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35425:15:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35416:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35416:25:67" + }, + "variables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "35408:4:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35450:28:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "35468:5:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "35475:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35464:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35464:14:67" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "35454:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35487:12:67", + "value": { + "name": "end", + "nodeType": "YulIdentifier", + "src": "35496:3:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "35491:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "35557:1352:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "35578:3:67" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35587:4:67" + }, + { + "name": "pos_1", + "nodeType": "YulIdentifier", + "src": "35593:5:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "35583:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35583:16:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "35571:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "35571:29:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35571:29:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35613:23:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "35629:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35623:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35623:13:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "35617:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35649:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35659:6:67", + "type": "", + "value": "0x0160" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "35653:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "35706:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35700:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35700:9:67" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35711:4:67" + } + ], + "functionName": { + "name": "abi_encode_t_enum$_Op", + "nodeType": "YulIdentifier", + "src": "35678:21:67" + }, + "nodeType": "YulFunctionCall", + "src": "35678:38:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35678:38:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35740:4:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "35746:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35736:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35736:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "35761:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "35765:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35757:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35757:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35751:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35751:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "35729:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "35729:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35729:41:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35783:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35793:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "35787:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35821:4:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "35827:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35817:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35817:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "35842:2:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "35846:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35838:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35838:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35832:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35832:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "35810:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "35810:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35810:41:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35864:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35874:4:67", + "type": "", + "value": "0x60" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "35868:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35902:4:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "35908:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35898:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35898:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "35923:2:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "35927:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35919:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35919:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35913:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35913:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "35891:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "35891:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35891:41:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35945:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35955:4:67", + "type": "", + "value": "0x80" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "35949:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35983:4:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "35989:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35979:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35979:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "36004:2:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "36008:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36000:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36000:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35994:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35994:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "35972:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "35972:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35972:41:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36026:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36036:4:67", + "type": "", + "value": "0xa0" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "36030:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36053:38:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "36083:2:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "36087:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36079:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36079:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36073:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "36073:18:67" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "36057:12:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "36133:12:67" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36151:4:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "36157:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36147:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36147:13:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "36104:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "36104:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "36104:57:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36174:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36184:4:67", + "type": "", + "value": "0xc0" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "36178:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36201:40:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "36233:2:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "36237:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36229:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36229:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36223:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "36223:18:67" + }, + "variables": [ + { + "name": "memberValue0_1", + "nodeType": "YulTypedName", + "src": "36205:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36265:4:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "36271:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36261:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36261:13:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "36276:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "36254:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36254:25:67" + }, + "nodeType": "YulExpressionStatement", + "src": "36254:25:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36292:63:67", + "value": { + "arguments": [ + { + "name": "memberValue0_1", + "nodeType": "YulIdentifier", + "src": "36325:14:67" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36345:4:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "36351:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36341:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36341:13:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "36306:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "36306:49:67" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "36296:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36368:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36378:4:67", + "type": "", + "value": "0xe0" + }, + "variables": [ + { + "name": "_9", + "nodeType": "YulTypedName", + "src": "36372:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36406:4:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "36412:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36402:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36402:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "36427:2:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "36431:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36423:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36423:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36417:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "36417:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "36395:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36395:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "36395:41:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36449:17:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36460:6:67", + "type": "", + "value": "0x0100" + }, + "variables": [ + { + "name": "_10", + "nodeType": "YulTypedName", + "src": "36453:3:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36490:4:67" + }, + { + "name": "_10", + "nodeType": "YulIdentifier", + "src": "36496:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36486:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36486:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "36512:2:67" + }, + { + "name": "_10", + "nodeType": "YulIdentifier", + "src": "36516:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36508:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36508:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36502:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "36502:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "36479:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36479:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "36479:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36535:17:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36546:6:67", + "type": "", + "value": "0x0120" + }, + "variables": [ + { + "name": "_11", + "nodeType": "YulTypedName", + "src": "36539:3:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36576:4:67" + }, + { + "name": "_11", + "nodeType": "YulIdentifier", + "src": "36582:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36572:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36572:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "36598:2:67" + }, + { + "name": "_11", + "nodeType": "YulIdentifier", + "src": "36602:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36594:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36594:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36588:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "36588:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "36565:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36565:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "36565:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36621:17:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36632:6:67", + "type": "", + "value": "0x0140" + }, + "variables": [ + { + "name": "_12", + "nodeType": "YulTypedName", + "src": "36625:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36651:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "36683:2:67" + }, + { + "name": "_12", + "nodeType": "YulIdentifier", + "src": "36687:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36679:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36679:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36673:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "36673:19:67" + }, + "variables": [ + { + "name": "memberValue0_2", + "nodeType": "YulTypedName", + "src": "36655:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36716:4:67" + }, + { + "name": "_12", + "nodeType": "YulIdentifier", + "src": "36722:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36712:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36712:14:67" + }, + { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "36732:6:67" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36740:4:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "36728:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36728:17:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "36705:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36705:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "36705:41:67" + }, + { + "nodeType": "YulAssignment", + "src": "36759:70:67", + "value": { + "arguments": [ + { + "name": "memberValue0_2", + "nodeType": "YulIdentifier", + "src": "36806:14:67" + }, + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "36822:6:67" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_Fee_$dyn", + "nodeType": "YulIdentifier", + "src": "36767:38:67" + }, + "nodeType": "YulFunctionCall", + "src": "36767:62:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36759:4:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "36842:25:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "36856:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "36864:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36852:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36852:15:67" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "36842:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "36880:19:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "36891:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "36896:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36887:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36887:12:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "36880:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "35519:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "35522:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "35516:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "35516:13:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "35530:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "35532:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "35541:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35544:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35537:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35537:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "35532:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "35512:3:67", + "statements": [] + }, + "src": "35508:1401:67" + }, + { + "nodeType": "YulAssignment", + "src": "36918:11:67", + "value": { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36925:4:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "36918:3:67" + } + ] + } + ] + }, + "name": "abi_encode_t_array$_t_struct$_SettleDetail_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "35232:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "35239:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "35247:3:67", + "type": "" + } + ], + "src": "35175:1760:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "36983:50:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37000:3:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37019:5:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "37012:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37012:13:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "37005:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37005:21:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "36993:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36993:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "36993:34:67" + } + ] + }, + "name": "abi_encode_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "36967:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "36974:3:67", + "type": "" + } + ], + "src": "36940:93:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "37089:208:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "37099:26:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37119:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "37113:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "37113:12:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "37103:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37141:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "37146:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "37134:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37134:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37134:19:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37188:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37195:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37184:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37184:16:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37206:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37211:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37202:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37202:14:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "37218:6:67" + } + ], + "functionName": { + "name": "copy_memory_to_memory", + "nodeType": "YulIdentifier", + "src": "37162:21:67" + }, + "nodeType": "YulFunctionCall", + "src": "37162:63:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37162:63:67" + }, + { + "nodeType": "YulAssignment", + "src": "37234:57:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37249:3:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "37262:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37270:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37258:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37258:15:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37279:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "37275:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37275:7:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "37254:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37254:29:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37245:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37245:39:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37286:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37241:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37241:50:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "37234:3:67" + } + ] + } + ] + }, + "name": "abi_encode_t_bytes", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "37066:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "37073:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "37081:3:67", + "type": "" + } + ], + "src": "37038:259:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "37349:80:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "37383:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "37385:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "37385:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37385:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37372:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37379:1:67", + "type": "", + "value": "8" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "37369:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "37369:12:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "37362:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37362:20:67" + }, + "nodeType": "YulIf", + "src": "37359:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37412:3:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37417:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "37405:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37405:18:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37405:18:67" + } + ] + }, + "name": "abi_encode_t_enum$_Op", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "37333:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "37340:3:67", + "type": "" + } + ], + "src": "37302:127:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "37483:80:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "37517:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "37519:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "37519:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37519:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37506:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37513:1:67", + "type": "", + "value": "2" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "37503:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "37503:12:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "37496:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37496:20:67" + }, + "nodeType": "YulIf", + "src": "37493:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37546:3:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37551:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "37539:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37539:18:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37539:18:67" + } + ] + }, + "name": "abi_encode_t_enum$_Side", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "37467:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "37474:3:67", + "type": "" + } + ], + "src": "37434:129:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "37627:2170:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "37637:32:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37663:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "37657:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "37657:12:67" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "37641:12:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37685:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37690:4:67", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "37678:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37678:17:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37678:17:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "37739:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "37733:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "37733:19:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37758:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37763:4:67", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37754:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37754:14:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "37704:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "37704:65:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37704:65:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "37778:52:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "37810:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37824:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37806:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37806:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "37800:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "37800:30:67" + }, + "variables": [ + { + "name": "memberValue0_1", + "nodeType": "YulTypedName", + "src": "37782:14:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "37839:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37849:3:67", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "37843:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_1", + "nodeType": "YulIdentifier", + "src": "37885:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37905:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "37910:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37901:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37901:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_enum$_Side", + "nodeType": "YulIdentifier", + "src": "37861:23:67" + }, + "nodeType": "YulFunctionCall", + "src": "37861:53:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37861:53:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "37923:52:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "37955:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37969:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37951:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37951:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "37945:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "37945:30:67" + }, + "variables": [ + { + "name": "memberValue0_2", + "nodeType": "YulTypedName", + "src": "37927:14:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "37984:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37994:3:67", + "type": "", + "value": "288" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "37988:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_2", + "nodeType": "YulIdentifier", + "src": "38035:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38055:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "38060:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38051:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38051:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "38006:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "38006:58:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38006:58:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38073:52:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38105:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38119:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38101:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38101:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38095:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38095:30:67" + }, + "variables": [ + { + "name": "memberValue0_3", + "nodeType": "YulTypedName", + "src": "38077:14:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38134:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38144:3:67", + "type": "", + "value": "320" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "38138:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_3", + "nodeType": "YulIdentifier", + "src": "38185:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38205:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "38210:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38201:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38201:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "38156:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "38156:58:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38156:58:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38223:40:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38243:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38257:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38239:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38239:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38233:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38233:30:67" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "38227:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38272:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38282:3:67", + "type": "", + "value": "352" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "38276:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38305:3:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "38310:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38301:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38301:12:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "38315:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38294:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38294:24:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38294:24:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38327:40:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38347:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38361:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38343:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38343:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38337:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38337:30:67" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "38331:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38376:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38386:3:67", + "type": "", + "value": "384" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "38380:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38409:3:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "38414:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38405:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38405:12:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "38419:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38398:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38398:24:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38398:24:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38431:52:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38463:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38477:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38459:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38459:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38453:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38453:30:67" + }, + "variables": [ + { + "name": "memberValue0_4", + "nodeType": "YulTypedName", + "src": "38435:14:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38492:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38502:6:67", + "type": "", + "value": "0x01a0" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "38496:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_4", + "nodeType": "YulIdentifier", + "src": "38546:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38566:3:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "38571:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38562:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38562:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "38517:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "38517:58:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38517:58:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38595:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38600:3:67", + "type": "", + "value": "448" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38591:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38591:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38616:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38630:4:67", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38612:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38612:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38606:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38606:30:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38584:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38584:53:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38584:53:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38657:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38662:3:67", + "type": "", + "value": "480" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38653:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38653:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38678:12:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "38692:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38674:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38674:21:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38668:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38668:28:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38646:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38646:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38646:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38717:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38722:3:67", + "type": "", + "value": "512" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38713:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38713:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38738:12:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "38752:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38734:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38734:21:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38728:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38728:28:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38706:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38706:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38706:51:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38766:50:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38798:12:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "38812:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38794:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38794:21:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38788:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38788:28:67" + }, + "variables": [ + { + "name": "memberValue0_5", + "nodeType": "YulTypedName", + "src": "38770:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38836:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38841:3:67", + "type": "", + "value": "544" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38832:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38832:13:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "38847:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38825:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38825:25:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38825:25:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38859:103:67", + "value": { + "arguments": [ + { + "name": "memberValue0_5", + "nodeType": "YulIdentifier", + "src": "38932:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38952:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38957:3:67", + "type": "", + "value": "640" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38948:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38948:13:67" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr", + "nodeType": "YulIdentifier", + "src": "38871:60:67" + }, + "nodeType": "YulFunctionCall", + "src": "38871:91:67" + }, + "variables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "38863:4:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38982:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38987:3:67", + "type": "", + "value": "576" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38978:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38978:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "39003:12:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "39017:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38999:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38999:21:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38993:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38993:28:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38971:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38971:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38971:51:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39031:50:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "39063:12:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "39077:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39059:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39059:21:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39053:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39053:28:67" + }, + "variables": [ + { + "name": "memberValue0_6", + "nodeType": "YulTypedName", + "src": "39035:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39101:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39106:3:67", + "type": "", + "value": "608" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39097:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39097:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "39120:4:67" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39126:3:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "39116:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39116:14:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39136:3:67", + "type": "", + "value": "223" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "39132:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39132:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39112:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39112:29:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39090:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39090:52:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39090:52:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39151:53:67", + "value": { + "arguments": [ + { + "name": "memberValue0_6", + "nodeType": "YulIdentifier", + "src": "39183:14:67" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "39199:4:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "39164:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "39164:40:67" + }, + "variables": [ + { + "name": "end_1", + "nodeType": "YulTypedName", + "src": "39155:5:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39213:45:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39245:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39252:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39241:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39241:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39235:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39235:23:67" + }, + "variables": [ + { + "name": "memberValue0_7", + "nodeType": "YulTypedName", + "src": "39217:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_7", + "nodeType": "YulIdentifier", + "src": "39286:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39306:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39311:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39302:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39302:14:67" + } + ], + "functionName": { + "name": "abi_encode_t_uint8", + "nodeType": "YulIdentifier", + "src": "39267:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "39267:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39267:50:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39337:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39342:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39333:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39333:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39359:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39366:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39355:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39355:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39349:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39349:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39326:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39326:47:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39326:47:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39393:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39398:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39389:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39389:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39415:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39422:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39411:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39411:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39405:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39405:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39382:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39382:47:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39382:47:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39438:45:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39470:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39477:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39466:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39466:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39460:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39460:23:67" + }, + "variables": [ + { + "name": "memberValue0_8", + "nodeType": "YulTypedName", + "src": "39442:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39503:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39508:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39499:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39499:14:67" + }, + { + "arguments": [ + { + "name": "end_1", + "nodeType": "YulIdentifier", + "src": "39519:5:67" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39526:3:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "39515:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39515:15:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39492:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39492:39:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39492:39:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39540:55:67", + "value": { + "arguments": [ + { + "name": "memberValue0_8", + "nodeType": "YulIdentifier", + "src": "39573:14:67" + }, + { + "name": "end_1", + "nodeType": "YulIdentifier", + "src": "39589:5:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "39554:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "39554:41:67" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "39544:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39604:45:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39636:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39643:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39632:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39632:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39626:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39626:23:67" + }, + "variables": [ + { + "name": "memberValue0_9", + "nodeType": "YulTypedName", + "src": "39608:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_9", + "nodeType": "YulIdentifier", + "src": "39682:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39702:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39707:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39698:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39698:14:67" + } + ], + "functionName": { + "name": "abi_encode_t_enum$_Side", + "nodeType": "YulIdentifier", + "src": "39658:23:67" + }, + "nodeType": "YulFunctionCall", + "src": "39658:55:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39658:55:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39733:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39738:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39729:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39729:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39755:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39762:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39751:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39751:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39745:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39745:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39722:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39722:47:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39722:47:67" + }, + { + "nodeType": "YulAssignment", + "src": "39778:13:67", + "value": { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "39785:6:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "39778:3:67" + } + ] + } + ] + }, + "name": "abi_encode_t_struct$_Input", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "37604:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "37611:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "37619:3:67", + "type": "" + } + ], + "src": "37568:2229:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "39861:363:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39878:3:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39889:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39883:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39883:12:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39871:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39871:25:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39871:25:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39916:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39921:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39912:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39912:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39938:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39945:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39934:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39934:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39928:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39928:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39905:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39905:47:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39905:47:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39972:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39977:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39968:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39968:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39994:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40001:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39990:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39990:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39984:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39984:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39961:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39961:47:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39961:47:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "40028:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40033:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40024:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40024:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "40050:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40057:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40046:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40046:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "40040:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "40040:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "40017:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40017:47:67" + }, + "nodeType": "YulExpressionStatement", + "src": "40017:47:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "40084:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40089:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40080:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40080:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "40110:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40117:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40106:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40106:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "40100:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "40100:23:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40133:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40138:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "40129:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40129:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40142:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "40125:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40125:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "40096:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40096:49:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "40073:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40073:73:67" + }, + "nodeType": "YulExpressionStatement", + "src": "40073:73:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "40166:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40171:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40162:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40162:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "40202:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40209:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40198:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40198:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "40192:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "40192:23:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "40185:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40185:31:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "40178:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40178:39:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "40155:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40155:63:67" + }, + "nodeType": "YulExpressionStatement", + "src": "40155:63:67" + } + ] + }, + "name": "abi_encode_t_struct$_SettleShared", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "39845:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "39852:3:67", + "type": "" + } + ], + "src": "39802:422:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "40273:33:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "40282:3:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "40291:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40298:4:67", + "type": "", + "value": "0xff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "40287:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40287:16:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "40275:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40275:29:67" + }, + "nodeType": "YulExpressionStatement", + "src": "40275:29:67" + } + ] + }, + "name": "abi_encode_t_uint8", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "40257:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "40264:3:67", + "type": "" + } + ], + "src": "40229:77:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "40448:137:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "40458:27:67", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "40478:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "40472:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "40472:13:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "40462:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "40520:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40528:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40516:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40516:17:67" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "40535:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "40540:6:67" + } + ], + "functionName": { + "name": "copy_memory_to_memory", + "nodeType": "YulIdentifier", + "src": "40494:21:67" + }, + "nodeType": "YulFunctionCall", + "src": "40494:53:67" + }, + "nodeType": "YulExpressionStatement", + "src": "40494:53:67" + }, + { + "nodeType": "YulAssignment", + "src": "40556:23:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "40567:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "40572:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40563:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40563:16:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "40556:3:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "40424:3:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "40429:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "40440:3:67", + "type": "" + } + ], + "src": "40311:274:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "40691:102:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "40701:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "40713:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40724:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40709:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40709:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "40701:4:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "40743:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "40758:6:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40774:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40779:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "40770:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40770:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40783:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "40766:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40766:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "40754:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40754:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "40736:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40736:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "40736:51:67" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "40660:9:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "40671:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "40682:4:67", + "type": "" + } + ], + "src": "40590:203:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "40907:102:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "40917:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "40929:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40940:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40925:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40925:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "40917:4:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "40959:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "40974:6:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40990:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40995:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "40986:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40986:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40999:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "40982:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40982:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "40970:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40970:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "40952:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40952:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "40952:51:67" + } + ] + }, + "name": "abi_encode_tuple_t_address_payable__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "40876:9:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "40887:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "40898:4:67", + "type": "" + } + ], + "src": "40798:211:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "41187:218:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "41197:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41209:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41220:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41205:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41205:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "41197:4:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "41232:29:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41250:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41255:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "41246:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41246:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41259:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "41242:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41242:19:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "41236:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41277:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "41292:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "41300:2:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "41288:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41288:15:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41270:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41270:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41270:34:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41324:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41335:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41320:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41320:18:67" + }, + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "41344:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "41352:2:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "41340:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41340:15:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41313:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41313:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41313:43:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41376:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41387:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41372:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41372:18:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "41392:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41365:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41365:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41365:34:67" + } + ] + }, + "name": "abi_encode_tuple_t_address_payable_t_address_payable_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "41140:9:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "41151:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "41159:6:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "41167:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "41178:4:67", + "type": "" + } + ], + "src": "41014:391:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "41711:345:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "41721:29:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41739:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41744:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "41735:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41735:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41748:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "41731:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41731:19:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "41725:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41766:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "41781:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "41789:2:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "41777:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41777:15:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41759:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41759:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41759:34:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41813:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41824:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41809:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41809:18:67" + }, + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "41833:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "41841:2:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "41829:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41829:15:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41802:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41802:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41802:43:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41865:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41876:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41861:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41861:18:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "41881:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41854:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41854:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41854:34:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41908:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41919:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41904:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41904:18:67" + }, + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "41924:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41897:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41897:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41897:34:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41951:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41962:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41947:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41947:19:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41968:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41940:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41940:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41940:32:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41992:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42003:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41988:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41988:19:67" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "42009:4:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41981:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41981:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41981:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "42023:27:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42035:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42046:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "42031:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42031:19:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "42023:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_address_payable_t_address_payable_t_uint256_t_uint256_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_address_t_address_t_uint256_t_uint256_t_bytes_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "41656:9:67", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "41667:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "41675:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "41683:6:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "41691:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "41702:4:67", + "type": "" + } + ], + "src": "41410:646:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "42198:145:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "42208:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42220:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42231:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "42216:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42216:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "42208:4:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42250:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "42265:6:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42281:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42286:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "42277:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42277:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42290:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "42273:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42273:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "42261:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42261:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "42243:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42243:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "42243:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42314:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42325:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "42310:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42310:18:67" + }, + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "42330:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "42303:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42303:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "42303:34:67" + } + ] + }, + "name": "abi_encode_tuple_t_address_payable_t_uint256__to_t_address_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "42159:9:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "42170:6:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "42178:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "42189:4:67", + "type": "" + } + ], + "src": "42061:282:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "42477:145:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "42487:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42499:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42510:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "42495:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42495:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "42487:4:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42529:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "42544:6:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42560:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42565:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "42556:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42556:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42569:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "42552:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42552:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "42540:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42540:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "42522:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42522:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "42522:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42593:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42604:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "42589:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42589:18:67" + }, + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "42609:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "42582:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42582:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "42582:34:67" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "42438:9:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "42449:6:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "42457:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "42468:4:67", + "type": "" + } + ], + "src": "42348:274:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "42722:92:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "42732:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42744:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42755:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "42740:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42740:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "42732:4:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42774:9:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "42799:6:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "42792:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42792:14:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "42785:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42785:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "42767:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42767:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "42767:41:67" + } + ] + }, + "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "42691:9:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "42702:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "42713:4:67", + "type": "" + } + ], + "src": "42627:187:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "42918:103:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "42928:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42940:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42951:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "42936:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42936:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "42928:4:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42970:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "42985:6:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42997:3:67", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43002:10:67", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "42993:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42993:20:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "42981:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42981:33:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "42963:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42963:52:67" + }, + "nodeType": "YulExpressionStatement", + "src": "42963:52:67" + } + ] + }, + "name": "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "42887:9:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "42898:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "42909:4:67", + "type": "" + } + ], + "src": "42819:202:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "43200:182:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43217:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43228:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43210:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43210:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43210:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43251:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43262:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43247:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43247:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43267:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43240:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43240:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43240:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43290:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43301:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43286:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43286:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "43306:34:67", + "type": "", + "value": "Purchase SeaPort_1_4 failed WETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43279:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43279:62:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43279:62:67" + }, + { + "nodeType": "YulAssignment", + "src": "43350:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43362:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43373:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43358:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43358:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "43350:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_05a847584de3c2ae6c800d1f7b0a5d67e8bceaac16366dec690fd8433d46a23a__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "43177:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "43191:4:67", + "type": "" + } + ], + "src": "43026:356:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "43561:182:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43578:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43589:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43571:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43571:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43571:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43612:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43623:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43608:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43608:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43628:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43601:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43601:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43601:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43651:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43662:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43647:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43647:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "43667:34:67", + "type": "", + "value": "Purchase SeaPort_1_5 failed WETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43640:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43640:62:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43640:62:67" + }, + { + "nodeType": "YulAssignment", + "src": "43711:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43723:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43734:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43719:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43719:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "43711:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_1461016c88004ca93c55e893467e5e7d0c1ff55121e923be5ca0e173134693e9__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "43538:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "43552:4:67", + "type": "" + } + ], + "src": "43387:356:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "43922:180:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43939:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43950:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43932:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43932:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43932:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43973:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43984:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43969:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43969:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43989:2:67", + "type": "", + "value": "30" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43962:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43962:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43962:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44012:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44023:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44008:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44008:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "44028:32:67", + "type": "", + "value": "Purchase wyvernExchange failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44001:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44001:60:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44001:60:67" + }, + { + "nodeType": "YulAssignment", + "src": "44070:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44082:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44093:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44078:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44078:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "44070:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_1cdf96c41f1501fb82e87942f0faf4d72a6efd57209b4dccba0c17cf2c4017c6__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "43899:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "43913:4:67", + "type": "" + } + ], + "src": "43748:354:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "44281:177:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44298:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44309:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44291:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44291:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44291:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44332:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44343:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44328:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44328:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44348:2:67", + "type": "", + "value": "27" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44321:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44321:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44321:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44371:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44382:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44367:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44367:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "44387:29:67", + "type": "", + "value": "Purchase SeaPort_1_4 failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44360:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44360:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44360:57:67" + }, + { + "nodeType": "YulAssignment", + "src": "44426:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44438:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44449:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44434:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44434:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "44426:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_1cf39be99a03bb39414ad01e616c59ec2038a5746618a3f8aee8a485d8d5e50a__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "44258:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "44272:4:67", + "type": "" + } + ], + "src": "44107:351:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "44637:173:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44654:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44665:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44647:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44647:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44647:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44688:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44699:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44684:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44684:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44704:2:67", + "type": "", + "value": "23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44677:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44677:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44677:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44727:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44738:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44723:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44723:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "44743:25:67", + "type": "", + "value": "Purchase rarible failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44716:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44716:53:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44716:53:67" + }, + { + "nodeType": "YulAssignment", + "src": "44778:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44790:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44801:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44786:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44786:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "44778:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_2b352c406e176536877560097b51d8b7a1d4ebdd84181eeb9cfae44540c1b868__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "44614:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "44628:4:67", + "type": "" + } + ], + "src": "44463:347:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "44989:178:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45006:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45017:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44999:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44999:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44999:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45040:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45051:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45036:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45036:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45056:2:67", + "type": "", + "value": "28" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45029:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45029:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45029:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45079:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45090:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45075:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45075:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "45095:30:67", + "type": "", + "value": "Purchase rarible failed WETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45068:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45068:58:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45068:58:67" + }, + { + "nodeType": "YulAssignment", + "src": "45135:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45147:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45158:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45143:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45143:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "45135:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_2ec0a2b485cd497572ad8de2f4110630fd04a79c3fc75a9aaa133bc5c098fd7e__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "44966:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "44980:4:67", + "type": "" + } + ], + "src": "44815:352:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "45346:170:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45363:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45374:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45356:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45356:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45356:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45397:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45408:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45393:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45393:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45413:2:67", + "type": "", + "value": "20" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45386:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45386:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45386:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45436:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45447:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45432:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45432:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "45452:22:67", + "type": "", + "value": "Unknown marketId ETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45425:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45425:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45425:50:67" + }, + { + "nodeType": "YulAssignment", + "src": "45484:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45496:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45507:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45492:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45492:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "45484:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_3bc896cadc7524646943368edd2f41dfd35c78e313328c146d90408931cae185__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "45323:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "45337:4:67", + "type": "" + } + ], + "src": "45172:344:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "45695:177:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45712:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45723:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45705:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45705:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45705:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45746:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45757:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45742:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45742:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45762:2:67", + "type": "", + "value": "27" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45735:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45735:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45735:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45785:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45796:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45781:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45781:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "45801:29:67", + "type": "", + "value": "Purchase SeaPort_1_6 failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45774:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45774:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45774:57:67" + }, + { + "nodeType": "YulAssignment", + "src": "45840:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45852:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45863:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45848:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45848:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "45840:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_5320b653cd5780735adae92ac3bcf0fff2a8be3d44e7d778c7caac0f6e924b5d__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "45672:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "45686:4:67", + "type": "" + } + ], + "src": "45521:351:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "46051:176:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46068:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46079:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46061:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46061:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46061:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46102:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46113:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46098:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46098:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46118:2:67", + "type": "", + "value": "26" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46091:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46091:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46091:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46141:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46152:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46137:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46137:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "46157:28:67", + "type": "", + "value": "New address cannot be zero" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46130:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46130:56:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46130:56:67" + }, + { + "nodeType": "YulAssignment", + "src": "46195:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46207:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46218:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46203:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46203:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "46195:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_5904c3e21a28364a0c2d14d132ae0ba7e1f2dcf1f9ade73ba991a7031640606b__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "46028:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "46042:4:67", + "type": "" + } + ], + "src": "45877:350:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "46406:175:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46423:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46434:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46416:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46416:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46416:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46457:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46468:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46453:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46453:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46473:2:67", + "type": "", + "value": "25" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46446:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46446:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46446:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46496:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46507:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46492:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46492:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "46512:27:67", + "type": "", + "value": "Unknown purchase currency" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46485:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46485:55:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46485:55:67" + }, + { + "nodeType": "YulAssignment", + "src": "46549:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46561:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46572:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46557:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46557:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "46549:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "46383:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "46397:4:67", + "type": "" + } + ], + "src": "46232:349:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "46760:171:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46777:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46788:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46770:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46770:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46770:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46811:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46822:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46807:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46807:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46827:2:67", + "type": "", + "value": "21" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46800:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46800:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46800:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46850:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46861:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46846:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46846:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "46866:23:67", + "type": "", + "value": "Unknown marketId WETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46839:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46839:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46839:51:67" + }, + { + "nodeType": "YulAssignment", + "src": "46899:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46911:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46922:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46907:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46907:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "46899:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_6c57fe9713182a834bdd4831295dedf89e8ff161b7041e5a8170e9b0afd4c42f__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "46737:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "46751:4:67", + "type": "" + } + ], + "src": "46586:345:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "47110:177:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47127:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47138:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47120:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47120:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47120:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47161:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47172:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47157:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47157:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47177:2:67", + "type": "", + "value": "27" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47150:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47150:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47150:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47200:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47211:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47196:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47196:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "47216:29:67", + "type": "", + "value": "Purchase SeaPort_1_1 failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47189:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47189:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47189:57:67" + }, + { + "nodeType": "YulAssignment", + "src": "47255:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47267:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47278:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47263:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47263:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "47255:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_74739c97d81f6776122daced63f78d93149e498efd7fbf2084eabb7018fcdc3b__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "47087:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "47101:4:67", + "type": "" + } + ], + "src": "46936:351:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "47466:182:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47483:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47494:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47476:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47476:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47476:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47517:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47528:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47513:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47513:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47533:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47506:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47506:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47506:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47556:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47567:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47552:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47552:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "47572:34:67", + "type": "", + "value": "Purchase SeaPort_1_6 failed WETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47545:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47545:62:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47545:62:67" + }, + { + "nodeType": "YulAssignment", + "src": "47616:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47628:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47639:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47624:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47624:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "47616:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_7d4fa3070cdac7b556bda72a8ba21317d4366b909fe8ae7528922ba67829f31c__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "47443:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "47457:4:67", + "type": "" + } + ], + "src": "47292:356:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "47827:177:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47844:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47855:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47837:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47837:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47837:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47878:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47889:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47874:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47874:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47894:2:67", + "type": "", + "value": "27" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47867:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47867:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47867:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47917:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47928:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47913:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47913:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "47933:29:67", + "type": "", + "value": "Purchase SeaPort_1_5 failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47906:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47906:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47906:57:67" + }, + { + "nodeType": "YulAssignment", + "src": "47972:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47984:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47995:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47980:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47980:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "47972:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_83f62501a9582b49b15f73bfa16e8789fc9181acb73eb6b2a01520c5a8cee0ce__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "47804:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "47818:4:67", + "type": "" + } + ], + "src": "47653:351:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "48183:182:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48200:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48211:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48193:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48193:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48193:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48234:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48245:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48230:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48230:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48250:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48223:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48223:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48223:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48273:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48284:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48269:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48269:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "48289:34:67", + "type": "", + "value": "Purchase SeaPort_1_1 failed WETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48262:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48262:62:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48262:62:67" + }, + { + "nodeType": "YulAssignment", + "src": "48333:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48345:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48356:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48341:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48341:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "48333:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_9d7bf9b147b8e8ea1a011a4553d7d866e6536c248028d8dc1aeaa1b40c8d32c7__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "48160:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "48174:4:67", + "type": "" + } + ], + "src": "48009:356:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "48544:174:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48561:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48572:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48554:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48554:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48554:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48595:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48606:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48591:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48591:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48611:2:67", + "type": "", + "value": "24" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48584:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48584:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48584:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48634:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48645:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48630:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48630:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "48650:26:67", + "type": "", + "value": "Purchase sudoswap failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48623:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48623:54:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48623:54:67" + }, + { + "nodeType": "YulAssignment", + "src": "48686:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48698:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48709:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48694:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48694:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "48686:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_af8784af813955ccf5679f356dd871ef58abf3a7050c9104ea0ff5ddaa4b9287__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "48521:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "48535:4:67", + "type": "" + } + ], + "src": "48370:348:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "48897:175:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48914:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48925:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48907:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48907:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48907:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48948:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48959:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48944:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48944:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48964:2:67", + "type": "", + "value": "25" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48937:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48937:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48937:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48987:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48998:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48983:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48983:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "49003:27:67", + "type": "", + "value": "unknown delegateType x2y2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48976:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48976:55:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48976:55:67" + }, + { + "nodeType": "YulAssignment", + "src": "49040:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49052:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49063:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49048:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49048:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "49040:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_b9e628d538abf867b76153fc9fbf92e2395d1f1d03fe95fb0b6ee129f4f808af__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "48874:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "48888:4:67", + "type": "" + } + ], + "src": "48723:349:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "49251:177:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49268:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49279:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49261:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49261:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49261:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49302:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49313:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49298:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49298:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49318:2:67", + "type": "", + "value": "27" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49291:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49291:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49291:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49341:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49352:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49337:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49337:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "49357:29:67", + "type": "", + "value": "Purchase LooksRareV2 failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49330:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49330:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49330:57:67" + }, + { + "nodeType": "YulAssignment", + "src": "49396:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49408:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49419:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49404:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49404:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "49396:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_bf725f533a31a5fc822de78c3f59575168899683c9fc9b37f7d7aa10c766d3c1__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "49228:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "49242:4:67", + "type": "" + } + ], + "src": "49077:351:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "49607:168:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49624:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49635:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49617:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49617:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49617:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49658:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49669:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49654:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49654:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49674:2:67", + "type": "", + "value": "18" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49647:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49647:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49647:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49697:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49708:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49693:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49693:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "49713:20:67", + "type": "", + "value": "Unknown token type" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49686:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49686:48:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49686:48:67" + }, + { + "nodeType": "YulAssignment", + "src": "49743:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49755:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49766:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49751:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49751:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "49743:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "49584:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "49598:4:67", + "type": "" + } + ], + "src": "49433:342:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "49954:176:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49971:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49982:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49964:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49964:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49964:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50005:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50016:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50001:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50001:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50021:2:67", + "type": "", + "value": "26" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49994:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49994:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49994:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50044:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50055:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50040:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50040:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "50060:28:67", + "type": "", + "value": "unknown additionalDataType" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50033:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50033:56:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50033:56:67" + }, + { + "nodeType": "YulAssignment", + "src": "50098:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50110:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50121:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50106:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50106:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "50098:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_e89eb59adf40d46cfd63ce8f1b9b12cb445413877fb23a6846b8ace3266a633d__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "49931:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "49945:4:67", + "type": "" + } + ], + "src": "49780:350:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "50309:174:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50326:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50337:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50319:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50319:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50319:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50360:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50371:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50356:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50356:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50376:2:67", + "type": "", + "value": "24" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50349:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50349:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50349:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50399:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50410:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50395:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50395:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "50415:26:67", + "type": "", + "value": "no successful executions" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50388:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50388:54:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50388:54:67" + }, + { + "nodeType": "YulAssignment", + "src": "50451:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50463:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50474:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50459:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50459:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "50451:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_ec72e63c53a628868607248de6752f6e953ad035609908ced114156f1eeff564__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "50286:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "50300:4:67", + "type": "" + } + ], + "src": "50135:348:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "50662:174:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50679:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50690:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50672:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50672:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50672:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50713:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50724:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50709:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50709:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50729:2:67", + "type": "", + "value": "24" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50702:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50702:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50702:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50752:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50763:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50748:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50748:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "50768:26:67", + "type": "", + "value": "Invalid marketplace type" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50741:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50741:54:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50741:54:67" + }, + { + "nodeType": "YulAssignment", + "src": "50804:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50816:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50827:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50812:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50812:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "50804:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_febc375c51703703674424cdadfabf329e51db90f4495b4c56145c8182019182__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "50639:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "50653:4:67", + "type": "" + } + ], + "src": "50488:348:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "51066:232:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51083:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51094:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "51076:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "51076:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "51076:21:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "51106:68:67", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "51147:6:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51159:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51170:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51155:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51155:18:67" + } + ], + "functionName": { + "name": "abi_encode_t_struct$_Input", + "nodeType": "YulIdentifier", + "src": "51120:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "51120:54:67" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "51110:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51194:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51205:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51190:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51190:18:67" + }, + { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "51214:6:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51222:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "51210:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51210:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "51183:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "51183:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "51183:50:67" + }, + { + "nodeType": "YulAssignment", + "src": "51242:50:67", + "value": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "51277:6:67" + }, + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "51285:6:67" + } + ], + "functionName": { + "name": "abi_encode_t_struct$_Input", + "nodeType": "YulIdentifier", + "src": "51250:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "51250:42:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "51242:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_struct$_Input_$10442_memory_ptr_t_struct$_Input_$10442_memory_ptr__to_t_struct$_Input_$10442_memory_ptr_t_struct$_Input_$10442_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "51027:9:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "51038:6:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "51046:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "51057:4:67", + "type": "" + } + ], + "src": "50841:457:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "51458:2908:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "51468:12:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51478:2:67", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "51472:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51496:9:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "51507:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "51489:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "51489:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "51489:21:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "51519:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51529:3:67", + "type": "", + "value": "384" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "51523:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "51541:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51559:9:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "51570:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51555:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51555:18:67" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "51545:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "51582:33:67", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "51608:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "51602:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "51602:13:67" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "51586:12:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "51624:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51634:6:67", + "type": "", + "value": "0x0160" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "51628:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51660:9:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "51671:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51656:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51656:18:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "51676:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "51649:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "51649:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "51649:30:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "51688:17:67", + "value": { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "51699:6:67" + }, + "variables": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "51692:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "51714:33:67", + "value": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "51734:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "51728:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "51728:19:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "51718:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "51763:6:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "51771:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "51756:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "51756:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "51756:22:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "51787:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51797:3:67", + "type": "", + "value": "416" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "51791:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "51809:25:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51820:9:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "51831:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51816:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51816:18:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "51809:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "51843:54:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51865:9:67" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "51880:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "51888:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "51876:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51876:15:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51861:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51861:31:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "51894:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51857:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51857:40:67" + }, + "variables": [ + { + "name": "tail_2", + "nodeType": "YulTypedName", + "src": "51847:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "51906:35:67", + "value": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "51924:12:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "51938:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51920:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51920:21:67" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "51910:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "51950:13:67", + "value": { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "51959:4:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "51954:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "52021:1711:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "52042:3:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52055:6:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "52063:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "52051:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52051:22:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52079:3:67", + "type": "", + "value": "415" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "52075:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52075:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52047:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52047:37:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "52035:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "52035:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52035:50:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52098:23:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "52114:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52108:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52108:13:67" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "52102:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52141:6:67" + }, + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "52155:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52149:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52149:9:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "52134:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "52134:25:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52134:25:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52172:40:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "52204:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "52208:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52200:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52200:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52194:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52194:18:67" + }, + "variables": [ + { + "name": "memberValue0_1", + "nodeType": "YulTypedName", + "src": "52176:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_1", + "nodeType": "YulIdentifier", + "src": "52254:14:67" + }, + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52274:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "52282:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52270:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52270:15:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "52225:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "52225:61:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52225:61:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52299:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52309:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "52303:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52337:6:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "52345:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52333:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52333:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "52360:2:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "52364:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52356:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52356:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52350:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52350:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "52326:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "52326:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52326:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52382:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52392:4:67", + "type": "", + "value": "0x60" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "52386:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52420:6:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "52428:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52416:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52416:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "52443:2:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "52447:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52439:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52439:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52433:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52433:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "52409:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "52409:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52409:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52465:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52475:4:67", + "type": "", + "value": "0x80" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "52469:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52503:6:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "52511:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52499:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52499:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "52526:2:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "52530:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52522:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52522:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52516:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52516:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "52492:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "52492:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52492:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52548:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52558:4:67", + "type": "", + "value": "0xa0" + }, + "variables": [ + { + "name": "_9", + "nodeType": "YulTypedName", + "src": "52552:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52586:6:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "52594:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52582:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52582:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "52609:2:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "52613:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52605:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52605:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52599:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52599:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "52575:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "52575:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52575:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52631:15:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52642:4:67", + "type": "", + "value": "0xc0" + }, + "variables": [ + { + "name": "_10", + "nodeType": "YulTypedName", + "src": "52635:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52659:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "52691:2:67" + }, + { + "name": "_10", + "nodeType": "YulIdentifier", + "src": "52695:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52687:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52687:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52681:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52681:19:67" + }, + "variables": [ + { + "name": "memberValue0_2", + "nodeType": "YulTypedName", + "src": "52663:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_2", + "nodeType": "YulIdentifier", + "src": "52742:14:67" + }, + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52762:6:67" + }, + { + "name": "_10", + "nodeType": "YulIdentifier", + "src": "52770:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52758:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52758:16:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "52713:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "52713:62:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52713:62:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52788:15:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52799:4:67", + "type": "", + "value": "0xe0" + }, + "variables": [ + { + "name": "_11", + "nodeType": "YulTypedName", + "src": "52792:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52816:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "52848:2:67" + }, + { + "name": "_11", + "nodeType": "YulIdentifier", + "src": "52852:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52844:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52844:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52838:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52838:19:67" + }, + "variables": [ + { + "name": "memberValue0_3", + "nodeType": "YulTypedName", + "src": "52820:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52881:6:67" + }, + { + "name": "_11", + "nodeType": "YulIdentifier", + "src": "52889:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52877:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52877:16:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "52895:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "52870:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "52870:28:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52870:28:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52911:65:67", + "value": { + "arguments": [ + { + "name": "memberValue0_3", + "nodeType": "YulIdentifier", + "src": "52944:14:67" + }, + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52964:6:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "52972:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52960:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52960:15:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "52925:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "52925:51:67" + }, + "variables": [ + { + "name": "tail_3", + "nodeType": "YulTypedName", + "src": "52915:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52989:17:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "53000:6:67", + "type": "", + "value": "0x0100" + }, + "variables": [ + { + "name": "_12", + "nodeType": "YulTypedName", + "src": "52993:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53019:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "53051:2:67" + }, + { + "name": "_12", + "nodeType": "YulIdentifier", + "src": "53055:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53047:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53047:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53041:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53041:19:67" + }, + "variables": [ + { + "name": "memberValue0_4", + "nodeType": "YulTypedName", + "src": "53023:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53084:6:67" + }, + { + "name": "_12", + "nodeType": "YulIdentifier", + "src": "53092:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53080:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53080:16:67" + }, + { + "arguments": [ + { + "name": "tail_3", + "nodeType": "YulIdentifier", + "src": "53102:6:67" + }, + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53110:6:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "53098:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53098:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "53073:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "53073:45:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53073:45:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53131:82:67", + "value": { + "arguments": [ + { + "name": "memberValue0_4", + "nodeType": "YulIdentifier", + "src": "53190:14:67" + }, + { + "name": "tail_3", + "nodeType": "YulIdentifier", + "src": "53206:6:67" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_OrderItem_$dyn", + "nodeType": "YulIdentifier", + "src": "53145:44:67" + }, + "nodeType": "YulFunctionCall", + "src": "53145:68:67" + }, + "variables": [ + { + "name": "tail_4", + "nodeType": "YulTypedName", + "src": "53135:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53226:17:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "53237:6:67", + "type": "", + "value": "0x0120" + }, + "variables": [ + { + "name": "_13", + "nodeType": "YulTypedName", + "src": "53230:3:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53267:6:67" + }, + { + "name": "_13", + "nodeType": "YulIdentifier", + "src": "53275:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53263:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53263:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "53291:2:67" + }, + { + "name": "_13", + "nodeType": "YulIdentifier", + "src": "53295:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53287:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53287:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53281:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53281:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "53256:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "53256:45:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53256:45:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53314:17:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "53325:6:67", + "type": "", + "value": "0x0140" + }, + "variables": [ + { + "name": "_14", + "nodeType": "YulTypedName", + "src": "53318:3:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53355:6:67" + }, + { + "name": "_14", + "nodeType": "YulIdentifier", + "src": "53363:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53351:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53351:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "53379:2:67" + }, + { + "name": "_14", + "nodeType": "YulIdentifier", + "src": "53383:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53375:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53375:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53369:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53369:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "53344:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "53344:45:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53344:45:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53402:40:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "53434:2:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "53438:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53430:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53430:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53424:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53424:18:67" + }, + "variables": [ + { + "name": "memberValue0_5", + "nodeType": "YulTypedName", + "src": "53406:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_5", + "nodeType": "YulIdentifier", + "src": "53474:14:67" + }, + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53494:6:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "53502:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53490:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53490:15:67" + } + ], + "functionName": { + "name": "abi_encode_t_uint8", + "nodeType": "YulIdentifier", + "src": "53455:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "53455:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53455:51:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53519:40:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "53551:2:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "53555:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53547:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53547:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53541:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53541:18:67" + }, + "variables": [ + { + "name": "memberValue0_6", + "nodeType": "YulTypedName", + "src": "53523:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_6", + "nodeType": "YulIdentifier", + "src": "53591:14:67" + }, + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53611:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "53619:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53607:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53607:15:67" + } + ], + "functionName": { + "name": "abi_encode_t_uint8", + "nodeType": "YulIdentifier", + "src": "53572:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "53572:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53572:51:67" + }, + { + "nodeType": "YulAssignment", + "src": "53636:16:67", + "value": { + "name": "tail_4", + "nodeType": "YulIdentifier", + "src": "53646:6:67" + }, + "variableNames": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53636:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "53665:25:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "53679:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "53687:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53675:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53675:15:67" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "53665:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "53703:19:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "53714:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "53719:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53710:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53710:12:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "53703:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "51983:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "51986:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "51980:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "51980:13:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "51994:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "51996:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "52005:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52008:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52001:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52001:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "51996:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "51976:3:67", + "statements": [] + }, + "src": "51972:1760:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53741:44:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "53773:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "53781:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53769:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53769:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53763:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53763:22:67" + }, + "variables": [ + { + "name": "memberValue0_7", + "nodeType": "YulTypedName", + "src": "53745:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "53805:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "53816:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53801:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53801:20:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53831:6:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "53839:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "53827:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53827:22:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "53855:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "53851:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53851:7:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53823:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53823:36:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "53794:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "53794:66:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53794:66:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53869:85:67", + "value": { + "arguments": [ + { + "name": "memberValue0_7", + "nodeType": "YulIdentifier", + "src": "53931:14:67" + }, + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53947:6:67" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_SettleDetail_$dyn", + "nodeType": "YulIdentifier", + "src": "53883:47:67" + }, + "nodeType": "YulFunctionCall", + "src": "53883:71:67" + }, + "variables": [ + { + "name": "tail_5", + "nodeType": "YulTypedName", + "src": "53873:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53963:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "53995:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54003:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53991:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53991:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53985:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53985:24:67" + }, + "variables": [ + { + "name": "memberValue0_8", + "nodeType": "YulTypedName", + "src": "53967:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_8", + "nodeType": "YulIdentifier", + "src": "54052:14:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54072:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54083:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54068:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54068:20:67" + } + ], + "functionName": { + "name": "abi_encode_t_struct$_SettleShared", + "nodeType": "YulIdentifier", + "src": "54018:33:67" + }, + "nodeType": "YulFunctionCall", + "src": "54018:71:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54018:71:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54109:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54120:6:67", + "type": "", + "value": "0x0120" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54105:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54105:22:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "54139:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54147:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54135:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54135:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54129:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54129:24:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "54098:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "54098:56:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54098:56:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54174:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54185:6:67", + "type": "", + "value": "0x0140" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54170:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54170:22:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "54204:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54212:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54200:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54200:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54194:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54194:24:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "54163:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "54163:56:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54163:56:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "54228:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "54260:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54268:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54256:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54256:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54250:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54250:24:67" + }, + "variables": [ + { + "name": "memberValue0_9", + "nodeType": "YulTypedName", + "src": "54232:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_9", + "nodeType": "YulIdentifier", + "src": "54302:14:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54322:9:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "54333:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54318:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54318:18:67" + } + ], + "functionName": { + "name": "abi_encode_t_uint8", + "nodeType": "YulIdentifier", + "src": "54283:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "54283:54:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54283:54:67" + }, + { + "nodeType": "YulAssignment", + "src": "54346:14:67", + "value": { + "name": "tail_5", + "nodeType": "YulIdentifier", + "src": "54354:6:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "54346:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_struct$_RunInput_$10725_memory_ptr__to_t_struct$_RunInput_$10725_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "51427:9:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "51438:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "51449:4:67", + "type": "" + } + ], + "src": "51303:3063:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "54616:2125:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54633:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54644:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "54626:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "54626:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54626:21:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "54656:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54666:3:67", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "54660:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54689:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54700:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54685:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54685:18:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "54725:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54719:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54719:13:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "54712:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "54712:21:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "54705:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "54705:29:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "54678:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "54678:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54678:57:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54755:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54766:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54751:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54751:18:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "54785:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54793:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54781:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54781:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54775:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54775:24:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54809:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54814:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "54805:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54805:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54818:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "54801:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54801:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "54771:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54771:50:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "54744:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "54744:78:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54744:78:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54842:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54853:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54838:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54838:19:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "54869:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54877:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54865:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54865:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54859:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54859:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "54831:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "54831:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54831:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54902:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54913:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54898:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54898:19:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "54929:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54937:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54925:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54925:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54919:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54919:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "54891:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "54891:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54891:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54962:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54973:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54958:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54958:20:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "54990:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54998:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54986:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54986:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54980:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54980:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "54951:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "54951:53:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54951:53:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "55013:43:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "55043:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55051:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55039:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55039:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55033:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55033:23:67" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "55017:12:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55076:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55087:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55072:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55072:19:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55093:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55065:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55065:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55065:33:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "55107:63:67", + "value": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "55137:12:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55155:9:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "55166:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55151:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55151:18:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "55118:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "55118:52:67" + }, + "variables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "55111:3:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55190:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55201:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55186:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55186:20:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "55212:3:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55217:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "55208:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55208:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55179:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55179:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55179:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "55237:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55247:6:67", + "type": "", + "value": "0x0200" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "55241:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "55286:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55280:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55280:13:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "55295:3:67" + } + ], + "functionName": { + "name": "abi_encode_t_bool", + "nodeType": "YulIdentifier", + "src": "55262:17:67" + }, + "nodeType": "YulFunctionCall", + "src": "55262:37:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55262:37:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "55308:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "55340:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55348:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55336:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55336:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55330:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55330:24:67" + }, + "variables": [ + { + "name": "memberValue0_1", + "nodeType": "YulTypedName", + "src": "55312:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_1", + "nodeType": "YulIdentifier", + "src": "55392:14:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "55412:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55417:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55408:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55408:14:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "55363:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "55363:60:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55363:60:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "55432:44:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "55464:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55472:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55460:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55460:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55454:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55454:22:67" + }, + "variables": [ + { + "name": "memberValue0_2", + "nodeType": "YulTypedName", + "src": "55436:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_2", + "nodeType": "YulIdentifier", + "src": "55514:14:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "55534:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55539:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55530:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55530:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "55485:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "55485:58:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55485:58:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "55563:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55568:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55559:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55559:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "55583:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55591:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55579:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55579:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55573:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55573:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55552:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55552:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55552:44:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "55616:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55621:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55612:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55612:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "55637:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55645:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55633:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55633:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55627:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55627:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55605:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55605:46:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55605:46:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "55671:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55676:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55667:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55667:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "55692:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55700:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55688:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55688:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55682:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55682:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55660:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55660:46:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55660:46:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "55715:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "55747:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55755:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55743:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55743:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55737:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55737:24:67" + }, + "variables": [ + { + "name": "memberValue0_3", + "nodeType": "YulTypedName", + "src": "55719:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_3", + "nodeType": "YulIdentifier", + "src": "55799:14:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "55819:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55824:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55815:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55815:14:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "55770:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "55770:60:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55770:60:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "55839:45:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "55871:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55879:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55867:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55867:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55861:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55861:23:67" + }, + "variables": [ + { + "name": "memberValue0_4", + "nodeType": "YulTypedName", + "src": "55843:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_4", + "nodeType": "YulIdentifier", + "src": "55922:14:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "55942:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55947:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55938:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55938:13:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "55893:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "55893:59:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55893:59:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "55972:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "55977:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55968:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55968:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "55992:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "56000:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55988:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55988:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55982:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55982:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55961:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55961:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55961:44:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56014:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56024:6:67", + "type": "", + "value": "0x0120" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "56018:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56050:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "56055:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56046:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56046:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56070:6:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "56078:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56066:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56066:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56060:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56060:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56039:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56039:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56039:44:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56092:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56102:6:67", + "type": "", + "value": "0x0140" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "56096:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56128:3:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "56133:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56124:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56124:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56148:6:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "56156:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56144:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56144:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56138:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56138:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56117:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56117:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56117:44:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56170:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56180:6:67", + "type": "", + "value": "0x0160" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "56174:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56206:3:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "56211:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56202:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56202:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56226:6:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "56234:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56222:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56222:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56216:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56216:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56195:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56195:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56195:44:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56248:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56258:6:67", + "type": "", + "value": "0x0180" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "56252:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56273:44:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56305:6:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "56313:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56301:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56301:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56295:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56295:22:67" + }, + "variables": [ + { + "name": "memberValue0_5", + "nodeType": "YulTypedName", + "src": "56277:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56337:3:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "56342:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56333:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56333:12:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "56347:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56326:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56326:24:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56326:24:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56359:62:67", + "value": { + "arguments": [ + { + "name": "memberValue0_5", + "nodeType": "YulIdentifier", + "src": "56392:14:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56412:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "56417:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56408:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56408:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "56373:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "56373:48:67" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "56363:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56430:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56440:6:67", + "type": "", + "value": "0x01a0" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "56434:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56455:44:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56487:6:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "56495:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56483:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56483:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56477:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56477:22:67" + }, + "variables": [ + { + "name": "memberValue0_6", + "nodeType": "YulTypedName", + "src": "56459:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_6", + "nodeType": "YulIdentifier", + "src": "56527:14:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56547:3:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "56552:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56543:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56543:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_uint8", + "nodeType": "YulIdentifier", + "src": "56508:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "56508:48:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56508:48:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56565:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56575:6:67", + "type": "", + "value": "0x01c0" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "56569:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56601:3:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "56606:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56597:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56597:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56621:6:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "56629:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56617:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56617:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56611:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56611:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56590:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56590:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56590:44:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56643:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56653:6:67", + "type": "", + "value": "0x01e0" + }, + "variables": [ + { + "name": "_9", + "nodeType": "YulTypedName", + "src": "56647:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56679:3:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "56684:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56675:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56675:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56699:6:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "56707:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56695:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56695:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56689:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56689:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56668:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56668:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56668:44:67" + }, + { + "nodeType": "YulAssignment", + "src": "56721:14:67", + "value": { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "56729:6:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "56721:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_struct$_TakerOrder_$10789_memory_ptr_t_struct$_MakerOrder_$10776_memory_ptr__to_t_struct$_TakerOrder_$10789_memory_ptr_t_struct$_MakerOrder_$10776_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "54577:9:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "54588:6:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "54596:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "54607:4:67", + "type": "" + } + ], + "src": "54371:2370:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "56790:198:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "56800:19:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56816:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56810:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56810:9:67" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "56800:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56828:35:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "56850:6:67" + }, + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "56858:4:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56846:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56846:17:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "56832:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "56938:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "56940:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "56940:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56940:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "56881:10:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56893:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "56878:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "56878:34:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "56917:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "56929:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "56914:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "56914:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "56875:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "56875:62:67" + }, + "nodeType": "YulIf", + "src": "56872:2:67" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56967:2:67", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "56971:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56960:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56960:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56960:22:67" + } + ] + }, + "name": "allocateMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "56770:4:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "56779:6:67", + "type": "" + } + ], + "src": "56746:242:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "57068:108:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "57112:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "57114:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "57114:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "57114:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "57084:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57092:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "57081:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "57081:30:67" + }, + "nodeType": "YulIf", + "src": "57078:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "57134:36:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "57150:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57158:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "57146:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57146:17:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57165:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57142:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57142:28:67" + }, + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "57134:4:67" + } + ] + } + ] + }, + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "57048:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "57059:4:67", + "type": "" + } + ], + "src": "56993:183:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "57240:122:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "57284:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "57286:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "57286:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "57286:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "57256:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57264:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "57253:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "57253:30:67" + }, + "nodeType": "YulIf", + "src": "57250:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "57306:50:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "57326:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57334:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57322:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57322:17:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57345:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "57341:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57341:7:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "57318:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57318:31:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57351:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57314:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57314:42:67" + }, + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "57306:4:67" + } + ] + } + ] + }, + "name": "array_allocation_size_t_bytes", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "57220:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "57231:4:67", + "type": "" + } + ], + "src": "57181:181:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "57420:205:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "57430:10:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57439:1:67", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "57434:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "57499:63:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "57524:3:67" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "57529:1:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57520:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57520:11:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "57543:3:67" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "57548:1:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57539:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57539:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "57533:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "57533:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "57513:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "57513:39:67" + }, + "nodeType": "YulExpressionStatement", + "src": "57513:39:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "57460:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "57463:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "57457:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "57457:13:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "57471:19:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57473:15:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "57482:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57485:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57478:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57478:10:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "57473:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "57453:3:67", + "statements": [] + }, + "src": "57449:113:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "57588:31:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "57601:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "57606:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57597:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57597:16:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57615:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "57590:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "57590:27:67" + }, + "nodeType": "YulExpressionStatement", + "src": "57590:27:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "57577:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "57580:6:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "57574:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "57574:13:67" + }, + "nodeType": "YulIf", + "src": "57571:2:67" + } + ] + }, + "name": "copy_memory_to_memory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "57398:3:67", + "type": "" + }, + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "57403:3:67", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "57408:6:67", + "type": "" + } + ], + "src": "57367:258:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "57677:86:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "57741:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57750:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57753:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "57743:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "57743:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "57743:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "57700:5:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "57711:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57726:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57731:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "57722:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57722:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57735:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "57718:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57718:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "57707:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57707:31:67" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "57697:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "57697:42:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "57690:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "57690:50:67" + }, + "nodeType": "YulIf", + "src": "57687:2:67" + } + ] + }, + "name": "validator_revert_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "57666:5:67", + "type": "" + } + ], + "src": "57630:133:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "57812:76:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "57866:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57875:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57878:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "57868:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "57868:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "57868:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "57835:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "57856:5:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "57849:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "57849:13:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "57842:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "57842:21:67" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "57832:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "57832:32:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "57825:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "57825:40:67" + }, + "nodeType": "YulIf", + "src": "57822:2:67" + } + ] + }, + "name": "validator_revert_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "57801:5:67", + "type": "" + } + ], + "src": "57768:120:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "57939:87:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "58004:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58013:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58016:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "58006:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "58006:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "58006:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "57962:5:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "57973:5:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57984:3:67", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57989:10:67", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "57980:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57980:20:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "57969:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57969:32:67" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "57959:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "57959:43:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "57952:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "57952:51:67" + }, + "nodeType": "YulIf", + "src": "57949:2:67" + } + ] + }, + "name": "validator_revert_t_bytes4", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "57928:5:67", + "type": "" + } + ], + "src": "57893:133:67" + } + ] + }, + "contents": "{\n { }\n function abi_decode_t_address(offset) -> value\n {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n function abi_decode_t_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_t_address(value)\n }\n function abi_decode_t_array$_t_address_$dyn(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := calldataload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n if gt(add(add(offset, mul(_1, _2)), _2), end) { revert(array, array) }\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n let value := calldataload(src)\n validator_revert_t_address(value)\n mstore(dst, value)\n dst := add(dst, _2)\n src := add(src, _2)\n }\n array := dst_1\n }\n function abi_decode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := mload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n let _3 := 0x40\n if gt(add(add(offset, mul(_1, _3)), _2), end) { revert(array, array) }\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n if slt(sub(end, src), _3) { revert(array, array) }\n let memPtr := mload(_3)\n let newFreePtr := add(memPtr, _3)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n mstore(_3, newFreePtr)\n let value := mload(src)\n if iszero(eq(value, and(value, 0xffff))) { revert(array, array) }\n mstore(memPtr, value)\n let value_1 := mload(add(src, _2))\n validator_revert_t_address(value_1)\n mstore(add(memPtr, _2), value_1)\n mstore(dst, memPtr)\n dst := add(dst, _2)\n src := add(src, _3)\n }\n array := dst_1\n }\n function abi_decode_t_array$_t_struct$_Fee_$dyn_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := mload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n let _3 := 0x40\n if gt(add(add(offset, mul(_1, _3)), _2), end) { revert(array, array) }\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n if slt(sub(end, src), _3) { revert(array, array) }\n let memPtr := mload(_3)\n let newFreePtr := add(memPtr, _3)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n mstore(_3, newFreePtr)\n mstore(memPtr, mload(src))\n let value := mload(add(src, _2))\n validator_revert_t_address(value)\n mstore(add(memPtr, _2), value)\n mstore(dst, memPtr)\n dst := add(dst, _2)\n src := add(src, _3)\n }\n array := dst_1\n }\n function abi_decode_t_array$_t_struct$_OrderItem_$dyn_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := mload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n let _3 := add(offset, mload(src))\n let _4 := 0x40\n if slt(add(sub(end, _3), not(31)), _4) { revert(array, array) }\n let memPtr := mload(_4)\n let newFreePtr := add(memPtr, _4)\n let _5 := 0xffffffffffffffff\n if or(gt(newFreePtr, _5), lt(newFreePtr, memPtr)) { invalid() }\n mstore(_4, newFreePtr)\n mstore(memPtr, mload(add(_3, _2)))\n let offset_1 := mload(add(_3, _4))\n if gt(offset_1, _5) { revert(array, array) }\n mstore(add(memPtr, _2), abi_decode_t_bytes_fromMemory(add(add(_3, offset_1), _2), end))\n mstore(dst, memPtr)\n dst := add(dst, _2)\n src := add(src, _2)\n }\n array := dst_1\n }\n function abi_decode_t_array$_t_struct$_Order_$dyn_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := mload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n let _3 := add(offset, mload(src))\n let _4 := 0x01a0\n if slt(add(sub(end, _3), not(31)), _4) { revert(array, array) }\n let value := allocateMemory(_4)\n mstore(value, mload(add(_3, _2)))\n mstore(add(value, _2), abi_decode_t_address_fromMemory(add(_3, 64)))\n mstore(add(value, 64), mload(add(_3, 96)))\n mstore(add(value, 96), mload(add(_3, 128)))\n mstore(add(value, 128), mload(add(_3, 160)))\n mstore(add(value, 160), mload(add(_3, 192)))\n mstore(add(value, 192), abi_decode_t_address_fromMemory(add(_3, 224)))\n let _5 := 256\n let offset_1 := mload(add(_3, _5))\n let _6 := 0xffffffffffffffff\n if gt(offset_1, _6) { revert(array, array) }\n mstore(add(value, 224), abi_decode_t_bytes_fromMemory(add(add(_3, offset_1), _2), end))\n let offset_2 := mload(add(_3, 288))\n if gt(offset_2, _6) { revert(array, array) }\n mstore(add(value, _5), abi_decode_t_array$_t_struct$_OrderItem_$dyn_fromMemory(add(add(_3, offset_2), _2), end))\n let _7 := 320\n mstore(add(value, 288), mload(add(_3, _7)))\n let _8 := 352\n mstore(add(value, _7), mload(add(_3, _8)))\n let _9 := 384\n mstore(add(value, _8), abi_decode_t_uint8_fromMemory(add(_3, _9)))\n mstore(add(value, _9), abi_decode_t_uint8_fromMemory(add(_3, _4)))\n mstore(dst, value)\n dst := add(dst, _2)\n src := add(src, _2)\n }\n array := dst_1\n }\n function abi_decode_t_array$_t_struct$_SettleDetail_$dyn_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := mload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n let _3 := add(offset, mload(src))\n let _4 := 0x0160\n if slt(add(sub(end, _3), not(31)), _4) { revert(array, array) }\n let value := allocateMemory(_4)\n mstore(value, abi_decode_t_enum$_Op_fromMemory(add(_3, _2)))\n let _5 := 64\n mstore(add(value, _2), mload(add(_3, _5)))\n let _6 := 96\n mstore(add(value, _5), mload(add(_3, _6)))\n let _7 := 128\n mstore(add(value, _6), mload(add(_3, _7)))\n let _8 := 160\n mstore(add(value, _7), mload(add(_3, _8)))\n mstore(add(value, _8), abi_decode_t_address_fromMemory(add(_3, 192)))\n let _9 := 224\n let offset_1 := mload(add(_3, _9))\n let _10 := 0xffffffffffffffff\n if gt(offset_1, _10) { revert(array, array) }\n mstore(add(value, 192), abi_decode_t_bytes_fromMemory(add(add(_3, offset_1), _2), end))\n let _11 := 256\n mstore(add(value, _9), mload(add(_3, _11)))\n let _12 := 288\n mstore(add(value, _11), mload(add(_3, _12)))\n let _13 := 320\n mstore(add(value, _12), mload(add(_3, _13)))\n let offset_2 := mload(add(_3, _4))\n if gt(offset_2, _10) { revert(array, array) }\n mstore(add(value, _13), abi_decode_t_array$_t_struct$_Fee_$dyn_fromMemory(add(add(_3, offset_2), _2), end))\n mstore(dst, value)\n dst := add(dst, _2)\n src := add(src, _2)\n }\n array := dst_1\n }\n function abi_decode_t_array$_t_uint256_$dyn(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := calldataload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n if gt(add(add(offset, mul(_1, _2)), _2), end) { revert(array, array) }\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n mstore(dst, calldataload(src))\n dst := add(dst, _2)\n src := add(src, _2)\n }\n array := dst_1\n }\n function abi_decode_t_bool(offset) -> value\n {\n value := calldataload(offset)\n validator_revert_t_bool(value)\n }\n function abi_decode_t_bool_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_t_bool(value)\n }\n function abi_decode_t_bytes4_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_t_bytes4(value)\n }\n function abi_decode_t_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := calldataload(offset)\n let array_1 := allocateMemory(array_allocation_size_t_bytes(_1))\n mstore(array_1, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n mstore(add(add(array_1, _1), 0x20), array)\n array := array_1\n }\n function abi_decode_t_bytes_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := mload(offset)\n let array_1 := allocateMemory(array_allocation_size_t_bytes(_1))\n mstore(array_1, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n copy_memory_to_memory(add(offset, 0x20), add(array_1, 0x20), _1)\n array := array_1\n }\n function abi_decode_t_enum$_Markets(offset) -> value\n {\n value := calldataload(offset)\n if iszero(lt(value, 11)) { revert(0, 0) }\n }\n function abi_decode_t_enum$_Op_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(lt(value, 8)) { revert(0, 0) }\n }\n function abi_decode_t_enum$_Side_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(lt(value, 2)) { revert(0, 0) }\n }\n function abi_decode_t_struct$_Input_fromMemory(headStart, end) -> value\n {\n if slt(sub(end, headStart), 0xe0) { revert(value, value) }\n value := allocateMemory(0xe0)\n let offset := mload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n mstore(value, abi_decode_t_struct$_Order_fromMemory(add(headStart, offset), end))\n mstore(add(value, 32), abi_decode_t_uint8_fromMemory(add(headStart, 32)))\n mstore(add(value, 64), mload(add(headStart, 64)))\n mstore(add(value, 96), mload(add(headStart, 96)))\n let offset_1 := mload(add(headStart, 128))\n if gt(offset_1, _1) { revert(0, 0) }\n mstore(add(value, 128), abi_decode_t_bytes_fromMemory(add(headStart, offset_1), end))\n mstore(add(value, 160), abi_decode_t_enum$_Side_fromMemory(add(headStart, 160)))\n mstore(add(value, 192), mload(add(headStart, 192)))\n }\n function abi_decode_t_struct$_MakerOrder_fromMemory(headStart, end) -> value\n {\n let _1 := 0x0200\n if slt(sub(end, headStart), _1) { revert(value, value) }\n value := allocateMemory(_1)\n mstore(value, abi_decode_t_bool_fromMemory(headStart))\n mstore(add(value, 32), abi_decode_t_address_fromMemory(add(headStart, 32)))\n mstore(add(value, 64), abi_decode_t_address_fromMemory(add(headStart, 64)))\n mstore(add(value, 96), mload(add(headStart, 96)))\n mstore(add(value, 128), mload(add(headStart, 128)))\n mstore(add(value, 160), mload(add(headStart, 160)))\n mstore(add(value, 192), abi_decode_t_address_fromMemory(add(headStart, 192)))\n mstore(add(value, 224), abi_decode_t_address_fromMemory(add(headStart, 224)))\n let _2 := 256\n mstore(add(value, _2), mload(add(headStart, _2)))\n let _3 := 288\n mstore(add(value, _3), mload(add(headStart, _3)))\n let _4 := 320\n mstore(add(value, _4), mload(add(headStart, _4)))\n let _5 := 352\n mstore(add(value, _5), mload(add(headStart, _5)))\n let _6 := 384\n let offset := mload(add(headStart, _6))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n mstore(add(value, _6), abi_decode_t_bytes_fromMemory(add(headStart, offset), end))\n let _7 := 416\n mstore(add(value, _7), abi_decode_t_uint8_fromMemory(add(headStart, _7)))\n let _8 := 448\n mstore(add(value, _8), mload(add(headStart, _8)))\n let _9 := 480\n mstore(add(value, _9), mload(add(headStart, _9)))\n }\n function abi_decode_t_struct$_Order_fromMemory(headStart, end) -> value\n {\n let _1 := 0x01a0\n if slt(sub(end, headStart), _1) { revert(value, value) }\n value := allocateMemory(_1)\n mstore(value, abi_decode_t_address_fromMemory(headStart))\n mstore(add(value, 32), abi_decode_t_enum$_Side_fromMemory(add(headStart, 32)))\n mstore(add(value, 64), abi_decode_t_address_fromMemory(add(headStart, 64)))\n mstore(add(value, 96), abi_decode_t_address_fromMemory(add(headStart, 96)))\n mstore(add(value, 128), mload(add(headStart, 128)))\n mstore(add(value, 160), mload(add(headStart, 160)))\n mstore(add(value, 192), abi_decode_t_address_fromMemory(add(headStart, 192)))\n mstore(add(value, 224), mload(add(headStart, 224)))\n let _2 := 256\n mstore(add(value, _2), mload(add(headStart, _2)))\n let _3 := 288\n mstore(add(value, _3), mload(add(headStart, _3)))\n let _4 := 320\n let offset := mload(add(headStart, _4))\n let _5 := 0xffffffffffffffff\n if gt(offset, _5) { revert(0, 0) }\n mstore(add(value, _4), abi_decode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr_fromMemory(add(headStart, offset), end))\n let _6 := 352\n mstore(add(value, _6), mload(add(headStart, _6)))\n let _7 := 384\n let offset_1 := mload(add(headStart, _7))\n if gt(offset_1, _5) { revert(0, 0) }\n mstore(add(value, _7), abi_decode_t_bytes_fromMemory(add(headStart, offset_1), end))\n }\n function abi_decode_t_struct$_PurchaseDetails(headStart, end) -> value\n {\n if slt(sub(end, headStart), 0x80) { revert(value, value) }\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, 0x80)\n let _1 := 0xffffffffffffffff\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { invalid() }\n mstore(64, newFreePtr)\n value := memPtr\n mstore(memPtr, abi_decode_t_enum$_Markets(headStart))\n mstore(add(memPtr, 32), calldataload(add(headStart, 32)))\n mstore(add(memPtr, 64), calldataload(add(headStart, 64)))\n let offset := calldataload(add(headStart, 96))\n if gt(offset, _1) { revert(0, 0) }\n mstore(add(memPtr, 96), abi_decode_t_bytes(add(headStart, offset), end))\n }\n function abi_decode_t_struct$_SettleShared_fromMemory(headStart, end) -> value\n {\n if slt(sub(end, headStart), 0xc0) { revert(value, value) }\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, 0xc0)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n mstore(64, newFreePtr)\n value := memPtr\n mstore(memPtr, mload(headStart))\n mstore(add(memPtr, 32), mload(add(headStart, 32)))\n mstore(add(memPtr, 64), mload(add(headStart, 64)))\n mstore(add(memPtr, 96), mload(add(headStart, 96)))\n let value_1 := mload(add(headStart, 128))\n validator_revert_t_address(value_1)\n mstore(add(memPtr, 128), value_1)\n let value_2 := mload(add(headStart, 160))\n validator_revert_t_bool(value_2)\n mstore(add(memPtr, 160), value_2)\n }\n function abi_decode_t_uint8_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n }\n function abi_decode_tuple_t_addresst_addresst_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(value4, value4) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_t_address(value_1)\n value1 := value_1\n let offset := calldataload(add(headStart, 64))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value4, value4) }\n value2 := abi_decode_t_array$_t_uint256_$dyn(add(headStart, offset), dataEnd)\n let offset_1 := calldataload(add(headStart, 96))\n if gt(offset_1, _1) { revert(value4, value4) }\n value3 := abi_decode_t_array$_t_uint256_$dyn(add(headStart, offset_1), dataEnd)\n let offset_2 := calldataload(add(headStart, 128))\n if gt(offset_2, _1) { revert(value4, value4) }\n value4 := abi_decode_t_bytes(add(headStart, offset_2), dataEnd)\n }\n function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_t_address(value_1)\n value1 := value_1\n value2 := calldataload(add(headStart, 64))\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert(value3, value3) }\n value3 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n }\n function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(value2, value2) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_t_address(value_1)\n value1 := value_1\n value2 := calldataload(add(headStart, 64))\n value3 := calldataload(add(headStart, 96))\n let offset := calldataload(add(headStart, 128))\n if gt(offset, 0xffffffffffffffff) { revert(value4, value4) }\n value4 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n }\n function abi_decode_tuple_t_array$_t_address_$11_memory_ptrt_addresst_array$_t_address_$dyn_memory_ptrt_address(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 448) { revert(value2, value2) }\n if iszero(slt(add(headStart, 0x1f), dataEnd)) { revert(value2, value2) }\n let _1 := 352\n let dst := allocateMemory(_1)\n let dst_1 := dst\n let src := headStart\n let _2 := add(headStart, _1)\n if gt(_2, dataEnd) { revert(value2, value2) }\n let i := value2\n for { } lt(i, 0x0b) { i := add(i, 1) }\n {\n let value := calldataload(src)\n validator_revert_t_address(value)\n mstore(dst, value)\n let _3 := 0x20\n dst := add(dst, _3)\n src := add(src, _3)\n }\n value0 := dst_1\n value1 := abi_decode_t_address(_2)\n let offset := calldataload(add(headStart, 384))\n if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n value2 := abi_decode_t_array$_t_address_$dyn(add(headStart, offset), dataEnd)\n value3 := abi_decode_t_address(add(headStart, 416))\n }\n function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value0, value0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value0, value0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(value0, value0) }\n if gt(add(add(_2, mul(length, 32)), 32), dataEnd) { revert(value0, value0) }\n value0 := add(_2, 32)\n value1 := length\n }\n function abi_decode_tuple_t_array$_t_struct$_Pair1155_$10640_memory_ptr_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := 32\n if slt(sub(dataEnd, headStart), _1) { revert(value0, value0) }\n let offset := mload(headStart)\n let _2 := 0xffffffffffffffff\n if gt(offset, _2) { revert(value0, value0) }\n let _3 := add(headStart, offset)\n if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(value0, value0) }\n let _4 := mload(_3)\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_4))\n let dst_1 := dst\n mstore(dst, _4)\n dst := add(dst, _1)\n let src := add(_3, _1)\n let _5 := 0x60\n if gt(add(add(_3, mul(_4, _5)), _1), dataEnd) { revert(value0, value0) }\n let i := value0\n for { } lt(i, _4) { i := add(i, 1) }\n {\n if slt(sub(dataEnd, src), _5) { revert(value0, value0) }\n let _6 := 64\n let memPtr := mload(_6)\n let newFreePtr := add(memPtr, _5)\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { invalid() }\n mstore(_6, newFreePtr)\n let value := mload(src)\n validator_revert_t_address(value)\n mstore(memPtr, value)\n mstore(add(memPtr, _1), mload(add(src, _1)))\n mstore(add(memPtr, _6), mload(add(src, _6)))\n mstore(dst, memPtr)\n dst := add(dst, _1)\n src := add(src, _5)\n }\n value0 := dst_1\n }\n function abi_decode_tuple_t_array$_t_struct$_Pair721_$10633_memory_ptr_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := 32\n if slt(sub(dataEnd, headStart), _1) { revert(value0, value0) }\n let offset := mload(headStart)\n let _2 := 0xffffffffffffffff\n if gt(offset, _2) { revert(value0, value0) }\n let _3 := add(headStart, offset)\n if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(value0, value0) }\n let _4 := mload(_3)\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_4))\n let dst_1 := dst\n mstore(dst, _4)\n dst := add(dst, _1)\n let src := add(_3, _1)\n let _5 := 0x40\n if gt(add(add(_3, mul(_4, _5)), _1), dataEnd) { revert(value0, value0) }\n let i := value0\n for { } lt(i, _4) { i := add(i, 1) }\n {\n if slt(sub(dataEnd, src), _5) { revert(value0, value0) }\n let memPtr := mload(_5)\n let newFreePtr := add(memPtr, _5)\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { invalid() }\n mstore(_5, newFreePtr)\n let value := mload(src)\n validator_revert_t_address(value)\n mstore(memPtr, value)\n mstore(add(memPtr, _1), mload(add(src, _1)))\n mstore(dst, memPtr)\n dst := add(dst, _1)\n src := add(src, _5)\n }\n value0 := dst_1\n }\n function abi_decode_tuple_t_array$_t_struct$_PurchaseDetails_$8061_memory_ptr_$dyn_memory_ptrt_addresst_addresst_bool(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(value2, value2) }\n let _2 := calldataload(_1)\n let _3 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_2))\n let dst_1 := dst\n mstore(dst, _2)\n dst := add(dst, _3)\n let src := add(_1, _3)\n let i := value2\n for { } lt(i, _2) { i := add(i, 1) }\n {\n mstore(dst, abi_decode_t_struct$_PurchaseDetails(add(add(_1, calldataload(src)), _3), dataEnd))\n dst := add(dst, _3)\n src := add(src, _3)\n }\n value0 := dst_1\n value1 := abi_decode_t_address(add(headStart, _3))\n value2 := abi_decode_t_address(add(headStart, 64))\n value3 := abi_decode_t_bool(add(headStart, 96))\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let value := mload(headStart)\n validator_revert_t_bool(value)\n value0 := value\n }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let value := calldataload(headStart)\n validator_revert_t_bytes4(value)\n value0 := value\n }\n function abi_decode_tuple_t_enum$_Markets_$8046t_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n value0 := abi_decode_t_enum$_Markets(headStart)\n let value := calldataload(add(headStart, 32))\n validator_revert_t_address(value)\n value1 := value\n }\n function abi_decode_tuple_t_struct$_AdditionalData_$8067_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := 32\n if slt(sub(dataEnd, headStart), _1) { revert(value0, value0) }\n let offset := mload(headStart)\n let _2 := 0xffffffffffffffff\n if gt(offset, _2) { revert(value0, value0) }\n let _3 := add(headStart, offset)\n if slt(sub(dataEnd, _3), 0x40) { revert(value0, value0) }\n let memPtr := mload(0x40)\n let newFreePtr := add(memPtr, 0x40)\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { invalid() }\n mstore(0x40, newFreePtr)\n let offset_1 := mload(_3)\n if gt(offset_1, _2) { revert(value0, value0) }\n mstore(memPtr, abi_decode_t_bytes_fromMemory(add(_3, offset_1), dataEnd))\n let offset_2 := mload(add(_3, _1))\n if gt(offset_2, _2) { revert(value0, value0) }\n let _4 := add(_3, offset_2)\n if iszero(slt(add(_4, 0x1f), dataEnd)) { revert(value0, value0) }\n let _5 := mload(_4)\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_5))\n let dst_1 := dst\n mstore(dst, _5)\n dst := add(dst, _1)\n let src := add(_4, _1)\n if gt(add(add(_4, mul(_5, _1)), _1), dataEnd) { revert(value0, value0) }\n let i := value0\n for { } lt(i, _5) { i := add(i, 1) }\n {\n mstore(dst, mload(src))\n dst := add(dst, _1)\n src := add(src, _1)\n }\n mstore(add(memPtr, _1), dst_1)\n value0 := memPtr\n }\n function abi_decode_tuple_t_struct$_Input_$10442_memory_ptrt_struct$_Input_$10442_memory_ptrt_bytes4_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n let offset := mload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value2, value2) }\n value0 := abi_decode_t_struct$_Input_fromMemory(add(headStart, offset), dataEnd)\n let offset_1 := mload(add(headStart, 32))\n if gt(offset_1, _1) { revert(value2, value2) }\n value1 := abi_decode_t_struct$_Input_fromMemory(add(headStart, offset_1), dataEnd)\n let value := mload(add(headStart, 64))\n validator_revert_t_bytes4(value)\n value2 := value\n }\n function abi_decode_tuple_t_struct$_PurchaseDetails_$8061_memory_ptrt_addresst_address(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n value0 := abi_decode_t_struct$_PurchaseDetails(add(headStart, offset), dataEnd)\n let value := calldataload(add(headStart, 32))\n validator_revert_t_address(value)\n value1 := value\n let value_1 := calldataload(add(headStart, 64))\n validator_revert_t_address(value_1)\n value2 := value_1\n }\n function abi_decode_tuple_t_struct$_RunInput_$10725_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := mload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value0, value0) }\n let _2 := add(headStart, offset)\n if slt(sub(dataEnd, _2), 0x0160) { revert(value0, value0) }\n let value := allocateMemory(0xc0)\n let offset_1 := mload(_2)\n if gt(offset_1, _1) { revert(value0, value0) }\n mstore(value, abi_decode_t_array$_t_struct$_Order_$dyn_fromMemory(add(_2, offset_1), dataEnd))\n let offset_2 := mload(add(_2, 32))\n if gt(offset_2, _1) { revert(value0, value0) }\n mstore(add(value, 32), abi_decode_t_array$_t_struct$_SettleDetail_$dyn_fromMemory(add(_2, offset_2), dataEnd))\n mstore(add(value, 64), abi_decode_t_struct$_SettleShared_fromMemory(add(_2, 64), dataEnd))\n mstore(add(value, 0x60), mload(add(_2, 256)))\n mstore(add(value, 0x80), mload(add(_2, 288)))\n mstore(add(value, 0xa0), abi_decode_t_uint8_fromMemory(add(_2, 320)))\n value0 := value\n }\n function abi_decode_tuple_t_struct$_TakerOrder_$10789_memory_ptrt_struct$_MakerOrder_$10776_memory_ptrt_bytes4_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n let offset := mload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value2, value2) }\n let _2 := add(headStart, offset)\n if slt(sub(dataEnd, _2), 0xc0) { revert(value2, value2) }\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, 0xc0)\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { invalid() }\n mstore(64, newFreePtr)\n mstore(memPtr, abi_decode_t_bool_fromMemory(_2))\n mstore(add(memPtr, 32), abi_decode_t_address_fromMemory(add(_2, 32)))\n mstore(add(memPtr, 64), mload(add(_2, 64)))\n mstore(add(memPtr, 96), mload(add(_2, 96)))\n mstore(add(memPtr, 128), mload(add(_2, 128)))\n let offset_1 := mload(add(_2, 160))\n if gt(offset_1, _1) { revert(value2, value2) }\n mstore(add(memPtr, 160), abi_decode_t_bytes_fromMemory(add(_2, offset_1), dataEnd))\n value0 := memPtr\n let offset_2 := mload(add(headStart, 32))\n if gt(offset_2, _1) { revert(value2, value2) }\n value1 := abi_decode_t_struct$_MakerOrder_fromMemory(add(headStart, offset_2), dataEnd)\n value2 := abi_decode_t_bytes4_fromMemory(add(headStart, 64))\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n value0 := mload(headStart)\n }\n function abi_encode_t_address_payable(value, pos)\n {\n mstore(pos, and(value, sub(shl(160, 1), 1)))\n }\n function abi_encode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let srcPtr := add(value, _1)\n let i := end\n for { } lt(i, length) { i := add(i, 1) }\n {\n let _2 := mload(srcPtr)\n mstore(pos, and(mload(_2), 0xffff))\n mstore(add(pos, _1), and(mload(add(_2, _1)), sub(shl(160, 1), 1)))\n pos := add(pos, 0x40)\n srcPtr := add(srcPtr, _1)\n }\n end := pos\n }\n function abi_encode_t_array$_t_struct$_Fee_$dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let srcPtr := add(value, _1)\n let i := end\n for { } lt(i, length) { i := add(i, 1) }\n {\n let _2 := mload(srcPtr)\n mstore(pos, mload(_2))\n mstore(add(pos, _1), and(mload(add(_2, _1)), sub(shl(160, 1), 1)))\n pos := add(pos, 0x40)\n srcPtr := add(srcPtr, _1)\n }\n end := pos\n }\n function abi_encode_t_array$_t_struct$_OrderItem_$dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n let updated_pos := add(pos, _1)\n let pos_1 := updated_pos\n pos := updated_pos\n let tail := add(pos_1, mul(length, _1))\n let srcPtr := add(value, _1)\n let i := end\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, sub(tail, pos_1))\n let _2 := mload(srcPtr)\n let _3 := 0x40\n mstore(tail, mload(_2))\n let memberValue0 := mload(add(_2, _1))\n mstore(add(tail, _1), _3)\n tail := abi_encode_t_bytes(memberValue0, add(tail, _3))\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n end := tail\n }\n function abi_encode_t_array$_t_struct$_SettleDetail_$dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let pos_1 := pos\n let tail := add(pos, mul(length, _1))\n let srcPtr := add(value, _1)\n let i := end\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, sub(tail, pos_1))\n let _2 := mload(srcPtr)\n let _3 := 0x0160\n abi_encode_t_enum$_Op(mload(_2), tail)\n mstore(add(tail, _1), mload(add(_2, _1)))\n let _4 := 0x40\n mstore(add(tail, _4), mload(add(_2, _4)))\n let _5 := 0x60\n mstore(add(tail, _5), mload(add(_2, _5)))\n let _6 := 0x80\n mstore(add(tail, _6), mload(add(_2, _6)))\n let _7 := 0xa0\n let memberValue0 := mload(add(_2, _7))\n abi_encode_t_address_payable(memberValue0, add(tail, _7))\n let _8 := 0xc0\n let memberValue0_1 := mload(add(_2, _8))\n mstore(add(tail, _8), _3)\n let tail_1 := abi_encode_t_bytes(memberValue0_1, add(tail, _3))\n let _9 := 0xe0\n mstore(add(tail, _9), mload(add(_2, _9)))\n let _10 := 0x0100\n mstore(add(tail, _10), mload(add(_2, _10)))\n let _11 := 0x0120\n mstore(add(tail, _11), mload(add(_2, _11)))\n let _12 := 0x0140\n let memberValue0_2 := mload(add(_2, _12))\n mstore(add(tail, _12), sub(tail_1, tail))\n tail := abi_encode_t_array$_t_struct$_Fee_$dyn(memberValue0_2, tail_1)\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n end := tail\n }\n function abi_encode_t_bool(value, pos)\n {\n mstore(pos, iszero(iszero(value)))\n }\n function abi_encode_t_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_t_enum$_Op(value, pos)\n {\n if iszero(lt(value, 8)) { invalid() }\n mstore(pos, value)\n }\n function abi_encode_t_enum$_Side(value, pos)\n {\n if iszero(lt(value, 2)) { invalid() }\n mstore(pos, value)\n }\n function abi_encode_t_struct$_Input(value, pos) -> end\n {\n let memberValue0 := mload(value)\n mstore(pos, 0xe0)\n abi_encode_t_address_payable(mload(memberValue0), add(pos, 0xe0))\n let memberValue0_1 := mload(add(memberValue0, 0x20))\n let _1 := 256\n abi_encode_t_enum$_Side(memberValue0_1, add(pos, _1))\n let memberValue0_2 := mload(add(memberValue0, 0x40))\n let _2 := 288\n abi_encode_t_address_payable(memberValue0_2, add(pos, _2))\n let memberValue0_3 := mload(add(memberValue0, 0x60))\n let _3 := 320\n abi_encode_t_address_payable(memberValue0_3, add(pos, _3))\n let _4 := mload(add(memberValue0, 0x80))\n let _5 := 352\n mstore(add(pos, _5), _4)\n let _6 := mload(add(memberValue0, 0xa0))\n let _7 := 384\n mstore(add(pos, _7), _6)\n let memberValue0_4 := mload(add(memberValue0, 0xc0))\n let _8 := 0x01a0\n abi_encode_t_address_payable(memberValue0_4, add(pos, _8))\n mstore(add(pos, 448), mload(add(memberValue0, 0xe0)))\n mstore(add(pos, 480), mload(add(memberValue0, _1)))\n mstore(add(pos, 512), mload(add(memberValue0, _2)))\n let memberValue0_5 := mload(add(memberValue0, _3))\n mstore(add(pos, 544), _8)\n let tail := abi_encode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr(memberValue0_5, add(pos, 640))\n mstore(add(pos, 576), mload(add(memberValue0, _5)))\n let memberValue0_6 := mload(add(memberValue0, _7))\n mstore(add(pos, 608), add(sub(tail, pos), not(223)))\n let end_1 := abi_encode_t_bytes(memberValue0_6, tail)\n let memberValue0_7 := mload(add(value, 0x20))\n abi_encode_t_uint8(memberValue0_7, add(pos, 0x20))\n mstore(add(pos, 0x40), mload(add(value, 0x40)))\n mstore(add(pos, 0x60), mload(add(value, 0x60)))\n let memberValue0_8 := mload(add(value, 0x80))\n mstore(add(pos, 0x80), sub(end_1, pos))\n let tail_1 := abi_encode_t_bytes(memberValue0_8, end_1)\n let memberValue0_9 := mload(add(value, 0xa0))\n abi_encode_t_enum$_Side(memberValue0_9, add(pos, 0xa0))\n mstore(add(pos, 0xc0), mload(add(value, 0xc0)))\n end := tail_1\n }\n function abi_encode_t_struct$_SettleShared(value, pos)\n {\n mstore(pos, mload(value))\n mstore(add(pos, 0x20), mload(add(value, 0x20)))\n mstore(add(pos, 0x40), mload(add(value, 0x40)))\n mstore(add(pos, 0x60), mload(add(value, 0x60)))\n mstore(add(pos, 0x80), and(mload(add(value, 0x80)), sub(shl(160, 1), 1)))\n mstore(add(pos, 0xa0), iszero(iszero(mload(add(value, 0xa0)))))\n }\n function abi_encode_t_uint8(value, pos)\n { mstore(pos, and(value, 0xff)) }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_address_payable__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_address_payable_t_address_payable_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_address_payable_t_address_payable_t_uint256_t_uint256_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_address_t_address_t_uint256_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), 160)\n mstore(add(headStart, 160), tail)\n tail := add(headStart, 192)\n }\n function abi_encode_tuple_t_address_payable_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, shl(224, 0xffffffff)))\n }\n function abi_encode_tuple_t_stringliteral_05a847584de3c2ae6c800d1f7b0a5d67e8bceaac16366dec690fd8433d46a23a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_4 failed WETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_1461016c88004ca93c55e893467e5e7d0c1ff55121e923be5ca0e173134693e9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_5 failed WETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_1cdf96c41f1501fb82e87942f0faf4d72a6efd57209b4dccba0c17cf2c4017c6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 30)\n mstore(add(headStart, 64), \"Purchase wyvernExchange failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_1cf39be99a03bb39414ad01e616c59ec2038a5746618a3f8aee8a485d8d5e50a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_4 failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_2b352c406e176536877560097b51d8b7a1d4ebdd84181eeb9cfae44540c1b868__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 23)\n mstore(add(headStart, 64), \"Purchase rarible failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_2ec0a2b485cd497572ad8de2f4110630fd04a79c3fc75a9aaa133bc5c098fd7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 28)\n mstore(add(headStart, 64), \"Purchase rarible failed WETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_3bc896cadc7524646943368edd2f41dfd35c78e313328c146d90408931cae185__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 20)\n mstore(add(headStart, 64), \"Unknown marketId ETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_5320b653cd5780735adae92ac3bcf0fff2a8be3d44e7d778c7caac0f6e924b5d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_6 failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_5904c3e21a28364a0c2d14d132ae0ba7e1f2dcf1f9ade73ba991a7031640606b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 26)\n mstore(add(headStart, 64), \"New address cannot be zero\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 25)\n mstore(add(headStart, 64), \"Unknown purchase currency\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_6c57fe9713182a834bdd4831295dedf89e8ff161b7041e5a8170e9b0afd4c42f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 21)\n mstore(add(headStart, 64), \"Unknown marketId WETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_74739c97d81f6776122daced63f78d93149e498efd7fbf2084eabb7018fcdc3b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_1 failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_7d4fa3070cdac7b556bda72a8ba21317d4366b909fe8ae7528922ba67829f31c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_6 failed WETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_83f62501a9582b49b15f73bfa16e8789fc9181acb73eb6b2a01520c5a8cee0ce__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_5 failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_9d7bf9b147b8e8ea1a011a4553d7d866e6536c248028d8dc1aeaa1b40c8d32c7__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_1 failed WETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_af8784af813955ccf5679f356dd871ef58abf3a7050c9104ea0ff5ddaa4b9287__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 24)\n mstore(add(headStart, 64), \"Purchase sudoswap failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_b9e628d538abf867b76153fc9fbf92e2395d1f1d03fe95fb0b6ee129f4f808af__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 25)\n mstore(add(headStart, 64), \"unknown delegateType x2y2\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_bf725f533a31a5fc822de78c3f59575168899683c9fc9b37f7d7aa10c766d3c1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Purchase LooksRareV2 failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 18)\n mstore(add(headStart, 64), \"Unknown token type\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_e89eb59adf40d46cfd63ce8f1b9b12cb445413877fb23a6846b8ace3266a633d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 26)\n mstore(add(headStart, 64), \"unknown additionalDataType\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_ec72e63c53a628868607248de6752f6e953ad035609908ced114156f1eeff564__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 24)\n mstore(add(headStart, 64), \"no successful executions\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_febc375c51703703674424cdadfabf329e51db90f4495b4c56145c8182019182__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 24)\n mstore(add(headStart, 64), \"Invalid marketplace type\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_struct$_Input_$10442_memory_ptr_t_struct$_Input_$10442_memory_ptr__to_t_struct$_Input_$10442_memory_ptr_t_struct$_Input_$10442_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 64)\n let tail_1 := abi_encode_t_struct$_Input(value0, add(headStart, 64))\n mstore(add(headStart, 32), sub(tail_1, headStart))\n tail := abi_encode_t_struct$_Input(value1, tail_1)\n }\n function abi_encode_tuple_t_struct$_RunInput_$10725_memory_ptr__to_t_struct$_RunInput_$10725_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n mstore(headStart, _1)\n let _2 := 384\n let tail_1 := add(headStart, _2)\n let memberValue0 := mload(value0)\n let _3 := 0x0160\n mstore(add(headStart, _1), _3)\n let pos := tail_1\n let length := mload(memberValue0)\n mstore(tail_1, length)\n let _4 := 416\n pos := add(headStart, _4)\n let tail_2 := add(add(headStart, mul(length, _1)), _4)\n let srcPtr := add(memberValue0, _1)\n let i := tail\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), not(415)))\n let _5 := mload(srcPtr)\n mstore(tail_2, mload(_5))\n let memberValue0_1 := mload(add(_5, _1))\n abi_encode_t_address_payable(memberValue0_1, add(tail_2, _1))\n let _6 := 0x40\n mstore(add(tail_2, _6), mload(add(_5, _6)))\n let _7 := 0x60\n mstore(add(tail_2, _7), mload(add(_5, _7)))\n let _8 := 0x80\n mstore(add(tail_2, _8), mload(add(_5, _8)))\n let _9 := 0xa0\n mstore(add(tail_2, _9), mload(add(_5, _9)))\n let _10 := 0xc0\n let memberValue0_2 := mload(add(_5, _10))\n abi_encode_t_address_payable(memberValue0_2, add(tail_2, _10))\n let _11 := 0xe0\n let memberValue0_3 := mload(add(_5, _11))\n mstore(add(tail_2, _11), _4)\n let tail_3 := abi_encode_t_bytes(memberValue0_3, add(tail_2, _4))\n let _12 := 0x0100\n let memberValue0_4 := mload(add(_5, _12))\n mstore(add(tail_2, _12), sub(tail_3, tail_2))\n let tail_4 := abi_encode_t_array$_t_struct$_OrderItem_$dyn(memberValue0_4, tail_3)\n let _13 := 0x0120\n mstore(add(tail_2, _13), mload(add(_5, _13)))\n let _14 := 0x0140\n mstore(add(tail_2, _14), mload(add(_5, _14)))\n let memberValue0_5 := mload(add(_5, _3))\n abi_encode_t_uint8(memberValue0_5, add(tail_2, _3))\n let memberValue0_6 := mload(add(_5, _2))\n abi_encode_t_uint8(memberValue0_6, add(tail_2, _2))\n tail_2 := tail_4\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n let memberValue0_7 := mload(add(value0, _1))\n mstore(add(headStart, 0x40), add(sub(tail_2, headStart), not(31)))\n let tail_5 := abi_encode_t_array$_t_struct$_SettleDetail_$dyn(memberValue0_7, tail_2)\n let memberValue0_8 := mload(add(value0, 0x40))\n abi_encode_t_struct$_SettleShared(memberValue0_8, add(headStart, 0x60))\n mstore(add(headStart, 0x0120), mload(add(value0, 0x60)))\n mstore(add(headStart, 0x0140), mload(add(value0, 0x80)))\n let memberValue0_9 := mload(add(value0, 0xa0))\n abi_encode_t_uint8(memberValue0_9, add(headStart, _3))\n tail := tail_5\n }\n function abi_encode_tuple_t_struct$_TakerOrder_$10789_memory_ptr_t_struct$_MakerOrder_$10776_memory_ptr__to_t_struct$_TakerOrder_$10789_memory_ptr_t_struct$_MakerOrder_$10776_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 64)\n let _1 := 256\n mstore(add(headStart, 64), iszero(iszero(mload(value0))))\n mstore(add(headStart, 96), and(mload(add(value0, 0x20)), sub(shl(160, 1), 1)))\n mstore(add(headStart, 128), mload(add(value0, 64)))\n mstore(add(headStart, 160), mload(add(value0, 96)))\n mstore(add(headStart, 0xc0), mload(add(value0, 128)))\n let memberValue0 := mload(add(value0, 160))\n mstore(add(headStart, 224), 0xc0)\n let end := abi_encode_t_bytes(memberValue0, add(headStart, _1))\n mstore(add(headStart, 0x20), sub(end, headStart))\n let _2 := 0x0200\n abi_encode_t_bool(mload(value1), end)\n let memberValue0_1 := mload(add(value1, 0x20))\n abi_encode_t_address_payable(memberValue0_1, add(end, 0x20))\n let memberValue0_2 := mload(add(value1, 64))\n abi_encode_t_address_payable(memberValue0_2, add(end, 64))\n mstore(add(end, 96), mload(add(value1, 96)))\n mstore(add(end, 128), mload(add(value1, 128)))\n mstore(add(end, 160), mload(add(value1, 160)))\n let memberValue0_3 := mload(add(value1, 0xc0))\n abi_encode_t_address_payable(memberValue0_3, add(end, 0xc0))\n let memberValue0_4 := mload(add(value1, 224))\n abi_encode_t_address_payable(memberValue0_4, add(end, 224))\n mstore(add(end, _1), mload(add(value1, _1)))\n let _3 := 0x0120\n mstore(add(end, _3), mload(add(value1, _3)))\n let _4 := 0x0140\n mstore(add(end, _4), mload(add(value1, _4)))\n let _5 := 0x0160\n mstore(add(end, _5), mload(add(value1, _5)))\n let _6 := 0x0180\n let memberValue0_5 := mload(add(value1, _6))\n mstore(add(end, _6), _2)\n let tail_1 := abi_encode_t_bytes(memberValue0_5, add(end, _2))\n let _7 := 0x01a0\n let memberValue0_6 := mload(add(value1, _7))\n abi_encode_t_uint8(memberValue0_6, add(end, _7))\n let _8 := 0x01c0\n mstore(add(end, _8), mload(add(value1, _8)))\n let _9 := 0x01e0\n mstore(add(end, _9), mload(add(value1, _9)))\n tail := tail_1\n }\n function allocateMemory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, size)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_t_array$_t_address_$dyn(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { invalid() }\n size := add(mul(length, 0x20), 0x20)\n }\n function array_allocation_size_t_bytes(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { invalid() }\n size := add(and(add(length, 0x1f), not(31)), 0x20)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function validator_revert_t_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function validator_revert_t_bool(value)\n {\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n }\n function validator_revert_t_bytes4(value)\n {\n if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n }\n}", + "id": 67, + "language": "Yul", + "name": "#utility.yul" + } + ], + "sourceMap": "1427:28850:58:-:0;;;;;;;;;;;;;;;;;;;", + "deployedSourceMap": "1427:28850:58:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1782:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1176:148:2;;;;;;;;;;-1:-1:-1;1176:148:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;806:162:11:-;;;;;;;;;;-1:-1:-1;806:162:11;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1987:26:58:-;;;;;;;;;;;;;:::i;1930:::-;;;;;;;;;;;;;:::i;2070:19::-;;;;;;;;;;;;;:::i;1305:84:16:-;;;;;;;;;;;;;:::i;28946:1262:58:-;;;;;;;;;;-1:-1:-1;28946:1262:58;;;;;:::i;:::-;;:::i;:::-;;1869:23;;;;;;;;;;;;;:::i;1967:145:0:-;;;;;;;;;;;;;:::i;4223:1026:58:-;;;;;;;;;;-1:-1:-1;4223:1026:58;;;;;:::i;:::-;;:::i;5555:1479::-;;;;;;:::i;:::-;;:::i;28531:234::-;;;;;;;;;;-1:-1:-1;28531:234:58;;;;;:::i;:::-;;:::i;1335:85:0:-;;;;;;;;;;;;;:::i;1839:24:58:-;;;;;;;;;;;;;:::i;1751:25::-;;;;;;;;;;;;;:::i;7494:2387::-;;;;;;:::i;:::-;;:::i;716:201:6:-;;;;;;;;;;-1:-1:-1;716:201:6;;;;;:::i;:::-;;:::i;1898:26:58:-;;;;;;;;;;;;;:::i;1716:29::-;;;;;;;;;;;;;:::i;1962:19::-;;;;;;;;;;;;;:::i;537:173:6:-;;;;;;;;;;-1:-1:-1;537:173:6;;;;;:::i;:::-;;:::i;2261:240:0:-;;;;;;;;;;-1:-1:-1;2261:240:0;;;;;:::i;:::-;;:::i;2019:26:58:-;;;;;;;;;;;;;:::i;1814:19::-;;;;;;;;;;;;;:::i;1782:26::-;;;-1:-1:-1;;;;;1782:26:58;;:::o;1176:148:2:-;-1:-1:-1;;;;;;1284:33:2;;1261:4;1284:33;;;:20;:33;;;;;;;;1176:148;;;;:::o;806:162:11:-;-1:-1:-1;;;806:162:11;;;;;;:::o;1987:26:58:-;;;-1:-1:-1;;;;;1987:26:58;;:::o;1930:::-;;;-1:-1:-1;;;;;1930:26:58;;:::o;2070:19::-;;;-1:-1:-1;;;;;2070:19:58;;:::o;1305:84:16:-;1375:7;;;;1305:84;:::o;28946:1262:58:-;1558:12:0;:10;:12::i;:::-;-1:-1:-1;;;;;1547:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1547:23:0;;1539:68;;;;;-1:-1:-1;;;1539:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1539:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29053:25:58;::::1;29045:64;;;;-1:-1:-1::0;;;29045:64:58::1;;;;;;;:::i;:::-;;;;;;;;;29133:22;29124:5;:31;;;;;;;;;29120:1021;;;29171:14;:28:::0;;-1:-1:-1;;;;;;29171:28:58::1;-1:-1:-1::0;;;;;29171:28:58;::::1;;::::0;;29120:1021:::1;;;29229:18;29220:5;:27;;;;;;;;;29216:925;;;29263:10;:24:::0;;-1:-1:-1;;;;;;29263:24:58::1;-1:-1:-1::0;;;;;29263:24:58;::::1;;::::0;;29216:925:::1;;;29317:19;29308:5;:28;;;;;;;;;29304:837;;;29352:11;:25:::0;;-1:-1:-1;;;;;;29352:25:58::1;-1:-1:-1::0;;;;;29352:25:58;::::1;;::::0;;29304:837:::1;;;29407:12;29398:5;:21;;;;;;;;;29394:747;;;29435:4;:18:::0;;-1:-1:-1;;;;;;29435:18:58::1;-1:-1:-1::0;;;;;29435:18:58;::::1;;::::0;;29394:747:::1;;;29483:23;29474:5;:32;;;;;;;;;29470:671;;;29522:9;:23:::0;;-1:-1:-1;;;;;;29522:23:58::1;-1:-1:-1::0;;;;;29522:23:58;::::1;;::::0;;29470:671:::1;;;29575:16;29566:5;:25;;;;;;;;;29562:579;;;29607:8;:22:::0;;-1:-1:-1;;;;;;29607:22:58::1;-1:-1:-1::0;;;;;29607:22:58;::::1;;::::0;;29562:579:::1;;;29659:19;29650:5;:28;;;;;;;;;29646:495;;;29694:11;:25:::0;;-1:-1:-1;;;;;;29694:25:58::1;-1:-1:-1::0;;;;;29694:25:58;::::1;;::::0;;29646:495:::1;;;29749:19;29740:5;:28;;;;;;;;;29736:405;;;29784:11;:25:::0;;-1:-1:-1;;;;;;29784:25:58::1;-1:-1:-1::0;;;;;29784:25:58;::::1;;::::0;;29736:405:::1;;;29839:12;29830:5;:21;;;;;;;;;29826:315;;;29867:4;:18:::0;;-1:-1:-1;;;;;;29867:18:58::1;-1:-1:-1::0;;;;;29867:18:58;::::1;;::::0;;29826:315:::1;;;29915:19;29906:5;:28;;;;;;;;;29902:239;;;29950:11;:25:::0;;-1:-1:-1;;;;;;29950:25:58::1;-1:-1:-1::0;;;;;29950:25:58;::::1;;::::0;;29902:239:::1;;;30005:19;29996:5;:28;;;;;;;;;29992:149;;;30040:11;:25:::0;;-1:-1:-1;;;;;;30040:25:58::1;-1:-1:-1::0;;;;;30040:25:58;::::1;;::::0;;29992:149:::1;;;30096:34;;-1:-1:-1::0;;;30096:34:58::1;;;;;;;:::i;29992:149::-;30189:11;-1:-1:-1::0;;;;;30156:45:58::1;30182:5;30156:45;;;;;;;;;::::0;::::1;::::0;;;::::1;28946:1262:::0;;:::o;1869:23::-;;;-1:-1:-1;;;;;1869:23:58;;:::o;1967:145:0:-;1558:12;:10;:12::i;:::-;-1:-1:-1;;;;;1547:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1547:23:0;;1539:68;;;;;-1:-1:-1;;;1539:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1539:68:0;;;;;;;;;;;;;;;2057:6:::1;::::0;2036:40:::1;::::0;2073:1:::1;::::0;-1:-1:-1;;;;;2057:6:0::1;::::0;2036:40:::1;::::0;2073:1;;2036:40:::1;2086:6;:19:::0;;-1:-1:-1;;;;;;2086:19:0::1;::::0;;1967:145::o;4223:1026:58:-;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;4435:16:58::1;:14;:16::i;:::-;4461:21;:19;:21::i;:::-;4492:22;:20;:22::i;:::-;4524:17;:15;:17::i;:::-;4569:16:::0;;4552:14:::1;:33:::0;;-1:-1:-1;;;;;;4552:33:58;;::::1;-1:-1:-1::0;;;;;4552:33:58;;::::1;;::::0;;;4569:16:::1;4608::::0;::::1;::::0;4595:10:::1;:29:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;4648:16;;::::1;::::0;4634:11:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;4681:16;;::::1;::::0;4674:4:::1;:23:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;4719:16;;::::1;::::0;4707:9:::1;:28:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;4756:16;;::::1;::::0;4745:8:::1;:27:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;4796:16;;::::1;::::0;4782:11:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;4836:16;;::::1;::::0;4822:11:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;4869:16;;::::1;::::0;4862:4:::1;:23:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;4909:16;;::::1;::::0;4895:11:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;4949:17;;::::1;::::0;4935:11:::1;:31:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;4977:4:::1;:12:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;5000:200:58::1;5024:16;:23;5020:1;:27;5000:200;;;5072:4;::::0;-1:-1:-1;;;;;5072:4:58::1;:18:::0;5068:122:::1;;5128:4;::::0;5142:19;;-1:-1:-1;;;;;5128:4:58;;::::1;::::0;5110:31:::1;::::0;5142:16;;5159:1;;5142:19;::::1;;;;;;;;;;;-1:-1:-1::0;;5110:65:58::1;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5068:122;5049:3;;5000:200;;;;5210:32;5228:13;5210:17;:32::i;:::-;1794:14:5::0;1790:66;;;1840:5;1824:21;;-1:-1:-1;;1824:21:5;;;1790:66;4223:1026:58;;;;;:::o;5555:1479::-;1619:8:16;:6;:8::i;:::-;1618:9;1610:38;;;;;-1:-1:-1;;;1610:38:16;;;;;;;;;;;;-1:-1:-1;;;1610:38:16;;;;;;;;;;;;;;;5792:24:58::1;5819:43;5846:15;5819:26;:43::i;:::-;5792:70:::0;-1:-1:-1;5930:20:58;;5926:134:::1;;5984:4;::::0;-1:-1:-1;;;;;5984:4:58::1;5966:36;6003:12;:10;:12::i;:::-;6025:4;6032:16;5966:83;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5926:134;6070:19;6092:33;6104:15;:20;;;6092:11;:33::i;:::-;6070:55:::0;-1:-1:-1;6135:12:58::1;::::0;;;6227:8:::1;:26;;;;;;;;;6223:603;;;6314:32;6323:15;6340:5;6314:8;:32::i;:::-;6269:77:::0;;-1:-1:-1;6269:77:58;-1:-1:-1;6269:77:58;-1:-1:-1;6360:49:58::1;6269:77:::0;6391:17;6360:14:::1;:49::i;:::-;6423:51;6438:15;6455:18;6423:14;:51::i;:::-;6223:603;;;6507:15;6495:8;:27;;;;;;;;;6491:335;;;6583:36;6596:15;6613:5;6583:12;:36::i;:::-;6538:81:::0;;-1:-1:-1;6538:81:58;-1:-1:-1;6538:81:58;-1:-1:-1;6633:50:58::1;6538:81:::0;6665:17;6633:15:::1;:50::i;:::-;6697:52;6713:15;6730:18;6697:15;:52::i;6491:335::-;6780:35;;-1:-1:-1::0;;;6780:35:58::1;;;;;;;:::i;6491:335::-;6841:18;6851:7;6841:18;;;;;;:::i;:::-;;;;;;;;6900:16;:14;:16::i;:::-;6961:20:::0;;6957:71:::1;;6997:20;:18;:20::i;:::-;1658:1:16;;;;;5555:1479:58::0;;;:::o;28531:234::-;1558:12:0;:10;:12::i;:::-;-1:-1:-1;;;;;1547:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1547:23:0;;1539:68;;;;;-1:-1:-1;;;1539:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1539:68:0;;;;;;;;;;;;;;;28622:9:58::1;28617:142;28637:26:::0;;::::1;28617:142;;;28702:4;::::0;-1:-1:-1;;;;;28702:4:58::1;28684:31;28716:15:::0;;28732:1;28716:18;;::::1;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28684:64:58::1;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28665:3:58::1;;28617:142;;;;28531:234:::0;;:::o;1335:85:0:-;1407:6;;-1:-1:-1;;;;;1407:6:0;1335:85;:::o;1839:24:58:-;;;-1:-1:-1;;;;;1839:24:58;;:::o;1751:25::-;;;-1:-1:-1;;;;;1751:25:58;;:::o;7494:2387::-;1619:8:16;:6;:8::i;:::-;1618:9;1610:38;;;;;-1:-1:-1;;;1610:38:16;;;;;;;;;;;;-1:-1:-1;;;1610:38:16;;;;;;;;;;;;;;;7708:23:58::1;7745:24:::0;7783::::1;7821:25:::0;7860:11:::1;7937:24:::0;7980:9:::1;7975:162;7999:15;:22;7995:1;:26;7975:162;;;8080:46;8107:15;8123:1;8107:18;;;;;;;;;;;;;;8080:26;:46::i;:::-;8061:65:::0;;::::1;::::0;8023:3:::1;;7975:162;;;-1:-1:-1::0;8204:20:58;;8200:134:::1;;8258:4;::::0;-1:-1:-1;;;;;8258:4:58::1;8240:36;8277:12;:10;:12::i;:::-;8299:4;8306:16;8240:83;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8200:134;8349:9;8344:1006;8368:15;:22;8364:1;:26;8344:1006;;;8411:19;8433:36;8445:15;8461:1;8445:18;;;;;;;;;;;;;;:23;;;8433:11;:36::i;:::-;8411:58:::0;-1:-1:-1;8483:12:58::1;::::0;;;8587:8:::1;:26;;;;;;;;;8583:679;;;8678:39;8687:15;8703:1;8687:18;;;;;;;;;;;;;;8707:9;8678:8;:39::i;:::-;8633:84:::0;;-1:-1:-1;8633:84:58;-1:-1:-1;8633:84:58;-1:-1:-1;8754:35:58::1;:15:::0;8633:84;8754:19:::1;:35::i;:::-;8736:53:::0;-1:-1:-1;8826:37:58::1;:16:::0;8847:15;8826:20:::1;:37::i;:::-;8807:56;;8583:679;;;8900:15;8888:8;:27;;;;;;;;;8884:378;;;8980:43;8993:15;9009:1;8993:18;;;;;;;;;;;;;;9013:9;8980:12;:43::i;:::-;8935:88:::0;;-1:-1:-1;8935:88:58;-1:-1:-1;8935:88:58;-1:-1:-1;9061:36:58::1;:16:::0;8935:88;9061:20:::1;:36::i;:::-;9042:55:::0;-1:-1:-1;9135:38:58::1;:17:::0;9157:15;9135:21:::1;:38::i;:::-;9115:58;;8884:378;9285:6;:17;;;;9295:7;9285:17;9276:26;;9321:18;9331:7;9321:18;;;;;;:::i;:::-;;;;;;;;8344:1006;;;;8392:3;;;;;8344:1006;;;;9368:6;9360:43;;;;-1:-1:-1::0;;;9360:43:58::1;;;;;;;:::i;:::-;9440:50;9455:15;9472:17;9440:14;:50::i;:::-;9500:52;9515:16;9533:18;9500:14;:52::i;:::-;9590;9606:16;9624:17;9590:15;:52::i;:::-;9652:54;9668:17;9687:18;9652:15;:54::i;:::-;9747:16;:14;:16::i;:::-;9808:20:::0;;9804:71:::1;;9844:20;:18;:20::i;:::-;1658:1:16;;;;;;7494:2387:58::0;;;;:::o;716:201:6:-;-1:-1:-1;;;716:201:6;;;;;;;:::o;1898:26:58:-;;;-1:-1:-1;;;;;1898:26:58;;:::o;1716:29::-;;;-1:-1:-1;;;;;1716:29:58;;:::o;1962:19::-;;;-1:-1:-1;;;;;1962:19:58;;:::o;537:173:6:-;-1:-1:-1;;;537:173:6;;;;;;;:::o;2261:240:0:-;1558:12;:10;:12::i;:::-;-1:-1:-1;;;;;1547:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1547:23:0;;1539:68;;;;;-1:-1:-1;;;1539:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1539:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;2349:22:0;::::1;2341:73;;;;-1:-1:-1::0;;;2341:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2450:6;::::0;2429:38:::1;::::0;-1:-1:-1;;;;;2429:38:0;;::::1;::::0;2450:6:::1;::::0;2429:38:::1;::::0;2450:6:::1;::::0;2429:38:::1;2477:6;:17:::0;;-1:-1:-1;;;;;;2477:17:0::1;-1:-1:-1::0;;;;;2477:17:0;;;::::1;::::0;;;::::1;::::0;;2261:240::o;2019:26:58:-;;;-1:-1:-1;;;;;2019:26:58;;:::o;1814:19::-;;;-1:-1:-1;;;;;1814:19:58;;:::o;828:104:15:-;915:10;828:104;:::o;1952:123:5:-;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;935:126:0:-;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;992:26:0::1;:24;:26::i;:::-;1028;:24;:26::i;:::-;1794:14:5::0;1790:66;;;1840:5;1824:21;;-1:-1:-1;;1824:21:5;;;1790:66;935:126:0;:::o;483:100:11:-;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;545:31:11::1;:29;:31::i;275:181:6:-:0;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;338:25:6::1;:23;:25::i;:::-;373:34;:32;:34::i;986:128:16:-:0;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;1044:26:16::1;:24;:26::i;:::-;1080:27;:25;:27::i;27358:1022:58:-:0;27448:7;27467:14;27484:1;27467:18;;27496:19;27518:24;27530:6;:11;;;27518;:24::i;:::-;27496:46;-1:-1:-1;27649:15:58;27637:8;:27;;;;;;;;;27633:717;;;27723:13;;;;27834:11;;;;27714:22;;;;27775;;;;27826:35;;:7;:35::i;:::-;27774:87;;;;27910:15;27893:14;27884:6;:23;:41;27875:50;;27971:26;28001:67;28026:6;:11;;;28039:6;:11;;;28052:6;:15;;;28001:24;:67::i;:::-;27968:100;;;28087:9;28082:258;28106:9;:16;28102:1;:20;28082:258;;;28147:24;28198:3;28182:9;28192:1;28182:12;;;;;;;;;;;;;;:19;;28147:55;;28220:20;28243:34;28260:16;28243:6;:13;;;:16;;:34;;;;:::i;:::-;28304:21;;;;;-1:-1:-1;;28124:3:58;;28082:258;;;;27633:717;;;;-1:-1:-1;28367:6:58;27358:1022;-1:-1:-1;;27358:1022:58:o;23663:124::-;23721:10;23776:2;23768:4;:10;;23750:30;;;;;;;;;;23743:37;23663:124;-1:-1:-1;;23663:124:58:o;10326:8104::-;10447:4;10465:7;10486;10519:23;10544:36;10584:94;10609:15;:20;;;10631:15;:20;;;10653:15;:24;;;10584;:94::i;:::-;10712:22;;;;10518:160;;-1:-1:-1;10518:160:58;-1:-1:-1;10776:19:58;10748:24;;:47;;;;;;;;;10744:7389;;;10838:11;;10830:59;;10812:12;;-1:-1:-1;;;;;10838:11:58;;10863:13;;10830:59;;10878:10;;10830:59;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10811:78;;;10907:9;10903:208;;;10941:7;10936:75;;10980:5;10987:1;10990;10972:20;;;;;;;;;;;;10936:75;10903:208;;;11057:7;11049:47;;;;-1:-1:-1;;;11049:47:58;;;;;;;:::i;:::-;10744:7389;;;;11159:22;11131:24;;:50;;;;;;;;;11127:7006;;;11224:14;;11216:62;;11198:12;;-1:-1:-1;;;;;11224:14:58;;11252:13;;11216:62;;11267:10;;11216:62;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11197:81;;;11296:9;11292:211;;;11330:7;11325:75;;11369:5;11376:1;11379;11361:20;;;;;;;;;;;;11292:211;11446:7;11438:50;;;;-1:-1:-1;;;11438:50:58;;;;;;;:::i;11127:7006::-;11551:18;11523:24;;:46;;;;;;;;;11519:6614;;;11612:10;;11604:58;;11586:12;;-1:-1:-1;;;;;11612:10:58;;11636:13;;11604:58;;11651:10;;11604:58;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11585:77;;;11680:9;11676:204;;;11714:7;11709:75;;11753:5;11760:1;11763;11745:20;;;;;;;;;;;;11676:204;11830:7;11822:43;;;;-1:-1:-1;;;11822:43:58;;;;;;;:::i;11519:6614::-;11928:12;11900:24;;:40;;;;;;;;;11896:6237;;;11956:27;11997:10;11986:40;;;;;;;;;;;;:::i;:::-;11956:70;;12045:9;12041:249;;;12084:4;;12078:44;;-1:-1:-1;;;12078:44:58;;-1:-1:-1;;;;;12084:4:58;;;;12078:15;;12101:13;;12078:44;;12116:5;;12078:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12074:119;;12162:5;12169:1;12172;12154:20;;;;;;;;;;;;12074:119;12041:249;;;12237:4;;12231:44;;-1:-1:-1;;;12231:44:58;;-1:-1:-1;;;;;12237:4:58;;;;12231:15;;12254:13;;12231:44;;12269:5;;12231:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12041:249;12491:9;12486:1576;12510:5;:13;;;:20;12506:1;:24;12486:1576;;;12555:15;12573:5;:13;;;12587:1;12573:16;;;;;;;;;;;;;;:25;;;12555:43;;12616:14;12633:5;:13;;;12647:1;12633:16;;;;;;;;;;;;;;:24;;;12616:41;;12675:17;12695:5;:12;;;12708:7;12695:21;;;;;;;;;;;;;;:27;;;12723:6;12695:35;;;;;;;;;;;;;;:40;;;12675:60;;12819:1;12779:5;:12;;;12792:7;12779:21;;;;;;;;;;;;;;:30;;;:37;:41;:88;;;;;12866:1;12824:5;:13;;;12838:1;12824:16;;;;;;;;;;;;;;:32;;;:39;:43;12779:88;12775:228;;;12895:85;12909:4;12915:5;:13;;;12929:1;12915:16;;;;;;;;;;;;;;:32;;;12949:5;:12;;;12962:7;12949:21;;;;;;;;;;;;;;:30;;;12895:13;:85::i;:::-;13074:12;;:21;;13087:7;;13074:21;;;;;;;;;;;;:34;;;13112:1;13074:39;13070:978;;;13137:28;13179:4;13168:35;;;;;;;;;;;;:::i;:::-;13137:66;;13231:9;13226:244;13250:5;:12;13246:1;:16;13226:244;;;13295:22;13320:5;13326:1;13320:8;;;;;;;;;;;;;;13295:33;;13381:1;:7;;;-1:-1:-1;;;;;13354:53:58;;13416:4;13423:12;:10;:12::i;:::-;13437:1;:9;;;13354:93;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13264:3:58;;;;;-1:-1:-1;13226:244:58;;-1:-1:-1;;13226:244:58;;;13070:978;;;;13498:12;;:21;;13511:7;;13498:21;;;;;;;;;;;;:34;;;13536:1;13498:39;13494:554;;;13597:29;13640:4;13629:36;;;;;;;;;;;;:::i;:::-;13597:68;;13693:9;13688:260;13712:5;:12;13708:1;:16;13688:260;;;13757:23;13783:5;13789:1;13783:8;;;;;;;;;;;;;;13757:34;;13845:1;:7;;;-1:-1:-1;;;;;13817:54:58;;13880:4;13887:12;:10;:12::i;:::-;13901:1;:9;;;13912:1;:8;;;13817:108;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13726:3:58;;;;;-1:-1:-1;13688:260:58;;-1:-1:-1;;13688:260:58;13494:554;13994:35;;-1:-1:-1;;;13994:35:58;;;;;;;:::i;13494:554::-;12486:1576;;;12532:3;;;;;12486:1576;;;;11896:6237;;;;14110:23;14082:24;;:51;;;;;;;;;14078:4055;;;14150:41;14193;14236:14;14265:10;14254:82;;;;;;;;;;;;:::i;:::-;14149:187;;;;;;14354:9;14350:367;;;14398:9;;14387:103;;-1:-1:-1;;;14387:103:58;;-1:-1:-1;;;;;14398:9:58;;;;14387:57;;14452:13;;14387:103;;14467:10;;14479;;14387:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14383:178;;14530:5;14537:1;14540;14522:20;;;;;;;;;;;;;;14383:178;14350:367;;;14610:9;;14599:103;;-1:-1:-1;;;14599:103:58;;-1:-1:-1;;;;;14610:9:58;;;;14599:57;;14664:13;;14599:103;;14679:10;;14691;;14599:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14350:367;-1:-1:-1;;;;;;14734:38:58;;-1:-1:-1;;;14734:38:58;14730:466;;;14811:10;:21;;;-1:-1:-1;;;;;14792:58:58;;14859:4;14866:12;:10;:12::i;:::-;14880:10;:18;;;14792:107;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14730:466;;;-1:-1:-1;;;;;;14924:39:58;;-1:-1:-1;;;14924:39:58;14920:276;;;15003:10;:21;;;-1:-1:-1;;;;;14983:59:58;;15051:4;15058:12;:10;:12::i;:::-;15072:10;:18;;;15092:10;:17;;;14983:131;;;;;;;;;;;;;;;;;;:::i;14920:276::-;15153:28;;-1:-1:-1;;;15153:28:58;;;;;;;:::i;14920:276::-;14078:4055;;;;;;15244:16;15216:24;;:44;;;;;;;;;15212:2921;;;15303:8;;15295:56;;15277:12;;-1:-1:-1;;;;;15303:8:58;;15325:13;;15295:56;;15340:10;;15295:56;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15276:75;;;15369:9;15365:205;;;15403:7;15398:75;;15442:5;15449:1;15452;15434:20;;;;;;;;;;;;15365:205;15519:7;15511:44;;;;-1:-1:-1;;;15511:44:58;;;;;;;:::i;15212:2921::-;15618:19;15590:24;;:47;;;;;;;;;15586:2547;;;15680:11;;15672:59;;15654:12;;-1:-1:-1;;;;;15680:11:58;;15705:13;;15672:59;;15720:10;;15672:59;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15653:78;;;15749:9;15745:208;;;15783:7;15778:75;;15822:5;15829:1;15832;15814:20;;;;;;;;;;;;15745:208;15899:7;15891:47;;;;-1:-1:-1;;;15891:47:58;;;;;;;:::i;15586:2547::-;16001:19;15973:24;;:47;;;;;;;;;15969:2164;;;16063:11;;16055:59;;16037:12;;-1:-1:-1;;;;;16063:11:58;;16088:13;;16055:59;;16103:10;;16055:59;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16036:78;;;16132:9;16128:208;;;16166:7;16161:75;;16205:5;16212:1;16215;16197:20;;;;;;;;;;;;16128:208;16282:7;16274:47;;;;-1:-1:-1;;;16274:47:58;;;;;;;:::i;15969:2164::-;16384:12;16356:24;;:40;;;;;;;;;16352:1781;;;16413:23;16438:22;16462:14;16491:10;16480:58;;;;;;;;;;;;:::i;:::-;16412:126;;;;;;16556:9;16552:265;;;16595:4;;16589:52;;-1:-1:-1;;;16589:52:58;;-1:-1:-1;;;;;16595:4:58;;;;16589:19;;16616:13;;16589:52;;16631:4;;16637:3;;16589:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16585:127;;16681:5;16688:1;16691;16673:20;;;;;;;;;;;;;;16585:127;16552:265;;;16756:4;;16750:52;;-1:-1:-1;;;16750:52:58;;-1:-1:-1;;;;;16756:4:58;;;;16750:19;;16777:13;;16750:52;;16792:4;;16798:3;;16750:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16552:265;-1:-1:-1;;;;;;16834:38:58;;-1:-1:-1;;;16834:38:58;16830:466;;;16911:10;;:21;;;-1:-1:-1;;;;;16892:58:58;;16959:4;16966:12;:10;:12::i;:::-;16980:10;;:18;;;16892:107;;-1:-1:-1;;;;;;16892:107:58;;;;;;;;;;;16980:18;16892:107;;;:::i;16830:466::-;-1:-1:-1;;;;;;17024:39:58;;-1:-1:-1;;;17024:39:58;17020:276;;;17103:10;;:21;;;-1:-1:-1;;;;;17083:59:58;;17151:4;17158:12;:10;:12::i;:::-;17172:10;;:18;;;;17192:17;;;;;17083:131;;-1:-1:-1;;;;;;17083:131:58;;;;;;;;;;;17172:18;17192:17;17083:131;;;:::i;16352:1781::-;17344:19;17316:24;;:47;;;;;;;;;17312:821;;;17406:11;;17398:59;;17380:12;;-1:-1:-1;;;;;17406:11:58;;17431:13;;17398:59;;17446:10;;17398:59;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17379:78;;;17475:9;17471:208;;;17509:7;17504:75;;17548:5;17555:1;17558;17540:20;;;;;;;;;;;;17471:208;17625:7;17617:47;;;;-1:-1:-1;;;17617:47:58;;;;;;;:::i;17312:821::-;17727:19;17699:24;;:47;;;;;;;;;17695:438;;;17789:11;;17781:59;;17763:12;;-1:-1:-1;;;;;17789:11:58;;17814:13;;17781:59;;17829:10;;17781:59;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17762:78;;;17858:9;17854:208;;;17892:7;17887:75;;17931:5;17938:1;17941;17923:20;;;;;;;;;;;;17854:208;18008:7;18000:47;;;;-1:-1:-1;;;18000:47:58;;;;;;;:::i;17695:438::-;18092:30;;-1:-1:-1;;;18092:30:58;;;;;;;:::i;17695:438::-;18176:75;18207:19;18228:15;:22;;;18176:30;:75::i;:::-;18263:22;18287:23;18314:53;18322:15;:20;;;18344:15;:22;;;18314:7;:53::i;:::-;18385:4;;-1:-1:-1;18262:105:58;;-1:-1:-1;18262:105:58;-1:-1:-1;;;;;;10326:8104:58;;;;;;:::o;21631:212::-;21731:1;21719:9;:13;:43;;;;-1:-1:-1;;;;;;21736:26:58;;;;21719:43;21715:122;;;21778:48;21802:12;21816:9;21778:23;:48::i;:::-;21631:212;;:::o;18876:2577::-;19001:4;19019:7;19040;19073:23;19098:36;19138:94;19163:15;:20;;;19185:15;:20;;;19207:15;:24;;;19138;:94::i;:::-;19072:160;;-1:-1:-1;19072:160:58;-1:-1:-1;19292:19:58;19264:24;;:47;;;;;;;;;19260:1880;;;19354:11;;19346:37;;19328:12;;-1:-1:-1;;;;;19354:11:58;;19346:37;;19372:10;;19346:37;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19327:56;;;19401:9;19397:213;;;19435:7;19430:75;;19474:5;19481:1;19484;19466:20;;;;;;;;;;;19430:75;19397:213;;;19551:7;19543:52;;;;-1:-1:-1;;;19543:52:58;;;;;;;:::i;:::-;19260:1880;;;;19658:18;19630:24;;:46;;;;;;;;;19626:1514;;;19719:10;;19711:36;;19693:12;;-1:-1:-1;;;;;19719:10:58;;19711:36;;19736:10;;19711:36;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19692:55;;;19765:9;19761:209;;;19799:7;19794:75;;19838:5;19845:1;19848;19830:20;;;;;;;;;;;19761:209;19915:7;19907:48;;;;-1:-1:-1;;;19907:48:58;;;;;;;:::i;19626:1514::-;20018:19;19990:24;;:47;;;;;;;;;19986:1154;;;20080:11;;20072:37;;20054:12;;-1:-1:-1;;;;;20080:11:58;;20072:37;;20098:10;;20072:37;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20053:56;;;20127:9;20123:213;;;20161:7;20156:75;;20200:5;20207:1;20210;20192:20;;;;;;;;;;;20123:213;20277:7;20269:52;;;;-1:-1:-1;;;20269:52:58;;;;;;;:::i;19986:1154::-;20384:19;20356:24;;:47;;;;;;;;;20352:788;;;20446:11;;20438:37;;20420:12;;-1:-1:-1;;;;;20446:11:58;;20438:37;;20464:10;;20438:37;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20419:56;;;20493:9;20489:213;;;20527:7;20522:75;;20566:5;20573:1;20576;20558:20;;;;;;;;;;;20489:213;20643:7;20635:52;;;;-1:-1:-1;;;20635:52:58;;;;;;;:::i;20352:788::-;20750:19;20722:24;;:47;;;;;;;;;20718:422;;;20812:11;;20804:37;;20786:12;;-1:-1:-1;;;;;20812:11:58;;20804:37;;20830:10;;20804:37;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20785:56;;;20859:9;20855:213;;;20893:7;20888:75;;20932:5;20939:1;20942;20924:20;;;;;;;;;;;20855:213;21009:7;21001:52;;;;-1:-1:-1;;;21001:52:58;;;;;;;:::i;20718:422::-;21098:31;;-1:-1:-1;;;21098:31:58;;;;;;;:::i;20718:422::-;21179:76;21211:19;21232:15;:22;;;21179:31;:76::i;:::-;21286:22;21310:23;21337:53;21345:15;:20;;;21367:15;:22;;;21337:7;:53::i;:::-;21408:4;;21285:105;;-1:-1:-1;21285:105:58;-1:-1:-1;18876:2577:58;-1:-1:-1;;;;;;;18876:2577:58:o;22022:222::-;22123:1;22111:9;:13;:43;;;;-1:-1:-1;;;;;;22128:26:58;;;;22111:43;22107:131;;;22188:4;;22170:57;;-1:-1:-1;;;22170:57:58;;-1:-1:-1;;;;;22188:4:58;;;;22170:32;;:57;;22203:12;;22217:9;;22170:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22314:188::-;22379:21;22414:13;;22410:86;;22443:42;22451:10;22475:9;22443:31;:42::i;22577:237::-;22665:4;;22647:48;;-1:-1:-1;;;22647:48:58;;22626:18;;-1:-1:-1;;;;;22665:4:58;;22647:33;;:48;;22689:4;;22647:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22626:69;-1:-1:-1;22709:14:58;;22705:103;;22757:4;;-1:-1:-1;;;;;22757:4:58;22739:32;22772:12;:10;:12::i;:::-;22786:10;22739:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2701:175:4:-;2759:7;2790:5;;;2813:6;;;;2805:46;;;;;-1:-1:-1;;;2805:46:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;2868:1;2701:175;-1:-1:-1;;;2701:175:4:o;737:413:14:-;1097:20;1135:8;;;737:413::o;759:64:15:-;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1794:14;1790:66;;;1840:5;1824:21;;-1:-1:-1;;1824:21:5;;;759:64:15;:::o;1067:192:0:-;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;1134:17:0::1;1154:12;:10;:12::i;:::-;1176:6;:18:::0;;-1:-1:-1;;;;;;1176:18:0::1;-1:-1:-1::0;;;;;1176:18:0;::::1;::::0;;::::1;::::0;;;1209:43:::1;::::0;1176:18;;-1:-1:-1;1176:18:0;-1:-1:-1;;1209:43:0::1;::::0;-1:-1:-1;;1209:43:0::1;1778:1:5;1794:14:::0;1790:66;;;1840:5;1824:21;;-1:-1:-1;;1824:21:5;;;1067:192:0;:::o;777:249:2:-;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;979:40:2::1;-1:-1:-1::0;;;979:18:2::1;:40::i;506:274:7:-:0;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;581:192:7::1;-1:-1:-1::0;;;581:18:7::1;:192::i;1120:90:16:-:0;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;1188:7:16::1;:15:::0;;-1:-1:-1;;1188:15:16::1;::::0;;1790:66:5;;;;1840:5;1824:21;;-1:-1:-1;;1824:21:5;;;1120:90:16;:::o;23218:262:58:-;23288:7;;23335:27;23358:2;23350:10;;;23335:27;;;23392:21;;23431:19;:6;23335:27;23431:9;:19::i;:::-;23452:20;:6;23462:9;23452;:20::i;:::-;23423:50;;;;;;23218:262;;;;;:::o;24063:1018::-;24213:12;24227:16;24255:28;24332:2;24313:15;:21;;24286:50;;;;;;;;;;24255:81;-1:-1:-1;24346:36:58;24458;24446:8;:48;;;;;;;;;24442:114;;;24518:5;;-1:-1:-1;24525:19:58;-1:-1:-1;24510:35:58;;-1:-1:-1;24510:35:58;24442:114;24582:43;24570:8;:55;;;;;;;;;24566:462;;;24641:36;24691:5;24680:35;;;;;;;;;;;;:::i;:::-;24641:74;;24804:27;24822:8;24804:17;:27::i;:::-;24800:218;;;24859:14;:19;;;24880:14;:34;;;24851:64;;;;;;;;;24800:218;24962:19;;-1:-1:-1;24983:19:58;-1:-1:-1;24954:49:58;;-1:-1:-1;24954:49:58;24566:462;25038:36;;-1:-1:-1;;;25038:36:58;;;;;;;:::i;24063:1018::-;;;;;;;:::o;198:120:37:-;259:4;282:29;305:5;282:18;:5;292:7;282:9;:18::i;:::-;:22;;:29::i;26472:389:58:-;26642:11;:18;26628:3;:10;:32;26620:41;;;;;;26693:4;:11;26679:3;:10;:25;26671:34;;;;;;26721:9;26716:139;26740:3;:10;26736:1;:14;26716:139;;;26775:4;26780:1;26775:7;;;;;;;;;;;;-1:-1:-1;;;;;;26775:7:58;:12;26771:74;;26816:11;26828:1;26816:14;;;;;;;;;;;;;;;;26807:3;26811:1;26807:6;;;;;;;;;;;:23;-1:-1:-1;;;;;26807:23:58;;;;;;;;;26771:74;26752:3;;26716:139;;;;26472:389;;;:::o;25247:514::-;25366:9;25361:394;25385:20;:27;25381:1;:31;25361:394;;;25463:1;25437:20;25458:1;25437:23;;;;;;;;;;;;;;:27;25433:312;;;25484:23;25526:20;25547:1;25526:23;;;;;;;;;;;;;;25484:67;;25569:17;25624:3;25597:20;25618:1;25597:23;;;;;;;;;;;;;;:30;;25569:59;;25646:13;25662:20;25672:9;25662:6;:9;;:20;;;;:::i;:::-;25646:36;;25700:30;25715:5;25722:7;25700:14;:30::i;:::-;25433:312;;;;25414:3;;25361:394;;83:161:55;165:27;;148:12;;-1:-1:-1;;;;;165:7:55;;;181:5;;148:12;165:27;148:12;165:27;181:5;165:7;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;147:45;;;210:7;202:35;;;;;-1:-1:-1;;;202:35:55;;;;;;;;;;;;-1:-1:-1;;;202:35:55;;;;;;;;;;;;;;25928:516:58;26048:9;26043:395;26067:20;:27;26063:1;:31;26043:395;;;26145:1;26119:20;26140:1;26119:23;;;;;;;;;;;;;;:27;26115:313;;;26166:23;26208:20;26229:1;26208:23;;;;;;;;;;;;;;26166:67;;26251:17;26306:3;26279:20;26300:1;26279:23;;;;;;;;;;;;;;:30;;26251:59;;26328:13;26344:20;26354:9;26344:6;:9;;:20;;;;:::i;:::-;26328:36;;26382:31;26398:5;26405:7;26382:15;:31::i;:::-;26115:313;;;;26096:3;;26043:395;;1718:198:2;-1:-1:-1;;;;;;1801:25:2;;;;;1793:66;;;;;-1:-1:-1;;;1793:66:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1869:33:2;;;;;:20;:33;;;;;:40;;-1:-1:-1;;1869:40:2;1905:4;1869:40;;;1718:198::o;27095:257:58:-;27163:4;27195:16;27183:8;:28;;;;;;;;;:67;;;-1:-1:-1;27227:23:58;27215:8;:35;;;;;;;;;27183:67;:102;;;-1:-1:-1;27266:19:58;27254:8;:31;;;;;;;;;27183:102;27179:144;;;-1:-1:-1;27308:4:58;27301:11;;27179:144;-1:-1:-1;27340:5:58;27095:257;;;:::o;3549:215:4:-;3607:7;3630:6;3626:20;;-1:-1:-1;3645:1:4;3638:8;;3626:20;3668:5;;;3672:1;3668;:5;:1;3691:5;;;;;:10;3683:56;;;;-1:-1:-1;;;3683:56:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4228:150;4286:7;4317:1;4313;:5;4305:44;;;;;-1:-1:-1;;;4305:44:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;4370:1;4366;:5;;;;;;;4228:150;-1:-1:-1;;;4228:150:4:o;14:138:67:-;84:20;;113:33;84:20;113:33;:::i;157:142::-;238:13;;260:33;238:13;260:33;:::i;304:782::-;;417:3;410:4;402:6;398:17;394:27;384:2;;439:5;432;425:20;384:2;479:6;466:20;505:4;529:65;544:49;590:2;544:49;:::i;:::-;529:65;:::i;:::-;628:15;;;659:12;;;;691:15;;;737:11;;;725:24;;721:33;;718:42;-1:-1:-1;715:2:67;;;777:5;770;763:20;715:2;803:5;817:240;831:2;828:1;825:9;817:240;;;902:3;889:17;919:33;946:5;919:33;:::i;:::-;965:18;;1003:12;;;;1035;;;;849:1;842:9;817:240;;;-1:-1:-1;1075:5:67;;374:712;-1:-1:-1;;;;;;;374:712:67:o;1091:1307::-;;1241:3;1234:4;1226:6;1222:17;1218:27;1208:2;;1263:5;1256;1249:20;1208:2;1296:6;1290:13;1322:4;1346:65;1361:49;1407:2;1361:49;:::i;1346:65::-;1445:15;;;1476:12;;;;1508:15;;;1542:4;1577:11;;;1565:24;;1561:33;;1558:42;-1:-1:-1;1555:2:67;;;1617:5;1610;1603:20;1555:2;1643:5;1657:712;1671:2;1668:1;1665:9;1657:712;;;1738:2;1732:3;1727;1723:13;1719:22;1716:2;;;1758:5;1751;1744:20;1716:2;1799;1793:9;1845:2;1837:6;1833:15;1918:6;1906:10;1903:22;-1:-1:-1;;;;;1870:10:67;1867:34;1864:62;1861:2;;;1929:9;1861:2;1953:22;;2001:10;;2055:6;2044:18;;2034:29;;2024:2;;2081:5;2074;2067:20;2024:2;2102:21;;2157:12;;;2151:19;2183:35;2151:19;2183:35;:::i;:::-;2238:15;;;2231:32;2276:19;;2315:12;;;;2347;;;;1689:1;1682:9;1657:712;;;-1:-1:-1;2387:5:67;;1198:1200;-1:-1:-1;;;;;;;;1198:1200:67:o;2403:1170::-;;2531:3;2524:4;2516:6;2512:17;2508:27;2498:2;;2553:5;2546;2539:20;2498:2;2586:6;2580:13;2612:4;2636:65;2651:49;2697:2;2651:49;:::i;2636:65::-;2735:15;;;2766:12;;;;2798:15;;;2832:4;2867:11;;;2855:24;;2851:33;;2848:42;-1:-1:-1;2845:2:67;;;2907:5;2900;2893:20;2845:2;2933:5;2947:597;2961:2;2958:1;2955:9;2947:597;;;3028:2;3022:3;3017;3013:13;3009:22;3006:2;;;3048:5;3041;3034:20;3006:2;3089;3083:9;3135:2;3127:6;3123:15;3208:6;3196:10;3193:22;-1:-1:-1;;;;;3160:10:67;3157:34;3154:62;3151:2;;;3219:9;3151:2;3243:22;;3293:10;;3278:26;;3336:12;;;3330:19;3362:33;3330:19;3362:33;:::i;:::-;3415:15;;;3408:30;3451:19;;3490:12;;;;3522;;;;2979:1;2972:9;2947:597;;3578:1263;;3712:3;3705:4;3697:6;3693:17;3689:27;3679:2;;3734:5;3727;3720:20;3679:2;3767:6;3761:13;3793:4;3817:65;3832:49;3878:2;3832:49;:::i;3817:65::-;3916:15;;;3947:12;;;;3979:15;;;4012:5;4026:786;4040:2;4037:1;4034:9;4026:786;;;4113:3;4107:10;4099:6;4095:23;4141:4;4193:2;4187;4183:7;4178:2;4173:3;4169:12;4165:26;4161:35;4158:2;;;4213:5;4206;4199:20;4158:2;4254;4248:9;4300:2;4292:6;4288:15;-1:-1:-1;;;;;4398:6:67;4386:10;4383:22;4378:2;4366:10;4363:18;4360:46;4357:2;;;4409:9;4357:2;4433:22;;;4489:11;;;4483:18;4468:34;;4537:11;;;4531:18;;4565:16;;;4562:2;;;4598:5;4591;4584:20;4562:2;;;4643:62;4701:3;4696:2;4685:8;4681:2;4677:17;4673:26;4643:62;:::i;:::-;4626:15;;;4619:87;4719:19;;-1:-1:-1;;4758:12:67;;;;4790;;;;4058:1;4051:9;4026:786;;4846:2102;;4976:3;4969:4;4961:6;4957:17;4953:27;4943:2;;4998:5;4991;4984:20;4943:2;5031:6;5025:13;5057:4;5081:65;5096:49;5142:2;5096:49;:::i;5081:65::-;5180:15;;;5211:12;;;;5243:15;;;5276:5;5290:1629;5304:2;5301:1;5298:9;5290:1629;;;5377:3;5371:10;5363:6;5359:23;5405:6;5459:2;5453;5449:7;5444:2;5439:3;5435:12;5431:26;5427:35;5424:2;;;5479:5;5472;5465:20;5424:2;5513:18;5528:2;5513:18;:::i;:::-;5572:2;5568;5564:11;5558:18;5551:5;5544:33;5613:44;5653:2;5649;5645:11;5613:44;:::i;:::-;5608:2;5601:5;5597:14;5590:68;5708:2;5704;5700:11;5694:18;5689:2;5682:5;5678:14;5671:42;5763:3;5759:2;5755:12;5749:19;5744:2;5737:5;5733:14;5726:43;5820:3;5816:2;5812:12;5806:19;5800:3;5793:5;5789:15;5782:44;5877:3;5873:2;5869:12;5863:19;5857:3;5850:5;5846:15;5839:44;5920:45;5960:3;5956:2;5952:12;5920:45;:::i;:::-;5914:3;5907:5;5903:15;5896:70;5989:3;6035:2;6031;6027:11;6021:18;-1:-1:-1;;;;;6109:2:67;6099:8;6096:16;6093:2;;;6129:5;6122;6115:20;6093:2;6174:62;6232:3;6227:2;6216:8;6212:2;6208:17;6204:26;6174:62;:::i;:::-;6168:3;6161:5;6157:15;6150:87;6280:3;6276:2;6272:12;6266:19;6250:35;;6314:2;6304:8;6301:16;6298:2;;;6334:5;6327;6320:20;6298:2;;6378:88;6462:3;6457:2;6446:8;6442:2;6438:17;6434:26;6378:88;:::i;:::-;6373:2;6366:5;6362:14;6355:112;;;6490:3;6544:2;6540;6536:11;6530:18;6524:3;6517:5;6513:15;6506:43;6572:3;6625:2;6621;6617:11;6611:18;6606:2;6599:5;6595:14;6588:42;6653:3;6643:13;;6692:42;6730:2;6726;6722:11;6692:42;:::i;:::-;6676:14;;;6669:66;6771:42;6801:11;;;6771:42;:::i;:::-;6755:14;;;6748:66;6827:18;;-1:-1:-1;;6865:12:67;;;;6897;;;;5322:1;5315:9;5290:1629;;6953:2052;;7090:3;7083:4;7075:6;7071:17;7067:27;7057:2;;7112:5;7105;7098:20;7057:2;7145:6;7139:13;7171:4;7195:65;7210:49;7256:2;7210:49;:::i;7195:65::-;7294:15;;;7325:12;;;;7357:15;;;7390:5;7404:1572;7418:2;7415:1;7412:9;7404:1572;;;7491:3;7485:10;7477:6;7473:23;7519:6;7573:2;7567;7563:7;7558:2;7553:3;7549:12;7545:26;7541:35;7538:2;;;7593:5;7586;7579:20;7538:2;7627:18;7642:2;7627:18;:::i;:::-;7672:45;7713:2;7709;7705:11;7672:45;:::i;:::-;7665:5;7658:60;7741:2;7793;7789;7785:11;7779:18;7774:2;7767:5;7763:14;7756:42;7821:2;7873;7869;7865:11;7859:18;7854:2;7847:5;7843:14;7836:42;7901:3;7891:13;;7954:2;7950;7946:11;7940:18;7935:2;7928:5;7924:14;7917:42;;7982:3;8035:2;8031;8027:11;8021:18;8016:2;8009:5;8005:14;7998:42;8076:45;8116:3;8112:2;8108:12;8076:45;:::i;:::-;8060:14;;;8053:69;-1:-1:-1;8145:3:67;8183:11;;;8177:18;-1:-1:-1;;;;;8253:17:67;;;8250:2;;;8287:5;8280;8273:20;8250:2;8332:62;8390:3;8385:2;8374:8;8370:2;8366:17;8362:26;8332:62;:::i;:::-;8326:3;8319:5;8315:15;8308:87;8419:3;8408:14;;8472:3;8468:2;8464:12;8458:19;8453:2;8446:5;8442:14;8435:43;8502:3;8491:14;;8556:3;8552:2;8548:12;8542:19;8536:3;8529:5;8525:15;8518:44;8586:3;8575:14;;8640:3;8636:2;8632:12;8626:19;8620:3;8613:5;8609:15;8602:44;8689:2;8685;8681:11;8675:18;8659:34;;8722:3;8712:8;8709:17;8706:2;;;8743:5;8736;8729:20;8706:2;;8788:82;8866:3;8861:2;8850:8;8846:2;8842:17;8838:26;8788:82;:::i;:::-;8771:15;;;8764:107;-1:-1:-1;8884:18:67;;-1:-1:-1;;8922:12:67;;;;8954;;;;7436:1;7429:9;7404:1572;;9010:705;;9123:3;9116:4;9108:6;9104:17;9100:27;9090:2;;9145:5;9138;9131:20;9090:2;9185:6;9172:20;9211:4;9235:65;9250:49;9296:2;9250:49;:::i;9235:65::-;9334:15;;;9365:12;;;;9397:15;;;9443:11;;;9431:24;;9427:33;;9424:42;-1:-1:-1;9421:2:67;;;9483:5;9476;9469:20;9421:2;9509:5;9523:163;9537:2;9534:1;9531:9;9523:163;;;9594:17;;9582:30;;9632:12;;;;9664;;;;9555:1;9548:9;9523:163;;9720:132;9787:20;;9816:30;9787:20;9816:30;:::i;9857:136::-;9935:13;;9957:30;9935:13;9957:30;:::i;9998:140::-;10078:13;;10100:32;10078:13;10100:32;:::i;10143:485::-;;10240:3;10233:4;10225:6;10221:17;10217:27;10207:2;;10262:5;10255;10248:20;10207:2;10302:6;10289:20;10333:49;10348:33;10378:2;10348:33;:::i;10333:49::-;10407:2;10398:7;10391:19;10453:3;10446:4;10441:2;10433:6;10429:15;10425:26;10422:35;10419:2;;;10474:5;10467;10460:20;10419:2;10543;10536:4;10528:6;10524:17;10517:4;10508:7;10504:18;10491:55;10566:16;;;10584:4;10562:27;10555:42;;;;10570:7;10197:431;-1:-1:-1;;10197:431:67:o;10633:447::-;;10741:3;10734:4;10726:6;10722:17;10718:27;10708:2;;10763:5;10756;10749:20;10708:2;10796:6;10790:13;10827:49;10842:33;10872:2;10842:33;:::i;10827:49::-;10901:2;10892:7;10885:19;10947:3;10940:4;10935:2;10927:6;10923:15;10919:26;10916:35;10913:2;;;10968:5;10961;10954:20;10913:2;10985:64;11046:2;11039:4;11030:7;11026:18;11019:4;11011:6;11007:17;10985:64;:::i;:::-;11067:7;10698:382;-1:-1:-1;;;;10698:382:67:o;11085:152::-;11161:20;;11210:2;11200:13;;11190:2;;11227:1;11224;11217:12;11242:150;11324:13;;11366:1;11356:12;;11346:2;;11382:1;11379;11372:12;11397:152;11481:13;;11523:1;11513:12;;11503:2;;11539:1;11536;11529:12;11554:934;;11668:4;11656:9;11651:3;11647:19;11643:30;11640:2;;;11690:5;11683;11676:20;11640:2;11716:20;11731:4;11716:20;:::i;:::-;11707:29;;11765:9;11759:16;-1:-1:-1;;;;;11835:2:67;11827:6;11824:14;11821:2;;;11851:1;11848;11841:12;11821:2;11878:66;11940:3;11931:6;11920:9;11916:22;11878:66;:::i;:::-;11871:5;11864:81;11977:49;12022:2;12011:9;12007:18;11977:49;:::i;:::-;11972:2;11965:5;11961:14;11954:73;12080:2;12069:9;12065:18;12059:25;12054:2;12047:5;12043:14;12036:49;12138:2;12127:9;12123:18;12117:25;12112:2;12105:5;12101:14;12094:49;12189:3;12178:9;12174:19;12168:26;12152:42;;12219:2;12209:8;12206:16;12203:2;;;12235:1;12232;12225:12;12203:2;;12272:60;12328:3;12317:8;12306:9;12302:24;12272:60;:::i;:::-;12266:3;12259:5;12255:15;12248:85;;12366:55;12416:3;12405:9;12401:19;12366:55;:::i;:::-;12360:3;12353:5;12349:15;12342:80;12476:3;12465:9;12461:19;12455:26;12449:3;12442:5;12438:15;12431:51;11630:858;;;;:::o;12493:1599::-;;12594:6;12637:2;12625:9;12620:3;12616:19;12612:28;12609:2;;;12657:5;12650;12643:20;12609:2;12683:18;12698:2;12683:18;:::i;:::-;12674:27;;;12724:39;12753:9;12724:39;:::i;:::-;12717:5;12710:54;12796:51;12843:2;12832:9;12828:18;12796:51;:::i;:::-;12791:2;12784:5;12780:14;12773:75;12880:51;12927:2;12916:9;12912:18;12880:51;:::i;:::-;12875:2;12868:5;12864:14;12857:75;12985:2;12974:9;12970:18;12964:25;12959:2;12952:5;12948:14;12941:49;13044:3;13033:9;13029:19;13023:26;13017:3;13010:5;13006:15;12999:51;13104:3;13093:9;13089:19;13083:26;13077:3;13070:5;13066:15;13059:51;13143:52;13190:3;13179:9;13175:19;13143:52;:::i;:::-;13137:3;13130:5;13126:15;13119:77;13229:52;13276:3;13265:9;13261:19;13229:52;:::i;:::-;13223:3;13212:15;;13205:77;13301:3;13342:18;;;13336:25;13320:14;;;13313:49;13381:3;13422:18;;;13416:25;13400:14;;;13393:49;13461:3;13502:18;;;13496:25;13480:14;;;13473:49;13541:3;13582:18;;;13576:25;13560:14;;;13553:49;13621:3;13653:18;;;13647:25;-1:-1:-1;;;;;13684:30:67;;13681:2;;;13727:1;13724;13717:12;13681:2;13763:58;13817:3;13808:6;13797:9;13793:22;13763:58;:::i;:::-;13758:2;13751:5;13747:14;13740:82;;;13841:3;13876:49;13921:2;13910:9;13906:18;13876:49;:::i;:::-;13860:14;;;13853:73;13945:3;13986:18;;;13980:25;13964:14;;;13957:49;14025:3;14066:18;;;14060:25;14044:14;;;14037:49;;;;13864:5;12574:1518;-1:-1:-1;12574:1518:67:o;14097:1529::-;;14193:6;14236:2;14224:9;14219:3;14215:19;14211:28;14208:2;;;14256:5;14249;14242:20;14208:2;14282:18;14297:2;14282:18;:::i;:::-;14273:27;;;14323:42;14355:9;14323:42;:::i;:::-;14316:5;14309:57;14398:54;14448:2;14437:9;14433:18;14398:54;:::i;:::-;14393:2;14386:5;14382:14;14375:78;14485:51;14532:2;14521:9;14517:18;14485:51;:::i;:::-;14480:2;14473:5;14469:14;14462:75;14569:51;14616:2;14605:9;14601:18;14569:51;:::i;:::-;14564:2;14557:5;14553:14;14546:75;14675:3;14664:9;14660:19;14654:26;14648:3;14641:5;14637:15;14630:51;14735:3;14724:9;14720:19;14714:26;14708:3;14701:5;14697:15;14690:51;14774:52;14821:3;14810:9;14806:19;14774:52;:::i;:::-;14768:3;14757:15;;14750:77;14881:3;14866:19;;;14860:26;14843:15;;;14836:51;14906:3;14947:18;;;14941:25;14925:14;;;14918:49;14986:3;15027:18;;;15021:25;15005:14;;;14998:49;15066:3;15098:18;;;15092:25;-1:-1:-1;;;;;15166:14:67;;;15163:2;;;15193:1;15190;15183:12;15163:2;15229:100;15325:3;15316:6;15305:9;15301:22;15229:100;:::i;:::-;15224:2;15217:5;15213:14;15206:124;15349:3;15339:13;;15405:2;15394:9;15390:18;15384:25;15379:2;15372:5;15368:14;15361:49;15429:3;15419:13;;15478:2;15467:9;15463:18;15457:25;15441:41;;15507:2;15497:8;15494:16;15491:2;;;15523:1;15520;15513:12;15491:2;;15559:60;15615:3;15604:8;15593:9;15589:24;15559:60;:::i;:::-;15554:2;15547:5;15543:14;15536:84;;;14173:1453;;;;:::o;15631:762::-;;15744:4;15732:9;15727:3;15723:19;15719:30;15716:2;;;15766:5;15759;15752:20;15716:2;15803;15797:9;15845:4;15837:6;15833:17;-1:-1:-1;;;;;15937:6:67;15925:10;15922:22;15917:2;15905:10;15902:18;15899:46;15896:2;;;15948:9;15896:2;15979:10;15975:2;15968:22;16008:6;15999:15;;16038:37;16065:9;16038:37;:::i;:::-;16030:6;16023:53;16137:2;16126:9;16122:18;16109:32;16104:2;16096:6;16092:15;16085:57;16203:2;16192:9;16188:18;16175:32;16170:2;16162:6;16158:15;16151:57;16259:2;16248:9;16244:18;16231:32;16217:46;;16286:2;16278:6;16275:14;16272:2;;;16302:1;16299;16292:12;16272:2;;16339:47;16382:3;16373:6;16362:9;16358:22;16339:47;:::i;:::-;16334:2;16326:6;16322:15;16315:72;;;15706:687;;;;:::o;16398:863::-;;16519:4;16507:9;16502:3;16498:19;16494:30;16491:2;;;16541:5;16534;16527:20;16491:2;16578;16572:9;16620:4;16612:6;16608:17;16691:6;16679:10;16676:22;-1:-1:-1;;;;;16643:10:67;16640:34;16637:62;16634:2;;;16702:9;16634:2;16733:10;16729:2;16722:22;;16762:6;16753:15;;16798:9;16792:16;16784:6;16777:32;16863:2;16852:9;16848:18;16842:25;16837:2;16829:6;16825:15;16818:50;16922:2;16911:9;16907:18;16901:25;16896:2;16888:6;16884:15;16877:50;16981:2;16970:9;16966:18;16960:25;16955:2;16947:6;16943:15;16936:50;17031:3;17020:9;17016:19;17010:26;17045:35;17072:7;17045:35;:::i;:::-;17108:3;17096:16;;17089:33;17167:3;17152:19;;17146:26;17181:32;17146:26;17181:32;:::i;:::-;17241:3;17229:16;;;;17222:33;16481:780;;-1:-1:-1;;16481:780:67:o;17266:162::-;17345:13;;17398:4;17387:16;;17377:27;;17367:2;;17418:1;17415;17408:12;17433:259;;17545:2;17533:9;17524:7;17520:23;17516:32;17513:2;;;17566:6;17558;17551:22;17513:2;17610:9;17597:23;17629:33;17656:5;17629:33;:::i;17697:1129::-;;;;;;17936:3;17924:9;17915:7;17911:23;17907:33;17904:2;;;17958:6;17950;17943:22;17904:2;18002:9;17989:23;18021:33;18048:5;18021:33;:::i;:::-;18073:5;-1:-1:-1;18130:2:67;18115:18;;18102:32;18143:35;18102:32;18143:35;:::i;:::-;18197:7;-1:-1:-1;18255:2:67;18240:18;;18227:32;-1:-1:-1;;;;;18308:14:67;;;18305:2;;;18340:6;18332;18325:22;18305:2;18368:67;18427:7;18418:6;18407:9;18403:22;18368:67;:::i;:::-;18358:77;;18488:2;18477:9;18473:18;18460:32;18444:48;;18517:2;18507:8;18504:16;18501:2;;;18538:6;18530;18523:22;18501:2;18566:69;18627:7;18616:8;18605:9;18601:24;18566:69;:::i;:::-;18556:79;;18688:3;18677:9;18673:19;18660:33;18644:49;;18718:2;18708:8;18705:16;18702:2;;;18739:6;18731;18724:22;18702:2;;18767:53;18812:7;18801:8;18790:9;18786:24;18767:53;:::i;:::-;18757:63;;;17894:932;;;;;;;;:::o;18831:691::-;;;;;19003:3;18991:9;18982:7;18978:23;18974:33;18971:2;;;19025:6;19017;19010:22;18971:2;19069:9;19056:23;19088:33;19115:5;19088:33;:::i;:::-;19140:5;-1:-1:-1;19197:2:67;19182:18;;19169:32;19210:35;19169:32;19210:35;:::i;:::-;19264:7;-1:-1:-1;19318:2:67;19303:18;;19290:32;;-1:-1:-1;19373:2:67;19358:18;;19345:32;-1:-1:-1;;;;;19389:30:67;;19386:2;;;19437:6;19429;19422:22;19386:2;19465:51;19508:7;19499:6;19488:9;19484:22;19465:51;:::i;:::-;19455:61;;;18961:561;;;;;;;:::o;19527:760::-;;;;;;19716:3;19704:9;19695:7;19691:23;19687:33;19684:2;;;19738:6;19730;19723:22;19684:2;19782:9;19769:23;19801:33;19828:5;19801:33;:::i;:::-;19853:5;-1:-1:-1;19910:2:67;19895:18;;19882:32;19923:35;19882:32;19923:35;:::i;:::-;19977:7;-1:-1:-1;20031:2:67;20016:18;;20003:32;;-1:-1:-1;20082:2:67;20067:18;;20054:32;;-1:-1:-1;20137:3:67;20122:19;;20109:33;-1:-1:-1;;;;;20154:30:67;;20151:2;;;20202:6;20194;20187:22;20151:2;20230:51;20273:7;20264:6;20253:9;20249:22;20230:51;:::i;20292:1175::-;;;;;20504:3;20492:9;20483:7;20479:23;20475:33;20472:2;;;20526:6;20518;20511:22;20472:2;20580:7;20573:4;20562:9;20558:20;20554:34;20544:2;;20607:6;20599;20592:22;20544:2;20635:3;20658:18;20673:2;20658:18;:::i;:::-;20749;;;;20698:3;20721:9;20779:15;;;20776:2;;;20812:6;20804;20797:22;20776:2;20839:6;20854:269;20868:4;20865:1;20862:11;20854:269;;;20941:3;20928:17;20958:33;20985:5;20958:33;:::i;:::-;21004:18;;21045:4;21069:12;;;;21101;;;;;20888:1;20881:9;20854:269;;;20858:3;;21142:5;21132:15;;;;21166:24;21187:2;21166:24;:::i;:::-;21156:34;;;21241:3;21230:9;21226:19;21213:33;-1:-1:-1;;;;;21261:6:67;21258:30;21255:2;;;21306:6;21298;21291:22;21255:2;21334:67;21393:7;21384:6;21373:9;21369:22;21334:67;:::i;:::-;21324:77;;;21420:41;21456:3;21445:9;21441:19;21420:41;:::i;:::-;21410:51;;20462:1005;;;;;;;:::o;21472:666::-;;;21619:2;21607:9;21598:7;21594:23;21590:32;21587:2;;;21640:6;21632;21625:22;21587:2;21685:9;21672:23;-1:-1:-1;;;;;21755:2:67;21747:6;21744:14;21741:2;;;21776:6;21768;21761:22;21741:2;21819:6;21808:9;21804:22;21794:32;;21864:7;21857:4;21853:2;21849:13;21845:27;21835:2;;21891:6;21883;21876:22;21835:2;21936;21923:16;21962:2;21954:6;21951:14;21948:2;;;21983:6;21975;21968:22;21948:2;22042:7;22037:2;22031;22023:6;22019:15;22015:2;22011:24;22007:33;22004:46;22001:2;;;22068:6;22060;22053:22;22001:2;22104;22096:11;;;;;22126:6;;-1:-1:-1;21577:561:67;;-1:-1:-1;;;;21577:561:67:o;22143:1527::-;;22296:2;22339;22327:9;22318:7;22314:23;22310:32;22307:2;;;22360:6;22352;22345:22;22307:2;22398:9;22392:16;-1:-1:-1;;;;;22468:2:67;22460:6;22457:14;22454:2;;;22489:6;22481;22474:22;22454:2;22532:6;22521:9;22517:22;22507:32;;22577:7;22570:4;22566:2;22562:13;22558:27;22548:2;;22604:6;22596;22589:22;22548:2;22638;22632:9;22661:65;22676:49;22722:2;22676:49;:::i;22661:65::-;22760:15;;;22791:12;;;;22823:11;;;22853:4;22884:11;;;22876:20;;22872:29;;22869:42;-1:-1:-1;22866:2:67;;;22929:6;22921;22914:22;22866:2;22956:6;22947:15;;22971:669;22985:2;22982:1;22979:9;22971:669;;;23056:2;23050:3;23041:7;23037:17;23033:26;23030:2;;;23077:6;23069;23062:22;23030:2;23109;23144;23138:9;23190:2;23182:6;23178:15;23247:6;23235:10;23232:22;23227:2;23215:10;23212:18;23209:46;23206:2;;;23258:9;23206:2;23282:22;;23330:10;;23353:33;23330:10;23353:33;:::i;:::-;23399:21;;23463:12;;;23457:19;23440:15;;;23433:44;23520:12;;;23514:19;23497:15;;;23490:44;;;;23547:19;;23003:1;22996:9;;;;;23586:12;;;;23618;;;;22971:669;;;-1:-1:-1;23659:5:67;;22276:1394;-1:-1:-1;;;;;;;;;22276:1394:67:o;23675:1444::-;;23827:2;23870;23858:9;23849:7;23845:23;23841:32;23838:2;;;23891:6;23883;23876:22;23838:2;23929:9;23923:16;-1:-1:-1;;;;;23999:2:67;23991:6;23988:14;23985:2;;;24020:6;24012;24005:22;23985:2;24063:6;24052:9;24048:22;24038:32;;24108:7;24101:4;24097:2;24093:13;24089:27;24079:2;;24135:6;24127;24120:22;24079:2;24169;24163:9;24192:65;24207:49;24253:2;24207:49;:::i;24192:65::-;24291:15;;;24322:12;;;;24354:11;;;24384:4;24415:11;;;24407:20;;24403:29;;24400:42;-1:-1:-1;24397:2:67;;;24460:6;24452;24445:22;24397:2;24487:6;24478:15;;24502:587;24516:2;24513:1;24510:9;24502:587;;;24587:2;24581:3;24572:7;24568:17;24564:26;24561:2;;;24608:6;24600;24593:22;24561:2;24650;24644:9;24696:2;24688:6;24684:15;24753:6;24741:10;24738:22;24733:2;24721:10;24718:18;24715:46;24712:2;;;24764:9;24712:2;24788:22;;24836:10;;24859:33;24836:10;24859:33;:::i;:::-;24905:21;;24969:12;;;24963:19;24946:15;;;24939:44;24996:19;;24534:1;24527:9;;;;;25035:12;;;;25067;;;;24502:587;;25124:1195;;;;;25342:3;25330:9;25321:7;25317:23;25313:33;25310:2;;;25364:6;25356;25349:22;25310:2;25409:9;25396:23;-1:-1:-1;;;;;25434:6:67;25431:30;25428:2;;;25479:6;25471;25464:22;25428:2;25507:22;;25560:4;25552:13;;25548:27;-1:-1:-1;25538:2:67;;25594:6;25586;25579:22;25538:2;25635;25622:16;25657:4;25681:65;25696:49;25742:2;25696:49;:::i;25681:65::-;25780:15;;;25811:12;;;;25843:11;;;25872:6;25887:228;25901:2;25898:1;25895:9;25887:228;;;25958:82;26032:7;26027:2;26020:3;26007:17;26003:2;25999:26;25995:35;25958:82;:::i;:::-;25946:95;;26061:12;;;;26093;;;;25919:1;25912:9;25887:228;;;25891:3;;26134:5;26124:15;;;;26158:40;26194:2;26183:9;26179:18;26158:40;:::i;:::-;26148:50;;;;;26217:40;26253:2;26242:9;26238:18;26217:40;:::i;:::-;26207:50;;26276:37;26309:2;26298:9;26294:18;26276:37;:::i;26324:257::-;;26444:2;26432:9;26423:7;26419:23;26415:32;26412:2;;;26465:6;26457;26450:22;26412:2;26502:9;26496:16;26521:30;26545:5;26521:30;:::i;26586:257::-;;26697:2;26685:9;26676:7;26672:23;26668:32;26665:2;;;26718:6;26710;26703:22;26665:2;26762:9;26749:23;26781:32;26807:5;26781:32;:::i;26848:353::-;;;26989:2;26977:9;26968:7;26964:23;26960:32;26957:2;;;27010:6;27002;26995:22;26957:2;27038:37;27065:9;27038:37;:::i;:::-;27028:47;;27125:2;27114:9;27110:18;27097:32;27138:33;27165:5;27138:33;:::i;:::-;27190:5;27180:15;;;26947:254;;;;;:::o;27206:1565::-;;27339:2;27382;27370:9;27361:7;27357:23;27353:32;27350:2;;;27403:6;27395;27388:22;27350:2;27441:9;27435:16;-1:-1:-1;;;;;27511:2:67;27503:6;27500:14;27497:2;;;27532:6;27524;27517:22;27497:2;27560:22;;;;27616:4;27598:16;;;27594:27;27591:2;;;27639:6;27631;27624:22;27591:2;27677:4;27671:11;27721:4;27713:6;27709:17;27776:6;27764:10;27761:22;27756:2;27744:10;27741:18;27738:46;27735:2;;;27787:9;27735:2;27814:4;27807:24;27856:9;;27877:16;;;27874:2;;;27911:6;27903;27896:22;27874:2;27944:57;27993:7;27982:8;27978:2;27974:17;27944:57;:::i;:::-;27936:6;27929:73;;28041:2;28037;28033:11;28027:18;28070:2;28060:8;28057:16;28054:2;;;28091:6;28083;28076:22;28054:2;28127:8;28123:2;28119:17;28109:27;;;28174:7;28167:4;28163:2;28159:13;28155:27;28145:2;;28201:6;28193;28186:22;28145:2;28235;28229:9;28219:19;;28258:65;28273:49;28319:2;28273:49;:::i;28258:65::-;28357:15;;;28388:12;;;;28420:11;;;28458;;;28450:20;;28446:29;;28443:42;-1:-1:-1;28440:2:67;;;28503:6;28495;28488:22;28440:2;28530:6;28521:15;;28545:156;28559:2;28556:1;28553:9;28545:156;;;28616:10;;28604:23;;28577:1;28570:9;;;;;28647:12;;;;28679;;28545:156;;;-1:-1:-1;28717:15:67;;;28710:30;;;;28721:6;27319:1452;-1:-1:-1;;;;;;27319:1452:67:o;28776:766::-;;;;28980:2;28968:9;28959:7;28955:23;28951:32;28948:2;;;29001:6;28993;28986:22;28948:2;29039:9;29033:16;-1:-1:-1;;;;;29109:2:67;29101:6;29098:14;29095:2;;;29130:6;29122;29115:22;29095:2;29158:70;29220:7;29211:6;29200:9;29196:22;29158:70;:::i;:::-;29148:80;;29274:2;29263:9;29259:18;29253:25;29237:41;;29303:2;29293:8;29290:16;29287:2;;;29324:6;29316;29309:22;29287:2;;29352:72;29416:7;29405:8;29394:9;29390:24;29352:72;:::i;:::-;29342:82;;;29467:2;29456:9;29452:18;29446:25;29480:32;29506:5;29480:32;:::i;:::-;29531:5;29521:15;;;28938:604;;;;;:::o;29547:664::-;;;;29726:2;29714:9;29705:7;29701:23;29697:32;29694:2;;;29747:6;29739;29732:22;29694:2;29792:9;29779:23;-1:-1:-1;;;;;29817:6:67;29814:30;29811:2;;;29862:6;29854;29847:22;29811:2;29890:69;29951:7;29942:6;29931:9;29927:22;29890:69;:::i;:::-;29880:79;;;30009:2;29998:9;29994:18;29981:32;30022:33;30049:5;30022:33;:::i;:::-;30074:5;-1:-1:-1;30131:2:67;30116:18;;30103:32;30144:35;30103:32;30144:35;:::i;30216:1184::-;;30366:2;30354:9;30345:7;30341:23;30337:32;30334:2;;;30387:6;30379;30372:22;30334:2;30425:9;30419:16;-1:-1:-1;;;;;30495:2:67;30487:6;30484:14;30481:2;;;30516:6;30508;30501:22;30481:2;30544:22;;;;30600:6;30582:16;;;30578:29;30575:2;;;30625:6;30617;30610:22;30575:2;30656:20;30671:4;30656:20;:::i;:::-;30707:2;30701:9;30735:2;30725:8;30722:16;30719:2;;;30756:6;30748;30741:22;30719:2;30788:79;30859:7;30848:8;30844:2;30840:17;30788:79;:::i;:::-;30781:5;30774:94;;30907:2;30903;30899:11;30893:18;30936:2;30926:8;30923:16;30920:2;;;30957:6;30949;30942:22;30920:2;30998:86;31076:7;31065:8;31061:2;31057:17;30998:86;:::i;:::-;30993:2;30986:5;30982:14;30975:110;;31117:66;31175:7;31170:2;31166;31162:11;31117:66;:::i;:::-;31112:2;31105:5;31101:14;31094:90;31232:3;31228:2;31224:12;31218:19;31211:4;31204:5;31200:16;31193:45;31286:3;31282:2;31278:12;31272:19;31265:4;31258:5;31254:16;31247:45;31326:43;31364:3;31360:2;31356:12;31326:43;:::i;:::-;31319:4;31308:16;;31301:69;31312:5;30324:1076;-1:-1:-1;;;;;30324:1076:67:o;31405:1444::-;;;;31619:2;31607:9;31598:7;31594:23;31590:32;31587:2;;;31640:6;31632;31625:22;31587:2;31678:9;31672:16;-1:-1:-1;;;;;31748:2:67;31740:6;31737:14;31734:2;;;31769:6;31761;31754:22;31734:2;31797:22;;;;31853:4;31835:16;;;31831:27;31828:2;;;31876:6;31868;31861:22;31828:2;31914;31908:9;31956:4;31948:6;31944:17;32011:6;31999:10;31996:22;31991:2;31979:10;31976:18;31973:46;31970:2;;;32022:9;31970:2;32049;32042:22;32088:32;32117:2;32088:32;:::i;:::-;32080:6;32073:48;32154:44;32194:2;32190;32186:11;32154:44;:::i;:::-;32149:2;32141:6;32137:15;32130:69;32246:2;32242;32238:11;32232:18;32227:2;32219:6;32215:15;32208:43;32298:2;32294;32290:11;32284:18;32279:2;32271:6;32267:15;32260:43;32351:3;32347:2;32343:12;32337:19;32331:3;32323:6;32319:16;32312:45;32396:3;32392:2;32388:12;32382:19;32426:2;32416:8;32413:16;32410:2;;;32447:6;32439;32432:22;32410:2;32490:57;32539:7;32528:8;32524:2;32520:17;32490:57;:::i;:::-;32484:3;32472:16;;32465:83;-1:-1:-1;32619:2:67;32604:18;;32598:25;32476:6;;-1:-1:-1;32598:25:67;-1:-1:-1;32635:16:67;;;32632:2;;;32669:6;32661;32654:22;32632:2;;32697:77;32766:7;32755:8;32744:9;32740:24;32697:77;:::i;:::-;32687:87;;;32793:50;32839:2;32828:9;32824:18;32793:50;:::i;:::-;32783:60;;31577:1272;;;;;:::o;32854:194::-;;32977:2;32965:9;32956:7;32952:23;32948:32;32945:2;;;32998:6;32990;32983:22;32945:2;-1:-1:-1;33026:16:67;;32935:113;-1:-1:-1;32935:113:67:o;33053:114::-;-1:-1:-1;;;;;33129:31:67;33117:44;;33107:60::o;33172:595::-;;33295:5;33289:12;33322:6;33317:3;33310:19;33348:4;33377:2;33372:3;33368:12;33361:19;;33414:2;33407:5;33403:14;33435:3;33447:295;33461:6;33458:1;33455:13;33447:295;;;33520:13;;33562:9;;33573:6;33558:22;33546:35;;33625:11;;33619:18;-1:-1:-1;;;;;33615:44:67;33601:12;;;33594:66;33689:4;33680:14;;;;33717:15;;;;33656:1;33476:9;33447:295;;;-1:-1:-1;33758:3:67;;33265:502;-1:-1:-1;;;;;33265:502:67:o;33772:560::-;;33873:5;33867:12;33900:6;33895:3;33888:19;33926:4;33955:2;33950:3;33946:12;33939:19;;33992:2;33985:5;33981:14;34013:3;34025:282;34039:6;34036:1;34033:13;34025:282;;;34098:13;;34136:9;;34124:22;;34190:11;;34184:18;-1:-1:-1;;;;;34180:44:67;34166:12;;;34159:66;34254:4;34245:14;;;;34282:15;;;;34221:1;34054:9;34025:282;;34337:833;;34444:5;34438:12;34471:6;34466:3;34459:19;34497:4;34538:2;34533:3;34529:12;34563:11;34590;34583:18;;34645:2;34637:6;34633:15;34626:5;34622:27;34610:39;;34683:2;34676:5;34672:14;34704:3;34716:428;34730:6;34727:1;34724:13;34716:428;;;34791:16;;;34779:29;;34831:13;;34897:9;;34884:23;;34946:11;;34940:18;34867:4;34978:13;;;34971:25;;;35017:47;35050:13;;;34940:18;35017:47;:::i;:::-;35122:12;;;;35009:55;-1:-1:-1;;;35087:15:67;;;;34752:1;34745:9;34716:428;;;-1:-1:-1;35160:4:67;;34414:756;-1:-1:-1;;;;;;;34414:756:67:o;35175:1760::-;;35285:5;35279:12;35312:6;35307:3;35300:19;35338:4;35367:2;35362:3;35358:12;35351:19;;35392:3;35437:2;35429:6;35425:15;35420:3;35416:25;35475:2;35468:5;35464:14;35496:3;35508:1401;35522:6;35519:1;35516:13;35508:1401;;;35593:5;35587:4;35583:16;35578:3;35571:29;35629:6;35623:13;35659:6;35678:38;35711:4;35706:2;35700:9;35678:38;:::i;:::-;35757:11;;;35751:18;35736:13;;;35729:41;35793:4;35838:11;;;35832:18;35817:13;;;35810:41;35874:4;35919:11;;;35913:18;35898:13;;;35891:41;35955:4;36000:11;;;35994:18;35979:13;;;35972:41;36036:4;36079:11;;;36073:18;36104:57;36147:13;;;36073:18;36104:57;:::i;:::-;;;36184:4;36237:2;36233;36229:11;36223:18;36276:2;36271;36265:4;36261:13;36254:25;36306:49;36351:2;36345:4;36341:13;36325:14;36306:49;:::i;:::-;36378:4;36423:11;;;36417:18;36402:13;;;36395:41;36460:6;36508:12;;;36502:19;36486:14;;;36479:43;36546:6;36594:12;;;36588:19;36572:14;;;36565:43;36632:6;36679:12;;;36673:19;36728:17;;;36712:14;;;36705:41;;;;36292:63;-1:-1:-1;36767:62:67;;-1:-1:-1;36292:63:67;;-1:-1:-1;36673:19:67;36767:62;:::i;:::-;36887:12;;;;36759:70;-1:-1:-1;;;36852:15:67;;;;35544:1;35537:9;35508:1401;;36940:93;37012:13;37005:21;36993:34;;36983:50::o;37038:259::-;;37119:5;37113:12;37146:6;37141:3;37134:19;37162:63;37218:6;37211:4;37206:3;37202:14;37195:4;37188:5;37184:16;37162:63;:::i;:::-;37279:2;37258:15;-1:-1:-1;;37254:29:67;37245:39;;;;37286:4;37241:50;;37089:208;-1:-1:-1;;37089:208:67:o;37302:127::-;37379:1;37372:5;37369:12;37359:2;;37385:9;37359:2;37405:18;;37349:80::o;37434:129::-;37513:1;37506:5;37503:12;37493:2;;37519:9;37568:2229;;37663:5;37657:12;37690:4;37685:3;37678:17;37704:65;37763:4;37758:3;37754:14;37739:12;37733:19;37704:65;:::i;:::-;37824:4;37810:12;37806:23;37800:30;37849:3;37861:53;37910:2;37905:3;37901:12;37885:14;37861:53;:::i;:::-;37969:4;37955:12;37951:23;37945:30;37923:52;;37994:3;38006:58;38060:2;38055:3;38051:12;38035:14;38006:58;:::i;:::-;38119:4;38105:12;38101:23;38095:30;38073:52;;38144:3;38156:58;38210:2;38205:3;38201:12;38185:14;38156:58;:::i;:::-;38257:4;38243:12;38239:23;38233:30;38223:40;;38282:3;38315:2;38310;38305:3;38301:12;38294:24;38361:4;38347:12;38343:23;38337:30;38327:40;;38386:3;38419:2;38414;38409:3;38405:12;38398:24;38477:4;38463:12;38459:23;38453:30;38431:52;;38502:6;38517:58;38571:2;38566:3;38562:12;38546:14;38517:58;:::i;:::-;38630:4;38616:12;38612:23;38606:30;38600:3;38595;38591:13;38584:53;38692:2;38678:12;38674:21;38668:28;38662:3;38657;38653:13;38646:51;38752:2;38738:12;38734:21;38728:28;38722:3;38717;38713:13;38706:51;38812:2;38798:12;38794:21;38788:28;38766:50;;38847:2;38841:3;38836;38832:13;38825:25;;38871:91;38957:3;38952;38948:13;38932:14;38871:91;:::i;:::-;38999:21;;;38993:28;38987:3;38978:13;;38971:51;39059:21;;;39053:28;39116:14;;;-1:-1:-1;;39112:29:67;39106:3;39097:13;;39090:52;39053:28;38859:103;-1:-1:-1;39164:40:67;;-1:-1:-1;38859:103:67;;-1:-1:-1;39053:28:67;;-1:-1:-1;39164:40:67;:::i;:::-;39151:53;;;39252:4;39245:5;39241:16;39235:23;39267:50;39311:4;39306:3;39302:14;39286;39267:50;:::i;:::-;;39366:4;39359:5;39355:16;39349:23;39342:4;39337:3;39333:14;39326:47;39422:4;39415:5;39411:16;39405:23;39398:4;39393:3;39389:14;39382:47;39477:4;39470:5;39466:16;39460:23;39526:3;39519:5;39515:15;39508:4;39503:3;39499:14;39492:39;39554:41;39589:5;39573:14;39554:41;:::i;:::-;39540:55;;;39643:4;39636:5;39632:16;39626:23;39658:55;39707:4;39702:3;39698:14;39682;39658:55;:::i;:::-;;39762:4;39755:5;39751:16;39745:23;39738:4;39733:3;39729:14;39722:47;39785:6;39778:13;;;37627:2170;;;;:::o;39802:422::-;39883:12;;39871:25;;39945:4;39934:16;;;39928:23;39912:14;;;39905:47;40001:4;39990:16;;;39984:23;39968:14;;;39961:47;40057:4;40046:16;;;40040:23;40024:14;;;40017:47;40117:4;40106:16;;;40100:23;-1:-1:-1;;;;;40096:49:67;40080:14;;;40073:73;40133:3;40198:16;;;40192:23;40185:31;40178:39;40162:14;;40155:63;39861:363::o;40229:77::-;40298:4;40287:16;40275:29;;40273:33::o;40311:274::-;;40478:6;40472:13;40494:53;40540:6;40535:3;40528:4;40520:6;40516:17;40494:53;:::i;:::-;40563:16;;;;;40448:137;-1:-1:-1;;40448:137:67:o;40590:203::-;-1:-1:-1;;;;;40754:32:67;;;;40736:51;;40724:2;40709:18;;40691:102::o;41014:391::-;-1:-1:-1;;;;;41288:15:67;;;41270:34;;41340:15;;;;41335:2;41320:18;;41313:43;41387:2;41372:18;;41365:34;;;;41220:2;41205:18;;41187:218::o;41410:646::-;-1:-1:-1;;;;;41777:15:67;;;41759:34;;41829:15;;;;41824:2;41809:18;;41802:43;41876:2;41861:18;;41854:34;41919:2;41904:18;;41897:34;;;;41739:3;41962;41947:19;;41940:32;;;41410:646;41988:19;;;41981:33;42046:3;42031:19;;41711:345::o;42061:282::-;-1:-1:-1;;;;;42261:32:67;;;;42243:51;;42325:2;42310:18;;42303:34;42231:2;42216:18;;42198:145::o;42627:187::-;42792:14;;42785:22;42767:41;;42755:2;42740:18;;42722:92::o;42819:202::-;-1:-1:-1;;;;;;42981:33:67;;;;42963:52;;42951:2;42936:18;;42918:103::o;43026:356::-;43228:2;43210:21;;;43247:18;;;43240:30;43306:34;43301:2;43286:18;;43279:62;43373:2;43358:18;;43200:182::o;43387:356::-;43589:2;43571:21;;;43608:18;;;43601:30;43667:34;43662:2;43647:18;;43640:62;43734:2;43719:18;;43561:182::o;43748:354::-;43950:2;43932:21;;;43989:2;43969:18;;;43962:30;44028:32;44023:2;44008:18;;44001:60;44093:2;44078:18;;43922:180::o;44107:351::-;44309:2;44291:21;;;44348:2;44328:18;;;44321:30;44387:29;44382:2;44367:18;;44360:57;44449:2;44434:18;;44281:177::o;44463:347::-;44665:2;44647:21;;;44704:2;44684:18;;;44677:30;44743:25;44738:2;44723:18;;44716:53;44801:2;44786:18;;44637:173::o;44815:352::-;45017:2;44999:21;;;45056:2;45036:18;;;45029:30;45095;45090:2;45075:18;;45068:58;45158:2;45143:18;;44989:178::o;45172:344::-;45374:2;45356:21;;;45413:2;45393:18;;;45386:30;-1:-1:-1;;;45447:2:67;45432:18;;45425:50;45507:2;45492:18;;45346:170::o;45521:351::-;45723:2;45705:21;;;45762:2;45742:18;;;45735:30;45801:29;45796:2;45781:18;;45774:57;45863:2;45848:18;;45695:177::o;45877:350::-;46079:2;46061:21;;;46118:2;46098:18;;;46091:30;46157:28;46152:2;46137:18;;46130:56;46218:2;46203:18;;46051:176::o;46232:349::-;46434:2;46416:21;;;46473:2;46453:18;;;46446:30;46512:27;46507:2;46492:18;;46485:55;46572:2;46557:18;;46406:175::o;46586:345::-;46788:2;46770:21;;;46827:2;46807:18;;;46800:30;-1:-1:-1;;;46861:2:67;46846:18;;46839:51;46922:2;46907:18;;46760:171::o;46936:351::-;47138:2;47120:21;;;47177:2;47157:18;;;47150:30;47216:29;47211:2;47196:18;;47189:57;47278:2;47263:18;;47110:177::o;47292:356::-;47494:2;47476:21;;;47513:18;;;47506:30;47572:34;47567:2;47552:18;;47545:62;47639:2;47624:18;;47466:182::o;47653:351::-;47855:2;47837:21;;;47894:2;47874:18;;;47867:30;47933:29;47928:2;47913:18;;47906:57;47995:2;47980:18;;47827:177::o;48009:356::-;48211:2;48193:21;;;48230:18;;;48223:30;48289:34;48284:2;48269:18;;48262:62;48356:2;48341:18;;48183:182::o;48370:348::-;48572:2;48554:21;;;48611:2;48591:18;;;48584:30;48650:26;48645:2;48630:18;;48623:54;48709:2;48694:18;;48544:174::o;48723:349::-;48925:2;48907:21;;;48964:2;48944:18;;;48937:30;49003:27;48998:2;48983:18;;48976:55;49063:2;49048:18;;48897:175::o;49077:351::-;49279:2;49261:21;;;49318:2;49298:18;;;49291:30;49357:29;49352:2;49337:18;;49330:57;49419:2;49404:18;;49251:177::o;49433:342::-;49635:2;49617:21;;;49674:2;49654:18;;;49647:30;-1:-1:-1;;;49708:2:67;49693:18;;49686:48;49766:2;49751:18;;49607:168::o;49780:350::-;49982:2;49964:21;;;50021:2;50001:18;;;49994:30;50060:28;50055:2;50040:18;;50033:56;50121:2;50106:18;;49954:176::o;50135:348::-;50337:2;50319:21;;;50376:2;50356:18;;;50349:30;50415:26;50410:2;50395:18;;50388:54;50474:2;50459:18;;50309:174::o;50488:348::-;50690:2;50672:21;;;50729:2;50709:18;;;50702:30;50768:26;50763:2;50748:18;;50741:54;50827:2;50812:18;;50662:174::o;50841:457::-;;51094:2;51083:9;51076:21;51120:54;51170:2;51159:9;51155:18;51147:6;51120:54;:::i;:::-;51222:9;51214:6;51210:22;51205:2;51194:9;51190:18;51183:50;51250:42;51285:6;51277;51250:42;:::i;:::-;51242:50;51066:232;-1:-1:-1;;;;;51066:232:67:o;51303:3063::-;;51478:2;51507;51496:9;51489:21;51529:3;51570:2;51559:9;51555:18;51608:6;51602:13;51634:6;51676:2;51671;51660:9;51656:18;51649:30;51699:6;51734:12;51728:19;51771:6;51763;51756:22;51797:3;51787:13;;51831:2;51820:9;51816:18;51809:25;;51894:2;51888;51880:6;51876:15;51865:9;51861:31;51857:40;51938:2;51924:12;51920:21;51906:35;;51959:4;51972:1760;51986:6;51983:1;51980:13;51972:1760;;;52051:22;;;-1:-1:-1;;52047:37:67;52035:50;;52108:13;;52149:9;;52134:25;;52200:11;;;52194:18;52225:61;52270:15;;;52194:18;52225:61;:::i;:::-;-1:-1:-1;52309:4:67;52356:11;;;52350:18;52333:15;;;52326:43;52392:4;52439:11;;;52433:18;52416:15;;;52409:43;52475:4;52522:11;;;52516:18;52499:15;;;52492:43;52558:4;52605:11;;;52599:18;52582:15;;;52575:43;52642:4;52687:12;;;52681:19;52713:62;52758:16;;;52681:19;52713:62;:::i;:::-;;;52799:4;52852:3;52848:2;52844:12;52838:19;52895:2;52889:3;52881:6;52877:16;52870:28;52925:51;52972:2;52964:6;52960:15;52944:14;52925:51;:::i;:::-;52911:65;;;53000:6;53055:3;53051:2;53047:12;53041:19;53110:6;53102;53098:19;53092:3;53084:6;53080:16;53073:45;53145:68;53206:6;53190:14;53145:68;:::i;:::-;53131:82;;;;53237:6;53295:3;53291:2;53287:12;53281:19;53275:3;53267:6;53263:16;53256:45;;53325:6;53383:3;53379:2;53375:12;53369:19;53363:3;53355:6;53351:16;53344:45;;53438:2;53434;53430:11;53424:18;53455:51;53502:2;53494:6;53490:15;53474:14;53455:51;:::i;:::-;-1:-1:-1;53547:11:67;;;53541:18;;53572:51;53607:15;;;53541:18;53572:51;:::i;:::-;53675:15;;;;53710:12;;;;53646:6;-1:-1:-1;;52008:1:67;52001:9;51972:1760;;;-1:-1:-1;53769:15:67;;;53763:22;53827;;;-1:-1:-1;;53823:36:67;53816:4;53801:20;;53794:66;53763:22;53883:71;53831:6;53763:22;53883:71;:::i;:::-;53869:85;;;;;54003:4;53995:6;53991:17;53985:24;53963:46;;54018:71;54083:4;54072:9;54068:20;54052:14;54018:71;:::i;:::-;54147:4;54139:6;54135:17;54129:24;54120:6;54109:9;54105:22;54098:56;54212:4;54204:6;54200:17;54194:24;54185:6;54174:9;54170:22;54163:56;54268:4;54260:6;54256:17;54250:24;54228:46;;54283:54;54333:2;54322:9;54318:18;54302:14;54283:54;:::i;:::-;-1:-1:-1;54354:6:67;;51458:2908;-1:-1:-1;;;;;;51458:2908:67:o;54371:2370::-;;54644:2;54633:9;54626:21;54666:3;54725:6;54719:13;54712:21;54705:29;54700:2;54689:9;54685:18;54678:57;54818:1;54814;54809:3;54805:11;54801:19;54793:4;54785:6;54781:17;54775:24;54771:50;54766:2;54755:9;54751:18;54744:78;54877:2;54869:6;54865:15;54859:22;54853:3;54842:9;54838:19;54831:51;54937:2;54929:6;54925:15;54919:22;54913:3;54902:9;54898:19;54891:51;54998:3;54990:6;54986:16;54980:23;54973:4;54962:9;54958:20;54951:53;55051:3;55043:6;55039:16;55033:23;55093:4;55087:3;55076:9;55072:19;55065:33;55118:52;55166:2;55155:9;55151:18;55137:12;55118:52;:::i;:::-;55107:63;;55217:9;55212:3;55208:19;55201:4;55190:9;55186:20;55179:49;55247:6;55262:37;55295:3;55286:6;55280:13;55262:37;:::i;:::-;55348:4;55340:6;55336:17;55330:24;55363:60;55417:4;55412:3;55408:14;55392;55363:60;:::i;:::-;;55472:2;55464:6;55460:15;55454:22;55485:58;55539:2;55534:3;55530:12;55514:14;55485:58;:::i;:::-;;55591:2;55583:6;55579:15;55573:22;55568:2;55563:3;55559:12;55552:44;55645:3;55637:6;55633:16;55627:23;55621:3;55616;55612:13;55605:46;55700:3;55692:6;55688:16;55682:23;55676:3;55671;55667:13;55660:46;55755:4;55747:6;55743:17;55737:24;55770:60;55824:4;55819:3;55815:14;55799;55770:60;:::i;:::-;;55879:3;55871:6;55867:16;55861:23;55893:59;55947:3;55942;55938:13;55922:14;55893:59;:::i;:::-;-1:-1:-1;55988:15:67;;;55982:22;55968:12;;;55961:44;;;;56024:6;56066:15;;;56060:22;56046:12;;;56039:44;56102:6;56144:15;;;56138:22;56124:12;;;56117:44;56180:6;56222:15;;;56216:22;56202:12;;;56195:44;56258:6;56301:15;;;56295:22;56333:12;;;56326:24;;;56258:6;;56347:2;56373:48;56408:12;;;56295:22;56373:48;:::i;:::-;56359:62;;;;56440:6;56495:2;56487:6;56483:15;56477:22;56508:48;56552:2;56547:3;56543:12;56527:14;56508:48;:::i;:::-;-1:-1:-1;;56575:6:67;56617:15;;;56611:22;56597:12;;;56590:44;56653:6;56695:15;;;56689:22;56675:12;;56668:44;;;;-1:-1:-1;56729:6:67;;54616:2125;-1:-1:-1;;54616:2125:67:o;56746:242::-;56816:2;56810:9;56846:17;;;-1:-1:-1;;;;;56878:34:67;;56914:22;;;56875:62;56872:2;;;56940:9;56872:2;56967;56960:22;56790:198;;-1:-1:-1;56790:198:67:o;56993:183::-;;-1:-1:-1;;;;;57084:6:67;57081:30;57078:2;;;57114:9;57078:2;-1:-1:-1;57165:4:67;57146:17;;;57142:28;;57068:108::o;57181:181::-;;-1:-1:-1;;;;;57256:6:67;57253:30;57250:2;;;57286:9;57250:2;-1:-1:-1;57345:2:67;57322:17;-1:-1:-1;;57318:31:67;57351:4;57314:42;;57240:122::o;57367:258::-;57439:1;57449:113;57463:6;57460:1;57457:13;57449:113;;;57539:11;;;57533:18;57520:11;;;57513:39;57485:2;57478:10;57449:113;;;57580:6;57577:1;57574:13;57571:2;;;-1:-1:-1;;57615:1:67;57597:16;;57590:27;57420:205::o;57630:133::-;-1:-1:-1;;;;;57707:31:67;;57697:42;;57687:2;;57753:1;57750;57743:12;57768:120;57856:5;57849:13;57842:21;57835:5;57832:32;57822:2;;57878:1;57875;57868:12;57893:133;-1:-1:-1;;;;;;57969:32:67;;57959:43;;57949:2;;58016:1;58013;58006:12", + "source": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\n// import \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\n// import \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol\";\n// import \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol\";\n// import \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"./interfaces/IWyvernExchange.sol\";\nimport \"./interfaces/IExchangeV2.sol\";\nimport \"./interfaces/ISeaPort.sol\";\nimport \"./interfaces/Ix2y2.sol\";\nimport \"./interfaces/ILooksRare.sol\";\nimport \"./interfaces/IBlur.sol\";\n\n// import \"./libraries/IsPausable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n// contract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\ncontract RaribleExchangeWrapperUpgradeable is Initializable, OwnableUpgradeable, ERC721HolderUpgradeable, ERC1155HolderUpgradeable, PausableUpgradeable {\n using LibTransfer for address;\n using BpLibrary for uint256;\n using SafeMathUpgradeable for uint256;\n\n //marketplaces\n address public wyvernExchange;\n address public exchangeV2;\n address public seaPort_1_1;\n address public x2y2;\n address public looksRare;\n address public sudoswap;\n address public seaPort_1_4;\n address public looksRareV2;\n address public blur;\n address public seaPort_1_5;\n address public seaPort_1_6;\n\n //currencties\n address public weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n event MarketplaceAddressUpdated(Markets indexed _type, address indexed _newAddress);\n\n enum Markets {\n ExchangeV2, //0\n WyvernExchange, //1\n SeaPort_1_1, //2\n X2Y2, //3\n LooksRareOrders, //4\n SudoSwap, //5\n SeaPort_1_4, //6\n LooksRareV2, //7\n Blur, //8\n SeaPort_1_5, //9\n SeaPort_1_6 //10\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint256 fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint256[] additionalRoyalties;\n }\n\n /**\n @notice initializes the proxy contract\n @param _marketplaces - array of addresses of the marketplaces\n @param _weth - address of the WETH erc-20 token\n @param _transferProxies - array of addresses of the transfer proxies\n @param _initialOwner - address of the owner\n */\n function __ExchangeWrapper_init_proxy(\n address[11] memory _marketplaces,\n address _weth,\n address[] memory _transferProxies,\n address _initialOwner\n ) public initializer {\n __Ownable_init();\n __ERC721Holder_init();\n __ERC1155Holder_init();\n __Pausable_init();\n\n wyvernExchange = _marketplaces[0];\n exchangeV2 = _marketplaces[1];\n seaPort_1_1 = _marketplaces[2];\n x2y2 = _marketplaces[3];\n looksRare = _marketplaces[4];\n sudoswap = _marketplaces[5];\n seaPort_1_4 = _marketplaces[6];\n looksRareV2 = _marketplaces[7];\n blur = _marketplaces[8];\n seaPort_1_5 = _marketplaces[9];\n seaPort_1_6 = _marketplaces[10];\n\n weth = _weth;\n\n for (uint256 i = 0; i < _transferProxies.length; ++i) {\n if (weth != address(0)) {\n IERC20Upgradeable(weth).approve(_transferProxies[i], UINT256_MAX);\n }\n }\n\n transferOwnership(_initialOwner);\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(\n PurchaseDetails memory purchaseDetails,\n address feeRecipientFirst,\n address feeRecipientSecond\n ) external payable whenNotPaused {\n //amount of WETH needed for purchases:\n uint256 wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint256 firstFeeAmount;\n uint256 secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n\n emit Execution(success);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n\n function bulkPurchase(\n PurchaseDetails[] memory purchaseDetails,\n address feeRecipientFirst,\n address feeRecipientSecond,\n bool allowFail\n ) external payable whenNotPaused {\n uint256 sumFirstFeesETH = 0;\n uint256 sumSecondFeesETH = 0;\n uint256 sumFirstFeesWETH = 0;\n uint256 sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases:\n uint256 wethAmountNeeded = 0;\n for (uint256 i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint256 i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint256 firstFeeAmount;\n uint256 secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n\n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail)\n internal\n returns (\n bool,\n uint256,\n uint256\n )\n {\n (bytes memory marketData, uint256[] memory additionalRoyalties) = getDataAndAdditionalData(purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint256 paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1) {\n (bool success, ) = address(seaPort_1_1).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success, ) = address(wyvernExchange).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success, ) = address(exchangeV2).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value: paymentAmount}(input) {} catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value: paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint256 i = 0; i < input.details.length; ++i) {\n uint256 orderId = input.details[i].orderIdx;\n uint256 itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value: paymentAmount}(takerOrder, makerOrder) {} catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value: paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success, ) = address(sudoswap).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4) {\n (bool success, ) = address(seaPort_1_4).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2) {\n (bool success, ) = address(looksRareV2).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur) {\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value: paymentAmount}(sell, buy) {} catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value: paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5) {\n (bool success, ) = address(seaPort_1_5).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6) {\n (bool success, ) = address(seaPort_1_6).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed\");\n }\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n\n (uint256 firstFeeAmount, uint256 secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail)\n internal\n returns (\n bool,\n uint256,\n uint256\n )\n {\n (bytes memory marketData, uint256[] memory additionalRoyalties) = getDataAndAdditionalData(purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1) {\n (bool success, ) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success, ) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4) {\n (bool success, ) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5) {\n (bool success, ) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6) {\n (bool success, ) = address(seaPort_1_6).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n\n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint256 firstFeeAmount, uint256 secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint256 feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint256 feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint256 ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint256 wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint256 fees, uint256 amount) internal pure returns (uint256, uint256) {\n uint256 firstFee = uint256(uint16(fees >> 16));\n uint256 secondFee = uint256(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint256 fees) internal pure returns (Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData(\n bytes memory _data,\n uint256 feesAndDataType,\n Markets marketId\n ) internal pure returns (bytes memory, uint256[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint256[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n }\n }\n\n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH(uint256[] memory _additionalRoyalties, uint256 amount) internal {\n for (uint256 i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint256 basePoint = uint256(_additionalRoyalties[i] >> 160);\n uint256 value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH(uint256[] memory _additionalRoyalties, uint256 amount) internal {\n for (uint256 i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint256 basePoint = uint256(_additionalRoyalties[i] >> 160);\n uint256 value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool) {\n if (marketId == Markets.SudoSwap || marketId == Markets.LooksRareOrders || marketId == Markets.LooksRareV2) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint256) {\n uint256 result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint256 firstFeeAmount, uint256 secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint256[] memory royalties) = getDataAndAdditionalData(detail.data, detail.fees, detail.marketId);\n for (uint256 j = 0; j < royalties.length; ++j) {\n uint256 royaltyBasePoint = uint256(royalties[j] >> 160);\n uint256 royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint256 i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n /**\n * @notice updates the address of the marketplace\n * @param _type - type of the marketplace\n * @param _newAddress - new address of the marketplace\n */\n function updateMarketplaceAddress(Markets _type, address _newAddress) external onlyOwner {\n require(_newAddress != address(0), \"New address cannot be zero\");\n\n if (_type == Markets.WyvernExchange) {\n wyvernExchange = _newAddress;\n } else if (_type == Markets.ExchangeV2) {\n exchangeV2 = _newAddress;\n } else if (_type == Markets.SeaPort_1_1) {\n seaPort_1_1 = _newAddress;\n } else if (_type == Markets.X2Y2) {\n x2y2 = _newAddress;\n } else if (_type == Markets.LooksRareOrders) {\n looksRare = _newAddress;\n } else if (_type == Markets.SudoSwap) {\n sudoswap = _newAddress;\n } else if (_type == Markets.SeaPort_1_4) {\n seaPort_1_4 = _newAddress;\n } else if (_type == Markets.LooksRareV2) {\n looksRareV2 = _newAddress;\n } else if (_type == Markets.Blur) {\n blur = _newAddress;\n } else if (_type == Markets.SeaPort_1_5) {\n seaPort_1_5 = _newAddress;\n } else if (_type == Markets.SeaPort_1_6) {\n seaPort_1_6 = _newAddress;\n } else {\n revert(\"Invalid marketplace type\");\n }\n\n emit MarketplaceAddressUpdated(_type, _newAddress);\n }\n\n receive() external payable {}\n\n uint256[50] private __gap;\n}\n", + "sourcePath": "/Users/gonzaotc/developer/github/rarible/protocol-contracts/projects/exchange-wrapper/contracts/RaribleExchangeWrapperUpgradeable.sol", + "ast": { + "absolutePath": "project:/contracts/RaribleExchangeWrapperUpgradeable.sol", + "exportedSymbols": { + "AddressUpgradeable": [ + 1600 + ], + "AssetMatcher": [ + 2132 + ], + "BpLibrary": [ + 4934 + ], + "ContextUpgradeable": [ + 1645 + ], + "EIP712Upgradeable": [ + 290 + ], + "ERC1155HolderUpgradeable": [ + 877 + ], + "ERC1155ReceiverUpgradeable": [ + 932 + ], + "ERC165Upgradeable": [ + 365 + ], + "ERC20TransferProxy": [ + 7868 + ], + "ERC721HolderUpgradeable": [ + 1222 + ], + "ExchangeV2": [ + 2257 + ], + "ExchangeV2Core": [ + 3234 + ], + "IAssetMatcher": [ + 1772 + ], + "IBlur": [ + 10450 + ], + "IERC1155ReceiverUpgradeable": [ + 973 + ], + "IERC1155Upgradeable": [ + 1095 + ], + "IERC1271": [ + 4979 + ], + "IERC165Upgradeable": [ + 377 + ], + "IERC20TransferProxy": [ + 1788 + ], + "IERC20Upgradeable": [ + 1173 + ], + "IERC721ReceiverUpgradeable": [ + 1240 + ], + "IERC721Upgradeable": [ + 1356 + ], + "IExchangeV2": [ + 10477 + ], + "ILooksRare": [ + 10503 + ], + "INftTransferProxy": [ + 1820 + ], + "IRoyaltiesProvider": [ + 1835 + ], + "ISeaPort": [ + 10558 + ], + "ITransferExecutor": [ + 7665 + ], + "ITransferManager": [ + 7686 + ], + "ITransferProxy": [ + 1849 + ], + "IWyvernExchange": [ + 10620 + ], + "Initializable": [ + 798 + ], + "Ix2y2": [ + 10740 + ], + "LibAsset": [ + 4909 + ], + "LibDeal": [ + 7708 + ], + "LibDirectTransfer": [ + 3436 + ], + "LibERC1155LazyMint": [ + 4648 + ], + "LibERC721LazyMint": [ + 4796 + ], + "LibFeeSide": [ + 7783 + ], + "LibFill": [ + 3597 + ], + "LibLooksRare": [ + 10848 + ], + "LibMath": [ + 3794 + ], + "LibOrder": [ + 4037 + ], + "LibOrderData": [ + 4432 + ], + "LibOrderDataV1": [ + 4452 + ], + "LibOrderDataV2": [ + 4474 + ], + "LibOrderDataV3": [ + 4496 + ], + "LibPart": [ + 4966 + ], + "LibSeaPort": [ + 11042 + ], + "LibSignature": [ + 5131 + ], + "LibTransfer": [ + 7808 + ], + "OrderValidator": [ + 3370 + ], + "OwnableUpgradeable": [ + 130 + ], + "PausableUpgradeable": [ + 1758 + ], + "RaribleExchangeWrapperUpgradeable": [ + 10382 + ], + "RaribleTransferManager": [ + 7309 + ], + "RoyaltiesRegistry": [ + 6062 + ], + "SafeMathUpgradeable": [ + 732 + ], + "TransferExecutor": [ + 7649 + ], + "TransferProxy": [ + 7955 + ] + }, + "id": 10383, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 7957, + "literals": [ + "solidity", + "0.7", + ".6" + ], + "nodeType": "PragmaDirective", + "src": "33:22:58" + }, + { + "id": 7958, + "literals": [ + "abicoder", + "v2" + ], + "nodeType": "PragmaDirective", + "src": "56:19:58" + }, + { + "absolutePath": "@rarible/transfer-manager/contracts/lib/LibTransfer.sol", + "file": "@rarible/transfer-manager/contracts/lib/LibTransfer.sol", + "id": 7959, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 7809, + "src": "77:65:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@rarible/lib-bp/contracts/BpLibrary.sol", + "file": "@rarible/lib-bp/contracts/BpLibrary.sol", + "id": 7960, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 4935, + "src": "143:49:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@rarible/lib-part/contracts/LibPart.sol", + "file": "@rarible/lib-part/contracts/LibPart.sol", + "id": 7961, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 4967, + "src": "193:49:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol", + "id": 7962, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 733, + "src": "299:74:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol", + "id": 7963, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 1223, + "src": "442:86:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol", + "id": 7964, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 878, + "src": "598:88:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol", + "id": 7965, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 1174, + "src": "770:79:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "project:/contracts/interfaces/IWyvernExchange.sol", + "file": "./interfaces/IWyvernExchange.sol", + "id": 7966, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 10621, + "src": "851:42:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "project:/contracts/interfaces/IExchangeV2.sol", + "file": "./interfaces/IExchangeV2.sol", + "id": 7967, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 10478, + "src": "894:38:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "project:/contracts/interfaces/ISeaPort.sol", + "file": "./interfaces/ISeaPort.sol", + "id": 7968, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 10559, + "src": "933:35:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "project:/contracts/interfaces/Ix2y2.sol", + "file": "./interfaces/Ix2y2.sol", + "id": 7969, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 10741, + "src": "969:32:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "project:/contracts/interfaces/ILooksRare.sol", + "file": "./interfaces/ILooksRare.sol", + "id": 7970, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 10504, + "src": "1002:37:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "project:/contracts/interfaces/IBlur.sol", + "file": "./interfaces/IBlur.sol", + "id": 7971, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 10451, + "src": "1040:32:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", + "id": 7972, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 1759, + "src": "1114:75:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "id": 7973, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 131, + "src": "1191:75:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol", + "file": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol", + "id": 7974, + "nodeType": "ImportDirective", + "scope": 10383, + "sourceUnit": 799, + "src": "1267:69:58", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 7975, + "name": "Initializable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 798, + "src": "1473:13:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Initializable_$798", + "typeString": "contract Initializable" + } + }, + "id": 7976, + "nodeType": "InheritanceSpecifier", + "src": "1473:13:58" + }, + { + "baseName": { + "id": 7977, + "name": "OwnableUpgradeable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 130, + "src": "1488:18:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_OwnableUpgradeable_$130", + "typeString": "contract OwnableUpgradeable" + } + }, + "id": 7978, + "nodeType": "InheritanceSpecifier", + "src": "1488:18:58" + }, + { + "baseName": { + "id": 7979, + "name": "ERC721HolderUpgradeable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1222, + "src": "1508:23:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC721HolderUpgradeable_$1222", + "typeString": "contract ERC721HolderUpgradeable" + } + }, + "id": 7980, + "nodeType": "InheritanceSpecifier", + "src": "1508:23:58" + }, + { + "baseName": { + "id": 7981, + "name": "ERC1155HolderUpgradeable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 877, + "src": "1533:24:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC1155HolderUpgradeable_$877", + "typeString": "contract ERC1155HolderUpgradeable" + } + }, + "id": 7982, + "nodeType": "InheritanceSpecifier", + "src": "1533:24:58" + }, + { + "baseName": { + "id": 7983, + "name": "PausableUpgradeable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1758, + "src": "1559:19:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_PausableUpgradeable_$1758", + "typeString": "contract PausableUpgradeable" + } + }, + "id": 7984, + "nodeType": "InheritanceSpecifier", + "src": "1559:19:58" + } + ], + "contractDependencies": [ + 130, + 365, + 377, + 798, + 877, + 932, + 973, + 1222, + 1240, + 1645, + 1758 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 10382, + "linearizedBaseContracts": [ + 10382, + 1758, + 877, + 932, + 973, + 365, + 377, + 1222, + 1240, + 130, + 1645, + 798 + ], + "name": "RaribleExchangeWrapperUpgradeable", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 7987, + "libraryName": { + "id": 7985, + "name": "LibTransfer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 7808, + "src": "1591:11:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_LibTransfer_$7808", + "typeString": "library LibTransfer" + } + }, + "nodeType": "UsingForDirective", + "src": "1585:30:58", + "typeName": { + "id": 7986, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1607:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + { + "id": 7990, + "libraryName": { + "id": 7988, + "name": "BpLibrary", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4934, + "src": "1626:9:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BpLibrary_$4934", + "typeString": "library BpLibrary" + } + }, + "nodeType": "UsingForDirective", + "src": "1620:28:58", + "typeName": { + "id": 7989, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1640:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "id": 7993, + "libraryName": { + "id": 7991, + "name": "SafeMathUpgradeable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 732, + "src": "1659:19:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeMathUpgradeable_$732", + "typeString": "library SafeMathUpgradeable" + } + }, + "nodeType": "UsingForDirective", + "src": "1653:38:58", + "typeName": { + "id": 7992, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1683:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "constant": false, + "functionSelector": "c9f0a2fa", + "id": 7995, + "mutability": "mutable", + "name": "wyvernExchange", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "1716:29:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 7994, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1716:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "a05f32dc", + "id": 7997, + "mutability": "mutable", + "name": "exchangeV2", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "1751:25:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 7996, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1751:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "008534f7", + "id": 7999, + "mutability": "mutable", + "name": "seaPort_1_1", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "1782:26:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 7998, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1782:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "fc40c9c7", + "id": 8001, + "mutability": "mutable", + "name": "x2y2", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "1814:19:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8000, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1814:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "9110c777", + "id": 8003, + "mutability": "mutable", + "name": "looksRare", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "1839:24:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8002, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1839:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "5ea1e4c9", + "id": 8005, + "mutability": "mutable", + "name": "sudoswap", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "1869:23:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8004, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1869:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "bd4486ee", + "id": 8007, + "mutability": "mutable", + "name": "seaPort_1_4", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "1898:26:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8006, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1898:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "3733b82b", + "id": 8009, + "mutability": "mutable", + "name": "looksRareV2", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "1930:26:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8008, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1930:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "df6c2558", + "id": 8011, + "mutability": "mutable", + "name": "blur", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "1962:19:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8010, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1962:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "349d6a85", + "id": 8013, + "mutability": "mutable", + "name": "seaPort_1_5", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "1987:26:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8012, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1987:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "f66ac0cb", + "id": 8015, + "mutability": "mutable", + "name": "seaPort_1_6", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "2019:26:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8014, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2019:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "3fc8cef3", + "id": 8017, + "mutability": "mutable", + "name": "weth", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "2070:19:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8016, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2070:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": true, + "id": 8024, + "mutability": "constant", + "name": "UINT256_MAX", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "2112:56:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8018, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2112:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "expression": { + "arguments": [ + { + "id": 8021, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2156:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 8020, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2156:7:58", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "id": 8019, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967269, + "src": "2151:4:58", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 8022, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2151:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint256", + "typeString": "type(uint256)" + } + }, + "id": 8023, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "src": "2151:17:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 8028, + "name": "Execution", + "nodeType": "EventDefinition", + "parameters": { + "id": 8027, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8026, + "indexed": false, + "mutability": "mutable", + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 8028, + "src": "2191:11:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8025, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2191:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2190:13:58" + }, + "src": "2175:29:58" + }, + { + "anonymous": false, + "id": 8034, + "name": "MarketplaceAddressUpdated", + "nodeType": "EventDefinition", + "parameters": { + "id": 8033, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8030, + "indexed": true, + "mutability": "mutable", + "name": "_type", + "nodeType": "VariableDeclaration", + "scope": 8034, + "src": "2241:21:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "typeName": { + "id": 8029, + "name": "Markets", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8046, + "src": "2241:7:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8032, + "indexed": true, + "mutability": "mutable", + "name": "_newAddress", + "nodeType": "VariableDeclaration", + "scope": 8034, + "src": "2264:27:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8031, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2264:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2240:52:58" + }, + "src": "2209:84:58" + }, + { + "canonicalName": "RaribleExchangeWrapperUpgradeable.Markets", + "id": 8046, + "members": [ + { + "id": 8035, + "name": "ExchangeV2", + "nodeType": "EnumValue", + "src": "2322:10:58" + }, + { + "id": 8036, + "name": "WyvernExchange", + "nodeType": "EnumValue", + "src": "2346:14:58" + }, + { + "id": 8037, + "name": "SeaPort_1_1", + "nodeType": "EnumValue", + "src": "2374:11:58" + }, + { + "id": 8038, + "name": "X2Y2", + "nodeType": "EnumValue", + "src": "2399:4:58" + }, + { + "id": 8039, + "name": "LooksRareOrders", + "nodeType": "EnumValue", + "src": "2417:15:58" + }, + { + "id": 8040, + "name": "SudoSwap", + "nodeType": "EnumValue", + "src": "2446:8:58" + }, + { + "id": 8041, + "name": "SeaPort_1_4", + "nodeType": "EnumValue", + "src": "2468:11:58" + }, + { + "id": 8042, + "name": "LooksRareV2", + "nodeType": "EnumValue", + "src": "2493:11:58" + }, + { + "id": 8043, + "name": "Blur", + "nodeType": "EnumValue", + "src": "2518:4:58" + }, + { + "id": 8044, + "name": "SeaPort_1_5", + "nodeType": "EnumValue", + "src": "2536:11:58" + }, + { + "id": 8045, + "name": "SeaPort_1_6", + "nodeType": "EnumValue", + "src": "2561:11:58" + } + ], + "name": "Markets", + "nodeType": "EnumDefinition", + "src": "2299:284:58" + }, + { + "canonicalName": "RaribleExchangeWrapperUpgradeable.AdditionalDataTypes", + "id": 8049, + "members": [ + { + "id": 8047, + "name": "NoAdditionalData", + "nodeType": "EnumValue", + "src": "2624:16:58" + }, + { + "id": 8048, + "name": "RoyaltiesAdditionalData", + "nodeType": "EnumValue", + "src": "2650:23:58" + } + ], + "name": "AdditionalDataTypes", + "nodeType": "EnumDefinition", + "src": "2589:90:58" + }, + { + "canonicalName": "RaribleExchangeWrapperUpgradeable.Currencies", + "id": 8052, + "members": [ + { + "id": 8050, + "name": "ETH", + "nodeType": "EnumValue", + "src": "2711:3:58" + }, + { + "id": 8051, + "name": "WETH", + "nodeType": "EnumValue", + "src": "2724:4:58" + } + ], + "name": "Currencies", + "nodeType": "EnumDefinition", + "src": "2685:49:58" + }, + { + "canonicalName": "RaribleExchangeWrapperUpgradeable.PurchaseDetails", + "id": 8061, + "members": [ + { + "constant": false, + "id": 8054, + "mutability": "mutable", + "name": "marketId", + "nodeType": "VariableDeclaration", + "scope": 8061, + "src": "3488:16:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "typeName": { + "id": 8053, + "name": "Markets", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8046, + "src": "3488:7:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8056, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 8061, + "src": "3514:14:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8055, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3514:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8058, + "mutability": "mutable", + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 8061, + "src": "3538:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8057, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3538:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8060, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 8061, + "src": "3560:10:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 8059, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3560:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "PurchaseDetails", + "nodeType": "StructDefinition", + "scope": 10382, + "src": "3455:122:58", + "visibility": "public" + }, + { + "canonicalName": "RaribleExchangeWrapperUpgradeable.AdditionalData", + "id": 8067, + "members": [ + { + "constant": false, + "id": 8063, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 8067, + "src": "3843:10:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 8062, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3843:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8066, + "mutability": "mutable", + "name": "additionalRoyalties", + "nodeType": "VariableDeclaration", + "scope": 8067, + "src": "3863:29:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 8064, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3863:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8065, + "nodeType": "ArrayTypeName", + "src": "3863:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "name": "AdditionalData", + "nodeType": "StructDefinition", + "scope": 10382, + "src": "3811:88:58", + "visibility": "public" + }, + { + "body": { + "id": 8201, + "nodeType": "Block", + "src": "4425:824:58", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8084, + "name": "__Ownable_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 29, + "src": "4435:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4435:16:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8086, + "nodeType": "ExpressionStatement", + "src": "4435:16:58" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8087, + "name": "__ERC721Holder_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1191, + "src": "4461:19:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8088, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4461:21:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8089, + "nodeType": "ExpressionStatement", + "src": "4461:21:58" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8090, + "name": "__ERC1155Holder_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 822, + "src": "4492:20:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8091, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4492:22:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8092, + "nodeType": "ExpressionStatement", + "src": "4492:22:58" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8093, + "name": "__Pausable_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1679, + "src": "4524:15:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8094, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4524:17:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8095, + "nodeType": "ExpressionStatement", + "src": "4524:17:58" + }, + { + "expression": { + "id": 8100, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8096, + "name": "wyvernExchange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7995, + "src": "4552:14:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8097, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8072, + "src": "4569:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$11_memory_ptr", + "typeString": "address[11] memory" + } + }, + "id": 8099, + "indexExpression": { + "hexValue": "30", + "id": 8098, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4583:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4569:16:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4552:33:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8101, + "nodeType": "ExpressionStatement", + "src": "4552:33:58" + }, + { + "expression": { + "id": 8106, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8102, + "name": "exchangeV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7997, + "src": "4595:10:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8103, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8072, + "src": "4608:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$11_memory_ptr", + "typeString": "address[11] memory" + } + }, + "id": 8105, + "indexExpression": { + "hexValue": "31", + "id": 8104, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4622:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4608:16:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4595:29:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8107, + "nodeType": "ExpressionStatement", + "src": "4595:29:58" + }, + { + "expression": { + "id": 8112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8108, + "name": "seaPort_1_1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7999, + "src": "4634:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8109, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8072, + "src": "4648:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$11_memory_ptr", + "typeString": "address[11] memory" + } + }, + "id": 8111, + "indexExpression": { + "hexValue": "32", + "id": 8110, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4662:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4648:16:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4634:30:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8113, + "nodeType": "ExpressionStatement", + "src": "4634:30:58" + }, + { + "expression": { + "id": 8118, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8114, + "name": "x2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8001, + "src": "4674:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8115, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8072, + "src": "4681:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$11_memory_ptr", + "typeString": "address[11] memory" + } + }, + "id": 8117, + "indexExpression": { + "hexValue": "33", + "id": 8116, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4695:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4681:16:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4674:23:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8119, + "nodeType": "ExpressionStatement", + "src": "4674:23:58" + }, + { + "expression": { + "id": 8124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8120, + "name": "looksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8003, + "src": "4707:9:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8121, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8072, + "src": "4719:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$11_memory_ptr", + "typeString": "address[11] memory" + } + }, + "id": 8123, + "indexExpression": { + "hexValue": "34", + "id": 8122, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4733:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4719:16:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4707:28:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8125, + "nodeType": "ExpressionStatement", + "src": "4707:28:58" + }, + { + "expression": { + "id": 8130, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8126, + "name": "sudoswap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8005, + "src": "4745:8:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8127, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8072, + "src": "4756:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$11_memory_ptr", + "typeString": "address[11] memory" + } + }, + "id": 8129, + "indexExpression": { + "hexValue": "35", + "id": 8128, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4770:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4756:16:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4745:27:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8131, + "nodeType": "ExpressionStatement", + "src": "4745:27:58" + }, + { + "expression": { + "id": 8136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8132, + "name": "seaPort_1_4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8007, + "src": "4782:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8133, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8072, + "src": "4796:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$11_memory_ptr", + "typeString": "address[11] memory" + } + }, + "id": 8135, + "indexExpression": { + "hexValue": "36", + "id": 8134, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4810:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_6_by_1", + "typeString": "int_const 6" + }, + "value": "6" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4796:16:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4782:30:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8137, + "nodeType": "ExpressionStatement", + "src": "4782:30:58" + }, + { + "expression": { + "id": 8142, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8138, + "name": "looksRareV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8009, + "src": "4822:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8139, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8072, + "src": "4836:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$11_memory_ptr", + "typeString": "address[11] memory" + } + }, + "id": 8141, + "indexExpression": { + "hexValue": "37", + "id": 8140, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4850:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_7_by_1", + "typeString": "int_const 7" + }, + "value": "7" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4836:16:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4822:30:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8143, + "nodeType": "ExpressionStatement", + "src": "4822:30:58" + }, + { + "expression": { + "id": 8148, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8144, + "name": "blur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8011, + "src": "4862:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8145, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8072, + "src": "4869:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$11_memory_ptr", + "typeString": "address[11] memory" + } + }, + "id": 8147, + "indexExpression": { + "hexValue": "38", + "id": 8146, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4883:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4869:16:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4862:23:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8149, + "nodeType": "ExpressionStatement", + "src": "4862:23:58" + }, + { + "expression": { + "id": 8154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8150, + "name": "seaPort_1_5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "4895:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8151, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8072, + "src": "4909:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$11_memory_ptr", + "typeString": "address[11] memory" + } + }, + "id": 8153, + "indexExpression": { + "hexValue": "39", + "id": 8152, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4923:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_9_by_1", + "typeString": "int_const 9" + }, + "value": "9" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4909:16:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4895:30:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8155, + "nodeType": "ExpressionStatement", + "src": "4895:30:58" + }, + { + "expression": { + "id": 8160, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8156, + "name": "seaPort_1_6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8015, + "src": "4935:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8157, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8072, + "src": "4949:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$11_memory_ptr", + "typeString": "address[11] memory" + } + }, + "id": 8159, + "indexExpression": { + "hexValue": "3130", + "id": 8158, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4963:2:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4949:17:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4935:31:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8161, + "nodeType": "ExpressionStatement", + "src": "4935:31:58" + }, + { + "expression": { + "id": 8164, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8162, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8017, + "src": "4977:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 8163, + "name": "_weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8074, + "src": "4984:5:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4977:12:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8165, + "nodeType": "ExpressionStatement", + "src": "4977:12:58" + }, + { + "body": { + "id": 8195, + "nodeType": "Block", + "src": "5054:146:58", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 8182, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8177, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8017, + "src": "5072:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 8180, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5088:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 8179, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5080:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8178, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5080:7:58", + "typeDescriptions": {} + } + }, + "id": 8181, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5080:10:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5072:18:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8194, + "nodeType": "IfStatement", + "src": "5068:122:58", + "trueBody": { + "id": 8193, + "nodeType": "Block", + "src": "5092:98:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 8187, + "name": "_transferProxies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8077, + "src": "5142:16:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 8189, + "indexExpression": { + "id": 8188, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8167, + "src": "5159:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5142:19:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8190, + "name": "UINT256_MAX", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8024, + "src": "5163:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 8184, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8017, + "src": "5128:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8183, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "5110:17:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 8185, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5110:23:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 8186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 1142, + "src": "5110:31:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 8191, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5110:65:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8192, + "nodeType": "ExpressionStatement", + "src": "5110:65:58" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8173, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8170, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8167, + "src": "5020:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 8171, + "name": "_transferProxies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8077, + "src": "5024:16:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 8172, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5024:23:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5020:27:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8196, + "initializationExpression": { + "assignments": [ + 8167 + ], + "declarations": [ + { + "constant": false, + "id": 8167, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 8196, + "src": "5005:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8166, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5005:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8169, + "initialValue": { + "hexValue": "30", + "id": 8168, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5017:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "5005:13:58" + }, + "loopExpression": { + "expression": { + "id": 8175, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "5049:3:58", + "subExpression": { + "id": 8174, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8167, + "src": "5051:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8176, + "nodeType": "ExpressionStatement", + "src": "5049:3:58" + }, + "nodeType": "ForStatement", + "src": "5000:200:58" + }, + { + "expression": { + "arguments": [ + { + "id": 8198, + "name": "_initialOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8079, + "src": "5228:13:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8197, + "name": "transferOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 125, + "src": "5210:17:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 8199, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5210:32:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8200, + "nodeType": "ExpressionStatement", + "src": "5210:32:58" + } + ] + }, + "documentation": { + "id": 8068, + "nodeType": "StructuredDocumentation", + "src": "3905:313:58", + "text": "@notice initializes the proxy contract\n@param _marketplaces - array of addresses of the marketplaces\n@param _weth - address of the WETH erc-20 token\n@param _transferProxies - array of addresses of the transfer proxies\n@param _initialOwner - address of the owner" + }, + "functionSelector": "7dfdd89b", + "id": 8202, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8082, + "modifierName": { + "id": 8081, + "name": "initializer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 781, + "src": "4413:11:58", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4413:11:58" + } + ], + "name": "__ExchangeWrapper_init_proxy", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8080, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8072, + "mutability": "mutable", + "name": "_marketplaces", + "nodeType": "VariableDeclaration", + "scope": 8202, + "src": "4270:32:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$11_memory_ptr", + "typeString": "address[11]" + }, + "typeName": { + "baseType": { + "id": 8069, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4270:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8071, + "length": { + "hexValue": "3131", + "id": 8070, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4278:2:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_11_by_1", + "typeString": "int_const 11" + }, + "value": "11" + }, + "nodeType": "ArrayTypeName", + "src": "4270:11:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$11_storage_ptr", + "typeString": "address[11]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8074, + "mutability": "mutable", + "name": "_weth", + "nodeType": "VariableDeclaration", + "scope": 8202, + "src": "4312:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8073, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4312:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8077, + "mutability": "mutable", + "name": "_transferProxies", + "nodeType": "VariableDeclaration", + "scope": 8202, + "src": "4335:33:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 8075, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4335:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8076, + "nodeType": "ArrayTypeName", + "src": "4335:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8079, + "mutability": "mutable", + "name": "_initialOwner", + "nodeType": "VariableDeclaration", + "scope": 8202, + "src": "4378:21:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8078, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4378:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4260:145:58" + }, + "returnParameters": { + "id": 8083, + "nodeType": "ParameterList", + "parameters": [], + "src": "4425:0:58" + }, + "scope": 10382, + "src": "4223:1026:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 8326, + "nodeType": "Block", + "src": "5735:1299:58", + "statements": [ + { + "assignments": [ + 8215 + ], + "declarations": [ + { + "constant": false, + "id": 8215, + "mutability": "mutable", + "name": "wethAmountNeeded", + "nodeType": "VariableDeclaration", + "scope": 8326, + "src": "5792:24:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8214, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5792:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8219, + "initialValue": { + "arguments": [ + { + "id": 8217, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8205, + "src": "5846:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + ], + "id": 8216, + "name": "getAmountOfWethForPurchase", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10199, + "src": "5819:26:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_PurchaseDetails_$8061_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory) pure returns (uint256)" + } + }, + "id": 8218, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5819:43:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5792:70:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8220, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8215, + "src": "5930:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 8221, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5949:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "5930:20:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8237, + "nodeType": "IfStatement", + "src": "5926:134:58", + "trueBody": { + "id": 8236, + "nodeType": "Block", + "src": "5952:108:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8227, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "6003:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 8228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6003:12:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [ + { + "id": 8231, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "6025:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "id": 8230, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6017:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8229, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6017:7:58", + "typeDescriptions": {} + } + }, + "id": 8232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6017:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 8233, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8215, + "src": "6032:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 8224, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8017, + "src": "5984:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8223, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "5966:17:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 8225, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5966:23:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 8226, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1154, + "src": "5966:36:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 8234, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5966:83:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8235, + "nodeType": "ExpressionStatement", + "src": "5966:83:58" + } + ] + } + }, + { + "assignments": [ + 8239 + ], + "declarations": [ + { + "constant": false, + "id": 8239, + "mutability": "mutable", + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 8326, + "src": "6070:19:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "typeName": { + "id": 8238, + "name": "Currencies", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8052, + "src": "6070:10:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "visibility": "internal" + } + ], + "id": 8244, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 8241, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8205, + "src": "6104:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 8242, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8058, + "src": "6104:20:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8240, + "name": "getCurrency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9802, + "src": "6092:11:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_enum$_Currencies_$8052_$", + "typeString": "function (uint256) pure returns (enum RaribleExchangeWrapperUpgradeable.Currencies)" + } + }, + "id": 8243, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6092:33:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6070:55:58" + }, + { + "assignments": [ + 8246 + ], + "declarations": [ + { + "constant": false, + "id": 8246, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 8326, + "src": "6135:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8245, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6135:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 8247, + "nodeType": "VariableDeclarationStatement", + "src": "6135:12:58" + }, + { + "assignments": [ + 8249 + ], + "declarations": [ + { + "constant": false, + "id": 8249, + "mutability": "mutable", + "name": "firstFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 8326, + "src": "6157:22:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8248, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6157:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8250, + "nodeType": "VariableDeclarationStatement", + "src": "6157:22:58" + }, + { + "assignments": [ + 8252 + ], + "declarations": [ + { + "constant": false, + "id": 8252, + "mutability": "mutable", + "name": "secondFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 8326, + "src": "6189:23:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8251, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6189:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8253, + "nodeType": "VariableDeclarationStatement", + "src": "6189:23:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "id": 8257, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8254, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8239, + "src": "6227:8:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 8255, + "name": "Currencies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8052, + "src": "6239:10:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Currencies_$8052_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Currencies)" + } + }, + "id": 8256, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "ETH", + "nodeType": "MemberAccess", + "src": "6239:14:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "src": "6227:26:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "id": 8282, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8279, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8239, + "src": "6495:8:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 8280, + "name": "Currencies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8052, + "src": "6507:10:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Currencies_$8052_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Currencies)" + } + }, + "id": 8281, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "WETH", + "nodeType": "MemberAccess", + "src": "6507:15:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "src": "6495:27:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8308, + "nodeType": "Block", + "src": "6766:60:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "556e6b6e6f776e2070757263686173652063757272656e6379", + "id": 8305, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6787:27:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090", + "typeString": "literal_string \"Unknown purchase currency\"" + }, + "value": "Unknown purchase currency" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090", + "typeString": "literal_string \"Unknown purchase currency\"" + } + ], + "id": 8304, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "6780:6:58", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 8306, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6780:35:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8307, + "nodeType": "ExpressionStatement", + "src": "6780:35:58" + } + ] + }, + "id": 8309, + "nodeType": "IfStatement", + "src": "6491:335:58", + "trueBody": { + "id": 8303, + "nodeType": "Block", + "src": "6524:236:58", + "statements": [ + { + "expression": { + "id": 8291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 8283, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8246, + "src": "6539:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 8284, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8249, + "src": "6548:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8285, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8252, + "src": "6564:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 8286, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "6538:42:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8288, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8205, + "src": "6596:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + { + "hexValue": "66616c7365", + "id": 8289, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6613:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 8287, + "name": "purchaseWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9624, + "src": "6583:12:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_PurchaseDetails_$8061_memory_ptr_$_t_bool_$returns$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "function (struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory,bool) returns (bool,uint256,uint256)" + } + }, + "id": 8290, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6583:36:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "src": "6538:81:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8292, + "nodeType": "ExpressionStatement", + "src": "6538:81:58" + }, + { + "expression": { + "arguments": [ + { + "id": 8294, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8249, + "src": "6649:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8295, + "name": "feeRecipientFirst", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8207, + "src": "6665:17:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8293, + "name": "transferFeeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9681, + "src": "6633:15:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 8296, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6633:50:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8297, + "nodeType": "ExpressionStatement", + "src": "6633:50:58" + }, + { + "expression": { + "arguments": [ + { + "id": 8299, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8252, + "src": "6713:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8300, + "name": "feeRecipientSecond", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8209, + "src": "6730:18:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8298, + "name": "transferFeeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9681, + "src": "6697:15:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 8301, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6697:52:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8302, + "nodeType": "ExpressionStatement", + "src": "6697:52:58" + } + ] + } + }, + "id": 8310, + "nodeType": "IfStatement", + "src": "6223:603:58", + "trueBody": { + "id": 8278, + "nodeType": "Block", + "src": "6255:230:58", + "statements": [ + { + "expression": { + "id": 8266, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 8258, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8246, + "src": "6270:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 8259, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8249, + "src": "6279:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8260, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8252, + "src": "6295:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 8261, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "6269:42:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8263, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8205, + "src": "6323:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + { + "hexValue": "66616c7365", + "id": 8264, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6340:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 8262, + "name": "purchase", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9393, + "src": "6314:8:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_PurchaseDetails_$8061_memory_ptr_$_t_bool_$returns$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "function (struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory,bool) returns (bool,uint256,uint256)" + } + }, + "id": 8265, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6314:32:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "src": "6269:77:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8267, + "nodeType": "ExpressionStatement", + "src": "6269:77:58" + }, + { + "expression": { + "arguments": [ + { + "id": 8269, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8249, + "src": "6375:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8270, + "name": "feeRecipientFirst", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8207, + "src": "6391:17:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8268, + "name": "transferFeeETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9652, + "src": "6360:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 8271, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6360:49:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8272, + "nodeType": "ExpressionStatement", + "src": "6360:49:58" + }, + { + "expression": { + "arguments": [ + { + "id": 8274, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8252, + "src": "6438:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8275, + "name": "feeRecipientSecond", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8209, + "src": "6455:18:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8273, + "name": "transferFeeETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9652, + "src": "6423:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 8276, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6423:51:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8277, + "nodeType": "ExpressionStatement", + "src": "6423:51:58" + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 8312, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8246, + "src": "6851:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 8311, + "name": "Execution", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8028, + "src": "6841:9:58", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bool_$returns$__$", + "typeString": "function (bool)" + } + }, + "id": 8313, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6841:18:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8314, + "nodeType": "EmitStatement", + "src": "6836:23:58" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8315, + "name": "transferChange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9708, + "src": "6900:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8316, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6900:16:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8317, + "nodeType": "ExpressionStatement", + "src": "6900:16:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8320, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8318, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8215, + "src": "6961:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 8319, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6980:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6961:20:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8325, + "nodeType": "IfStatement", + "src": "6957:71:58", + "trueBody": { + "id": 8324, + "nodeType": "Block", + "src": "6983:45:58", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8321, + "name": "transferChangeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9739, + "src": "6997:18:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8322, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6997:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8323, + "nodeType": "ExpressionStatement", + "src": "6997:20:58" + } + ] + } + } + ] + }, + "documentation": { + "id": 8203, + "nodeType": "StructuredDocumentation", + "src": "5255:295:58", + "text": "@notice executes a single purchase\n@param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n@param feeRecipientFirst - address of the first fee recipient\n@param feeRecipientSecond - address of the second fee recipient" + }, + "functionSelector": "86496e7a", + "id": 8327, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8212, + "modifierName": { + "id": 8211, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1710, + "src": "5721:13:58", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5721:13:58" + } + ], + "name": "singlePurchase", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8210, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8205, + "mutability": "mutable", + "name": "purchaseDetails", + "nodeType": "VariableDeclaration", + "scope": 8327, + "src": "5588:38:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + }, + "typeName": { + "id": 8204, + "name": "PurchaseDetails", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8061, + "src": "5588:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8207, + "mutability": "mutable", + "name": "feeRecipientFirst", + "nodeType": "VariableDeclaration", + "scope": 8327, + "src": "5636:25:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8206, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5636:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8209, + "mutability": "mutable", + "name": "feeRecipientSecond", + "nodeType": "VariableDeclaration", + "scope": 8327, + "src": "5671:26:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8208, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5671:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5578:125:58" + }, + "returnParameters": { + "id": 8213, + "nodeType": "ParameterList", + "parameters": [], + "src": "5735:0:58" + }, + "scope": 10382, + "src": "5555:1479:58", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 8553, + "nodeType": "Block", + "src": "7698:2183:58", + "statements": [ + { + "assignments": [ + 8343 + ], + "declarations": [ + { + "constant": false, + "id": 8343, + "mutability": "mutable", + "name": "sumFirstFeesETH", + "nodeType": "VariableDeclaration", + "scope": 8553, + "src": "7708:23:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8342, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7708:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8345, + "initialValue": { + "hexValue": "30", + "id": 8344, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7734:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "7708:27:58" + }, + { + "assignments": [ + 8347 + ], + "declarations": [ + { + "constant": false, + "id": 8347, + "mutability": "mutable", + "name": "sumSecondFeesETH", + "nodeType": "VariableDeclaration", + "scope": 8553, + "src": "7745:24:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8346, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7745:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8349, + "initialValue": { + "hexValue": "30", + "id": 8348, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7772:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "7745:28:58" + }, + { + "assignments": [ + 8351 + ], + "declarations": [ + { + "constant": false, + "id": 8351, + "mutability": "mutable", + "name": "sumFirstFeesWETH", + "nodeType": "VariableDeclaration", + "scope": 8553, + "src": "7783:24:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8350, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7783:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8353, + "initialValue": { + "hexValue": "30", + "id": 8352, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7810:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "7783:28:58" + }, + { + "assignments": [ + 8355 + ], + "declarations": [ + { + "constant": false, + "id": 8355, + "mutability": "mutable", + "name": "sumSecondFeesWETH", + "nodeType": "VariableDeclaration", + "scope": 8553, + "src": "7821:25:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8354, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7821:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8357, + "initialValue": { + "hexValue": "30", + "id": 8356, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7849:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "7821:29:58" + }, + { + "assignments": [ + 8359 + ], + "declarations": [ + { + "constant": false, + "id": 8359, + "mutability": "mutable", + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 8553, + "src": "7860:11:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8358, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7860:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 8361, + "initialValue": { + "hexValue": "66616c7365", + "id": 8360, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7874:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "nodeType": "VariableDeclarationStatement", + "src": "7860:19:58" + }, + { + "assignments": [ + 8363 + ], + "declarations": [ + { + "constant": false, + "id": 8363, + "mutability": "mutable", + "name": "wethAmountNeeded", + "nodeType": "VariableDeclaration", + "scope": 8553, + "src": "7937:24:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8362, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7937:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8365, + "initialValue": { + "hexValue": "30", + "id": 8364, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7964:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "7937:28:58" + }, + { + "body": { + "id": 8387, + "nodeType": "Block", + "src": "8028:109:58", + "statements": [ + { + "expression": { + "id": 8385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8377, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8363, + "src": "8042:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8384, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8378, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8363, + "src": "8061:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "arguments": [ + { + "baseExpression": { + "id": 8380, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8331, + "src": "8107:15:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8061_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory[] memory" + } + }, + "id": 8382, + "indexExpression": { + "id": 8381, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8367, + "src": "8123:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8107:18:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + ], + "id": 8379, + "name": "getAmountOfWethForPurchase", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10199, + "src": "8080:26:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_PurchaseDetails_$8061_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory) pure returns (uint256)" + } + }, + "id": 8383, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8080:46:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8061:65:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8042:84:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8386, + "nodeType": "ExpressionStatement", + "src": "8042:84:58" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8373, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8370, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8367, + "src": "7995:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 8371, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8331, + "src": "7999:15:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8061_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory[] memory" + } + }, + "id": 8372, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "7999:22:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "7995:26:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8388, + "initializationExpression": { + "assignments": [ + 8367 + ], + "declarations": [ + { + "constant": false, + "id": 8367, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 8388, + "src": "7980:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8366, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7980:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8369, + "initialValue": { + "hexValue": "30", + "id": 8368, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7992:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "7980:13:58" + }, + "loopExpression": { + "expression": { + "id": 8375, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "8023:3:58", + "subExpression": { + "id": 8374, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8367, + "src": "8025:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8376, + "nodeType": "ExpressionStatement", + "src": "8023:3:58" + }, + "nodeType": "ForStatement", + "src": "7975:162:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8391, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8389, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8363, + "src": "8204:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 8390, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8223:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "8204:20:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8406, + "nodeType": "IfStatement", + "src": "8200:134:58", + "trueBody": { + "id": 8405, + "nodeType": "Block", + "src": "8226:108:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8396, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "8277:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 8397, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8277:12:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [ + { + "id": 8400, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "8299:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "id": 8399, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8291:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8398, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8291:7:58", + "typeDescriptions": {} + } + }, + "id": 8401, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8291:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 8402, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8363, + "src": "8306:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 8393, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8017, + "src": "8258:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8392, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "8240:17:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 8394, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8240:23:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 8395, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1154, + "src": "8240:36:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 8403, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8240:83:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8404, + "nodeType": "ExpressionStatement", + "src": "8240:83:58" + } + ] + } + }, + { + "body": { + "id": 8515, + "nodeType": "Block", + "src": "8397:953:58", + "statements": [ + { + "assignments": [ + 8419 + ], + "declarations": [ + { + "constant": false, + "id": 8419, + "mutability": "mutable", + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 8515, + "src": "8411:19:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "typeName": { + "id": 8418, + "name": "Currencies", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8052, + "src": "8411:10:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "visibility": "internal" + } + ], + "id": 8426, + "initialValue": { + "arguments": [ + { + "expression": { + "baseExpression": { + "id": 8421, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8331, + "src": "8445:15:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8061_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory[] memory" + } + }, + "id": 8423, + "indexExpression": { + "id": 8422, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8408, + "src": "8461:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8445:18:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 8424, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8058, + "src": "8445:23:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8420, + "name": "getCurrency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9802, + "src": "8433:11:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_enum$_Currencies_$8052_$", + "typeString": "function (uint256) pure returns (enum RaribleExchangeWrapperUpgradeable.Currencies)" + } + }, + "id": 8425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8433:36:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "8411:58:58" + }, + { + "assignments": [ + 8428 + ], + "declarations": [ + { + "constant": false, + "id": 8428, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 8515, + "src": "8483:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8427, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8483:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 8429, + "nodeType": "VariableDeclarationStatement", + "src": "8483:12:58" + }, + { + "assignments": [ + 8431 + ], + "declarations": [ + { + "constant": false, + "id": 8431, + "mutability": "mutable", + "name": "firstFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 8515, + "src": "8509:22:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8430, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8509:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8432, + "nodeType": "VariableDeclarationStatement", + "src": "8509:22:58" + }, + { + "assignments": [ + 8434 + ], + "declarations": [ + { + "constant": false, + "id": 8434, + "mutability": "mutable", + "name": "secondFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 8515, + "src": "8545:23:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8433, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8545:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8435, + "nodeType": "VariableDeclarationStatement", + "src": "8545:23:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "id": 8439, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8436, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8419, + "src": "8587:8:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 8437, + "name": "Currencies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8052, + "src": "8599:10:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Currencies_$8052_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Currencies)" + } + }, + "id": 8438, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "ETH", + "nodeType": "MemberAccess", + "src": "8599:14:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "src": "8587:26:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "id": 8470, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8467, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8419, + "src": "8888:8:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 8468, + "name": "Currencies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8052, + "src": "8900:10:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Currencies_$8052_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Currencies)" + } + }, + "id": 8469, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "WETH", + "nodeType": "MemberAccess", + "src": "8900:15:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "src": "8888:27:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8502, + "nodeType": "Block", + "src": "9194:68:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "556e6b6e6f776e2070757263686173652063757272656e6379", + "id": 8499, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9219:27:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090", + "typeString": "literal_string \"Unknown purchase currency\"" + }, + "value": "Unknown purchase currency" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090", + "typeString": "literal_string \"Unknown purchase currency\"" + } + ], + "id": 8498, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "9212:6:58", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 8500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9212:35:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8501, + "nodeType": "ExpressionStatement", + "src": "9212:35:58" + } + ] + }, + "id": 8503, + "nodeType": "IfStatement", + "src": "8884:378:58", + "trueBody": { + "id": 8497, + "nodeType": "Block", + "src": "8917:271:58", + "statements": [ + { + "expression": { + "id": 8481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 8471, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8428, + "src": "8936:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 8472, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8431, + "src": "8945:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8473, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8434, + "src": "8961:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 8474, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "8935:42:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 8476, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8331, + "src": "8993:15:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8061_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory[] memory" + } + }, + "id": 8478, + "indexExpression": { + "id": 8477, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8408, + "src": "9009:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8993:18:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + { + "id": 8479, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8337, + "src": "9013:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 8475, + "name": "purchaseWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9624, + "src": "8980:12:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_PurchaseDetails_$8061_memory_ptr_$_t_bool_$returns$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "function (struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory,bool) returns (bool,uint256,uint256)" + } + }, + "id": 8480, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8980:43:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "src": "8935:88:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8482, + "nodeType": "ExpressionStatement", + "src": "8935:88:58" + }, + { + "expression": { + "id": 8488, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8483, + "name": "sumFirstFeesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8351, + "src": "9042:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8486, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8431, + "src": "9082:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 8484, + "name": "sumFirstFeesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8351, + "src": "9061:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8485, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 559, + "src": "9061:20:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 8487, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9061:36:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9042:55:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8489, + "nodeType": "ExpressionStatement", + "src": "9042:55:58" + }, + { + "expression": { + "id": 8495, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8490, + "name": "sumSecondFeesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8355, + "src": "9115:17:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8493, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8434, + "src": "9157:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 8491, + "name": "sumSecondFeesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8355, + "src": "9135:17:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8492, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 559, + "src": "9135:21:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 8494, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9135:38:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9115:58:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8496, + "nodeType": "ExpressionStatement", + "src": "9115:58:58" + } + ] + } + }, + "id": 8504, + "nodeType": "IfStatement", + "src": "8583:679:58", + "trueBody": { + "id": 8466, + "nodeType": "Block", + "src": "8615:263:58", + "statements": [ + { + "expression": { + "id": 8450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 8440, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8428, + "src": "8634:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 8441, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8431, + "src": "8643:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8442, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8434, + "src": "8659:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 8443, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "8633:42:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 8445, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8331, + "src": "8687:15:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8061_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory[] memory" + } + }, + "id": 8447, + "indexExpression": { + "id": 8446, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8408, + "src": "8703:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8687:18:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + { + "id": 8448, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8337, + "src": "8707:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 8444, + "name": "purchase", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9393, + "src": "8678:8:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_PurchaseDetails_$8061_memory_ptr_$_t_bool_$returns$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "function (struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory,bool) returns (bool,uint256,uint256)" + } + }, + "id": 8449, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8678:39:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "src": "8633:84:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8451, + "nodeType": "ExpressionStatement", + "src": "8633:84:58" + }, + { + "expression": { + "id": 8457, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8452, + "name": "sumFirstFeesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8343, + "src": "8736:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8455, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8431, + "src": "8774:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 8453, + "name": "sumFirstFeesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8343, + "src": "8754:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8454, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 559, + "src": "8754:19:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 8456, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8754:35:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8736:53:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8458, + "nodeType": "ExpressionStatement", + "src": "8736:53:58" + }, + { + "expression": { + "id": 8464, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8459, + "name": "sumSecondFeesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8347, + "src": "8807:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8462, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8434, + "src": "8847:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 8460, + "name": "sumSecondFeesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8347, + "src": "8826:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8461, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 559, + "src": "8826:20:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 8463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8826:37:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8807:56:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8465, + "nodeType": "ExpressionStatement", + "src": "8807:56:58" + } + ] + } + }, + { + "expression": { + "id": 8509, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8505, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8359, + "src": "9276:6:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8508, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8506, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8359, + "src": "9285:6:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "id": 8507, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8428, + "src": "9295:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "9285:17:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "9276:26:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8510, + "nodeType": "ExpressionStatement", + "src": "9276:26:58" + }, + { + "eventCall": { + "arguments": [ + { + "id": 8512, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8428, + "src": "9331:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 8511, + "name": "Execution", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8028, + "src": "9321:9:58", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bool_$returns$__$", + "typeString": "function (bool)" + } + }, + "id": 8513, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9321:18:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8514, + "nodeType": "EmitStatement", + "src": "9316:23:58" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8414, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8411, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8408, + "src": "8364:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 8412, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8331, + "src": "8368:15:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8061_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory[] memory" + } + }, + "id": 8413, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "8368:22:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8364:26:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8516, + "initializationExpression": { + "assignments": [ + 8408 + ], + "declarations": [ + { + "constant": false, + "id": 8408, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 8516, + "src": "8349:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8407, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8349:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8410, + "initialValue": { + "hexValue": "30", + "id": 8409, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8361:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "8349:13:58" + }, + "loopExpression": { + "expression": { + "id": 8416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "8392:3:58", + "subExpression": { + "id": 8415, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8408, + "src": "8394:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8417, + "nodeType": "ExpressionStatement", + "src": "8392:3:58" + }, + "nodeType": "ForStatement", + "src": "8344:1006:58" + }, + { + "expression": { + "arguments": [ + { + "id": 8518, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8359, + "src": "9368:6:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "6e6f207375636365737366756c20657865637574696f6e73", + "id": 8519, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9376:26:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ec72e63c53a628868607248de6752f6e953ad035609908ced114156f1eeff564", + "typeString": "literal_string \"no successful executions\"" + }, + "value": "no successful executions" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ec72e63c53a628868607248de6752f6e953ad035609908ced114156f1eeff564", + "typeString": "literal_string \"no successful executions\"" + } + ], + "id": 8517, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "9360:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 8520, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9360:43:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8521, + "nodeType": "ExpressionStatement", + "src": "9360:43:58" + }, + { + "expression": { + "arguments": [ + { + "id": 8523, + "name": "sumFirstFeesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8343, + "src": "9455:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8524, + "name": "feeRecipientFirst", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8333, + "src": "9472:17:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8522, + "name": "transferFeeETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9652, + "src": "9440:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 8525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9440:50:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8526, + "nodeType": "ExpressionStatement", + "src": "9440:50:58" + }, + { + "expression": { + "arguments": [ + { + "id": 8528, + "name": "sumSecondFeesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8347, + "src": "9515:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8529, + "name": "feeRecipientSecond", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8335, + "src": "9533:18:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8527, + "name": "transferFeeETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9652, + "src": "9500:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 8530, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9500:52:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8531, + "nodeType": "ExpressionStatement", + "src": "9500:52:58" + }, + { + "expression": { + "arguments": [ + { + "id": 8533, + "name": "sumFirstFeesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8351, + "src": "9606:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8534, + "name": "feeRecipientFirst", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8333, + "src": "9624:17:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8532, + "name": "transferFeeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9681, + "src": "9590:15:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 8535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9590:52:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8536, + "nodeType": "ExpressionStatement", + "src": "9590:52:58" + }, + { + "expression": { + "arguments": [ + { + "id": 8538, + "name": "sumSecondFeesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8355, + "src": "9668:17:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8539, + "name": "feeRecipientSecond", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8335, + "src": "9687:18:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8537, + "name": "transferFeeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9681, + "src": "9652:15:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 8540, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9652:54:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8541, + "nodeType": "ExpressionStatement", + "src": "9652:54:58" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8542, + "name": "transferChange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9708, + "src": "9747:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9747:16:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8544, + "nodeType": "ExpressionStatement", + "src": "9747:16:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8547, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8545, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8363, + "src": "9808:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 8546, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9827:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "9808:20:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8552, + "nodeType": "IfStatement", + "src": "9804:71:58", + "trueBody": { + "id": 8551, + "nodeType": "Block", + "src": "9830:45:58", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8548, + "name": "transferChangeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9739, + "src": "9844:18:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8549, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9844:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8550, + "nodeType": "ExpressionStatement", + "src": "9844:20:58" + } + ] + } + } + ] + }, + "documentation": { + "id": 8328, + "nodeType": "StructuredDocumentation", + "src": "7040:448:58", + "text": "@notice executes an array of purchases\n@param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n@param feeRecipientFirst - address of the first fee recipient\n@param feeRecipientSecond - address of the second fee recipient\n@param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch" + }, + "functionSelector": "b94ee332", + "id": 8554, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8340, + "modifierName": { + "id": 8339, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1710, + "src": "7684:13:58", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "7684:13:58" + } + ], + "name": "bulkPurchase", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8338, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8331, + "mutability": "mutable", + "name": "purchaseDetails", + "nodeType": "VariableDeclaration", + "scope": 8554, + "src": "7525:40:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8061_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails[]" + }, + "typeName": { + "baseType": { + "id": 8329, + "name": "PurchaseDetails", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8061, + "src": "7525:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + } + }, + "id": 8330, + "nodeType": "ArrayTypeName", + "src": "7525:17:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8061_storage_$dyn_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8333, + "mutability": "mutable", + "name": "feeRecipientFirst", + "nodeType": "VariableDeclaration", + "scope": 8554, + "src": "7575:25:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8332, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7575:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8335, + "mutability": "mutable", + "name": "feeRecipientSecond", + "nodeType": "VariableDeclaration", + "scope": 8554, + "src": "7610:26:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8334, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7610:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8337, + "mutability": "mutable", + "name": "allowFail", + "nodeType": "VariableDeclaration", + "scope": 8554, + "src": "7646:14:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8336, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "7646:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "7515:151:58" + }, + "returnParameters": { + "id": 8341, + "nodeType": "ParameterList", + "parameters": [], + "src": "7698:0:58" + }, + "scope": 10382, + "src": "7494:2387:58", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 9392, + "nodeType": "Block", + "src": "10508:7922:58", + "statements": [ + { + "assignments": [ + 8569, + 8572 + ], + "declarations": [ + { + "constant": false, + "id": 8569, + "mutability": "mutable", + "name": "marketData", + "nodeType": "VariableDeclaration", + "scope": 9392, + "src": "10519:23:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 8568, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "10519:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8572, + "mutability": "mutable", + "name": "additionalRoyalties", + "nodeType": "VariableDeclaration", + "scope": 9392, + "src": "10544:36:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 8570, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10544:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8571, + "nodeType": "ArrayTypeName", + "src": "10544:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 8581, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 8574, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "10609:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 8575, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "data", + "nodeType": "MemberAccess", + "referencedDeclaration": 8060, + "src": "10609:20:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "id": 8576, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "10631:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 8577, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8058, + "src": "10631:20:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 8578, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "10653:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 8579, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "10653:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + ], + "id": 8573, + "name": "getDataAndAdditionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9881, + "src": "10584:24:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_enum$_Markets_$8046_$returns$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes memory,uint256,enum RaribleExchangeWrapperUpgradeable.Markets) pure returns (bytes memory,uint256[] memory)" + } + }, + "id": 8580, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10584:94:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bytes memory,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10518:160:58" + }, + { + "assignments": [ + 8583 + ], + "declarations": [ + { + "constant": false, + "id": 8583, + "mutability": "mutable", + "name": "paymentAmount", + "nodeType": "VariableDeclaration", + "scope": 9392, + "src": "10688:21:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8582, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10688:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8586, + "initialValue": { + "expression": { + "id": 8584, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "10712:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 8585, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8056, + "src": "10712:22:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10688:46:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 8591, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8587, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "10748:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 8588, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "10748:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 8589, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "10776:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 8590, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_1", + "nodeType": "MemberAccess", + "src": "10776:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "10748:47:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 8627, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8623, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "11131:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 8624, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "11131:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 8625, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "11159:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 8626, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "WyvernExchange", + "nodeType": "MemberAccess", + "src": "11159:22:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "11131:50:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 8663, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8659, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "11523:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 8660, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "11523:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 8661, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "11551:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 8662, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "ExchangeV2", + "nodeType": "MemberAccess", + "src": "11551:18:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "11523:46:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 8699, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8695, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "11900:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 8696, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "11900:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 8697, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "11928:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 8698, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "X2Y2", + "nodeType": "MemberAccess", + "src": "11928:12:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "11900:40:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 8955, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 8951, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "14082:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 8952, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "14082:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 8953, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "14110:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 8954, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "LooksRareOrders", + "nodeType": "MemberAccess", + "src": "14110:23:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "14082:51:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 9064, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9060, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "15216:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9061, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "15216:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9062, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "15244:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 9063, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SudoSwap", + "nodeType": "MemberAccess", + "src": "15244:16:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "15216:44:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 9100, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9096, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "15590:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9097, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "15590:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9098, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "15618:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 9099, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_4", + "nodeType": "MemberAccess", + "src": "15618:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "15590:47:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 9136, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9132, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "15973:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9133, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "15973:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9134, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "16001:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 9135, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "LooksRareV2", + "nodeType": "MemberAccess", + "src": "16001:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "15973:47:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 9172, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9168, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "16356:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9169, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "16356:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9170, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "16384:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 9171, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "Blur", + "nodeType": "MemberAccess", + "src": "16384:12:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "16356:40:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 9286, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9282, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "17316:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9283, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "17316:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9284, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "17344:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 9285, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_5", + "nodeType": "MemberAccess", + "src": "17344:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "17316:47:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 9322, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9318, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "17699:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9319, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "17699:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9320, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "17727:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 9321, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_6", + "nodeType": "MemberAccess", + "src": "17727:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "17699:47:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9358, + "nodeType": "Block", + "src": "18078:55:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "556e6b6e6f776e206d61726b6574496420455448", + "id": 9355, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18099:22:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3bc896cadc7524646943368edd2f41dfd35c78e313328c146d90408931cae185", + "typeString": "literal_string \"Unknown marketId ETH\"" + }, + "value": "Unknown marketId ETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_3bc896cadc7524646943368edd2f41dfd35c78e313328c146d90408931cae185", + "typeString": "literal_string \"Unknown marketId ETH\"" + } + ], + "id": 9354, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "18092:6:58", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 9356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18092:30:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9357, + "nodeType": "ExpressionStatement", + "src": "18092:30:58" + } + ] + }, + "id": 9359, + "nodeType": "IfStatement", + "src": "17695:438:58", + "trueBody": { + "id": 9353, + "nodeType": "Block", + "src": "17748:324:58", + "statements": [ + { + "assignments": [ + 9324, + null + ], + "declarations": [ + { + "constant": false, + "id": 9324, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9353, + "src": "17763:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9323, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "17763:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9334, + "initialValue": { + "arguments": [ + { + "id": 9332, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8569, + "src": "17829:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9327, + "name": "seaPort_1_6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8015, + "src": "17789:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9326, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "17781:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9325, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17781:7:58", + "typeDescriptions": {} + } + }, + "id": 9328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17781:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9329, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "17781:25:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9331, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9330, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "17814:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "17781:47:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9333, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17781:59:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17762:78:58" + }, + { + "condition": { + "id": 9335, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8559, + "src": "17858:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9351, + "nodeType": "Block", + "src": "17982:80:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9347, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9324, + "src": "18008:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f36206661696c6564", + "id": 9348, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18017:29:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_5320b653cd5780735adae92ac3bcf0fff2a8be3d44e7d778c7caac0f6e924b5d", + "typeString": "literal_string \"Purchase SeaPort_1_6 failed\"" + }, + "value": "Purchase SeaPort_1_6 failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5320b653cd5780735adae92ac3bcf0fff2a8be3d44e7d778c7caac0f6e924b5d", + "typeString": "literal_string \"Purchase SeaPort_1_6 failed\"" + } + ], + "id": 9346, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "18000:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9349, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18000:47:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9350, + "nodeType": "ExpressionStatement", + "src": "18000:47:58" + } + ] + }, + "id": 9352, + "nodeType": "IfStatement", + "src": "17854:208:58", + "trueBody": { + "id": 9345, + "nodeType": "Block", + "src": "17869:107:58", + "statements": [ + { + "condition": { + "id": 9337, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "17891:8:58", + "subExpression": { + "id": 9336, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9324, + "src": "17892:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9344, + "nodeType": "IfStatement", + "src": "17887:75:58", + "trueBody": { + "id": 9343, + "nodeType": "Block", + "src": "17901:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9338, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17931:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9339, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17938:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9340, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17941:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9341, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "17930:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 8567, + "id": 9342, + "nodeType": "Return", + "src": "17923:20:58" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 9360, + "nodeType": "IfStatement", + "src": "17312:821:58", + "trueBody": { + "id": 9317, + "nodeType": "Block", + "src": "17365:324:58", + "statements": [ + { + "assignments": [ + 9288, + null + ], + "declarations": [ + { + "constant": false, + "id": 9288, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9317, + "src": "17380:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9287, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "17380:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9298, + "initialValue": { + "arguments": [ + { + "id": 9296, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8569, + "src": "17446:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9291, + "name": "seaPort_1_5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "17406:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9290, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "17398:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9289, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17398:7:58", + "typeDescriptions": {} + } + }, + "id": 9292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17398:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9293, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "17398:25:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9294, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "17431:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "17398:47:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9297, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17398:59:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17379:78:58" + }, + { + "condition": { + "id": 9299, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8559, + "src": "17475:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9315, + "nodeType": "Block", + "src": "17599:80:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9311, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9288, + "src": "17625:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f35206661696c6564", + "id": 9312, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17634:29:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_83f62501a9582b49b15f73bfa16e8789fc9181acb73eb6b2a01520c5a8cee0ce", + "typeString": "literal_string \"Purchase SeaPort_1_5 failed\"" + }, + "value": "Purchase SeaPort_1_5 failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_83f62501a9582b49b15f73bfa16e8789fc9181acb73eb6b2a01520c5a8cee0ce", + "typeString": "literal_string \"Purchase SeaPort_1_5 failed\"" + } + ], + "id": 9310, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "17617:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9313, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17617:47:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9314, + "nodeType": "ExpressionStatement", + "src": "17617:47:58" + } + ] + }, + "id": 9316, + "nodeType": "IfStatement", + "src": "17471:208:58", + "trueBody": { + "id": 9309, + "nodeType": "Block", + "src": "17486:107:58", + "statements": [ + { + "condition": { + "id": 9301, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "17508:8:58", + "subExpression": { + "id": 9300, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9288, + "src": "17509:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9308, + "nodeType": "IfStatement", + "src": "17504:75:58", + "trueBody": { + "id": 9307, + "nodeType": "Block", + "src": "17518:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9302, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17548:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9303, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17555:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9304, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17558:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9305, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "17547:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 8567, + "id": 9306, + "nodeType": "Return", + "src": "17540:20:58" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 9361, + "nodeType": "IfStatement", + "src": "16352:1781:58", + "trueBody": { + "id": 9281, + "nodeType": "Block", + "src": "16398:908:58", + "statements": [ + { + "assignments": [ + 9176, + 9178, + 9180 + ], + "declarations": [ + { + "constant": false, + "id": 9176, + "mutability": "mutable", + "name": "sell", + "nodeType": "VariableDeclaration", + "scope": 9281, + "src": "16413:23:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input" + }, + "typeName": { + "id": 9175, + "name": "IBlur.Input", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10442, + "src": "16413:11:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$10442_storage_ptr", + "typeString": "struct IBlur.Input" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9178, + "mutability": "mutable", + "name": "buy", + "nodeType": "VariableDeclaration", + "scope": 9281, + "src": "16438:22:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input" + }, + "typeName": { + "id": 9177, + "name": "IBlur.Input", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10442, + "src": "16438:11:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$10442_storage_ptr", + "typeString": "struct IBlur.Input" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9180, + "mutability": "mutable", + "name": "typeNft", + "nodeType": "VariableDeclaration", + "scope": 9281, + "src": "16462:14:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 9179, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "16462:6:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "id": 9192, + "initialValue": { + "arguments": [ + { + "id": 9183, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8569, + "src": "16491:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "expression": { + "id": 9184, + "name": "IBlur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10450, + "src": "16504:5:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IBlur_$10450_$", + "typeString": "type(contract IBlur)" + } + }, + "id": 9185, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "Input", + "nodeType": "MemberAccess", + "referencedDeclaration": 10442, + "src": "16504:11:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Input_$10442_storage_ptr_$", + "typeString": "type(struct IBlur.Input storage pointer)" + } + }, + { + "expression": { + "id": 9186, + "name": "IBlur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10450, + "src": "16517:5:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IBlur_$10450_$", + "typeString": "type(contract IBlur)" + } + }, + "id": 9187, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "Input", + "nodeType": "MemberAccess", + "referencedDeclaration": 10442, + "src": "16517:11:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Input_$10442_storage_ptr_$", + "typeString": "type(struct IBlur.Input storage pointer)" + } + }, + { + "id": 9189, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "16530:6:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes4_$", + "typeString": "type(bytes4)" + }, + "typeName": { + "id": 9188, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "16530:6:58", + "typeDescriptions": {} + } + } + ], + "id": 9190, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "16503:34:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_struct$_Input_$10442_storage_ptr_$_$_t_type$_t_struct$_Input_$10442_storage_ptr_$_$_t_type$_t_bytes4_$_$", + "typeString": "tuple(type(struct IBlur.Input storage pointer),type(struct IBlur.Input storage pointer),type(bytes4))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_struct$_Input_$10442_storage_ptr_$_$_t_type$_t_struct$_Input_$10442_storage_ptr_$_$_t_type$_t_bytes4_$_$", + "typeString": "tuple(type(struct IBlur.Input storage pointer),type(struct IBlur.Input storage pointer),type(bytes4))" + } + ], + "expression": { + "id": 9181, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "16480:3:58", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9182, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "16480:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9191, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16480:58:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_struct$_Input_$10442_memory_ptr_$_t_struct$_Input_$10442_memory_ptr_$_t_bytes4_$", + "typeString": "tuple(struct IBlur.Input memory,struct IBlur.Input memory,bytes4)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "16412:126:58" + }, + { + "condition": { + "id": 9193, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8559, + "src": "16556:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9224, + "nodeType": "Block", + "src": "16732:85:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9220, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9176, + "src": "16792:4:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + { + "id": 9221, + "name": "buy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9178, + "src": "16798:3:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9215, + "name": "blur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8011, + "src": "16756:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9214, + "name": "IBlur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10450, + "src": "16750:5:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IBlur_$10450_$", + "typeString": "type(contract IBlur)" + } + }, + "id": 9216, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16750:11:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBlur_$10450", + "typeString": "contract IBlur" + } + }, + "id": 9217, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "execute", + "nodeType": "MemberAccess", + "referencedDeclaration": 10449, + "src": "16750:19:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_Input_$10442_memory_ptr_$_t_struct$_Input_$10442_memory_ptr_$returns$__$", + "typeString": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + } + }, + "id": 9219, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9218, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "16777:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "16750:41:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_Input_$10442_memory_ptr_$_t_struct$_Input_$10442_memory_ptr_$returns$__$value", + "typeString": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + } + }, + "id": 9222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16750:52:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9223, + "nodeType": "ExpressionStatement", + "src": "16750:52:58" + } + ] + }, + "id": 9225, + "nodeType": "IfStatement", + "src": "16552:265:58", + "trueBody": { + "id": 9213, + "nodeType": "Block", + "src": "16567:159:58", + "statements": [ + { + "clauses": [ + { + "block": { + "id": 9203, + "nodeType": "Block", + "src": "16642:2:58", + "statements": [] + }, + "errorName": "", + "id": 9204, + "nodeType": "TryCatchClause", + "src": "16642:2:58" + }, + { + "block": { + "id": 9210, + "nodeType": "Block", + "src": "16651:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9205, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16681:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9206, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16688:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9207, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16691:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9208, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "16680:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 8567, + "id": 9209, + "nodeType": "Return", + "src": "16673:20:58" + } + ] + }, + "errorName": "", + "id": 9211, + "nodeType": "TryCatchClause", + "src": "16645:67:58" + } + ], + "externalCall": { + "arguments": [ + { + "id": 9200, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9176, + "src": "16631:4:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + { + "id": 9201, + "name": "buy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9178, + "src": "16637:3:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9195, + "name": "blur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8011, + "src": "16595:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9194, + "name": "IBlur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10450, + "src": "16589:5:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IBlur_$10450_$", + "typeString": "type(contract IBlur)" + } + }, + "id": 9196, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16589:11:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBlur_$10450", + "typeString": "contract IBlur" + } + }, + "id": 9197, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "execute", + "nodeType": "MemberAccess", + "referencedDeclaration": 10449, + "src": "16589:19:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_Input_$10442_memory_ptr_$_t_struct$_Input_$10442_memory_ptr_$returns$__$", + "typeString": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + } + }, + "id": 9199, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9198, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "16616:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "16589:41:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_Input_$10442_memory_ptr_$_t_struct$_Input_$10442_memory_ptr_$returns$__$value", + "typeString": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + } + }, + "id": 9202, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16589:52:58", + "tryCall": true, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9212, + "nodeType": "TryStatement", + "src": "16585:127:58" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "id": 9229, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9226, + "name": "typeNft", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9180, + "src": "16834:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9227, + "name": "LibAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4909, + "src": "16845:8:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibAsset_$4909_$", + "typeString": "type(library LibAsset)" + } + }, + "id": 9228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC721_ASSET_CLASS", + "nodeType": "MemberAccess", + "referencedDeclaration": 4822, + "src": "16845:27:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "src": "16834:38:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "id": 9251, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9248, + "name": "typeNft", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9180, + "src": "17024:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9249, + "name": "LibAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4909, + "src": "17035:8:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibAsset_$4909_$", + "typeString": "type(library LibAsset)" + } + }, + "id": 9250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC1155_ASSET_CLASS", + "nodeType": "MemberAccess", + "referencedDeclaration": 4830, + "src": "17035:28:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "src": "17024:39:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9278, + "nodeType": "Block", + "src": "17235:61:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "556e6b6e6f776e20746f6b656e2074797065", + "id": 9275, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17260:20:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b", + "typeString": "literal_string \"Unknown token type\"" + }, + "value": "Unknown token type" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b", + "typeString": "literal_string \"Unknown token type\"" + } + ], + "id": 9274, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "17253:6:58", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 9276, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17253:28:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9277, + "nodeType": "ExpressionStatement", + "src": "17253:28:58" + } + ] + }, + "id": 9279, + "nodeType": "IfStatement", + "src": "17020:276:58", + "trueBody": { + "id": 9273, + "nodeType": "Block", + "src": "17065:164:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9260, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "17151:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "id": 9259, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "17143:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9258, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17143:7:58", + "typeDescriptions": {} + } + }, + "id": 9261, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17143:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9262, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "17158:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 9263, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17158:12:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "expression": { + "expression": { + "id": 9264, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9176, + "src": "17172:4:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + "id": 9265, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "order", + "nodeType": "MemberAccess", + "referencedDeclaration": 10429, + "src": "17172:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$10427_memory_ptr", + "typeString": "struct IBlur.Order memory" + } + }, + "id": 9266, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenId", + "nodeType": "MemberAccess", + "referencedDeclaration": 10409, + "src": "17172:18:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "expression": { + "id": 9267, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9176, + "src": "17192:4:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + "id": 9268, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "order", + "nodeType": "MemberAccess", + "referencedDeclaration": 10429, + "src": "17192:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$10427_memory_ptr", + "typeString": "struct IBlur.Order memory" + } + }, + "id": 9269, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 10411, + "src": "17192:17:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "", + "id": 9270, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17211:2:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "expression": { + "arguments": [ + { + "expression": { + "expression": { + "id": 9253, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9176, + "src": "17103:4:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + "id": 9254, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "order", + "nodeType": "MemberAccess", + "referencedDeclaration": 10429, + "src": "17103:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$10427_memory_ptr", + "typeString": "struct IBlur.Order memory" + } + }, + "id": 9255, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "collection", + "nodeType": "MemberAccess", + "referencedDeclaration": 10407, + "src": "17103:21:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9252, + "name": "IERC1155Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1095, + "src": "17083:19:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC1155Upgradeable_$1095_$", + "typeString": "type(contract IERC1155Upgradeable)" + } + }, + "id": 9256, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17083:42:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1155Upgradeable_$1095", + "typeString": "contract IERC1155Upgradeable" + } + }, + "id": 9257, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1078, + "src": "17083:59:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,address,uint256,uint256,bytes memory) external" + } + }, + "id": 9271, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17083:131:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9272, + "nodeType": "ExpressionStatement", + "src": "17083:131:58" + } + ] + } + }, + "id": 9280, + "nodeType": "IfStatement", + "src": "16830:466:58", + "trueBody": { + "id": 9247, + "nodeType": "Block", + "src": "16874:140:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9238, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "16959:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "id": 9237, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "16951:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9236, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16951:7:58", + "typeDescriptions": {} + } + }, + "id": 9239, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16951:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9240, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "16966:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 9241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16966:12:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "expression": { + "expression": { + "id": 9242, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9176, + "src": "16980:4:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + "id": 9243, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "order", + "nodeType": "MemberAccess", + "referencedDeclaration": 10429, + "src": "16980:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$10427_memory_ptr", + "typeString": "struct IBlur.Order memory" + } + }, + "id": 9244, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenId", + "nodeType": "MemberAccess", + "referencedDeclaration": 10409, + "src": "16980:18:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "expression": { + "expression": { + "id": 9231, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9176, + "src": "16911:4:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + "id": 9232, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "order", + "nodeType": "MemberAccess", + "referencedDeclaration": 10429, + "src": "16911:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$10427_memory_ptr", + "typeString": "struct IBlur.Order memory" + } + }, + "id": 9233, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "collection", + "nodeType": "MemberAccess", + "referencedDeclaration": 10407, + "src": "16911:21:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9230, + "name": "IERC721Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1356, + "src": "16892:18:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC721Upgradeable_$1356_$", + "typeString": "type(contract IERC721Upgradeable)" + } + }, + "id": 9234, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16892:41:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC721Upgradeable_$1356", + "typeString": "contract IERC721Upgradeable" + } + }, + "id": 9235, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1299, + "src": "16892:58:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256) external" + } + }, + "id": 9245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16892:107:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9246, + "nodeType": "ExpressionStatement", + "src": "16892:107:58" + } + ] + } + } + ] + } + }, + "id": 9362, + "nodeType": "IfStatement", + "src": "15969:2164:58", + "trueBody": { + "id": 9167, + "nodeType": "Block", + "src": "16022:324:58", + "statements": [ + { + "assignments": [ + 9138, + null + ], + "declarations": [ + { + "constant": false, + "id": 9138, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9167, + "src": "16037:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9137, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "16037:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9148, + "initialValue": { + "arguments": [ + { + "id": 9146, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8569, + "src": "16103:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9141, + "name": "looksRareV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8009, + "src": "16063:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9140, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "16055:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9139, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16055:7:58", + "typeDescriptions": {} + } + }, + "id": 9142, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16055:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9143, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "16055:25:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9145, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9144, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "16088:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "16055:47:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9147, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16055:59:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "16036:78:58" + }, + { + "condition": { + "id": 9149, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8559, + "src": "16132:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9165, + "nodeType": "Block", + "src": "16256:80:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9161, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9138, + "src": "16282:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5075726368617365204c6f6f6b73526172655632206661696c6564", + "id": 9162, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16291:29:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_bf725f533a31a5fc822de78c3f59575168899683c9fc9b37f7d7aa10c766d3c1", + "typeString": "literal_string \"Purchase LooksRareV2 failed\"" + }, + "value": "Purchase LooksRareV2 failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_bf725f533a31a5fc822de78c3f59575168899683c9fc9b37f7d7aa10c766d3c1", + "typeString": "literal_string \"Purchase LooksRareV2 failed\"" + } + ], + "id": 9160, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "16274:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9163, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16274:47:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9164, + "nodeType": "ExpressionStatement", + "src": "16274:47:58" + } + ] + }, + "id": 9166, + "nodeType": "IfStatement", + "src": "16128:208:58", + "trueBody": { + "id": 9159, + "nodeType": "Block", + "src": "16143:107:58", + "statements": [ + { + "condition": { + "id": 9151, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "16165:8:58", + "subExpression": { + "id": 9150, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9138, + "src": "16166:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9158, + "nodeType": "IfStatement", + "src": "16161:75:58", + "trueBody": { + "id": 9157, + "nodeType": "Block", + "src": "16175:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9152, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16205:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9153, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16212:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9154, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16215:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9155, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "16204:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 8567, + "id": 9156, + "nodeType": "Return", + "src": "16197:20:58" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 9363, + "nodeType": "IfStatement", + "src": "15586:2547:58", + "trueBody": { + "id": 9131, + "nodeType": "Block", + "src": "15639:324:58", + "statements": [ + { + "assignments": [ + 9102, + null + ], + "declarations": [ + { + "constant": false, + "id": 9102, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9131, + "src": "15654:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9101, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "15654:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9112, + "initialValue": { + "arguments": [ + { + "id": 9110, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8569, + "src": "15720:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9105, + "name": "seaPort_1_4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8007, + "src": "15680:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9104, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15672:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9103, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15672:7:58", + "typeDescriptions": {} + } + }, + "id": 9106, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15672:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9107, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "15672:25:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9109, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9108, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "15705:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "15672:47:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9111, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15672:59:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15653:78:58" + }, + { + "condition": { + "id": 9113, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8559, + "src": "15749:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9129, + "nodeType": "Block", + "src": "15873:80:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9125, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9102, + "src": "15899:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f34206661696c6564", + "id": 9126, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15908:29:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1cf39be99a03bb39414ad01e616c59ec2038a5746618a3f8aee8a485d8d5e50a", + "typeString": "literal_string \"Purchase SeaPort_1_4 failed\"" + }, + "value": "Purchase SeaPort_1_4 failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1cf39be99a03bb39414ad01e616c59ec2038a5746618a3f8aee8a485d8d5e50a", + "typeString": "literal_string \"Purchase SeaPort_1_4 failed\"" + } + ], + "id": 9124, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "15891:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9127, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15891:47:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9128, + "nodeType": "ExpressionStatement", + "src": "15891:47:58" + } + ] + }, + "id": 9130, + "nodeType": "IfStatement", + "src": "15745:208:58", + "trueBody": { + "id": 9123, + "nodeType": "Block", + "src": "15760:107:58", + "statements": [ + { + "condition": { + "id": 9115, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "15782:8:58", + "subExpression": { + "id": 9114, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9102, + "src": "15783:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9122, + "nodeType": "IfStatement", + "src": "15778:75:58", + "trueBody": { + "id": 9121, + "nodeType": "Block", + "src": "15792:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9116, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15822:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9117, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15829:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9118, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15832:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9119, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "15821:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 8567, + "id": 9120, + "nodeType": "Return", + "src": "15814:20:58" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 9364, + "nodeType": "IfStatement", + "src": "15212:2921:58", + "trueBody": { + "id": 9095, + "nodeType": "Block", + "src": "15262:318:58", + "statements": [ + { + "assignments": [ + 9066, + null + ], + "declarations": [ + { + "constant": false, + "id": 9066, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9095, + "src": "15277:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9065, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "15277:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9076, + "initialValue": { + "arguments": [ + { + "id": 9074, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8569, + "src": "15340:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9069, + "name": "sudoswap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8005, + "src": "15303:8:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9068, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15295:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9067, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15295:7:58", + "typeDescriptions": {} + } + }, + "id": 9070, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15295:17:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9071, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "15295:22:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9073, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9072, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "15325:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "15295:44:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9075, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15295:56:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15276:75:58" + }, + { + "condition": { + "id": 9077, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8559, + "src": "15369:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9093, + "nodeType": "Block", + "src": "15493:77:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9089, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9066, + "src": "15519:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5075726368617365207375646f73776170206661696c6564", + "id": 9090, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15528:26:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_af8784af813955ccf5679f356dd871ef58abf3a7050c9104ea0ff5ddaa4b9287", + "typeString": "literal_string \"Purchase sudoswap failed\"" + }, + "value": "Purchase sudoswap failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_af8784af813955ccf5679f356dd871ef58abf3a7050c9104ea0ff5ddaa4b9287", + "typeString": "literal_string \"Purchase sudoswap failed\"" + } + ], + "id": 9088, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "15511:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9091, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15511:44:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9092, + "nodeType": "ExpressionStatement", + "src": "15511:44:58" + } + ] + }, + "id": 9094, + "nodeType": "IfStatement", + "src": "15365:205:58", + "trueBody": { + "id": 9087, + "nodeType": "Block", + "src": "15380:107:58", + "statements": [ + { + "condition": { + "id": 9079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "15402:8:58", + "subExpression": { + "id": 9078, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9066, + "src": "15403:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9086, + "nodeType": "IfStatement", + "src": "15398:75:58", + "trueBody": { + "id": 9085, + "nodeType": "Block", + "src": "15412:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9080, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15442:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9081, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15449:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9082, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15452:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9083, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "15441:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 8567, + "id": 9084, + "nodeType": "Return", + "src": "15434:20:58" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 9365, + "nodeType": "IfStatement", + "src": "14078:4055:58", + "trueBody": { + "id": 9059, + "nodeType": "Block", + "src": "14135:1071:58", + "statements": [ + { + "assignments": [ + 8959, + 8961, + 8963 + ], + "declarations": [ + { + "constant": false, + "id": 8959, + "mutability": "mutable", + "name": "takerOrder", + "nodeType": "VariableDeclaration", + "scope": 9059, + "src": "14150:41:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TakerOrder_$10789_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder" + }, + "typeName": { + "id": 8958, + "name": "LibLooksRare.TakerOrder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10789, + "src": "14150:23:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TakerOrder_$10789_storage_ptr", + "typeString": "struct LibLooksRare.TakerOrder" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8961, + "mutability": "mutable", + "name": "makerOrder", + "nodeType": "VariableDeclaration", + "scope": 9059, + "src": "14193:41:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder" + }, + "typeName": { + "id": 8960, + "name": "LibLooksRare.MakerOrder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10776, + "src": "14193:23:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$10776_storage_ptr", + "typeString": "struct LibLooksRare.MakerOrder" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8963, + "mutability": "mutable", + "name": "typeNft", + "nodeType": "VariableDeclaration", + "scope": 9059, + "src": "14236:14:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 8962, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "14236:6:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "id": 8975, + "initialValue": { + "arguments": [ + { + "id": 8966, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8569, + "src": "14265:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "expression": { + "id": 8967, + "name": "LibLooksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10848, + "src": "14278:12:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibLooksRare_$10848_$", + "typeString": "type(library LibLooksRare)" + } + }, + "id": 8968, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "TakerOrder", + "nodeType": "MemberAccess", + "referencedDeclaration": 10789, + "src": "14278:23:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_TakerOrder_$10789_storage_ptr_$", + "typeString": "type(struct LibLooksRare.TakerOrder storage pointer)" + } + }, + { + "expression": { + "id": 8969, + "name": "LibLooksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10848, + "src": "14303:12:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibLooksRare_$10848_$", + "typeString": "type(library LibLooksRare)" + } + }, + "id": 8970, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MakerOrder", + "nodeType": "MemberAccess", + "referencedDeclaration": 10776, + "src": "14303:23:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_MakerOrder_$10776_storage_ptr_$", + "typeString": "type(struct LibLooksRare.MakerOrder storage pointer)" + } + }, + { + "id": 8972, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14328:6:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes4_$", + "typeString": "type(bytes4)" + }, + "typeName": { + "id": 8971, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "14328:6:58", + "typeDescriptions": {} + } + } + ], + "id": 8973, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "14277:58:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_struct$_TakerOrder_$10789_storage_ptr_$_$_t_type$_t_struct$_MakerOrder_$10776_storage_ptr_$_$_t_type$_t_bytes4_$_$", + "typeString": "tuple(type(struct LibLooksRare.TakerOrder storage pointer),type(struct LibLooksRare.MakerOrder storage pointer),type(bytes4))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_struct$_TakerOrder_$10789_storage_ptr_$_$_t_type$_t_struct$_MakerOrder_$10776_storage_ptr_$_$_t_type$_t_bytes4_$_$", + "typeString": "tuple(type(struct LibLooksRare.TakerOrder storage pointer),type(struct LibLooksRare.MakerOrder storage pointer),type(bytes4))" + } + ], + "expression": { + "id": 8964, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "14254:3:58", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 8965, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "14254:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 8974, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14254:82:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_struct$_TakerOrder_$10789_memory_ptr_$_t_struct$_MakerOrder_$10776_memory_ptr_$_t_bytes4_$", + "typeString": "tuple(struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory,bytes4)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14149:187:58" + }, + { + "condition": { + "id": 8976, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8559, + "src": "14354:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9007, + "nodeType": "Block", + "src": "14581:136:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9003, + "name": "takerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8959, + "src": "14679:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TakerOrder_$10789_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + } + }, + { + "id": 9004, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8961, + "src": "14691:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$10789_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$10789_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "expression": { + "arguments": [ + { + "id": 8998, + "name": "looksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8003, + "src": "14610:9:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8997, + "name": "ILooksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10503, + "src": "14599:10:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILooksRare_$10503_$", + "typeString": "type(contract ILooksRare)" + } + }, + "id": 8999, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14599:21:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILooksRare_$10503", + "typeString": "contract ILooksRare" + } + }, + "id": 9000, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "matchAskWithTakerBidUsingETHAndWETH", + "nodeType": "MemberAccess", + "referencedDeclaration": 10488, + "src": "14599:57:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_TakerOrder_$10789_memory_ptr_$_t_struct$_MakerOrder_$10776_memory_ptr_$returns$__$", + "typeString": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + } + }, + "id": 9002, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9001, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "14664:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "14599:79:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_TakerOrder_$10789_memory_ptr_$_t_struct$_MakerOrder_$10776_memory_ptr_$returns$__$value", + "typeString": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + } + }, + "id": 9005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14599:103:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9006, + "nodeType": "ExpressionStatement", + "src": "14599:103:58" + } + ] + }, + "id": 9008, + "nodeType": "IfStatement", + "src": "14350:367:58", + "trueBody": { + "id": 8996, + "nodeType": "Block", + "src": "14365:210:58", + "statements": [ + { + "clauses": [ + { + "block": { + "id": 8986, + "nodeType": "Block", + "src": "14491:2:58", + "statements": [] + }, + "errorName": "", + "id": 8987, + "nodeType": "TryCatchClause", + "src": "14491:2:58" + }, + { + "block": { + "id": 8993, + "nodeType": "Block", + "src": "14500:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 8988, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14530:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 8989, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14537:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 8990, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14540:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 8991, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "14529:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 8567, + "id": 8992, + "nodeType": "Return", + "src": "14522:20:58" + } + ] + }, + "errorName": "", + "id": 8994, + "nodeType": "TryCatchClause", + "src": "14494:67:58" + } + ], + "externalCall": { + "arguments": [ + { + "id": 8983, + "name": "takerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8959, + "src": "14467:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TakerOrder_$10789_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + } + }, + { + "id": 8984, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8961, + "src": "14479:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$10789_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$10789_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "expression": { + "arguments": [ + { + "id": 8978, + "name": "looksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8003, + "src": "14398:9:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8977, + "name": "ILooksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10503, + "src": "14387:10:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILooksRare_$10503_$", + "typeString": "type(contract ILooksRare)" + } + }, + "id": 8979, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14387:21:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILooksRare_$10503", + "typeString": "contract ILooksRare" + } + }, + "id": 8980, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "matchAskWithTakerBidUsingETHAndWETH", + "nodeType": "MemberAccess", + "referencedDeclaration": 10488, + "src": "14387:57:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_TakerOrder_$10789_memory_ptr_$_t_struct$_MakerOrder_$10776_memory_ptr_$returns$__$", + "typeString": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + } + }, + "id": 8982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 8981, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "14452:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "14387:79:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_TakerOrder_$10789_memory_ptr_$_t_struct$_MakerOrder_$10776_memory_ptr_$returns$__$value", + "typeString": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + } + }, + "id": 8985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14387:103:58", + "tryCall": true, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8995, + "nodeType": "TryStatement", + "src": "14383:178:58" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "id": 9012, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9009, + "name": "typeNft", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8963, + "src": "14734:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9010, + "name": "LibAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4909, + "src": "14745:8:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibAsset_$4909_$", + "typeString": "type(library LibAsset)" + } + }, + "id": 9011, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC721_ASSET_CLASS", + "nodeType": "MemberAccess", + "referencedDeclaration": 4822, + "src": "14745:27:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "src": "14734:38:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "id": 9032, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9029, + "name": "typeNft", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8963, + "src": "14924:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9030, + "name": "LibAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4909, + "src": "14935:8:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibAsset_$4909_$", + "typeString": "type(library LibAsset)" + } + }, + "id": 9031, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC1155_ASSET_CLASS", + "nodeType": "MemberAccess", + "referencedDeclaration": 4830, + "src": "14935:28:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "src": "14924:39:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9056, + "nodeType": "Block", + "src": "15135:61:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "556e6b6e6f776e20746f6b656e2074797065", + "id": 9053, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15160:20:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b", + "typeString": "literal_string \"Unknown token type\"" + }, + "value": "Unknown token type" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b", + "typeString": "literal_string \"Unknown token type\"" + } + ], + "id": 9052, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "15153:6:58", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 9054, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15153:28:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9055, + "nodeType": "ExpressionStatement", + "src": "15153:28:58" + } + ] + }, + "id": 9057, + "nodeType": "IfStatement", + "src": "14920:276:58", + "trueBody": { + "id": 9051, + "nodeType": "Block", + "src": "14965:164:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9040, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "15051:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "id": 9039, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15043:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9038, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15043:7:58", + "typeDescriptions": {} + } + }, + "id": 9041, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15043:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9042, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "15058:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 9043, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15058:12:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "expression": { + "id": 9044, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8961, + "src": "15072:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + }, + "id": 9045, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenId", + "nodeType": "MemberAccess", + "referencedDeclaration": 10753, + "src": "15072:18:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9046, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8961, + "src": "15092:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + }, + "id": 9047, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 10755, + "src": "15092:17:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "", + "id": 9048, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15111:2:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "expression": { + "arguments": [ + { + "expression": { + "id": 9034, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8961, + "src": "15003:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + }, + "id": 9035, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "collection", + "nodeType": "MemberAccess", + "referencedDeclaration": 10749, + "src": "15003:21:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9033, + "name": "IERC1155Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1095, + "src": "14983:19:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC1155Upgradeable_$1095_$", + "typeString": "type(contract IERC1155Upgradeable)" + } + }, + "id": 9036, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14983:42:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1155Upgradeable_$1095", + "typeString": "contract IERC1155Upgradeable" + } + }, + "id": 9037, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1078, + "src": "14983:59:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,address,uint256,uint256,bytes memory) external" + } + }, + "id": 9049, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14983:131:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9050, + "nodeType": "ExpressionStatement", + "src": "14983:131:58" + } + ] + } + }, + "id": 9058, + "nodeType": "IfStatement", + "src": "14730:466:58", + "trueBody": { + "id": 9028, + "nodeType": "Block", + "src": "14774:140:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9020, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "14859:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "id": 9019, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14851:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9018, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14851:7:58", + "typeDescriptions": {} + } + }, + "id": 9021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14851:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9022, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "14866:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 9023, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14866:12:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "expression": { + "id": 9024, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8961, + "src": "14880:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + }, + "id": 9025, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenId", + "nodeType": "MemberAccess", + "referencedDeclaration": 10753, + "src": "14880:18:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "expression": { + "id": 9014, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8961, + "src": "14811:10:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + }, + "id": 9015, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "collection", + "nodeType": "MemberAccess", + "referencedDeclaration": 10749, + "src": "14811:21:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9013, + "name": "IERC721Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1356, + "src": "14792:18:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC721Upgradeable_$1356_$", + "typeString": "type(contract IERC721Upgradeable)" + } + }, + "id": 9016, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14792:41:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC721Upgradeable_$1356", + "typeString": "contract IERC721Upgradeable" + } + }, + "id": 9017, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1299, + "src": "14792:58:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256) external" + } + }, + "id": 9026, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14792:107:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9027, + "nodeType": "ExpressionStatement", + "src": "14792:107:58" + } + ] + } + } + ] + } + }, + "id": 9366, + "nodeType": "IfStatement", + "src": "11896:6237:58", + "trueBody": { + "id": 8950, + "nodeType": "Block", + "src": "11942:2130:58", + "statements": [ + { + "assignments": [ + 8703 + ], + "declarations": [ + { + "constant": false, + "id": 8703, + "mutability": "mutable", + "name": "input", + "nodeType": "VariableDeclaration", + "scope": 8950, + "src": "11956:27:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput" + }, + "typeName": { + "id": 8702, + "name": "Ix2y2.RunInput", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10725, + "src": "11956:14:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_storage_ptr", + "typeString": "struct Ix2y2.RunInput" + } + }, + "visibility": "internal" + } + ], + "id": 8711, + "initialValue": { + "arguments": [ + { + "id": 8706, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8569, + "src": "11997:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "expression": { + "id": 8707, + "name": "Ix2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10740, + "src": "12010:5:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Ix2y2_$10740_$", + "typeString": "type(contract Ix2y2)" + } + }, + "id": 8708, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "RunInput", + "nodeType": "MemberAccess", + "referencedDeclaration": 10725, + "src": "12010:14:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_RunInput_$10725_storage_ptr_$", + "typeString": "type(struct Ix2y2.RunInput storage pointer)" + } + } + ], + "id": 8709, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12009:16:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_RunInput_$10725_storage_ptr_$", + "typeString": "type(struct Ix2y2.RunInput storage pointer)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_struct$_RunInput_$10725_storage_ptr_$", + "typeString": "type(struct Ix2y2.RunInput storage pointer)" + } + ], + "expression": { + "id": 8704, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "11986:3:58", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 8705, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "11986:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 8710, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11986:40:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11956:70:58" + }, + { + "condition": { + "id": 8712, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8559, + "src": "12045:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8741, + "nodeType": "Block", + "src": "12213:77:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8738, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8703, + "src": "12269:5:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "expression": { + "arguments": [ + { + "id": 8733, + "name": "x2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8001, + "src": "12237:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8732, + "name": "Ix2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10740, + "src": "12231:5:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Ix2y2_$10740_$", + "typeString": "type(contract Ix2y2)" + } + }, + "id": 8734, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12231:11:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ix2y2_$10740", + "typeString": "contract Ix2y2" + } + }, + "id": 8735, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "run", + "nodeType": "MemberAccess", + "referencedDeclaration": 10739, + "src": "12231:15:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_RunInput_$10725_memory_ptr_$returns$__$", + "typeString": "function (struct Ix2y2.RunInput memory) payable external" + } + }, + "id": 8737, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 8736, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "12254:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "12231:37:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_RunInput_$10725_memory_ptr_$returns$__$value", + "typeString": "function (struct Ix2y2.RunInput memory) payable external" + } + }, + "id": 8739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12231:44:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8740, + "nodeType": "ExpressionStatement", + "src": "12231:44:58" + } + ] + }, + "id": 8742, + "nodeType": "IfStatement", + "src": "12041:249:58", + "trueBody": { + "id": 8731, + "nodeType": "Block", + "src": "12056:151:58", + "statements": [ + { + "clauses": [ + { + "block": { + "id": 8721, + "nodeType": "Block", + "src": "12123:2:58", + "statements": [] + }, + "errorName": "", + "id": 8722, + "nodeType": "TryCatchClause", + "src": "12123:2:58" + }, + { + "block": { + "id": 8728, + "nodeType": "Block", + "src": "12132:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 8723, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12162:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 8724, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12169:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 8725, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12172:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 8726, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12161:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 8567, + "id": 8727, + "nodeType": "Return", + "src": "12154:20:58" + } + ] + }, + "errorName": "", + "id": 8729, + "nodeType": "TryCatchClause", + "src": "12126:67:58" + } + ], + "externalCall": { + "arguments": [ + { + "id": 8719, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8703, + "src": "12116:5:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "expression": { + "arguments": [ + { + "id": 8714, + "name": "x2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8001, + "src": "12084:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8713, + "name": "Ix2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10740, + "src": "12078:5:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Ix2y2_$10740_$", + "typeString": "type(contract Ix2y2)" + } + }, + "id": 8715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12078:11:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ix2y2_$10740", + "typeString": "contract Ix2y2" + } + }, + "id": 8716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "run", + "nodeType": "MemberAccess", + "referencedDeclaration": 10739, + "src": "12078:15:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_RunInput_$10725_memory_ptr_$returns$__$", + "typeString": "function (struct Ix2y2.RunInput memory) payable external" + } + }, + "id": 8718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 8717, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "12101:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "12078:37:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_RunInput_$10725_memory_ptr_$returns$__$value", + "typeString": "function (struct Ix2y2.RunInput memory) payable external" + } + }, + "id": 8720, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12078:44:58", + "tryCall": true, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8730, + "nodeType": "TryStatement", + "src": "12074:119:58" + } + ] + } + }, + { + "body": { + "id": 8948, + "nodeType": "Block", + "src": "12537:1525:58", + "statements": [ + { + "assignments": [ + 8756 + ], + "declarations": [ + { + "constant": false, + "id": 8756, + "mutability": "mutable", + "name": "orderId", + "nodeType": "VariableDeclaration", + "scope": 8948, + "src": "12555:15:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8755, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12555:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8762, + "initialValue": { + "expression": { + "baseExpression": { + "expression": { + "id": 8757, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8703, + "src": "12573:5:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 8758, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "details", + "nodeType": "MemberAccess", + "referencedDeclaration": 10716, + "src": "12573:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_SettleDetail_$10697_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory[] memory" + } + }, + "id": 8760, + "indexExpression": { + "id": 8759, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8744, + "src": "12587:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12573:16:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SettleDetail_$10697_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory" + } + }, + "id": 8761, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "orderIdx", + "nodeType": "MemberAccess", + "referencedDeclaration": 10677, + "src": "12573:25:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12555:43:58" + }, + { + "assignments": [ + 8764 + ], + "declarations": [ + { + "constant": false, + "id": 8764, + "mutability": "mutable", + "name": "itemId", + "nodeType": "VariableDeclaration", + "scope": 8948, + "src": "12616:14:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8763, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12616:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8770, + "initialValue": { + "expression": { + "baseExpression": { + "expression": { + "id": 8765, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8703, + "src": "12633:5:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 8766, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "details", + "nodeType": "MemberAccess", + "referencedDeclaration": 10716, + "src": "12633:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_SettleDetail_$10697_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory[] memory" + } + }, + "id": 8768, + "indexExpression": { + "id": 8767, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8744, + "src": "12647:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12633:16:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SettleDetail_$10697_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory" + } + }, + "id": 8769, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "itemIdx", + "nodeType": "MemberAccess", + "referencedDeclaration": 10679, + "src": "12633:24:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12616:41:58" + }, + { + "assignments": [ + 8772 + ], + "declarations": [ + { + "constant": false, + "id": 8772, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 8948, + "src": "12675:17:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 8771, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "12675:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 8781, + "initialValue": { + "expression": { + "baseExpression": { + "expression": { + "baseExpression": { + "expression": { + "id": 8773, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8703, + "src": "12695:5:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 8774, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "orders", + "nodeType": "MemberAccess", + "referencedDeclaration": 10713, + "src": "12695:12:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Order_$10668_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Order memory[] memory" + } + }, + "id": 8776, + "indexExpression": { + "id": 8775, + "name": "orderId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8756, + "src": "12708:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12695:21:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$10668_memory_ptr", + "typeString": "struct Ix2y2.Order memory" + } + }, + "id": 8777, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "items", + "nodeType": "MemberAccess", + "referencedDeclaration": 10659, + "src": "12695:27:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_OrderItem_$10628_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.OrderItem memory[] memory" + } + }, + "id": 8779, + "indexExpression": { + "id": 8778, + "name": "itemId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8764, + "src": "12723:6:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12695:35:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OrderItem_$10628_memory_ptr", + "typeString": "struct Ix2y2.OrderItem memory" + } + }, + "id": 8780, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "data", + "nodeType": "MemberAccess", + "referencedDeclaration": 10627, + "src": "12695:40:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12675:60:58" + }, + { + "id": 8815, + "nodeType": "Block", + "src": "12753:268:58", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 8798, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8789, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "baseExpression": { + "expression": { + "id": 8782, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8703, + "src": "12779:5:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 8783, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "orders", + "nodeType": "MemberAccess", + "referencedDeclaration": 10713, + "src": "12779:12:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Order_$10668_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Order memory[] memory" + } + }, + "id": 8785, + "indexExpression": { + "id": 8784, + "name": "orderId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8756, + "src": "12792:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12779:21:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$10668_memory_ptr", + "typeString": "struct Ix2y2.Order memory" + } + }, + "id": 8786, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "dataMask", + "nodeType": "MemberAccess", + "referencedDeclaration": 10656, + "src": "12779:30:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 8787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "12779:37:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 8788, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12819:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "12779:41:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8797, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "baseExpression": { + "expression": { + "id": 8790, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8703, + "src": "12824:5:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 8791, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "details", + "nodeType": "MemberAccess", + "referencedDeclaration": 10716, + "src": "12824:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_SettleDetail_$10697_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory[] memory" + } + }, + "id": 8793, + "indexExpression": { + "id": 8792, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8744, + "src": "12838:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12824:16:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SettleDetail_$10697_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory" + } + }, + "id": 8794, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "dataReplacement", + "nodeType": "MemberAccess", + "referencedDeclaration": 10687, + "src": "12824:32:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 8795, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "12824:39:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 8796, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12866:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "12824:43:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "12779:88:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8814, + "nodeType": "IfStatement", + "src": "12775:228:58", + "trueBody": { + "id": 8813, + "nodeType": "Block", + "src": "12869:134:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8800, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8772, + "src": "12909:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "baseExpression": { + "expression": { + "id": 8801, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8703, + "src": "12915:5:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 8802, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "details", + "nodeType": "MemberAccess", + "referencedDeclaration": 10716, + "src": "12915:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_SettleDetail_$10697_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory[] memory" + } + }, + "id": 8804, + "indexExpression": { + "id": 8803, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8744, + "src": "12929:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12915:16:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SettleDetail_$10697_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory" + } + }, + "id": 8805, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "dataReplacement", + "nodeType": "MemberAccess", + "referencedDeclaration": 10687, + "src": "12915:32:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "baseExpression": { + "expression": { + "id": 8806, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8703, + "src": "12949:5:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 8807, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "orders", + "nodeType": "MemberAccess", + "referencedDeclaration": 10713, + "src": "12949:12:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Order_$10668_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Order memory[] memory" + } + }, + "id": 8809, + "indexExpression": { + "id": 8808, + "name": "orderId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8756, + "src": "12962:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "12949:21:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$10668_memory_ptr", + "typeString": "struct Ix2y2.Order memory" + } + }, + "id": 8810, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "dataMask", + "nodeType": "MemberAccess", + "referencedDeclaration": 10656, + "src": "12949:30:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 8799, + "name": "_arrayReplace", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10065, + "src": "12895:13:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (bytes memory,bytes memory,bytes memory) view" + } + }, + "id": 8811, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12895:85:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8812, + "nodeType": "ExpressionStatement", + "src": "12895:85:58" + } + ] + } + } + ] + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8822, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "baseExpression": { + "expression": { + "id": 8816, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8703, + "src": "13074:5:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 8817, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "orders", + "nodeType": "MemberAccess", + "referencedDeclaration": 10713, + "src": "13074:12:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Order_$10668_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Order memory[] memory" + } + }, + "id": 8819, + "indexExpression": { + "id": 8818, + "name": "orderId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8756, + "src": "13087:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13074:21:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$10668_memory_ptr", + "typeString": "struct Ix2y2.Order memory" + } + }, + "id": 8820, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "delegateType", + "nodeType": "MemberAccess", + "referencedDeclaration": 10650, + "src": "13074:34:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "31", + "id": 8821, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13112:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "13074:39:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8883, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "baseExpression": { + "expression": { + "id": 8877, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8703, + "src": "13498:5:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 8878, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "orders", + "nodeType": "MemberAccess", + "referencedDeclaration": 10713, + "src": "13498:12:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Order_$10668_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Order memory[] memory" + } + }, + "id": 8880, + "indexExpression": { + "id": 8879, + "name": "orderId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8756, + "src": "13511:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13498:21:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$10668_memory_ptr", + "typeString": "struct Ix2y2.Order memory" + } + }, + "id": 8881, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "delegateType", + "nodeType": "MemberAccess", + "referencedDeclaration": 10650, + "src": "13498:34:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "32", + "id": 8882, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13536:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "13498:39:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8945, + "nodeType": "Block", + "src": "13972:76:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "756e6b6e6f776e2064656c6567617465547970652078327932", + "id": 8942, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14001:27:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_b9e628d538abf867b76153fc9fbf92e2395d1f1d03fe95fb0b6ee129f4f808af", + "typeString": "literal_string \"unknown delegateType x2y2\"" + }, + "value": "unknown delegateType x2y2" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_b9e628d538abf867b76153fc9fbf92e2395d1f1d03fe95fb0b6ee129f4f808af", + "typeString": "literal_string \"unknown delegateType x2y2\"" + } + ], + "id": 8941, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "13994:6:58", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 8943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13994:35:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8944, + "nodeType": "ExpressionStatement", + "src": "13994:35:58" + } + ] + }, + "id": 8946, + "nodeType": "IfStatement", + "src": "13494:554:58", + "trueBody": { + "id": 8940, + "nodeType": "Block", + "src": "13539:427:58", + "statements": [ + { + "assignments": [ + 8888 + ], + "declarations": [ + { + "constant": false, + "id": 8888, + "mutability": "mutable", + "name": "pairs", + "nodeType": "VariableDeclaration", + "scope": 8940, + "src": "13597:29:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$10640_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair1155[]" + }, + "typeName": { + "baseType": { + "id": 8886, + "name": "Ix2y2.Pair1155", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10640, + "src": "13597:14:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$10640_storage_ptr", + "typeString": "struct Ix2y2.Pair1155" + } + }, + "id": 8887, + "nodeType": "ArrayTypeName", + "src": "13597:16:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$10640_storage_$dyn_storage_ptr", + "typeString": "struct Ix2y2.Pair1155[]" + } + }, + "visibility": "internal" + } + ], + "id": 8897, + "initialValue": { + "arguments": [ + { + "id": 8891, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8772, + "src": "13640:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "baseExpression": { + "expression": { + "id": 8892, + "name": "Ix2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10740, + "src": "13647:5:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Ix2y2_$10740_$", + "typeString": "type(contract Ix2y2)" + } + }, + "id": 8893, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "Pair1155", + "nodeType": "MemberAccess", + "referencedDeclaration": 10640, + "src": "13647:14:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Pair1155_$10640_storage_ptr_$", + "typeString": "type(struct Ix2y2.Pair1155 storage pointer)" + } + }, + "id": 8894, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13647:16:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair1155_$10640_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair1155 memory[] memory)" + } + } + ], + "id": 8895, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "13646:18:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair1155_$10640_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair1155 memory[] memory)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair1155_$10640_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair1155 memory[] memory)" + } + ], + "expression": { + "id": 8889, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "13629:3:58", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 8890, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "13629:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 8896, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13629:36:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$10640_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13597:68:58" + }, + { + "body": { + "id": 8938, + "nodeType": "Block", + "src": "13731:217:58", + "statements": [ + { + "assignments": [ + 8912 + ], + "declarations": [ + { + "constant": false, + "id": 8912, + "mutability": "mutable", + "name": "p", + "nodeType": "VariableDeclaration", + "scope": 8938, + "src": "13757:23:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$10640_memory_ptr", + "typeString": "struct Ix2y2.Pair1155" + }, + "typeName": { + "id": 8911, + "name": "Ix2y2.Pair1155", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10640, + "src": "13757:14:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$10640_storage_ptr", + "typeString": "struct Ix2y2.Pair1155" + } + }, + "visibility": "internal" + } + ], + "id": 8916, + "initialValue": { + "baseExpression": { + "id": 8913, + "name": "pairs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8888, + "src": "13783:5:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$10640_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory[] memory" + } + }, + "id": 8915, + "indexExpression": { + "id": 8914, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8899, + "src": "13789:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13783:8:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$10640_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13757:34:58" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 8927, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "13880:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "id": 8926, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13872:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8925, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13872:7:58", + "typeDescriptions": {} + } + }, + "id": 8928, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13872:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8929, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "13887:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 8930, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13887:12:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "expression": { + "id": 8931, + "name": "p", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8912, + "src": "13901:1:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$10640_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory" + } + }, + "id": 8932, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenId", + "nodeType": "MemberAccess", + "referencedDeclaration": 10637, + "src": "13901:9:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 8933, + "name": "p", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8912, + "src": "13912:1:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$10640_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory" + } + }, + "id": 8934, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 10639, + "src": "13912:8:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "", + "id": 8935, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13922:2:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 8920, + "name": "p", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8912, + "src": "13845:1:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$10640_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory" + } + }, + "id": 8921, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "token", + "nodeType": "MemberAccess", + "referencedDeclaration": 10635, + "src": "13845:7:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8919, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13837:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8918, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13837:7:58", + "typeDescriptions": {} + } + }, + "id": 8922, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13837:16:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8917, + "name": "IERC1155Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1095, + "src": "13817:19:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC1155Upgradeable_$1095_$", + "typeString": "type(contract IERC1155Upgradeable)" + } + }, + "id": 8923, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13817:37:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1155Upgradeable_$1095", + "typeString": "contract IERC1155Upgradeable" + } + }, + "id": 8924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1078, + "src": "13817:54:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,address,uint256,uint256,bytes memory) external" + } + }, + "id": 8936, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13817:108:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8937, + "nodeType": "ExpressionStatement", + "src": "13817:108:58" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8905, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8902, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8899, + "src": "13708:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 8903, + "name": "pairs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8888, + "src": "13712:5:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$10640_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory[] memory" + } + }, + "id": 8904, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "13712:12:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13708:16:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8939, + "initializationExpression": { + "assignments": [ + 8899 + ], + "declarations": [ + { + "constant": false, + "id": 8899, + "mutability": "mutable", + "name": "j", + "nodeType": "VariableDeclaration", + "scope": 8939, + "src": "13693:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8898, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13693:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8901, + "initialValue": { + "hexValue": "30", + "id": 8900, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13705:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "13693:13:58" + }, + "loopExpression": { + "expression": { + "id": 8907, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "13726:3:58", + "subExpression": { + "id": 8906, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8899, + "src": "13726:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8908, + "nodeType": "ExpressionStatement", + "src": "13726:3:58" + }, + "nodeType": "ForStatement", + "src": "13688:260:58" + } + ] + } + }, + "id": 8947, + "nodeType": "IfStatement", + "src": "13070:978:58", + "trueBody": { + "id": 8876, + "nodeType": "Block", + "src": "13115:373:58", + "statements": [ + { + "assignments": [ + 8827 + ], + "declarations": [ + { + "constant": false, + "id": 8827, + "mutability": "mutable", + "name": "pairs", + "nodeType": "VariableDeclaration", + "scope": 8876, + "src": "13137:28:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair721_$10633_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair721[]" + }, + "typeName": { + "baseType": { + "id": 8825, + "name": "Ix2y2.Pair721", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10633, + "src": "13137:13:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair721_$10633_storage_ptr", + "typeString": "struct Ix2y2.Pair721" + } + }, + "id": 8826, + "nodeType": "ArrayTypeName", + "src": "13137:15:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair721_$10633_storage_$dyn_storage_ptr", + "typeString": "struct Ix2y2.Pair721[]" + } + }, + "visibility": "internal" + } + ], + "id": 8836, + "initialValue": { + "arguments": [ + { + "id": 8830, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8772, + "src": "13179:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "baseExpression": { + "expression": { + "id": 8831, + "name": "Ix2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10740, + "src": "13186:5:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Ix2y2_$10740_$", + "typeString": "type(contract Ix2y2)" + } + }, + "id": 8832, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "Pair721", + "nodeType": "MemberAccess", + "referencedDeclaration": 10633, + "src": "13186:13:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Pair721_$10633_storage_ptr_$", + "typeString": "type(struct Ix2y2.Pair721 storage pointer)" + } + }, + "id": 8833, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13186:15:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair721_$10633_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair721 memory[] memory)" + } + } + ], + "id": 8834, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "13185:17:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair721_$10633_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair721 memory[] memory)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair721_$10633_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair721 memory[] memory)" + } + ], + "expression": { + "id": 8828, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "13168:3:58", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 8829, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "13168:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 8835, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13168:35:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair721_$10633_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair721 memory[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13137:66:58" + }, + { + "body": { + "id": 8874, + "nodeType": "Block", + "src": "13269:201:58", + "statements": [ + { + "assignments": [ + 8851 + ], + "declarations": [ + { + "constant": false, + "id": 8851, + "mutability": "mutable", + "name": "p", + "nodeType": "VariableDeclaration", + "scope": 8874, + "src": "13295:22:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair721_$10633_memory_ptr", + "typeString": "struct Ix2y2.Pair721" + }, + "typeName": { + "id": 8850, + "name": "Ix2y2.Pair721", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 10633, + "src": "13295:13:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair721_$10633_storage_ptr", + "typeString": "struct Ix2y2.Pair721" + } + }, + "visibility": "internal" + } + ], + "id": 8855, + "initialValue": { + "baseExpression": { + "id": 8852, + "name": "pairs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8827, + "src": "13320:5:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair721_$10633_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair721 memory[] memory" + } + }, + "id": 8854, + "indexExpression": { + "id": 8853, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8838, + "src": "13326:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13320:8:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair721_$10633_memory_ptr", + "typeString": "struct Ix2y2.Pair721 memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13295:33:58" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 8866, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "13416:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "id": 8865, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13408:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8864, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13408:7:58", + "typeDescriptions": {} + } + }, + "id": 8867, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13408:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8868, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "13423:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 8869, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13423:12:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "expression": { + "id": 8870, + "name": "p", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8851, + "src": "13437:1:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair721_$10633_memory_ptr", + "typeString": "struct Ix2y2.Pair721 memory" + } + }, + "id": 8871, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenId", + "nodeType": "MemberAccess", + "referencedDeclaration": 10632, + "src": "13437:9:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 8859, + "name": "p", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8851, + "src": "13381:1:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair721_$10633_memory_ptr", + "typeString": "struct Ix2y2.Pair721 memory" + } + }, + "id": 8860, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "token", + "nodeType": "MemberAccess", + "referencedDeclaration": 10630, + "src": "13381:7:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8858, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13373:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8857, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13373:7:58", + "typeDescriptions": {} + } + }, + "id": 8861, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13373:16:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8856, + "name": "IERC721Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1356, + "src": "13354:18:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC721Upgradeable_$1356_$", + "typeString": "type(contract IERC721Upgradeable)" + } + }, + "id": 8862, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13354:36:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC721Upgradeable_$1356", + "typeString": "contract IERC721Upgradeable" + } + }, + "id": 8863, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1299, + "src": "13354:53:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256) external" + } + }, + "id": 8872, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13354:93:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8873, + "nodeType": "ExpressionStatement", + "src": "13354:93:58" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8844, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8841, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8838, + "src": "13246:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 8842, + "name": "pairs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8827, + "src": "13250:5:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair721_$10633_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair721 memory[] memory" + } + }, + "id": 8843, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "13250:12:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13246:16:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8875, + "initializationExpression": { + "assignments": [ + 8838 + ], + "declarations": [ + { + "constant": false, + "id": 8838, + "mutability": "mutable", + "name": "j", + "nodeType": "VariableDeclaration", + "scope": 8875, + "src": "13231:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8837, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13231:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8840, + "initialValue": { + "hexValue": "30", + "id": 8839, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13243:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "13231:13:58" + }, + "loopExpression": { + "expression": { + "id": 8846, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "13264:3:58", + "subExpression": { + "id": 8845, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8838, + "src": "13264:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8847, + "nodeType": "ExpressionStatement", + "src": "13264:3:58" + }, + "nodeType": "ForStatement", + "src": "13226:244:58" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8751, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8747, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8744, + "src": "12506:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "expression": { + "id": 8748, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8703, + "src": "12510:5:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 8749, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "details", + "nodeType": "MemberAccess", + "referencedDeclaration": 10716, + "src": "12510:13:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_SettleDetail_$10697_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory[] memory" + } + }, + "id": 8750, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "12510:20:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "12506:24:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8949, + "initializationExpression": { + "assignments": [ + 8744 + ], + "declarations": [ + { + "constant": false, + "id": 8744, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 8949, + "src": "12491:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8743, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12491:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8746, + "initialValue": { + "hexValue": "30", + "id": 8745, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12503:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "12491:13:58" + }, + "loopExpression": { + "expression": { + "id": 8753, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "12532:3:58", + "subExpression": { + "id": 8752, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8744, + "src": "12534:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8754, + "nodeType": "ExpressionStatement", + "src": "12532:3:58" + }, + "nodeType": "ForStatement", + "src": "12486:1576:58" + } + ] + } + }, + "id": 9367, + "nodeType": "IfStatement", + "src": "11519:6614:58", + "trueBody": { + "id": 8694, + "nodeType": "Block", + "src": "11571:319:58", + "statements": [ + { + "assignments": [ + 8665, + null + ], + "declarations": [ + { + "constant": false, + "id": 8665, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 8694, + "src": "11586:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8664, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11586:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 8675, + "initialValue": { + "arguments": [ + { + "id": 8673, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8569, + "src": "11651:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 8668, + "name": "exchangeV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7997, + "src": "11612:10:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8667, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "11604:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8666, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11604:7:58", + "typeDescriptions": {} + } + }, + "id": 8669, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11604:19:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "11604:24:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 8672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 8671, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "11636:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "11604:46:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 8674, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11604:58:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11585:77:58" + }, + { + "condition": { + "id": 8676, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8559, + "src": "11680:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8692, + "nodeType": "Block", + "src": "11804:76:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8688, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8665, + "src": "11830:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "50757263686173652072617269626c65206661696c6564", + "id": 8689, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11839:25:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2b352c406e176536877560097b51d8b7a1d4ebdd84181eeb9cfae44540c1b868", + "typeString": "literal_string \"Purchase rarible failed\"" + }, + "value": "Purchase rarible failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2b352c406e176536877560097b51d8b7a1d4ebdd84181eeb9cfae44540c1b868", + "typeString": "literal_string \"Purchase rarible failed\"" + } + ], + "id": 8687, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "11822:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 8690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11822:43:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8691, + "nodeType": "ExpressionStatement", + "src": "11822:43:58" + } + ] + }, + "id": 8693, + "nodeType": "IfStatement", + "src": "11676:204:58", + "trueBody": { + "id": 8686, + "nodeType": "Block", + "src": "11691:107:58", + "statements": [ + { + "condition": { + "id": 8678, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "11713:8:58", + "subExpression": { + "id": 8677, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8665, + "src": "11714:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8685, + "nodeType": "IfStatement", + "src": "11709:75:58", + "trueBody": { + "id": 8684, + "nodeType": "Block", + "src": "11723:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 8679, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11753:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 8680, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11760:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 8681, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11763:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 8682, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11752:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 8567, + "id": 8683, + "nodeType": "Return", + "src": "11745:20:58" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 9368, + "nodeType": "IfStatement", + "src": "11127:7006:58", + "trueBody": { + "id": 8658, + "nodeType": "Block", + "src": "11183:330:58", + "statements": [ + { + "assignments": [ + 8629, + null + ], + "declarations": [ + { + "constant": false, + "id": 8629, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 8658, + "src": "11198:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8628, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11198:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 8639, + "initialValue": { + "arguments": [ + { + "id": 8637, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8569, + "src": "11267:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 8632, + "name": "wyvernExchange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7995, + "src": "11224:14:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8631, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "11216:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8630, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11216:7:58", + "typeDescriptions": {} + } + }, + "id": 8633, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11216:23:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8634, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "11216:28:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 8636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 8635, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "11252:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "11216:50:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 8638, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11216:62:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11197:81:58" + }, + { + "condition": { + "id": 8640, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8559, + "src": "11296:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8656, + "nodeType": "Block", + "src": "11420:83:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8652, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8629, + "src": "11446:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "50757263686173652077797665726e45786368616e6765206661696c6564", + "id": 8653, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11455:32:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1cdf96c41f1501fb82e87942f0faf4d72a6efd57209b4dccba0c17cf2c4017c6", + "typeString": "literal_string \"Purchase wyvernExchange failed\"" + }, + "value": "Purchase wyvernExchange failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1cdf96c41f1501fb82e87942f0faf4d72a6efd57209b4dccba0c17cf2c4017c6", + "typeString": "literal_string \"Purchase wyvernExchange failed\"" + } + ], + "id": 8651, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "11438:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 8654, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11438:50:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8655, + "nodeType": "ExpressionStatement", + "src": "11438:50:58" + } + ] + }, + "id": 8657, + "nodeType": "IfStatement", + "src": "11292:211:58", + "trueBody": { + "id": 8650, + "nodeType": "Block", + "src": "11307:107:58", + "statements": [ + { + "condition": { + "id": 8642, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "11329:8:58", + "subExpression": { + "id": 8641, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8629, + "src": "11330:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8649, + "nodeType": "IfStatement", + "src": "11325:75:58", + "trueBody": { + "id": 8648, + "nodeType": "Block", + "src": "11339:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 8643, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11369:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 8644, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11376:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 8645, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11379:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 8646, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11368:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 8567, + "id": 8647, + "nodeType": "Return", + "src": "11361:20:58" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 9369, + "nodeType": "IfStatement", + "src": "10744:7389:58", + "trueBody": { + "id": 8622, + "nodeType": "Block", + "src": "10797:324:58", + "statements": [ + { + "assignments": [ + 8593, + null + ], + "declarations": [ + { + "constant": false, + "id": 8593, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 8622, + "src": "10812:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8592, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10812:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 8603, + "initialValue": { + "arguments": [ + { + "id": 8601, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8569, + "src": "10878:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 8596, + "name": "seaPort_1_1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7999, + "src": "10838:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8595, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "10830:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8594, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10830:7:58", + "typeDescriptions": {} + } + }, + "id": 8597, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10830:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8598, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "10830:25:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 8600, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 8599, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8583, + "src": "10863:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "10830:47:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 8602, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10830:59:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "10811:78:58" + }, + { + "condition": { + "id": 8604, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8559, + "src": "10907:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 8620, + "nodeType": "Block", + "src": "11031:80:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 8616, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8593, + "src": "11057:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f31206661696c6564", + "id": 8617, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11066:29:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_74739c97d81f6776122daced63f78d93149e498efd7fbf2084eabb7018fcdc3b", + "typeString": "literal_string \"Purchase SeaPort_1_1 failed\"" + }, + "value": "Purchase SeaPort_1_1 failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_74739c97d81f6776122daced63f78d93149e498efd7fbf2084eabb7018fcdc3b", + "typeString": "literal_string \"Purchase SeaPort_1_1 failed\"" + } + ], + "id": 8615, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "11049:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 8618, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11049:47:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8619, + "nodeType": "ExpressionStatement", + "src": "11049:47:58" + } + ] + }, + "id": 8621, + "nodeType": "IfStatement", + "src": "10903:208:58", + "trueBody": { + "id": 8614, + "nodeType": "Block", + "src": "10918:107:58", + "statements": [ + { + "condition": { + "id": 8606, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "10940:8:58", + "subExpression": { + "id": 8605, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8593, + "src": "10941:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8613, + "nodeType": "IfStatement", + "src": "10936:75:58", + "trueBody": { + "id": 8612, + "nodeType": "Block", + "src": "10950:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 8607, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10980:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 8608, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10987:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 8609, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10990:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 8610, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "10979:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 8567, + "id": 8611, + "nodeType": "Return", + "src": "10972:20:58" + } + ] + } + } + ] + } + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 9371, + "name": "additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8572, + "src": "18207:19:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "expression": { + "id": 9372, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "18228:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9373, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8056, + "src": "18228:22:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9370, + "name": "transferAdditionalRoyaltiesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9946, + "src": "18176:30:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$__$", + "typeString": "function (uint256[] memory,uint256)" + } + }, + "id": 9374, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18176:75:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9375, + "nodeType": "ExpressionStatement", + "src": "18176:75:58" + }, + { + "assignments": [ + 9377, + 9379 + ], + "declarations": [ + { + "constant": false, + "id": 9377, + "mutability": "mutable", + "name": "firstFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 9392, + "src": "18263:22:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9376, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18263:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9379, + "mutability": "mutable", + "name": "secondFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 9392, + "src": "18287:23:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9378, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "18287:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9386, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 9381, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "18322:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9382, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8058, + "src": "18322:20:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9383, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8557, + "src": "18344:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9384, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8056, + "src": "18344:22:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9380, + "name": "getFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9784, + "src": "18314:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256,uint256)" + } + }, + "id": 9385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18314:53:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "18262:105:58" + }, + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 9387, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18385:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "id": 9388, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9377, + "src": "18391:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9389, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9379, + "src": "18407:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 9390, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18384:39:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "functionReturnParameters": 8567, + "id": 9391, + "nodeType": "Return", + "src": "18377:46:58" + } + ] + }, + "documentation": { + "id": 8555, + "nodeType": "StructuredDocumentation", + "src": "9887:434:58", + "text": "@notice executes one purchase in ETH\n@param purchaseDetails - details about the purchase\n@param allowFail - true if errors are handled, false if revert on errors\n@return result false if execution failed, true if succeded\n@return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n@return secondFeeAmount amount of the second fee of the purchase, 0 if failed" + }, + "id": 9393, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "purchase", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8560, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8557, + "mutability": "mutable", + "name": "purchaseDetails", + "nodeType": "VariableDeclaration", + "scope": 9393, + "src": "10344:38:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + }, + "typeName": { + "id": 8556, + "name": "PurchaseDetails", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8061, + "src": "10344:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8559, + "mutability": "mutable", + "name": "allowFail", + "nodeType": "VariableDeclaration", + "scope": 9393, + "src": "10384:14:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8558, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10384:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "10343:56:58" + }, + "returnParameters": { + "id": 8567, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8562, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9393, + "src": "10447:4:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8561, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "10447:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8564, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9393, + "src": "10465:7:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8563, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10465:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8566, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9393, + "src": "10486:7:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8565, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10486:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10433:70:58" + }, + "scope": 10382, + "src": "10326:8104:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9623, + "nodeType": "Block", + "src": "19062:2391:58", + "statements": [ + { + "assignments": [ + 9408, + 9411 + ], + "declarations": [ + { + "constant": false, + "id": 9408, + "mutability": "mutable", + "name": "marketData", + "nodeType": "VariableDeclaration", + "scope": 9623, + "src": "19073:23:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 9407, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "19073:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9411, + "mutability": "mutable", + "name": "additionalRoyalties", + "nodeType": "VariableDeclaration", + "scope": 9623, + "src": "19098:36:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 9409, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19098:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9410, + "nodeType": "ArrayTypeName", + "src": "19098:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 9420, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 9413, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9396, + "src": "19163:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9414, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "data", + "nodeType": "MemberAccess", + "referencedDeclaration": 8060, + "src": "19163:20:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "id": 9415, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9396, + "src": "19185:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9416, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8058, + "src": "19185:20:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9417, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9396, + "src": "19207:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9418, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "19207:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + ], + "id": 9412, + "name": "getDataAndAdditionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9881, + "src": "19138:24:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_enum$_Markets_$8046_$returns$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes memory,uint256,enum RaribleExchangeWrapperUpgradeable.Markets) pure returns (bytes memory,uint256[] memory)" + } + }, + "id": 9419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19138:94:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bytes memory,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "19072:160:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 9425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9421, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9396, + "src": "19264:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9422, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "19264:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9423, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "19292:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 9424, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_1", + "nodeType": "MemberAccess", + "src": "19292:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "19264:47:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 9459, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9455, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9396, + "src": "19630:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9456, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "19630:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9457, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "19658:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 9458, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "ExchangeV2", + "nodeType": "MemberAccess", + "src": "19658:18:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "19630:46:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 9493, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9489, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9396, + "src": "19990:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9490, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "19990:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9491, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "20018:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 9492, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_4", + "nodeType": "MemberAccess", + "src": "20018:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "19990:47:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 9527, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9523, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9396, + "src": "20356:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9524, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "20356:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9525, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "20384:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 9526, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_5", + "nodeType": "MemberAccess", + "src": "20384:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "20356:47:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 9561, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9557, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9396, + "src": "20722:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9558, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "20722:24:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9559, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "20750:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 9560, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_6", + "nodeType": "MemberAccess", + "src": "20750:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "20722:47:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9595, + "nodeType": "Block", + "src": "21084:56:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "556e6b6e6f776e206d61726b657449642057455448", + "id": 9592, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21105:23:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6c57fe9713182a834bdd4831295dedf89e8ff161b7041e5a8170e9b0afd4c42f", + "typeString": "literal_string \"Unknown marketId WETH\"" + }, + "value": "Unknown marketId WETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_6c57fe9713182a834bdd4831295dedf89e8ff161b7041e5a8170e9b0afd4c42f", + "typeString": "literal_string \"Unknown marketId WETH\"" + } + ], + "id": 9591, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "21098:6:58", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 9593, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21098:31:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9594, + "nodeType": "ExpressionStatement", + "src": "21098:31:58" + } + ] + }, + "id": 9596, + "nodeType": "IfStatement", + "src": "20718:422:58", + "trueBody": { + "id": 9590, + "nodeType": "Block", + "src": "20771:307:58", + "statements": [ + { + "assignments": [ + 9563, + null + ], + "declarations": [ + { + "constant": false, + "id": 9563, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9590, + "src": "20786:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9562, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "20786:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9571, + "initialValue": { + "arguments": [ + { + "id": 9569, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9408, + "src": "20830:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9566, + "name": "seaPort_1_6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8015, + "src": "20812:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9565, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "20804:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9564, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20804:7:58", + "typeDescriptions": {} + } + }, + "id": 9567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20804:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "20804:25:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9570, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20804:37:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20785:56:58" + }, + { + "condition": { + "id": 9572, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9398, + "src": "20859:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9588, + "nodeType": "Block", + "src": "20983:85:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9584, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9563, + "src": "21009:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f36206661696c65642057455448", + "id": 9585, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21018:34:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7d4fa3070cdac7b556bda72a8ba21317d4366b909fe8ae7528922ba67829f31c", + "typeString": "literal_string \"Purchase SeaPort_1_6 failed WETH\"" + }, + "value": "Purchase SeaPort_1_6 failed WETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7d4fa3070cdac7b556bda72a8ba21317d4366b909fe8ae7528922ba67829f31c", + "typeString": "literal_string \"Purchase SeaPort_1_6 failed WETH\"" + } + ], + "id": 9583, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "21001:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9586, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21001:52:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9587, + "nodeType": "ExpressionStatement", + "src": "21001:52:58" + } + ] + }, + "id": 9589, + "nodeType": "IfStatement", + "src": "20855:213:58", + "trueBody": { + "id": 9582, + "nodeType": "Block", + "src": "20870:107:58", + "statements": [ + { + "condition": { + "id": 9574, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "20892:8:58", + "subExpression": { + "id": 9573, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9563, + "src": "20893:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9581, + "nodeType": "IfStatement", + "src": "20888:75:58", + "trueBody": { + "id": 9580, + "nodeType": "Block", + "src": "20902:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9575, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20932:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9576, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20939:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9577, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20942:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9578, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20931:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9406, + "id": 9579, + "nodeType": "Return", + "src": "20924:20:58" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 9597, + "nodeType": "IfStatement", + "src": "20352:788:58", + "trueBody": { + "id": 9556, + "nodeType": "Block", + "src": "20405:307:58", + "statements": [ + { + "assignments": [ + 9529, + null + ], + "declarations": [ + { + "constant": false, + "id": 9529, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9556, + "src": "20420:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9528, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "20420:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9537, + "initialValue": { + "arguments": [ + { + "id": 9535, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9408, + "src": "20464:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9532, + "name": "seaPort_1_5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "20446:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9531, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "20438:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9530, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20438:7:58", + "typeDescriptions": {} + } + }, + "id": 9533, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20438:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9534, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "20438:25:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9536, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20438:37:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20419:56:58" + }, + { + "condition": { + "id": 9538, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9398, + "src": "20493:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9554, + "nodeType": "Block", + "src": "20617:85:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9550, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9529, + "src": "20643:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f35206661696c65642057455448", + "id": 9551, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20652:34:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1461016c88004ca93c55e893467e5e7d0c1ff55121e923be5ca0e173134693e9", + "typeString": "literal_string \"Purchase SeaPort_1_5 failed WETH\"" + }, + "value": "Purchase SeaPort_1_5 failed WETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1461016c88004ca93c55e893467e5e7d0c1ff55121e923be5ca0e173134693e9", + "typeString": "literal_string \"Purchase SeaPort_1_5 failed WETH\"" + } + ], + "id": 9549, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "20635:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9552, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20635:52:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9553, + "nodeType": "ExpressionStatement", + "src": "20635:52:58" + } + ] + }, + "id": 9555, + "nodeType": "IfStatement", + "src": "20489:213:58", + "trueBody": { + "id": 9548, + "nodeType": "Block", + "src": "20504:107:58", + "statements": [ + { + "condition": { + "id": 9540, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "20526:8:58", + "subExpression": { + "id": 9539, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9529, + "src": "20527:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9547, + "nodeType": "IfStatement", + "src": "20522:75:58", + "trueBody": { + "id": 9546, + "nodeType": "Block", + "src": "20536:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9541, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20566:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9542, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20573:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9543, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20576:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9544, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20565:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9406, + "id": 9545, + "nodeType": "Return", + "src": "20558:20:58" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 9598, + "nodeType": "IfStatement", + "src": "19986:1154:58", + "trueBody": { + "id": 9522, + "nodeType": "Block", + "src": "20039:307:58", + "statements": [ + { + "assignments": [ + 9495, + null + ], + "declarations": [ + { + "constant": false, + "id": 9495, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9522, + "src": "20054:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9494, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "20054:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9503, + "initialValue": { + "arguments": [ + { + "id": 9501, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9408, + "src": "20098:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9498, + "name": "seaPort_1_4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8007, + "src": "20080:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9497, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "20072:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9496, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20072:7:58", + "typeDescriptions": {} + } + }, + "id": 9499, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20072:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9500, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "20072:25:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9502, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20072:37:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20053:56:58" + }, + { + "condition": { + "id": 9504, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9398, + "src": "20127:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9520, + "nodeType": "Block", + "src": "20251:85:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9516, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9495, + "src": "20277:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f34206661696c65642057455448", + "id": 9517, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20286:34:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_05a847584de3c2ae6c800d1f7b0a5d67e8bceaac16366dec690fd8433d46a23a", + "typeString": "literal_string \"Purchase SeaPort_1_4 failed WETH\"" + }, + "value": "Purchase SeaPort_1_4 failed WETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_05a847584de3c2ae6c800d1f7b0a5d67e8bceaac16366dec690fd8433d46a23a", + "typeString": "literal_string \"Purchase SeaPort_1_4 failed WETH\"" + } + ], + "id": 9515, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "20269:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9518, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20269:52:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9519, + "nodeType": "ExpressionStatement", + "src": "20269:52:58" + } + ] + }, + "id": 9521, + "nodeType": "IfStatement", + "src": "20123:213:58", + "trueBody": { + "id": 9514, + "nodeType": "Block", + "src": "20138:107:58", + "statements": [ + { + "condition": { + "id": 9506, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "20160:8:58", + "subExpression": { + "id": 9505, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9495, + "src": "20161:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9513, + "nodeType": "IfStatement", + "src": "20156:75:58", + "trueBody": { + "id": 9512, + "nodeType": "Block", + "src": "20170:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9507, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20200:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9508, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20207:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9509, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20210:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9510, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20199:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9406, + "id": 9511, + "nodeType": "Return", + "src": "20192:20:58" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 9599, + "nodeType": "IfStatement", + "src": "19626:1514:58", + "trueBody": { + "id": 9488, + "nodeType": "Block", + "src": "19678:302:58", + "statements": [ + { + "assignments": [ + 9461, + null + ], + "declarations": [ + { + "constant": false, + "id": 9461, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9488, + "src": "19693:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9460, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "19693:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9469, + "initialValue": { + "arguments": [ + { + "id": 9467, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9408, + "src": "19736:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9464, + "name": "exchangeV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7997, + "src": "19719:10:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9463, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "19711:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9462, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19711:7:58", + "typeDescriptions": {} + } + }, + "id": 9465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19711:19:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9466, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "19711:24:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9468, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19711:36:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "19692:55:58" + }, + { + "condition": { + "id": 9470, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9398, + "src": "19765:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9486, + "nodeType": "Block", + "src": "19889:81:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9482, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9461, + "src": "19915:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "50757263686173652072617269626c65206661696c65642057455448", + "id": 9483, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19924:30:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2ec0a2b485cd497572ad8de2f4110630fd04a79c3fc75a9aaa133bc5c098fd7e", + "typeString": "literal_string \"Purchase rarible failed WETH\"" + }, + "value": "Purchase rarible failed WETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2ec0a2b485cd497572ad8de2f4110630fd04a79c3fc75a9aaa133bc5c098fd7e", + "typeString": "literal_string \"Purchase rarible failed WETH\"" + } + ], + "id": 9481, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "19907:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9484, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19907:48:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9485, + "nodeType": "ExpressionStatement", + "src": "19907:48:58" + } + ] + }, + "id": 9487, + "nodeType": "IfStatement", + "src": "19761:209:58", + "trueBody": { + "id": 9480, + "nodeType": "Block", + "src": "19776:107:58", + "statements": [ + { + "condition": { + "id": 9472, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "19798:8:58", + "subExpression": { + "id": 9471, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9461, + "src": "19799:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9479, + "nodeType": "IfStatement", + "src": "19794:75:58", + "trueBody": { + "id": 9478, + "nodeType": "Block", + "src": "19808:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9473, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19838:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9474, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19845:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9475, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19848:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9476, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "19837:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9406, + "id": 9477, + "nodeType": "Return", + "src": "19830:20:58" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 9600, + "nodeType": "IfStatement", + "src": "19260:1880:58", + "trueBody": { + "id": 9454, + "nodeType": "Block", + "src": "19313:307:58", + "statements": [ + { + "assignments": [ + 9427, + null + ], + "declarations": [ + { + "constant": false, + "id": 9427, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9454, + "src": "19328:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9426, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "19328:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9435, + "initialValue": { + "arguments": [ + { + "id": 9433, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9408, + "src": "19372:10:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9430, + "name": "seaPort_1_1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7999, + "src": "19354:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9429, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "19346:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9428, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "19346:7:58", + "typeDescriptions": {} + } + }, + "id": 9431, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19346:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9432, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "19346:25:58", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9434, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19346:37:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "19327:56:58" + }, + { + "condition": { + "id": 9436, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9398, + "src": "19401:9:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9452, + "nodeType": "Block", + "src": "19525:85:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9448, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9427, + "src": "19551:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f31206661696c65642057455448", + "id": 9449, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19560:34:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9d7bf9b147b8e8ea1a011a4553d7d866e6536c248028d8dc1aeaa1b40c8d32c7", + "typeString": "literal_string \"Purchase SeaPort_1_1 failed WETH\"" + }, + "value": "Purchase SeaPort_1_1 failed WETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9d7bf9b147b8e8ea1a011a4553d7d866e6536c248028d8dc1aeaa1b40c8d32c7", + "typeString": "literal_string \"Purchase SeaPort_1_1 failed WETH\"" + } + ], + "id": 9447, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "19543:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9450, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19543:52:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9451, + "nodeType": "ExpressionStatement", + "src": "19543:52:58" + } + ] + }, + "id": 9453, + "nodeType": "IfStatement", + "src": "19397:213:58", + "trueBody": { + "id": 9446, + "nodeType": "Block", + "src": "19412:107:58", + "statements": [ + { + "condition": { + "id": 9438, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "19434:8:58", + "subExpression": { + "id": 9437, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9427, + "src": "19435:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9445, + "nodeType": "IfStatement", + "src": "19430:75:58", + "trueBody": { + "id": 9444, + "nodeType": "Block", + "src": "19444:61:58", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9439, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19474:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9440, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19481:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9441, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19484:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9442, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "19473:13:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9406, + "id": 9443, + "nodeType": "Return", + "src": "19466:20:58" + } + ] + } + } + ] + } + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 9602, + "name": "additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9411, + "src": "21211:19:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "expression": { + "id": 9603, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9396, + "src": "21232:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9604, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8056, + "src": "21232:22:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9601, + "name": "transferAdditionalRoyaltiesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10011, + "src": "21179:31:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$__$", + "typeString": "function (uint256[] memory,uint256)" + } + }, + "id": 9605, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21179:76:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9606, + "nodeType": "ExpressionStatement", + "src": "21179:76:58" + }, + { + "assignments": [ + 9608, + 9610 + ], + "declarations": [ + { + "constant": false, + "id": 9608, + "mutability": "mutable", + "name": "firstFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 9623, + "src": "21286:22:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9607, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21286:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9610, + "mutability": "mutable", + "name": "secondFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 9623, + "src": "21310:23:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9609, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21310:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9617, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 9612, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9396, + "src": "21345:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9613, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8058, + "src": "21345:20:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9614, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9396, + "src": "21367:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 9615, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8056, + "src": "21367:22:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9611, + "name": "getFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9784, + "src": "21337:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256,uint256)" + } + }, + "id": 9616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21337:53:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21285:105:58" + }, + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 9618, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21408:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "id": 9619, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9608, + "src": "21414:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9620, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9610, + "src": "21430:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 9621, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "21407:39:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "functionReturnParameters": 9406, + "id": 9622, + "nodeType": "Return", + "src": "21400:46:58" + } + ] + }, + "documentation": { + "id": 9394, + "nodeType": "StructuredDocumentation", + "src": "18436:435:58", + "text": "@notice executes one purchase in WETH\n@param purchaseDetails - details about the purchase\n@param allowFail - true if errors are handled, false if revert on errors\n@return result false if execution failed, true if succeded\n@return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n@return secondFeeAmount amount of the second fee of the purchase, 0 if failed" + }, + "id": 9624, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "purchaseWETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9399, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9396, + "mutability": "mutable", + "name": "purchaseDetails", + "nodeType": "VariableDeclaration", + "scope": 9624, + "src": "18898:38:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + }, + "typeName": { + "id": 9395, + "name": "PurchaseDetails", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8061, + "src": "18898:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9398, + "mutability": "mutable", + "name": "allowFail", + "nodeType": "VariableDeclaration", + "scope": 9624, + "src": "18938:14:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9397, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "18938:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "18897:56:58" + }, + "returnParameters": { + "id": 9406, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9401, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9624, + "src": "19001:4:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9400, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "19001:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9403, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9624, + "src": "19019:7:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9402, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19019:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9405, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9624, + "src": "19040:7:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9404, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19040:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "18987:70:58" + }, + "scope": 10382, + "src": "18876:2577:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9651, + "nodeType": "Block", + "src": "21705:138:58", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 9641, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9634, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9632, + "name": "feeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9627, + "src": "21719:9:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9633, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21731:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "21719:13:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9640, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9635, + "name": "feeRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9629, + "src": "21736:12:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 9638, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21760:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 9637, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "21752:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9636, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21752:7:58", + "typeDescriptions": {} + } + }, + "id": 9639, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21752:10:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "21736:26:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "21719:43:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9650, + "nodeType": "IfStatement", + "src": "21715:122:58", + "trueBody": { + "id": 9649, + "nodeType": "Block", + "src": "21764:73:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9645, + "name": "feeRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9629, + "src": "21802:12:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9646, + "name": "feeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9627, + "src": "21816:9:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9642, + "name": "LibTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7808, + "src": "21778:11:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibTransfer_$7808_$", + "typeString": "type(library LibTransfer)" + } + }, + "id": 9644, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferEth", + "nodeType": "MemberAccess", + "referencedDeclaration": 7807, + "src": "21778:23:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 9647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21778:48:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9648, + "nodeType": "ExpressionStatement", + "src": "21778:48:58" + } + ] + } + } + ] + }, + "documentation": { + "id": 9625, + "nodeType": "StructuredDocumentation", + "src": "21459:167:58", + "text": "@notice transfers ETH fee to feeRecipient\n@param feeAmount - amount to be transfered\n@param feeRecipient - address of the recipient" + }, + "id": 9652, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferFeeETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9630, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9627, + "mutability": "mutable", + "name": "feeAmount", + "nodeType": "VariableDeclaration", + "scope": 9652, + "src": "21655:17:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9626, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "21655:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9629, + "mutability": "mutable", + "name": "feeRecipient", + "nodeType": "VariableDeclaration", + "scope": 9652, + "src": "21674:20:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9628, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21674:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "21654:41:58" + }, + "returnParameters": { + "id": 9631, + "nodeType": "ParameterList", + "parameters": [], + "src": "21705:0:58" + }, + "scope": 10382, + "src": "21631:212:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9680, + "nodeType": "Block", + "src": "22097:147:58", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 9669, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9662, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9660, + "name": "feeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9655, + "src": "22111:9:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9661, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22123:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "22111:13:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 9668, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9663, + "name": "feeRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9657, + "src": "22128:12:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 9666, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22152:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 9665, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "22144:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9664, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22144:7:58", + "typeDescriptions": {} + } + }, + "id": 9667, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22144:10:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "22128:26:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "22111:43:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9679, + "nodeType": "IfStatement", + "src": "22107:131:58", + "trueBody": { + "id": 9678, + "nodeType": "Block", + "src": "22156:82:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9674, + "name": "feeRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9657, + "src": "22203:12:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 9675, + "name": "feeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9655, + "src": "22217:9:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 9671, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8017, + "src": "22188:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9670, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "22170:17:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 9672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22170:23:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 9673, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 1122, + "src": "22170:32:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 9676, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22170:57:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9677, + "nodeType": "ExpressionStatement", + "src": "22170:57:58" + } + ] + } + } + ] + }, + "documentation": { + "id": 9653, + "nodeType": "StructuredDocumentation", + "src": "21849:168:58", + "text": "@notice transfers WETH fee to feeRecipient\n@param feeAmount - amount to be transfered\n@param feeRecipient - address of the recipient" + }, + "id": 9681, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferFeeWETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9658, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9655, + "mutability": "mutable", + "name": "feeAmount", + "nodeType": "VariableDeclaration", + "scope": 9681, + "src": "22047:17:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9654, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22047:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9657, + "mutability": "mutable", + "name": "feeRecipient", + "nodeType": "VariableDeclaration", + "scope": 9681, + "src": "22066:20:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9656, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22066:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "22046:41:58" + }, + "returnParameters": { + "id": 9659, + "nodeType": "ParameterList", + "parameters": [], + "src": "22097:0:58" + }, + "scope": 10382, + "src": "22022:222:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9707, + "nodeType": "Block", + "src": "22349:153:58", + "statements": [ + { + "assignments": [ + 9686 + ], + "declarations": [ + { + "constant": false, + "id": 9686, + "mutability": "mutable", + "name": "ethAmount", + "nodeType": "VariableDeclaration", + "scope": 9707, + "src": "22359:17:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9685, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22359:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9692, + "initialValue": { + "expression": { + "arguments": [ + { + "id": 9689, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "22387:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "id": 9688, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "22379:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9687, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22379:7:58", + "typeDescriptions": {} + } + }, + "id": 9690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22379:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "id": 9691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balance", + "nodeType": "MemberAccess", + "src": "22379:21:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "22359:41:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9695, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9693, + "name": "ethAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9686, + "src": "22414:9:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9694, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22426:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "22414:13:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9706, + "nodeType": "IfStatement", + "src": "22410:86:58", + "trueBody": { + "id": 9705, + "nodeType": "Block", + "src": "22429:67:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9702, + "name": "ethAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9686, + "src": "22475:9:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "expression": { + "id": 9698, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "22451:3:58", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 9699, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "22451:10:58", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 9697, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "22443:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9696, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22443:7:58", + "typeDescriptions": {} + } + }, + "id": 9700, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22443:19:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9701, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferEth", + "nodeType": "MemberAccess", + "referencedDeclaration": 7807, + "src": "22443:31:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$bound_to$_t_address_$", + "typeString": "function (address,uint256)" + } + }, + "id": 9703, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22443:42:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9704, + "nodeType": "ExpressionStatement", + "src": "22443:42:58" + } + ] + } + } + ] + }, + "documentation": { + "id": 9682, + "nodeType": "StructuredDocumentation", + "src": "22250:59:58", + "text": "@notice transfers change back to sender" + }, + "id": 9708, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferChange", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9683, + "nodeType": "ParameterList", + "parameters": [], + "src": "22337:2:58" + }, + "returnParameters": { + "id": 9684, + "nodeType": "ParameterList", + "parameters": [], + "src": "22349:0:58" + }, + "scope": 10382, + "src": "22314:188:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9738, + "nodeType": "Block", + "src": "22616:198:58", + "statements": [ + { + "assignments": [ + 9713 + ], + "declarations": [ + { + "constant": false, + "id": 9713, + "mutability": "mutable", + "name": "wethAmount", + "nodeType": "VariableDeclaration", + "scope": 9738, + "src": "22626:18:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9712, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22626:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9723, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 9720, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "22689:4:58", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "id": 9719, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "22681:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9718, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22681:7:58", + "typeDescriptions": {} + } + }, + "id": 9721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22681:13:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "expression": { + "arguments": [ + { + "id": 9715, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8017, + "src": "22665:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9714, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "22647:17:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 9716, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22647:23:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 9717, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 1112, + "src": "22647:33:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 9722, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22647:48:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "22626:69:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9726, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9724, + "name": "wethAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9713, + "src": "22709:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9725, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22722:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "22709:14:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9737, + "nodeType": "IfStatement", + "src": "22705:103:58", + "trueBody": { + "id": 9736, + "nodeType": "Block", + "src": "22725:83:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9731, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "22772:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 9732, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22772:12:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 9733, + "name": "wethAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9713, + "src": "22786:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 9728, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8017, + "src": "22757:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9727, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "22739:17:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 9729, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22739:23:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 9730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 1122, + "src": "22739:32:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 9734, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22739:58:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9735, + "nodeType": "ExpressionStatement", + "src": "22739:58:58" + } + ] + } + } + ] + }, + "documentation": { + "id": 9709, + "nodeType": "StructuredDocumentation", + "src": "22508:64:58", + "text": "@notice transfers weth change back to sender" + }, + "id": 9739, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferChangeWETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9710, + "nodeType": "ParameterList", + "parameters": [], + "src": "22604:2:58" + }, + "returnParameters": { + "id": 9711, + "nodeType": "ParameterList", + "parameters": [], + "src": "22616:0:58" + }, + "scope": 10382, + "src": "22577:237:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9783, + "nodeType": "Block", + "src": "23306:174:58", + "statements": [ + { + "assignments": [ + 9752 + ], + "declarations": [ + { + "constant": false, + "id": 9752, + "mutability": "mutable", + "name": "firstFee", + "nodeType": "VariableDeclaration", + "scope": 9783, + "src": "23316:16:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9751, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23316:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9762, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9759, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9757, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9742, + "src": "23350:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "3136", + "id": 9758, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "23358:2:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_16_by_1", + "typeString": "int_const 16" + }, + "value": "16" + }, + "src": "23350:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9756, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "23343:6:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint16_$", + "typeString": "type(uint16)" + }, + "typeName": { + "id": 9755, + "name": "uint16", + "nodeType": "ElementaryTypeName", + "src": "23343:6:58", + "typeDescriptions": {} + } + }, + "id": 9760, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23343:18:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "id": 9754, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "23335:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 9753, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23335:7:58", + "typeDescriptions": {} + } + }, + "id": 9761, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23335:27:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23316:46:58" + }, + { + "assignments": [ + 9764 + ], + "declarations": [ + { + "constant": false, + "id": 9764, + "mutability": "mutable", + "name": "secondFee", + "nodeType": "VariableDeclaration", + "scope": 9783, + "src": "23372:17:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9763, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23372:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9772, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 9769, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9742, + "src": "23407:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9768, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "23400:6:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint16_$", + "typeString": "type(uint16)" + }, + "typeName": { + "id": 9767, + "name": "uint16", + "nodeType": "ElementaryTypeName", + "src": "23400:6:58", + "typeDescriptions": {} + } + }, + "id": 9770, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23400:12:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "id": 9766, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "23392:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 9765, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23392:7:58", + "typeDescriptions": {} + } + }, + "id": 9771, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23392:21:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23372:41:58" + }, + { + "expression": { + "components": [ + { + "arguments": [ + { + "id": 9775, + "name": "firstFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9752, + "src": "23441:8:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9773, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9744, + "src": "23431:6:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9774, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bp", + "nodeType": "MemberAccess", + "referencedDeclaration": 4933, + "src": "23431:9:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9776, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23431:19:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 9779, + "name": "secondFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9764, + "src": "23462:9:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9777, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9744, + "src": "23452:6:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9778, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bp", + "nodeType": "MemberAccess", + "referencedDeclaration": 4933, + "src": "23452:9:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9780, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23452:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 9781, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "23430:43:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "functionReturnParameters": 9750, + "id": 9782, + "nodeType": "Return", + "src": "23423:50:58" + } + ] + }, + "documentation": { + "id": 9740, + "nodeType": "StructuredDocumentation", + "src": "22820:393:58", + "text": "@notice parses fees in base points from one uint and calculates real amount of fees\n@param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n@param amount price of the order\n@return firstFeeAmount real amount for the first fee\n@return secondFeeAmount real amount for the second fee" + }, + "id": 9784, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9745, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9742, + "mutability": "mutable", + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 9784, + "src": "23235:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9741, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23235:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9744, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 9784, + "src": "23249:14:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9743, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23249:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "23234:30:58" + }, + "returnParameters": { + "id": 9750, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9747, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9784, + "src": "23288:7:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9746, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23288:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9749, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9784, + "src": "23297:7:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9748, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23297:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "23287:18:58" + }, + "scope": 10382, + "src": "23218:262:58", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9801, + "nodeType": "Block", + "src": "23733:54:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9797, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9795, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9787, + "src": "23768:4:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "3438", + "id": 9796, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "23776:2:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_48_by_1", + "typeString": "int_const 48" + }, + "value": "48" + }, + "src": "23768:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9794, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "23761:6:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint16_$", + "typeString": "type(uint16)" + }, + "typeName": { + "id": 9793, + "name": "uint16", + "nodeType": "ElementaryTypeName", + "src": "23761:6:58", + "typeDescriptions": {} + } + }, + "id": 9798, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23761:18:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "id": 9792, + "name": "Currencies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8052, + "src": "23750:10:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Currencies_$8052_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Currencies)" + } + }, + "id": 9799, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23750:30:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "functionReturnParameters": 9791, + "id": 9800, + "nodeType": "Return", + "src": "23743:37:58" + } + ] + }, + "documentation": { + "id": 9785, + "nodeType": "StructuredDocumentation", + "src": "23486:172:58", + "text": "@notice parses \"fees\" field to find the currency for the purchase\n@param fees field with encoded data\n@return 0 if ETH, 1 if WETH ERC-20" + }, + "id": 9802, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getCurrency", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9788, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9787, + "mutability": "mutable", + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 9802, + "src": "23684:12:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9786, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23684:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "23683:14:58" + }, + "returnParameters": { + "id": 9791, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9790, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9802, + "src": "23721:10:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "typeName": { + "id": 9789, + "name": "Currencies", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8052, + "src": "23721:10:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "visibility": "internal" + } + ], + "src": "23720:12:58" + }, + "scope": 10382, + "src": "23663:124:58", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9880, + "nodeType": "Block", + "src": "24245:836:58", + "statements": [ + { + "assignments": [ + 9818 + ], + "declarations": [ + { + "constant": false, + "id": 9818, + "mutability": "mutable", + "name": "dataType", + "nodeType": "VariableDeclaration", + "scope": 9880, + "src": "24255:28:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8049", + "typeString": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + }, + "typeName": { + "id": 9817, + "name": "AdditionalDataTypes", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8049, + "src": "24255:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8049", + "typeString": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + } + }, + "visibility": "internal" + } + ], + "id": 9827, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9824, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9822, + "name": "feesAndDataType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9807, + "src": "24313:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "3332", + "id": 9823, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "24332:2:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "24313:21:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9821, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "24306:6:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint16_$", + "typeString": "type(uint16)" + }, + "typeName": { + "id": 9820, + "name": "uint16", + "nodeType": "ElementaryTypeName", + "src": "24306:6:58", + "typeDescriptions": {} + } + }, + "id": 9825, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24306:29:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "id": 9819, + "name": "AdditionalDataTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8049, + "src": "24286:19:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_AdditionalDataTypes_$8049_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes)" + } + }, + "id": 9826, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24286:50:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8049", + "typeString": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "24255:81:58" + }, + { + "assignments": [ + 9832 + ], + "declarations": [ + { + "constant": false, + "id": 9832, + "mutability": "mutable", + "name": "additionalRoyalties", + "nodeType": "VariableDeclaration", + "scope": 9880, + "src": "24346:36:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 9830, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24346:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9831, + "nodeType": "ArrayTypeName", + "src": "24346:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 9833, + "nodeType": "VariableDeclarationStatement", + "src": "24346:36:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8049", + "typeString": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + }, + "id": 9837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9834, + "name": "dataType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9818, + "src": "24446:8:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8049", + "typeString": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9835, + "name": "AdditionalDataTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8049, + "src": "24458:19:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_AdditionalDataTypes_$8049_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes)" + } + }, + "id": 9836, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "NoAdditionalData", + "nodeType": "MemberAccess", + "src": "24458:36:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8049", + "typeString": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + } + }, + "src": "24446:48:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9843, + "nodeType": "IfStatement", + "src": "24442:114:58", + "trueBody": { + "id": 9842, + "nodeType": "Block", + "src": "24496:60:58", + "statements": [ + { + "expression": { + "components": [ + { + "id": 9838, + "name": "_data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9805, + "src": "24518:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 9839, + "name": "additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9832, + "src": "24525:19:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 9840, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "24517:28:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bytes memory,uint256[] memory)" + } + }, + "functionReturnParameters": 9816, + "id": 9841, + "nodeType": "Return", + "src": "24510:35:58" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8049", + "typeString": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + }, + "id": 9847, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9844, + "name": "dataType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9818, + "src": "24570:8:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8049", + "typeString": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9845, + "name": "AdditionalDataTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8049, + "src": "24582:19:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_AdditionalDataTypes_$8049_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes)" + } + }, + "id": 9846, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "RoyaltiesAdditionalData", + "nodeType": "MemberAccess", + "src": "24582:43:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8049", + "typeString": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + } + }, + "src": "24570:55:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9875, + "nodeType": "IfStatement", + "src": "24566:462:58", + "trueBody": { + "id": 9874, + "nodeType": "Block", + "src": "24627:401:58", + "statements": [ + { + "assignments": [ + 9849 + ], + "declarations": [ + { + "constant": false, + "id": 9849, + "mutability": "mutable", + "name": "additionalData", + "nodeType": "VariableDeclaration", + "scope": 9874, + "src": "24641:36:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AdditionalData_$8067_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.AdditionalData" + }, + "typeName": { + "id": 9848, + "name": "AdditionalData", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8067, + "src": "24641:14:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AdditionalData_$8067_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.AdditionalData" + } + }, + "visibility": "internal" + } + ], + "id": 9856, + "initialValue": { + "arguments": [ + { + "id": 9852, + "name": "_data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9805, + "src": "24691:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 9853, + "name": "AdditionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8067, + "src": "24699:14:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_AdditionalData_$8067_storage_ptr_$", + "typeString": "type(struct RaribleExchangeWrapperUpgradeable.AdditionalData storage pointer)" + } + } + ], + "id": 9854, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "24698:16:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_AdditionalData_$8067_storage_ptr_$", + "typeString": "type(struct RaribleExchangeWrapperUpgradeable.AdditionalData storage pointer)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_struct$_AdditionalData_$8067_storage_ptr_$", + "typeString": "type(struct RaribleExchangeWrapperUpgradeable.AdditionalData storage pointer)" + } + ], + "expression": { + "id": 9850, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "24680:3:58", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9851, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "24680:10:58", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9855, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24680:35:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_AdditionalData_$8067_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.AdditionalData memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "24641:74:58" + }, + { + "condition": { + "arguments": [ + { + "id": 9858, + "name": "marketId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9809, + "src": "24822:8:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + ], + "id": 9857, + "name": "supportsRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10094, + "src": "24804:17:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_Markets_$8046_$returns$_t_bool_$", + "typeString": "function (enum RaribleExchangeWrapperUpgradeable.Markets) pure returns (bool)" + } + }, + "id": 9859, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24804:27:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9872, + "nodeType": "Block", + "src": "24936:82:58", + "statements": [ + { + "expression": { + "components": [ + { + "expression": { + "id": 9867, + "name": "additionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9849, + "src": "24962:14:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AdditionalData_$8067_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.AdditionalData memory" + } + }, + "id": 9868, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "data", + "nodeType": "MemberAccess", + "referencedDeclaration": 8063, + "src": "24962:19:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 9869, + "name": "additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9832, + "src": "24983:19:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 9870, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "24961:42:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bytes memory,uint256[] memory)" + } + }, + "functionReturnParameters": 9816, + "id": 9871, + "nodeType": "Return", + "src": "24954:49:58" + } + ] + }, + "id": 9873, + "nodeType": "IfStatement", + "src": "24800:218:58", + "trueBody": { + "id": 9866, + "nodeType": "Block", + "src": "24833:97:58", + "statements": [ + { + "expression": { + "components": [ + { + "expression": { + "id": 9860, + "name": "additionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9849, + "src": "24859:14:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AdditionalData_$8067_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.AdditionalData memory" + } + }, + "id": 9861, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "data", + "nodeType": "MemberAccess", + "referencedDeclaration": 8063, + "src": "24859:19:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "id": 9862, + "name": "additionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9849, + "src": "24880:14:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AdditionalData_$8067_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.AdditionalData memory" + } + }, + "id": 9863, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "additionalRoyalties", + "nodeType": "MemberAccess", + "referencedDeclaration": 8066, + "src": "24880:34:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 9864, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "24858:57:58", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bytes memory,uint256[] memory)" + } + }, + "functionReturnParameters": 9816, + "id": 9865, + "nodeType": "Return", + "src": "24851:64:58" + } + ] + } + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "hexValue": "756e6b6e6f776e206164646974696f6e616c4461746154797065", + "id": 9877, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "25045:28:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e89eb59adf40d46cfd63ce8f1b9b12cb445413877fb23a6846b8ace3266a633d", + "typeString": "literal_string \"unknown additionalDataType\"" + }, + "value": "unknown additionalDataType" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_e89eb59adf40d46cfd63ce8f1b9b12cb445413877fb23a6846b8ace3266a633d", + "typeString": "literal_string \"unknown additionalDataType\"" + } + ], + "id": 9876, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "25038:6:58", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 9878, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25038:36:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9879, + "nodeType": "ExpressionStatement", + "src": "25038:36:58" + } + ] + }, + "documentation": { + "id": 9803, + "nodeType": "StructuredDocumentation", + "src": "23793:265:58", + "text": "@notice parses _data to data for market call and additionalData\n@param feesAndDataType 27 and 28 bytes for dataType\n@return marketData data for market call\n@return additionalRoyalties array uint256, (base point + address)" + }, + "id": 9881, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getDataAndAdditionalData", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9810, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9805, + "mutability": "mutable", + "name": "_data", + "nodeType": "VariableDeclaration", + "scope": 9881, + "src": "24106:18:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 9804, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "24106:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9807, + "mutability": "mutable", + "name": "feesAndDataType", + "nodeType": "VariableDeclaration", + "scope": 9881, + "src": "24134:23:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9806, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24134:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9809, + "mutability": "mutable", + "name": "marketId", + "nodeType": "VariableDeclaration", + "scope": 9881, + "src": "24167:16:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "typeName": { + "id": 9808, + "name": "Markets", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8046, + "src": "24167:7:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "visibility": "internal" + } + ], + "src": "24096:93:58" + }, + "returnParameters": { + "id": 9816, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9812, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9881, + "src": "24213:12:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 9811, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "24213:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9815, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 9881, + "src": "24227:16:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 9813, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24227:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9814, + "nodeType": "ArrayTypeName", + "src": "24227:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "24212:32:58" + }, + "scope": 10382, + "src": "24063:1018:58", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 9945, + "nodeType": "Block", + "src": "25351:410:58", + "statements": [ + { + "body": { + "id": 9943, + "nodeType": "Block", + "src": "25419:336:58", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9905, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 9901, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9885, + "src": "25437:20:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 9903, + "indexExpression": { + "id": 9902, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9891, + "src": "25458:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "25437:23:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9904, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "25463:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "25437:27:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9942, + "nodeType": "IfStatement", + "src": "25433:312:58", + "trueBody": { + "id": 9941, + "nodeType": "Block", + "src": "25466:279:58", + "statements": [ + { + "assignments": [ + 9907 + ], + "declarations": [ + { + "constant": false, + "id": 9907, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 9941, + "src": "25484:23:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 9906, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "25484:15:58", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + } + ], + "id": 9917, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "baseExpression": { + "id": 9912, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9885, + "src": "25526:20:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 9914, + "indexExpression": { + "id": 9913, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9891, + "src": "25547:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "25526:23:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9911, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "25518:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9910, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "25518:7:58", + "typeDescriptions": {} + } + }, + "id": 9915, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25518:32:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 9909, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "25510:8:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_payable_$", + "typeString": "type(address payable)" + }, + "typeName": { + "id": 9908, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "25510:8:58", + "stateMutability": "payable", + "typeDescriptions": {} + } + }, + "id": 9916, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25510:41:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "25484:67:58" + }, + { + "assignments": [ + 9919 + ], + "declarations": [ + { + "constant": false, + "id": 9919, + "mutability": "mutable", + "name": "basePoint", + "nodeType": "VariableDeclaration", + "scope": 9941, + "src": "25569:17:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9918, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25569:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9928, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 9922, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9885, + "src": "25597:20:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 9924, + "indexExpression": { + "id": 9923, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9891, + "src": "25618:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "25597:23:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "313630", + "id": 9925, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "25624:3:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_160_by_1", + "typeString": "int_const 160" + }, + "value": "160" + }, + "src": "25597:30:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9921, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "25589:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 9920, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25589:7:58", + "typeDescriptions": {} + } + }, + "id": 9927, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25589:39:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "25569:59:58" + }, + { + "assignments": [ + 9930 + ], + "declarations": [ + { + "constant": false, + "id": 9930, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 9941, + "src": "25646:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9929, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25646:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9935, + "initialValue": { + "arguments": [ + { + "id": 9933, + "name": "basePoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9919, + "src": "25672:9:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9931, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9887, + "src": "25662:6:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9932, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bp", + "nodeType": "MemberAccess", + "referencedDeclaration": 4933, + "src": "25662:9:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9934, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25662:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "25646:36:58" + }, + { + "expression": { + "arguments": [ + { + "id": 9937, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9930, + "src": "25715:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9938, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9907, + "src": "25722:7:58", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 9936, + "name": "transferFeeETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9652, + "src": "25700:14:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 9939, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25700:30:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9940, + "nodeType": "ExpressionStatement", + "src": "25700:30:58" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9897, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9894, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9891, + "src": "25381:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 9895, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9885, + "src": "25385:20:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 9896, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "25385:27:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "25381:31:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9944, + "initializationExpression": { + "assignments": [ + 9891 + ], + "declarations": [ + { + "constant": false, + "id": 9891, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 9944, + "src": "25366:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9890, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25366:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9893, + "initialValue": { + "hexValue": "30", + "id": 9892, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "25378:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "25366:13:58" + }, + "loopExpression": { + "expression": { + "id": 9899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "25414:3:58", + "subExpression": { + "id": 9898, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9891, + "src": "25416:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9900, + "nodeType": "ExpressionStatement", + "src": "25414:3:58" + }, + "nodeType": "ForStatement", + "src": "25361:394:58" + } + ] + }, + "documentation": { + "id": 9882, + "nodeType": "StructuredDocumentation", + "src": "25087:155:58", + "text": "@notice transfer additional royalties in ETH\n@param _additionalRoyalties array uint256 (base point + royalty recipient address)" + }, + "id": 9946, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferAdditionalRoyaltiesETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9888, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9885, + "mutability": "mutable", + "name": "_additionalRoyalties", + "nodeType": "VariableDeclaration", + "scope": 9946, + "src": "25287:37:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 9883, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25287:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9884, + "nodeType": "ArrayTypeName", + "src": "25287:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9887, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 9946, + "src": "25326:14:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9886, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25326:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "25286:55:58" + }, + "returnParameters": { + "id": 9889, + "nodeType": "ParameterList", + "parameters": [], + "src": "25351:0:58" + }, + "scope": 10382, + "src": "25247:514:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10010, + "nodeType": "Block", + "src": "26033:411:58", + "statements": [ + { + "body": { + "id": 10008, + "nodeType": "Block", + "src": "26101:337:58", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9970, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 9966, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9950, + "src": "26119:20:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 9968, + "indexExpression": { + "id": 9967, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9956, + "src": "26140:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "26119:23:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9969, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26145:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "26119:27:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10007, + "nodeType": "IfStatement", + "src": "26115:313:58", + "trueBody": { + "id": 10006, + "nodeType": "Block", + "src": "26148:280:58", + "statements": [ + { + "assignments": [ + 9972 + ], + "declarations": [ + { + "constant": false, + "id": 9972, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 10006, + "src": "26166:23:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 9971, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "26166:15:58", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + } + ], + "id": 9982, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "baseExpression": { + "id": 9977, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9950, + "src": "26208:20:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 9979, + "indexExpression": { + "id": 9978, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9956, + "src": "26229:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "26208:23:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9976, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "26200:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9975, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "26200:7:58", + "typeDescriptions": {} + } + }, + "id": 9980, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26200:32:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 9974, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "26192:8:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_payable_$", + "typeString": "type(address payable)" + }, + "typeName": { + "id": 9973, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "26192:8:58", + "stateMutability": "payable", + "typeDescriptions": {} + } + }, + "id": 9981, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26192:41:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "26166:67:58" + }, + { + "assignments": [ + 9984 + ], + "declarations": [ + { + "constant": false, + "id": 9984, + "mutability": "mutable", + "name": "basePoint", + "nodeType": "VariableDeclaration", + "scope": 10006, + "src": "26251:17:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9983, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26251:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9993, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9991, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 9987, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9950, + "src": "26279:20:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 9989, + "indexExpression": { + "id": 9988, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9956, + "src": "26300:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "26279:23:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "313630", + "id": 9990, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26306:3:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_160_by_1", + "typeString": "int_const 160" + }, + "value": "160" + }, + "src": "26279:30:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9986, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "26271:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 9985, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26271:7:58", + "typeDescriptions": {} + } + }, + "id": 9992, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26271:39:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "26251:59:58" + }, + { + "assignments": [ + 9995 + ], + "declarations": [ + { + "constant": false, + "id": 9995, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 10006, + "src": "26328:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9994, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26328:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10000, + "initialValue": { + "arguments": [ + { + "id": 9998, + "name": "basePoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9984, + "src": "26354:9:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9996, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9952, + "src": "26344:6:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9997, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bp", + "nodeType": "MemberAccess", + "referencedDeclaration": 4933, + "src": "26344:9:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9999, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26344:20:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "26328:36:58" + }, + { + "expression": { + "arguments": [ + { + "id": 10002, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9995, + "src": "26398:5:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10003, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9972, + "src": "26405:7:58", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 10001, + "name": "transferFeeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9681, + "src": "26382:15:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 10004, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26382:31:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10005, + "nodeType": "ExpressionStatement", + "src": "26382:31:58" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9962, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9959, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9956, + "src": "26063:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 9960, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9950, + "src": "26067:20:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 9961, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "26067:27:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "26063:31:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10009, + "initializationExpression": { + "assignments": [ + 9956 + ], + "declarations": [ + { + "constant": false, + "id": 9956, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 10009, + "src": "26048:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9955, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26048:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9958, + "initialValue": { + "hexValue": "30", + "id": 9957, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26060:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "26048:13:58" + }, + "loopExpression": { + "expression": { + "id": 9964, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "26096:3:58", + "subExpression": { + "id": 9963, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9956, + "src": "26098:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9965, + "nodeType": "ExpressionStatement", + "src": "26096:3:58" + }, + "nodeType": "ForStatement", + "src": "26043:395:58" + } + ] + }, + "documentation": { + "id": 9947, + "nodeType": "StructuredDocumentation", + "src": "25767:156:58", + "text": "@notice transfer additional royalties in WETH\n@param _additionalRoyalties array uint256 (base point + royalty recipient address)" + }, + "id": 10011, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferAdditionalRoyaltiesWETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9953, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9950, + "mutability": "mutable", + "name": "_additionalRoyalties", + "nodeType": "VariableDeclaration", + "scope": 10011, + "src": "25969:37:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 9948, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25969:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9949, + "nodeType": "ArrayTypeName", + "src": "25969:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9952, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 10011, + "src": "26008:14:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9951, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26008:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "25968:55:58" + }, + "returnParameters": { + "id": 9954, + "nodeType": "ParameterList", + "parameters": [], + "src": "26033:0:58" + }, + "scope": 10382, + "src": "25928:516:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10064, + "nodeType": "Block", + "src": "26610:251:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10025, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10021, + "name": "src", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10013, + "src": "26628:3:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10022, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "26628:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10023, + "name": "replacement", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10015, + "src": "26642:11:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10024, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "26642:18:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "26628:32:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 10020, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "26620:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 10026, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26620:41:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10027, + "nodeType": "ExpressionStatement", + "src": "26620:41:58" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10033, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10029, + "name": "src", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10013, + "src": "26679:3:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "26679:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10031, + "name": "mask", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10017, + "src": "26693:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10032, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "26693:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "26679:25:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 10028, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "26671:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 10034, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26671:34:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10035, + "nodeType": "ExpressionStatement", + "src": "26671:34:58" + }, + { + "body": { + "id": 10062, + "nodeType": "Block", + "src": "26757:98:58", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + }, + "id": 10051, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 10047, + "name": "mask", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10017, + "src": "26775:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10049, + "indexExpression": { + "id": 10048, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10037, + "src": "26780:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "26775:7:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 10050, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26786:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "26775:12:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10061, + "nodeType": "IfStatement", + "src": "26771:74:58", + "trueBody": { + "id": 10060, + "nodeType": "Block", + "src": "26789:56:58", + "statements": [ + { + "expression": { + "id": 10058, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10052, + "name": "src", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10013, + "src": "26807:3:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10054, + "indexExpression": { + "id": 10053, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10037, + "src": "26811:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "26807:6:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 10055, + "name": "replacement", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10015, + "src": "26816:11:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10057, + "indexExpression": { + "id": 10056, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10037, + "src": "26828:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "26816:14:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "src": "26807:23:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "id": 10059, + "nodeType": "ExpressionStatement", + "src": "26807:23:58" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10043, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10040, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10037, + "src": "26736:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 10041, + "name": "src", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10013, + "src": "26740:3:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10042, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "26740:10:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "26736:14:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10063, + "initializationExpression": { + "assignments": [ + 10037 + ], + "declarations": [ + { + "constant": false, + "id": 10037, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 10063, + "src": "26721:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10036, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26721:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10039, + "initialValue": { + "hexValue": "30", + "id": 10038, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26733:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "26721:13:58" + }, + "loopExpression": { + "expression": { + "id": 10045, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "26752:3:58", + "subExpression": { + "id": 10044, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10037, + "src": "26754:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10046, + "nodeType": "ExpressionStatement", + "src": "26752:3:58" + }, + "nodeType": "ForStatement", + "src": "26716:139:58" + } + ] + }, + "id": 10065, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_arrayReplace", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10018, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10013, + "mutability": "mutable", + "name": "src", + "nodeType": "VariableDeclaration", + "scope": 10065, + "src": "26504:16:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10012, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "26504:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10015, + "mutability": "mutable", + "name": "replacement", + "nodeType": "VariableDeclaration", + "scope": 10065, + "src": "26530:24:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10014, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "26530:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10017, + "mutability": "mutable", + "name": "mask", + "nodeType": "VariableDeclaration", + "scope": 10065, + "src": "26564:17:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10016, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "26564:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "26494:93:58" + }, + "returnParameters": { + "id": 10019, + "nodeType": "ParameterList", + "parameters": [], + "src": "26610:0:58" + }, + "scope": 10382, + "src": "26472:389:58", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 10093, + "nodeType": "Block", + "src": "27169:183:58", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 10086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 10081, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10073, + "name": "marketId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10068, + "src": "27183:8:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10074, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "27195:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10075, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SudoSwap", + "nodeType": "MemberAccess", + "src": "27195:16:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "27183:28:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10080, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10077, + "name": "marketId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10068, + "src": "27215:8:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10078, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "27227:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10079, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "LooksRareOrders", + "nodeType": "MemberAccess", + "src": "27227:23:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "27215:35:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "27183:67:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10085, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10082, + "name": "marketId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10068, + "src": "27254:8:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10083, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "27266:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10084, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "LooksRareV2", + "nodeType": "MemberAccess", + "src": "27266:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "27254:31:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "27183:102:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10090, + "nodeType": "IfStatement", + "src": "27179:144:58", + "trueBody": { + "id": 10089, + "nodeType": "Block", + "src": "27287:36:58", + "statements": [ + { + "expression": { + "hexValue": "74727565", + "id": 10087, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27308:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 10072, + "id": 10088, + "nodeType": "Return", + "src": "27301:11:58" + } + ] + } + }, + { + "expression": { + "hexValue": "66616c7365", + "id": 10091, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27340:5:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 10072, + "id": 10092, + "nodeType": "Return", + "src": "27333:12:58" + } + ] + }, + "documentation": { + "id": 10066, + "nodeType": "StructuredDocumentation", + "src": "26867:223:58", + "text": "@notice returns true if this contract supports additional royalties for the marketplace;\nnow royalties are supported for:\n1. SudoSwap\n2. LooksRare old\n3. LooksRare V2" + }, + "id": 10094, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "supportsRoyalties", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10069, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10068, + "mutability": "mutable", + "name": "marketId", + "nodeType": "VariableDeclaration", + "scope": 10094, + "src": "27122:16:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "typeName": { + "id": 10067, + "name": "Markets", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8046, + "src": "27122:7:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "visibility": "internal" + } + ], + "src": "27121:18:58" + }, + "returnParameters": { + "id": 10072, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10071, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10094, + "src": "27163:4:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10070, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "27163:4:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "27162:6:58" + }, + "scope": 10382, + "src": "27095:257:58", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10198, + "nodeType": "Block", + "src": "27457:923:58", + "statements": [ + { + "assignments": [ + 10102 + ], + "declarations": [ + { + "constant": false, + "id": 10102, + "mutability": "mutable", + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 10198, + "src": "27467:14:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10101, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27467:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10104, + "initialValue": { + "hexValue": "30", + "id": 10103, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27484:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "27467:18:58" + }, + { + "assignments": [ + 10106 + ], + "declarations": [ + { + "constant": false, + "id": 10106, + "mutability": "mutable", + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 10198, + "src": "27496:19:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "typeName": { + "id": 10105, + "name": "Currencies", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8052, + "src": "27496:10:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "visibility": "internal" + } + ], + "id": 10111, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 10108, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10096, + "src": "27530:6:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 10109, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8058, + "src": "27530:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10107, + "name": "getCurrency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9802, + "src": "27518:11:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_enum$_Currencies_$8052_$", + "typeString": "function (uint256) pure returns (enum RaribleExchangeWrapperUpgradeable.Currencies)" + } + }, + "id": 10110, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27518:24:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "27496:46:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "id": 10115, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10112, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10106, + "src": "27637:8:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10113, + "name": "Currencies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8052, + "src": "27649:10:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Currencies_$8052_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Currencies)" + } + }, + "id": 10114, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "WETH", + "nodeType": "MemberAccess", + "src": "27649:15:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + } + }, + "src": "27637:27:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10195, + "nodeType": "IfStatement", + "src": "27633:717:58", + "trueBody": { + "id": 10194, + "nodeType": "Block", + "src": "27666:684:58", + "statements": [ + { + "expression": { + "id": 10121, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10116, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10102, + "src": "27705:6:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10120, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10117, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10102, + "src": "27714:6:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "expression": { + "id": 10118, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10096, + "src": "27723:6:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 10119, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8056, + "src": "27723:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "27714:22:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "27705:31:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10122, + "nodeType": "ExpressionStatement", + "src": "27705:31:58" + }, + { + "assignments": [ + 10124, + 10126 + ], + "declarations": [ + { + "constant": false, + "id": 10124, + "mutability": "mutable", + "name": "firstFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 10194, + "src": "27775:22:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10123, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27775:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10126, + "mutability": "mutable", + "name": "secondFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 10194, + "src": "27799:23:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10125, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27799:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10133, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 10128, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10096, + "src": "27834:6:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 10129, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8058, + "src": "27834:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 10130, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10096, + "src": "27847:6:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 10131, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8056, + "src": "27847:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10127, + "name": "getFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9784, + "src": "27826:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256,uint256)" + } + }, + "id": 10132, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27826:35:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "27774:87:58" + }, + { + "expression": { + "id": 10140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10134, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10102, + "src": "27875:6:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10137, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10135, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10102, + "src": "27884:6:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 10136, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10124, + "src": "27893:14:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "27884:23:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 10138, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10126, + "src": "27910:15:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "27884:41:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "27875:50:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10141, + "nodeType": "ExpressionStatement", + "src": "27875:50:58" + }, + { + "assignments": [ + null, + 10146 + ], + "declarations": [ + null, + { + "constant": false, + "id": 10146, + "mutability": "mutable", + "name": "royalties", + "nodeType": "VariableDeclaration", + "scope": 10194, + "src": "27971:26:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10144, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27971:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10145, + "nodeType": "ArrayTypeName", + "src": "27971:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 10155, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 10148, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10096, + "src": "28026:6:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 10149, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "data", + "nodeType": "MemberAccess", + "referencedDeclaration": 8060, + "src": "28026:11:58", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "id": 10150, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10096, + "src": "28039:6:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 10151, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8058, + "src": "28039:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 10152, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10096, + "src": "28052:6:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 10153, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8054, + "src": "28052:15:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + ], + "id": 10147, + "name": "getDataAndAdditionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9881, + "src": "28001:24:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_enum$_Markets_$8046_$returns$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes memory,uint256,enum RaribleExchangeWrapperUpgradeable.Markets) pure returns (bytes memory,uint256[] memory)" + } + }, + "id": 10154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "28001:67:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bytes memory,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "27968:100:58" + }, + { + "body": { + "id": 10192, + "nodeType": "Block", + "src": "28129:211:58", + "statements": [ + { + "assignments": [ + 10168 + ], + "declarations": [ + { + "constant": false, + "id": 10168, + "mutability": "mutable", + "name": "royaltyBasePoint", + "nodeType": "VariableDeclaration", + "scope": 10192, + "src": "28147:24:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10167, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28147:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10177, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10175, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 10171, + "name": "royalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10146, + "src": "28182:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10173, + "indexExpression": { + "id": 10172, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10157, + "src": "28192:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "28182:12:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "313630", + "id": 10174, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "28198:3:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_160_by_1", + "typeString": "int_const 160" + }, + "value": "160" + }, + "src": "28182:19:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10170, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "28174:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 10169, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28174:7:58", + "typeDescriptions": {} + } + }, + "id": 10176, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "28174:28:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "28147:55:58" + }, + { + "assignments": [ + 10179 + ], + "declarations": [ + { + "constant": false, + "id": 10179, + "mutability": "mutable", + "name": "royaltyValue", + "nodeType": "VariableDeclaration", + "scope": 10192, + "src": "28220:20:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10178, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28220:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10185, + "initialValue": { + "arguments": [ + { + "id": 10183, + "name": "royaltyBasePoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10168, + "src": "28260:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "expression": { + "id": 10180, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10096, + "src": "28243:6:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + }, + "id": 10181, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8056, + "src": "28243:13:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10182, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bp", + "nodeType": "MemberAccess", + "referencedDeclaration": 4933, + "src": "28243:16:58", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "28243:34:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "28220:57:58" + }, + { + "expression": { + "id": 10190, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10186, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10102, + "src": "28295:6:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10189, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10187, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10102, + "src": "28304:6:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 10188, + "name": "royaltyValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10179, + "src": "28313:12:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "28304:21:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "28295:30:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10191, + "nodeType": "ExpressionStatement", + "src": "28295:30:58" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10163, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10160, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10157, + "src": "28102:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 10161, + "name": "royalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10146, + "src": "28106:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10162, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "28106:16:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "28102:20:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10193, + "initializationExpression": { + "assignments": [ + 10157 + ], + "declarations": [ + { + "constant": false, + "id": 10157, + "mutability": "mutable", + "name": "j", + "nodeType": "VariableDeclaration", + "scope": 10193, + "src": "28087:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10156, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28087:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10159, + "initialValue": { + "hexValue": "30", + "id": 10158, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "28099:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "28087:13:58" + }, + "loopExpression": { + "expression": { + "id": 10165, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "28124:3:58", + "subExpression": { + "id": 10164, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10157, + "src": "28126:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10166, + "nodeType": "ExpressionStatement", + "src": "28124:3:58" + }, + "nodeType": "ForStatement", + "src": "28082:258:58" + } + ] + } + }, + { + "expression": { + "id": 10196, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10102, + "src": "28367:6:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 10100, + "id": 10197, + "nodeType": "Return", + "src": "28360:13:58" + } + ] + }, + "id": 10199, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAmountOfWethForPurchase", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10097, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10096, + "mutability": "mutable", + "name": "detail", + "nodeType": "VariableDeclaration", + "scope": 10199, + "src": "27394:29:58", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + }, + "typeName": { + "id": 10095, + "name": "PurchaseDetails", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8061, + "src": "27394:15:58", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + } + }, + "visibility": "internal" + } + ], + "src": "27393:31:58" + }, + "returnParameters": { + "id": 10100, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10099, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10199, + "src": "27448:7:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10098, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27448:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "27447:9:58" + }, + "scope": 10382, + "src": "27358:1022:58", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10231, + "nodeType": "Block", + "src": "28607:158:58", + "statements": [ + { + "body": { + "id": 10229, + "nodeType": "Block", + "src": "28670:89:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 10223, + "name": "transferProxies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10203, + "src": "28716:15:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + "id": 10225, + "indexExpression": { + "id": 10224, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10209, + "src": "28732:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "28716:18:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10226, + "name": "UINT256_MAX", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8024, + "src": "28736:11:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 10220, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8017, + "src": "28702:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10219, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "28684:17:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 10221, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "28684:23:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 10222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 1142, + "src": "28684:31:58", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 10227, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "28684:64:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10228, + "nodeType": "ExpressionStatement", + "src": "28684:64:58" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10215, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10212, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10209, + "src": "28637:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 10213, + "name": "transferProxies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10203, + "src": "28641:15:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + "id": 10214, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "28641:22:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "28637:26:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10230, + "initializationExpression": { + "assignments": [ + 10209 + ], + "declarations": [ + { + "constant": false, + "id": 10209, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 10230, + "src": "28622:9:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10208, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28622:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10211, + "initialValue": { + "hexValue": "30", + "id": 10210, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "28634:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "28622:13:58" + }, + "loopExpression": { + "expression": { + "id": 10217, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "28665:3:58", + "subExpression": { + "id": 10216, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10209, + "src": "28667:1:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10218, + "nodeType": "ExpressionStatement", + "src": "28665:3:58" + }, + "nodeType": "ForStatement", + "src": "28617:142:58" + } + ] + }, + "documentation": { + "id": 10200, + "nodeType": "StructuredDocumentation", + "src": "28386:140:58", + "text": "@notice approves weth for a list of the addresses\n@param transferProxies - array of addresses to approve WETH for" + }, + "functionSelector": "86dcbd27", + "id": 10232, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 10206, + "modifierName": { + "id": 10205, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 75, + "src": "28597:9:58", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "28597:9:58" + } + ], + "name": "approveWETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10204, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10203, + "mutability": "mutable", + "name": "transferProxies", + "nodeType": "VariableDeclaration", + "scope": 10232, + "src": "28552:34:58", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 10201, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "28552:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10202, + "nodeType": "ArrayTypeName", + "src": "28552:9:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + } + ], + "src": "28551:36:58" + }, + "returnParameters": { + "id": 10207, + "nodeType": "ParameterList", + "parameters": [], + "src": "28607:0:58" + }, + "scope": 10382, + "src": "28531:234:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 10372, + "nodeType": "Block", + "src": "29035:1173:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10248, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10243, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10237, + "src": "29053:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 10246, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "29076:1:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 10245, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "29068:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10244, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "29068:7:58", + "typeDescriptions": {} + } + }, + "id": 10247, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "29068:10:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "29053:25:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4e657720616464726573732063616e6e6f74206265207a65726f", + "id": 10249, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "29080:28:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_5904c3e21a28364a0c2d14d132ae0ba7e1f2dcf1f9ade73ba991a7031640606b", + "typeString": "literal_string \"New address cannot be zero\"" + }, + "value": "New address cannot be zero" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5904c3e21a28364a0c2d14d132ae0ba7e1f2dcf1f9ade73ba991a7031640606b", + "typeString": "literal_string \"New address cannot be zero\"" + } + ], + "id": 10242, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "29045:7:58", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "29045:64:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10251, + "nodeType": "ExpressionStatement", + "src": "29045:64:58" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10255, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10252, + "name": "_type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10235, + "src": "29124:5:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10253, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "29133:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10254, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "WyvernExchange", + "nodeType": "MemberAccess", + "src": "29133:22:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "29124:31:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10264, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10261, + "name": "_type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10235, + "src": "29220:5:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10262, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "29229:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10263, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "ExchangeV2", + "nodeType": "MemberAccess", + "src": "29229:18:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "29220:27:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10273, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10270, + "name": "_type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10235, + "src": "29308:5:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10271, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "29317:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10272, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_1", + "nodeType": "MemberAccess", + "src": "29317:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "29308:28:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10282, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10279, + "name": "_type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10235, + "src": "29398:5:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10280, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "29407:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10281, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "X2Y2", + "nodeType": "MemberAccess", + "src": "29407:12:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "29398:21:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10291, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10288, + "name": "_type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10235, + "src": "29474:5:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10289, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "29483:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10290, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "LooksRareOrders", + "nodeType": "MemberAccess", + "src": "29483:23:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "29474:32:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10300, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10297, + "name": "_type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10235, + "src": "29566:5:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10298, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "29575:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10299, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SudoSwap", + "nodeType": "MemberAccess", + "src": "29575:16:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "29566:25:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10309, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10306, + "name": "_type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10235, + "src": "29650:5:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10307, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "29659:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10308, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_4", + "nodeType": "MemberAccess", + "src": "29659:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "29650:28:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10318, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10315, + "name": "_type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10235, + "src": "29740:5:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10316, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "29749:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10317, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "LooksRareV2", + "nodeType": "MemberAccess", + "src": "29749:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "29740:28:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10324, + "name": "_type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10235, + "src": "29830:5:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10325, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "29839:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10326, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "Blur", + "nodeType": "MemberAccess", + "src": "29839:12:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "29830:21:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10336, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10333, + "name": "_type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10235, + "src": "29906:5:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10334, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "29915:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10335, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_5", + "nodeType": "MemberAccess", + "src": "29915:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "29906:28:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10345, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10342, + "name": "_type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10235, + "src": "29996:5:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10343, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8046, + "src": "30005:7:58", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8046_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeable.Markets)" + } + }, + "id": 10344, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_6", + "nodeType": "MemberAccess", + "src": "30005:19:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "src": "29996:28:58", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 10355, + "nodeType": "Block", + "src": "30082:59:58", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "496e76616c6964206d61726b6574706c6163652074797065", + "id": 10352, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "30103:26:58", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_febc375c51703703674424cdadfabf329e51db90f4495b4c56145c8182019182", + "typeString": "literal_string \"Invalid marketplace type\"" + }, + "value": "Invalid marketplace type" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_febc375c51703703674424cdadfabf329e51db90f4495b4c56145c8182019182", + "typeString": "literal_string \"Invalid marketplace type\"" + } + ], + "id": 10351, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "30096:6:58", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 10353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "30096:34:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10354, + "nodeType": "ExpressionStatement", + "src": "30096:34:58" + } + ] + }, + "id": 10356, + "nodeType": "IfStatement", + "src": "29992:149:58", + "trueBody": { + "id": 10350, + "nodeType": "Block", + "src": "30026:50:58", + "statements": [ + { + "expression": { + "id": 10348, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10346, + "name": "seaPort_1_6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8015, + "src": "30040:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10347, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10237, + "src": "30054:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "30040:25:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10349, + "nodeType": "ExpressionStatement", + "src": "30040:25:58" + } + ] + } + }, + "id": 10357, + "nodeType": "IfStatement", + "src": "29902:239:58", + "trueBody": { + "id": 10341, + "nodeType": "Block", + "src": "29936:50:58", + "statements": [ + { + "expression": { + "id": 10339, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10337, + "name": "seaPort_1_5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8013, + "src": "29950:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10338, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10237, + "src": "29964:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "29950:25:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10340, + "nodeType": "ExpressionStatement", + "src": "29950:25:58" + } + ] + } + }, + "id": 10358, + "nodeType": "IfStatement", + "src": "29826:315:58", + "trueBody": { + "id": 10332, + "nodeType": "Block", + "src": "29853:43:58", + "statements": [ + { + "expression": { + "id": 10330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10328, + "name": "blur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8011, + "src": "29867:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10329, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10237, + "src": "29874:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "29867:18:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10331, + "nodeType": "ExpressionStatement", + "src": "29867:18:58" + } + ] + } + }, + "id": 10359, + "nodeType": "IfStatement", + "src": "29736:405:58", + "trueBody": { + "id": 10323, + "nodeType": "Block", + "src": "29770:50:58", + "statements": [ + { + "expression": { + "id": 10321, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10319, + "name": "looksRareV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8009, + "src": "29784:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10320, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10237, + "src": "29798:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "29784:25:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10322, + "nodeType": "ExpressionStatement", + "src": "29784:25:58" + } + ] + } + }, + "id": 10360, + "nodeType": "IfStatement", + "src": "29646:495:58", + "trueBody": { + "id": 10314, + "nodeType": "Block", + "src": "29680:50:58", + "statements": [ + { + "expression": { + "id": 10312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10310, + "name": "seaPort_1_4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8007, + "src": "29694:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10311, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10237, + "src": "29708:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "29694:25:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10313, + "nodeType": "ExpressionStatement", + "src": "29694:25:58" + } + ] + } + }, + "id": 10361, + "nodeType": "IfStatement", + "src": "29562:579:58", + "trueBody": { + "id": 10305, + "nodeType": "Block", + "src": "29593:47:58", + "statements": [ + { + "expression": { + "id": 10303, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10301, + "name": "sudoswap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8005, + "src": "29607:8:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10302, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10237, + "src": "29618:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "29607:22:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10304, + "nodeType": "ExpressionStatement", + "src": "29607:22:58" + } + ] + } + }, + "id": 10362, + "nodeType": "IfStatement", + "src": "29470:671:58", + "trueBody": { + "id": 10296, + "nodeType": "Block", + "src": "29508:48:58", + "statements": [ + { + "expression": { + "id": 10294, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10292, + "name": "looksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8003, + "src": "29522:9:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10293, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10237, + "src": "29534:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "29522:23:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10295, + "nodeType": "ExpressionStatement", + "src": "29522:23:58" + } + ] + } + }, + "id": 10363, + "nodeType": "IfStatement", + "src": "29394:747:58", + "trueBody": { + "id": 10287, + "nodeType": "Block", + "src": "29421:43:58", + "statements": [ + { + "expression": { + "id": 10285, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10283, + "name": "x2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8001, + "src": "29435:4:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10284, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10237, + "src": "29442:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "29435:18:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10286, + "nodeType": "ExpressionStatement", + "src": "29435:18:58" + } + ] + } + }, + "id": 10364, + "nodeType": "IfStatement", + "src": "29304:837:58", + "trueBody": { + "id": 10278, + "nodeType": "Block", + "src": "29338:50:58", + "statements": [ + { + "expression": { + "id": 10276, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10274, + "name": "seaPort_1_1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7999, + "src": "29352:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10275, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10237, + "src": "29366:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "29352:25:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10277, + "nodeType": "ExpressionStatement", + "src": "29352:25:58" + } + ] + } + }, + "id": 10365, + "nodeType": "IfStatement", + "src": "29216:925:58", + "trueBody": { + "id": 10269, + "nodeType": "Block", + "src": "29249:49:58", + "statements": [ + { + "expression": { + "id": 10267, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10265, + "name": "exchangeV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7997, + "src": "29263:10:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10266, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10237, + "src": "29276:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "29263:24:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10268, + "nodeType": "ExpressionStatement", + "src": "29263:24:58" + } + ] + } + }, + "id": 10366, + "nodeType": "IfStatement", + "src": "29120:1021:58", + "trueBody": { + "id": 10260, + "nodeType": "Block", + "src": "29157:53:58", + "statements": [ + { + "expression": { + "id": 10258, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10256, + "name": "wyvernExchange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 7995, + "src": "29171:14:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10257, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10237, + "src": "29188:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "29171:28:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10259, + "nodeType": "ExpressionStatement", + "src": "29171:28:58" + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 10368, + "name": "_type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10235, + "src": "30182:5:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + { + "id": 10369, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10237, + "src": "30189:11:58", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10367, + "name": "MarketplaceAddressUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8034, + "src": "30156:25:58", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_enum$_Markets_$8046_$_t_address_$returns$__$", + "typeString": "function (enum RaribleExchangeWrapperUpgradeable.Markets,address)" + } + }, + "id": 10370, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "30156:45:58", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10371, + "nodeType": "EmitStatement", + "src": "30151:50:58" + } + ] + }, + "documentation": { + "id": 10233, + "nodeType": "StructuredDocumentation", + "src": "28771:170:58", + "text": " @notice updates the address of the marketplace\n @param _type - type of the marketplace\n @param _newAddress - new address of the marketplace" + }, + "functionSelector": "5cdb4367", + "id": 10373, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 10240, + "modifierName": { + "id": 10239, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 75, + "src": "29025:9:58", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "29025:9:58" + } + ], + "name": "updateMarketplaceAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10238, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10235, + "mutability": "mutable", + "name": "_type", + "nodeType": "VariableDeclaration", + "scope": 10373, + "src": "28980:13:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "typeName": { + "id": 10234, + "name": "Markets", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8046, + "src": "28980:7:58", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10237, + "mutability": "mutable", + "name": "_newAddress", + "nodeType": "VariableDeclaration", + "scope": 10373, + "src": "28995:19:58", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10236, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "28995:7:58", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "28979:36:58" + }, + "returnParameters": { + "id": 10241, + "nodeType": "ParameterList", + "parameters": [], + "src": "29035:0:58" + }, + "scope": 10382, + "src": "28946:1262:58", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 10376, + "nodeType": "Block", + "src": "30241:2:58", + "statements": [] + }, + "id": 10377, + "implemented": true, + "kind": "receive", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10374, + "nodeType": "ParameterList", + "parameters": [], + "src": "30221:2:58" + }, + "returnParameters": { + "id": 10375, + "nodeType": "ParameterList", + "parameters": [], + "src": "30241:0:58" + }, + "scope": 10382, + "src": "30214:29:58", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "constant": false, + "id": 10381, + "mutability": "mutable", + "name": "__gap", + "nodeType": "VariableDeclaration", + "scope": 10382, + "src": "30249:25:58", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage", + "typeString": "uint256[50]" + }, + "typeName": { + "baseType": { + "id": 10378, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "30249:7:58", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10380, + "length": { + "hexValue": "3530", + "id": 10379, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "30257:2:58", + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "nodeType": "ArrayTypeName", + "src": "30249:11:58", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", + "typeString": "uint256[50]" + } + }, + "visibility": "private" + } + ], + "scope": 10383, + "src": "1427:28850:58" + } + ], + "src": "33:30245:58" + }, + "legacyAST": { + "attributes": { + "absolutePath": "project:/contracts/RaribleExchangeWrapperUpgradeable.sol", + "exportedSymbols": { + "AddressUpgradeable": [ + 1600 + ], + "AssetMatcher": [ + 2132 + ], + "BpLibrary": [ + 4934 + ], + "ContextUpgradeable": [ + 1645 + ], + "EIP712Upgradeable": [ + 290 + ], + "ERC1155HolderUpgradeable": [ + 877 + ], + "ERC1155ReceiverUpgradeable": [ + 932 + ], + "ERC165Upgradeable": [ + 365 + ], + "ERC20TransferProxy": [ + 7868 + ], + "ERC721HolderUpgradeable": [ + 1222 + ], + "ExchangeV2": [ + 2257 + ], + "ExchangeV2Core": [ + 3234 + ], + "IAssetMatcher": [ + 1772 + ], + "IBlur": [ + 10450 + ], + "IERC1155ReceiverUpgradeable": [ + 973 + ], + "IERC1155Upgradeable": [ + 1095 + ], + "IERC1271": [ + 4979 + ], + "IERC165Upgradeable": [ + 377 + ], + "IERC20TransferProxy": [ + 1788 + ], + "IERC20Upgradeable": [ + 1173 + ], + "IERC721ReceiverUpgradeable": [ + 1240 + ], + "IERC721Upgradeable": [ + 1356 + ], + "IExchangeV2": [ + 10477 + ], + "ILooksRare": [ + 10503 + ], + "INftTransferProxy": [ + 1820 + ], + "IRoyaltiesProvider": [ + 1835 + ], + "ISeaPort": [ + 10558 + ], + "ITransferExecutor": [ + 7665 + ], + "ITransferManager": [ + 7686 + ], + "ITransferProxy": [ + 1849 + ], + "IWyvernExchange": [ + 10620 + ], + "Initializable": [ + 798 + ], + "Ix2y2": [ + 10740 + ], + "LibAsset": [ + 4909 + ], + "LibDeal": [ + 7708 + ], + "LibDirectTransfer": [ + 3436 + ], + "LibERC1155LazyMint": [ + 4648 + ], + "LibERC721LazyMint": [ + 4796 + ], + "LibFeeSide": [ + 7783 + ], + "LibFill": [ + 3597 + ], + "LibLooksRare": [ + 10848 + ], + "LibMath": [ + 3794 + ], + "LibOrder": [ + 4037 + ], + "LibOrderData": [ + 4432 + ], + "LibOrderDataV1": [ + 4452 + ], + "LibOrderDataV2": [ + 4474 + ], + "LibOrderDataV3": [ + 4496 + ], + "LibPart": [ + 4966 + ], + "LibSeaPort": [ + 11042 + ], + "LibSignature": [ + 5131 + ], + "LibTransfer": [ + 7808 + ], + "OrderValidator": [ + 3370 + ], + "OwnableUpgradeable": [ + 130 + ], + "PausableUpgradeable": [ + 1758 + ], + "RaribleExchangeWrapperUpgradeable": [ + 10382 + ], + "RaribleTransferManager": [ + 7309 + ], + "RoyaltiesRegistry": [ + 6062 + ], + "SafeMathUpgradeable": [ + 732 + ], + "TransferExecutor": [ + 7649 + ], + "TransferProxy": [ + 7955 + ] + }, + "license": "MIT" + }, + "children": [ + { + "attributes": { + "literals": [ + "solidity", + "0.7", + ".6" + ] + }, + "id": 7957, + "name": "PragmaDirective", + "src": "33:22:58" + }, + { + "attributes": { + "literals": [ + "abicoder", + "v2" + ] + }, + "id": 7958, + "name": "PragmaDirective", + "src": "56:19:58" + }, + { + "attributes": { + "SourceUnit": 7809, + "absolutePath": "@rarible/transfer-manager/contracts/lib/LibTransfer.sol", + "file": "@rarible/transfer-manager/contracts/lib/LibTransfer.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7959, + "name": "ImportDirective", + "src": "77:65:58" + }, + { + "attributes": { + "SourceUnit": 4935, + "absolutePath": "@rarible/lib-bp/contracts/BpLibrary.sol", + "file": "@rarible/lib-bp/contracts/BpLibrary.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7960, + "name": "ImportDirective", + "src": "143:49:58" + }, + { + "attributes": { + "SourceUnit": 4967, + "absolutePath": "@rarible/lib-part/contracts/LibPart.sol", + "file": "@rarible/lib-part/contracts/LibPart.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7961, + "name": "ImportDirective", + "src": "193:49:58" + }, + { + "attributes": { + "SourceUnit": 733, + "absolutePath": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7962, + "name": "ImportDirective", + "src": "299:74:58" + }, + { + "attributes": { + "SourceUnit": 1223, + "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7963, + "name": "ImportDirective", + "src": "442:86:58" + }, + { + "attributes": { + "SourceUnit": 878, + "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7964, + "name": "ImportDirective", + "src": "598:88:58" + }, + { + "attributes": { + "SourceUnit": 1174, + "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7965, + "name": "ImportDirective", + "src": "770:79:58" + }, + { + "attributes": { + "SourceUnit": 10621, + "absolutePath": "project:/contracts/interfaces/IWyvernExchange.sol", + "file": "./interfaces/IWyvernExchange.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7966, + "name": "ImportDirective", + "src": "851:42:58" + }, + { + "attributes": { + "SourceUnit": 10478, + "absolutePath": "project:/contracts/interfaces/IExchangeV2.sol", + "file": "./interfaces/IExchangeV2.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7967, + "name": "ImportDirective", + "src": "894:38:58" + }, + { + "attributes": { + "SourceUnit": 10559, + "absolutePath": "project:/contracts/interfaces/ISeaPort.sol", + "file": "./interfaces/ISeaPort.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7968, + "name": "ImportDirective", + "src": "933:35:58" + }, + { + "attributes": { + "SourceUnit": 10741, + "absolutePath": "project:/contracts/interfaces/Ix2y2.sol", + "file": "./interfaces/Ix2y2.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7969, + "name": "ImportDirective", + "src": "969:32:58" + }, + { + "attributes": { + "SourceUnit": 10504, + "absolutePath": "project:/contracts/interfaces/ILooksRare.sol", + "file": "./interfaces/ILooksRare.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7970, + "name": "ImportDirective", + "src": "1002:37:58" + }, + { + "attributes": { + "SourceUnit": 10451, + "absolutePath": "project:/contracts/interfaces/IBlur.sol", + "file": "./interfaces/IBlur.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7971, + "name": "ImportDirective", + "src": "1040:32:58" + }, + { + "attributes": { + "SourceUnit": 1759, + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7972, + "name": "ImportDirective", + "src": "1114:75:58" + }, + { + "attributes": { + "SourceUnit": 131, + "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7973, + "name": "ImportDirective", + "src": "1191:75:58" + }, + { + "attributes": { + "SourceUnit": 799, + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol", + "file": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol", + "scope": 10383, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 7974, + "name": "ImportDirective", + "src": "1267:69:58" + }, + { + "attributes": { + "abstract": false, + "contractDependencies": [ + 130, + 365, + 377, + 798, + 877, + 932, + 973, + 1222, + 1240, + 1645, + 1758 + ], + "contractKind": "contract", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 10382, + 1758, + 877, + 932, + 973, + 365, + 377, + 1222, + 1240, + 130, + 1645, + 798 + ], + "name": "RaribleExchangeWrapperUpgradeable", + "scope": 10383 + }, + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "name": "Initializable", + "referencedDeclaration": 798, + "type": "contract Initializable" + }, + "id": 7975, + "name": "UserDefinedTypeName", + "src": "1473:13:58" + } + ], + "id": 7976, + "name": "InheritanceSpecifier", + "src": "1473:13:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "name": "OwnableUpgradeable", + "referencedDeclaration": 130, + "type": "contract OwnableUpgradeable" + }, + "id": 7977, + "name": "UserDefinedTypeName", + "src": "1488:18:58" + } + ], + "id": 7978, + "name": "InheritanceSpecifier", + "src": "1488:18:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "name": "ERC721HolderUpgradeable", + "referencedDeclaration": 1222, + "type": "contract ERC721HolderUpgradeable" + }, + "id": 7979, + "name": "UserDefinedTypeName", + "src": "1508:23:58" + } + ], + "id": 7980, + "name": "InheritanceSpecifier", + "src": "1508:23:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "name": "ERC1155HolderUpgradeable", + "referencedDeclaration": 877, + "type": "contract ERC1155HolderUpgradeable" + }, + "id": 7981, + "name": "UserDefinedTypeName", + "src": "1533:24:58" + } + ], + "id": 7982, + "name": "InheritanceSpecifier", + "src": "1533:24:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "name": "PausableUpgradeable", + "referencedDeclaration": 1758, + "type": "contract PausableUpgradeable" + }, + "id": 7983, + "name": "UserDefinedTypeName", + "src": "1559:19:58" + } + ], + "id": 7984, + "name": "InheritanceSpecifier", + "src": "1559:19:58" + }, + { + "children": [ + { + "attributes": { + "name": "LibTransfer", + "referencedDeclaration": 7808, + "type": "library LibTransfer" + }, + "id": 7985, + "name": "UserDefinedTypeName", + "src": "1591:11:58" + }, + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 7986, + "name": "ElementaryTypeName", + "src": "1607:7:58" + } + ], + "id": 7987, + "name": "UsingForDirective", + "src": "1585:30:58" + }, + { + "children": [ + { + "attributes": { + "name": "BpLibrary", + "referencedDeclaration": 4934, + "type": "library BpLibrary" + }, + "id": 7988, + "name": "UserDefinedTypeName", + "src": "1626:9:58" + }, + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 7989, + "name": "ElementaryTypeName", + "src": "1640:7:58" + } + ], + "id": 7990, + "name": "UsingForDirective", + "src": "1620:28:58" + }, + { + "children": [ + { + "attributes": { + "name": "SafeMathUpgradeable", + "referencedDeclaration": 732, + "type": "library SafeMathUpgradeable" + }, + "id": 7991, + "name": "UserDefinedTypeName", + "src": "1659:19:58" + }, + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 7992, + "name": "ElementaryTypeName", + "src": "1683:7:58" + } + ], + "id": 7993, + "name": "UsingForDirective", + "src": "1653:38:58" + }, + { + "attributes": { + "constant": false, + "functionSelector": "c9f0a2fa", + "mutability": "mutable", + "name": "wyvernExchange", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 7994, + "name": "ElementaryTypeName", + "src": "1716:7:58" + } + ], + "id": 7995, + "name": "VariableDeclaration", + "src": "1716:29:58" + }, + { + "attributes": { + "constant": false, + "functionSelector": "a05f32dc", + "mutability": "mutable", + "name": "exchangeV2", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 7996, + "name": "ElementaryTypeName", + "src": "1751:7:58" + } + ], + "id": 7997, + "name": "VariableDeclaration", + "src": "1751:25:58" + }, + { + "attributes": { + "constant": false, + "functionSelector": "008534f7", + "mutability": "mutable", + "name": "seaPort_1_1", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 7998, + "name": "ElementaryTypeName", + "src": "1782:7:58" + } + ], + "id": 7999, + "name": "VariableDeclaration", + "src": "1782:26:58" + }, + { + "attributes": { + "constant": false, + "functionSelector": "fc40c9c7", + "mutability": "mutable", + "name": "x2y2", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8000, + "name": "ElementaryTypeName", + "src": "1814:7:58" + } + ], + "id": 8001, + "name": "VariableDeclaration", + "src": "1814:19:58" + }, + { + "attributes": { + "constant": false, + "functionSelector": "9110c777", + "mutability": "mutable", + "name": "looksRare", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8002, + "name": "ElementaryTypeName", + "src": "1839:7:58" + } + ], + "id": 8003, + "name": "VariableDeclaration", + "src": "1839:24:58" + }, + { + "attributes": { + "constant": false, + "functionSelector": "5ea1e4c9", + "mutability": "mutable", + "name": "sudoswap", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8004, + "name": "ElementaryTypeName", + "src": "1869:7:58" + } + ], + "id": 8005, + "name": "VariableDeclaration", + "src": "1869:23:58" + }, + { + "attributes": { + "constant": false, + "functionSelector": "bd4486ee", + "mutability": "mutable", + "name": "seaPort_1_4", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8006, + "name": "ElementaryTypeName", + "src": "1898:7:58" + } + ], + "id": 8007, + "name": "VariableDeclaration", + "src": "1898:26:58" + }, + { + "attributes": { + "constant": false, + "functionSelector": "3733b82b", + "mutability": "mutable", + "name": "looksRareV2", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8008, + "name": "ElementaryTypeName", + "src": "1930:7:58" + } + ], + "id": 8009, + "name": "VariableDeclaration", + "src": "1930:26:58" + }, + { + "attributes": { + "constant": false, + "functionSelector": "df6c2558", + "mutability": "mutable", + "name": "blur", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8010, + "name": "ElementaryTypeName", + "src": "1962:7:58" + } + ], + "id": 8011, + "name": "VariableDeclaration", + "src": "1962:19:58" + }, + { + "attributes": { + "constant": false, + "functionSelector": "349d6a85", + "mutability": "mutable", + "name": "seaPort_1_5", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8012, + "name": "ElementaryTypeName", + "src": "1987:7:58" + } + ], + "id": 8013, + "name": "VariableDeclaration", + "src": "1987:26:58" + }, + { + "attributes": { + "constant": false, + "functionSelector": "f66ac0cb", + "mutability": "mutable", + "name": "seaPort_1_6", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8014, + "name": "ElementaryTypeName", + "src": "2019:7:58" + } + ], + "id": 8015, + "name": "VariableDeclaration", + "src": "2019:26:58" + }, + { + "attributes": { + "constant": false, + "functionSelector": "3fc8cef3", + "mutability": "mutable", + "name": "weth", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8016, + "name": "ElementaryTypeName", + "src": "2070:7:58" + } + ], + "id": 8017, + "name": "VariableDeclaration", + "src": "2070:19:58" + }, + { + "attributes": { + "constant": true, + "mutability": "constant", + "name": "UINT256_MAX", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "uint256", + "visibility": "private" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8018, + "name": "ElementaryTypeName", + "src": "2112:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "max", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "type(uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967269, + "type": "function () pure", + "value": "type" + }, + "id": 8019, + "name": "Identifier", + "src": "2151:4:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 8020, + "name": "ElementaryTypeName", + "src": "2156:7:58" + } + ], + "id": 8021, + "name": "ElementaryTypeNameExpression", + "src": "2156:7:58" + } + ], + "id": 8022, + "name": "FunctionCall", + "src": "2151:13:58" + } + ], + "id": 8023, + "name": "MemberAccess", + "src": "2151:17:58" + } + ], + "id": 8024, + "name": "VariableDeclaration", + "src": "2112:56:58" + }, + { + "attributes": { + "anonymous": false, + "name": "Execution" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "indexed": false, + "mutability": "mutable", + "name": "result", + "scope": 8028, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 8025, + "name": "ElementaryTypeName", + "src": "2191:4:58" + } + ], + "id": 8026, + "name": "VariableDeclaration", + "src": "2191:11:58" + } + ], + "id": 8027, + "name": "ParameterList", + "src": "2190:13:58" + } + ], + "id": 8028, + "name": "EventDefinition", + "src": "2175:29:58" + }, + { + "attributes": { + "anonymous": false, + "name": "MarketplaceAddressUpdated" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "indexed": true, + "mutability": "mutable", + "name": "_type", + "scope": 8034, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Markets", + "referencedDeclaration": 8046, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 8029, + "name": "UserDefinedTypeName", + "src": "2241:7:58" + } + ], + "id": 8030, + "name": "VariableDeclaration", + "src": "2241:21:58" + }, + { + "attributes": { + "constant": false, + "indexed": true, + "mutability": "mutable", + "name": "_newAddress", + "scope": 8034, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8031, + "name": "ElementaryTypeName", + "src": "2264:7:58" + } + ], + "id": 8032, + "name": "VariableDeclaration", + "src": "2264:27:58" + } + ], + "id": 8033, + "name": "ParameterList", + "src": "2240:52:58" + } + ], + "id": 8034, + "name": "EventDefinition", + "src": "2209:84:58" + }, + { + "attributes": { + "canonicalName": "RaribleExchangeWrapperUpgradeable.Markets", + "name": "Markets" + }, + "children": [ + { + "attributes": { + "name": "ExchangeV2" + }, + "id": 8035, + "name": "EnumValue", + "src": "2322:10:58" + }, + { + "attributes": { + "name": "WyvernExchange" + }, + "id": 8036, + "name": "EnumValue", + "src": "2346:14:58" + }, + { + "attributes": { + "name": "SeaPort_1_1" + }, + "id": 8037, + "name": "EnumValue", + "src": "2374:11:58" + }, + { + "attributes": { + "name": "X2Y2" + }, + "id": 8038, + "name": "EnumValue", + "src": "2399:4:58" + }, + { + "attributes": { + "name": "LooksRareOrders" + }, + "id": 8039, + "name": "EnumValue", + "src": "2417:15:58" + }, + { + "attributes": { + "name": "SudoSwap" + }, + "id": 8040, + "name": "EnumValue", + "src": "2446:8:58" + }, + { + "attributes": { + "name": "SeaPort_1_4" + }, + "id": 8041, + "name": "EnumValue", + "src": "2468:11:58" + }, + { + "attributes": { + "name": "LooksRareV2" + }, + "id": 8042, + "name": "EnumValue", + "src": "2493:11:58" + }, + { + "attributes": { + "name": "Blur" + }, + "id": 8043, + "name": "EnumValue", + "src": "2518:4:58" + }, + { + "attributes": { + "name": "SeaPort_1_5" + }, + "id": 8044, + "name": "EnumValue", + "src": "2536:11:58" + }, + { + "attributes": { + "name": "SeaPort_1_6" + }, + "id": 8045, + "name": "EnumValue", + "src": "2561:11:58" + } + ], + "id": 8046, + "name": "EnumDefinition", + "src": "2299:284:58" + }, + { + "attributes": { + "canonicalName": "RaribleExchangeWrapperUpgradeable.AdditionalDataTypes", + "name": "AdditionalDataTypes" + }, + "children": [ + { + "attributes": { + "name": "NoAdditionalData" + }, + "id": 8047, + "name": "EnumValue", + "src": "2624:16:58" + }, + { + "attributes": { + "name": "RoyaltiesAdditionalData" + }, + "id": 8048, + "name": "EnumValue", + "src": "2650:23:58" + } + ], + "id": 8049, + "name": "EnumDefinition", + "src": "2589:90:58" + }, + { + "attributes": { + "canonicalName": "RaribleExchangeWrapperUpgradeable.Currencies", + "name": "Currencies" + }, + "children": [ + { + "attributes": { + "name": "ETH" + }, + "id": 8050, + "name": "EnumValue", + "src": "2711:3:58" + }, + { + "attributes": { + "name": "WETH" + }, + "id": 8051, + "name": "EnumValue", + "src": "2724:4:58" + } + ], + "id": 8052, + "name": "EnumDefinition", + "src": "2685:49:58" + }, + { + "attributes": { + "canonicalName": "RaribleExchangeWrapperUpgradeable.PurchaseDetails", + "name": "PurchaseDetails", + "scope": 10382, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "marketId", + "scope": 8061, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Markets", + "referencedDeclaration": 8046, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 8053, + "name": "UserDefinedTypeName", + "src": "3488:7:58" + } + ], + "id": 8054, + "name": "VariableDeclaration", + "src": "3488:16:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "amount", + "scope": 8061, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8055, + "name": "ElementaryTypeName", + "src": "3514:7:58" + } + ], + "id": 8056, + "name": "VariableDeclaration", + "src": "3514:14:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "fees", + "scope": 8061, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8057, + "name": "ElementaryTypeName", + "src": "3538:7:58" + } + ], + "id": 8058, + "name": "VariableDeclaration", + "src": "3538:12:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 8061, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 8059, + "name": "ElementaryTypeName", + "src": "3560:5:58" + } + ], + "id": 8060, + "name": "VariableDeclaration", + "src": "3560:10:58" + } + ], + "id": 8061, + "name": "StructDefinition", + "src": "3455:122:58" + }, + { + "attributes": { + "canonicalName": "RaribleExchangeWrapperUpgradeable.AdditionalData", + "name": "AdditionalData", + "scope": 10382, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 8067, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 8062, + "name": "ElementaryTypeName", + "src": "3843:5:58" + } + ], + "id": 8063, + "name": "VariableDeclaration", + "src": "3843:10:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "additionalRoyalties", + "scope": 8067, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8064, + "name": "ElementaryTypeName", + "src": "3863:7:58" + } + ], + "id": 8065, + "name": "ArrayTypeName", + "src": "3863:9:58" + } + ], + "id": 8066, + "name": "VariableDeclaration", + "src": "3863:29:58" + } + ], + "id": 8067, + "name": "StructDefinition", + "src": "3811:88:58" + }, + { + "attributes": { + "functionSelector": "7dfdd89b", + "implemented": true, + "isConstructor": false, + "kind": "function", + "name": "__ExchangeWrapper_init_proxy", + "scope": 10382, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "text": "@notice initializes the proxy contract\n@param _marketplaces - array of addresses of the marketplaces\n@param _weth - address of the WETH erc-20 token\n@param _transferProxies - array of addresses of the transfer proxies\n@param _initialOwner - address of the owner" + }, + "id": 8068, + "name": "StructuredDocumentation", + "src": "3905:313:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_marketplaces", + "scope": 8202, + "stateVariable": false, + "storageLocation": "memory", + "type": "address[11]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "address[11]" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8069, + "name": "ElementaryTypeName", + "src": "4270:7:58" + }, + { + "attributes": { + "hexvalue": "3131", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 11", + "value": "11" + }, + "id": 8070, + "name": "Literal", + "src": "4278:2:58" + } + ], + "id": 8071, + "name": "ArrayTypeName", + "src": "4270:11:58" + } + ], + "id": 8072, + "name": "VariableDeclaration", + "src": "4270:32:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_weth", + "scope": 8202, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8073, + "name": "ElementaryTypeName", + "src": "4312:7:58" + } + ], + "id": 8074, + "name": "VariableDeclaration", + "src": "4312:13:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_transferProxies", + "scope": 8202, + "stateVariable": false, + "storageLocation": "memory", + "type": "address[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "address[]" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8075, + "name": "ElementaryTypeName", + "src": "4335:7:58" + } + ], + "id": 8076, + "name": "ArrayTypeName", + "src": "4335:9:58" + } + ], + "id": 8077, + "name": "VariableDeclaration", + "src": "4335:33:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_initialOwner", + "scope": 8202, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8078, + "name": "ElementaryTypeName", + "src": "4378:7:58" + } + ], + "id": 8079, + "name": "VariableDeclaration", + "src": "4378:21:58" + } + ], + "id": 8080, + "name": "ParameterList", + "src": "4260:145:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 8083, + "name": "ParameterList", + "src": "4425:0:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 781, + "type": "modifier ()", + "value": "initializer" + }, + "id": 8081, + "name": "Identifier", + "src": "4413:11:58" + } + ], + "id": 8082, + "name": "ModifierInvocation", + "src": "4413:11:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 29, + "type": "function ()", + "value": "__Ownable_init" + }, + "id": 8084, + "name": "Identifier", + "src": "4435:14:58" + } + ], + "id": 8085, + "name": "FunctionCall", + "src": "4435:16:58" + } + ], + "id": 8086, + "name": "ExpressionStatement", + "src": "4435:16:58" + }, + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1191, + "type": "function ()", + "value": "__ERC721Holder_init" + }, + "id": 8087, + "name": "Identifier", + "src": "4461:19:58" + } + ], + "id": 8088, + "name": "FunctionCall", + "src": "4461:21:58" + } + ], + "id": 8089, + "name": "ExpressionStatement", + "src": "4461:21:58" + }, + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 822, + "type": "function ()", + "value": "__ERC1155Holder_init" + }, + "id": 8090, + "name": "Identifier", + "src": "4492:20:58" + } + ], + "id": 8091, + "name": "FunctionCall", + "src": "4492:22:58" + } + ], + "id": 8092, + "name": "ExpressionStatement", + "src": "4492:22:58" + }, + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1679, + "type": "function ()", + "value": "__Pausable_init" + }, + "id": 8093, + "name": "Identifier", + "src": "4524:15:58" + } + ], + "id": 8094, + "name": "FunctionCall", + "src": "4524:17:58" + } + ], + "id": 8095, + "name": "ExpressionStatement", + "src": "4524:17:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 7995, + "type": "address", + "value": "wyvernExchange" + }, + "id": 8096, + "name": "Identifier", + "src": "4552:14:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8072, + "type": "address[11] memory", + "value": "_marketplaces" + }, + "id": 8097, + "name": "Identifier", + "src": "4569:13:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8098, + "name": "Literal", + "src": "4583:1:58" + } + ], + "id": 8099, + "name": "IndexAccess", + "src": "4569:16:58" + } + ], + "id": 8100, + "name": "Assignment", + "src": "4552:33:58" + } + ], + "id": 8101, + "name": "ExpressionStatement", + "src": "4552:33:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 7997, + "type": "address", + "value": "exchangeV2" + }, + "id": 8102, + "name": "Identifier", + "src": "4595:10:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8072, + "type": "address[11] memory", + "value": "_marketplaces" + }, + "id": 8103, + "name": "Identifier", + "src": "4608:13:58" + }, + { + "attributes": { + "hexvalue": "31", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 1", + "value": "1" + }, + "id": 8104, + "name": "Literal", + "src": "4622:1:58" + } + ], + "id": 8105, + "name": "IndexAccess", + "src": "4608:16:58" + } + ], + "id": 8106, + "name": "Assignment", + "src": "4595:29:58" + } + ], + "id": 8107, + "name": "ExpressionStatement", + "src": "4595:29:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 7999, + "type": "address", + "value": "seaPort_1_1" + }, + "id": 8108, + "name": "Identifier", + "src": "4634:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8072, + "type": "address[11] memory", + "value": "_marketplaces" + }, + "id": 8109, + "name": "Identifier", + "src": "4648:13:58" + }, + { + "attributes": { + "hexvalue": "32", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 2", + "value": "2" + }, + "id": 8110, + "name": "Literal", + "src": "4662:1:58" + } + ], + "id": 8111, + "name": "IndexAccess", + "src": "4648:16:58" + } + ], + "id": 8112, + "name": "Assignment", + "src": "4634:30:58" + } + ], + "id": 8113, + "name": "ExpressionStatement", + "src": "4634:30:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8001, + "type": "address", + "value": "x2y2" + }, + "id": 8114, + "name": "Identifier", + "src": "4674:4:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8072, + "type": "address[11] memory", + "value": "_marketplaces" + }, + "id": 8115, + "name": "Identifier", + "src": "4681:13:58" + }, + { + "attributes": { + "hexvalue": "33", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 3", + "value": "3" + }, + "id": 8116, + "name": "Literal", + "src": "4695:1:58" + } + ], + "id": 8117, + "name": "IndexAccess", + "src": "4681:16:58" + } + ], + "id": 8118, + "name": "Assignment", + "src": "4674:23:58" + } + ], + "id": 8119, + "name": "ExpressionStatement", + "src": "4674:23:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8003, + "type": "address", + "value": "looksRare" + }, + "id": 8120, + "name": "Identifier", + "src": "4707:9:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8072, + "type": "address[11] memory", + "value": "_marketplaces" + }, + "id": 8121, + "name": "Identifier", + "src": "4719:13:58" + }, + { + "attributes": { + "hexvalue": "34", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 4", + "value": "4" + }, + "id": 8122, + "name": "Literal", + "src": "4733:1:58" + } + ], + "id": 8123, + "name": "IndexAccess", + "src": "4719:16:58" + } + ], + "id": 8124, + "name": "Assignment", + "src": "4707:28:58" + } + ], + "id": 8125, + "name": "ExpressionStatement", + "src": "4707:28:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8005, + "type": "address", + "value": "sudoswap" + }, + "id": 8126, + "name": "Identifier", + "src": "4745:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8072, + "type": "address[11] memory", + "value": "_marketplaces" + }, + "id": 8127, + "name": "Identifier", + "src": "4756:13:58" + }, + { + "attributes": { + "hexvalue": "35", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 5", + "value": "5" + }, + "id": 8128, + "name": "Literal", + "src": "4770:1:58" + } + ], + "id": 8129, + "name": "IndexAccess", + "src": "4756:16:58" + } + ], + "id": 8130, + "name": "Assignment", + "src": "4745:27:58" + } + ], + "id": 8131, + "name": "ExpressionStatement", + "src": "4745:27:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8007, + "type": "address", + "value": "seaPort_1_4" + }, + "id": 8132, + "name": "Identifier", + "src": "4782:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8072, + "type": "address[11] memory", + "value": "_marketplaces" + }, + "id": 8133, + "name": "Identifier", + "src": "4796:13:58" + }, + { + "attributes": { + "hexvalue": "36", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 6", + "value": "6" + }, + "id": 8134, + "name": "Literal", + "src": "4810:1:58" + } + ], + "id": 8135, + "name": "IndexAccess", + "src": "4796:16:58" + } + ], + "id": 8136, + "name": "Assignment", + "src": "4782:30:58" + } + ], + "id": 8137, + "name": "ExpressionStatement", + "src": "4782:30:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8009, + "type": "address", + "value": "looksRareV2" + }, + "id": 8138, + "name": "Identifier", + "src": "4822:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8072, + "type": "address[11] memory", + "value": "_marketplaces" + }, + "id": 8139, + "name": "Identifier", + "src": "4836:13:58" + }, + { + "attributes": { + "hexvalue": "37", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 7", + "value": "7" + }, + "id": 8140, + "name": "Literal", + "src": "4850:1:58" + } + ], + "id": 8141, + "name": "IndexAccess", + "src": "4836:16:58" + } + ], + "id": 8142, + "name": "Assignment", + "src": "4822:30:58" + } + ], + "id": 8143, + "name": "ExpressionStatement", + "src": "4822:30:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8011, + "type": "address", + "value": "blur" + }, + "id": 8144, + "name": "Identifier", + "src": "4862:4:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8072, + "type": "address[11] memory", + "value": "_marketplaces" + }, + "id": 8145, + "name": "Identifier", + "src": "4869:13:58" + }, + { + "attributes": { + "hexvalue": "38", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 8", + "value": "8" + }, + "id": 8146, + "name": "Literal", + "src": "4883:1:58" + } + ], + "id": 8147, + "name": "IndexAccess", + "src": "4869:16:58" + } + ], + "id": 8148, + "name": "Assignment", + "src": "4862:23:58" + } + ], + "id": 8149, + "name": "ExpressionStatement", + "src": "4862:23:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8013, + "type": "address", + "value": "seaPort_1_5" + }, + "id": 8150, + "name": "Identifier", + "src": "4895:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8072, + "type": "address[11] memory", + "value": "_marketplaces" + }, + "id": 8151, + "name": "Identifier", + "src": "4909:13:58" + }, + { + "attributes": { + "hexvalue": "39", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 9", + "value": "9" + }, + "id": 8152, + "name": "Literal", + "src": "4923:1:58" + } + ], + "id": 8153, + "name": "IndexAccess", + "src": "4909:16:58" + } + ], + "id": 8154, + "name": "Assignment", + "src": "4895:30:58" + } + ], + "id": 8155, + "name": "ExpressionStatement", + "src": "4895:30:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8015, + "type": "address", + "value": "seaPort_1_6" + }, + "id": 8156, + "name": "Identifier", + "src": "4935:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8072, + "type": "address[11] memory", + "value": "_marketplaces" + }, + "id": 8157, + "name": "Identifier", + "src": "4949:13:58" + }, + { + "attributes": { + "hexvalue": "3130", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 10", + "value": "10" + }, + "id": 8158, + "name": "Literal", + "src": "4963:2:58" + } + ], + "id": 8159, + "name": "IndexAccess", + "src": "4949:17:58" + } + ], + "id": 8160, + "name": "Assignment", + "src": "4935:31:58" + } + ], + "id": 8161, + "name": "ExpressionStatement", + "src": "4935:31:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8017, + "type": "address", + "value": "weth" + }, + "id": 8162, + "name": "Identifier", + "src": "4977:4:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8074, + "type": "address", + "value": "_weth" + }, + "id": 8163, + "name": "Identifier", + "src": "4984:5:58" + } + ], + "id": 8164, + "name": "Assignment", + "src": "4977:12:58" + } + ], + "id": 8165, + "name": "ExpressionStatement", + "src": "4977:12:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8167 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 8196, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8166, + "name": "ElementaryTypeName", + "src": "5005:7:58" + } + ], + "id": 8167, + "name": "VariableDeclaration", + "src": "5005:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8168, + "name": "Literal", + "src": "5017:1:58" + } + ], + "id": 8169, + "name": "VariableDeclarationStatement", + "src": "5005:13:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8167, + "type": "uint256", + "value": "i" + }, + "id": 8170, + "name": "Identifier", + "src": "5020:1:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8077, + "type": "address[] memory", + "value": "_transferProxies" + }, + "id": 8171, + "name": "Identifier", + "src": "5024:16:58" + } + ], + "id": 8172, + "name": "MemberAccess", + "src": "5024:23:58" + } + ], + "id": 8173, + "name": "BinaryOperation", + "src": "5020:27:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8167, + "type": "uint256", + "value": "i" + }, + "id": 8174, + "name": "Identifier", + "src": "5051:1:58" + } + ], + "id": 8175, + "name": "UnaryOperation", + "src": "5049:3:58" + } + ], + "id": 8176, + "name": "ExpressionStatement", + "src": "5049:3:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8017, + "type": "address", + "value": "weth" + }, + "id": 8177, + "name": "Identifier", + "src": "5072:4:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 8178, + "name": "ElementaryTypeName", + "src": "5080:7:58" + } + ], + "id": 8179, + "name": "ElementaryTypeNameExpression", + "src": "5080:7:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8180, + "name": "Literal", + "src": "5088:1:58" + } + ], + "id": 8181, + "name": "FunctionCall", + "src": "5080:10:58" + } + ], + "id": 8182, + "name": "BinaryOperation", + "src": "5072:18:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "approve", + "referencedDeclaration": 1142, + "type": "function (address,uint256) external returns (bool)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 8183, + "name": "Identifier", + "src": "5110:17:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8017, + "type": "address", + "value": "weth" + }, + "id": 8184, + "name": "Identifier", + "src": "5128:4:58" + } + ], + "id": 8185, + "name": "FunctionCall", + "src": "5110:23:58" + } + ], + "id": 8186, + "name": "MemberAccess", + "src": "5110:31:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8077, + "type": "address[] memory", + "value": "_transferProxies" + }, + "id": 8187, + "name": "Identifier", + "src": "5142:16:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8167, + "type": "uint256", + "value": "i" + }, + "id": 8188, + "name": "Identifier", + "src": "5159:1:58" + } + ], + "id": 8189, + "name": "IndexAccess", + "src": "5142:19:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8024, + "type": "uint256", + "value": "UINT256_MAX" + }, + "id": 8190, + "name": "Identifier", + "src": "5163:11:58" + } + ], + "id": 8191, + "name": "FunctionCall", + "src": "5110:65:58" + } + ], + "id": 8192, + "name": "ExpressionStatement", + "src": "5110:65:58" + } + ], + "id": 8193, + "name": "Block", + "src": "5092:98:58" + } + ], + "id": 8194, + "name": "IfStatement", + "src": "5068:122:58" + } + ], + "id": 8195, + "name": "Block", + "src": "5054:146:58" + } + ], + "id": 8196, + "name": "ForStatement", + "src": "5000:200:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 125, + "type": "function (address)", + "value": "transferOwnership" + }, + "id": 8197, + "name": "Identifier", + "src": "5210:17:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8079, + "type": "address", + "value": "_initialOwner" + }, + "id": 8198, + "name": "Identifier", + "src": "5228:13:58" + } + ], + "id": 8199, + "name": "FunctionCall", + "src": "5210:32:58" + } + ], + "id": 8200, + "name": "ExpressionStatement", + "src": "5210:32:58" + } + ], + "id": 8201, + "name": "Block", + "src": "4425:824:58" + } + ], + "id": 8202, + "name": "FunctionDefinition", + "src": "4223:1026:58" + }, + { + "attributes": { + "functionSelector": "86496e7a", + "implemented": true, + "isConstructor": false, + "kind": "function", + "name": "singlePurchase", + "scope": 10382, + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "attributes": { + "text": "@notice executes a single purchase\n@param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n@param feeRecipientFirst - address of the first fee recipient\n@param feeRecipientSecond - address of the second fee recipient" + }, + "id": 8203, + "name": "StructuredDocumentation", + "src": "5255:295:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "purchaseDetails", + "scope": 8327, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "PurchaseDetails", + "referencedDeclaration": 8061, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + }, + "id": 8204, + "name": "UserDefinedTypeName", + "src": "5588:15:58" + } + ], + "id": 8205, + "name": "VariableDeclaration", + "src": "5588:38:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeRecipientFirst", + "scope": 8327, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8206, + "name": "ElementaryTypeName", + "src": "5636:7:58" + } + ], + "id": 8207, + "name": "VariableDeclaration", + "src": "5636:25:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeRecipientSecond", + "scope": 8327, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8208, + "name": "ElementaryTypeName", + "src": "5671:7:58" + } + ], + "id": 8209, + "name": "VariableDeclaration", + "src": "5671:26:58" + } + ], + "id": 8210, + "name": "ParameterList", + "src": "5578:125:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 8213, + "name": "ParameterList", + "src": "5735:0:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1710, + "type": "modifier ()", + "value": "whenNotPaused" + }, + "id": 8211, + "name": "Identifier", + "src": "5721:13:58" + } + ], + "id": 8212, + "name": "ModifierInvocation", + "src": "5721:13:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8215 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "wethAmountNeeded", + "scope": 8326, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8214, + "name": "ElementaryTypeName", + "src": "5792:7:58" + } + ], + "id": 8215, + "name": "VariableDeclaration", + "src": "5792:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10199, + "type": "function (struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory) pure returns (uint256)", + "value": "getAmountOfWethForPurchase" + }, + "id": 8216, + "name": "Identifier", + "src": "5819:26:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8205, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8217, + "name": "Identifier", + "src": "5846:15:58" + } + ], + "id": 8218, + "name": "FunctionCall", + "src": "5819:43:58" + } + ], + "id": 8219, + "name": "VariableDeclarationStatement", + "src": "5792:70:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8215, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 8220, + "name": "Identifier", + "src": "5930:16:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8221, + "name": "Literal", + "src": "5949:1:58" + } + ], + "id": 8222, + "name": "BinaryOperation", + "src": "5930:20:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transferFrom", + "referencedDeclaration": 1154, + "type": "function (address,address,uint256) external returns (bool)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 8223, + "name": "Identifier", + "src": "5966:17:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8017, + "type": "address", + "value": "weth" + }, + "id": 8224, + "name": "Identifier", + "src": "5984:4:58" + } + ], + "id": 8225, + "name": "FunctionCall", + "src": "5966:23:58" + } + ], + "id": 8226, + "name": "MemberAccess", + "src": "5966:36:58" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 8227, + "name": "Identifier", + "src": "6003:10:58" + } + ], + "id": 8228, + "name": "FunctionCall", + "src": "6003:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 8229, + "name": "ElementaryTypeName", + "src": "6017:7:58" + } + ], + "id": 8230, + "name": "ElementaryTypeNameExpression", + "src": "6017:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeable", + "value": "this" + }, + "id": 8231, + "name": "Identifier", + "src": "6025:4:58" + } + ], + "id": 8232, + "name": "FunctionCall", + "src": "6017:13:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8215, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 8233, + "name": "Identifier", + "src": "6032:16:58" + } + ], + "id": 8234, + "name": "FunctionCall", + "src": "5966:83:58" + } + ], + "id": 8235, + "name": "ExpressionStatement", + "src": "5966:83:58" + } + ], + "id": 8236, + "name": "Block", + "src": "5952:108:58" + } + ], + "id": 8237, + "name": "IfStatement", + "src": "5926:134:58" + }, + { + "attributes": { + "assignments": [ + 8239 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "currency", + "scope": 8326, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Currencies", + "referencedDeclaration": 8052, + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "id": 8238, + "name": "UserDefinedTypeName", + "src": "6070:10:58" + } + ], + "id": 8239, + "name": "VariableDeclaration", + "src": "6070:19:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9802, + "type": "function (uint256) pure returns (enum RaribleExchangeWrapperUpgradeable.Currencies)", + "value": "getCurrency" + }, + "id": 8240, + "name": "Identifier", + "src": "6092:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8058, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8205, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8241, + "name": "Identifier", + "src": "6104:15:58" + } + ], + "id": 8242, + "name": "MemberAccess", + "src": "6104:20:58" + } + ], + "id": 8243, + "name": "FunctionCall", + "src": "6092:33:58" + } + ], + "id": 8244, + "name": "VariableDeclarationStatement", + "src": "6070:55:58" + }, + { + "attributes": { + "assignments": [ + 8246 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 8326, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 8245, + "name": "ElementaryTypeName", + "src": "6135:4:58" + } + ], + "id": 8246, + "name": "VariableDeclaration", + "src": "6135:12:58" + } + ], + "id": 8247, + "name": "VariableDeclarationStatement", + "src": "6135:12:58" + }, + { + "attributes": { + "assignments": [ + 8249 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "firstFeeAmount", + "scope": 8326, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8248, + "name": "ElementaryTypeName", + "src": "6157:7:58" + } + ], + "id": 8249, + "name": "VariableDeclaration", + "src": "6157:22:58" + } + ], + "id": 8250, + "name": "VariableDeclarationStatement", + "src": "6157:22:58" + }, + { + "attributes": { + "assignments": [ + 8252 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "secondFeeAmount", + "scope": 8326, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8251, + "name": "ElementaryTypeName", + "src": "6189:7:58" + } + ], + "id": 8252, + "name": "VariableDeclaration", + "src": "6189:23:58" + } + ], + "id": 8253, + "name": "VariableDeclarationStatement", + "src": "6189:23:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8239, + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies", + "value": "currency" + }, + "id": 8254, + "name": "Identifier", + "src": "6227:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "ETH", + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8052, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Currencies)", + "value": "Currencies" + }, + "id": 8255, + "name": "Identifier", + "src": "6239:10:58" + } + ], + "id": 8256, + "name": "MemberAccess", + "src": "6239:14:58" + } + ], + "id": 8257, + "name": "BinaryOperation", + "src": "6227:26:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "tuple()" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "tuple(bool,uint256,uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8246, + "type": "bool", + "value": "success" + }, + "id": 8258, + "name": "Identifier", + "src": "6270:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8249, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 8259, + "name": "Identifier", + "src": "6279:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8252, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 8260, + "name": "Identifier", + "src": "6295:15:58" + } + ], + "id": 8261, + "name": "TupleExpression", + "src": "6269:42:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9393, + "type": "function (struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory,bool) returns (bool,uint256,uint256)", + "value": "purchase" + }, + "id": 8262, + "name": "Identifier", + "src": "6314:8:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8205, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8263, + "name": "Identifier", + "src": "6323:15:58" + }, + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 8264, + "name": "Literal", + "src": "6340:5:58" + } + ], + "id": 8265, + "name": "FunctionCall", + "src": "6314:32:58" + } + ], + "id": 8266, + "name": "Assignment", + "src": "6269:77:58" + } + ], + "id": 8267, + "name": "ExpressionStatement", + "src": "6269:77:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9652, + "type": "function (uint256,address)", + "value": "transferFeeETH" + }, + "id": 8268, + "name": "Identifier", + "src": "6360:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8249, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 8269, + "name": "Identifier", + "src": "6375:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8207, + "type": "address", + "value": "feeRecipientFirst" + }, + "id": 8270, + "name": "Identifier", + "src": "6391:17:58" + } + ], + "id": 8271, + "name": "FunctionCall", + "src": "6360:49:58" + } + ], + "id": 8272, + "name": "ExpressionStatement", + "src": "6360:49:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9652, + "type": "function (uint256,address)", + "value": "transferFeeETH" + }, + "id": 8273, + "name": "Identifier", + "src": "6423:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8252, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 8274, + "name": "Identifier", + "src": "6438:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8209, + "type": "address", + "value": "feeRecipientSecond" + }, + "id": 8275, + "name": "Identifier", + "src": "6455:18:58" + } + ], + "id": 8276, + "name": "FunctionCall", + "src": "6423:51:58" + } + ], + "id": 8277, + "name": "ExpressionStatement", + "src": "6423:51:58" + } + ], + "id": 8278, + "name": "Block", + "src": "6255:230:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8239, + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies", + "value": "currency" + }, + "id": 8279, + "name": "Identifier", + "src": "6495:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "WETH", + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8052, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Currencies)", + "value": "Currencies" + }, + "id": 8280, + "name": "Identifier", + "src": "6507:10:58" + } + ], + "id": 8281, + "name": "MemberAccess", + "src": "6507:15:58" + } + ], + "id": 8282, + "name": "BinaryOperation", + "src": "6495:27:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "tuple()" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "tuple(bool,uint256,uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8246, + "type": "bool", + "value": "success" + }, + "id": 8283, + "name": "Identifier", + "src": "6539:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8249, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 8284, + "name": "Identifier", + "src": "6548:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8252, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 8285, + "name": "Identifier", + "src": "6564:15:58" + } + ], + "id": 8286, + "name": "TupleExpression", + "src": "6538:42:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9624, + "type": "function (struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory,bool) returns (bool,uint256,uint256)", + "value": "purchaseWETH" + }, + "id": 8287, + "name": "Identifier", + "src": "6583:12:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8205, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8288, + "name": "Identifier", + "src": "6596:15:58" + }, + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 8289, + "name": "Literal", + "src": "6613:5:58" + } + ], + "id": 8290, + "name": "FunctionCall", + "src": "6583:36:58" + } + ], + "id": 8291, + "name": "Assignment", + "src": "6538:81:58" + } + ], + "id": 8292, + "name": "ExpressionStatement", + "src": "6538:81:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9681, + "type": "function (uint256,address)", + "value": "transferFeeWETH" + }, + "id": 8293, + "name": "Identifier", + "src": "6633:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8249, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 8294, + "name": "Identifier", + "src": "6649:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8207, + "type": "address", + "value": "feeRecipientFirst" + }, + "id": 8295, + "name": "Identifier", + "src": "6665:17:58" + } + ], + "id": 8296, + "name": "FunctionCall", + "src": "6633:50:58" + } + ], + "id": 8297, + "name": "ExpressionStatement", + "src": "6633:50:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9681, + "type": "function (uint256,address)", + "value": "transferFeeWETH" + }, + "id": 8298, + "name": "Identifier", + "src": "6697:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8252, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 8299, + "name": "Identifier", + "src": "6713:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8209, + "type": "address", + "value": "feeRecipientSecond" + }, + "id": 8300, + "name": "Identifier", + "src": "6730:18:58" + } + ], + "id": 8301, + "name": "FunctionCall", + "src": "6697:52:58" + } + ], + "id": 8302, + "name": "ExpressionStatement", + "src": "6697:52:58" + } + ], + "id": 8303, + "name": "Block", + "src": "6524:236:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090", + "typeString": "literal_string \"Unknown purchase currency\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 8304, + "name": "Identifier", + "src": "6780:6:58" + }, + { + "attributes": { + "hexvalue": "556e6b6e6f776e2070757263686173652063757272656e6379", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Unknown purchase currency\"", + "value": "Unknown purchase currency" + }, + "id": 8305, + "name": "Literal", + "src": "6787:27:58" + } + ], + "id": 8306, + "name": "FunctionCall", + "src": "6780:35:58" + } + ], + "id": 8307, + "name": "ExpressionStatement", + "src": "6780:35:58" + } + ], + "id": 8308, + "name": "Block", + "src": "6766:60:58" + } + ], + "id": 8309, + "name": "IfStatement", + "src": "6491:335:58" + } + ], + "id": 8310, + "name": "IfStatement", + "src": "6223:603:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8028, + "type": "function (bool)", + "value": "Execution" + }, + "id": 8311, + "name": "Identifier", + "src": "6841:9:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8246, + "type": "bool", + "value": "success" + }, + "id": 8312, + "name": "Identifier", + "src": "6851:7:58" + } + ], + "id": 8313, + "name": "FunctionCall", + "src": "6841:18:58" + } + ], + "id": 8314, + "name": "EmitStatement", + "src": "6836:23:58" + }, + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9708, + "type": "function ()", + "value": "transferChange" + }, + "id": 8315, + "name": "Identifier", + "src": "6900:14:58" + } + ], + "id": 8316, + "name": "FunctionCall", + "src": "6900:16:58" + } + ], + "id": 8317, + "name": "ExpressionStatement", + "src": "6900:16:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8215, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 8318, + "name": "Identifier", + "src": "6961:16:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8319, + "name": "Literal", + "src": "6980:1:58" + } + ], + "id": 8320, + "name": "BinaryOperation", + "src": "6961:20:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9739, + "type": "function ()", + "value": "transferChangeWETH" + }, + "id": 8321, + "name": "Identifier", + "src": "6997:18:58" + } + ], + "id": 8322, + "name": "FunctionCall", + "src": "6997:20:58" + } + ], + "id": 8323, + "name": "ExpressionStatement", + "src": "6997:20:58" + } + ], + "id": 8324, + "name": "Block", + "src": "6983:45:58" + } + ], + "id": 8325, + "name": "IfStatement", + "src": "6957:71:58" + } + ], + "id": 8326, + "name": "Block", + "src": "5735:1299:58" + } + ], + "id": 8327, + "name": "FunctionDefinition", + "src": "5555:1479:58" + }, + { + "attributes": { + "functionSelector": "b94ee332", + "implemented": true, + "isConstructor": false, + "kind": "function", + "name": "bulkPurchase", + "scope": 10382, + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "attributes": { + "text": "@notice executes an array of purchases\n@param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n@param feeRecipientFirst - address of the first fee recipient\n@param feeRecipientSecond - address of the second fee recipient\n@param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch" + }, + "id": 8328, + "name": "StructuredDocumentation", + "src": "7040:448:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "purchaseDetails", + "scope": 8554, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails[]" + }, + "children": [ + { + "attributes": { + "name": "PurchaseDetails", + "referencedDeclaration": 8061, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + }, + "id": 8329, + "name": "UserDefinedTypeName", + "src": "7525:15:58" + } + ], + "id": 8330, + "name": "ArrayTypeName", + "src": "7525:17:58" + } + ], + "id": 8331, + "name": "VariableDeclaration", + "src": "7525:40:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeRecipientFirst", + "scope": 8554, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8332, + "name": "ElementaryTypeName", + "src": "7575:7:58" + } + ], + "id": 8333, + "name": "VariableDeclaration", + "src": "7575:25:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeRecipientSecond", + "scope": 8554, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8334, + "name": "ElementaryTypeName", + "src": "7610:7:58" + } + ], + "id": 8335, + "name": "VariableDeclaration", + "src": "7610:26:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "allowFail", + "scope": 8554, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 8336, + "name": "ElementaryTypeName", + "src": "7646:4:58" + } + ], + "id": 8337, + "name": "VariableDeclaration", + "src": "7646:14:58" + } + ], + "id": 8338, + "name": "ParameterList", + "src": "7515:151:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 8341, + "name": "ParameterList", + "src": "7698:0:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1710, + "type": "modifier ()", + "value": "whenNotPaused" + }, + "id": 8339, + "name": "Identifier", + "src": "7684:13:58" + } + ], + "id": 8340, + "name": "ModifierInvocation", + "src": "7684:13:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8343 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "sumFirstFeesETH", + "scope": 8553, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8342, + "name": "ElementaryTypeName", + "src": "7708:7:58" + } + ], + "id": 8343, + "name": "VariableDeclaration", + "src": "7708:23:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8344, + "name": "Literal", + "src": "7734:1:58" + } + ], + "id": 8345, + "name": "VariableDeclarationStatement", + "src": "7708:27:58" + }, + { + "attributes": { + "assignments": [ + 8347 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "sumSecondFeesETH", + "scope": 8553, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8346, + "name": "ElementaryTypeName", + "src": "7745:7:58" + } + ], + "id": 8347, + "name": "VariableDeclaration", + "src": "7745:24:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8348, + "name": "Literal", + "src": "7772:1:58" + } + ], + "id": 8349, + "name": "VariableDeclarationStatement", + "src": "7745:28:58" + }, + { + "attributes": { + "assignments": [ + 8351 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "sumFirstFeesWETH", + "scope": 8553, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8350, + "name": "ElementaryTypeName", + "src": "7783:7:58" + } + ], + "id": 8351, + "name": "VariableDeclaration", + "src": "7783:24:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8352, + "name": "Literal", + "src": "7810:1:58" + } + ], + "id": 8353, + "name": "VariableDeclarationStatement", + "src": "7783:28:58" + }, + { + "attributes": { + "assignments": [ + 8355 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "sumSecondFeesWETH", + "scope": 8553, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8354, + "name": "ElementaryTypeName", + "src": "7821:7:58" + } + ], + "id": 8355, + "name": "VariableDeclaration", + "src": "7821:25:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8356, + "name": "Literal", + "src": "7849:1:58" + } + ], + "id": 8357, + "name": "VariableDeclarationStatement", + "src": "7821:29:58" + }, + { + "attributes": { + "assignments": [ + 8359 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "result", + "scope": 8553, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 8358, + "name": "ElementaryTypeName", + "src": "7860:4:58" + } + ], + "id": 8359, + "name": "VariableDeclaration", + "src": "7860:11:58" + }, + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 8360, + "name": "Literal", + "src": "7874:5:58" + } + ], + "id": 8361, + "name": "VariableDeclarationStatement", + "src": "7860:19:58" + }, + { + "attributes": { + "assignments": [ + 8363 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "wethAmountNeeded", + "scope": 8553, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8362, + "name": "ElementaryTypeName", + "src": "7937:7:58" + } + ], + "id": 8363, + "name": "VariableDeclaration", + "src": "7937:24:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8364, + "name": "Literal", + "src": "7964:1:58" + } + ], + "id": 8365, + "name": "VariableDeclarationStatement", + "src": "7937:28:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8367 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 8388, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8366, + "name": "ElementaryTypeName", + "src": "7980:7:58" + } + ], + "id": 8367, + "name": "VariableDeclaration", + "src": "7980:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8368, + "name": "Literal", + "src": "7992:1:58" + } + ], + "id": 8369, + "name": "VariableDeclarationStatement", + "src": "7980:13:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8367, + "type": "uint256", + "value": "i" + }, + "id": 8370, + "name": "Identifier", + "src": "7995:1:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8331, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory[] memory", + "value": "purchaseDetails" + }, + "id": 8371, + "name": "Identifier", + "src": "7999:15:58" + } + ], + "id": 8372, + "name": "MemberAccess", + "src": "7999:22:58" + } + ], + "id": 8373, + "name": "BinaryOperation", + "src": "7995:26:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8367, + "type": "uint256", + "value": "i" + }, + "id": 8374, + "name": "Identifier", + "src": "8025:1:58" + } + ], + "id": 8375, + "name": "UnaryOperation", + "src": "8023:3:58" + } + ], + "id": 8376, + "name": "ExpressionStatement", + "src": "8023:3:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8363, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 8377, + "name": "Identifier", + "src": "8042:16:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8363, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 8378, + "name": "Identifier", + "src": "8061:16:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10199, + "type": "function (struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory) pure returns (uint256)", + "value": "getAmountOfWethForPurchase" + }, + "id": 8379, + "name": "Identifier", + "src": "8080:26:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8331, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory[] memory", + "value": "purchaseDetails" + }, + "id": 8380, + "name": "Identifier", + "src": "8107:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8367, + "type": "uint256", + "value": "i" + }, + "id": 8381, + "name": "Identifier", + "src": "8123:1:58" + } + ], + "id": 8382, + "name": "IndexAccess", + "src": "8107:18:58" + } + ], + "id": 8383, + "name": "FunctionCall", + "src": "8080:46:58" + } + ], + "id": 8384, + "name": "BinaryOperation", + "src": "8061:65:58" + } + ], + "id": 8385, + "name": "Assignment", + "src": "8042:84:58" + } + ], + "id": 8386, + "name": "ExpressionStatement", + "src": "8042:84:58" + } + ], + "id": 8387, + "name": "Block", + "src": "8028:109:58" + } + ], + "id": 8388, + "name": "ForStatement", + "src": "7975:162:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8363, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 8389, + "name": "Identifier", + "src": "8204:16:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8390, + "name": "Literal", + "src": "8223:1:58" + } + ], + "id": 8391, + "name": "BinaryOperation", + "src": "8204:20:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transferFrom", + "referencedDeclaration": 1154, + "type": "function (address,address,uint256) external returns (bool)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 8392, + "name": "Identifier", + "src": "8240:17:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8017, + "type": "address", + "value": "weth" + }, + "id": 8393, + "name": "Identifier", + "src": "8258:4:58" + } + ], + "id": 8394, + "name": "FunctionCall", + "src": "8240:23:58" + } + ], + "id": 8395, + "name": "MemberAccess", + "src": "8240:36:58" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 8396, + "name": "Identifier", + "src": "8277:10:58" + } + ], + "id": 8397, + "name": "FunctionCall", + "src": "8277:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 8398, + "name": "ElementaryTypeName", + "src": "8291:7:58" + } + ], + "id": 8399, + "name": "ElementaryTypeNameExpression", + "src": "8291:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeable", + "value": "this" + }, + "id": 8400, + "name": "Identifier", + "src": "8299:4:58" + } + ], + "id": 8401, + "name": "FunctionCall", + "src": "8291:13:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8363, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 8402, + "name": "Identifier", + "src": "8306:16:58" + } + ], + "id": 8403, + "name": "FunctionCall", + "src": "8240:83:58" + } + ], + "id": 8404, + "name": "ExpressionStatement", + "src": "8240:83:58" + } + ], + "id": 8405, + "name": "Block", + "src": "8226:108:58" + } + ], + "id": 8406, + "name": "IfStatement", + "src": "8200:134:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8408 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 8516, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8407, + "name": "ElementaryTypeName", + "src": "8349:7:58" + } + ], + "id": 8408, + "name": "VariableDeclaration", + "src": "8349:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8409, + "name": "Literal", + "src": "8361:1:58" + } + ], + "id": 8410, + "name": "VariableDeclarationStatement", + "src": "8349:13:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8408, + "type": "uint256", + "value": "i" + }, + "id": 8411, + "name": "Identifier", + "src": "8364:1:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8331, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory[] memory", + "value": "purchaseDetails" + }, + "id": 8412, + "name": "Identifier", + "src": "8368:15:58" + } + ], + "id": 8413, + "name": "MemberAccess", + "src": "8368:22:58" + } + ], + "id": 8414, + "name": "BinaryOperation", + "src": "8364:26:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8408, + "type": "uint256", + "value": "i" + }, + "id": 8415, + "name": "Identifier", + "src": "8394:1:58" + } + ], + "id": 8416, + "name": "UnaryOperation", + "src": "8392:3:58" + } + ], + "id": 8417, + "name": "ExpressionStatement", + "src": "8392:3:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8419 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "currency", + "scope": 8515, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Currencies", + "referencedDeclaration": 8052, + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "id": 8418, + "name": "UserDefinedTypeName", + "src": "8411:10:58" + } + ], + "id": 8419, + "name": "VariableDeclaration", + "src": "8411:19:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9802, + "type": "function (uint256) pure returns (enum RaribleExchangeWrapperUpgradeable.Currencies)", + "value": "getCurrency" + }, + "id": 8420, + "name": "Identifier", + "src": "8433:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8058, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8331, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory[] memory", + "value": "purchaseDetails" + }, + "id": 8421, + "name": "Identifier", + "src": "8445:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8408, + "type": "uint256", + "value": "i" + }, + "id": 8422, + "name": "Identifier", + "src": "8461:1:58" + } + ], + "id": 8423, + "name": "IndexAccess", + "src": "8445:18:58" + } + ], + "id": 8424, + "name": "MemberAccess", + "src": "8445:23:58" + } + ], + "id": 8425, + "name": "FunctionCall", + "src": "8433:36:58" + } + ], + "id": 8426, + "name": "VariableDeclarationStatement", + "src": "8411:58:58" + }, + { + "attributes": { + "assignments": [ + 8428 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 8515, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 8427, + "name": "ElementaryTypeName", + "src": "8483:4:58" + } + ], + "id": 8428, + "name": "VariableDeclaration", + "src": "8483:12:58" + } + ], + "id": 8429, + "name": "VariableDeclarationStatement", + "src": "8483:12:58" + }, + { + "attributes": { + "assignments": [ + 8431 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "firstFeeAmount", + "scope": 8515, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8430, + "name": "ElementaryTypeName", + "src": "8509:7:58" + } + ], + "id": 8431, + "name": "VariableDeclaration", + "src": "8509:22:58" + } + ], + "id": 8432, + "name": "VariableDeclarationStatement", + "src": "8509:22:58" + }, + { + "attributes": { + "assignments": [ + 8434 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "secondFeeAmount", + "scope": 8515, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8433, + "name": "ElementaryTypeName", + "src": "8545:7:58" + } + ], + "id": 8434, + "name": "VariableDeclaration", + "src": "8545:23:58" + } + ], + "id": 8435, + "name": "VariableDeclarationStatement", + "src": "8545:23:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8419, + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies", + "value": "currency" + }, + "id": 8436, + "name": "Identifier", + "src": "8587:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "ETH", + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8052, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Currencies)", + "value": "Currencies" + }, + "id": 8437, + "name": "Identifier", + "src": "8599:10:58" + } + ], + "id": 8438, + "name": "MemberAccess", + "src": "8599:14:58" + } + ], + "id": 8439, + "name": "BinaryOperation", + "src": "8587:26:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "tuple()" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "tuple(bool,uint256,uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8428, + "type": "bool", + "value": "success" + }, + "id": 8440, + "name": "Identifier", + "src": "8634:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8431, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 8441, + "name": "Identifier", + "src": "8643:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8434, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 8442, + "name": "Identifier", + "src": "8659:15:58" + } + ], + "id": 8443, + "name": "TupleExpression", + "src": "8633:42:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9393, + "type": "function (struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory,bool) returns (bool,uint256,uint256)", + "value": "purchase" + }, + "id": 8444, + "name": "Identifier", + "src": "8678:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8331, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory[] memory", + "value": "purchaseDetails" + }, + "id": 8445, + "name": "Identifier", + "src": "8687:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8408, + "type": "uint256", + "value": "i" + }, + "id": 8446, + "name": "Identifier", + "src": "8703:1:58" + } + ], + "id": 8447, + "name": "IndexAccess", + "src": "8687:18:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8337, + "type": "bool", + "value": "allowFail" + }, + "id": 8448, + "name": "Identifier", + "src": "8707:9:58" + } + ], + "id": 8449, + "name": "FunctionCall", + "src": "8678:39:58" + } + ], + "id": 8450, + "name": "Assignment", + "src": "8633:84:58" + } + ], + "id": 8451, + "name": "ExpressionStatement", + "src": "8633:84:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8343, + "type": "uint256", + "value": "sumFirstFeesETH" + }, + "id": 8452, + "name": "Identifier", + "src": "8736:15:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "add", + "referencedDeclaration": 559, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8343, + "type": "uint256", + "value": "sumFirstFeesETH" + }, + "id": 8453, + "name": "Identifier", + "src": "8754:15:58" + } + ], + "id": 8454, + "name": "MemberAccess", + "src": "8754:19:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8431, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 8455, + "name": "Identifier", + "src": "8774:14:58" + } + ], + "id": 8456, + "name": "FunctionCall", + "src": "8754:35:58" + } + ], + "id": 8457, + "name": "Assignment", + "src": "8736:53:58" + } + ], + "id": 8458, + "name": "ExpressionStatement", + "src": "8736:53:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8347, + "type": "uint256", + "value": "sumSecondFeesETH" + }, + "id": 8459, + "name": "Identifier", + "src": "8807:16:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "add", + "referencedDeclaration": 559, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8347, + "type": "uint256", + "value": "sumSecondFeesETH" + }, + "id": 8460, + "name": "Identifier", + "src": "8826:16:58" + } + ], + "id": 8461, + "name": "MemberAccess", + "src": "8826:20:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8434, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 8462, + "name": "Identifier", + "src": "8847:15:58" + } + ], + "id": 8463, + "name": "FunctionCall", + "src": "8826:37:58" + } + ], + "id": 8464, + "name": "Assignment", + "src": "8807:56:58" + } + ], + "id": 8465, + "name": "ExpressionStatement", + "src": "8807:56:58" + } + ], + "id": 8466, + "name": "Block", + "src": "8615:263:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8419, + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies", + "value": "currency" + }, + "id": 8467, + "name": "Identifier", + "src": "8888:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "WETH", + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8052, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Currencies)", + "value": "Currencies" + }, + "id": 8468, + "name": "Identifier", + "src": "8900:10:58" + } + ], + "id": 8469, + "name": "MemberAccess", + "src": "8900:15:58" + } + ], + "id": 8470, + "name": "BinaryOperation", + "src": "8888:27:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "tuple()" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "tuple(bool,uint256,uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8428, + "type": "bool", + "value": "success" + }, + "id": 8471, + "name": "Identifier", + "src": "8936:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8431, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 8472, + "name": "Identifier", + "src": "8945:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8434, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 8473, + "name": "Identifier", + "src": "8961:15:58" + } + ], + "id": 8474, + "name": "TupleExpression", + "src": "8935:42:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8061_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9624, + "type": "function (struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory,bool) returns (bool,uint256,uint256)", + "value": "purchaseWETH" + }, + "id": 8475, + "name": "Identifier", + "src": "8980:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8331, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory[] memory", + "value": "purchaseDetails" + }, + "id": 8476, + "name": "Identifier", + "src": "8993:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8408, + "type": "uint256", + "value": "i" + }, + "id": 8477, + "name": "Identifier", + "src": "9009:1:58" + } + ], + "id": 8478, + "name": "IndexAccess", + "src": "8993:18:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8337, + "type": "bool", + "value": "allowFail" + }, + "id": 8479, + "name": "Identifier", + "src": "9013:9:58" + } + ], + "id": 8480, + "name": "FunctionCall", + "src": "8980:43:58" + } + ], + "id": 8481, + "name": "Assignment", + "src": "8935:88:58" + } + ], + "id": 8482, + "name": "ExpressionStatement", + "src": "8935:88:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8351, + "type": "uint256", + "value": "sumFirstFeesWETH" + }, + "id": 8483, + "name": "Identifier", + "src": "9042:16:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "add", + "referencedDeclaration": 559, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8351, + "type": "uint256", + "value": "sumFirstFeesWETH" + }, + "id": 8484, + "name": "Identifier", + "src": "9061:16:58" + } + ], + "id": 8485, + "name": "MemberAccess", + "src": "9061:20:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8431, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 8486, + "name": "Identifier", + "src": "9082:14:58" + } + ], + "id": 8487, + "name": "FunctionCall", + "src": "9061:36:58" + } + ], + "id": 8488, + "name": "Assignment", + "src": "9042:55:58" + } + ], + "id": 8489, + "name": "ExpressionStatement", + "src": "9042:55:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8355, + "type": "uint256", + "value": "sumSecondFeesWETH" + }, + "id": 8490, + "name": "Identifier", + "src": "9115:17:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "add", + "referencedDeclaration": 559, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8355, + "type": "uint256", + "value": "sumSecondFeesWETH" + }, + "id": 8491, + "name": "Identifier", + "src": "9135:17:58" + } + ], + "id": 8492, + "name": "MemberAccess", + "src": "9135:21:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8434, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 8493, + "name": "Identifier", + "src": "9157:15:58" + } + ], + "id": 8494, + "name": "FunctionCall", + "src": "9135:38:58" + } + ], + "id": 8495, + "name": "Assignment", + "src": "9115:58:58" + } + ], + "id": 8496, + "name": "ExpressionStatement", + "src": "9115:58:58" + } + ], + "id": 8497, + "name": "Block", + "src": "8917:271:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090", + "typeString": "literal_string \"Unknown purchase currency\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 8498, + "name": "Identifier", + "src": "9212:6:58" + }, + { + "attributes": { + "hexvalue": "556e6b6e6f776e2070757263686173652063757272656e6379", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Unknown purchase currency\"", + "value": "Unknown purchase currency" + }, + "id": 8499, + "name": "Literal", + "src": "9219:27:58" + } + ], + "id": 8500, + "name": "FunctionCall", + "src": "9212:35:58" + } + ], + "id": 8501, + "name": "ExpressionStatement", + "src": "9212:35:58" + } + ], + "id": 8502, + "name": "Block", + "src": "9194:68:58" + } + ], + "id": 8503, + "name": "IfStatement", + "src": "8884:378:58" + } + ], + "id": 8504, + "name": "IfStatement", + "src": "8583:679:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8359, + "type": "bool", + "value": "result" + }, + "id": 8505, + "name": "Identifier", + "src": "9276:6:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "||", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8359, + "type": "bool", + "value": "result" + }, + "id": 8506, + "name": "Identifier", + "src": "9285:6:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8428, + "type": "bool", + "value": "success" + }, + "id": 8507, + "name": "Identifier", + "src": "9295:7:58" + } + ], + "id": 8508, + "name": "BinaryOperation", + "src": "9285:17:58" + } + ], + "id": 8509, + "name": "Assignment", + "src": "9276:26:58" + } + ], + "id": 8510, + "name": "ExpressionStatement", + "src": "9276:26:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8028, + "type": "function (bool)", + "value": "Execution" + }, + "id": 8511, + "name": "Identifier", + "src": "9321:9:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8428, + "type": "bool", + "value": "success" + }, + "id": 8512, + "name": "Identifier", + "src": "9331:7:58" + } + ], + "id": 8513, + "name": "FunctionCall", + "src": "9321:18:58" + } + ], + "id": 8514, + "name": "EmitStatement", + "src": "9316:23:58" + } + ], + "id": 8515, + "name": "Block", + "src": "8397:953:58" + } + ], + "id": 8516, + "name": "ForStatement", + "src": "8344:1006:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ec72e63c53a628868607248de6752f6e953ad035609908ced114156f1eeff564", + "typeString": "literal_string \"no successful executions\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 8517, + "name": "Identifier", + "src": "9360:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8359, + "type": "bool", + "value": "result" + }, + "id": 8518, + "name": "Identifier", + "src": "9368:6:58" + }, + { + "attributes": { + "hexvalue": "6e6f207375636365737366756c20657865637574696f6e73", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"no successful executions\"", + "value": "no successful executions" + }, + "id": 8519, + "name": "Literal", + "src": "9376:26:58" + } + ], + "id": 8520, + "name": "FunctionCall", + "src": "9360:43:58" + } + ], + "id": 8521, + "name": "ExpressionStatement", + "src": "9360:43:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9652, + "type": "function (uint256,address)", + "value": "transferFeeETH" + }, + "id": 8522, + "name": "Identifier", + "src": "9440:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8343, + "type": "uint256", + "value": "sumFirstFeesETH" + }, + "id": 8523, + "name": "Identifier", + "src": "9455:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8333, + "type": "address", + "value": "feeRecipientFirst" + }, + "id": 8524, + "name": "Identifier", + "src": "9472:17:58" + } + ], + "id": 8525, + "name": "FunctionCall", + "src": "9440:50:58" + } + ], + "id": 8526, + "name": "ExpressionStatement", + "src": "9440:50:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9652, + "type": "function (uint256,address)", + "value": "transferFeeETH" + }, + "id": 8527, + "name": "Identifier", + "src": "9500:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8347, + "type": "uint256", + "value": "sumSecondFeesETH" + }, + "id": 8528, + "name": "Identifier", + "src": "9515:16:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8335, + "type": "address", + "value": "feeRecipientSecond" + }, + "id": 8529, + "name": "Identifier", + "src": "9533:18:58" + } + ], + "id": 8530, + "name": "FunctionCall", + "src": "9500:52:58" + } + ], + "id": 8531, + "name": "ExpressionStatement", + "src": "9500:52:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9681, + "type": "function (uint256,address)", + "value": "transferFeeWETH" + }, + "id": 8532, + "name": "Identifier", + "src": "9590:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8351, + "type": "uint256", + "value": "sumFirstFeesWETH" + }, + "id": 8533, + "name": "Identifier", + "src": "9606:16:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8333, + "type": "address", + "value": "feeRecipientFirst" + }, + "id": 8534, + "name": "Identifier", + "src": "9624:17:58" + } + ], + "id": 8535, + "name": "FunctionCall", + "src": "9590:52:58" + } + ], + "id": 8536, + "name": "ExpressionStatement", + "src": "9590:52:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9681, + "type": "function (uint256,address)", + "value": "transferFeeWETH" + }, + "id": 8537, + "name": "Identifier", + "src": "9652:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8355, + "type": "uint256", + "value": "sumSecondFeesWETH" + }, + "id": 8538, + "name": "Identifier", + "src": "9668:17:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8335, + "type": "address", + "value": "feeRecipientSecond" + }, + "id": 8539, + "name": "Identifier", + "src": "9687:18:58" + } + ], + "id": 8540, + "name": "FunctionCall", + "src": "9652:54:58" + } + ], + "id": 8541, + "name": "ExpressionStatement", + "src": "9652:54:58" + }, + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9708, + "type": "function ()", + "value": "transferChange" + }, + "id": 8542, + "name": "Identifier", + "src": "9747:14:58" + } + ], + "id": 8543, + "name": "FunctionCall", + "src": "9747:16:58" + } + ], + "id": 8544, + "name": "ExpressionStatement", + "src": "9747:16:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8363, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 8545, + "name": "Identifier", + "src": "9808:16:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8546, + "name": "Literal", + "src": "9827:1:58" + } + ], + "id": 8547, + "name": "BinaryOperation", + "src": "9808:20:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9739, + "type": "function ()", + "value": "transferChangeWETH" + }, + "id": 8548, + "name": "Identifier", + "src": "9844:18:58" + } + ], + "id": 8549, + "name": "FunctionCall", + "src": "9844:20:58" + } + ], + "id": 8550, + "name": "ExpressionStatement", + "src": "9844:20:58" + } + ], + "id": 8551, + "name": "Block", + "src": "9830:45:58" + } + ], + "id": 8552, + "name": "IfStatement", + "src": "9804:71:58" + } + ], + "id": 8553, + "name": "Block", + "src": "7698:2183:58" + } + ], + "id": 8554, + "name": "FunctionDefinition", + "src": "7494:2387:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "purchase", + "scope": 10382, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice executes one purchase in ETH\n@param purchaseDetails - details about the purchase\n@param allowFail - true if errors are handled, false if revert on errors\n@return result false if execution failed, true if succeded\n@return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n@return secondFeeAmount amount of the second fee of the purchase, 0 if failed" + }, + "id": 8555, + "name": "StructuredDocumentation", + "src": "9887:434:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "purchaseDetails", + "scope": 9393, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "PurchaseDetails", + "referencedDeclaration": 8061, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + }, + "id": 8556, + "name": "UserDefinedTypeName", + "src": "10344:15:58" + } + ], + "id": 8557, + "name": "VariableDeclaration", + "src": "10344:38:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "allowFail", + "scope": 9393, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 8558, + "name": "ElementaryTypeName", + "src": "10384:4:58" + } + ], + "id": 8559, + "name": "VariableDeclaration", + "src": "10384:14:58" + } + ], + "id": 8560, + "name": "ParameterList", + "src": "10343:56:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 9393, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 8561, + "name": "ElementaryTypeName", + "src": "10447:4:58" + } + ], + "id": 8562, + "name": "VariableDeclaration", + "src": "10447:4:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 9393, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8563, + "name": "ElementaryTypeName", + "src": "10465:7:58" + } + ], + "id": 8564, + "name": "VariableDeclaration", + "src": "10465:7:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 9393, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8565, + "name": "ElementaryTypeName", + "src": "10486:7:58" + } + ], + "id": 8566, + "name": "VariableDeclaration", + "src": "10486:7:58" + } + ], + "id": 8567, + "name": "ParameterList", + "src": "10433:70:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8569, + 8572 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "marketData", + "scope": 9392, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 8568, + "name": "ElementaryTypeName", + "src": "10519:5:58" + } + ], + "id": 8569, + "name": "VariableDeclaration", + "src": "10519:23:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "additionalRoyalties", + "scope": 9392, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8570, + "name": "ElementaryTypeName", + "src": "10544:7:58" + } + ], + "id": 8571, + "name": "ArrayTypeName", + "src": "10544:9:58" + } + ], + "id": 8572, + "name": "VariableDeclaration", + "src": "10544:36:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bytes memory,uint256[] memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9881, + "type": "function (bytes memory,uint256,enum RaribleExchangeWrapperUpgradeable.Markets) pure returns (bytes memory,uint256[] memory)", + "value": "getDataAndAdditionalData" + }, + "id": 8573, + "name": "Identifier", + "src": "10584:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "data", + "referencedDeclaration": 8060, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8574, + "name": "Identifier", + "src": "10609:15:58" + } + ], + "id": 8575, + "name": "MemberAccess", + "src": "10609:20:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8058, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8576, + "name": "Identifier", + "src": "10631:15:58" + } + ], + "id": 8577, + "name": "MemberAccess", + "src": "10631:20:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8578, + "name": "Identifier", + "src": "10653:15:58" + } + ], + "id": 8579, + "name": "MemberAccess", + "src": "10653:24:58" + } + ], + "id": 8580, + "name": "FunctionCall", + "src": "10584:94:58" + } + ], + "id": 8581, + "name": "VariableDeclarationStatement", + "src": "10518:160:58" + }, + { + "attributes": { + "assignments": [ + 8583 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "paymentAmount", + "scope": 9392, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8582, + "name": "ElementaryTypeName", + "src": "10688:7:58" + } + ], + "id": 8583, + "name": "VariableDeclaration", + "src": "10688:21:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8056, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8584, + "name": "Identifier", + "src": "10712:15:58" + } + ], + "id": 8585, + "name": "MemberAccess", + "src": "10712:22:58" + } + ], + "id": 8586, + "name": "VariableDeclarationStatement", + "src": "10688:46:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8587, + "name": "Identifier", + "src": "10748:15:58" + } + ], + "id": 8588, + "name": "MemberAccess", + "src": "10748:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_1", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 8589, + "name": "Identifier", + "src": "10776:7:58" + } + ], + "id": 8590, + "name": "MemberAccess", + "src": "10776:19:58" + } + ], + "id": 8591, + "name": "BinaryOperation", + "src": "10748:47:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8593, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 8622, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 8592, + "name": "ElementaryTypeName", + "src": "10812:4:58" + } + ], + "id": 8593, + "name": "VariableDeclaration", + "src": "10812:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 8594, + "name": "ElementaryTypeName", + "src": "10830:7:58" + } + ], + "id": 8595, + "name": "ElementaryTypeNameExpression", + "src": "10830:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 7999, + "type": "address", + "value": "seaPort_1_1" + }, + "id": 8596, + "name": "Identifier", + "src": "10838:11:58" + } + ], + "id": 8597, + "name": "FunctionCall", + "src": "10830:20:58" + } + ], + "id": 8598, + "name": "MemberAccess", + "src": "10830:25:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 8599, + "name": "Identifier", + "src": "10863:13:58" + } + ], + "id": 8600, + "name": "FunctionCallOptions", + "src": "10830:47:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8569, + "type": "bytes memory", + "value": "marketData" + }, + "id": 8601, + "name": "Identifier", + "src": "10878:10:58" + } + ], + "id": 8602, + "name": "FunctionCall", + "src": "10830:59:58" + } + ], + "id": 8603, + "name": "VariableDeclarationStatement", + "src": "10811:78:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8559, + "type": "bool", + "value": "allowFail" + }, + "id": 8604, + "name": "Identifier", + "src": "10907:9:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8593, + "type": "bool", + "value": "success" + }, + "id": 8605, + "name": "Identifier", + "src": "10941:7:58" + } + ], + "id": 8606, + "name": "UnaryOperation", + "src": "10940:8:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 8567 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 8607, + "name": "Literal", + "src": "10980:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8608, + "name": "Literal", + "src": "10987:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8609, + "name": "Literal", + "src": "10990:1:58" + } + ], + "id": 8610, + "name": "TupleExpression", + "src": "10979:13:58" + } + ], + "id": 8611, + "name": "Return", + "src": "10972:20:58" + } + ], + "id": 8612, + "name": "Block", + "src": "10950:61:58" + } + ], + "id": 8613, + "name": "IfStatement", + "src": "10936:75:58" + } + ], + "id": 8614, + "name": "Block", + "src": "10918:107:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_74739c97d81f6776122daced63f78d93149e498efd7fbf2084eabb7018fcdc3b", + "typeString": "literal_string \"Purchase SeaPort_1_1 failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 8615, + "name": "Identifier", + "src": "11049:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8593, + "type": "bool", + "value": "success" + }, + "id": 8616, + "name": "Identifier", + "src": "11057:7:58" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f31206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_1 failed\"", + "value": "Purchase SeaPort_1_1 failed" + }, + "id": 8617, + "name": "Literal", + "src": "11066:29:58" + } + ], + "id": 8618, + "name": "FunctionCall", + "src": "11049:47:58" + } + ], + "id": 8619, + "name": "ExpressionStatement", + "src": "11049:47:58" + } + ], + "id": 8620, + "name": "Block", + "src": "11031:80:58" + } + ], + "id": 8621, + "name": "IfStatement", + "src": "10903:208:58" + } + ], + "id": 8622, + "name": "Block", + "src": "10797:324:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8623, + "name": "Identifier", + "src": "11131:15:58" + } + ], + "id": 8624, + "name": "MemberAccess", + "src": "11131:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "WyvernExchange", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 8625, + "name": "Identifier", + "src": "11159:7:58" + } + ], + "id": 8626, + "name": "MemberAccess", + "src": "11159:22:58" + } + ], + "id": 8627, + "name": "BinaryOperation", + "src": "11131:50:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8629, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 8658, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 8628, + "name": "ElementaryTypeName", + "src": "11198:4:58" + } + ], + "id": 8629, + "name": "VariableDeclaration", + "src": "11198:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 8630, + "name": "ElementaryTypeName", + "src": "11216:7:58" + } + ], + "id": 8631, + "name": "ElementaryTypeNameExpression", + "src": "11216:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 7995, + "type": "address", + "value": "wyvernExchange" + }, + "id": 8632, + "name": "Identifier", + "src": "11224:14:58" + } + ], + "id": 8633, + "name": "FunctionCall", + "src": "11216:23:58" + } + ], + "id": 8634, + "name": "MemberAccess", + "src": "11216:28:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 8635, + "name": "Identifier", + "src": "11252:13:58" + } + ], + "id": 8636, + "name": "FunctionCallOptions", + "src": "11216:50:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8569, + "type": "bytes memory", + "value": "marketData" + }, + "id": 8637, + "name": "Identifier", + "src": "11267:10:58" + } + ], + "id": 8638, + "name": "FunctionCall", + "src": "11216:62:58" + } + ], + "id": 8639, + "name": "VariableDeclarationStatement", + "src": "11197:81:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8559, + "type": "bool", + "value": "allowFail" + }, + "id": 8640, + "name": "Identifier", + "src": "11296:9:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8629, + "type": "bool", + "value": "success" + }, + "id": 8641, + "name": "Identifier", + "src": "11330:7:58" + } + ], + "id": 8642, + "name": "UnaryOperation", + "src": "11329:8:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 8567 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 8643, + "name": "Literal", + "src": "11369:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8644, + "name": "Literal", + "src": "11376:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8645, + "name": "Literal", + "src": "11379:1:58" + } + ], + "id": 8646, + "name": "TupleExpression", + "src": "11368:13:58" + } + ], + "id": 8647, + "name": "Return", + "src": "11361:20:58" + } + ], + "id": 8648, + "name": "Block", + "src": "11339:61:58" + } + ], + "id": 8649, + "name": "IfStatement", + "src": "11325:75:58" + } + ], + "id": 8650, + "name": "Block", + "src": "11307:107:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1cdf96c41f1501fb82e87942f0faf4d72a6efd57209b4dccba0c17cf2c4017c6", + "typeString": "literal_string \"Purchase wyvernExchange failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 8651, + "name": "Identifier", + "src": "11438:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8629, + "type": "bool", + "value": "success" + }, + "id": 8652, + "name": "Identifier", + "src": "11446:7:58" + }, + { + "attributes": { + "hexvalue": "50757263686173652077797665726e45786368616e6765206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase wyvernExchange failed\"", + "value": "Purchase wyvernExchange failed" + }, + "id": 8653, + "name": "Literal", + "src": "11455:32:58" + } + ], + "id": 8654, + "name": "FunctionCall", + "src": "11438:50:58" + } + ], + "id": 8655, + "name": "ExpressionStatement", + "src": "11438:50:58" + } + ], + "id": 8656, + "name": "Block", + "src": "11420:83:58" + } + ], + "id": 8657, + "name": "IfStatement", + "src": "11292:211:58" + } + ], + "id": 8658, + "name": "Block", + "src": "11183:330:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8659, + "name": "Identifier", + "src": "11523:15:58" + } + ], + "id": 8660, + "name": "MemberAccess", + "src": "11523:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "ExchangeV2", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 8661, + "name": "Identifier", + "src": "11551:7:58" + } + ], + "id": 8662, + "name": "MemberAccess", + "src": "11551:18:58" + } + ], + "id": 8663, + "name": "BinaryOperation", + "src": "11523:46:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8665, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 8694, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 8664, + "name": "ElementaryTypeName", + "src": "11586:4:58" + } + ], + "id": 8665, + "name": "VariableDeclaration", + "src": "11586:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 8666, + "name": "ElementaryTypeName", + "src": "11604:7:58" + } + ], + "id": 8667, + "name": "ElementaryTypeNameExpression", + "src": "11604:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 7997, + "type": "address", + "value": "exchangeV2" + }, + "id": 8668, + "name": "Identifier", + "src": "11612:10:58" + } + ], + "id": 8669, + "name": "FunctionCall", + "src": "11604:19:58" + } + ], + "id": 8670, + "name": "MemberAccess", + "src": "11604:24:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 8671, + "name": "Identifier", + "src": "11636:13:58" + } + ], + "id": 8672, + "name": "FunctionCallOptions", + "src": "11604:46:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8569, + "type": "bytes memory", + "value": "marketData" + }, + "id": 8673, + "name": "Identifier", + "src": "11651:10:58" + } + ], + "id": 8674, + "name": "FunctionCall", + "src": "11604:58:58" + } + ], + "id": 8675, + "name": "VariableDeclarationStatement", + "src": "11585:77:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8559, + "type": "bool", + "value": "allowFail" + }, + "id": 8676, + "name": "Identifier", + "src": "11680:9:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8665, + "type": "bool", + "value": "success" + }, + "id": 8677, + "name": "Identifier", + "src": "11714:7:58" + } + ], + "id": 8678, + "name": "UnaryOperation", + "src": "11713:8:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 8567 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 8679, + "name": "Literal", + "src": "11753:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8680, + "name": "Literal", + "src": "11760:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8681, + "name": "Literal", + "src": "11763:1:58" + } + ], + "id": 8682, + "name": "TupleExpression", + "src": "11752:13:58" + } + ], + "id": 8683, + "name": "Return", + "src": "11745:20:58" + } + ], + "id": 8684, + "name": "Block", + "src": "11723:61:58" + } + ], + "id": 8685, + "name": "IfStatement", + "src": "11709:75:58" + } + ], + "id": 8686, + "name": "Block", + "src": "11691:107:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2b352c406e176536877560097b51d8b7a1d4ebdd84181eeb9cfae44540c1b868", + "typeString": "literal_string \"Purchase rarible failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 8687, + "name": "Identifier", + "src": "11822:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8665, + "type": "bool", + "value": "success" + }, + "id": 8688, + "name": "Identifier", + "src": "11830:7:58" + }, + { + "attributes": { + "hexvalue": "50757263686173652072617269626c65206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase rarible failed\"", + "value": "Purchase rarible failed" + }, + "id": 8689, + "name": "Literal", + "src": "11839:25:58" + } + ], + "id": 8690, + "name": "FunctionCall", + "src": "11822:43:58" + } + ], + "id": 8691, + "name": "ExpressionStatement", + "src": "11822:43:58" + } + ], + "id": 8692, + "name": "Block", + "src": "11804:76:58" + } + ], + "id": 8693, + "name": "IfStatement", + "src": "11676:204:58" + } + ], + "id": 8694, + "name": "Block", + "src": "11571:319:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8695, + "name": "Identifier", + "src": "11900:15:58" + } + ], + "id": 8696, + "name": "MemberAccess", + "src": "11900:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "X2Y2", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 8697, + "name": "Identifier", + "src": "11928:7:58" + } + ], + "id": 8698, + "name": "MemberAccess", + "src": "11928:12:58" + } + ], + "id": 8699, + "name": "BinaryOperation", + "src": "11900:40:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8703 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "input", + "scope": 8950, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct Ix2y2.RunInput", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Ix2y2.RunInput", + "referencedDeclaration": 10725, + "type": "struct Ix2y2.RunInput" + }, + "id": 8702, + "name": "UserDefinedTypeName", + "src": "11956:14:58" + } + ], + "id": 8703, + "name": "VariableDeclaration", + "src": "11956:27:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "struct Ix2y2.RunInput memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_struct$_RunInput_$10725_storage_ptr_$", + "typeString": "type(struct Ix2y2.RunInput storage pointer)" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "decode", + "type": "function () pure" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 8704, + "name": "Identifier", + "src": "11986:3:58" + } + ], + "id": 8705, + "name": "MemberAccess", + "src": "11986:10:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8569, + "type": "bytes memory", + "value": "marketData" + }, + "id": 8706, + "name": "Identifier", + "src": "11997:10:58" + }, + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "type(struct Ix2y2.RunInput storage pointer)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "RunInput", + "referencedDeclaration": 10725, + "type": "type(struct Ix2y2.RunInput storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10740, + "type": "type(contract Ix2y2)", + "value": "Ix2y2" + }, + "id": 8707, + "name": "Identifier", + "src": "12010:5:58" + } + ], + "id": 8708, + "name": "MemberAccess", + "src": "12010:14:58" + } + ], + "id": 8709, + "name": "TupleExpression", + "src": "12009:16:58" + } + ], + "id": 8710, + "name": "FunctionCall", + "src": "11986:40:58" + } + ], + "id": 8711, + "name": "VariableDeclarationStatement", + "src": "11956:70:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8559, + "type": "bool", + "value": "allowFail" + }, + "id": 8712, + "name": "Identifier", + "src": "12045:9:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": true, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (struct Ix2y2.RunInput memory) payable external" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "run", + "referencedDeclaration": 10739, + "type": "function (struct Ix2y2.RunInput memory) payable external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract Ix2y2", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10740, + "type": "type(contract Ix2y2)", + "value": "Ix2y2" + }, + "id": 8713, + "name": "Identifier", + "src": "12078:5:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8001, + "type": "address", + "value": "x2y2" + }, + "id": 8714, + "name": "Identifier", + "src": "12084:4:58" + } + ], + "id": 8715, + "name": "FunctionCall", + "src": "12078:11:58" + } + ], + "id": 8716, + "name": "MemberAccess", + "src": "12078:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 8717, + "name": "Identifier", + "src": "12101:13:58" + } + ], + "id": 8718, + "name": "FunctionCallOptions", + "src": "12078:37:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8703, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 8719, + "name": "Identifier", + "src": "12116:5:58" + } + ], + "id": 8720, + "name": "FunctionCall", + "src": "12078:44:58" + }, + { + "attributes": { + "errorName": "" + }, + "children": [ + { + "attributes": { + "statements": [ + null + ] + }, + "children": [], + "id": 8721, + "name": "Block", + "src": "12123:2:58" + } + ], + "id": 8722, + "name": "TryCatchClause", + "src": "12123:2:58" + }, + { + "attributes": { + "errorName": "" + }, + "children": [ + { + "children": [ + { + "attributes": { + "functionReturnParameters": 8567 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 8723, + "name": "Literal", + "src": "12162:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8724, + "name": "Literal", + "src": "12169:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8725, + "name": "Literal", + "src": "12172:1:58" + } + ], + "id": 8726, + "name": "TupleExpression", + "src": "12161:13:58" + } + ], + "id": 8727, + "name": "Return", + "src": "12154:20:58" + } + ], + "id": 8728, + "name": "Block", + "src": "12132:61:58" + } + ], + "id": 8729, + "name": "TryCatchClause", + "src": "12126:67:58" + } + ], + "id": 8730, + "name": "TryStatement", + "src": "12074:119:58" + } + ], + "id": 8731, + "name": "Block", + "src": "12056:151:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (struct Ix2y2.RunInput memory) payable external" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$10725_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "run", + "referencedDeclaration": 10739, + "type": "function (struct Ix2y2.RunInput memory) payable external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract Ix2y2", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10740, + "type": "type(contract Ix2y2)", + "value": "Ix2y2" + }, + "id": 8732, + "name": "Identifier", + "src": "12231:5:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8001, + "type": "address", + "value": "x2y2" + }, + "id": 8733, + "name": "Identifier", + "src": "12237:4:58" + } + ], + "id": 8734, + "name": "FunctionCall", + "src": "12231:11:58" + } + ], + "id": 8735, + "name": "MemberAccess", + "src": "12231:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 8736, + "name": "Identifier", + "src": "12254:13:58" + } + ], + "id": 8737, + "name": "FunctionCallOptions", + "src": "12231:37:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8703, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 8738, + "name": "Identifier", + "src": "12269:5:58" + } + ], + "id": 8739, + "name": "FunctionCall", + "src": "12231:44:58" + } + ], + "id": 8740, + "name": "ExpressionStatement", + "src": "12231:44:58" + } + ], + "id": 8741, + "name": "Block", + "src": "12213:77:58" + } + ], + "id": 8742, + "name": "IfStatement", + "src": "12041:249:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8744 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 8949, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8743, + "name": "ElementaryTypeName", + "src": "12491:7:58" + } + ], + "id": 8744, + "name": "VariableDeclaration", + "src": "12491:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8745, + "name": "Literal", + "src": "12503:1:58" + } + ], + "id": 8746, + "name": "VariableDeclarationStatement", + "src": "12491:13:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8744, + "type": "uint256", + "value": "i" + }, + "id": 8747, + "name": "Identifier", + "src": "12506:1:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "details", + "referencedDeclaration": 10716, + "type": "struct Ix2y2.SettleDetail memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8703, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 8748, + "name": "Identifier", + "src": "12510:5:58" + } + ], + "id": 8749, + "name": "MemberAccess", + "src": "12510:13:58" + } + ], + "id": 8750, + "name": "MemberAccess", + "src": "12510:20:58" + } + ], + "id": 8751, + "name": "BinaryOperation", + "src": "12506:24:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8744, + "type": "uint256", + "value": "i" + }, + "id": 8752, + "name": "Identifier", + "src": "12534:1:58" + } + ], + "id": 8753, + "name": "UnaryOperation", + "src": "12532:3:58" + } + ], + "id": 8754, + "name": "ExpressionStatement", + "src": "12532:3:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8756 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "orderId", + "scope": 8948, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8755, + "name": "ElementaryTypeName", + "src": "12555:7:58" + } + ], + "id": 8756, + "name": "VariableDeclaration", + "src": "12555:15:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "orderIdx", + "referencedDeclaration": 10677, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.SettleDetail memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "details", + "referencedDeclaration": 10716, + "type": "struct Ix2y2.SettleDetail memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8703, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 8757, + "name": "Identifier", + "src": "12573:5:58" + } + ], + "id": 8758, + "name": "MemberAccess", + "src": "12573:13:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8744, + "type": "uint256", + "value": "i" + }, + "id": 8759, + "name": "Identifier", + "src": "12587:1:58" + } + ], + "id": 8760, + "name": "IndexAccess", + "src": "12573:16:58" + } + ], + "id": 8761, + "name": "MemberAccess", + "src": "12573:25:58" + } + ], + "id": 8762, + "name": "VariableDeclarationStatement", + "src": "12555:43:58" + }, + { + "attributes": { + "assignments": [ + 8764 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "itemId", + "scope": 8948, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8763, + "name": "ElementaryTypeName", + "src": "12616:7:58" + } + ], + "id": 8764, + "name": "VariableDeclaration", + "src": "12616:14:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "itemIdx", + "referencedDeclaration": 10679, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.SettleDetail memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "details", + "referencedDeclaration": 10716, + "type": "struct Ix2y2.SettleDetail memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8703, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 8765, + "name": "Identifier", + "src": "12633:5:58" + } + ], + "id": 8766, + "name": "MemberAccess", + "src": "12633:13:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8744, + "type": "uint256", + "value": "i" + }, + "id": 8767, + "name": "Identifier", + "src": "12647:1:58" + } + ], + "id": 8768, + "name": "IndexAccess", + "src": "12633:16:58" + } + ], + "id": 8769, + "name": "MemberAccess", + "src": "12633:24:58" + } + ], + "id": 8770, + "name": "VariableDeclarationStatement", + "src": "12616:41:58" + }, + { + "attributes": { + "assignments": [ + 8772 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 8948, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 8771, + "name": "ElementaryTypeName", + "src": "12675:5:58" + } + ], + "id": 8772, + "name": "VariableDeclaration", + "src": "12675:17:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "data", + "referencedDeclaration": 10627, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.OrderItem memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "items", + "referencedDeclaration": 10659, + "type": "struct Ix2y2.OrderItem memory[] memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Order memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "orders", + "referencedDeclaration": 10713, + "type": "struct Ix2y2.Order memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8703, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 8773, + "name": "Identifier", + "src": "12695:5:58" + } + ], + "id": 8774, + "name": "MemberAccess", + "src": "12695:12:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8756, + "type": "uint256", + "value": "orderId" + }, + "id": 8775, + "name": "Identifier", + "src": "12708:7:58" + } + ], + "id": 8776, + "name": "IndexAccess", + "src": "12695:21:58" + } + ], + "id": 8777, + "name": "MemberAccess", + "src": "12695:27:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8764, + "type": "uint256", + "value": "itemId" + }, + "id": 8778, + "name": "Identifier", + "src": "12723:6:58" + } + ], + "id": 8779, + "name": "IndexAccess", + "src": "12695:35:58" + } + ], + "id": 8780, + "name": "MemberAccess", + "src": "12695:40:58" + } + ], + "id": 8781, + "name": "VariableDeclarationStatement", + "src": "12675:60:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "&&", + "type": "bool" + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "dataMask", + "referencedDeclaration": 10656, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Order memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "orders", + "referencedDeclaration": 10713, + "type": "struct Ix2y2.Order memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8703, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 8782, + "name": "Identifier", + "src": "12779:5:58" + } + ], + "id": 8783, + "name": "MemberAccess", + "src": "12779:12:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8756, + "type": "uint256", + "value": "orderId" + }, + "id": 8784, + "name": "Identifier", + "src": "12792:7:58" + } + ], + "id": 8785, + "name": "IndexAccess", + "src": "12779:21:58" + } + ], + "id": 8786, + "name": "MemberAccess", + "src": "12779:30:58" + } + ], + "id": 8787, + "name": "MemberAccess", + "src": "12779:37:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8788, + "name": "Literal", + "src": "12819:1:58" + } + ], + "id": 8789, + "name": "BinaryOperation", + "src": "12779:41:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "dataReplacement", + "referencedDeclaration": 10687, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.SettleDetail memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "details", + "referencedDeclaration": 10716, + "type": "struct Ix2y2.SettleDetail memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8703, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 8790, + "name": "Identifier", + "src": "12824:5:58" + } + ], + "id": 8791, + "name": "MemberAccess", + "src": "12824:13:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8744, + "type": "uint256", + "value": "i" + }, + "id": 8792, + "name": "Identifier", + "src": "12838:1:58" + } + ], + "id": 8793, + "name": "IndexAccess", + "src": "12824:16:58" + } + ], + "id": 8794, + "name": "MemberAccess", + "src": "12824:32:58" + } + ], + "id": 8795, + "name": "MemberAccess", + "src": "12824:39:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8796, + "name": "Literal", + "src": "12866:1:58" + } + ], + "id": 8797, + "name": "BinaryOperation", + "src": "12824:43:58" + } + ], + "id": 8798, + "name": "BinaryOperation", + "src": "12779:88:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10065, + "type": "function (bytes memory,bytes memory,bytes memory) view", + "value": "_arrayReplace" + }, + "id": 8799, + "name": "Identifier", + "src": "12895:13:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8772, + "type": "bytes memory", + "value": "data" + }, + "id": 8800, + "name": "Identifier", + "src": "12909:4:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "dataReplacement", + "referencedDeclaration": 10687, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.SettleDetail memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "details", + "referencedDeclaration": 10716, + "type": "struct Ix2y2.SettleDetail memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8703, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 8801, + "name": "Identifier", + "src": "12915:5:58" + } + ], + "id": 8802, + "name": "MemberAccess", + "src": "12915:13:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8744, + "type": "uint256", + "value": "i" + }, + "id": 8803, + "name": "Identifier", + "src": "12929:1:58" + } + ], + "id": 8804, + "name": "IndexAccess", + "src": "12915:16:58" + } + ], + "id": 8805, + "name": "MemberAccess", + "src": "12915:32:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "dataMask", + "referencedDeclaration": 10656, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Order memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "orders", + "referencedDeclaration": 10713, + "type": "struct Ix2y2.Order memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8703, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 8806, + "name": "Identifier", + "src": "12949:5:58" + } + ], + "id": 8807, + "name": "MemberAccess", + "src": "12949:12:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8756, + "type": "uint256", + "value": "orderId" + }, + "id": 8808, + "name": "Identifier", + "src": "12962:7:58" + } + ], + "id": 8809, + "name": "IndexAccess", + "src": "12949:21:58" + } + ], + "id": 8810, + "name": "MemberAccess", + "src": "12949:30:58" + } + ], + "id": 8811, + "name": "FunctionCall", + "src": "12895:85:58" + } + ], + "id": 8812, + "name": "ExpressionStatement", + "src": "12895:85:58" + } + ], + "id": 8813, + "name": "Block", + "src": "12869:134:58" + } + ], + "id": 8814, + "name": "IfStatement", + "src": "12775:228:58" + } + ], + "id": 8815, + "name": "Block", + "src": "12753:268:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "delegateType", + "referencedDeclaration": 10650, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Order memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "orders", + "referencedDeclaration": 10713, + "type": "struct Ix2y2.Order memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8703, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 8816, + "name": "Identifier", + "src": "13074:5:58" + } + ], + "id": 8817, + "name": "MemberAccess", + "src": "13074:12:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8756, + "type": "uint256", + "value": "orderId" + }, + "id": 8818, + "name": "Identifier", + "src": "13087:7:58" + } + ], + "id": 8819, + "name": "IndexAccess", + "src": "13074:21:58" + } + ], + "id": 8820, + "name": "MemberAccess", + "src": "13074:34:58" + }, + { + "attributes": { + "hexvalue": "31", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 1", + "value": "1" + }, + "id": 8821, + "name": "Literal", + "src": "13112:1:58" + } + ], + "id": 8822, + "name": "BinaryOperation", + "src": "13074:39:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8827 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "pairs", + "scope": 8876, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct Ix2y2.Pair721[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "struct Ix2y2.Pair721[]" + }, + "children": [ + { + "attributes": { + "name": "Ix2y2.Pair721", + "referencedDeclaration": 10633, + "type": "struct Ix2y2.Pair721" + }, + "id": 8825, + "name": "UserDefinedTypeName", + "src": "13137:13:58" + } + ], + "id": 8826, + "name": "ArrayTypeName", + "src": "13137:15:58" + } + ], + "id": 8827, + "name": "VariableDeclaration", + "src": "13137:28:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "struct Ix2y2.Pair721 memory[] memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair721_$10633_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair721 memory[] memory)" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "decode", + "type": "function () pure" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 8828, + "name": "Identifier", + "src": "13168:3:58" + } + ], + "id": 8829, + "name": "MemberAccess", + "src": "13168:10:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8772, + "type": "bytes memory", + "value": "data" + }, + "id": 8830, + "name": "Identifier", + "src": "13179:4:58" + }, + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "type(struct Ix2y2.Pair721 memory[] memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "type(struct Ix2y2.Pair721 memory[] memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "Pair721", + "referencedDeclaration": 10633, + "type": "type(struct Ix2y2.Pair721 storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10740, + "type": "type(contract Ix2y2)", + "value": "Ix2y2" + }, + "id": 8831, + "name": "Identifier", + "src": "13186:5:58" + } + ], + "id": 8832, + "name": "MemberAccess", + "src": "13186:13:58" + } + ], + "id": 8833, + "name": "IndexAccess", + "src": "13186:15:58" + } + ], + "id": 8834, + "name": "TupleExpression", + "src": "13185:17:58" + } + ], + "id": 8835, + "name": "FunctionCall", + "src": "13168:35:58" + } + ], + "id": 8836, + "name": "VariableDeclarationStatement", + "src": "13137:66:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8838 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "j", + "scope": 8875, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8837, + "name": "ElementaryTypeName", + "src": "13231:7:58" + } + ], + "id": 8838, + "name": "VariableDeclaration", + "src": "13231:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8839, + "name": "Literal", + "src": "13243:1:58" + } + ], + "id": 8840, + "name": "VariableDeclarationStatement", + "src": "13231:13:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8838, + "type": "uint256", + "value": "j" + }, + "id": 8841, + "name": "Identifier", + "src": "13246:1:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8827, + "type": "struct Ix2y2.Pair721 memory[] memory", + "value": "pairs" + }, + "id": 8842, + "name": "Identifier", + "src": "13250:5:58" + } + ], + "id": 8843, + "name": "MemberAccess", + "src": "13250:12:58" + } + ], + "id": 8844, + "name": "BinaryOperation", + "src": "13246:16:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8838, + "type": "uint256", + "value": "j" + }, + "id": 8845, + "name": "Identifier", + "src": "13264:1:58" + } + ], + "id": 8846, + "name": "UnaryOperation", + "src": "13264:3:58" + } + ], + "id": 8847, + "name": "ExpressionStatement", + "src": "13264:3:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8851 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "p", + "scope": 8874, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct Ix2y2.Pair721", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Ix2y2.Pair721", + "referencedDeclaration": 10633, + "type": "struct Ix2y2.Pair721" + }, + "id": 8850, + "name": "UserDefinedTypeName", + "src": "13295:13:58" + } + ], + "id": 8851, + "name": "VariableDeclaration", + "src": "13295:22:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Pair721 memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8827, + "type": "struct Ix2y2.Pair721 memory[] memory", + "value": "pairs" + }, + "id": 8852, + "name": "Identifier", + "src": "13320:5:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8838, + "type": "uint256", + "value": "j" + }, + "id": 8853, + "name": "Identifier", + "src": "13326:1:58" + } + ], + "id": 8854, + "name": "IndexAccess", + "src": "13320:8:58" + } + ], + "id": 8855, + "name": "VariableDeclarationStatement", + "src": "13295:33:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "safeTransferFrom", + "referencedDeclaration": 1299, + "type": "function (address,address,uint256) external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC721Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1356, + "type": "type(contract IERC721Upgradeable)", + "value": "IERC721Upgradeable" + }, + "id": 8856, + "name": "Identifier", + "src": "13354:18:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 8857, + "name": "ElementaryTypeName", + "src": "13373:7:58" + } + ], + "id": 8858, + "name": "ElementaryTypeNameExpression", + "src": "13373:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "token", + "referencedDeclaration": 10630, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8851, + "type": "struct Ix2y2.Pair721 memory", + "value": "p" + }, + "id": 8859, + "name": "Identifier", + "src": "13381:1:58" + } + ], + "id": 8860, + "name": "MemberAccess", + "src": "13381:7:58" + } + ], + "id": 8861, + "name": "FunctionCall", + "src": "13373:16:58" + } + ], + "id": 8862, + "name": "FunctionCall", + "src": "13354:36:58" + } + ], + "id": 8863, + "name": "MemberAccess", + "src": "13354:53:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 8864, + "name": "ElementaryTypeName", + "src": "13408:7:58" + } + ], + "id": 8865, + "name": "ElementaryTypeNameExpression", + "src": "13408:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeable", + "value": "this" + }, + "id": 8866, + "name": "Identifier", + "src": "13416:4:58" + } + ], + "id": 8867, + "name": "FunctionCall", + "src": "13408:13:58" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 8868, + "name": "Identifier", + "src": "13423:10:58" + } + ], + "id": 8869, + "name": "FunctionCall", + "src": "13423:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "tokenId", + "referencedDeclaration": 10632, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8851, + "type": "struct Ix2y2.Pair721 memory", + "value": "p" + }, + "id": 8870, + "name": "Identifier", + "src": "13437:1:58" + } + ], + "id": 8871, + "name": "MemberAccess", + "src": "13437:9:58" + } + ], + "id": 8872, + "name": "FunctionCall", + "src": "13354:93:58" + } + ], + "id": 8873, + "name": "ExpressionStatement", + "src": "13354:93:58" + } + ], + "id": 8874, + "name": "Block", + "src": "13269:201:58" + } + ], + "id": 8875, + "name": "ForStatement", + "src": "13226:244:58" + } + ], + "id": 8876, + "name": "Block", + "src": "13115:373:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "delegateType", + "referencedDeclaration": 10650, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Order memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "orders", + "referencedDeclaration": 10713, + "type": "struct Ix2y2.Order memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8703, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 8877, + "name": "Identifier", + "src": "13498:5:58" + } + ], + "id": 8878, + "name": "MemberAccess", + "src": "13498:12:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8756, + "type": "uint256", + "value": "orderId" + }, + "id": 8879, + "name": "Identifier", + "src": "13511:7:58" + } + ], + "id": 8880, + "name": "IndexAccess", + "src": "13498:21:58" + } + ], + "id": 8881, + "name": "MemberAccess", + "src": "13498:34:58" + }, + { + "attributes": { + "hexvalue": "32", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 2", + "value": "2" + }, + "id": 8882, + "name": "Literal", + "src": "13536:1:58" + } + ], + "id": 8883, + "name": "BinaryOperation", + "src": "13498:39:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8888 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "pairs", + "scope": 8940, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct Ix2y2.Pair1155[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "struct Ix2y2.Pair1155[]" + }, + "children": [ + { + "attributes": { + "name": "Ix2y2.Pair1155", + "referencedDeclaration": 10640, + "type": "struct Ix2y2.Pair1155" + }, + "id": 8886, + "name": "UserDefinedTypeName", + "src": "13597:14:58" + } + ], + "id": 8887, + "name": "ArrayTypeName", + "src": "13597:16:58" + } + ], + "id": 8888, + "name": "VariableDeclaration", + "src": "13597:29:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "struct Ix2y2.Pair1155 memory[] memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair1155_$10640_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair1155 memory[] memory)" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "decode", + "type": "function () pure" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 8889, + "name": "Identifier", + "src": "13629:3:58" + } + ], + "id": 8890, + "name": "MemberAccess", + "src": "13629:10:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8772, + "type": "bytes memory", + "value": "data" + }, + "id": 8891, + "name": "Identifier", + "src": "13640:4:58" + }, + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "type(struct Ix2y2.Pair1155 memory[] memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "type(struct Ix2y2.Pair1155 memory[] memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "Pair1155", + "referencedDeclaration": 10640, + "type": "type(struct Ix2y2.Pair1155 storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10740, + "type": "type(contract Ix2y2)", + "value": "Ix2y2" + }, + "id": 8892, + "name": "Identifier", + "src": "13647:5:58" + } + ], + "id": 8893, + "name": "MemberAccess", + "src": "13647:14:58" + } + ], + "id": 8894, + "name": "IndexAccess", + "src": "13647:16:58" + } + ], + "id": 8895, + "name": "TupleExpression", + "src": "13646:18:58" + } + ], + "id": 8896, + "name": "FunctionCall", + "src": "13629:36:58" + } + ], + "id": 8897, + "name": "VariableDeclarationStatement", + "src": "13597:68:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8899 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "j", + "scope": 8939, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8898, + "name": "ElementaryTypeName", + "src": "13693:7:58" + } + ], + "id": 8899, + "name": "VariableDeclaration", + "src": "13693:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8900, + "name": "Literal", + "src": "13705:1:58" + } + ], + "id": 8901, + "name": "VariableDeclarationStatement", + "src": "13693:13:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8899, + "type": "uint256", + "value": "j" + }, + "id": 8902, + "name": "Identifier", + "src": "13708:1:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8888, + "type": "struct Ix2y2.Pair1155 memory[] memory", + "value": "pairs" + }, + "id": 8903, + "name": "Identifier", + "src": "13712:5:58" + } + ], + "id": 8904, + "name": "MemberAccess", + "src": "13712:12:58" + } + ], + "id": 8905, + "name": "BinaryOperation", + "src": "13708:16:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8899, + "type": "uint256", + "value": "j" + }, + "id": 8906, + "name": "Identifier", + "src": "13726:1:58" + } + ], + "id": 8907, + "name": "UnaryOperation", + "src": "13726:3:58" + } + ], + "id": 8908, + "name": "ExpressionStatement", + "src": "13726:3:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8912 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "p", + "scope": 8938, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct Ix2y2.Pair1155", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Ix2y2.Pair1155", + "referencedDeclaration": 10640, + "type": "struct Ix2y2.Pair1155" + }, + "id": 8911, + "name": "UserDefinedTypeName", + "src": "13757:14:58" + } + ], + "id": 8912, + "name": "VariableDeclaration", + "src": "13757:23:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Pair1155 memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8888, + "type": "struct Ix2y2.Pair1155 memory[] memory", + "value": "pairs" + }, + "id": 8913, + "name": "Identifier", + "src": "13783:5:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8899, + "type": "uint256", + "value": "j" + }, + "id": 8914, + "name": "Identifier", + "src": "13789:1:58" + } + ], + "id": 8915, + "name": "IndexAccess", + "src": "13783:8:58" + } + ], + "id": 8916, + "name": "VariableDeclarationStatement", + "src": "13757:34:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "safeTransferFrom", + "referencedDeclaration": 1078, + "type": "function (address,address,uint256,uint256,bytes memory) external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC1155Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1095, + "type": "type(contract IERC1155Upgradeable)", + "value": "IERC1155Upgradeable" + }, + "id": 8917, + "name": "Identifier", + "src": "13817:19:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 8918, + "name": "ElementaryTypeName", + "src": "13837:7:58" + } + ], + "id": 8919, + "name": "ElementaryTypeNameExpression", + "src": "13837:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "token", + "referencedDeclaration": 10635, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8912, + "type": "struct Ix2y2.Pair1155 memory", + "value": "p" + }, + "id": 8920, + "name": "Identifier", + "src": "13845:1:58" + } + ], + "id": 8921, + "name": "MemberAccess", + "src": "13845:7:58" + } + ], + "id": 8922, + "name": "FunctionCall", + "src": "13837:16:58" + } + ], + "id": 8923, + "name": "FunctionCall", + "src": "13817:37:58" + } + ], + "id": 8924, + "name": "MemberAccess", + "src": "13817:54:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 8925, + "name": "ElementaryTypeName", + "src": "13872:7:58" + } + ], + "id": 8926, + "name": "ElementaryTypeNameExpression", + "src": "13872:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeable", + "value": "this" + }, + "id": 8927, + "name": "Identifier", + "src": "13880:4:58" + } + ], + "id": 8928, + "name": "FunctionCall", + "src": "13872:13:58" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 8929, + "name": "Identifier", + "src": "13887:10:58" + } + ], + "id": 8930, + "name": "FunctionCall", + "src": "13887:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "tokenId", + "referencedDeclaration": 10637, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8912, + "type": "struct Ix2y2.Pair1155 memory", + "value": "p" + }, + "id": 8931, + "name": "Identifier", + "src": "13901:1:58" + } + ], + "id": 8932, + "name": "MemberAccess", + "src": "13901:9:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 10639, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8912, + "type": "struct Ix2y2.Pair1155 memory", + "value": "p" + }, + "id": 8933, + "name": "Identifier", + "src": "13912:1:58" + } + ], + "id": 8934, + "name": "MemberAccess", + "src": "13912:8:58" + }, + { + "attributes": { + "hexvalue": "", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"\"", + "value": "" + }, + "id": 8935, + "name": "Literal", + "src": "13922:2:58" + } + ], + "id": 8936, + "name": "FunctionCall", + "src": "13817:108:58" + } + ], + "id": 8937, + "name": "ExpressionStatement", + "src": "13817:108:58" + } + ], + "id": 8938, + "name": "Block", + "src": "13731:217:58" + } + ], + "id": 8939, + "name": "ForStatement", + "src": "13688:260:58" + } + ], + "id": 8940, + "name": "Block", + "src": "13539:427:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_b9e628d538abf867b76153fc9fbf92e2395d1f1d03fe95fb0b6ee129f4f808af", + "typeString": "literal_string \"unknown delegateType x2y2\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 8941, + "name": "Identifier", + "src": "13994:6:58" + }, + { + "attributes": { + "hexvalue": "756e6b6e6f776e2064656c6567617465547970652078327932", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"unknown delegateType x2y2\"", + "value": "unknown delegateType x2y2" + }, + "id": 8942, + "name": "Literal", + "src": "14001:27:58" + } + ], + "id": 8943, + "name": "FunctionCall", + "src": "13994:35:58" + } + ], + "id": 8944, + "name": "ExpressionStatement", + "src": "13994:35:58" + } + ], + "id": 8945, + "name": "Block", + "src": "13972:76:58" + } + ], + "id": 8946, + "name": "IfStatement", + "src": "13494:554:58" + } + ], + "id": 8947, + "name": "IfStatement", + "src": "13070:978:58" + } + ], + "id": 8948, + "name": "Block", + "src": "12537:1525:58" + } + ], + "id": 8949, + "name": "ForStatement", + "src": "12486:1576:58" + } + ], + "id": 8950, + "name": "Block", + "src": "11942:2130:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8951, + "name": "Identifier", + "src": "14082:15:58" + } + ], + "id": 8952, + "name": "MemberAccess", + "src": "14082:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "LooksRareOrders", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 8953, + "name": "Identifier", + "src": "14110:7:58" + } + ], + "id": 8954, + "name": "MemberAccess", + "src": "14110:23:58" + } + ], + "id": 8955, + "name": "BinaryOperation", + "src": "14082:51:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8959, + 8961, + 8963 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "takerOrder", + "scope": 9059, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct LibLooksRare.TakerOrder", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "LibLooksRare.TakerOrder", + "referencedDeclaration": 10789, + "type": "struct LibLooksRare.TakerOrder" + }, + "id": 8958, + "name": "UserDefinedTypeName", + "src": "14150:23:58" + } + ], + "id": 8959, + "name": "VariableDeclaration", + "src": "14150:41:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "makerOrder", + "scope": 9059, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct LibLooksRare.MakerOrder", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "LibLooksRare.MakerOrder", + "referencedDeclaration": 10776, + "type": "struct LibLooksRare.MakerOrder" + }, + "id": 8960, + "name": "UserDefinedTypeName", + "src": "14193:23:58" + } + ], + "id": 8961, + "name": "VariableDeclaration", + "src": "14193:41:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "typeNft", + "scope": 9059, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes4", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes4", + "type": "bytes4" + }, + "id": 8962, + "name": "ElementaryTypeName", + "src": "14236:6:58" + } + ], + "id": 8963, + "name": "VariableDeclaration", + "src": "14236:14:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory,bytes4)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_struct$_TakerOrder_$10789_storage_ptr_$_$_t_type$_t_struct$_MakerOrder_$10776_storage_ptr_$_$_t_type$_t_bytes4_$_$", + "typeString": "tuple(type(struct LibLooksRare.TakerOrder storage pointer),type(struct LibLooksRare.MakerOrder storage pointer),type(bytes4))" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "decode", + "type": "function () pure" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 8964, + "name": "Identifier", + "src": "14254:3:58" + } + ], + "id": 8965, + "name": "MemberAccess", + "src": "14254:10:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8569, + "type": "bytes memory", + "value": "marketData" + }, + "id": 8966, + "name": "Identifier", + "src": "14265:10:58" + }, + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(type(struct LibLooksRare.TakerOrder storage pointer),type(struct LibLooksRare.MakerOrder storage pointer),type(bytes4))" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "TakerOrder", + "referencedDeclaration": 10789, + "type": "type(struct LibLooksRare.TakerOrder storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10848, + "type": "type(library LibLooksRare)", + "value": "LibLooksRare" + }, + "id": 8967, + "name": "Identifier", + "src": "14278:12:58" + } + ], + "id": 8968, + "name": "MemberAccess", + "src": "14278:23:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "MakerOrder", + "referencedDeclaration": 10776, + "type": "type(struct LibLooksRare.MakerOrder storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10848, + "type": "type(library LibLooksRare)", + "value": "LibLooksRare" + }, + "id": 8969, + "name": "Identifier", + "src": "14303:12:58" + } + ], + "id": 8970, + "name": "MemberAccess", + "src": "14303:23:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(bytes4)" + }, + "children": [ + { + "attributes": { + "name": "bytes4" + }, + "id": 8971, + "name": "ElementaryTypeName", + "src": "14328:6:58" + } + ], + "id": 8972, + "name": "ElementaryTypeNameExpression", + "src": "14328:6:58" + } + ], + "id": 8973, + "name": "TupleExpression", + "src": "14277:58:58" + } + ], + "id": 8974, + "name": "FunctionCall", + "src": "14254:82:58" + } + ], + "id": 8975, + "name": "VariableDeclarationStatement", + "src": "14149:187:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8559, + "type": "bool", + "value": "allowFail" + }, + "id": 8976, + "name": "Identifier", + "src": "14354:9:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": true, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$10789_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$10789_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "matchAskWithTakerBidUsingETHAndWETH", + "referencedDeclaration": 10488, + "type": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract ILooksRare", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10503, + "type": "type(contract ILooksRare)", + "value": "ILooksRare" + }, + "id": 8977, + "name": "Identifier", + "src": "14387:10:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8003, + "type": "address", + "value": "looksRare" + }, + "id": 8978, + "name": "Identifier", + "src": "14398:9:58" + } + ], + "id": 8979, + "name": "FunctionCall", + "src": "14387:21:58" + } + ], + "id": 8980, + "name": "MemberAccess", + "src": "14387:57:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 8981, + "name": "Identifier", + "src": "14452:13:58" + } + ], + "id": 8982, + "name": "FunctionCallOptions", + "src": "14387:79:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8959, + "type": "struct LibLooksRare.TakerOrder memory", + "value": "takerOrder" + }, + "id": 8983, + "name": "Identifier", + "src": "14467:10:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8961, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 8984, + "name": "Identifier", + "src": "14479:10:58" + } + ], + "id": 8985, + "name": "FunctionCall", + "src": "14387:103:58" + }, + { + "attributes": { + "errorName": "" + }, + "children": [ + { + "attributes": { + "statements": [ + null + ] + }, + "children": [], + "id": 8986, + "name": "Block", + "src": "14491:2:58" + } + ], + "id": 8987, + "name": "TryCatchClause", + "src": "14491:2:58" + }, + { + "attributes": { + "errorName": "" + }, + "children": [ + { + "children": [ + { + "attributes": { + "functionReturnParameters": 8567 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 8988, + "name": "Literal", + "src": "14530:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8989, + "name": "Literal", + "src": "14537:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8990, + "name": "Literal", + "src": "14540:1:58" + } + ], + "id": 8991, + "name": "TupleExpression", + "src": "14529:13:58" + } + ], + "id": 8992, + "name": "Return", + "src": "14522:20:58" + } + ], + "id": 8993, + "name": "Block", + "src": "14500:61:58" + } + ], + "id": 8994, + "name": "TryCatchClause", + "src": "14494:67:58" + } + ], + "id": 8995, + "name": "TryStatement", + "src": "14383:178:58" + } + ], + "id": 8996, + "name": "Block", + "src": "14365:210:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$10789_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$10789_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$10776_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "matchAskWithTakerBidUsingETHAndWETH", + "referencedDeclaration": 10488, + "type": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract ILooksRare", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10503, + "type": "type(contract ILooksRare)", + "value": "ILooksRare" + }, + "id": 8997, + "name": "Identifier", + "src": "14599:10:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8003, + "type": "address", + "value": "looksRare" + }, + "id": 8998, + "name": "Identifier", + "src": "14610:9:58" + } + ], + "id": 8999, + "name": "FunctionCall", + "src": "14599:21:58" + } + ], + "id": 9000, + "name": "MemberAccess", + "src": "14599:57:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9001, + "name": "Identifier", + "src": "14664:13:58" + } + ], + "id": 9002, + "name": "FunctionCallOptions", + "src": "14599:79:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8959, + "type": "struct LibLooksRare.TakerOrder memory", + "value": "takerOrder" + }, + "id": 9003, + "name": "Identifier", + "src": "14679:10:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8961, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 9004, + "name": "Identifier", + "src": "14691:10:58" + } + ], + "id": 9005, + "name": "FunctionCall", + "src": "14599:103:58" + } + ], + "id": 9006, + "name": "ExpressionStatement", + "src": "14599:103:58" + } + ], + "id": 9007, + "name": "Block", + "src": "14581:136:58" + } + ], + "id": 9008, + "name": "IfStatement", + "src": "14350:367:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8963, + "type": "bytes4", + "value": "typeNft" + }, + "id": 9009, + "name": "Identifier", + "src": "14734:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "ERC721_ASSET_CLASS", + "referencedDeclaration": 4822, + "type": "bytes4" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4909, + "type": "type(library LibAsset)", + "value": "LibAsset" + }, + "id": 9010, + "name": "Identifier", + "src": "14745:8:58" + } + ], + "id": 9011, + "name": "MemberAccess", + "src": "14745:27:58" + } + ], + "id": 9012, + "name": "BinaryOperation", + "src": "14734:38:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "safeTransferFrom", + "referencedDeclaration": 1299, + "type": "function (address,address,uint256) external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC721Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1356, + "type": "type(contract IERC721Upgradeable)", + "value": "IERC721Upgradeable" + }, + "id": 9013, + "name": "Identifier", + "src": "14792:18:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "collection", + "referencedDeclaration": 10749, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8961, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 9014, + "name": "Identifier", + "src": "14811:10:58" + } + ], + "id": 9015, + "name": "MemberAccess", + "src": "14811:21:58" + } + ], + "id": 9016, + "name": "FunctionCall", + "src": "14792:41:58" + } + ], + "id": 9017, + "name": "MemberAccess", + "src": "14792:58:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9018, + "name": "ElementaryTypeName", + "src": "14851:7:58" + } + ], + "id": 9019, + "name": "ElementaryTypeNameExpression", + "src": "14851:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeable", + "value": "this" + }, + "id": 9020, + "name": "Identifier", + "src": "14859:4:58" + } + ], + "id": 9021, + "name": "FunctionCall", + "src": "14851:13:58" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 9022, + "name": "Identifier", + "src": "14866:10:58" + } + ], + "id": 9023, + "name": "FunctionCall", + "src": "14866:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "tokenId", + "referencedDeclaration": 10753, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8961, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 9024, + "name": "Identifier", + "src": "14880:10:58" + } + ], + "id": 9025, + "name": "MemberAccess", + "src": "14880:18:58" + } + ], + "id": 9026, + "name": "FunctionCall", + "src": "14792:107:58" + } + ], + "id": 9027, + "name": "ExpressionStatement", + "src": "14792:107:58" + } + ], + "id": 9028, + "name": "Block", + "src": "14774:140:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8963, + "type": "bytes4", + "value": "typeNft" + }, + "id": 9029, + "name": "Identifier", + "src": "14924:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "ERC1155_ASSET_CLASS", + "referencedDeclaration": 4830, + "type": "bytes4" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4909, + "type": "type(library LibAsset)", + "value": "LibAsset" + }, + "id": 9030, + "name": "Identifier", + "src": "14935:8:58" + } + ], + "id": 9031, + "name": "MemberAccess", + "src": "14935:28:58" + } + ], + "id": 9032, + "name": "BinaryOperation", + "src": "14924:39:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "safeTransferFrom", + "referencedDeclaration": 1078, + "type": "function (address,address,uint256,uint256,bytes memory) external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC1155Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1095, + "type": "type(contract IERC1155Upgradeable)", + "value": "IERC1155Upgradeable" + }, + "id": 9033, + "name": "Identifier", + "src": "14983:19:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "collection", + "referencedDeclaration": 10749, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8961, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 9034, + "name": "Identifier", + "src": "15003:10:58" + } + ], + "id": 9035, + "name": "MemberAccess", + "src": "15003:21:58" + } + ], + "id": 9036, + "name": "FunctionCall", + "src": "14983:42:58" + } + ], + "id": 9037, + "name": "MemberAccess", + "src": "14983:59:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9038, + "name": "ElementaryTypeName", + "src": "15043:7:58" + } + ], + "id": 9039, + "name": "ElementaryTypeNameExpression", + "src": "15043:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeable", + "value": "this" + }, + "id": 9040, + "name": "Identifier", + "src": "15051:4:58" + } + ], + "id": 9041, + "name": "FunctionCall", + "src": "15043:13:58" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 9042, + "name": "Identifier", + "src": "15058:10:58" + } + ], + "id": 9043, + "name": "FunctionCall", + "src": "15058:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "tokenId", + "referencedDeclaration": 10753, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8961, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 9044, + "name": "Identifier", + "src": "15072:10:58" + } + ], + "id": 9045, + "name": "MemberAccess", + "src": "15072:18:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 10755, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8961, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 9046, + "name": "Identifier", + "src": "15092:10:58" + } + ], + "id": 9047, + "name": "MemberAccess", + "src": "15092:17:58" + }, + { + "attributes": { + "hexvalue": "", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"\"", + "value": "" + }, + "id": 9048, + "name": "Literal", + "src": "15111:2:58" + } + ], + "id": 9049, + "name": "FunctionCall", + "src": "14983:131:58" + } + ], + "id": 9050, + "name": "ExpressionStatement", + "src": "14983:131:58" + } + ], + "id": 9051, + "name": "Block", + "src": "14965:164:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b", + "typeString": "literal_string \"Unknown token type\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 9052, + "name": "Identifier", + "src": "15153:6:58" + }, + { + "attributes": { + "hexvalue": "556e6b6e6f776e20746f6b656e2074797065", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Unknown token type\"", + "value": "Unknown token type" + }, + "id": 9053, + "name": "Literal", + "src": "15160:20:58" + } + ], + "id": 9054, + "name": "FunctionCall", + "src": "15153:28:58" + } + ], + "id": 9055, + "name": "ExpressionStatement", + "src": "15153:28:58" + } + ], + "id": 9056, + "name": "Block", + "src": "15135:61:58" + } + ], + "id": 9057, + "name": "IfStatement", + "src": "14920:276:58" + } + ], + "id": 9058, + "name": "IfStatement", + "src": "14730:466:58" + } + ], + "id": 9059, + "name": "Block", + "src": "14135:1071:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9060, + "name": "Identifier", + "src": "15216:15:58" + } + ], + "id": 9061, + "name": "MemberAccess", + "src": "15216:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SudoSwap", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 9062, + "name": "Identifier", + "src": "15244:7:58" + } + ], + "id": 9063, + "name": "MemberAccess", + "src": "15244:16:58" + } + ], + "id": 9064, + "name": "BinaryOperation", + "src": "15216:44:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9066, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9095, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9065, + "name": "ElementaryTypeName", + "src": "15277:4:58" + } + ], + "id": 9066, + "name": "VariableDeclaration", + "src": "15277:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9067, + "name": "ElementaryTypeName", + "src": "15295:7:58" + } + ], + "id": 9068, + "name": "ElementaryTypeNameExpression", + "src": "15295:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8005, + "type": "address", + "value": "sudoswap" + }, + "id": 9069, + "name": "Identifier", + "src": "15303:8:58" + } + ], + "id": 9070, + "name": "FunctionCall", + "src": "15295:17:58" + } + ], + "id": 9071, + "name": "MemberAccess", + "src": "15295:22:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9072, + "name": "Identifier", + "src": "15325:13:58" + } + ], + "id": 9073, + "name": "FunctionCallOptions", + "src": "15295:44:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8569, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9074, + "name": "Identifier", + "src": "15340:10:58" + } + ], + "id": 9075, + "name": "FunctionCall", + "src": "15295:56:58" + } + ], + "id": 9076, + "name": "VariableDeclarationStatement", + "src": "15276:75:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8559, + "type": "bool", + "value": "allowFail" + }, + "id": 9077, + "name": "Identifier", + "src": "15369:9:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9066, + "type": "bool", + "value": "success" + }, + "id": 9078, + "name": "Identifier", + "src": "15403:7:58" + } + ], + "id": 9079, + "name": "UnaryOperation", + "src": "15402:8:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 8567 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9080, + "name": "Literal", + "src": "15442:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9081, + "name": "Literal", + "src": "15449:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9082, + "name": "Literal", + "src": "15452:1:58" + } + ], + "id": 9083, + "name": "TupleExpression", + "src": "15441:13:58" + } + ], + "id": 9084, + "name": "Return", + "src": "15434:20:58" + } + ], + "id": 9085, + "name": "Block", + "src": "15412:61:58" + } + ], + "id": 9086, + "name": "IfStatement", + "src": "15398:75:58" + } + ], + "id": 9087, + "name": "Block", + "src": "15380:107:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_af8784af813955ccf5679f356dd871ef58abf3a7050c9104ea0ff5ddaa4b9287", + "typeString": "literal_string \"Purchase sudoswap failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9088, + "name": "Identifier", + "src": "15511:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9066, + "type": "bool", + "value": "success" + }, + "id": 9089, + "name": "Identifier", + "src": "15519:7:58" + }, + { + "attributes": { + "hexvalue": "5075726368617365207375646f73776170206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase sudoswap failed\"", + "value": "Purchase sudoswap failed" + }, + "id": 9090, + "name": "Literal", + "src": "15528:26:58" + } + ], + "id": 9091, + "name": "FunctionCall", + "src": "15511:44:58" + } + ], + "id": 9092, + "name": "ExpressionStatement", + "src": "15511:44:58" + } + ], + "id": 9093, + "name": "Block", + "src": "15493:77:58" + } + ], + "id": 9094, + "name": "IfStatement", + "src": "15365:205:58" + } + ], + "id": 9095, + "name": "Block", + "src": "15262:318:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9096, + "name": "Identifier", + "src": "15590:15:58" + } + ], + "id": 9097, + "name": "MemberAccess", + "src": "15590:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_4", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 9098, + "name": "Identifier", + "src": "15618:7:58" + } + ], + "id": 9099, + "name": "MemberAccess", + "src": "15618:19:58" + } + ], + "id": 9100, + "name": "BinaryOperation", + "src": "15590:47:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9102, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9131, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9101, + "name": "ElementaryTypeName", + "src": "15654:4:58" + } + ], + "id": 9102, + "name": "VariableDeclaration", + "src": "15654:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9103, + "name": "ElementaryTypeName", + "src": "15672:7:58" + } + ], + "id": 9104, + "name": "ElementaryTypeNameExpression", + "src": "15672:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8007, + "type": "address", + "value": "seaPort_1_4" + }, + "id": 9105, + "name": "Identifier", + "src": "15680:11:58" + } + ], + "id": 9106, + "name": "FunctionCall", + "src": "15672:20:58" + } + ], + "id": 9107, + "name": "MemberAccess", + "src": "15672:25:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9108, + "name": "Identifier", + "src": "15705:13:58" + } + ], + "id": 9109, + "name": "FunctionCallOptions", + "src": "15672:47:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8569, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9110, + "name": "Identifier", + "src": "15720:10:58" + } + ], + "id": 9111, + "name": "FunctionCall", + "src": "15672:59:58" + } + ], + "id": 9112, + "name": "VariableDeclarationStatement", + "src": "15653:78:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8559, + "type": "bool", + "value": "allowFail" + }, + "id": 9113, + "name": "Identifier", + "src": "15749:9:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9102, + "type": "bool", + "value": "success" + }, + "id": 9114, + "name": "Identifier", + "src": "15783:7:58" + } + ], + "id": 9115, + "name": "UnaryOperation", + "src": "15782:8:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 8567 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9116, + "name": "Literal", + "src": "15822:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9117, + "name": "Literal", + "src": "15829:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9118, + "name": "Literal", + "src": "15832:1:58" + } + ], + "id": 9119, + "name": "TupleExpression", + "src": "15821:13:58" + } + ], + "id": 9120, + "name": "Return", + "src": "15814:20:58" + } + ], + "id": 9121, + "name": "Block", + "src": "15792:61:58" + } + ], + "id": 9122, + "name": "IfStatement", + "src": "15778:75:58" + } + ], + "id": 9123, + "name": "Block", + "src": "15760:107:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1cf39be99a03bb39414ad01e616c59ec2038a5746618a3f8aee8a485d8d5e50a", + "typeString": "literal_string \"Purchase SeaPort_1_4 failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9124, + "name": "Identifier", + "src": "15891:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9102, + "type": "bool", + "value": "success" + }, + "id": 9125, + "name": "Identifier", + "src": "15899:7:58" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f34206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_4 failed\"", + "value": "Purchase SeaPort_1_4 failed" + }, + "id": 9126, + "name": "Literal", + "src": "15908:29:58" + } + ], + "id": 9127, + "name": "FunctionCall", + "src": "15891:47:58" + } + ], + "id": 9128, + "name": "ExpressionStatement", + "src": "15891:47:58" + } + ], + "id": 9129, + "name": "Block", + "src": "15873:80:58" + } + ], + "id": 9130, + "name": "IfStatement", + "src": "15745:208:58" + } + ], + "id": 9131, + "name": "Block", + "src": "15639:324:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9132, + "name": "Identifier", + "src": "15973:15:58" + } + ], + "id": 9133, + "name": "MemberAccess", + "src": "15973:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "LooksRareV2", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 9134, + "name": "Identifier", + "src": "16001:7:58" + } + ], + "id": 9135, + "name": "MemberAccess", + "src": "16001:19:58" + } + ], + "id": 9136, + "name": "BinaryOperation", + "src": "15973:47:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9138, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9167, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9137, + "name": "ElementaryTypeName", + "src": "16037:4:58" + } + ], + "id": 9138, + "name": "VariableDeclaration", + "src": "16037:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9139, + "name": "ElementaryTypeName", + "src": "16055:7:58" + } + ], + "id": 9140, + "name": "ElementaryTypeNameExpression", + "src": "16055:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8009, + "type": "address", + "value": "looksRareV2" + }, + "id": 9141, + "name": "Identifier", + "src": "16063:11:58" + } + ], + "id": 9142, + "name": "FunctionCall", + "src": "16055:20:58" + } + ], + "id": 9143, + "name": "MemberAccess", + "src": "16055:25:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9144, + "name": "Identifier", + "src": "16088:13:58" + } + ], + "id": 9145, + "name": "FunctionCallOptions", + "src": "16055:47:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8569, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9146, + "name": "Identifier", + "src": "16103:10:58" + } + ], + "id": 9147, + "name": "FunctionCall", + "src": "16055:59:58" + } + ], + "id": 9148, + "name": "VariableDeclarationStatement", + "src": "16036:78:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8559, + "type": "bool", + "value": "allowFail" + }, + "id": 9149, + "name": "Identifier", + "src": "16132:9:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9138, + "type": "bool", + "value": "success" + }, + "id": 9150, + "name": "Identifier", + "src": "16166:7:58" + } + ], + "id": 9151, + "name": "UnaryOperation", + "src": "16165:8:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 8567 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9152, + "name": "Literal", + "src": "16205:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9153, + "name": "Literal", + "src": "16212:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9154, + "name": "Literal", + "src": "16215:1:58" + } + ], + "id": 9155, + "name": "TupleExpression", + "src": "16204:13:58" + } + ], + "id": 9156, + "name": "Return", + "src": "16197:20:58" + } + ], + "id": 9157, + "name": "Block", + "src": "16175:61:58" + } + ], + "id": 9158, + "name": "IfStatement", + "src": "16161:75:58" + } + ], + "id": 9159, + "name": "Block", + "src": "16143:107:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_bf725f533a31a5fc822de78c3f59575168899683c9fc9b37f7d7aa10c766d3c1", + "typeString": "literal_string \"Purchase LooksRareV2 failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9160, + "name": "Identifier", + "src": "16274:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9138, + "type": "bool", + "value": "success" + }, + "id": 9161, + "name": "Identifier", + "src": "16282:7:58" + }, + { + "attributes": { + "hexvalue": "5075726368617365204c6f6f6b73526172655632206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase LooksRareV2 failed\"", + "value": "Purchase LooksRareV2 failed" + }, + "id": 9162, + "name": "Literal", + "src": "16291:29:58" + } + ], + "id": 9163, + "name": "FunctionCall", + "src": "16274:47:58" + } + ], + "id": 9164, + "name": "ExpressionStatement", + "src": "16274:47:58" + } + ], + "id": 9165, + "name": "Block", + "src": "16256:80:58" + } + ], + "id": 9166, + "name": "IfStatement", + "src": "16128:208:58" + } + ], + "id": 9167, + "name": "Block", + "src": "16022:324:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9168, + "name": "Identifier", + "src": "16356:15:58" + } + ], + "id": 9169, + "name": "MemberAccess", + "src": "16356:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "Blur", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 9170, + "name": "Identifier", + "src": "16384:7:58" + } + ], + "id": 9171, + "name": "MemberAccess", + "src": "16384:12:58" + } + ], + "id": 9172, + "name": "BinaryOperation", + "src": "16356:40:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9176, + 9178, + 9180 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "sell", + "scope": 9281, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct IBlur.Input", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "IBlur.Input", + "referencedDeclaration": 10442, + "type": "struct IBlur.Input" + }, + "id": 9175, + "name": "UserDefinedTypeName", + "src": "16413:11:58" + } + ], + "id": 9176, + "name": "VariableDeclaration", + "src": "16413:23:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "buy", + "scope": 9281, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct IBlur.Input", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "IBlur.Input", + "referencedDeclaration": 10442, + "type": "struct IBlur.Input" + }, + "id": 9177, + "name": "UserDefinedTypeName", + "src": "16438:11:58" + } + ], + "id": 9178, + "name": "VariableDeclaration", + "src": "16438:22:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "typeNft", + "scope": 9281, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes4", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes4", + "type": "bytes4" + }, + "id": 9179, + "name": "ElementaryTypeName", + "src": "16462:6:58" + } + ], + "id": 9180, + "name": "VariableDeclaration", + "src": "16462:14:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(struct IBlur.Input memory,struct IBlur.Input memory,bytes4)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_struct$_Input_$10442_storage_ptr_$_$_t_type$_t_struct$_Input_$10442_storage_ptr_$_$_t_type$_t_bytes4_$_$", + "typeString": "tuple(type(struct IBlur.Input storage pointer),type(struct IBlur.Input storage pointer),type(bytes4))" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "decode", + "type": "function () pure" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 9181, + "name": "Identifier", + "src": "16480:3:58" + } + ], + "id": 9182, + "name": "MemberAccess", + "src": "16480:10:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8569, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9183, + "name": "Identifier", + "src": "16491:10:58" + }, + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(type(struct IBlur.Input storage pointer),type(struct IBlur.Input storage pointer),type(bytes4))" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "Input", + "referencedDeclaration": 10442, + "type": "type(struct IBlur.Input storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10450, + "type": "type(contract IBlur)", + "value": "IBlur" + }, + "id": 9184, + "name": "Identifier", + "src": "16504:5:58" + } + ], + "id": 9185, + "name": "MemberAccess", + "src": "16504:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "Input", + "referencedDeclaration": 10442, + "type": "type(struct IBlur.Input storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10450, + "type": "type(contract IBlur)", + "value": "IBlur" + }, + "id": 9186, + "name": "Identifier", + "src": "16517:5:58" + } + ], + "id": 9187, + "name": "MemberAccess", + "src": "16517:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(bytes4)" + }, + "children": [ + { + "attributes": { + "name": "bytes4" + }, + "id": 9188, + "name": "ElementaryTypeName", + "src": "16530:6:58" + } + ], + "id": 9189, + "name": "ElementaryTypeNameExpression", + "src": "16530:6:58" + } + ], + "id": 9190, + "name": "TupleExpression", + "src": "16503:34:58" + } + ], + "id": 9191, + "name": "FunctionCall", + "src": "16480:58:58" + } + ], + "id": 9192, + "name": "VariableDeclarationStatement", + "src": "16412:126:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8559, + "type": "bool", + "value": "allowFail" + }, + "id": 9193, + "name": "Identifier", + "src": "16556:9:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": true, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "execute", + "referencedDeclaration": 10449, + "type": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IBlur", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10450, + "type": "type(contract IBlur)", + "value": "IBlur" + }, + "id": 9194, + "name": "Identifier", + "src": "16589:5:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8011, + "type": "address", + "value": "blur" + }, + "id": 9195, + "name": "Identifier", + "src": "16595:4:58" + } + ], + "id": 9196, + "name": "FunctionCall", + "src": "16589:11:58" + } + ], + "id": 9197, + "name": "MemberAccess", + "src": "16589:19:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9198, + "name": "Identifier", + "src": "16616:13:58" + } + ], + "id": 9199, + "name": "FunctionCallOptions", + "src": "16589:41:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9176, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9200, + "name": "Identifier", + "src": "16631:4:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9178, + "type": "struct IBlur.Input memory", + "value": "buy" + }, + "id": 9201, + "name": "Identifier", + "src": "16637:3:58" + } + ], + "id": 9202, + "name": "FunctionCall", + "src": "16589:52:58" + }, + { + "attributes": { + "errorName": "" + }, + "children": [ + { + "attributes": { + "statements": [ + null + ] + }, + "children": [], + "id": 9203, + "name": "Block", + "src": "16642:2:58" + } + ], + "id": 9204, + "name": "TryCatchClause", + "src": "16642:2:58" + }, + { + "attributes": { + "errorName": "" + }, + "children": [ + { + "children": [ + { + "attributes": { + "functionReturnParameters": 8567 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9205, + "name": "Literal", + "src": "16681:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9206, + "name": "Literal", + "src": "16688:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9207, + "name": "Literal", + "src": "16691:1:58" + } + ], + "id": 9208, + "name": "TupleExpression", + "src": "16680:13:58" + } + ], + "id": 9209, + "name": "Return", + "src": "16673:20:58" + } + ], + "id": 9210, + "name": "Block", + "src": "16651:61:58" + } + ], + "id": 9211, + "name": "TryCatchClause", + "src": "16645:67:58" + } + ], + "id": 9212, + "name": "TryStatement", + "src": "16585:127:58" + } + ], + "id": 9213, + "name": "Block", + "src": "16567:159:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$10442_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "execute", + "referencedDeclaration": 10449, + "type": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IBlur", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10450, + "type": "type(contract IBlur)", + "value": "IBlur" + }, + "id": 9214, + "name": "Identifier", + "src": "16750:5:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8011, + "type": "address", + "value": "blur" + }, + "id": 9215, + "name": "Identifier", + "src": "16756:4:58" + } + ], + "id": 9216, + "name": "FunctionCall", + "src": "16750:11:58" + } + ], + "id": 9217, + "name": "MemberAccess", + "src": "16750:19:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9218, + "name": "Identifier", + "src": "16777:13:58" + } + ], + "id": 9219, + "name": "FunctionCallOptions", + "src": "16750:41:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9176, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9220, + "name": "Identifier", + "src": "16792:4:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9178, + "type": "struct IBlur.Input memory", + "value": "buy" + }, + "id": 9221, + "name": "Identifier", + "src": "16798:3:58" + } + ], + "id": 9222, + "name": "FunctionCall", + "src": "16750:52:58" + } + ], + "id": 9223, + "name": "ExpressionStatement", + "src": "16750:52:58" + } + ], + "id": 9224, + "name": "Block", + "src": "16732:85:58" + } + ], + "id": 9225, + "name": "IfStatement", + "src": "16552:265:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9180, + "type": "bytes4", + "value": "typeNft" + }, + "id": 9226, + "name": "Identifier", + "src": "16834:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "ERC721_ASSET_CLASS", + "referencedDeclaration": 4822, + "type": "bytes4" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4909, + "type": "type(library LibAsset)", + "value": "LibAsset" + }, + "id": 9227, + "name": "Identifier", + "src": "16845:8:58" + } + ], + "id": 9228, + "name": "MemberAccess", + "src": "16845:27:58" + } + ], + "id": 9229, + "name": "BinaryOperation", + "src": "16834:38:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "safeTransferFrom", + "referencedDeclaration": 1299, + "type": "function (address,address,uint256) external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC721Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1356, + "type": "type(contract IERC721Upgradeable)", + "value": "IERC721Upgradeable" + }, + "id": 9230, + "name": "Identifier", + "src": "16892:18:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "collection", + "referencedDeclaration": 10407, + "type": "address" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "order", + "referencedDeclaration": 10429, + "type": "struct IBlur.Order memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9176, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9231, + "name": "Identifier", + "src": "16911:4:58" + } + ], + "id": 9232, + "name": "MemberAccess", + "src": "16911:10:58" + } + ], + "id": 9233, + "name": "MemberAccess", + "src": "16911:21:58" + } + ], + "id": 9234, + "name": "FunctionCall", + "src": "16892:41:58" + } + ], + "id": 9235, + "name": "MemberAccess", + "src": "16892:58:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9236, + "name": "ElementaryTypeName", + "src": "16951:7:58" + } + ], + "id": 9237, + "name": "ElementaryTypeNameExpression", + "src": "16951:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeable", + "value": "this" + }, + "id": 9238, + "name": "Identifier", + "src": "16959:4:58" + } + ], + "id": 9239, + "name": "FunctionCall", + "src": "16951:13:58" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 9240, + "name": "Identifier", + "src": "16966:10:58" + } + ], + "id": 9241, + "name": "FunctionCall", + "src": "16966:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "tokenId", + "referencedDeclaration": 10409, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "order", + "referencedDeclaration": 10429, + "type": "struct IBlur.Order memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9176, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9242, + "name": "Identifier", + "src": "16980:4:58" + } + ], + "id": 9243, + "name": "MemberAccess", + "src": "16980:10:58" + } + ], + "id": 9244, + "name": "MemberAccess", + "src": "16980:18:58" + } + ], + "id": 9245, + "name": "FunctionCall", + "src": "16892:107:58" + } + ], + "id": 9246, + "name": "ExpressionStatement", + "src": "16892:107:58" + } + ], + "id": 9247, + "name": "Block", + "src": "16874:140:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9180, + "type": "bytes4", + "value": "typeNft" + }, + "id": 9248, + "name": "Identifier", + "src": "17024:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "ERC1155_ASSET_CLASS", + "referencedDeclaration": 4830, + "type": "bytes4" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4909, + "type": "type(library LibAsset)", + "value": "LibAsset" + }, + "id": 9249, + "name": "Identifier", + "src": "17035:8:58" + } + ], + "id": 9250, + "name": "MemberAccess", + "src": "17035:28:58" + } + ], + "id": 9251, + "name": "BinaryOperation", + "src": "17024:39:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "safeTransferFrom", + "referencedDeclaration": 1078, + "type": "function (address,address,uint256,uint256,bytes memory) external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC1155Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1095, + "type": "type(contract IERC1155Upgradeable)", + "value": "IERC1155Upgradeable" + }, + "id": 9252, + "name": "Identifier", + "src": "17083:19:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "collection", + "referencedDeclaration": 10407, + "type": "address" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "order", + "referencedDeclaration": 10429, + "type": "struct IBlur.Order memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9176, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9253, + "name": "Identifier", + "src": "17103:4:58" + } + ], + "id": 9254, + "name": "MemberAccess", + "src": "17103:10:58" + } + ], + "id": 9255, + "name": "MemberAccess", + "src": "17103:21:58" + } + ], + "id": 9256, + "name": "FunctionCall", + "src": "17083:42:58" + } + ], + "id": 9257, + "name": "MemberAccess", + "src": "17083:59:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9258, + "name": "ElementaryTypeName", + "src": "17143:7:58" + } + ], + "id": 9259, + "name": "ElementaryTypeNameExpression", + "src": "17143:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeable", + "value": "this" + }, + "id": 9260, + "name": "Identifier", + "src": "17151:4:58" + } + ], + "id": 9261, + "name": "FunctionCall", + "src": "17143:13:58" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 9262, + "name": "Identifier", + "src": "17158:10:58" + } + ], + "id": 9263, + "name": "FunctionCall", + "src": "17158:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "tokenId", + "referencedDeclaration": 10409, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "order", + "referencedDeclaration": 10429, + "type": "struct IBlur.Order memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9176, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9264, + "name": "Identifier", + "src": "17172:4:58" + } + ], + "id": 9265, + "name": "MemberAccess", + "src": "17172:10:58" + } + ], + "id": 9266, + "name": "MemberAccess", + "src": "17172:18:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 10411, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "order", + "referencedDeclaration": 10429, + "type": "struct IBlur.Order memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9176, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9267, + "name": "Identifier", + "src": "17192:4:58" + } + ], + "id": 9268, + "name": "MemberAccess", + "src": "17192:10:58" + } + ], + "id": 9269, + "name": "MemberAccess", + "src": "17192:17:58" + }, + { + "attributes": { + "hexvalue": "", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"\"", + "value": "" + }, + "id": 9270, + "name": "Literal", + "src": "17211:2:58" + } + ], + "id": 9271, + "name": "FunctionCall", + "src": "17083:131:58" + } + ], + "id": 9272, + "name": "ExpressionStatement", + "src": "17083:131:58" + } + ], + "id": 9273, + "name": "Block", + "src": "17065:164:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b", + "typeString": "literal_string \"Unknown token type\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 9274, + "name": "Identifier", + "src": "17253:6:58" + }, + { + "attributes": { + "hexvalue": "556e6b6e6f776e20746f6b656e2074797065", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Unknown token type\"", + "value": "Unknown token type" + }, + "id": 9275, + "name": "Literal", + "src": "17260:20:58" + } + ], + "id": 9276, + "name": "FunctionCall", + "src": "17253:28:58" + } + ], + "id": 9277, + "name": "ExpressionStatement", + "src": "17253:28:58" + } + ], + "id": 9278, + "name": "Block", + "src": "17235:61:58" + } + ], + "id": 9279, + "name": "IfStatement", + "src": "17020:276:58" + } + ], + "id": 9280, + "name": "IfStatement", + "src": "16830:466:58" + } + ], + "id": 9281, + "name": "Block", + "src": "16398:908:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9282, + "name": "Identifier", + "src": "17316:15:58" + } + ], + "id": 9283, + "name": "MemberAccess", + "src": "17316:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_5", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 9284, + "name": "Identifier", + "src": "17344:7:58" + } + ], + "id": 9285, + "name": "MemberAccess", + "src": "17344:19:58" + } + ], + "id": 9286, + "name": "BinaryOperation", + "src": "17316:47:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9288, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9317, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9287, + "name": "ElementaryTypeName", + "src": "17380:4:58" + } + ], + "id": 9288, + "name": "VariableDeclaration", + "src": "17380:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9289, + "name": "ElementaryTypeName", + "src": "17398:7:58" + } + ], + "id": 9290, + "name": "ElementaryTypeNameExpression", + "src": "17398:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8013, + "type": "address", + "value": "seaPort_1_5" + }, + "id": 9291, + "name": "Identifier", + "src": "17406:11:58" + } + ], + "id": 9292, + "name": "FunctionCall", + "src": "17398:20:58" + } + ], + "id": 9293, + "name": "MemberAccess", + "src": "17398:25:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9294, + "name": "Identifier", + "src": "17431:13:58" + } + ], + "id": 9295, + "name": "FunctionCallOptions", + "src": "17398:47:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8569, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9296, + "name": "Identifier", + "src": "17446:10:58" + } + ], + "id": 9297, + "name": "FunctionCall", + "src": "17398:59:58" + } + ], + "id": 9298, + "name": "VariableDeclarationStatement", + "src": "17379:78:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8559, + "type": "bool", + "value": "allowFail" + }, + "id": 9299, + "name": "Identifier", + "src": "17475:9:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9288, + "type": "bool", + "value": "success" + }, + "id": 9300, + "name": "Identifier", + "src": "17509:7:58" + } + ], + "id": 9301, + "name": "UnaryOperation", + "src": "17508:8:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 8567 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9302, + "name": "Literal", + "src": "17548:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9303, + "name": "Literal", + "src": "17555:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9304, + "name": "Literal", + "src": "17558:1:58" + } + ], + "id": 9305, + "name": "TupleExpression", + "src": "17547:13:58" + } + ], + "id": 9306, + "name": "Return", + "src": "17540:20:58" + } + ], + "id": 9307, + "name": "Block", + "src": "17518:61:58" + } + ], + "id": 9308, + "name": "IfStatement", + "src": "17504:75:58" + } + ], + "id": 9309, + "name": "Block", + "src": "17486:107:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_83f62501a9582b49b15f73bfa16e8789fc9181acb73eb6b2a01520c5a8cee0ce", + "typeString": "literal_string \"Purchase SeaPort_1_5 failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9310, + "name": "Identifier", + "src": "17617:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9288, + "type": "bool", + "value": "success" + }, + "id": 9311, + "name": "Identifier", + "src": "17625:7:58" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f35206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_5 failed\"", + "value": "Purchase SeaPort_1_5 failed" + }, + "id": 9312, + "name": "Literal", + "src": "17634:29:58" + } + ], + "id": 9313, + "name": "FunctionCall", + "src": "17617:47:58" + } + ], + "id": 9314, + "name": "ExpressionStatement", + "src": "17617:47:58" + } + ], + "id": 9315, + "name": "Block", + "src": "17599:80:58" + } + ], + "id": 9316, + "name": "IfStatement", + "src": "17471:208:58" + } + ], + "id": 9317, + "name": "Block", + "src": "17365:324:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9318, + "name": "Identifier", + "src": "17699:15:58" + } + ], + "id": 9319, + "name": "MemberAccess", + "src": "17699:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_6", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 9320, + "name": "Identifier", + "src": "17727:7:58" + } + ], + "id": 9321, + "name": "MemberAccess", + "src": "17727:19:58" + } + ], + "id": 9322, + "name": "BinaryOperation", + "src": "17699:47:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9324, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9353, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9323, + "name": "ElementaryTypeName", + "src": "17763:4:58" + } + ], + "id": 9324, + "name": "VariableDeclaration", + "src": "17763:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9325, + "name": "ElementaryTypeName", + "src": "17781:7:58" + } + ], + "id": 9326, + "name": "ElementaryTypeNameExpression", + "src": "17781:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8015, + "type": "address", + "value": "seaPort_1_6" + }, + "id": 9327, + "name": "Identifier", + "src": "17789:11:58" + } + ], + "id": 9328, + "name": "FunctionCall", + "src": "17781:20:58" + } + ], + "id": 9329, + "name": "MemberAccess", + "src": "17781:25:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8583, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9330, + "name": "Identifier", + "src": "17814:13:58" + } + ], + "id": 9331, + "name": "FunctionCallOptions", + "src": "17781:47:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8569, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9332, + "name": "Identifier", + "src": "17829:10:58" + } + ], + "id": 9333, + "name": "FunctionCall", + "src": "17781:59:58" + } + ], + "id": 9334, + "name": "VariableDeclarationStatement", + "src": "17762:78:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8559, + "type": "bool", + "value": "allowFail" + }, + "id": 9335, + "name": "Identifier", + "src": "17858:9:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9324, + "type": "bool", + "value": "success" + }, + "id": 9336, + "name": "Identifier", + "src": "17892:7:58" + } + ], + "id": 9337, + "name": "UnaryOperation", + "src": "17891:8:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 8567 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9338, + "name": "Literal", + "src": "17931:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9339, + "name": "Literal", + "src": "17938:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9340, + "name": "Literal", + "src": "17941:1:58" + } + ], + "id": 9341, + "name": "TupleExpression", + "src": "17930:13:58" + } + ], + "id": 9342, + "name": "Return", + "src": "17923:20:58" + } + ], + "id": 9343, + "name": "Block", + "src": "17901:61:58" + } + ], + "id": 9344, + "name": "IfStatement", + "src": "17887:75:58" + } + ], + "id": 9345, + "name": "Block", + "src": "17869:107:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5320b653cd5780735adae92ac3bcf0fff2a8be3d44e7d778c7caac0f6e924b5d", + "typeString": "literal_string \"Purchase SeaPort_1_6 failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9346, + "name": "Identifier", + "src": "18000:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9324, + "type": "bool", + "value": "success" + }, + "id": 9347, + "name": "Identifier", + "src": "18008:7:58" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f36206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_6 failed\"", + "value": "Purchase SeaPort_1_6 failed" + }, + "id": 9348, + "name": "Literal", + "src": "18017:29:58" + } + ], + "id": 9349, + "name": "FunctionCall", + "src": "18000:47:58" + } + ], + "id": 9350, + "name": "ExpressionStatement", + "src": "18000:47:58" + } + ], + "id": 9351, + "name": "Block", + "src": "17982:80:58" + } + ], + "id": 9352, + "name": "IfStatement", + "src": "17854:208:58" + } + ], + "id": 9353, + "name": "Block", + "src": "17748:324:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_3bc896cadc7524646943368edd2f41dfd35c78e313328c146d90408931cae185", + "typeString": "literal_string \"Unknown marketId ETH\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 9354, + "name": "Identifier", + "src": "18092:6:58" + }, + { + "attributes": { + "hexvalue": "556e6b6e6f776e206d61726b6574496420455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Unknown marketId ETH\"", + "value": "Unknown marketId ETH" + }, + "id": 9355, + "name": "Literal", + "src": "18099:22:58" + } + ], + "id": 9356, + "name": "FunctionCall", + "src": "18092:30:58" + } + ], + "id": 9357, + "name": "ExpressionStatement", + "src": "18092:30:58" + } + ], + "id": 9358, + "name": "Block", + "src": "18078:55:58" + } + ], + "id": 9359, + "name": "IfStatement", + "src": "17695:438:58" + } + ], + "id": 9360, + "name": "IfStatement", + "src": "17312:821:58" + } + ], + "id": 9361, + "name": "IfStatement", + "src": "16352:1781:58" + } + ], + "id": 9362, + "name": "IfStatement", + "src": "15969:2164:58" + } + ], + "id": 9363, + "name": "IfStatement", + "src": "15586:2547:58" + } + ], + "id": 9364, + "name": "IfStatement", + "src": "15212:2921:58" + } + ], + "id": 9365, + "name": "IfStatement", + "src": "14078:4055:58" + } + ], + "id": 9366, + "name": "IfStatement", + "src": "11896:6237:58" + } + ], + "id": 9367, + "name": "IfStatement", + "src": "11519:6614:58" + } + ], + "id": 9368, + "name": "IfStatement", + "src": "11127:7006:58" + } + ], + "id": 9369, + "name": "IfStatement", + "src": "10744:7389:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9946, + "type": "function (uint256[] memory,uint256)", + "value": "transferAdditionalRoyaltiesETH" + }, + "id": 9370, + "name": "Identifier", + "src": "18176:30:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8572, + "type": "uint256[] memory", + "value": "additionalRoyalties" + }, + "id": 9371, + "name": "Identifier", + "src": "18207:19:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8056, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9372, + "name": "Identifier", + "src": "18228:15:58" + } + ], + "id": 9373, + "name": "MemberAccess", + "src": "18228:22:58" + } + ], + "id": 9374, + "name": "FunctionCall", + "src": "18176:75:58" + } + ], + "id": 9375, + "name": "ExpressionStatement", + "src": "18176:75:58" + }, + { + "attributes": { + "assignments": [ + 9377, + 9379 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "firstFeeAmount", + "scope": 9392, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9376, + "name": "ElementaryTypeName", + "src": "18263:7:58" + } + ], + "id": 9377, + "name": "VariableDeclaration", + "src": "18263:22:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "secondFeeAmount", + "scope": 9392, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9378, + "name": "ElementaryTypeName", + "src": "18287:7:58" + } + ], + "id": 9379, + "name": "VariableDeclaration", + "src": "18287:23:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9784, + "type": "function (uint256,uint256) pure returns (uint256,uint256)", + "value": "getFees" + }, + "id": 9380, + "name": "Identifier", + "src": "18314:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8058, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9381, + "name": "Identifier", + "src": "18322:15:58" + } + ], + "id": 9382, + "name": "MemberAccess", + "src": "18322:20:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8056, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8557, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9383, + "name": "Identifier", + "src": "18344:15:58" + } + ], + "id": 9384, + "name": "MemberAccess", + "src": "18344:22:58" + } + ], + "id": 9385, + "name": "FunctionCall", + "src": "18314:53:58" + } + ], + "id": 9386, + "name": "VariableDeclarationStatement", + "src": "18262:105:58" + }, + { + "attributes": { + "functionReturnParameters": 8567 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(bool,uint256,uint256)" + }, + "children": [ + { + "attributes": { + "hexvalue": "74727565", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "true" + }, + "id": 9387, + "name": "Literal", + "src": "18385:4:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9377, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 9388, + "name": "Identifier", + "src": "18391:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9379, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 9389, + "name": "Identifier", + "src": "18407:15:58" + } + ], + "id": 9390, + "name": "TupleExpression", + "src": "18384:39:58" + } + ], + "id": 9391, + "name": "Return", + "src": "18377:46:58" + } + ], + "id": 9392, + "name": "Block", + "src": "10508:7922:58" + } + ], + "id": 9393, + "name": "FunctionDefinition", + "src": "10326:8104:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "purchaseWETH", + "scope": 10382, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice executes one purchase in WETH\n@param purchaseDetails - details about the purchase\n@param allowFail - true if errors are handled, false if revert on errors\n@return result false if execution failed, true if succeded\n@return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n@return secondFeeAmount amount of the second fee of the purchase, 0 if failed" + }, + "id": 9394, + "name": "StructuredDocumentation", + "src": "18436:435:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "purchaseDetails", + "scope": 9624, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "PurchaseDetails", + "referencedDeclaration": 8061, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + }, + "id": 9395, + "name": "UserDefinedTypeName", + "src": "18898:15:58" + } + ], + "id": 9396, + "name": "VariableDeclaration", + "src": "18898:38:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "allowFail", + "scope": 9624, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9397, + "name": "ElementaryTypeName", + "src": "18938:4:58" + } + ], + "id": 9398, + "name": "VariableDeclaration", + "src": "18938:14:58" + } + ], + "id": 9399, + "name": "ParameterList", + "src": "18897:56:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 9624, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9400, + "name": "ElementaryTypeName", + "src": "19001:4:58" + } + ], + "id": 9401, + "name": "VariableDeclaration", + "src": "19001:4:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 9624, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9402, + "name": "ElementaryTypeName", + "src": "19019:7:58" + } + ], + "id": 9403, + "name": "VariableDeclaration", + "src": "19019:7:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 9624, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9404, + "name": "ElementaryTypeName", + "src": "19040:7:58" + } + ], + "id": 9405, + "name": "VariableDeclaration", + "src": "19040:7:58" + } + ], + "id": 9406, + "name": "ParameterList", + "src": "18987:70:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9408, + 9411 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "marketData", + "scope": 9623, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 9407, + "name": "ElementaryTypeName", + "src": "19073:5:58" + } + ], + "id": 9408, + "name": "VariableDeclaration", + "src": "19073:23:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "additionalRoyalties", + "scope": 9623, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9409, + "name": "ElementaryTypeName", + "src": "19098:7:58" + } + ], + "id": 9410, + "name": "ArrayTypeName", + "src": "19098:9:58" + } + ], + "id": 9411, + "name": "VariableDeclaration", + "src": "19098:36:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bytes memory,uint256[] memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9881, + "type": "function (bytes memory,uint256,enum RaribleExchangeWrapperUpgradeable.Markets) pure returns (bytes memory,uint256[] memory)", + "value": "getDataAndAdditionalData" + }, + "id": 9412, + "name": "Identifier", + "src": "19138:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "data", + "referencedDeclaration": 8060, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9396, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9413, + "name": "Identifier", + "src": "19163:15:58" + } + ], + "id": 9414, + "name": "MemberAccess", + "src": "19163:20:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8058, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9396, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9415, + "name": "Identifier", + "src": "19185:15:58" + } + ], + "id": 9416, + "name": "MemberAccess", + "src": "19185:20:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9396, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9417, + "name": "Identifier", + "src": "19207:15:58" + } + ], + "id": 9418, + "name": "MemberAccess", + "src": "19207:24:58" + } + ], + "id": 9419, + "name": "FunctionCall", + "src": "19138:94:58" + } + ], + "id": 9420, + "name": "VariableDeclarationStatement", + "src": "19072:160:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9396, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9421, + "name": "Identifier", + "src": "19264:15:58" + } + ], + "id": 9422, + "name": "MemberAccess", + "src": "19264:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_1", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 9423, + "name": "Identifier", + "src": "19292:7:58" + } + ], + "id": 9424, + "name": "MemberAccess", + "src": "19292:19:58" + } + ], + "id": 9425, + "name": "BinaryOperation", + "src": "19264:47:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9427, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9454, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9426, + "name": "ElementaryTypeName", + "src": "19328:4:58" + } + ], + "id": 9427, + "name": "VariableDeclaration", + "src": "19328:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9428, + "name": "ElementaryTypeName", + "src": "19346:7:58" + } + ], + "id": 9429, + "name": "ElementaryTypeNameExpression", + "src": "19346:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 7999, + "type": "address", + "value": "seaPort_1_1" + }, + "id": 9430, + "name": "Identifier", + "src": "19354:11:58" + } + ], + "id": 9431, + "name": "FunctionCall", + "src": "19346:20:58" + } + ], + "id": 9432, + "name": "MemberAccess", + "src": "19346:25:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9408, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9433, + "name": "Identifier", + "src": "19372:10:58" + } + ], + "id": 9434, + "name": "FunctionCall", + "src": "19346:37:58" + } + ], + "id": 9435, + "name": "VariableDeclarationStatement", + "src": "19327:56:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9398, + "type": "bool", + "value": "allowFail" + }, + "id": 9436, + "name": "Identifier", + "src": "19401:9:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9427, + "type": "bool", + "value": "success" + }, + "id": 9437, + "name": "Identifier", + "src": "19435:7:58" + } + ], + "id": 9438, + "name": "UnaryOperation", + "src": "19434:8:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9406 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9439, + "name": "Literal", + "src": "19474:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9440, + "name": "Literal", + "src": "19481:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9441, + "name": "Literal", + "src": "19484:1:58" + } + ], + "id": 9442, + "name": "TupleExpression", + "src": "19473:13:58" + } + ], + "id": 9443, + "name": "Return", + "src": "19466:20:58" + } + ], + "id": 9444, + "name": "Block", + "src": "19444:61:58" + } + ], + "id": 9445, + "name": "IfStatement", + "src": "19430:75:58" + } + ], + "id": 9446, + "name": "Block", + "src": "19412:107:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9d7bf9b147b8e8ea1a011a4553d7d866e6536c248028d8dc1aeaa1b40c8d32c7", + "typeString": "literal_string \"Purchase SeaPort_1_1 failed WETH\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9447, + "name": "Identifier", + "src": "19543:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9427, + "type": "bool", + "value": "success" + }, + "id": 9448, + "name": "Identifier", + "src": "19551:7:58" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f31206661696c65642057455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_1 failed WETH\"", + "value": "Purchase SeaPort_1_1 failed WETH" + }, + "id": 9449, + "name": "Literal", + "src": "19560:34:58" + } + ], + "id": 9450, + "name": "FunctionCall", + "src": "19543:52:58" + } + ], + "id": 9451, + "name": "ExpressionStatement", + "src": "19543:52:58" + } + ], + "id": 9452, + "name": "Block", + "src": "19525:85:58" + } + ], + "id": 9453, + "name": "IfStatement", + "src": "19397:213:58" + } + ], + "id": 9454, + "name": "Block", + "src": "19313:307:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9396, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9455, + "name": "Identifier", + "src": "19630:15:58" + } + ], + "id": 9456, + "name": "MemberAccess", + "src": "19630:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "ExchangeV2", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 9457, + "name": "Identifier", + "src": "19658:7:58" + } + ], + "id": 9458, + "name": "MemberAccess", + "src": "19658:18:58" + } + ], + "id": 9459, + "name": "BinaryOperation", + "src": "19630:46:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9461, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9488, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9460, + "name": "ElementaryTypeName", + "src": "19693:4:58" + } + ], + "id": 9461, + "name": "VariableDeclaration", + "src": "19693:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9462, + "name": "ElementaryTypeName", + "src": "19711:7:58" + } + ], + "id": 9463, + "name": "ElementaryTypeNameExpression", + "src": "19711:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 7997, + "type": "address", + "value": "exchangeV2" + }, + "id": 9464, + "name": "Identifier", + "src": "19719:10:58" + } + ], + "id": 9465, + "name": "FunctionCall", + "src": "19711:19:58" + } + ], + "id": 9466, + "name": "MemberAccess", + "src": "19711:24:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9408, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9467, + "name": "Identifier", + "src": "19736:10:58" + } + ], + "id": 9468, + "name": "FunctionCall", + "src": "19711:36:58" + } + ], + "id": 9469, + "name": "VariableDeclarationStatement", + "src": "19692:55:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9398, + "type": "bool", + "value": "allowFail" + }, + "id": 9470, + "name": "Identifier", + "src": "19765:9:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9461, + "type": "bool", + "value": "success" + }, + "id": 9471, + "name": "Identifier", + "src": "19799:7:58" + } + ], + "id": 9472, + "name": "UnaryOperation", + "src": "19798:8:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9406 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9473, + "name": "Literal", + "src": "19838:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9474, + "name": "Literal", + "src": "19845:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9475, + "name": "Literal", + "src": "19848:1:58" + } + ], + "id": 9476, + "name": "TupleExpression", + "src": "19837:13:58" + } + ], + "id": 9477, + "name": "Return", + "src": "19830:20:58" + } + ], + "id": 9478, + "name": "Block", + "src": "19808:61:58" + } + ], + "id": 9479, + "name": "IfStatement", + "src": "19794:75:58" + } + ], + "id": 9480, + "name": "Block", + "src": "19776:107:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2ec0a2b485cd497572ad8de2f4110630fd04a79c3fc75a9aaa133bc5c098fd7e", + "typeString": "literal_string \"Purchase rarible failed WETH\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9481, + "name": "Identifier", + "src": "19907:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9461, + "type": "bool", + "value": "success" + }, + "id": 9482, + "name": "Identifier", + "src": "19915:7:58" + }, + { + "attributes": { + "hexvalue": "50757263686173652072617269626c65206661696c65642057455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase rarible failed WETH\"", + "value": "Purchase rarible failed WETH" + }, + "id": 9483, + "name": "Literal", + "src": "19924:30:58" + } + ], + "id": 9484, + "name": "FunctionCall", + "src": "19907:48:58" + } + ], + "id": 9485, + "name": "ExpressionStatement", + "src": "19907:48:58" + } + ], + "id": 9486, + "name": "Block", + "src": "19889:81:58" + } + ], + "id": 9487, + "name": "IfStatement", + "src": "19761:209:58" + } + ], + "id": 9488, + "name": "Block", + "src": "19678:302:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9396, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9489, + "name": "Identifier", + "src": "19990:15:58" + } + ], + "id": 9490, + "name": "MemberAccess", + "src": "19990:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_4", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 9491, + "name": "Identifier", + "src": "20018:7:58" + } + ], + "id": 9492, + "name": "MemberAccess", + "src": "20018:19:58" + } + ], + "id": 9493, + "name": "BinaryOperation", + "src": "19990:47:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9495, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9522, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9494, + "name": "ElementaryTypeName", + "src": "20054:4:58" + } + ], + "id": 9495, + "name": "VariableDeclaration", + "src": "20054:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9496, + "name": "ElementaryTypeName", + "src": "20072:7:58" + } + ], + "id": 9497, + "name": "ElementaryTypeNameExpression", + "src": "20072:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8007, + "type": "address", + "value": "seaPort_1_4" + }, + "id": 9498, + "name": "Identifier", + "src": "20080:11:58" + } + ], + "id": 9499, + "name": "FunctionCall", + "src": "20072:20:58" + } + ], + "id": 9500, + "name": "MemberAccess", + "src": "20072:25:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9408, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9501, + "name": "Identifier", + "src": "20098:10:58" + } + ], + "id": 9502, + "name": "FunctionCall", + "src": "20072:37:58" + } + ], + "id": 9503, + "name": "VariableDeclarationStatement", + "src": "20053:56:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9398, + "type": "bool", + "value": "allowFail" + }, + "id": 9504, + "name": "Identifier", + "src": "20127:9:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9495, + "type": "bool", + "value": "success" + }, + "id": 9505, + "name": "Identifier", + "src": "20161:7:58" + } + ], + "id": 9506, + "name": "UnaryOperation", + "src": "20160:8:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9406 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9507, + "name": "Literal", + "src": "20200:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9508, + "name": "Literal", + "src": "20207:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9509, + "name": "Literal", + "src": "20210:1:58" + } + ], + "id": 9510, + "name": "TupleExpression", + "src": "20199:13:58" + } + ], + "id": 9511, + "name": "Return", + "src": "20192:20:58" + } + ], + "id": 9512, + "name": "Block", + "src": "20170:61:58" + } + ], + "id": 9513, + "name": "IfStatement", + "src": "20156:75:58" + } + ], + "id": 9514, + "name": "Block", + "src": "20138:107:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_05a847584de3c2ae6c800d1f7b0a5d67e8bceaac16366dec690fd8433d46a23a", + "typeString": "literal_string \"Purchase SeaPort_1_4 failed WETH\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9515, + "name": "Identifier", + "src": "20269:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9495, + "type": "bool", + "value": "success" + }, + "id": 9516, + "name": "Identifier", + "src": "20277:7:58" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f34206661696c65642057455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_4 failed WETH\"", + "value": "Purchase SeaPort_1_4 failed WETH" + }, + "id": 9517, + "name": "Literal", + "src": "20286:34:58" + } + ], + "id": 9518, + "name": "FunctionCall", + "src": "20269:52:58" + } + ], + "id": 9519, + "name": "ExpressionStatement", + "src": "20269:52:58" + } + ], + "id": 9520, + "name": "Block", + "src": "20251:85:58" + } + ], + "id": 9521, + "name": "IfStatement", + "src": "20123:213:58" + } + ], + "id": 9522, + "name": "Block", + "src": "20039:307:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9396, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9523, + "name": "Identifier", + "src": "20356:15:58" + } + ], + "id": 9524, + "name": "MemberAccess", + "src": "20356:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_5", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 9525, + "name": "Identifier", + "src": "20384:7:58" + } + ], + "id": 9526, + "name": "MemberAccess", + "src": "20384:19:58" + } + ], + "id": 9527, + "name": "BinaryOperation", + "src": "20356:47:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9529, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9556, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9528, + "name": "ElementaryTypeName", + "src": "20420:4:58" + } + ], + "id": 9529, + "name": "VariableDeclaration", + "src": "20420:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9530, + "name": "ElementaryTypeName", + "src": "20438:7:58" + } + ], + "id": 9531, + "name": "ElementaryTypeNameExpression", + "src": "20438:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8013, + "type": "address", + "value": "seaPort_1_5" + }, + "id": 9532, + "name": "Identifier", + "src": "20446:11:58" + } + ], + "id": 9533, + "name": "FunctionCall", + "src": "20438:20:58" + } + ], + "id": 9534, + "name": "MemberAccess", + "src": "20438:25:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9408, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9535, + "name": "Identifier", + "src": "20464:10:58" + } + ], + "id": 9536, + "name": "FunctionCall", + "src": "20438:37:58" + } + ], + "id": 9537, + "name": "VariableDeclarationStatement", + "src": "20419:56:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9398, + "type": "bool", + "value": "allowFail" + }, + "id": 9538, + "name": "Identifier", + "src": "20493:9:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9529, + "type": "bool", + "value": "success" + }, + "id": 9539, + "name": "Identifier", + "src": "20527:7:58" + } + ], + "id": 9540, + "name": "UnaryOperation", + "src": "20526:8:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9406 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9541, + "name": "Literal", + "src": "20566:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9542, + "name": "Literal", + "src": "20573:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9543, + "name": "Literal", + "src": "20576:1:58" + } + ], + "id": 9544, + "name": "TupleExpression", + "src": "20565:13:58" + } + ], + "id": 9545, + "name": "Return", + "src": "20558:20:58" + } + ], + "id": 9546, + "name": "Block", + "src": "20536:61:58" + } + ], + "id": 9547, + "name": "IfStatement", + "src": "20522:75:58" + } + ], + "id": 9548, + "name": "Block", + "src": "20504:107:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1461016c88004ca93c55e893467e5e7d0c1ff55121e923be5ca0e173134693e9", + "typeString": "literal_string \"Purchase SeaPort_1_5 failed WETH\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9549, + "name": "Identifier", + "src": "20635:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9529, + "type": "bool", + "value": "success" + }, + "id": 9550, + "name": "Identifier", + "src": "20643:7:58" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f35206661696c65642057455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_5 failed WETH\"", + "value": "Purchase SeaPort_1_5 failed WETH" + }, + "id": 9551, + "name": "Literal", + "src": "20652:34:58" + } + ], + "id": 9552, + "name": "FunctionCall", + "src": "20635:52:58" + } + ], + "id": 9553, + "name": "ExpressionStatement", + "src": "20635:52:58" + } + ], + "id": 9554, + "name": "Block", + "src": "20617:85:58" + } + ], + "id": 9555, + "name": "IfStatement", + "src": "20489:213:58" + } + ], + "id": 9556, + "name": "Block", + "src": "20405:307:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9396, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9557, + "name": "Identifier", + "src": "20722:15:58" + } + ], + "id": 9558, + "name": "MemberAccess", + "src": "20722:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_6", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 9559, + "name": "Identifier", + "src": "20750:7:58" + } + ], + "id": 9560, + "name": "MemberAccess", + "src": "20750:19:58" + } + ], + "id": 9561, + "name": "BinaryOperation", + "src": "20722:47:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9563, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9590, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9562, + "name": "ElementaryTypeName", + "src": "20786:4:58" + } + ], + "id": 9563, + "name": "VariableDeclaration", + "src": "20786:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9564, + "name": "ElementaryTypeName", + "src": "20804:7:58" + } + ], + "id": 9565, + "name": "ElementaryTypeNameExpression", + "src": "20804:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8015, + "type": "address", + "value": "seaPort_1_6" + }, + "id": 9566, + "name": "Identifier", + "src": "20812:11:58" + } + ], + "id": 9567, + "name": "FunctionCall", + "src": "20804:20:58" + } + ], + "id": 9568, + "name": "MemberAccess", + "src": "20804:25:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9408, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9569, + "name": "Identifier", + "src": "20830:10:58" + } + ], + "id": 9570, + "name": "FunctionCall", + "src": "20804:37:58" + } + ], + "id": 9571, + "name": "VariableDeclarationStatement", + "src": "20785:56:58" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9398, + "type": "bool", + "value": "allowFail" + }, + "id": 9572, + "name": "Identifier", + "src": "20859:9:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9563, + "type": "bool", + "value": "success" + }, + "id": 9573, + "name": "Identifier", + "src": "20893:7:58" + } + ], + "id": 9574, + "name": "UnaryOperation", + "src": "20892:8:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9406 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9575, + "name": "Literal", + "src": "20932:5:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9576, + "name": "Literal", + "src": "20939:1:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9577, + "name": "Literal", + "src": "20942:1:58" + } + ], + "id": 9578, + "name": "TupleExpression", + "src": "20931:13:58" + } + ], + "id": 9579, + "name": "Return", + "src": "20924:20:58" + } + ], + "id": 9580, + "name": "Block", + "src": "20902:61:58" + } + ], + "id": 9581, + "name": "IfStatement", + "src": "20888:75:58" + } + ], + "id": 9582, + "name": "Block", + "src": "20870:107:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7d4fa3070cdac7b556bda72a8ba21317d4366b909fe8ae7528922ba67829f31c", + "typeString": "literal_string \"Purchase SeaPort_1_6 failed WETH\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9583, + "name": "Identifier", + "src": "21001:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9563, + "type": "bool", + "value": "success" + }, + "id": 9584, + "name": "Identifier", + "src": "21009:7:58" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f36206661696c65642057455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_6 failed WETH\"", + "value": "Purchase SeaPort_1_6 failed WETH" + }, + "id": 9585, + "name": "Literal", + "src": "21018:34:58" + } + ], + "id": 9586, + "name": "FunctionCall", + "src": "21001:52:58" + } + ], + "id": 9587, + "name": "ExpressionStatement", + "src": "21001:52:58" + } + ], + "id": 9588, + "name": "Block", + "src": "20983:85:58" + } + ], + "id": 9589, + "name": "IfStatement", + "src": "20855:213:58" + } + ], + "id": 9590, + "name": "Block", + "src": "20771:307:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_6c57fe9713182a834bdd4831295dedf89e8ff161b7041e5a8170e9b0afd4c42f", + "typeString": "literal_string \"Unknown marketId WETH\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 9591, + "name": "Identifier", + "src": "21098:6:58" + }, + { + "attributes": { + "hexvalue": "556e6b6e6f776e206d61726b657449642057455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Unknown marketId WETH\"", + "value": "Unknown marketId WETH" + }, + "id": 9592, + "name": "Literal", + "src": "21105:23:58" + } + ], + "id": 9593, + "name": "FunctionCall", + "src": "21098:31:58" + } + ], + "id": 9594, + "name": "ExpressionStatement", + "src": "21098:31:58" + } + ], + "id": 9595, + "name": "Block", + "src": "21084:56:58" + } + ], + "id": 9596, + "name": "IfStatement", + "src": "20718:422:58" + } + ], + "id": 9597, + "name": "IfStatement", + "src": "20352:788:58" + } + ], + "id": 9598, + "name": "IfStatement", + "src": "19986:1154:58" + } + ], + "id": 9599, + "name": "IfStatement", + "src": "19626:1514:58" + } + ], + "id": 9600, + "name": "IfStatement", + "src": "19260:1880:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10011, + "type": "function (uint256[] memory,uint256)", + "value": "transferAdditionalRoyaltiesWETH" + }, + "id": 9601, + "name": "Identifier", + "src": "21179:31:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9411, + "type": "uint256[] memory", + "value": "additionalRoyalties" + }, + "id": 9602, + "name": "Identifier", + "src": "21211:19:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8056, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9396, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9603, + "name": "Identifier", + "src": "21232:15:58" + } + ], + "id": 9604, + "name": "MemberAccess", + "src": "21232:22:58" + } + ], + "id": 9605, + "name": "FunctionCall", + "src": "21179:76:58" + } + ], + "id": 9606, + "name": "ExpressionStatement", + "src": "21179:76:58" + }, + { + "attributes": { + "assignments": [ + 9608, + 9610 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "firstFeeAmount", + "scope": 9623, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9607, + "name": "ElementaryTypeName", + "src": "21286:7:58" + } + ], + "id": 9608, + "name": "VariableDeclaration", + "src": "21286:22:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "secondFeeAmount", + "scope": 9623, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9609, + "name": "ElementaryTypeName", + "src": "21310:7:58" + } + ], + "id": 9610, + "name": "VariableDeclaration", + "src": "21310:23:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9784, + "type": "function (uint256,uint256) pure returns (uint256,uint256)", + "value": "getFees" + }, + "id": 9611, + "name": "Identifier", + "src": "21337:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8058, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9396, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9612, + "name": "Identifier", + "src": "21345:15:58" + } + ], + "id": 9613, + "name": "MemberAccess", + "src": "21345:20:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8056, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9396, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9614, + "name": "Identifier", + "src": "21367:15:58" + } + ], + "id": 9615, + "name": "MemberAccess", + "src": "21367:22:58" + } + ], + "id": 9616, + "name": "FunctionCall", + "src": "21337:53:58" + } + ], + "id": 9617, + "name": "VariableDeclarationStatement", + "src": "21285:105:58" + }, + { + "attributes": { + "functionReturnParameters": 9406 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(bool,uint256,uint256)" + }, + "children": [ + { + "attributes": { + "hexvalue": "74727565", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "true" + }, + "id": 9618, + "name": "Literal", + "src": "21408:4:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9608, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 9619, + "name": "Identifier", + "src": "21414:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9610, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 9620, + "name": "Identifier", + "src": "21430:15:58" + } + ], + "id": 9621, + "name": "TupleExpression", + "src": "21407:39:58" + } + ], + "id": 9622, + "name": "Return", + "src": "21400:46:58" + } + ], + "id": 9623, + "name": "Block", + "src": "19062:2391:58" + } + ], + "id": 9624, + "name": "FunctionDefinition", + "src": "18876:2577:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "transferFeeETH", + "scope": 10382, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice transfers ETH fee to feeRecipient\n@param feeAmount - amount to be transfered\n@param feeRecipient - address of the recipient" + }, + "id": 9625, + "name": "StructuredDocumentation", + "src": "21459:167:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeAmount", + "scope": 9652, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9626, + "name": "ElementaryTypeName", + "src": "21655:7:58" + } + ], + "id": 9627, + "name": "VariableDeclaration", + "src": "21655:17:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeRecipient", + "scope": 9652, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 9628, + "name": "ElementaryTypeName", + "src": "21674:7:58" + } + ], + "id": 9629, + "name": "VariableDeclaration", + "src": "21674:20:58" + } + ], + "id": 9630, + "name": "ParameterList", + "src": "21654:41:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 9631, + "name": "ParameterList", + "src": "21705:0:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "&&", + "type": "bool" + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9627, + "type": "uint256", + "value": "feeAmount" + }, + "id": 9632, + "name": "Identifier", + "src": "21719:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9633, + "name": "Literal", + "src": "21731:1:58" + } + ], + "id": 9634, + "name": "BinaryOperation", + "src": "21719:13:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9629, + "type": "address", + "value": "feeRecipient" + }, + "id": 9635, + "name": "Identifier", + "src": "21736:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9636, + "name": "ElementaryTypeName", + "src": "21752:7:58" + } + ], + "id": 9637, + "name": "ElementaryTypeNameExpression", + "src": "21752:7:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9638, + "name": "Literal", + "src": "21760:1:58" + } + ], + "id": 9639, + "name": "FunctionCall", + "src": "21752:10:58" + } + ], + "id": 9640, + "name": "BinaryOperation", + "src": "21736:26:58" + } + ], + "id": 9641, + "name": "BinaryOperation", + "src": "21719:43:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transferEth", + "referencedDeclaration": 7807, + "type": "function (address,uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 7808, + "type": "type(library LibTransfer)", + "value": "LibTransfer" + }, + "id": 9642, + "name": "Identifier", + "src": "21778:11:58" + } + ], + "id": 9644, + "name": "MemberAccess", + "src": "21778:23:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9629, + "type": "address", + "value": "feeRecipient" + }, + "id": 9645, + "name": "Identifier", + "src": "21802:12:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9627, + "type": "uint256", + "value": "feeAmount" + }, + "id": 9646, + "name": "Identifier", + "src": "21816:9:58" + } + ], + "id": 9647, + "name": "FunctionCall", + "src": "21778:48:58" + } + ], + "id": 9648, + "name": "ExpressionStatement", + "src": "21778:48:58" + } + ], + "id": 9649, + "name": "Block", + "src": "21764:73:58" + } + ], + "id": 9650, + "name": "IfStatement", + "src": "21715:122:58" + } + ], + "id": 9651, + "name": "Block", + "src": "21705:138:58" + } + ], + "id": 9652, + "name": "FunctionDefinition", + "src": "21631:212:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "transferFeeWETH", + "scope": 10382, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice transfers WETH fee to feeRecipient\n@param feeAmount - amount to be transfered\n@param feeRecipient - address of the recipient" + }, + "id": 9653, + "name": "StructuredDocumentation", + "src": "21849:168:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeAmount", + "scope": 9681, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9654, + "name": "ElementaryTypeName", + "src": "22047:7:58" + } + ], + "id": 9655, + "name": "VariableDeclaration", + "src": "22047:17:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeRecipient", + "scope": 9681, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 9656, + "name": "ElementaryTypeName", + "src": "22066:7:58" + } + ], + "id": 9657, + "name": "VariableDeclaration", + "src": "22066:20:58" + } + ], + "id": 9658, + "name": "ParameterList", + "src": "22046:41:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 9659, + "name": "ParameterList", + "src": "22097:0:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "&&", + "type": "bool" + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9655, + "type": "uint256", + "value": "feeAmount" + }, + "id": 9660, + "name": "Identifier", + "src": "22111:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9661, + "name": "Literal", + "src": "22123:1:58" + } + ], + "id": 9662, + "name": "BinaryOperation", + "src": "22111:13:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9657, + "type": "address", + "value": "feeRecipient" + }, + "id": 9663, + "name": "Identifier", + "src": "22128:12:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9664, + "name": "ElementaryTypeName", + "src": "22144:7:58" + } + ], + "id": 9665, + "name": "ElementaryTypeNameExpression", + "src": "22144:7:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9666, + "name": "Literal", + "src": "22152:1:58" + } + ], + "id": 9667, + "name": "FunctionCall", + "src": "22144:10:58" + } + ], + "id": 9668, + "name": "BinaryOperation", + "src": "22128:26:58" + } + ], + "id": 9669, + "name": "BinaryOperation", + "src": "22111:43:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transfer", + "referencedDeclaration": 1122, + "type": "function (address,uint256) external returns (bool)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 9670, + "name": "Identifier", + "src": "22170:17:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8017, + "type": "address", + "value": "weth" + }, + "id": 9671, + "name": "Identifier", + "src": "22188:4:58" + } + ], + "id": 9672, + "name": "FunctionCall", + "src": "22170:23:58" + } + ], + "id": 9673, + "name": "MemberAccess", + "src": "22170:32:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9657, + "type": "address", + "value": "feeRecipient" + }, + "id": 9674, + "name": "Identifier", + "src": "22203:12:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9655, + "type": "uint256", + "value": "feeAmount" + }, + "id": 9675, + "name": "Identifier", + "src": "22217:9:58" + } + ], + "id": 9676, + "name": "FunctionCall", + "src": "22170:57:58" + } + ], + "id": 9677, + "name": "ExpressionStatement", + "src": "22170:57:58" + } + ], + "id": 9678, + "name": "Block", + "src": "22156:82:58" + } + ], + "id": 9679, + "name": "IfStatement", + "src": "22107:131:58" + } + ], + "id": 9680, + "name": "Block", + "src": "22097:147:58" + } + ], + "id": 9681, + "name": "FunctionDefinition", + "src": "22022:222:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "transferChange", + "scope": 10382, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice transfers change back to sender" + }, + "id": 9682, + "name": "StructuredDocumentation", + "src": "22250:59:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 9683, + "name": "ParameterList", + "src": "22337:2:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 9684, + "name": "ParameterList", + "src": "22349:0:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9686 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "ethAmount", + "scope": 9707, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9685, + "name": "ElementaryTypeName", + "src": "22359:7:58" + } + ], + "id": 9686, + "name": "VariableDeclaration", + "src": "22359:17:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "balance", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9687, + "name": "ElementaryTypeName", + "src": "22379:7:58" + } + ], + "id": 9688, + "name": "ElementaryTypeNameExpression", + "src": "22379:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeable", + "value": "this" + }, + "id": 9689, + "name": "Identifier", + "src": "22387:4:58" + } + ], + "id": 9690, + "name": "FunctionCall", + "src": "22379:13:58" + } + ], + "id": 9691, + "name": "MemberAccess", + "src": "22379:21:58" + } + ], + "id": 9692, + "name": "VariableDeclarationStatement", + "src": "22359:41:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9686, + "type": "uint256", + "value": "ethAmount" + }, + "id": 9693, + "name": "Identifier", + "src": "22414:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9694, + "name": "Literal", + "src": "22426:1:58" + } + ], + "id": 9695, + "name": "BinaryOperation", + "src": "22414:13:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transferEth", + "referencedDeclaration": 7807, + "type": "function (address,uint256)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9696, + "name": "ElementaryTypeName", + "src": "22443:7:58" + } + ], + "id": 9697, + "name": "ElementaryTypeNameExpression", + "src": "22443:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "type": "address payable" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967281, + "type": "msg", + "value": "msg" + }, + "id": 9698, + "name": "Identifier", + "src": "22451:3:58" + } + ], + "id": 9699, + "name": "MemberAccess", + "src": "22451:10:58" + } + ], + "id": 9700, + "name": "FunctionCall", + "src": "22443:19:58" + } + ], + "id": 9701, + "name": "MemberAccess", + "src": "22443:31:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9686, + "type": "uint256", + "value": "ethAmount" + }, + "id": 9702, + "name": "Identifier", + "src": "22475:9:58" + } + ], + "id": 9703, + "name": "FunctionCall", + "src": "22443:42:58" + } + ], + "id": 9704, + "name": "ExpressionStatement", + "src": "22443:42:58" + } + ], + "id": 9705, + "name": "Block", + "src": "22429:67:58" + } + ], + "id": 9706, + "name": "IfStatement", + "src": "22410:86:58" + } + ], + "id": 9707, + "name": "Block", + "src": "22349:153:58" + } + ], + "id": 9708, + "name": "FunctionDefinition", + "src": "22314:188:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "transferChangeWETH", + "scope": 10382, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice transfers weth change back to sender" + }, + "id": 9709, + "name": "StructuredDocumentation", + "src": "22508:64:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 9710, + "name": "ParameterList", + "src": "22604:2:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 9711, + "name": "ParameterList", + "src": "22616:0:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9713 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "wethAmount", + "scope": 9738, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9712, + "name": "ElementaryTypeName", + "src": "22626:7:58" + } + ], + "id": 9713, + "name": "VariableDeclaration", + "src": "22626:18:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "balanceOf", + "referencedDeclaration": 1112, + "type": "function (address) view external returns (uint256)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 9714, + "name": "Identifier", + "src": "22647:17:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8017, + "type": "address", + "value": "weth" + }, + "id": 9715, + "name": "Identifier", + "src": "22665:4:58" + } + ], + "id": 9716, + "name": "FunctionCall", + "src": "22647:23:58" + } + ], + "id": 9717, + "name": "MemberAccess", + "src": "22647:33:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeable_$10382", + "typeString": "contract RaribleExchangeWrapperUpgradeable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9718, + "name": "ElementaryTypeName", + "src": "22681:7:58" + } + ], + "id": 9719, + "name": "ElementaryTypeNameExpression", + "src": "22681:7:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeable", + "value": "this" + }, + "id": 9720, + "name": "Identifier", + "src": "22689:4:58" + } + ], + "id": 9721, + "name": "FunctionCall", + "src": "22681:13:58" + } + ], + "id": 9722, + "name": "FunctionCall", + "src": "22647:48:58" + } + ], + "id": 9723, + "name": "VariableDeclarationStatement", + "src": "22626:69:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9713, + "type": "uint256", + "value": "wethAmount" + }, + "id": 9724, + "name": "Identifier", + "src": "22709:10:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9725, + "name": "Literal", + "src": "22722:1:58" + } + ], + "id": 9726, + "name": "BinaryOperation", + "src": "22709:14:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transfer", + "referencedDeclaration": 1122, + "type": "function (address,uint256) external returns (bool)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 9727, + "name": "Identifier", + "src": "22739:17:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8017, + "type": "address", + "value": "weth" + }, + "id": 9728, + "name": "Identifier", + "src": "22757:4:58" + } + ], + "id": 9729, + "name": "FunctionCall", + "src": "22739:23:58" + } + ], + "id": 9730, + "name": "MemberAccess", + "src": "22739:32:58" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 9731, + "name": "Identifier", + "src": "22772:10:58" + } + ], + "id": 9732, + "name": "FunctionCall", + "src": "22772:12:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9713, + "type": "uint256", + "value": "wethAmount" + }, + "id": 9733, + "name": "Identifier", + "src": "22786:10:58" + } + ], + "id": 9734, + "name": "FunctionCall", + "src": "22739:58:58" + } + ], + "id": 9735, + "name": "ExpressionStatement", + "src": "22739:58:58" + } + ], + "id": 9736, + "name": "Block", + "src": "22725:83:58" + } + ], + "id": 9737, + "name": "IfStatement", + "src": "22705:103:58" + } + ], + "id": 9738, + "name": "Block", + "src": "22616:198:58" + } + ], + "id": 9739, + "name": "FunctionDefinition", + "src": "22577:237:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "getFees", + "scope": 10382, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice parses fees in base points from one uint and calculates real amount of fees\n@param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n@param amount price of the order\n@return firstFeeAmount real amount for the first fee\n@return secondFeeAmount real amount for the second fee" + }, + "id": 9740, + "name": "StructuredDocumentation", + "src": "22820:393:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "fees", + "scope": 9784, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9741, + "name": "ElementaryTypeName", + "src": "23235:7:58" + } + ], + "id": 9742, + "name": "VariableDeclaration", + "src": "23235:12:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "amount", + "scope": 9784, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9743, + "name": "ElementaryTypeName", + "src": "23249:7:58" + } + ], + "id": 9744, + "name": "VariableDeclaration", + "src": "23249:14:58" + } + ], + "id": 9745, + "name": "ParameterList", + "src": "23234:30:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 9784, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9746, + "name": "ElementaryTypeName", + "src": "23288:7:58" + } + ], + "id": 9747, + "name": "VariableDeclaration", + "src": "23288:7:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 9784, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9748, + "name": "ElementaryTypeName", + "src": "23297:7:58" + } + ], + "id": 9749, + "name": "VariableDeclaration", + "src": "23297:7:58" + } + ], + "id": 9750, + "name": "ParameterList", + "src": "23287:18:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9752 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "firstFee", + "scope": 9783, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9751, + "name": "ElementaryTypeName", + "src": "23316:7:58" + } + ], + "id": 9752, + "name": "VariableDeclaration", + "src": "23316:16:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 9753, + "name": "ElementaryTypeName", + "src": "23335:7:58" + } + ], + "id": 9754, + "name": "ElementaryTypeNameExpression", + "src": "23335:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint16", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint16)" + }, + "children": [ + { + "attributes": { + "name": "uint16" + }, + "id": 9755, + "name": "ElementaryTypeName", + "src": "23343:6:58" + } + ], + "id": 9756, + "name": "ElementaryTypeNameExpression", + "src": "23343:6:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">>", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9742, + "type": "uint256", + "value": "fees" + }, + "id": 9757, + "name": "Identifier", + "src": "23350:4:58" + }, + { + "attributes": { + "hexvalue": "3136", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 16", + "value": "16" + }, + "id": 9758, + "name": "Literal", + "src": "23358:2:58" + } + ], + "id": 9759, + "name": "BinaryOperation", + "src": "23350:10:58" + } + ], + "id": 9760, + "name": "FunctionCall", + "src": "23343:18:58" + } + ], + "id": 9761, + "name": "FunctionCall", + "src": "23335:27:58" + } + ], + "id": 9762, + "name": "VariableDeclarationStatement", + "src": "23316:46:58" + }, + { + "attributes": { + "assignments": [ + 9764 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "secondFee", + "scope": 9783, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9763, + "name": "ElementaryTypeName", + "src": "23372:7:58" + } + ], + "id": 9764, + "name": "VariableDeclaration", + "src": "23372:17:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 9765, + "name": "ElementaryTypeName", + "src": "23392:7:58" + } + ], + "id": 9766, + "name": "ElementaryTypeNameExpression", + "src": "23392:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint16", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint16)" + }, + "children": [ + { + "attributes": { + "name": "uint16" + }, + "id": 9767, + "name": "ElementaryTypeName", + "src": "23400:6:58" + } + ], + "id": 9768, + "name": "ElementaryTypeNameExpression", + "src": "23400:6:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9742, + "type": "uint256", + "value": "fees" + }, + "id": 9769, + "name": "Identifier", + "src": "23407:4:58" + } + ], + "id": 9770, + "name": "FunctionCall", + "src": "23400:12:58" + } + ], + "id": 9771, + "name": "FunctionCall", + "src": "23392:21:58" + } + ], + "id": 9772, + "name": "VariableDeclarationStatement", + "src": "23372:41:58" + }, + { + "attributes": { + "functionReturnParameters": 9750 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(uint256,uint256)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "bp", + "referencedDeclaration": 4933, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9744, + "type": "uint256", + "value": "amount" + }, + "id": 9773, + "name": "Identifier", + "src": "23431:6:58" + } + ], + "id": 9774, + "name": "MemberAccess", + "src": "23431:9:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9752, + "type": "uint256", + "value": "firstFee" + }, + "id": 9775, + "name": "Identifier", + "src": "23441:8:58" + } + ], + "id": 9776, + "name": "FunctionCall", + "src": "23431:19:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "bp", + "referencedDeclaration": 4933, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9744, + "type": "uint256", + "value": "amount" + }, + "id": 9777, + "name": "Identifier", + "src": "23452:6:58" + } + ], + "id": 9778, + "name": "MemberAccess", + "src": "23452:9:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9764, + "type": "uint256", + "value": "secondFee" + }, + "id": 9779, + "name": "Identifier", + "src": "23462:9:58" + } + ], + "id": 9780, + "name": "FunctionCall", + "src": "23452:20:58" + } + ], + "id": 9781, + "name": "TupleExpression", + "src": "23430:43:58" + } + ], + "id": 9782, + "name": "Return", + "src": "23423:50:58" + } + ], + "id": 9783, + "name": "Block", + "src": "23306:174:58" + } + ], + "id": 9784, + "name": "FunctionDefinition", + "src": "23218:262:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "getCurrency", + "scope": 10382, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice parses \"fees\" field to find the currency for the purchase\n@param fees field with encoded data\n@return 0 if ETH, 1 if WETH ERC-20" + }, + "id": 9785, + "name": "StructuredDocumentation", + "src": "23486:172:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "fees", + "scope": 9802, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9786, + "name": "ElementaryTypeName", + "src": "23684:7:58" + } + ], + "id": 9787, + "name": "VariableDeclaration", + "src": "23684:12:58" + } + ], + "id": 9788, + "name": "ParameterList", + "src": "23683:14:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 9802, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Currencies", + "referencedDeclaration": 8052, + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "id": 9789, + "name": "UserDefinedTypeName", + "src": "23721:10:58" + } + ], + "id": 9790, + "name": "VariableDeclaration", + "src": "23721:10:58" + } + ], + "id": 9791, + "name": "ParameterList", + "src": "23720:12:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9791 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8052, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Currencies)", + "value": "Currencies" + }, + "id": 9792, + "name": "Identifier", + "src": "23750:10:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint16", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint16)" + }, + "children": [ + { + "attributes": { + "name": "uint16" + }, + "id": 9793, + "name": "ElementaryTypeName", + "src": "23761:6:58" + } + ], + "id": 9794, + "name": "ElementaryTypeNameExpression", + "src": "23761:6:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">>", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9787, + "type": "uint256", + "value": "fees" + }, + "id": 9795, + "name": "Identifier", + "src": "23768:4:58" + }, + { + "attributes": { + "hexvalue": "3438", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 48", + "value": "48" + }, + "id": 9796, + "name": "Literal", + "src": "23776:2:58" + } + ], + "id": 9797, + "name": "BinaryOperation", + "src": "23768:10:58" + } + ], + "id": 9798, + "name": "FunctionCall", + "src": "23761:18:58" + } + ], + "id": 9799, + "name": "FunctionCall", + "src": "23750:30:58" + } + ], + "id": 9800, + "name": "Return", + "src": "23743:37:58" + } + ], + "id": 9801, + "name": "Block", + "src": "23733:54:58" + } + ], + "id": 9802, + "name": "FunctionDefinition", + "src": "23663:124:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "getDataAndAdditionalData", + "scope": 10382, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice parses _data to data for market call and additionalData\n@param feesAndDataType 27 and 28 bytes for dataType\n@return marketData data for market call\n@return additionalRoyalties array uint256, (base point + address)" + }, + "id": 9803, + "name": "StructuredDocumentation", + "src": "23793:265:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_data", + "scope": 9881, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 9804, + "name": "ElementaryTypeName", + "src": "24106:5:58" + } + ], + "id": 9805, + "name": "VariableDeclaration", + "src": "24106:18:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feesAndDataType", + "scope": 9881, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9806, + "name": "ElementaryTypeName", + "src": "24134:7:58" + } + ], + "id": 9807, + "name": "VariableDeclaration", + "src": "24134:23:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "marketId", + "scope": 9881, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Markets", + "referencedDeclaration": 8046, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 9808, + "name": "UserDefinedTypeName", + "src": "24167:7:58" + } + ], + "id": 9809, + "name": "VariableDeclaration", + "src": "24167:16:58" + } + ], + "id": 9810, + "name": "ParameterList", + "src": "24096:93:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 9881, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 9811, + "name": "ElementaryTypeName", + "src": "24213:5:58" + } + ], + "id": 9812, + "name": "VariableDeclaration", + "src": "24213:12:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 9881, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9813, + "name": "ElementaryTypeName", + "src": "24227:7:58" + } + ], + "id": 9814, + "name": "ArrayTypeName", + "src": "24227:9:58" + } + ], + "id": 9815, + "name": "VariableDeclaration", + "src": "24227:16:58" + } + ], + "id": 9816, + "name": "ParameterList", + "src": "24212:32:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9818 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "dataType", + "scope": 9880, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "AdditionalDataTypes", + "referencedDeclaration": 8049, + "type": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + }, + "id": 9817, + "name": "UserDefinedTypeName", + "src": "24255:19:58" + } + ], + "id": 9818, + "name": "VariableDeclaration", + "src": "24255:28:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8049, + "type": "type(enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes)", + "value": "AdditionalDataTypes" + }, + "id": 9819, + "name": "Identifier", + "src": "24286:19:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint16", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint16)" + }, + "children": [ + { + "attributes": { + "name": "uint16" + }, + "id": 9820, + "name": "ElementaryTypeName", + "src": "24306:6:58" + } + ], + "id": 9821, + "name": "ElementaryTypeNameExpression", + "src": "24306:6:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">>", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9807, + "type": "uint256", + "value": "feesAndDataType" + }, + "id": 9822, + "name": "Identifier", + "src": "24313:15:58" + }, + { + "attributes": { + "hexvalue": "3332", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 32", + "value": "32" + }, + "id": 9823, + "name": "Literal", + "src": "24332:2:58" + } + ], + "id": 9824, + "name": "BinaryOperation", + "src": "24313:21:58" + } + ], + "id": 9825, + "name": "FunctionCall", + "src": "24306:29:58" + } + ], + "id": 9826, + "name": "FunctionCall", + "src": "24286:50:58" + } + ], + "id": 9827, + "name": "VariableDeclarationStatement", + "src": "24255:81:58" + }, + { + "attributes": { + "assignments": [ + 9832 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "additionalRoyalties", + "scope": 9880, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9830, + "name": "ElementaryTypeName", + "src": "24346:7:58" + } + ], + "id": 9831, + "name": "ArrayTypeName", + "src": "24346:9:58" + } + ], + "id": 9832, + "name": "VariableDeclaration", + "src": "24346:36:58" + } + ], + "id": 9833, + "name": "VariableDeclarationStatement", + "src": "24346:36:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8049", + "typeString": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9818, + "type": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes", + "value": "dataType" + }, + "id": 9834, + "name": "Identifier", + "src": "24446:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "NoAdditionalData", + "type": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8049, + "type": "type(enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes)", + "value": "AdditionalDataTypes" + }, + "id": 9835, + "name": "Identifier", + "src": "24458:19:58" + } + ], + "id": 9836, + "name": "MemberAccess", + "src": "24458:36:58" + } + ], + "id": 9837, + "name": "BinaryOperation", + "src": "24446:48:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9816 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(bytes memory,uint256[] memory)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9805, + "type": "bytes memory", + "value": "_data" + }, + "id": 9838, + "name": "Identifier", + "src": "24518:5:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9832, + "type": "uint256[] memory", + "value": "additionalRoyalties" + }, + "id": 9839, + "name": "Identifier", + "src": "24525:19:58" + } + ], + "id": 9840, + "name": "TupleExpression", + "src": "24517:28:58" + } + ], + "id": 9841, + "name": "Return", + "src": "24510:35:58" + } + ], + "id": 9842, + "name": "Block", + "src": "24496:60:58" + } + ], + "id": 9843, + "name": "IfStatement", + "src": "24442:114:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8049", + "typeString": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9818, + "type": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes", + "value": "dataType" + }, + "id": 9844, + "name": "Identifier", + "src": "24570:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "RoyaltiesAdditionalData", + "type": "enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8049, + "type": "type(enum RaribleExchangeWrapperUpgradeable.AdditionalDataTypes)", + "value": "AdditionalDataTypes" + }, + "id": 9845, + "name": "Identifier", + "src": "24582:19:58" + } + ], + "id": 9846, + "name": "MemberAccess", + "src": "24582:43:58" + } + ], + "id": 9847, + "name": "BinaryOperation", + "src": "24570:55:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9849 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "additionalData", + "scope": 9874, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct RaribleExchangeWrapperUpgradeable.AdditionalData", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "AdditionalData", + "referencedDeclaration": 8067, + "type": "struct RaribleExchangeWrapperUpgradeable.AdditionalData" + }, + "id": 9848, + "name": "UserDefinedTypeName", + "src": "24641:14:58" + } + ], + "id": 9849, + "name": "VariableDeclaration", + "src": "24641:36:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "struct RaribleExchangeWrapperUpgradeable.AdditionalData memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_struct$_AdditionalData_$8067_storage_ptr_$", + "typeString": "type(struct RaribleExchangeWrapperUpgradeable.AdditionalData storage pointer)" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "decode", + "type": "function () pure" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 9850, + "name": "Identifier", + "src": "24680:3:58" + } + ], + "id": 9851, + "name": "MemberAccess", + "src": "24680:10:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9805, + "type": "bytes memory", + "value": "_data" + }, + "id": 9852, + "name": "Identifier", + "src": "24691:5:58" + }, + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(struct RaribleExchangeWrapperUpgradeable.AdditionalData storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8067, + "type": "type(struct RaribleExchangeWrapperUpgradeable.AdditionalData storage pointer)", + "value": "AdditionalData" + }, + "id": 9853, + "name": "Identifier", + "src": "24699:14:58" + } + ], + "id": 9854, + "name": "TupleExpression", + "src": "24698:16:58" + } + ], + "id": 9855, + "name": "FunctionCall", + "src": "24680:35:58" + } + ], + "id": 9856, + "name": "VariableDeclarationStatement", + "src": "24641:74:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10094, + "type": "function (enum RaribleExchangeWrapperUpgradeable.Markets) pure returns (bool)", + "value": "supportsRoyalties" + }, + "id": 9857, + "name": "Identifier", + "src": "24804:17:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9809, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "marketId" + }, + "id": 9858, + "name": "Identifier", + "src": "24822:8:58" + } + ], + "id": 9859, + "name": "FunctionCall", + "src": "24804:27:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9816 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(bytes memory,uint256[] memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "data", + "referencedDeclaration": 8063, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9849, + "type": "struct RaribleExchangeWrapperUpgradeable.AdditionalData memory", + "value": "additionalData" + }, + "id": 9860, + "name": "Identifier", + "src": "24859:14:58" + } + ], + "id": 9861, + "name": "MemberAccess", + "src": "24859:19:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "additionalRoyalties", + "referencedDeclaration": 8066, + "type": "uint256[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9849, + "type": "struct RaribleExchangeWrapperUpgradeable.AdditionalData memory", + "value": "additionalData" + }, + "id": 9862, + "name": "Identifier", + "src": "24880:14:58" + } + ], + "id": 9863, + "name": "MemberAccess", + "src": "24880:34:58" + } + ], + "id": 9864, + "name": "TupleExpression", + "src": "24858:57:58" + } + ], + "id": 9865, + "name": "Return", + "src": "24851:64:58" + } + ], + "id": 9866, + "name": "Block", + "src": "24833:97:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9816 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(bytes memory,uint256[] memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "data", + "referencedDeclaration": 8063, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9849, + "type": "struct RaribleExchangeWrapperUpgradeable.AdditionalData memory", + "value": "additionalData" + }, + "id": 9867, + "name": "Identifier", + "src": "24962:14:58" + } + ], + "id": 9868, + "name": "MemberAccess", + "src": "24962:19:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9832, + "type": "uint256[] memory", + "value": "additionalRoyalties" + }, + "id": 9869, + "name": "Identifier", + "src": "24983:19:58" + } + ], + "id": 9870, + "name": "TupleExpression", + "src": "24961:42:58" + } + ], + "id": 9871, + "name": "Return", + "src": "24954:49:58" + } + ], + "id": 9872, + "name": "Block", + "src": "24936:82:58" + } + ], + "id": 9873, + "name": "IfStatement", + "src": "24800:218:58" + } + ], + "id": 9874, + "name": "Block", + "src": "24627:401:58" + } + ], + "id": 9875, + "name": "IfStatement", + "src": "24566:462:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_e89eb59adf40d46cfd63ce8f1b9b12cb445413877fb23a6846b8ace3266a633d", + "typeString": "literal_string \"unknown additionalDataType\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 9876, + "name": "Identifier", + "src": "25038:6:58" + }, + { + "attributes": { + "hexvalue": "756e6b6e6f776e206164646974696f6e616c4461746154797065", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"unknown additionalDataType\"", + "value": "unknown additionalDataType" + }, + "id": 9877, + "name": "Literal", + "src": "25045:28:58" + } + ], + "id": 9878, + "name": "FunctionCall", + "src": "25038:36:58" + } + ], + "id": 9879, + "name": "ExpressionStatement", + "src": "25038:36:58" + } + ], + "id": 9880, + "name": "Block", + "src": "24245:836:58" + } + ], + "id": 9881, + "name": "FunctionDefinition", + "src": "24063:1018:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "transferAdditionalRoyaltiesETH", + "scope": 10382, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice transfer additional royalties in ETH\n@param _additionalRoyalties array uint256 (base point + royalty recipient address)" + }, + "id": 9882, + "name": "StructuredDocumentation", + "src": "25087:155:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_additionalRoyalties", + "scope": 9946, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9883, + "name": "ElementaryTypeName", + "src": "25287:7:58" + } + ], + "id": 9884, + "name": "ArrayTypeName", + "src": "25287:9:58" + } + ], + "id": 9885, + "name": "VariableDeclaration", + "src": "25287:37:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "amount", + "scope": 9946, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9886, + "name": "ElementaryTypeName", + "src": "25326:7:58" + } + ], + "id": 9887, + "name": "VariableDeclaration", + "src": "25326:14:58" + } + ], + "id": 9888, + "name": "ParameterList", + "src": "25286:55:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 9889, + "name": "ParameterList", + "src": "25351:0:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "assignments": [ + 9891 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 9944, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9890, + "name": "ElementaryTypeName", + "src": "25366:7:58" + } + ], + "id": 9891, + "name": "VariableDeclaration", + "src": "25366:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9892, + "name": "Literal", + "src": "25378:1:58" + } + ], + "id": 9893, + "name": "VariableDeclarationStatement", + "src": "25366:13:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9891, + "type": "uint256", + "value": "i" + }, + "id": 9894, + "name": "Identifier", + "src": "25381:1:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9885, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 9895, + "name": "Identifier", + "src": "25385:20:58" + } + ], + "id": 9896, + "name": "MemberAccess", + "src": "25385:27:58" + } + ], + "id": 9897, + "name": "BinaryOperation", + "src": "25381:31:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9891, + "type": "uint256", + "value": "i" + }, + "id": 9898, + "name": "Identifier", + "src": "25416:1:58" + } + ], + "id": 9899, + "name": "UnaryOperation", + "src": "25414:3:58" + } + ], + "id": 9900, + "name": "ExpressionStatement", + "src": "25414:3:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9885, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 9901, + "name": "Identifier", + "src": "25437:20:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9891, + "type": "uint256", + "value": "i" + }, + "id": 9902, + "name": "Identifier", + "src": "25458:1:58" + } + ], + "id": 9903, + "name": "IndexAccess", + "src": "25437:23:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9904, + "name": "Literal", + "src": "25463:1:58" + } + ], + "id": 9905, + "name": "BinaryOperation", + "src": "25437:27:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9907 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "account", + "scope": 9941, + "stateVariable": false, + "storageLocation": "default", + "type": "address payable", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "payable", + "type": "address payable" + }, + "id": 9906, + "name": "ElementaryTypeName", + "src": "25484:15:58" + } + ], + "id": 9907, + "name": "VariableDeclaration", + "src": "25484:23:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address payable)" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "payable" + }, + "id": 9908, + "name": "ElementaryTypeName", + "src": "25510:8:58" + } + ], + "id": 9909, + "name": "ElementaryTypeNameExpression", + "src": "25510:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9910, + "name": "ElementaryTypeName", + "src": "25518:7:58" + } + ], + "id": 9911, + "name": "ElementaryTypeNameExpression", + "src": "25518:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9885, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 9912, + "name": "Identifier", + "src": "25526:20:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9891, + "type": "uint256", + "value": "i" + }, + "id": 9913, + "name": "Identifier", + "src": "25547:1:58" + } + ], + "id": 9914, + "name": "IndexAccess", + "src": "25526:23:58" + } + ], + "id": 9915, + "name": "FunctionCall", + "src": "25518:32:58" + } + ], + "id": 9916, + "name": "FunctionCall", + "src": "25510:41:58" + } + ], + "id": 9917, + "name": "VariableDeclarationStatement", + "src": "25484:67:58" + }, + { + "attributes": { + "assignments": [ + 9919 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "basePoint", + "scope": 9941, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9918, + "name": "ElementaryTypeName", + "src": "25569:7:58" + } + ], + "id": 9919, + "name": "VariableDeclaration", + "src": "25569:17:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 9920, + "name": "ElementaryTypeName", + "src": "25589:7:58" + } + ], + "id": 9921, + "name": "ElementaryTypeNameExpression", + "src": "25589:7:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">>", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9885, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 9922, + "name": "Identifier", + "src": "25597:20:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9891, + "type": "uint256", + "value": "i" + }, + "id": 9923, + "name": "Identifier", + "src": "25618:1:58" + } + ], + "id": 9924, + "name": "IndexAccess", + "src": "25597:23:58" + }, + { + "attributes": { + "hexvalue": "313630", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 160", + "value": "160" + }, + "id": 9925, + "name": "Literal", + "src": "25624:3:58" + } + ], + "id": 9926, + "name": "BinaryOperation", + "src": "25597:30:58" + } + ], + "id": 9927, + "name": "FunctionCall", + "src": "25589:39:58" + } + ], + "id": 9928, + "name": "VariableDeclarationStatement", + "src": "25569:59:58" + }, + { + "attributes": { + "assignments": [ + 9930 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "value", + "scope": 9941, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9929, + "name": "ElementaryTypeName", + "src": "25646:7:58" + } + ], + "id": 9930, + "name": "VariableDeclaration", + "src": "25646:13:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "bp", + "referencedDeclaration": 4933, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9887, + "type": "uint256", + "value": "amount" + }, + "id": 9931, + "name": "Identifier", + "src": "25662:6:58" + } + ], + "id": 9932, + "name": "MemberAccess", + "src": "25662:9:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9919, + "type": "uint256", + "value": "basePoint" + }, + "id": 9933, + "name": "Identifier", + "src": "25672:9:58" + } + ], + "id": 9934, + "name": "FunctionCall", + "src": "25662:20:58" + } + ], + "id": 9935, + "name": "VariableDeclarationStatement", + "src": "25646:36:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9652, + "type": "function (uint256,address)", + "value": "transferFeeETH" + }, + "id": 9936, + "name": "Identifier", + "src": "25700:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9930, + "type": "uint256", + "value": "value" + }, + "id": 9937, + "name": "Identifier", + "src": "25715:5:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9907, + "type": "address payable", + "value": "account" + }, + "id": 9938, + "name": "Identifier", + "src": "25722:7:58" + } + ], + "id": 9939, + "name": "FunctionCall", + "src": "25700:30:58" + } + ], + "id": 9940, + "name": "ExpressionStatement", + "src": "25700:30:58" + } + ], + "id": 9941, + "name": "Block", + "src": "25466:279:58" + } + ], + "id": 9942, + "name": "IfStatement", + "src": "25433:312:58" + } + ], + "id": 9943, + "name": "Block", + "src": "25419:336:58" + } + ], + "id": 9944, + "name": "ForStatement", + "src": "25361:394:58" + } + ], + "id": 9945, + "name": "Block", + "src": "25351:410:58" + } + ], + "id": 9946, + "name": "FunctionDefinition", + "src": "25247:514:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "transferAdditionalRoyaltiesWETH", + "scope": 10382, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice transfer additional royalties in WETH\n@param _additionalRoyalties array uint256 (base point + royalty recipient address)" + }, + "id": 9947, + "name": "StructuredDocumentation", + "src": "25767:156:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_additionalRoyalties", + "scope": 10011, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9948, + "name": "ElementaryTypeName", + "src": "25969:7:58" + } + ], + "id": 9949, + "name": "ArrayTypeName", + "src": "25969:9:58" + } + ], + "id": 9950, + "name": "VariableDeclaration", + "src": "25969:37:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "amount", + "scope": 10011, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9951, + "name": "ElementaryTypeName", + "src": "26008:7:58" + } + ], + "id": 9952, + "name": "VariableDeclaration", + "src": "26008:14:58" + } + ], + "id": 9953, + "name": "ParameterList", + "src": "25968:55:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 9954, + "name": "ParameterList", + "src": "26033:0:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "assignments": [ + 9956 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 10009, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9955, + "name": "ElementaryTypeName", + "src": "26048:7:58" + } + ], + "id": 9956, + "name": "VariableDeclaration", + "src": "26048:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9957, + "name": "Literal", + "src": "26060:1:58" + } + ], + "id": 9958, + "name": "VariableDeclarationStatement", + "src": "26048:13:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9956, + "type": "uint256", + "value": "i" + }, + "id": 9959, + "name": "Identifier", + "src": "26063:1:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9950, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 9960, + "name": "Identifier", + "src": "26067:20:58" + } + ], + "id": 9961, + "name": "MemberAccess", + "src": "26067:27:58" + } + ], + "id": 9962, + "name": "BinaryOperation", + "src": "26063:31:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9956, + "type": "uint256", + "value": "i" + }, + "id": 9963, + "name": "Identifier", + "src": "26098:1:58" + } + ], + "id": 9964, + "name": "UnaryOperation", + "src": "26096:3:58" + } + ], + "id": 9965, + "name": "ExpressionStatement", + "src": "26096:3:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9950, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 9966, + "name": "Identifier", + "src": "26119:20:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9956, + "type": "uint256", + "value": "i" + }, + "id": 9967, + "name": "Identifier", + "src": "26140:1:58" + } + ], + "id": 9968, + "name": "IndexAccess", + "src": "26119:23:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9969, + "name": "Literal", + "src": "26145:1:58" + } + ], + "id": 9970, + "name": "BinaryOperation", + "src": "26119:27:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9972 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "account", + "scope": 10006, + "stateVariable": false, + "storageLocation": "default", + "type": "address payable", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "payable", + "type": "address payable" + }, + "id": 9971, + "name": "ElementaryTypeName", + "src": "26166:15:58" + } + ], + "id": 9972, + "name": "VariableDeclaration", + "src": "26166:23:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address payable)" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "payable" + }, + "id": 9973, + "name": "ElementaryTypeName", + "src": "26192:8:58" + } + ], + "id": 9974, + "name": "ElementaryTypeNameExpression", + "src": "26192:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9975, + "name": "ElementaryTypeName", + "src": "26200:7:58" + } + ], + "id": 9976, + "name": "ElementaryTypeNameExpression", + "src": "26200:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9950, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 9977, + "name": "Identifier", + "src": "26208:20:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9956, + "type": "uint256", + "value": "i" + }, + "id": 9978, + "name": "Identifier", + "src": "26229:1:58" + } + ], + "id": 9979, + "name": "IndexAccess", + "src": "26208:23:58" + } + ], + "id": 9980, + "name": "FunctionCall", + "src": "26200:32:58" + } + ], + "id": 9981, + "name": "FunctionCall", + "src": "26192:41:58" + } + ], + "id": 9982, + "name": "VariableDeclarationStatement", + "src": "26166:67:58" + }, + { + "attributes": { + "assignments": [ + 9984 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "basePoint", + "scope": 10006, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9983, + "name": "ElementaryTypeName", + "src": "26251:7:58" + } + ], + "id": 9984, + "name": "VariableDeclaration", + "src": "26251:17:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 9985, + "name": "ElementaryTypeName", + "src": "26271:7:58" + } + ], + "id": 9986, + "name": "ElementaryTypeNameExpression", + "src": "26271:7:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">>", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9950, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 9987, + "name": "Identifier", + "src": "26279:20:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9956, + "type": "uint256", + "value": "i" + }, + "id": 9988, + "name": "Identifier", + "src": "26300:1:58" + } + ], + "id": 9989, + "name": "IndexAccess", + "src": "26279:23:58" + }, + { + "attributes": { + "hexvalue": "313630", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 160", + "value": "160" + }, + "id": 9990, + "name": "Literal", + "src": "26306:3:58" + } + ], + "id": 9991, + "name": "BinaryOperation", + "src": "26279:30:58" + } + ], + "id": 9992, + "name": "FunctionCall", + "src": "26271:39:58" + } + ], + "id": 9993, + "name": "VariableDeclarationStatement", + "src": "26251:59:58" + }, + { + "attributes": { + "assignments": [ + 9995 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "value", + "scope": 10006, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9994, + "name": "ElementaryTypeName", + "src": "26328:7:58" + } + ], + "id": 9995, + "name": "VariableDeclaration", + "src": "26328:13:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "bp", + "referencedDeclaration": 4933, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9952, + "type": "uint256", + "value": "amount" + }, + "id": 9996, + "name": "Identifier", + "src": "26344:6:58" + } + ], + "id": 9997, + "name": "MemberAccess", + "src": "26344:9:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9984, + "type": "uint256", + "value": "basePoint" + }, + "id": 9998, + "name": "Identifier", + "src": "26354:9:58" + } + ], + "id": 9999, + "name": "FunctionCall", + "src": "26344:20:58" + } + ], + "id": 10000, + "name": "VariableDeclarationStatement", + "src": "26328:36:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9681, + "type": "function (uint256,address)", + "value": "transferFeeWETH" + }, + "id": 10001, + "name": "Identifier", + "src": "26382:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9995, + "type": "uint256", + "value": "value" + }, + "id": 10002, + "name": "Identifier", + "src": "26398:5:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9972, + "type": "address payable", + "value": "account" + }, + "id": 10003, + "name": "Identifier", + "src": "26405:7:58" + } + ], + "id": 10004, + "name": "FunctionCall", + "src": "26382:31:58" + } + ], + "id": 10005, + "name": "ExpressionStatement", + "src": "26382:31:58" + } + ], + "id": 10006, + "name": "Block", + "src": "26148:280:58" + } + ], + "id": 10007, + "name": "IfStatement", + "src": "26115:313:58" + } + ], + "id": 10008, + "name": "Block", + "src": "26101:337:58" + } + ], + "id": 10009, + "name": "ForStatement", + "src": "26043:395:58" + } + ], + "id": 10010, + "name": "Block", + "src": "26033:411:58" + } + ], + "id": 10011, + "name": "FunctionDefinition", + "src": "25928:516:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "_arrayReplace", + "scope": 10382, + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "src", + "scope": 10065, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 10012, + "name": "ElementaryTypeName", + "src": "26504:5:58" + } + ], + "id": 10013, + "name": "VariableDeclaration", + "src": "26504:16:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "replacement", + "scope": 10065, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 10014, + "name": "ElementaryTypeName", + "src": "26530:5:58" + } + ], + "id": 10015, + "name": "VariableDeclaration", + "src": "26530:24:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "mask", + "scope": 10065, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 10016, + "name": "ElementaryTypeName", + "src": "26564:5:58" + } + ], + "id": 10017, + "name": "VariableDeclaration", + "src": "26564:17:58" + } + ], + "id": 10018, + "name": "ParameterList", + "src": "26494:93:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10019, + "name": "ParameterList", + "src": "26610:0:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool) pure", + "value": "require" + }, + "id": 10020, + "name": "Identifier", + "src": "26620:7:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10013, + "type": "bytes memory", + "value": "src" + }, + "id": 10021, + "name": "Identifier", + "src": "26628:3:58" + } + ], + "id": 10022, + "name": "MemberAccess", + "src": "26628:10:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10015, + "type": "bytes memory", + "value": "replacement" + }, + "id": 10023, + "name": "Identifier", + "src": "26642:11:58" + } + ], + "id": 10024, + "name": "MemberAccess", + "src": "26642:18:58" + } + ], + "id": 10025, + "name": "BinaryOperation", + "src": "26628:32:58" + } + ], + "id": 10026, + "name": "FunctionCall", + "src": "26620:41:58" + } + ], + "id": 10027, + "name": "ExpressionStatement", + "src": "26620:41:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool) pure", + "value": "require" + }, + "id": 10028, + "name": "Identifier", + "src": "26671:7:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10013, + "type": "bytes memory", + "value": "src" + }, + "id": 10029, + "name": "Identifier", + "src": "26679:3:58" + } + ], + "id": 10030, + "name": "MemberAccess", + "src": "26679:10:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10017, + "type": "bytes memory", + "value": "mask" + }, + "id": 10031, + "name": "Identifier", + "src": "26693:4:58" + } + ], + "id": 10032, + "name": "MemberAccess", + "src": "26693:11:58" + } + ], + "id": 10033, + "name": "BinaryOperation", + "src": "26679:25:58" + } + ], + "id": 10034, + "name": "FunctionCall", + "src": "26671:34:58" + } + ], + "id": 10035, + "name": "ExpressionStatement", + "src": "26671:34:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10037 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 10063, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10036, + "name": "ElementaryTypeName", + "src": "26721:7:58" + } + ], + "id": 10037, + "name": "VariableDeclaration", + "src": "26721:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10038, + "name": "Literal", + "src": "26733:1:58" + } + ], + "id": 10039, + "name": "VariableDeclarationStatement", + "src": "26721:13:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10037, + "type": "uint256", + "value": "i" + }, + "id": 10040, + "name": "Identifier", + "src": "26736:1:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10013, + "type": "bytes memory", + "value": "src" + }, + "id": 10041, + "name": "Identifier", + "src": "26740:3:58" + } + ], + "id": 10042, + "name": "MemberAccess", + "src": "26740:10:58" + } + ], + "id": 10043, + "name": "BinaryOperation", + "src": "26736:14:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10037, + "type": "uint256", + "value": "i" + }, + "id": 10044, + "name": "Identifier", + "src": "26754:1:58" + } + ], + "id": 10045, + "name": "UnaryOperation", + "src": "26752:3:58" + } + ], + "id": 10046, + "name": "ExpressionStatement", + "src": "26752:3:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "bytes1" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10017, + "type": "bytes memory", + "value": "mask" + }, + "id": 10047, + "name": "Identifier", + "src": "26775:4:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10037, + "type": "uint256", + "value": "i" + }, + "id": 10048, + "name": "Identifier", + "src": "26780:1:58" + } + ], + "id": 10049, + "name": "IndexAccess", + "src": "26775:7:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10050, + "name": "Literal", + "src": "26786:1:58" + } + ], + "id": 10051, + "name": "BinaryOperation", + "src": "26775:12:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "bytes1" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "bytes1" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10013, + "type": "bytes memory", + "value": "src" + }, + "id": 10052, + "name": "Identifier", + "src": "26807:3:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10037, + "type": "uint256", + "value": "i" + }, + "id": 10053, + "name": "Identifier", + "src": "26811:1:58" + } + ], + "id": 10054, + "name": "IndexAccess", + "src": "26807:6:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "bytes1" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10015, + "type": "bytes memory", + "value": "replacement" + }, + "id": 10055, + "name": "Identifier", + "src": "26816:11:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10037, + "type": "uint256", + "value": "i" + }, + "id": 10056, + "name": "Identifier", + "src": "26828:1:58" + } + ], + "id": 10057, + "name": "IndexAccess", + "src": "26816:14:58" + } + ], + "id": 10058, + "name": "Assignment", + "src": "26807:23:58" + } + ], + "id": 10059, + "name": "ExpressionStatement", + "src": "26807:23:58" + } + ], + "id": 10060, + "name": "Block", + "src": "26789:56:58" + } + ], + "id": 10061, + "name": "IfStatement", + "src": "26771:74:58" + } + ], + "id": 10062, + "name": "Block", + "src": "26757:98:58" + } + ], + "id": 10063, + "name": "ForStatement", + "src": "26716:139:58" + } + ], + "id": 10064, + "name": "Block", + "src": "26610:251:58" + } + ], + "id": 10065, + "name": "FunctionDefinition", + "src": "26472:389:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "supportsRoyalties", + "scope": 10382, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice returns true if this contract supports additional royalties for the marketplace;\nnow royalties are supported for:\n1. SudoSwap\n2. LooksRare old\n3. LooksRare V2" + }, + "id": 10066, + "name": "StructuredDocumentation", + "src": "26867:223:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "marketId", + "scope": 10094, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Markets", + "referencedDeclaration": 8046, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10067, + "name": "UserDefinedTypeName", + "src": "27122:7:58" + } + ], + "id": 10068, + "name": "VariableDeclaration", + "src": "27122:16:58" + } + ], + "id": 10069, + "name": "ParameterList", + "src": "27121:18:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10094, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 10070, + "name": "ElementaryTypeName", + "src": "27163:4:58" + } + ], + "id": 10071, + "name": "VariableDeclaration", + "src": "27163:4:58" + } + ], + "id": 10072, + "name": "ParameterList", + "src": "27162:6:58" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "||", + "type": "bool" + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "||", + "type": "bool" + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10068, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "marketId" + }, + "id": 10073, + "name": "Identifier", + "src": "27183:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SudoSwap", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10074, + "name": "Identifier", + "src": "27195:7:58" + } + ], + "id": 10075, + "name": "MemberAccess", + "src": "27195:16:58" + } + ], + "id": 10076, + "name": "BinaryOperation", + "src": "27183:28:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10068, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "marketId" + }, + "id": 10077, + "name": "Identifier", + "src": "27215:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "LooksRareOrders", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10078, + "name": "Identifier", + "src": "27227:7:58" + } + ], + "id": 10079, + "name": "MemberAccess", + "src": "27227:23:58" + } + ], + "id": 10080, + "name": "BinaryOperation", + "src": "27215:35:58" + } + ], + "id": 10081, + "name": "BinaryOperation", + "src": "27183:67:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10068, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "marketId" + }, + "id": 10082, + "name": "Identifier", + "src": "27254:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "LooksRareV2", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10083, + "name": "Identifier", + "src": "27266:7:58" + } + ], + "id": 10084, + "name": "MemberAccess", + "src": "27266:19:58" + } + ], + "id": 10085, + "name": "BinaryOperation", + "src": "27254:31:58" + } + ], + "id": 10086, + "name": "BinaryOperation", + "src": "27183:102:58" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 10072 + }, + "children": [ + { + "attributes": { + "hexvalue": "74727565", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "true" + }, + "id": 10087, + "name": "Literal", + "src": "27308:4:58" + } + ], + "id": 10088, + "name": "Return", + "src": "27301:11:58" + } + ], + "id": 10089, + "name": "Block", + "src": "27287:36:58" + } + ], + "id": 10090, + "name": "IfStatement", + "src": "27179:144:58" + }, + { + "attributes": { + "functionReturnParameters": 10072 + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 10091, + "name": "Literal", + "src": "27340:5:58" + } + ], + "id": 10092, + "name": "Return", + "src": "27333:12:58" + } + ], + "id": 10093, + "name": "Block", + "src": "27169:183:58" + } + ], + "id": 10094, + "name": "FunctionDefinition", + "src": "27095:257:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "getAmountOfWethForPurchase", + "scope": 10382, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "detail", + "scope": 10199, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "PurchaseDetails", + "referencedDeclaration": 8061, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails" + }, + "id": 10095, + "name": "UserDefinedTypeName", + "src": "27394:15:58" + } + ], + "id": 10096, + "name": "VariableDeclaration", + "src": "27394:29:58" + } + ], + "id": 10097, + "name": "ParameterList", + "src": "27393:31:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10199, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10098, + "name": "ElementaryTypeName", + "src": "27448:7:58" + } + ], + "id": 10099, + "name": "VariableDeclaration", + "src": "27448:7:58" + } + ], + "id": 10100, + "name": "ParameterList", + "src": "27447:9:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10102 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "result", + "scope": 10198, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10101, + "name": "ElementaryTypeName", + "src": "27467:7:58" + } + ], + "id": 10102, + "name": "VariableDeclaration", + "src": "27467:14:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10103, + "name": "Literal", + "src": "27484:1:58" + } + ], + "id": 10104, + "name": "VariableDeclarationStatement", + "src": "27467:18:58" + }, + { + "attributes": { + "assignments": [ + 10106 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "currency", + "scope": 10198, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Currencies", + "referencedDeclaration": 8052, + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "id": 10105, + "name": "UserDefinedTypeName", + "src": "27496:10:58" + } + ], + "id": 10106, + "name": "VariableDeclaration", + "src": "27496:19:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9802, + "type": "function (uint256) pure returns (enum RaribleExchangeWrapperUpgradeable.Currencies)", + "value": "getCurrency" + }, + "id": 10107, + "name": "Identifier", + "src": "27518:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8058, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10096, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "detail" + }, + "id": 10108, + "name": "Identifier", + "src": "27530:6:58" + } + ], + "id": 10109, + "name": "MemberAccess", + "src": "27530:11:58" + } + ], + "id": 10110, + "name": "FunctionCall", + "src": "27518:24:58" + } + ], + "id": 10111, + "name": "VariableDeclarationStatement", + "src": "27496:46:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8052", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10106, + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies", + "value": "currency" + }, + "id": 10112, + "name": "Identifier", + "src": "27637:8:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "WETH", + "type": "enum RaribleExchangeWrapperUpgradeable.Currencies" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8052, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Currencies)", + "value": "Currencies" + }, + "id": 10113, + "name": "Identifier", + "src": "27649:10:58" + } + ], + "id": 10114, + "name": "MemberAccess", + "src": "27649:15:58" + } + ], + "id": 10115, + "name": "BinaryOperation", + "src": "27637:27:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10102, + "type": "uint256", + "value": "result" + }, + "id": 10116, + "name": "Identifier", + "src": "27705:6:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10102, + "type": "uint256", + "value": "result" + }, + "id": 10117, + "name": "Identifier", + "src": "27714:6:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8056, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10096, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "detail" + }, + "id": 10118, + "name": "Identifier", + "src": "27723:6:58" + } + ], + "id": 10119, + "name": "MemberAccess", + "src": "27723:13:58" + } + ], + "id": 10120, + "name": "BinaryOperation", + "src": "27714:22:58" + } + ], + "id": 10121, + "name": "Assignment", + "src": "27705:31:58" + } + ], + "id": 10122, + "name": "ExpressionStatement", + "src": "27705:31:58" + }, + { + "attributes": { + "assignments": [ + 10124, + 10126 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "firstFeeAmount", + "scope": 10194, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10123, + "name": "ElementaryTypeName", + "src": "27775:7:58" + } + ], + "id": 10124, + "name": "VariableDeclaration", + "src": "27775:22:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "secondFeeAmount", + "scope": 10194, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10125, + "name": "ElementaryTypeName", + "src": "27799:7:58" + } + ], + "id": 10126, + "name": "VariableDeclaration", + "src": "27799:23:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9784, + "type": "function (uint256,uint256) pure returns (uint256,uint256)", + "value": "getFees" + }, + "id": 10127, + "name": "Identifier", + "src": "27826:7:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8058, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10096, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "detail" + }, + "id": 10128, + "name": "Identifier", + "src": "27834:6:58" + } + ], + "id": 10129, + "name": "MemberAccess", + "src": "27834:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8056, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10096, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "detail" + }, + "id": 10130, + "name": "Identifier", + "src": "27847:6:58" + } + ], + "id": 10131, + "name": "MemberAccess", + "src": "27847:13:58" + } + ], + "id": 10132, + "name": "FunctionCall", + "src": "27826:35:58" + } + ], + "id": 10133, + "name": "VariableDeclarationStatement", + "src": "27774:87:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10102, + "type": "uint256", + "value": "result" + }, + "id": 10134, + "name": "Identifier", + "src": "27875:6:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10102, + "type": "uint256", + "value": "result" + }, + "id": 10135, + "name": "Identifier", + "src": "27884:6:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10124, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 10136, + "name": "Identifier", + "src": "27893:14:58" + } + ], + "id": 10137, + "name": "BinaryOperation", + "src": "27884:23:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10126, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 10138, + "name": "Identifier", + "src": "27910:15:58" + } + ], + "id": 10139, + "name": "BinaryOperation", + "src": "27884:41:58" + } + ], + "id": 10140, + "name": "Assignment", + "src": "27875:50:58" + } + ], + "id": 10141, + "name": "ExpressionStatement", + "src": "27875:50:58" + }, + { + "attributes": { + "assignments": [ + null, + 10146 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "royalties", + "scope": 10194, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10144, + "name": "ElementaryTypeName", + "src": "27971:7:58" + } + ], + "id": 10145, + "name": "ArrayTypeName", + "src": "27971:9:58" + } + ], + "id": 10146, + "name": "VariableDeclaration", + "src": "27971:26:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bytes memory,uint256[] memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9881, + "type": "function (bytes memory,uint256,enum RaribleExchangeWrapperUpgradeable.Markets) pure returns (bytes memory,uint256[] memory)", + "value": "getDataAndAdditionalData" + }, + "id": 10147, + "name": "Identifier", + "src": "28001:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "data", + "referencedDeclaration": 8060, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10096, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "detail" + }, + "id": 10148, + "name": "Identifier", + "src": "28026:6:58" + } + ], + "id": 10149, + "name": "MemberAccess", + "src": "28026:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8058, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10096, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "detail" + }, + "id": 10150, + "name": "Identifier", + "src": "28039:6:58" + } + ], + "id": 10151, + "name": "MemberAccess", + "src": "28039:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8054, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10096, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "detail" + }, + "id": 10152, + "name": "Identifier", + "src": "28052:6:58" + } + ], + "id": 10153, + "name": "MemberAccess", + "src": "28052:15:58" + } + ], + "id": 10154, + "name": "FunctionCall", + "src": "28001:67:58" + } + ], + "id": 10155, + "name": "VariableDeclarationStatement", + "src": "27968:100:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10157 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "j", + "scope": 10193, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10156, + "name": "ElementaryTypeName", + "src": "28087:7:58" + } + ], + "id": 10157, + "name": "VariableDeclaration", + "src": "28087:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10158, + "name": "Literal", + "src": "28099:1:58" + } + ], + "id": 10159, + "name": "VariableDeclarationStatement", + "src": "28087:13:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10157, + "type": "uint256", + "value": "j" + }, + "id": 10160, + "name": "Identifier", + "src": "28102:1:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10146, + "type": "uint256[] memory", + "value": "royalties" + }, + "id": 10161, + "name": "Identifier", + "src": "28106:9:58" + } + ], + "id": 10162, + "name": "MemberAccess", + "src": "28106:16:58" + } + ], + "id": 10163, + "name": "BinaryOperation", + "src": "28102:20:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10157, + "type": "uint256", + "value": "j" + }, + "id": 10164, + "name": "Identifier", + "src": "28126:1:58" + } + ], + "id": 10165, + "name": "UnaryOperation", + "src": "28124:3:58" + } + ], + "id": 10166, + "name": "ExpressionStatement", + "src": "28124:3:58" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10168 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "royaltyBasePoint", + "scope": 10192, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10167, + "name": "ElementaryTypeName", + "src": "28147:7:58" + } + ], + "id": 10168, + "name": "VariableDeclaration", + "src": "28147:24:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 10169, + "name": "ElementaryTypeName", + "src": "28174:7:58" + } + ], + "id": 10170, + "name": "ElementaryTypeNameExpression", + "src": "28174:7:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">>", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10146, + "type": "uint256[] memory", + "value": "royalties" + }, + "id": 10171, + "name": "Identifier", + "src": "28182:9:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10157, + "type": "uint256", + "value": "j" + }, + "id": 10172, + "name": "Identifier", + "src": "28192:1:58" + } + ], + "id": 10173, + "name": "IndexAccess", + "src": "28182:12:58" + }, + { + "attributes": { + "hexvalue": "313630", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 160", + "value": "160" + }, + "id": 10174, + "name": "Literal", + "src": "28198:3:58" + } + ], + "id": 10175, + "name": "BinaryOperation", + "src": "28182:19:58" + } + ], + "id": 10176, + "name": "FunctionCall", + "src": "28174:28:58" + } + ], + "id": 10177, + "name": "VariableDeclarationStatement", + "src": "28147:55:58" + }, + { + "attributes": { + "assignments": [ + 10179 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "royaltyValue", + "scope": 10192, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10178, + "name": "ElementaryTypeName", + "src": "28220:7:58" + } + ], + "id": 10179, + "name": "VariableDeclaration", + "src": "28220:20:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "bp", + "referencedDeclaration": 4933, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8056, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10096, + "type": "struct RaribleExchangeWrapperUpgradeable.PurchaseDetails memory", + "value": "detail" + }, + "id": 10180, + "name": "Identifier", + "src": "28243:6:58" + } + ], + "id": 10181, + "name": "MemberAccess", + "src": "28243:13:58" + } + ], + "id": 10182, + "name": "MemberAccess", + "src": "28243:16:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10168, + "type": "uint256", + "value": "royaltyBasePoint" + }, + "id": 10183, + "name": "Identifier", + "src": "28260:16:58" + } + ], + "id": 10184, + "name": "FunctionCall", + "src": "28243:34:58" + } + ], + "id": 10185, + "name": "VariableDeclarationStatement", + "src": "28220:57:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10102, + "type": "uint256", + "value": "result" + }, + "id": 10186, + "name": "Identifier", + "src": "28295:6:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10102, + "type": "uint256", + "value": "result" + }, + "id": 10187, + "name": "Identifier", + "src": "28304:6:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10179, + "type": "uint256", + "value": "royaltyValue" + }, + "id": 10188, + "name": "Identifier", + "src": "28313:12:58" + } + ], + "id": 10189, + "name": "BinaryOperation", + "src": "28304:21:58" + } + ], + "id": 10190, + "name": "Assignment", + "src": "28295:30:58" + } + ], + "id": 10191, + "name": "ExpressionStatement", + "src": "28295:30:58" + } + ], + "id": 10192, + "name": "Block", + "src": "28129:211:58" + } + ], + "id": 10193, + "name": "ForStatement", + "src": "28082:258:58" + } + ], + "id": 10194, + "name": "Block", + "src": "27666:684:58" + } + ], + "id": 10195, + "name": "IfStatement", + "src": "27633:717:58" + }, + { + "attributes": { + "functionReturnParameters": 10100 + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10102, + "type": "uint256", + "value": "result" + }, + "id": 10196, + "name": "Identifier", + "src": "28367:6:58" + } + ], + "id": 10197, + "name": "Return", + "src": "28360:13:58" + } + ], + "id": 10198, + "name": "Block", + "src": "27457:923:58" + } + ], + "id": 10199, + "name": "FunctionDefinition", + "src": "27358:1022:58" + }, + { + "attributes": { + "functionSelector": "86dcbd27", + "implemented": true, + "isConstructor": false, + "kind": "function", + "name": "approveWETH", + "scope": 10382, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "attributes": { + "text": "@notice approves weth for a list of the addresses\n@param transferProxies - array of addresses to approve WETH for" + }, + "id": 10200, + "name": "StructuredDocumentation", + "src": "28386:140:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "transferProxies", + "scope": 10232, + "stateVariable": false, + "storageLocation": "calldata", + "type": "address[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "address[]" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 10201, + "name": "ElementaryTypeName", + "src": "28552:7:58" + } + ], + "id": 10202, + "name": "ArrayTypeName", + "src": "28552:9:58" + } + ], + "id": 10203, + "name": "VariableDeclaration", + "src": "28552:34:58" + } + ], + "id": 10204, + "name": "ParameterList", + "src": "28551:36:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10207, + "name": "ParameterList", + "src": "28607:0:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 75, + "type": "modifier ()", + "value": "onlyOwner" + }, + "id": 10205, + "name": "Identifier", + "src": "28597:9:58" + } + ], + "id": 10206, + "name": "ModifierInvocation", + "src": "28597:9:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "assignments": [ + 10209 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 10230, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10208, + "name": "ElementaryTypeName", + "src": "28622:7:58" + } + ], + "id": 10209, + "name": "VariableDeclaration", + "src": "28622:9:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10210, + "name": "Literal", + "src": "28634:1:58" + } + ], + "id": 10211, + "name": "VariableDeclarationStatement", + "src": "28622:13:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10209, + "type": "uint256", + "value": "i" + }, + "id": 10212, + "name": "Identifier", + "src": "28637:1:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10203, + "type": "address[] calldata", + "value": "transferProxies" + }, + "id": 10213, + "name": "Identifier", + "src": "28641:15:58" + } + ], + "id": 10214, + "name": "MemberAccess", + "src": "28641:22:58" + } + ], + "id": 10215, + "name": "BinaryOperation", + "src": "28637:26:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10209, + "type": "uint256", + "value": "i" + }, + "id": 10216, + "name": "Identifier", + "src": "28667:1:58" + } + ], + "id": 10217, + "name": "UnaryOperation", + "src": "28665:3:58" + } + ], + "id": 10218, + "name": "ExpressionStatement", + "src": "28665:3:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "approve", + "referencedDeclaration": 1142, + "type": "function (address,uint256) external returns (bool)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 10219, + "name": "Identifier", + "src": "28684:17:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8017, + "type": "address", + "value": "weth" + }, + "id": 10220, + "name": "Identifier", + "src": "28702:4:58" + } + ], + "id": 10221, + "name": "FunctionCall", + "src": "28684:23:58" + } + ], + "id": 10222, + "name": "MemberAccess", + "src": "28684:31:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10203, + "type": "address[] calldata", + "value": "transferProxies" + }, + "id": 10223, + "name": "Identifier", + "src": "28716:15:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10209, + "type": "uint256", + "value": "i" + }, + "id": 10224, + "name": "Identifier", + "src": "28732:1:58" + } + ], + "id": 10225, + "name": "IndexAccess", + "src": "28716:18:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8024, + "type": "uint256", + "value": "UINT256_MAX" + }, + "id": 10226, + "name": "Identifier", + "src": "28736:11:58" + } + ], + "id": 10227, + "name": "FunctionCall", + "src": "28684:64:58" + } + ], + "id": 10228, + "name": "ExpressionStatement", + "src": "28684:64:58" + } + ], + "id": 10229, + "name": "Block", + "src": "28670:89:58" + } + ], + "id": 10230, + "name": "ForStatement", + "src": "28617:142:58" + } + ], + "id": 10231, + "name": "Block", + "src": "28607:158:58" + } + ], + "id": 10232, + "name": "FunctionDefinition", + "src": "28531:234:58" + }, + { + "attributes": { + "functionSelector": "5cdb4367", + "implemented": true, + "isConstructor": false, + "kind": "function", + "name": "updateMarketplaceAddress", + "scope": 10382, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "attributes": { + "text": " @notice updates the address of the marketplace\n @param _type - type of the marketplace\n @param _newAddress - new address of the marketplace" + }, + "id": 10233, + "name": "StructuredDocumentation", + "src": "28771:170:58" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_type", + "scope": 10373, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Markets", + "referencedDeclaration": 8046, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "id": 10234, + "name": "UserDefinedTypeName", + "src": "28980:7:58" + } + ], + "id": 10235, + "name": "VariableDeclaration", + "src": "28980:13:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_newAddress", + "scope": 10373, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 10236, + "name": "ElementaryTypeName", + "src": "28995:7:58" + } + ], + "id": 10237, + "name": "VariableDeclaration", + "src": "28995:19:58" + } + ], + "id": 10238, + "name": "ParameterList", + "src": "28979:36:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10241, + "name": "ParameterList", + "src": "29035:0:58" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 75, + "type": "modifier ()", + "value": "onlyOwner" + }, + "id": 10239, + "name": "Identifier", + "src": "29025:9:58" + } + ], + "id": 10240, + "name": "ModifierInvocation", + "src": "29025:9:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5904c3e21a28364a0c2d14d132ae0ba7e1f2dcf1f9ade73ba991a7031640606b", + "typeString": "literal_string \"New address cannot be zero\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 10242, + "name": "Identifier", + "src": "29045:7:58" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10237, + "type": "address", + "value": "_newAddress" + }, + "id": 10243, + "name": "Identifier", + "src": "29053:11:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10244, + "name": "ElementaryTypeName", + "src": "29068:7:58" + } + ], + "id": 10245, + "name": "ElementaryTypeNameExpression", + "src": "29068:7:58" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10246, + "name": "Literal", + "src": "29076:1:58" + } + ], + "id": 10247, + "name": "FunctionCall", + "src": "29068:10:58" + } + ], + "id": 10248, + "name": "BinaryOperation", + "src": "29053:25:58" + }, + { + "attributes": { + "hexvalue": "4e657720616464726573732063616e6e6f74206265207a65726f", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"New address cannot be zero\"", + "value": "New address cannot be zero" + }, + "id": 10249, + "name": "Literal", + "src": "29080:28:58" + } + ], + "id": 10250, + "name": "FunctionCall", + "src": "29045:64:58" + } + ], + "id": 10251, + "name": "ExpressionStatement", + "src": "29045:64:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10235, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "_type" + }, + "id": 10252, + "name": "Identifier", + "src": "29124:5:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "WyvernExchange", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10253, + "name": "Identifier", + "src": "29133:7:58" + } + ], + "id": 10254, + "name": "MemberAccess", + "src": "29133:22:58" + } + ], + "id": 10255, + "name": "BinaryOperation", + "src": "29124:31:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 7995, + "type": "address", + "value": "wyvernExchange" + }, + "id": 10256, + "name": "Identifier", + "src": "29171:14:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10237, + "type": "address", + "value": "_newAddress" + }, + "id": 10257, + "name": "Identifier", + "src": "29188:11:58" + } + ], + "id": 10258, + "name": "Assignment", + "src": "29171:28:58" + } + ], + "id": 10259, + "name": "ExpressionStatement", + "src": "29171:28:58" + } + ], + "id": 10260, + "name": "Block", + "src": "29157:53:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10235, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "_type" + }, + "id": 10261, + "name": "Identifier", + "src": "29220:5:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "ExchangeV2", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10262, + "name": "Identifier", + "src": "29229:7:58" + } + ], + "id": 10263, + "name": "MemberAccess", + "src": "29229:18:58" + } + ], + "id": 10264, + "name": "BinaryOperation", + "src": "29220:27:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 7997, + "type": "address", + "value": "exchangeV2" + }, + "id": 10265, + "name": "Identifier", + "src": "29263:10:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10237, + "type": "address", + "value": "_newAddress" + }, + "id": 10266, + "name": "Identifier", + "src": "29276:11:58" + } + ], + "id": 10267, + "name": "Assignment", + "src": "29263:24:58" + } + ], + "id": 10268, + "name": "ExpressionStatement", + "src": "29263:24:58" + } + ], + "id": 10269, + "name": "Block", + "src": "29249:49:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10235, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "_type" + }, + "id": 10270, + "name": "Identifier", + "src": "29308:5:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_1", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10271, + "name": "Identifier", + "src": "29317:7:58" + } + ], + "id": 10272, + "name": "MemberAccess", + "src": "29317:19:58" + } + ], + "id": 10273, + "name": "BinaryOperation", + "src": "29308:28:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 7999, + "type": "address", + "value": "seaPort_1_1" + }, + "id": 10274, + "name": "Identifier", + "src": "29352:11:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10237, + "type": "address", + "value": "_newAddress" + }, + "id": 10275, + "name": "Identifier", + "src": "29366:11:58" + } + ], + "id": 10276, + "name": "Assignment", + "src": "29352:25:58" + } + ], + "id": 10277, + "name": "ExpressionStatement", + "src": "29352:25:58" + } + ], + "id": 10278, + "name": "Block", + "src": "29338:50:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10235, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "_type" + }, + "id": 10279, + "name": "Identifier", + "src": "29398:5:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "X2Y2", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10280, + "name": "Identifier", + "src": "29407:7:58" + } + ], + "id": 10281, + "name": "MemberAccess", + "src": "29407:12:58" + } + ], + "id": 10282, + "name": "BinaryOperation", + "src": "29398:21:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8001, + "type": "address", + "value": "x2y2" + }, + "id": 10283, + "name": "Identifier", + "src": "29435:4:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10237, + "type": "address", + "value": "_newAddress" + }, + "id": 10284, + "name": "Identifier", + "src": "29442:11:58" + } + ], + "id": 10285, + "name": "Assignment", + "src": "29435:18:58" + } + ], + "id": 10286, + "name": "ExpressionStatement", + "src": "29435:18:58" + } + ], + "id": 10287, + "name": "Block", + "src": "29421:43:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10235, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "_type" + }, + "id": 10288, + "name": "Identifier", + "src": "29474:5:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "LooksRareOrders", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10289, + "name": "Identifier", + "src": "29483:7:58" + } + ], + "id": 10290, + "name": "MemberAccess", + "src": "29483:23:58" + } + ], + "id": 10291, + "name": "BinaryOperation", + "src": "29474:32:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8003, + "type": "address", + "value": "looksRare" + }, + "id": 10292, + "name": "Identifier", + "src": "29522:9:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10237, + "type": "address", + "value": "_newAddress" + }, + "id": 10293, + "name": "Identifier", + "src": "29534:11:58" + } + ], + "id": 10294, + "name": "Assignment", + "src": "29522:23:58" + } + ], + "id": 10295, + "name": "ExpressionStatement", + "src": "29522:23:58" + } + ], + "id": 10296, + "name": "Block", + "src": "29508:48:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10235, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "_type" + }, + "id": 10297, + "name": "Identifier", + "src": "29566:5:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SudoSwap", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10298, + "name": "Identifier", + "src": "29575:7:58" + } + ], + "id": 10299, + "name": "MemberAccess", + "src": "29575:16:58" + } + ], + "id": 10300, + "name": "BinaryOperation", + "src": "29566:25:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8005, + "type": "address", + "value": "sudoswap" + }, + "id": 10301, + "name": "Identifier", + "src": "29607:8:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10237, + "type": "address", + "value": "_newAddress" + }, + "id": 10302, + "name": "Identifier", + "src": "29618:11:58" + } + ], + "id": 10303, + "name": "Assignment", + "src": "29607:22:58" + } + ], + "id": 10304, + "name": "ExpressionStatement", + "src": "29607:22:58" + } + ], + "id": 10305, + "name": "Block", + "src": "29593:47:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10235, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "_type" + }, + "id": 10306, + "name": "Identifier", + "src": "29650:5:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_4", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10307, + "name": "Identifier", + "src": "29659:7:58" + } + ], + "id": 10308, + "name": "MemberAccess", + "src": "29659:19:58" + } + ], + "id": 10309, + "name": "BinaryOperation", + "src": "29650:28:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8007, + "type": "address", + "value": "seaPort_1_4" + }, + "id": 10310, + "name": "Identifier", + "src": "29694:11:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10237, + "type": "address", + "value": "_newAddress" + }, + "id": 10311, + "name": "Identifier", + "src": "29708:11:58" + } + ], + "id": 10312, + "name": "Assignment", + "src": "29694:25:58" + } + ], + "id": 10313, + "name": "ExpressionStatement", + "src": "29694:25:58" + } + ], + "id": 10314, + "name": "Block", + "src": "29680:50:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10235, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "_type" + }, + "id": 10315, + "name": "Identifier", + "src": "29740:5:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "LooksRareV2", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10316, + "name": "Identifier", + "src": "29749:7:58" + } + ], + "id": 10317, + "name": "MemberAccess", + "src": "29749:19:58" + } + ], + "id": 10318, + "name": "BinaryOperation", + "src": "29740:28:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8009, + "type": "address", + "value": "looksRareV2" + }, + "id": 10319, + "name": "Identifier", + "src": "29784:11:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10237, + "type": "address", + "value": "_newAddress" + }, + "id": 10320, + "name": "Identifier", + "src": "29798:11:58" + } + ], + "id": 10321, + "name": "Assignment", + "src": "29784:25:58" + } + ], + "id": 10322, + "name": "ExpressionStatement", + "src": "29784:25:58" + } + ], + "id": 10323, + "name": "Block", + "src": "29770:50:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10235, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "_type" + }, + "id": 10324, + "name": "Identifier", + "src": "29830:5:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "Blur", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10325, + "name": "Identifier", + "src": "29839:7:58" + } + ], + "id": 10326, + "name": "MemberAccess", + "src": "29839:12:58" + } + ], + "id": 10327, + "name": "BinaryOperation", + "src": "29830:21:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8011, + "type": "address", + "value": "blur" + }, + "id": 10328, + "name": "Identifier", + "src": "29867:4:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10237, + "type": "address", + "value": "_newAddress" + }, + "id": 10329, + "name": "Identifier", + "src": "29874:11:58" + } + ], + "id": 10330, + "name": "Assignment", + "src": "29867:18:58" + } + ], + "id": 10331, + "name": "ExpressionStatement", + "src": "29867:18:58" + } + ], + "id": 10332, + "name": "Block", + "src": "29853:43:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10235, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "_type" + }, + "id": 10333, + "name": "Identifier", + "src": "29906:5:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_5", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10334, + "name": "Identifier", + "src": "29915:7:58" + } + ], + "id": 10335, + "name": "MemberAccess", + "src": "29915:19:58" + } + ], + "id": 10336, + "name": "BinaryOperation", + "src": "29906:28:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8013, + "type": "address", + "value": "seaPort_1_5" + }, + "id": 10337, + "name": "Identifier", + "src": "29950:11:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10237, + "type": "address", + "value": "_newAddress" + }, + "id": 10338, + "name": "Identifier", + "src": "29964:11:58" + } + ], + "id": 10339, + "name": "Assignment", + "src": "29950:25:58" + } + ], + "id": 10340, + "name": "ExpressionStatement", + "src": "29950:25:58" + } + ], + "id": 10341, + "name": "Block", + "src": "29936:50:58" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10235, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "_type" + }, + "id": 10342, + "name": "Identifier", + "src": "29996:5:58" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_6", + "type": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8046, + "type": "type(enum RaribleExchangeWrapperUpgradeable.Markets)", + "value": "Markets" + }, + "id": 10343, + "name": "Identifier", + "src": "30005:7:58" + } + ], + "id": 10344, + "name": "MemberAccess", + "src": "30005:19:58" + } + ], + "id": 10345, + "name": "BinaryOperation", + "src": "29996:28:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8015, + "type": "address", + "value": "seaPort_1_6" + }, + "id": 10346, + "name": "Identifier", + "src": "30040:11:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10237, + "type": "address", + "value": "_newAddress" + }, + "id": 10347, + "name": "Identifier", + "src": "30054:11:58" + } + ], + "id": 10348, + "name": "Assignment", + "src": "30040:25:58" + } + ], + "id": 10349, + "name": "ExpressionStatement", + "src": "30040:25:58" + } + ], + "id": 10350, + "name": "Block", + "src": "30026:50:58" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_febc375c51703703674424cdadfabf329e51db90f4495b4c56145c8182019182", + "typeString": "literal_string \"Invalid marketplace type\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 10351, + "name": "Identifier", + "src": "30096:6:58" + }, + { + "attributes": { + "hexvalue": "496e76616c6964206d61726b6574706c6163652074797065", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Invalid marketplace type\"", + "value": "Invalid marketplace type" + }, + "id": 10352, + "name": "Literal", + "src": "30103:26:58" + } + ], + "id": 10353, + "name": "FunctionCall", + "src": "30096:34:58" + } + ], + "id": 10354, + "name": "ExpressionStatement", + "src": "30096:34:58" + } + ], + "id": 10355, + "name": "Block", + "src": "30082:59:58" + } + ], + "id": 10356, + "name": "IfStatement", + "src": "29992:149:58" + } + ], + "id": 10357, + "name": "IfStatement", + "src": "29902:239:58" + } + ], + "id": 10358, + "name": "IfStatement", + "src": "29826:315:58" + } + ], + "id": 10359, + "name": "IfStatement", + "src": "29736:405:58" + } + ], + "id": 10360, + "name": "IfStatement", + "src": "29646:495:58" + } + ], + "id": 10361, + "name": "IfStatement", + "src": "29562:579:58" + } + ], + "id": 10362, + "name": "IfStatement", + "src": "29470:671:58" + } + ], + "id": 10363, + "name": "IfStatement", + "src": "29394:747:58" + } + ], + "id": 10364, + "name": "IfStatement", + "src": "29304:837:58" + } + ], + "id": 10365, + "name": "IfStatement", + "src": "29216:925:58" + } + ], + "id": 10366, + "name": "IfStatement", + "src": "29120:1021:58" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Markets_$8046", + "typeString": "enum RaribleExchangeWrapperUpgradeable.Markets" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8034, + "type": "function (enum RaribleExchangeWrapperUpgradeable.Markets,address)", + "value": "MarketplaceAddressUpdated" + }, + "id": 10367, + "name": "Identifier", + "src": "30156:25:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10235, + "type": "enum RaribleExchangeWrapperUpgradeable.Markets", + "value": "_type" + }, + "id": 10368, + "name": "Identifier", + "src": "30182:5:58" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10237, + "type": "address", + "value": "_newAddress" + }, + "id": 10369, + "name": "Identifier", + "src": "30189:11:58" + } + ], + "id": 10370, + "name": "FunctionCall", + "src": "30156:45:58" + } + ], + "id": 10371, + "name": "EmitStatement", + "src": "30151:50:58" + } + ], + "id": 10372, + "name": "Block", + "src": "29035:1173:58" + } + ], + "id": 10373, + "name": "FunctionDefinition", + "src": "28946:1262:58" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "receive", + "modifiers": [ + null + ], + "name": "", + "scope": 10382, + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10374, + "name": "ParameterList", + "src": "30221:2:58" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10375, + "name": "ParameterList", + "src": "30241:0:58" + }, + { + "attributes": { + "statements": [ + null + ] + }, + "children": [], + "id": 10376, + "name": "Block", + "src": "30241:2:58" + } + ], + "id": 10377, + "name": "FunctionDefinition", + "src": "30214:29:58" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "__gap", + "scope": 10382, + "stateVariable": true, + "storageLocation": "default", + "type": "uint256[50]", + "visibility": "private" + }, + "children": [ + { + "attributes": { + "type": "uint256[50]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10378, + "name": "ElementaryTypeName", + "src": "30249:7:58" + }, + { + "attributes": { + "hexvalue": "3530", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 50", + "value": "50" + }, + "id": 10379, + "name": "Literal", + "src": "30257:2:58" + } + ], + "id": 10380, + "name": "ArrayTypeName", + "src": "30249:11:58" + } + ], + "id": 10381, + "name": "VariableDeclaration", + "src": "30249:25:58" + } + ], + "id": 10382, + "name": "ContractDefinition", + "src": "1427:28850:58" + } + ], + "id": 10383, + "name": "SourceUnit", + "src": "33:30245:58" + }, + "compiler": { + "name": "solc", + "version": "0.7.6+commit.7338295f.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "3.4.16", + "updatedAt": "2024-07-31T19:30:30.768Z", + "devdoc": { + "kind": "dev", + "methods": { + "__ExchangeWrapper_init_proxy(address[11],address,address[],address)": { + "params": { + "_initialOwner": "- address of the owner", + "_marketplaces": "- array of addresses of the marketplaces", + "_transferProxies": "- array of addresses of the transfer proxies", + "_weth": "- address of the WETH erc-20 token" + } + }, + "approveWETH(address[])": { + "params": { + "transferProxies": "- array of addresses to approve WETH for" + } + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "params": { + "allowFail": "- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch", + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- array of deatails about the purchases (more info in PurchaseDetails struct)" + } + }, + "onERC721Received(address,address,uint256,bytes)": { + "details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "paused()": { + "details": "Returns true if the contract is paused, and false otherwise." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "params": { + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- deatails about the purchase (more info in PurchaseDetails struct)" + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "updateMarketplaceAddress(uint8,address)": { + "params": { + "_newAddress": "- new address of the marketplace", + "_type": "- type of the marketplace" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "__ExchangeWrapper_init_proxy(address[11],address,address[],address)": { + "notice": "initializes the proxy contract" + }, + "approveWETH(address[])": { + "notice": "approves weth for a list of the addresses" + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "notice": "executes an array of purchases" + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "notice": "executes a single purchase" + }, + "updateMarketplaceAddress(uint8,address)": { + "notice": "updates the address of the marketplace" + } + }, + "version": 1 + } +} \ No newline at end of file diff --git a/projects/exchange-wrapper/build/contracts/RaribleExchangeWrapperUpgradeableV2.json b/projects/exchange-wrapper/build/contracts/RaribleExchangeWrapperUpgradeableV2.json new file mode 100644 index 000000000..fea8faee6 --- /dev/null +++ b/projects/exchange-wrapper/build/contracts/RaribleExchangeWrapperUpgradeableV2.json @@ -0,0 +1,111817 @@ +{ + "contractName": "RaribleExchangeWrapperUpgradeableV2", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bool", + "name": "result", + "type": "bool" + } + ], + "name": "Execution", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "name": "_market", + "type": "uint8" + }, + { + "indexed": true, + "internalType": "address", + "name": "_newAddress", + "type": "address" + } + ], + "name": "MarketplaceAddressUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "blur", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "exchangeV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRare", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "looksRareV2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "newMarket", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155BatchReceived", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC1155Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "onERC721Received", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_4", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_5", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "seaPort_1_6", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "sudoswap", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "weth", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "wyvernExchange", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "x2y2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "inputs": [ + { + "internalType": "address[12]", + "name": "_marketplaces", + "type": "address[12]" + }, + { + "internalType": "address", + "name": "_weth", + "type": "address" + }, + { + "internalType": "address[]", + "name": "_transferProxies", + "type": "address[]" + }, + { + "internalType": "address", + "name": "_initialOwner", + "type": "address" + } + ], + "name": "__ExchangeWrapper_init_proxy", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newMarket", + "type": "address" + } + ], + "name": "__initializeNewMarket", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails", + "name": "purchaseDetails", + "type": "tuple" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + } + ], + "name": "singlePurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "name": "marketId", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fees", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "internalType": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails[]", + "name": "purchaseDetails", + "type": "tuple[]" + }, + { + "internalType": "address", + "name": "feeRecipientFirst", + "type": "address" + }, + { + "internalType": "address", + "name": "feeRecipientSecond", + "type": "address" + }, + { + "internalType": "bool", + "name": "allowFail", + "type": "bool" + } + ], + "name": "bulkPurchase", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "transferProxies", + "type": "address[]" + } + ], + "name": "approveWETH", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "name": "_market", + "type": "uint8" + }, + { + "internalType": "address", + "name": "_newAddress", + "type": "address" + } + ], + "name": "updateMarketplaceAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "metadata": "{\"compiler\":{\"version\":\"0.7.6+commit.7338295f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"}],\"name\":\"Execution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"enum RaribleExchangeWrapperUpgradeableV2.Markets\",\"name\":\"_market\",\"type\":\"uint8\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newAddress\",\"type\":\"address\"}],\"name\":\"MarketplaceAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address[12]\",\"name\":\"_marketplaces\",\"type\":\"address[12]\"},{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"_transferProxies\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"_initialOwner\",\"type\":\"address\"}],\"name\":\"__ExchangeWrapper_init_proxy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newMarket\",\"type\":\"address\"}],\"name\":\"__initializeNewMarket\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"transferProxies\",\"type\":\"address[]\"}],\"name\":\"approveWETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blur\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapperUpgradeableV2.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails[]\",\"name\":\"purchaseDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"allowFail\",\"type\":\"bool\"}],\"name\":\"bulkPurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"exchangeV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRare\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"looksRareV2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newMarket\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155BatchReceived\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC1155Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onERC721Received\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_4\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_5\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"seaPort_1_6\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum RaribleExchangeWrapperUpgradeableV2.Markets\",\"name\":\"marketId\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails\",\"name\":\"purchaseDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"feeRecipientFirst\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feeRecipientSecond\",\"type\":\"address\"}],\"name\":\"singlePurchase\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sudoswap\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum RaribleExchangeWrapperUpgradeableV2.Markets\",\"name\":\"_market\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"_newAddress\",\"type\":\"address\"}],\"name\":\"updateMarketplaceAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wyvernExchange\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"x2y2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"__ExchangeWrapper_init_proxy(address[12],address,address[],address)\":{\"params\":{\"_initialOwner\":\"- address of the owner\",\"_marketplaces\":\"- array of addresses of the marketplaces\",\"_transferProxies\":\"- array of addresses of the transfer proxies\",\"_weth\":\"- address of the WETH erc-20 token\"}},\"__initializeNewMarket(address)\":{\"params\":{\"_newMarket\":\"- address of the new marketplace\"}},\"approveWETH(address[])\":{\"params\":{\"transferProxies\":\"- array of addresses to approve WETH for\"}},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"params\":{\"allowFail\":\"- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\",\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- array of deatails about the purchases (more info in PurchaseDetails struct)\"}},\"onERC721Received(address,address,uint256,bytes)\":{\"details\":\"See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"params\":{\"feeRecipientFirst\":\"- address of the first fee recipient\",\"feeRecipientSecond\":\"- address of the second fee recipient\",\"purchaseDetails\":\"- deatails about the purchase (more info in PurchaseDetails struct)\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"updateMarketplaceAddress(uint8,address)\":{\"params\":{\"_market\":\"- type of the marketplace\",\"_newAddress\":\"- new address of the marketplace\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"__ExchangeWrapper_init_proxy(address[12],address,address[],address)\":{\"notice\":\"initializes the proxy contract\"},\"__initializeNewMarket(address)\":{\"notice\":\"sets the address of the new marketplace\"},\"approveWETH(address[])\":{\"notice\":\"approves weth for a list of the addresses\"},\"bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)\":{\"notice\":\"executes an array of purchases\"},\"singlePurchase((uint8,uint256,uint256,bytes),address,address)\":{\"notice\":\"executes a single purchase\"},\"updateMarketplaceAddress(uint8,address)\":{\"notice\":\"updates the address of the marketplace\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol\":\"RaribleExchangeWrapperUpgradeableV2\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xb419e68addcb82ecda3ad3974b0d2db76435ce9b08435a04d5b119a0c5d45ea5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a85355cc4f2554f4a8d334336d66b48d616abf1d90ec3d6b602e825c6fe63f0c\",\"dweb:/ipfs/QmTJYtsKJjBy3ShAt4kEjvM6nfVS8ZAFQqE29fG16tUP8d\"]},\"@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol\":{\"keccak256\":\"0x6cd0bc8c149150614ca3d4a3d3d21f844a0ab3032625f34fcfcf1c2c8b351638\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aee85054062c8bcc9fdbdfbc92a459e04b4b9437b04c98b820d0772c11aa7268\",\"dweb:/ipfs/QmQZLXFFGNh2qni7fJp9maYU1XoaP77sMBVY3MnFb2Cyed\"]},\"@openzeppelin/contracts-upgradeable/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xc6dbbc2f50a7c104377798a37b2acd1a41c1242544b0bb7a9a7c863f0520eb50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ff3a66f685a49d3750c9b3588770d1ee43ce3cb718e1dc911ac65d8a6d1c1f0d\",\"dweb:/ipfs/QmVK2mdcbZTZ81YQ1rxWWNbYgy3Gpb3yz3L2qtDPTdx9hu\"]},\"@openzeppelin/contracts-upgradeable/introspection/IERC165Upgradeable.sol\":{\"keccak256\":\"0x4784c3f8a520a739dd25d76f514833a653990902d0e21601aed45bda44c87524\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://359411cc44a4499f37d46562ef3f348db443f9a699138c1797264d20b14697b7\",\"dweb:/ipfs/QmUmeQNUwve4MFCc1ace6zMnstqa8S9SZe1nXG9THcpQ5v\"]},\"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\":{\"keccak256\":\"0x0dd1e9b19801e3e7d900fbf4182d81e1afd23ad7be39504e33df6bbcba91d724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5e30d594df25d0651c2cd6f85d856e5fc9f3dbae68d017e1da33eb3c7e2f1ecc\",\"dweb:/ipfs/QmPgkV99jZr3Zs9ex8dJ5j22oX4wDuDtMCnXNy67bTwgAB\"]},\"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\":{\"keccak256\":\"0xd8e4eb08dcc1d1860fb347ba5ffd595242b9a1b66d49a47f2b4cb51c3f35017e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7dbc89479d30592e82442edc38053b380f611037a5e6ceafc7bf57a7aa1f0305\",\"dweb:/ipfs/QmcdYtt56WmjeYvsFjK69FnahnAriw88VzY3XRZwXkQKKN\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol\":{\"keccak256\":\"0x9e6b4b970877d19735e8c488a8c66d3b5a3e01e4705d982379feaafb451057a1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4027c55b0b196d0fc4c468a78f92748871b53798f4cfc38e9d41291407f878a6\",\"dweb:/ipfs/QmevYPTYvTafShnbbbQpPP2BwkikqeXbxo7oeiwmwqdk5s\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155ReceiverUpgradeable.sol\":{\"keccak256\":\"0x119682df753fda361ec986768dd3586b2efa8399152fa35e979758f13d20533f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b9231fc5ac386d7b7ee0b98fe8bcfad4764bede276fd7caf234561882ffec973\",\"dweb:/ipfs/QmQiZebJjL7WLmYY1446SVSDMxojje3pvJSdjMEVdAMa32\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155ReceiverUpgradeable.sol\":{\"keccak256\":\"0x68a2498b459518376db0497bce2344169497020cd95db90d76f8312e02c40ba0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7cfb43a748605e9d48e38cdeddce66206ad7319ed3a5c0b60e9136c9e18d0ad1\",\"dweb:/ipfs/QmPqP3hzZVfZvK6PXnjHkzyJwkwDvuT3aV8gPzhMZ1QmvG\"]},\"@openzeppelin/contracts-upgradeable/token/ERC1155/IERC1155Upgradeable.sol\":{\"keccak256\":\"0xcbc02d192c55298cf65e5695375c839eac979a597a0fbdc1635195c4d28ca5ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://45ee9cb5a548db9a3805b934f995770272583ef6c0abd31aeffb7bd1f4c2f696\",\"dweb:/ipfs/QmcHGENdTcAzU6NuaoJWgMDA2rH1JdCWJf2EXRnSE967Qw\"]},\"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\":{\"keccak256\":\"0xa1931c47a617014f858580db625aa0dcf343796f39acd4b5b51effc092a1f0a9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2cbeb499bad52667b96dd7df8e9b1f583e8c07afaba0018a75e5b7ff6e777173\",\"dweb:/ipfs/QmPLJnuhEcWnpmhMHKsiuVHVxMwb5k6idYyjajbrtZLz5B\"]},\"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol\":{\"keccak256\":\"0x3c9a42b988127a0ac1314c3190c9100fdc7964898f77a75da733fb81a696d672\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4fc10f5a39a82cdc32e092b9933b895ca6df5dcc7ad8cf97e65291d0c995532b\",\"dweb:/ipfs/QmWuEppwgLpFd6R22dZaSnP7Y2xJDrh6c7eUxPXvvhi8mk\"]},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721ReceiverUpgradeable.sol\":{\"keccak256\":\"0x53552243cd7de0d57a876cbaee3485d4bdc2b1c7d58ff15447cd623a3ddb5cd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://795c6d0e2058529f2b9e190207bb6dbe208cf793e70cf99999d5bb39029a3887\",\"dweb:/ipfs/QmTDtUmqY2BwMZjqLPEtz4k1c4DLhEt8p2rSAMN9wNJKQd\"]},\"@openzeppelin/contracts-upgradeable/token/ERC721/IERC721Upgradeable.sol\":{\"keccak256\":\"0x3dab19bb4a63bcbda1ee153ca291694f92f9009fad28626126b15a8503b0e5ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ecc8ae8f1f85e11b6f749e147ac298d1d66879f3bfe3d4518b919f7b6151a73b\",\"dweb:/ipfs/QmYXZfcnCd1N1AaxUTfNQjNHJXAAfVGvae6Bte1SfTCKEz\"]},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0xfc5ea91fa9ceb1961023b2a6c978b902888c52b90847ac7813fe3b79524165f6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6b81dcc816857a9d981386f6d8de49198420ee41cdc0ecade366ab412174d03\",\"dweb:/ipfs/QmV2vznMT6m9qo3pFMAWi3Nz3UDhwesgwFxeXe6Tod3v8A\"]},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xbbf8a21b9a66c48d45ff771b8563c6df19ba451d63dfb8380a865c1e1f29d1a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://062688aac76e27ab50157a9d645700cf92e3c0d51d3d860be1d2e1a0c04a87d0\",\"dweb:/ipfs/QmfXxppWAiSTeH8YNn2EtMPDgzrLeJ5rjRq8knEbje88mX\"]},\"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\":{\"keccak256\":\"0x73bef0a5dec3efde8183c4858d90f683ed2771656c4329647b4d5b0f89498fd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef58fce3c601850d4137223f8df56635f7fa3691e42bd6e2e296747f821a2540\",\"dweb:/ipfs/QmSiJPHcY399BPDgimEosXzsW38MSXPTCxqT1ibbF4AdoZ\"]},\"@rarible/exchange-interfaces/contracts/IAssetMatcher.sol\":{\"keccak256\":\"0x6c4459012ce46db960cfdcc5067c49392aa650e6d78e0702acc7ad9173b061b0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf05f7d8655dea90b54c9ec8d24c1e0cd9205c6f9ab9d0ff98cce01ab3988a9e\",\"dweb:/ipfs/QmTKeDUTXYD98M6heQtHwEZUP9A48pFWgU5YzMSLEvDpRq\"]},\"@rarible/exchange-interfaces/contracts/IERC20TransferProxy.sol\":{\"keccak256\":\"0x5cc1d6300618f13724624bbdd1b4447d1f149dc7cc3b75497e03110f798d9547\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://330001e598d2648c07a4e4c0276ed4822a24533dd6f5ad288738d8bee3c86404\",\"dweb:/ipfs/QmddZvc39hJ9nm2jvnxbjjj8v95XWnn8G4CEzuFxzWCHH6\"]},\"@rarible/exchange-interfaces/contracts/INftTransferProxy.sol\":{\"keccak256\":\"0x43093ee21a43fb70eb06b5e886ea48308fa689765e370297de52d71d4f7ab5cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7dd71504d010833b1c9b38c2489f85408750fa32a2752bd66ba97ace27ffffa6\",\"dweb:/ipfs/QmSfNDJQua2ErfXFj3ce1DGhdpBCQAXRW4RLnZmWJp4iNi\"]},\"@rarible/exchange-interfaces/contracts/IRoyaltiesProvider.sol\":{\"keccak256\":\"0xf947c1e5ab670f631a6b2db55672829766ad410cf4730981202866e8c1a226ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5bb01c6cfdb83f8574fabfc711cc8fd8a8b19f5c2cbc5821a4d4883032b2b70a\",\"dweb:/ipfs/QmdtjTyjLq7v4nAW5pU4ginva8buJCXMzcaVjbaV9Ae55n\"]},\"@rarible/exchange-interfaces/contracts/ITransferProxy.sol\":{\"keccak256\":\"0xd9400959d0a108534601673e480a55c4e760e03211594e8123d9c19e5d3890ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5b35890f8173983e3ac230df020cc51d79e36c53a7691a122b932bf780c6a20a\",\"dweb:/ipfs/QmbNkWijJ9xK9b1TrFXgmVvMxoxs3j1Hev6XLt3P6UBSsR\"]},\"@rarible/exchange-v2/contracts/AssetMatcher.sol\":{\"keccak256\":\"0x8fceb04eec1c1b32bea097a019b57e9422c31fa2e020e9957db91d5b03edb1bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f404c0791e24c10e8f0bc970a0114a776281e7052a1264c1d2a7eca3b01461ef\",\"dweb:/ipfs/Qmchc8HAAWGgDRh4veYW5Ne8XsKdTaWTRaD3zN5Zk3DeJe\"]},\"@rarible/exchange-v2/contracts/ExchangeV2.sol\":{\"keccak256\":\"0x8b5d108d1e027792fd3494dda7feb79937b5bb68cec82109f3ce69fe1f01c59a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b0f9505e14c28ad986741221e3ee5b5942c312d57ee756604aaa6df7a836b192\",\"dweb:/ipfs/QmTD1xnmFmmNskFGubBthbXPxt1JxrtiZxruEKE1JMpHjW\"]},\"@rarible/exchange-v2/contracts/ExchangeV2Core.sol\":{\"keccak256\":\"0xa93d432fd4012eb69625b23fc71744f0d28dbb1acf58165b68647beb18f5baa2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87551f89e3a1649d24ac7840dd17e204f913e413914e22763b1ef5d33dde77b0\",\"dweb:/ipfs/QmZpm54oDNZNUxsaAgFBf5Z6JTKnmcrodJAk6ngEwiNtXq\"]},\"@rarible/exchange-v2/contracts/OrderValidator.sol\":{\"keccak256\":\"0xa73f3046ab283611bcd4904f7f9d40668140e75fa6678dc20fba5721f1dad011\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40f24037fac24f9671d6b31c65ad92b8e1f19457558511b2ce605a2ed564c108\",\"dweb:/ipfs/QmYJVwBmqwyutfqvQxLnvaK7HXHtVqKsKWNtWNYQqjsSEV\"]},\"@rarible/exchange-v2/contracts/libraries/LibDirectTransfer.sol\":{\"keccak256\":\"0xdd424a4854082b53142689a90446bf7637826d1d35a163419c0f953f52728291\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://64d413379346fce68d8ed76bbe0cd6944ca04e54d544a7d34507347d5c36c051\",\"dweb:/ipfs/Qmaae59exeAyHwEhTqhpbp8oCAejvmA5GJhyxTnixbrXLL\"]},\"@rarible/exchange-v2/contracts/libraries/LibFill.sol\":{\"keccak256\":\"0xd8ff6a506590af9d97911eaf66add363e4437525e30e82032acf27d20812a1ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://33a176237c1113ac879abcc2a8d28fd1ea95b447fa53f8c43ff745198db2bead\",\"dweb:/ipfs/QmbYCtCh5EMSD4Mz5c8adCPrb5DGo2GWU3BMPAGJR2FcY3\"]},\"@rarible/exchange-v2/contracts/libraries/LibMath.sol\":{\"keccak256\":\"0x479e01de1a609d836f73eecb1ba5d0a3d78fa791979e8e4f361a576a61b101ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2924c6587b528fdecd101443271472ddc497cc6f4d44d61f1b62620dbce03897\",\"dweb:/ipfs/QmW6udkwDbXuJT6Pdk2KA7y6NzTm8UMkvTFFL666rd3pSD\"]},\"@rarible/exchange-v2/contracts/libraries/LibOrder.sol\":{\"keccak256\":\"0x5ac1388a3571fd7f0d7fc3f78edd354ff37e04079901d1c93c63ea6e1e527190\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2eb634f6538f15df60dc65073de69c08a0bd341f08184fd0bc71b411ea727223\",\"dweb:/ipfs/QmReywWzzNM93bV3LjJJpPEhiLXZUVuTa28pZ5KDkF3U8X\"]},\"@rarible/exchange-v2/contracts/libraries/LibOrderData.sol\":{\"keccak256\":\"0x7ade2e0f39574183261011013a7eebe7a06abad9b8585e48d132a4579c2334bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://69672cdfb3befaa19f5a50b986028cc93dc07359b6dad680f467715de3425162\",\"dweb:/ipfs/QmWMH7UyGn5E9u4xX2tYuZBEsexLaKxKPgrwu9xKkHzUDi\"]},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV1.sol\":{\"keccak256\":\"0x2ab77ee6306b933315e80f6ef38d27855cf881b9452891362016b8e1becb92ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5afbdbfb097cc777df17a25f5c936cb136bce96fc6d9f6f42d104ed7dfd9dc87\",\"dweb:/ipfs/Qme6vhxmfX5oYCBtY9bSLx4Y2WktErkupJZSqGbL37GeBx\"]},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV2.sol\":{\"keccak256\":\"0x51684b4d70282bd621cec5b0d25f2fcb5d1782c282ce0ffcf6fa63890d9064d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://17342ba01715b36926f06f308976491c709e8710215fe011854c9867e5a5f9e5\",\"dweb:/ipfs/QmUvbWfPNC8Loygtgf6QDn1KZyJdSQwgGDFoj58eJ2YKaV\"]},\"@rarible/exchange-v2/contracts/libraries/LibOrderDataV3.sol\":{\"keccak256\":\"0x73efab7636308c9dbc8dd54db91535dd0f8915624ffe1547f545f5ba617dc126\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c3600eb1193ad4582ac979493d42b0dce65d4aeb2706677b465da266855b7efa\",\"dweb:/ipfs/QmddXvqbsb81i4F2Wybb3Bnjdjkx7n1Q7mRrXT4g4i4nGH\"]},\"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\":{\"keccak256\":\"0x0ec3954623b8ddbd08229eecd8580767b9af823b495f94156324525f3dec6bd8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce916da9aeccb7bae0d1e690252865336511a1f23e34a9d1f42bcd67693f8d09\",\"dweb:/ipfs/QmY47ArsEfAEWDVFFLYSVb4gDvRZS5FEK8Ao1kqhsH714b\"]},\"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\":{\"keccak256\":\"0x625ba0ce8171b0cdc327ded2f476c7225db4e2e122da2587215ba777c92be258\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f635e88ec9ac31039279a810d7845cf6a5263c9fdca3875308148329dd4c2443\",\"dweb:/ipfs/Qmb25o6eBbdfLVasGA6m7LPj2gZrB2hFDqPMNkL5ypt8xj\"]},\"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\":{\"keccak256\":\"0x8211a020b463d88e40935cff89f07aead1d5e39995529c7e996e12f5068eaaa1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0b56d309a9b7ae7ccf3948624b9990e9834a12fb7e4a38d51ef10da5c2336996\",\"dweb:/ipfs/QmdVgwuJM2qSAVEJx8AmvTYKPUhweuQyHFKrPvPznW4gZb\"]},\"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\":{\"keccak256\":\"0xf8417647cdb0426f050599e0e255bfe56ffcf16a80fe9991f3af724223d58400\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6345c81e25312647eae143b804cc31024bf3398ee5d33fe03eceae171b4d0576\",\"dweb:/ipfs/QmQgiS1HYaXEBgUiv7kp2WgUKwVfsD6RzHFRE6XYuWkoD4\"]},\"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\":{\"keccak256\":\"0x336480852afc0ace28ff775b1332677dcc550d3330ade9010b91c668b2bc5ca5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ddcb31937ec345147b0ed8160bb0818b78d8e8087e563696d9dd3078f66b59e\",\"dweb:/ipfs/QmRL94Nzr27Tp6cEvMu1udApJryTAVmrpvZvzHHLYmMiAv\"]},\"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\":{\"keccak256\":\"0x57254a93cccd4a38c9a621ecd0a2486561ef78b18c0dc12d2bf68216f5d52adc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9956b3003332c0bd50bf0fc5d3cde4437b40132a14d98711bfab11309cdb6b24\",\"dweb:/ipfs/QmeDkSTk45vHsq6yNcrCL5q43i9ti79QebX9ehFi2MrA1i\"]},\"@rarible/exchange-wrapper/contracts/libraries/LibLooksRare.sol\":{\"keccak256\":\"0xb1a211f0b3fffedc76cda775378ff21cef4928b4fc6cde5b90b5e026e549e4d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df8f176b8c3b626c1155ff63cdee5530d12bf1eedbae3de9a8b5e1919f0acc97\",\"dweb:/ipfs/QmSKCwvyvEUTKFfobLthB6RVMYQQpVCjv7Q3yPcdeBpfo1\"]},\"@rarible/exchange-wrapper/contracts/libraries/LibSeaPort.sol\":{\"keccak256\":\"0xd5244492ea1491e11b712d459d98cfe9fe55af113dab9715e6ba24697af7d77b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b5e2348cde48f62ab2c21609bd0b805fe3a02ed8ab6ebe336707f305fda87b3c\",\"dweb:/ipfs/QmNShKsK7eA89BXk2b73i372mUCesqSCQvMyGSkHT1F9uG\"]},\"@rarible/lazy-mint/contracts/erc-1155/LibERC1155LazyMint.sol\":{\"keccak256\":\"0x541f8f29d7d643c5eab654e1e86fc97392f79b246fc5072fc0dcc5c93802b98d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0846a9543a1d93c28d74164b18489e3b4a9f56426db431b1487a494a7fc07a27\",\"dweb:/ipfs/QmcitvWqvnYdt6i6SP5DWwB92H8bYpdbBeP7d8mdV2isRA\"]},\"@rarible/lazy-mint/contracts/erc-721/LibERC721LazyMint.sol\":{\"keccak256\":\"0xc0d28cb2d3f811cfcad6ed6d1d015e3a470a83d7896d3205cb8410c4bede097a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86e9151e83e7d5d8834d6f878961a0a86370feaf17fead696fc9a2f2e0365409\",\"dweb:/ipfs/QmdfjzMPSA71x4AQEDm9w1bhSo16Zyky1FuLiSeB8vxwFV\"]},\"@rarible/lib-asset/contracts/LibAsset.sol\":{\"keccak256\":\"0x5d63bba4747a12a83c5628dba94bf56714b4dcf94f742ff28863034831061c8a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9826768c7f5c5423d9bbf49be50bd21ed2db5374ee47648150e50aa10e3c0151\",\"dweb:/ipfs/Qmex4xCv4MFRfCxMNZzzsKXYAFxbYWQRFsbaHiJfDTozYG\"]},\"@rarible/lib-bp/contracts/BpLibrary.sol\":{\"keccak256\":\"0x17c563120ba6b4c52d10621806b18af45946fe64894d995e4d672cccf6c09c8c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb8c814ee6e5d212551da934ead2ac847f05a57757465bd4fda124b34a44089e\",\"dweb:/ipfs/QmdsXTw92ow7gnDyCjReMFdBZArYFBFCsKdhQzE7YG3ENp\"]},\"@rarible/lib-part/contracts/LibPart.sol\":{\"keccak256\":\"0xd0123f7411573a6a7e1527e0d3901913d7642e504ff240d5b7c5b76a28587def\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://447b449f7f986ecfdea10cbc96ae276877102866353b4f8410fec0bdb357d5ae\",\"dweb:/ipfs/QmatbYwMc1UXCGGH1D9fvgLbLPNdgzBVafYW84B1nJJiRr\"]},\"@rarible/lib-signature/contracts/IERC1271.sol\":{\"keccak256\":\"0x47e5ddd7f0504f513ccff6f04095004452c6b8332d3f88e6959ea189568b7878\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://21f162bc4d1ee1c5d0184c09d9d367882bae5f737d1a13bd53acf96a8e14f36d\",\"dweb:/ipfs/Qmcv1Z6P8ikAN6L8QLodA5VtYKEykgmjKmPjs6e562DoMo\"]},\"@rarible/lib-signature/contracts/LibSignature.sol\":{\"keccak256\":\"0x7a5583247b42c05cd0e592a870755c9b7bba3f2141f6e0dd1a123af504372237\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3463cea638e616b682f97f288566d8f9bf0c255c8c3c71c3f856faaa1a101fa9\",\"dweb:/ipfs/QmWj1KRmFNTmAMBQYFbjCQ7thD2kpb7V2QDSZzPMEt8QQv\"]},\"@rarible/role-operator/contracts/OperatorRole.sol\":{\"keccak256\":\"0x951ab42632086e11ab8715bf62b4f3d6ab430aafb7095d535326cf2740efa47d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://941831530cfc15efb8d92dc2f6ea93da4fc3ddc2011752e4ebdeffe4579e6a11\",\"dweb:/ipfs/QmasfHCQ845qg6UMoTMciYU7CScKowMm4fABmCLxpVBnmW\"]},\"@rarible/royalties-registry/contracts/RoyaltiesRegistry.sol\":{\"keccak256\":\"0xe0ea605e62d7b65dae93684b5102383b3b9fec0ade21efca0f2831d468738f50\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://65c7e1466159726bcca91b29df67786cfcaa5eb27991fd52675b8513e1c8ce22\",\"dweb:/ipfs/Qma5X4ApFihKGYiutkd8Nie4Vd9M31khna52YGy9seEhu9\"]},\"@rarible/royalties/contracts/IERC2981.sol\":{\"keccak256\":\"0x3d5e9391e093802a14b2a3765df0faa582ae6c5d1ea813491d9923ddf9937f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bf92b14151928d1ec8c9e62486dd6d738e9dffdf8968f9165ff7bec3b8efe4d3\",\"dweb:/ipfs/QmPf8EJiaGceT2Jd77sgcves2mDZkznPWgqmgv1NEzrP3A\"]},\"@rarible/royalties/contracts/LibRoyalties2981.sol\":{\"keccak256\":\"0x45d9500be6a3d06912d6a6489457c21940970c227b99703d46098831008b3fdc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://85090a0a89cb7b19d35cdd47a6695358bebb507a37f94ae9cd24c44ae78aff4b\",\"dweb:/ipfs/QmSFdveYMMDcU45JPeQSMkgwPz3QPNAab19YaD2Z6infS7\"]},\"@rarible/royalties/contracts/LibRoyaltiesV1.sol\":{\"keccak256\":\"0xa69539ead11d93c9c53c97c66c01f2aa054bdc51dfc266c05c9ff59b9c648d0f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3bb1b575738f2ebb531b3156e86915d4222377e6b62968e911e92a82267222a0\",\"dweb:/ipfs/QmQtnjU8QNgPKspPwHR8bD8zY76ygcztEuQAaKWPUimN7e\"]},\"@rarible/royalties/contracts/LibRoyaltiesV2.sol\":{\"keccak256\":\"0xf61719a8f17946a3e49cc9cba266e8e40df616166a5186acefaa09f570f2477b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c69e8d4549f5ae6e74206accf89dcd85c24fc043628bcb0bc2cc35e5a0a072e9\",\"dweb:/ipfs/Qmacor2RvcJKqfJG7ewvMcGkeyyhtJCkW8npDNdUE8hqwx\"]},\"@rarible/royalties/contracts/RoyaltiesV1.sol\":{\"keccak256\":\"0x9dd5165b224ab2c9a5d8243b0ba296181d00470ea9d054d1afed86453a2337a8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://84d7a5e09f1e1232fbc526c8584e3e689072e2f731e4cb55edbfb92b5bc8b584\",\"dweb:/ipfs/QmbCTLg22HRW1fcJq9NLVF5DaPJVQFEGzPmCDmNjGTbC6i\"]},\"@rarible/royalties/contracts/RoyaltiesV2.sol\":{\"keccak256\":\"0xf9ed1454eecb96c624c4b69d074d9b047f947f77b14951e1e329a22ef470bda2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://912ea032af419d8bee48bdeace6298c8d5eabf04dfa54e85e2b90a5a89a0b406\",\"dweb:/ipfs/QmfHuuWwE8FbTuu73GQVAnHKjb1e6QEQj7W1jtuJeR2qvY\"]},\"@rarible/transfer-manager/contracts/RaribleTransferManager.sol\":{\"keccak256\":\"0x26817b8e94229124aa1298725cc122d23ee26ca5d63effc935910aa962fe4a83\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://10fccbc38e88c4c919fe0616a946c7a18aa91d3f610f0bc5b39de945afb87d2c\",\"dweb:/ipfs/Qmd6Cmbj6frV7rhDVD85szS2y1fRygGZxagQv5ETSigwbZ\"]},\"@rarible/transfer-manager/contracts/TransferExecutor.sol\":{\"keccak256\":\"0xea639616c66696b5ae9b278d3c6c9a85839bb5e815a4db046b4fd0225cd86625\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c396a4f56d9fbd2ab50325e1d02f440972cc2fdc6e839dcdc7b3a97ee0dac62\",\"dweb:/ipfs/QmNziWD58oNGi1w7uahhXGLNzUELdCYRRBpx2XV4pVAFvA\"]},\"@rarible/transfer-manager/contracts/interfaces/ITransferExecutor.sol\":{\"keccak256\":\"0xe7f4318d4576876f4fbc273f3602aa0973bc2c63d393b2764789edc8f8508b7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7095c7ef181c65fae6376be15585633ce8c48c80950cc2a36c64574ee3c2b70e\",\"dweb:/ipfs/QmeB7Ysoqw9jZSkXBWa9ngm2SCQkpzc84ZUpX1mvbEWhdg\"]},\"@rarible/transfer-manager/contracts/interfaces/ITransferManager.sol\":{\"keccak256\":\"0x4ee97ebeee379c623507e56833b644ff6c3ef96f5a7ee5cc92ec191a13c3505e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7205214325602f627f3c1ded6e33c86c6efa9f90ff2375865b2b9b4e5e22ad6b\",\"dweb:/ipfs/QmZZRcygh45GkWt723dCvaKDkRHo3SPLz3NPi3zFqA91by\"]},\"@rarible/transfer-manager/contracts/lib/LibDeal.sol\":{\"keccak256\":\"0xa547c45c10324eb0ffa9bcc246406a88f9a07cbf198c5df5832544f27495b0e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://23a0bc9507299ef10619995307a46f04c2cddf327279fcc43ce93bc3730a5345\",\"dweb:/ipfs/QmY6A2bkDEau4znQhUC9BZbMQhrHJDJ7786ChGL49sp6L6\"]},\"@rarible/transfer-manager/contracts/lib/LibFeeSide.sol\":{\"keccak256\":\"0xbbb3298e900bd2b0b5bc934fb3e006ff876b8fae6310675e82d35e949e1c039b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a89218f4574b6819325391df194e287b07c7bf0d8f5f33713cf8f1ea642ab11\",\"dweb:/ipfs/QmRRWsL3jn8y7wRQdJehQU9cFo8UFzDWRf3MpzR2TKb5Fd\"]},\"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\":{\"keccak256\":\"0x01cf87ba2ef274b5fa9d75731912b5a81eb1a50a870bf975288c65596cad2c85\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b739d82f1a1f9936a6cc41559f406b44b2fa1a62c12195e905c85260b7b50505\",\"dweb:/ipfs/QmNWDoTA13yCb2gvrmNWwY71nVZzPAinR6418dsVzo1TDg\"]},\"@rarible/transfer-proxy/contracts/proxy/ERC20TransferProxy.sol\":{\"keccak256\":\"0x2fce5fa6025c24a87072eed4cec6ff8e9172ec7b72ca211286904847adf4a324\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3e93b66821936f4061d9faae5b7386e7c9d051a03bacca6ace08376b80ad4872\",\"dweb:/ipfs/Qmb7h6tARsjUF4qzwRY2oqHT8iC5kjWp6NeYuw4x4Aitrb\"]},\"@rarible/transfer-proxy/contracts/proxy/TransferProxy.sol\":{\"keccak256\":\"0x23a035508922fbe29dfb91796175b391943f830eead313134142a01bd776f848\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cddd2fb58f917d45b606a241c404614f378f7c9ed2594040f13e702fff75bee1\",\"dweb:/ipfs/QmYjWY5EirJnF9WTtPn5nLHyUy4eECcYPuWMx83RJLw9TR\"]},\"project:/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol\":{\"keccak256\":\"0xc6c93cd79733c0ed92c3e012f508aa3a0e42a44afc36a86abf1163764423512b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a14557a734be58dbb3e421abe238e441470b7f34fd00271583af2dfdd63ceec\",\"dweb:/ipfs/QmVhoZqQmbMWLtKTFEFmUARg4AgXc1hoKBirFQ3wFowNHH\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b5061563680620000216000396000f3fe60806040526004361061019f5760003560e01c80638da5cb5b116100ec578063c9f0a2fa1161008a578063f23a6e6111610064578063f23a6e6114610409578063f2fde38b14610429578063f66ac0cb14610449578063fc40c9c71461045e576101a6565b8063c9f0a2fa146103ca578063cc236dfa146103df578063df6c2558146103f4576101a6565b8063b94ee332116100c6578063b94ee33214610362578063bc197c8114610375578063bd4486ee14610395578063bf628ddf146103aa576101a6565b80638da5cb5b146103235780639110c77714610338578063a05f32dc1461034d576101a6565b80635c975abb11610159578063715018a611610133578063715018a6146102bb57806386496e7a146102d057806386dcbd27146102e35780638b87964914610303576101a6565b80635c975abb1461026f5780635cdb4367146102845780635ea1e4c9146102a6576101a6565b80628534f7146101ab57806301ffc9a7146101d6578063150b7a0214610203578063349d6a85146102305780633733b82b146102455780633fc8cef31461025a576101a6565b366101a657005b600080fd5b3480156101b757600080fd5b506101c0610473565b6040516101cd9190614be8565b60405180910390f35b3480156101e257600080fd5b506101f66101f1366004614416565b610483565b6040516101cd9190614c71565b34801561020f57600080fd5b5061022361021e366004613faf565b6104a6565b6040516101cd9190614c7c565b34801561023c57600080fd5b506101c06104b6565b34801561025157600080fd5b506101c06104c6565b34801561026657600080fd5b506101c06104d6565b34801561027b57600080fd5b506101f66104e6565b34801561029057600080fd5b506102a461029f366004614432565b6104f0565b005b3480156102b257600080fd5b506101c0610858565b3480156102c757600080fd5b506102a4610868565b6102a46102de3660046145d0565b610914565b3480156102ef57600080fd5b506102a46102fe36600461413e565b610afe565b34801561030f57600080fd5b506102a461031e366004613eea565b610c1e565b34801561032f57600080fd5b506101c0610ccd565b34801561034457600080fd5b506101c0610cdc565b34801561035957600080fd5b506101c0610cec565b6102a461037036600461434a565b610cfc565b34801561038157600080fd5b50610223610390366004613f06565b610fad565b3480156103a157600080fd5b506101c0610fbe565b3480156103b657600080fd5b506102a46103c536600461407e565b610fce565b3480156103d657600080fd5b506101c061127f565b3480156103eb57600080fd5b506101c061128f565b34801561040057600080fd5b506101c061129f565b34801561041557600080fd5b50610223610424366004614018565b6112af565b34801561043557600080fd5b506102a4610444366004613eea565b6112c0565b34801561045557600080fd5b506101c06113c3565b34801561046a57600080fd5b506101c06113d3565b610161546001600160a01b031681565b6001600160e01b0319811660009081526097602052604090205460ff165b919050565b630a85bd0160e11b949350505050565b610168546001600160a01b031681565b610166546001600160a01b031681565b61016b546001600160a01b031681565b61012d5460ff1690565b6104f86113e3565b6001600160a01b0316610509610ccd565b6001600160a01b031614610552576040805162461bcd60e51b815260206004820181905260248201526000805160206155e1833981519152604482015290519081900360640190fd5b6001600160a01b0381166105815760405162461bcd60e51b815260040161057890614e3c565b60405180910390fd5b600182600b81111561058f57fe5b14156105b65761015f80546001600160a01b0319166001600160a01b038316179055610815565b600082600b8111156105c457fe5b14156105eb5761016080546001600160a01b0319166001600160a01b038316179055610815565b600282600b8111156105f957fe5b14156106205761016180546001600160a01b0319166001600160a01b038316179055610815565b600382600b81111561062e57fe5b14156106555761016280546001600160a01b0319166001600160a01b038316179055610815565b600482600b81111561066357fe5b141561068a5761016380546001600160a01b0319166001600160a01b038316179055610815565b600582600b81111561069857fe5b14156106bf5761016480546001600160a01b0319166001600160a01b038316179055610815565b600682600b8111156106cd57fe5b14156106f45761016580546001600160a01b0319166001600160a01b038316179055610815565b600782600b81111561070257fe5b14156107295761016680546001600160a01b0319166001600160a01b038316179055610815565b600882600b81111561073757fe5b141561075e5761016780546001600160a01b0319166001600160a01b038316179055610815565b600982600b81111561076c57fe5b14156107935761016880546001600160a01b0319166001600160a01b038316179055610815565b600a82600b8111156107a157fe5b14156107c85761016980546001600160a01b0319166001600160a01b038316179055610815565b600b82600b8111156107d657fe5b14156107fd5761016a80546001600160a01b0319166001600160a01b038316179055610815565b60405162461bcd60e51b81526004016105789061515c565b806001600160a01b031682600b81111561082b57fe5b6040517f90b0e35c110f9f250b584328e42e7eb7c007b77bf8c081c5aaef84c63a121efc90600090a35050565b610164546001600160a01b031681565b6108706113e3565b6001600160a01b0316610881610ccd565b6001600160a01b0316146108ca576040805162461bcd60e51b815260206004820181905260248201526000805160206155e1833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b61091c6104e6565b15610961576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600061096c846113e7565b90508015610a025761016b546001600160a01b03166323b872dd61098e6113e3565b30846040518463ffffffff1660e01b81526004016109ae93929190614bfc565b602060405180830381600087803b1580156109c857600080fd5b505af11580156109dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0091906143fa565b505b6000610a1185604001516114b2565b90506000808080846001811115610a2457fe5b1415610a5557610a358860006114ce565b91945092509050610a468288612387565b610a508187612387565b610aa7565b6001846001811115610a6357fe5b1415610a8f57610a748860006123b2565b91945092509050610a8582886127b7565b610a5081876127b7565b60405162461bcd60e51b815260040161057890614e73565b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610ad69190614c71565b60405180910390a1610ae6612859565b8415610af457610af461286d565b5050505050505050565b610b066113e3565b6001600160a01b0316610b17610ccd565b6001600160a01b031614610b60576040805162461bcd60e51b815260206004820181905260248201526000805160206155e1833981519152604482015290519081900360640190fd5b60005b81811015610c195761016b546001600160a01b031663095ea7b3848484818110610b8957fe5b9050602002016020810190610b9e9190613eea565b6000196040518363ffffffff1660e01b8152600401610bbe929190614c58565b602060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1091906143fa565b50600101610b63565b505050565b610c266113e3565b6001600160a01b0316610c37610ccd565b6001600160a01b031614610c80576040805162461bcd60e51b815260206004820181905260248201526000805160206155e1833981519152604482015290519081900360640190fd5b61016a546001600160a01b031615610caa5760405162461bcd60e51b815260040161057890615082565b61016a80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031690565b610163546001600160a01b031681565b610160546001600160a01b031681565b610d046104e6565b15610d49576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60008060008060008060005b8a51811015610d8657610d7a8b8281518110610d6d57fe5b60200260200101516113e7565b90910190600101610d55565b508015610e1b5761016b546001600160a01b03166323b872dd610da76113e3565b30846040518463ffffffff1660e01b8152600401610dc793929190614bfc565b602060405180830381600087803b158015610de157600080fd5b505af1158015610df5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1991906143fa565b505b60005b8a51811015610f45576000610e498c8381518110610e3857fe5b6020026020010151604001516114b2565b90506000808080846001811115610e5c57fe5b1415610ea357610e7f8f8681518110610e7157fe5b60200260200101518d6114ce565b91945092509050610e908b83612981565b9a50610e9c8a82612981565b9950610ef4565b6001846001811115610eb157fe5b1415610a8f57610ed48f8681518110610ec657fe5b60200260200101518d6123b2565b91945092509050610ee58983612981565b9850610ef18882612981565b97505b8680610efd5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610f2e9190614c71565b60405180910390a150505050806001019050610e1e565b5081610f635760405162461bcd60e51b8152600401610578906150ee565b610f6d868a612387565b610f778589612387565b610f81848a6127b7565b610f8b83896127b7565b610f93612859565b8015610fa157610fa161286d565b50505050505050505050565b63bc197c8160e01b95945050505050565b610165546001600160a01b031681565b600054610100900460ff1680610fe75750610fe76129e2565b80610ff5575060005460ff16155b6110305760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff1615801561105b576000805460ff1961ff0019909116610100171660011790555b6110636129f3565b61106b612aa4565b611073612b39565b61107b612bd6565b845161015f80546001600160a01b03199081166001600160a01b039384161790915560208701516101608054831691841691909117815560408801516101618054841691851691909117905560608801516101628054841691851691909117905560808801516101638054841691851691909117905560a08801516101648054841691851691909117905560c08801516101658054841691851691909117905560e08801516101668054841691851691909117905561010088015161016780548416918516919091179055610120880151610168805484169185169190911790556101408801516101698054841691851691909117905587015161016a8054831691841691909117905561016b805490911691861691909117905560005b835181101561125c5761016b546001600160a01b0316156112545761016b5484516001600160a01b039091169063095ea7b3908690849081106111d857fe5b60200260200101516000196040518363ffffffff1660e01b8152600401611200929190614c58565b602060405180830381600087803b15801561121a57600080fd5b505af115801561122e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125291906143fa565b505b600101611199565b50611266826112c0565b8015611278576000805461ff00191690555b5050505050565b61015f546001600160a01b031681565b61016a546001600160a01b031681565b610167546001600160a01b031681565b63f23a6e6160e01b95945050505050565b6112c86113e3565b6001600160a01b03166112d9610ccd565b6001600160a01b031614611322576040805162461bcd60e51b815260206004820181905260248201526000805160206155e1833981519152604482015290519081900360640190fd5b6001600160a01b0381166113675760405162461bcd60e51b815260040180806020018281038252602681526020018061556c6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b610169546001600160a01b031681565b610162546001600160a01b031681565b3390565b6000806000905060006113fd84604001516114b2565b9050600181600181111561140d57fe5b14156114ab576020840151604085015192810192600091829161142f91612c73565b91509150808285010193506000611453876060015188604001518960000151612ca4565b91505060005b81518110156114a657600060a083838151811061147257fe5b6020026020010151901c90506000611497828b60200151612d5d90919063ffffffff16565b97909701965050600101611459565b505050505b5092915050565b6000603082901c61ffff1660018111156114c857fe5b92915050565b60008060008060006114ed876060015188604001518960000151612ca4565b6020890151919350915060028851600b81111561150657fe5b14156115ba57610161546040516000916001600160a01b031690839061152d908790614bcc565b60006040518083038185875af1925050503d806000811461156a576040519150601f19603f3d011682016040523d82523d6000602084013e61156f565b606091505b505090508715611597578061159257600080600096509650965050505050612380565b6115b4565b806115b45760405162461bcd60e51b815260040161057890614ed9565b5061234e565b60018851600b8111156115c957fe5b14156116725761015f546040516000916001600160a01b03169083906115f0908790614bcc565b60006040518083038185875af1925050503d806000811461162d576040519150601f19603f3d011682016040523d82523d6000602084013e611632565b606091505b505090508715611655578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b815260040161057890614cfb565b60008851600b81111561168157fe5b141561172a57610160546040516000916001600160a01b03169083906116a8908790614bcc565b60006040518083038185875af1925050503d80600081146116e5576040519150601f19603f3d011682016040523d82523d6000602084013e6116ea565b606091505b50509050871561170d578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b815260040161057890614d69565b60038851600b81111561173957fe5b1415611b46576000838060200190518101906117559190614626565b905087156117d8576101625460405163357a150b60e01b81526001600160a01b039091169063357a150b9084906117909085906004016151c1565b6000604051808303818588803b1580156117a957600080fd5b505af1935050505080156117bb575060015b6117d357600080600096509650965050505050612380565b61183e565b6101625460405163357a150b60e01b81526001600160a01b039091169063357a150b90849061180b9085906004016151c1565b6000604051808303818588803b15801561182457600080fd5b505af1158015611838573d6000803e3d6000fd5b50505050505b60005b816020015151811015611b3f5760008260200151828151811061186057fe5b602002602001015160200151905060008360200151838151811061188057fe5b60200260200101516040015190506000846000015183815181106118a057fe5b6020026020010151610100015182815181106118b857fe5b60200260200101516020015190506000856000015184815181106118d857fe5b602002602001015160e001515111801561190e57506000856020015185815181106118ff57fe5b602002602001015160c0015151115b1561195457611954818660200151868151811061192757fe5b602002602001015160c001518760000151868151811061194357fe5b602002602001015160e00151612d75565b845180518490811061196257fe5b60200260200101516080015160011415611a375760008180602001905181019061198c9190614289565b905060005b8151811015611a305760008282815181106119a857fe5b6020026020010151905080600001516001600160a01b03166342842e0e306119ce6113e3565b84602001516040518463ffffffff1660e01b81526004016119f193929190614bfc565b600060405180830381600087803b158015611a0b57600080fd5b505af1158015611a1f573d6000803e3d6000fd5b505060019093019250611991915050565b5050611b31565b8451805184908110611a4557fe5b60200260200101516080015160021415611b1957600081806020019051810190611a6f91906141ac565b905060005b8151811015611a30576000828281518110611a8b57fe5b6020026020010151905080600001516001600160a01b031663f242432a30611ab16113e3565b846020015185604001516040518563ffffffff1660e01b8152600401611ada9493929190614c20565b600060405180830381600087803b158015611af457600080fd5b505af1158015611b08573d6000803e3d6000fd5b505060019093019250611a74915050565b60405162461bcd60e51b815260040161057890614fe8565b505050806001019050611841565b505061234e565b60048851600b811115611b5557fe5b1415611d7457600080600085806020019051810190611b7491906146ee565b9250925092508915611bff5761016354604051635a72594b60e11b81526001600160a01b039091169063b4e4b296908690611bb59087908790600401615348565b6000604051808303818588803b158015611bce57600080fd5b505af193505050508015611be0575060015b611bfa576000806000985098509850505050505050612380565b611c67565b61016354604051635a72594b60e11b81526001600160a01b039091169063b4e4b296908690611c349087908790600401615348565b6000604051808303818588803b158015611c4d57600080fd5b505af1158015611c61573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611cf65781604001516001600160a01b03166342842e0e30611c9c6113e3565b85608001516040518463ffffffff1660e01b8152600401611cbf93929190614bfc565b600060405180830381600087803b158015611cd957600080fd5b505af1158015611ced573d6000803e3d6000fd5b50505050611d6c565b6001600160e01b0319811663025ceed960e61b1415611d545781604001516001600160a01b031663f242432a30611d2b6113e3565b85608001518660a001516040518563ffffffff1660e01b8152600401611cbf9493929190614c20565b60405162461bcd60e51b815260040161057890615056565b50505061234e565b60058851600b811115611d8357fe5b1415611e2c57610164546040516000916001600160a01b0316908390611daa908790614bcc565b60006040518083038185875af1925050503d8060008114611de7576040519150601f19603f3d011682016040523d82523d6000602084013e611dec565b606091505b505090508715611e0f578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b815260040161057890614fb1565b60068851600b811115611e3b57fe5b1415611ee457610165546040516000916001600160a01b0316908390611e62908790614bcc565b60006040518083038185875af1925050503d8060008114611e9f576040519150601f19603f3d011682016040523d82523d6000602084013e611ea4565b606091505b505090508715611ec7578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b815260040161057890614d32565b60078851600b811115611ef357fe5b1415611f9c57610166546040516000916001600160a01b0316908390611f1a908790614bcc565b60006040518083038185875af1925050503d8060008114611f57576040519150601f19603f3d011682016040523d82523d6000602084013e611f5c565b606091505b505090508715611f7f578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b81526004016105789061501f565b60088851600b811115611fab57fe5b141561218357600080600085806020019051810190611fca919061455c565b92509250925089156120555761016754604051639a1fc3a760e01b81526001600160a01b0390911690639a1fc3a790869061200b9087908790600401615193565b6000604051808303818588803b15801561202457600080fd5b505af193505050508015612036575060015b612050576000806000985098509850505050505050612380565b6120bd565b61016754604051639a1fc3a760e01b81526001600160a01b0390911690639a1fc3a790869061208a9087908790600401615193565b6000604051808303818588803b1580156120a357600080fd5b505af11580156120b7573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b141561211c578251606001516001600160a01b03166342842e0e306120f36113e3565b8651608001516040516001600160e01b031960e086901b168152611cbf93929190600401614bfc565b6001600160e01b0319811663025ceed960e61b1415611d54578251606001516001600160a01b031663f242432a306121526113e3565b8651608081015160a0909101516040516001600160e01b031960e087901b168152611cbf9493929190600401614c20565b60098851600b81111561219257fe5b141561223b57610168546040516000916001600160a01b03169083906121b9908790614bcc565b60006040518083038185875af1925050503d80600081146121f6576040519150601f19603f3d011682016040523d82523d6000602084013e6121fb565b606091505b50509050871561221e578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b815260040161057890614f45565b600a8851600b81111561224a57fe5b14156122f357610169546040516000916001600160a01b0316908390612271908790614bcc565b60006040518083038185875af1925050503d80600081146122ae576040519150601f19603f3d011682016040523d82523d6000602084013e6122b3565b606091505b5050905087156122d6578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b815260040161057890614e05565b600b8851600b81111561230257fe5b14156123365761016a546001600160a01b03166123315760405162461bcd60e51b815260040161057890615125565b61234e565b60405162461bcd60e51b815260040161057890614dd7565b61235c828960200151612e06565b6000806123718a604001518b60200151612c73565b60019950909750955050505050505b9250925092565b60008211801561239f57506001600160a01b03811615155b156123ae576123ae8183612e8f565b5050565b60008060008060006123d1876060015188604001518960000151612ca4565b909250905060028751600b8111156123e557fe5b141561249657610161546040516000916001600160a01b03169061240a908590614bcc565b6000604051808303816000865af19150503d8060008114612447576040519150601f19603f3d011682016040523d82523d6000602084013e61244c565b606091505b505090508615612473578061246e576000806000955095509550505050612380565b612490565b806124905760405162461bcd60e51b815260040161057890614f7c565b50612782565b60008751600b8111156124a557fe5b141561254b57610160546040516000916001600160a01b0316906124ca908590614bcc565b6000604051808303816000865af19150503d8060008114612507576040519150601f19603f3d011682016040523d82523d6000602084013e61250c565b606091505b50509050861561252e578061246e576000806000955095509550505050612380565b806124905760405162461bcd60e51b815260040161057890614da0565b60068751600b81111561255a57fe5b141561260057610165546040516000916001600160a01b03169061257f908590614bcc565b6000604051808303816000865af19150503d80600081146125bc576040519150601f19603f3d011682016040523d82523d6000602084013e6125c1565b606091505b5050905086156125e3578061246e576000806000955095509550505050612380565b806124905760405162461bcd60e51b815260040161057890614c91565b60098751600b81111561260f57fe5b14156126b557610168546040516000916001600160a01b031690612634908590614bcc565b6000604051808303816000865af19150503d8060008114612671576040519150601f19603f3d011682016040523d82523d6000602084013e612676565b606091505b505090508615612698578061246e576000806000955095509550505050612380565b806124905760405162461bcd60e51b815260040161057890614cc6565b600a8751600b8111156126c457fe5b141561276a57610169546040516000916001600160a01b0316906126e9908590614bcc565b6000604051808303816000865af19150503d8060008114612726576040519150601f19603f3d011682016040523d82523d6000602084013e61272b565b606091505b50509050861561274d578061246e576000806000955095509550505050612380565b806124905760405162461bcd60e51b815260040161057890614f10565b60405162461bcd60e51b815260040161057890614eaa565b612790818860200151612f27565b6000806127a589604001518a60200151612c73565b60019b919a5098509650505050505050565b6000821180156127cf57506001600160a01b03811615155b156123ae5761016b5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906128079084908690600401614c58565b602060405180830381600087803b15801561282157600080fd5b505af1158015612835573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1991906143fa565b47801561286a5761286a3382612e8f565b50565b61016b546040516370a0823160e01b81526000916001600160a01b0316906370a082319061289f903090600401614be8565b60206040518083038186803b1580156128b757600080fd5b505afa1580156128cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ef91906147db565b9050801561286a5761016b546001600160a01b031663a9059cbb6129116113e3565b836040518363ffffffff1660e01b815260040161292f929190614c58565b602060405180830381600087803b15801561294957600080fd5b505af115801561295d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ae91906143fa565b6000828201838110156129db576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006129ed30612fb0565b15905090565b600054610100900460ff1680612a0c5750612a0c6129e2565b80612a1a575060005460ff16155b612a555760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015612a80576000805460ff1961ff0019909116610100171660011790555b612a88612fb6565b612a90613056565b801561286a576000805461ff001916905550565b600054610100900460ff1680612abd5750612abd6129e2565b80612acb575060005460ff16155b612b065760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015612b31576000805460ff1961ff0019909116610100171660011790555b612a90612fb6565b600054610100900460ff1680612b525750612b526129e2565b80612b60575060005460ff16155b612b9b5760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015612bc6576000805460ff1961ff0019909116610100171660011790555b612bce61314f565b612b316131ec565b600054610100900460ff1680612bef5750612bef6129e2565b80612bfd575060005460ff16155b612c385760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015612c63576000805460ff1961ff0019909116610100171660011790555b612c6b612fb6565b612a90613289565b60008061ffff601085901c8116908516612c8d8583612d5d565b612c978683612d5d565b9350935050509250929050565b6060806000602085901c61ffff166001811115612cbd57fe5b905060606000826001811115612ccf57fe5b1415612ce1578693509150612d559050565b6001826001811115612cef57fe5b1415612d3d57600087806020019051810190612d0b9190614468565b9050612d1686613335565b15612d31578060000151816020015194509450505050612d55565b5193509150612d559050565b60405162461bcd60e51b8152600401610578906150b7565b935093915050565b60006129db612710612d6f8585613387565b906133e0565b8151835114612d8357600080fd5b8051835114612d9157600080fd5b60005b8351811015612e0057818181518110612da957fe5b01602001516001600160f81b03191615612df857828181518110612dc957fe5b602001015160f81c60f81b848281518110612de057fe5b60200101906001600160f81b031916908160001a9053505b600101612d94565b50505050565b60005b8251811015610c19576000838281518110612e2057fe5b60200260200101511115612e87576000838281518110612e3c57fe5b60200260200101519050600060a0858481518110612e5657fe5b6020026020010151901c90506000612e778286612d5d90919063ffffffff16565b9050612e838184612387565b5050505b600101612e09565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612eda576040519150601f19603f3d011682016040523d82523d6000602084013e612edf565b606091505b5050905080610c19576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b8251811015610c19576000838281518110612f4157fe5b60200260200101511115612fa8576000838281518110612f5d57fe5b60200260200101519050600060a0858481518110612f7757fe5b6020026020010151901c90506000612f988286612d5d90919063ffffffff16565b9050612fa481846127b7565b5050505b600101612f2a565b3b151590565b600054610100900460ff1680612fcf5750612fcf6129e2565b80612fdd575060005460ff16155b6130185760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015612a90576000805460ff1961ff001990911661010017166001179055801561286a576000805461ff001916905550565b600054610100900460ff168061306f575061306f6129e2565b8061307d575060005460ff16155b6130b85760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff161580156130e3576000805460ff1961ff0019909116610100171660011790555b60006130ed6113e3565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561286a576000805461ff001916905550565b600054610100900460ff168061316857506131686129e2565b80613176575060005460ff16155b6131b15760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff161580156131dc576000805460ff1961ff0019909116610100171660011790555b612a906301ffc9a760e01b613447565b600054610100900460ff168061320557506132056129e2565b80613213575060005460ff16155b61324e5760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015613279576000805460ff1961ff0019909116610100171660011790555b612a90630271189760e51b613447565b600054610100900460ff16806132a257506132a26129e2565b806132b0575060005460ff16155b6132eb5760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015613316576000805460ff1961ff0019909116610100171660011790555b61012d805460ff19169055801561286a576000805461ff001916905550565b6000600582600b81111561334557fe5b148061335c5750600482600b81111561335a57fe5b145b806133725750600782600b81111561337057fe5b145b1561337f575060016104a1565b506000919050565b600082613396575060006114c8565b828202828482816133a357fe5b04146129db5760405162461bcd60e51b81526004018080602001828103825260218152602001806155c06021913960400191505060405180910390fd5b6000808211613436576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161343f57fe5b049392505050565b6001600160e01b031980821614156134a6576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152609760205260409020805460ff19166001179055565b80356104a181615532565b80516104a181615532565b600082601f8301126134f1578081fd5b81356020613506613501836154c8565b6154a5565b8281528181019085830183850287018401881015613522578586fd5b855b8581101561354957813561353781615532565b84529284019290840190600101613524565b5090979650505050505050565b600082601f830112613566578081fd5b81516020613576613501836154c8565b82815281810190858301604080860288018501891015613594578687fd5b865b868110156135fe5781838b0312156135ac578788fd5b81518281018181106001600160401b03821117156135c657fe5b8352835161ffff811681146135d957898afd5b8152838701516135e881615532565b8188015285529385019391810191600101613596565b509198975050505050505050565b600082601f83011261361c578081fd5b8151602061362c613501836154c8565b8281528181019085830160408086028801850189101561364a578687fd5b865b868110156135fe5781838b031215613662578788fd5b81518281018181106001600160401b038211171561367c57fe5b8352835181528684015161368f81615532565b818801528552938501939181019160010161364c565b600082601f8301126136b5578081fd5b815160206136c5613501836154c8565b82815281810190858301855b858110156135495781518801604080601f19838d030112156136f1578889fd5b80518181016001600160401b03828210818311171561370c57fe5b818452848a01518352928401519280841115613726578b8cfd5b50506137368c8984860101613a8a565b818901528652505092840192908401906001016136d1565b600082601f83011261375e578081fd5b8151602061376e613501836154c8565b82815281810190858301855b8581101561354957815188016101a080601f19838d0301121561379b578889fd5b6137a4816154a5565b8783015181526137b6604084016134d6565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a08201526137ee60e084016134d6565b60c0820152610100808401516001600160401b038082111561380e578c8dfd5b61381c8f8c84890101613a8a565b60e0850152610120860151915080821115613835578c8dfd5b506138448e8b838801016136a5565b82840152505061014080840151610120830152610160840151818301525061386f6101808401613ed9565b610160820152613880828401613ed9565b61018082015286525050928401929084019060010161377a565b600082601f8301126138aa578081fd5b815160206138ba613501836154c8565b82815281810190858301855b85811015613549578151880161016080601f19838d030112156138e7578889fd5b6138f0816154a5565b6138fb888401613ae4565b8152604083015188820152606083015160408201526080830151606082015260a0830151608082015260c06139318185016134d6565b60a083015260e08401516001600160401b038082111561394f578c8dfd5b61395d8f8c84890101613a8a565b8385015261010092508286015160e085015261012091508186015183850152610140925082860151828501528486015194508085111561399b578c8dfd5b50506139ab8d8a8587010161360c565b908201528652505092840192908401906001016138c6565b600082601f8301126139d3578081fd5b813560206139e3613501836154c8565b82815281810190858301838502870184018810156139ff578586fd5b855b8581101561354957813584529284019290840190600101613a01565b80356104a181615547565b80516104a181615547565b80516104a181615555565b600082601f830112613a4e578081fd5b8135613a5c613501826154e5565b818152846020838601011115613a70578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112613a9a578081fd5b8151613aa8613501826154e5565b818152846020838601011115613abc578283fd5b613acd826020830160208701615506565b949350505050565b8035600c81106104a157600080fd5b8051600881106104a157600080fd5b8051600281106104a157600080fd5b600060e08284031215613b13578081fd5b613b1d60e06154a5565b905081516001600160401b0380821115613b3657600080fd5b613b4285838601613cc6565b8352613b5060208501613ed9565b602084015260408401516040840152606084015160608401526080840151915080821115613b7d57600080fd5b50613b8a84828501613a8a565b608083015250613b9c60a08301613af3565b60a082015260c082015160c082015292915050565b6000610200808385031215613bc4578182fd5b613bcd816154a5565b915050613bd982613a28565b8152613be7602083016134d6565b6020820152613bf8604083016134d6565b6040820152606082015160608201526080820151608082015260a082015160a0820152613c2760c083016134d6565b60c0820152613c3860e083016134d6565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b03811115613c8457600080fd5b613c9085828601613a8a565b8284015250506101a0613ca4818401613ed9565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a0808385031215613cd9578182fd5b613ce2816154a5565b915050613cee826134d6565b8152613cfc60208301613af3565b6020820152613d0d604083016134d6565b6040820152613d1e606083016134d6565b60608201526080820151608082015260a082015160a0820152613d4360c083016134d6565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b0380821115613d8457600080fd5b613d9086838701613556565b8385015261016092508285015183850152610180925082850151915080821115613db957600080fd5b50613dc685828601613a8a565b82840152505092915050565b600060808284031215613de3578081fd5b604051608081016001600160401b038282108183111715613e0057fe5b81604052829350613e1085613ad5565b835260208501356020840152604085013560408401526060850135915080821115613e3a57600080fd5b50613e4785828601613a3e565b6060830152505092915050565b600060c08284031215613e65578081fd5b60405160c081018181106001600160401b0382111715613e8157fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613eb981615532565b608082015260a0830151613ecc81615547565b60a0919091015292915050565b805160ff811681146104a157600080fd5b600060208284031215613efb578081fd5b81356129db81615532565b600080600080600060a08688031215613f1d578081fd5b8535613f2881615532565b94506020860135613f3881615532565b935060408601356001600160401b0380821115613f53578283fd5b613f5f89838a016139c3565b94506060880135915080821115613f74578283fd5b613f8089838a016139c3565b93506080880135915080821115613f95578283fd5b50613fa288828901613a3e565b9150509295509295909350565b60008060008060808587031215613fc4578182fd5b8435613fcf81615532565b93506020850135613fdf81615532565b92506040850135915060608501356001600160401b03811115614000578182fd5b61400c87828801613a3e565b91505092959194509250565b600080600080600060a0868803121561402f578283fd5b853561403a81615532565b9450602086013561404a81615532565b9350604086013592506060860135915060808601356001600160401b03811115614072578182fd5b613fa288828901613a3e565b6000806000806101e08587031215614094578182fd5b85601f8601126140a2578182fd5b6101806140ae816154a5565b908601908087898411156140c0578586fd5b855b600c8110156140eb5781356140d681615532565b845260209384019391909101906001016140c2565b505080965050506140fb816134cb565b9350506101a08501356001600160401b03811115614117578283fd5b614123878288016134e1565b9250506141336101c086016134cb565b905092959194509250565b60008060208385031215614150578182fd5b82356001600160401b0380821115614166578384fd5b818501915085601f830112614179578384fd5b813581811115614187578485fd5b866020808302850101111561419a578485fd5b60209290920196919550909350505050565b600060208083850312156141be578182fd5b82516001600160401b03808211156141d4578384fd5b818501915085601f8301126141e7578384fd5b81516141f5613501826154c8565b818152848101908486016060808502870188018b1015614213578889fd5b8896505b8487101561427a5780828c03121561422d578889fd5b60408051828101818110898211171561424257fe5b8252835161424f81615532565b8152838a01518a82015281840151918101919091528452600196909601959287019290810190614217565b50909998505050505050505050565b6000602080838503121561429b578182fd5b82516001600160401b03808211156142b1578384fd5b818501915085601f8301126142c4578384fd5b81516142d2613501826154c8565b818152848101908486016040808502870188018b10156142f0578889fd5b8896505b8487101561427a5780828c03121561430a578889fd5b8051818101818110888211171561431d57fe5b8252825161432a81615532565b8152828901518982015284526001969096019592870192908101906142f4565b6000806000806080858703121561435f578182fd5b84356001600160401b03811115614374578283fd5b8501601f81018713614384578283fd5b80356020614394613501836154c8565b82815281810190848301875b858110156143c9576143b78d8684358a0101613dd2565b845292840192908401906001016143a0565b505080985050506143db8189016134cb565b95505050506143ec604086016134cb565b915061413360608601613a1d565b60006020828403121561440b578081fd5b81516129db81615547565b600060208284031215614427578081fd5b81356129db81615555565b60008060408385031215614444578182fd5b61444d83613ad5565b9150602083013561445d81615532565b809150509250929050565b6000602080838503121561447a578182fd5b82516001600160401b0380821115614490578384fd5b90840190604082870312156144a3578384fd5b6040516040810181811083821117156144b857fe5b6040528251828111156144c9578586fd5b6144d588828601613a8a565b82525083830151828111156144e8578586fd5b80840193505086601f8401126144fc578485fd5b8251915061450c613501836154c8565b82815284810190848601868502860187018a1015614528578788fd5b8795505b8486101561454a57805183526001959095019491860191860161452c565b50948201949094529695505050505050565b600080600060608486031215614570578081fd5b83516001600160401b0380821115614586578283fd5b61459287838801613b02565b945060208601519150808211156145a7578283fd5b506145b486828701613b02565b92505060408401516145c581615555565b809150509250925092565b6000806000606084860312156145e4578081fd5b83356001600160401b038111156145f9578182fd5b61460586828701613dd2565b935050602084013561461681615532565b915060408401356145c581615532565b600060208284031215614637578081fd5b81516001600160401b038082111561464d578283fd5b908301906101608286031215614661578283fd5b61466b60c06154a5565b825182811115614679578485fd5b6146858782860161374e565b825250602083015182811115614699578485fd5b6146a58782860161389a565b6020830152506146b88660408501613e54565b6040820152610100830151606082015261012083015160808201526146e06101408401613ed9565b60a082015295945050505050565b600080600060608486031215614702578081fd5b83516001600160401b0380821115614718578283fd5b9085019060c0828803121561472b578283fd5b60405160c08101818110838211171561474057fe5b60405261474c83613a28565b815261475a602084016134d6565b602082015260408301516040820152606083015160608201526080830151608082015260a08301518281111561478e578485fd5b61479a89828601613a8a565b60a08301525060208701519095509150808211156147b6578283fd5b506147c386828701613bb1565b9250506147d260408501613a33565b90509250925092565b6000602082840312156147ec578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015614847578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101614813565b509495945050505050565b6000815180845260208085019450808401835b83811015614847578151805188528301516001600160a01b03168388015260409096019590820190600101614865565b6000815180845260208085018081965082840281019150828601855b858110156148ef57828403895281518051855285015160408686018190526148db818701836149e1565b9a87019a95505050908401906001016148b1565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b858110156148ef5782840389528151610160614935868351614a0d565b818701518688015260408083015190870152606080830151908701526080808301519087015260a08083015161496d828901826147f3565b505060c0808301518282890152614986838901826149e1565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a019590955292506149c7915082905083614852565b9a87019a9550505090840190600101614918565b15159052565b600081518084526149f9816020860160208601615506565b601f01601f19169290920160200192915050565b60088110614a1757fe5b9052565b60028110614a1757fe5b6000815160e08452614a3b60e0850182516147f3565b6020810151610100614a4f81870183614a1b565b60408301519150610120614a65818801846147f3565b60608401519250610140614a7b818901856147f3565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0614aaf818c01886147f3565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250614aea6102808b0187614800565b918701516102408b01529095015188860360df19016102608a0152949350614b1892508391508490506149e1565b9150506020830151614b2d6020860182614bc5565b50604083015160408501526060830151606085015260808301518482036080860152614b5982826149e1565b91505060a0830151614b6e60a0860182614a1b565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b60008251614bde818460208701615506565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b6020808252601a908201527f4e657720616464726573732063616e6e6f74206265207a65726f000000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252818101527f4e65774d61726b6574206164647265737320697320616c726561647920736574604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b6020808252601c908201527f4e65774d61726b65742061646472657373206973206e6f742073657400000000604082015260600190565b60208082526018908201527f496e76616c6964206d61726b6574706c61636520747970650000000000000000604082015260600190565b6000604082526151a66040830185614a25565b82810360208401526151b88185614a25565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b828110156152de578a820361019f190184528551805183528981015161521e8b8501826147f3565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c080820151615259828601826147f3565b505060e08082015189828601526152728a8601826149e1565b915050610100808301518583038287015261528d8382614895565b92505050610120808301518186015250610140808301518186015250868201516152b988860182614bc5565b5090890151906152cb848b0183614bc5565b968a0196948a01949250506001016151f6565b50968a0151898803601f190160408b0152966152fa81896148fc565b9750505050604088015193506153136060880185614b83565b6060880151610120880152608088015161014088015260a0880151935061533c81880185614bc5565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e08501526153a2828501826149e1565b905083810360208501526102006153ba8287516149db565b60208601516153cc60208401826147f3565b5060408601516153df60408401826147f3565b50606086015160608301526080860151608083015260a086015160a083015260c086015161541060c08401826147f3565b5060e086015161542360e08401826147f3565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061546c828401826149e1565b935050506101a08086015161548382840182614bc5565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b03811182821017156154c057fe5b604052919050565b60006001600160401b038211156154db57fe5b5060209081020190565b60006001600160401b038211156154f857fe5b50601f01601f191660200190565b60005b83811015615521578181015183820152602001615509565b83811115612e005750506000910152565b6001600160a01b038116811461286a57600080fd5b801515811461286a57600080fd5b6001600160e01b03198116811461286a57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220de9f341452868417f9d1e126640190795cc9e739cbd2cb193425cd6e85c449f264736f6c63430007060033", + "deployedBytecode": "0x60806040526004361061019f5760003560e01c80638da5cb5b116100ec578063c9f0a2fa1161008a578063f23a6e6111610064578063f23a6e6114610409578063f2fde38b14610429578063f66ac0cb14610449578063fc40c9c71461045e576101a6565b8063c9f0a2fa146103ca578063cc236dfa146103df578063df6c2558146103f4576101a6565b8063b94ee332116100c6578063b94ee33214610362578063bc197c8114610375578063bd4486ee14610395578063bf628ddf146103aa576101a6565b80638da5cb5b146103235780639110c77714610338578063a05f32dc1461034d576101a6565b80635c975abb11610159578063715018a611610133578063715018a6146102bb57806386496e7a146102d057806386dcbd27146102e35780638b87964914610303576101a6565b80635c975abb1461026f5780635cdb4367146102845780635ea1e4c9146102a6576101a6565b80628534f7146101ab57806301ffc9a7146101d6578063150b7a0214610203578063349d6a85146102305780633733b82b146102455780633fc8cef31461025a576101a6565b366101a657005b600080fd5b3480156101b757600080fd5b506101c0610473565b6040516101cd9190614be8565b60405180910390f35b3480156101e257600080fd5b506101f66101f1366004614416565b610483565b6040516101cd9190614c71565b34801561020f57600080fd5b5061022361021e366004613faf565b6104a6565b6040516101cd9190614c7c565b34801561023c57600080fd5b506101c06104b6565b34801561025157600080fd5b506101c06104c6565b34801561026657600080fd5b506101c06104d6565b34801561027b57600080fd5b506101f66104e6565b34801561029057600080fd5b506102a461029f366004614432565b6104f0565b005b3480156102b257600080fd5b506101c0610858565b3480156102c757600080fd5b506102a4610868565b6102a46102de3660046145d0565b610914565b3480156102ef57600080fd5b506102a46102fe36600461413e565b610afe565b34801561030f57600080fd5b506102a461031e366004613eea565b610c1e565b34801561032f57600080fd5b506101c0610ccd565b34801561034457600080fd5b506101c0610cdc565b34801561035957600080fd5b506101c0610cec565b6102a461037036600461434a565b610cfc565b34801561038157600080fd5b50610223610390366004613f06565b610fad565b3480156103a157600080fd5b506101c0610fbe565b3480156103b657600080fd5b506102a46103c536600461407e565b610fce565b3480156103d657600080fd5b506101c061127f565b3480156103eb57600080fd5b506101c061128f565b34801561040057600080fd5b506101c061129f565b34801561041557600080fd5b50610223610424366004614018565b6112af565b34801561043557600080fd5b506102a4610444366004613eea565b6112c0565b34801561045557600080fd5b506101c06113c3565b34801561046a57600080fd5b506101c06113d3565b610161546001600160a01b031681565b6001600160e01b0319811660009081526097602052604090205460ff165b919050565b630a85bd0160e11b949350505050565b610168546001600160a01b031681565b610166546001600160a01b031681565b61016b546001600160a01b031681565b61012d5460ff1690565b6104f86113e3565b6001600160a01b0316610509610ccd565b6001600160a01b031614610552576040805162461bcd60e51b815260206004820181905260248201526000805160206155e1833981519152604482015290519081900360640190fd5b6001600160a01b0381166105815760405162461bcd60e51b815260040161057890614e3c565b60405180910390fd5b600182600b81111561058f57fe5b14156105b65761015f80546001600160a01b0319166001600160a01b038316179055610815565b600082600b8111156105c457fe5b14156105eb5761016080546001600160a01b0319166001600160a01b038316179055610815565b600282600b8111156105f957fe5b14156106205761016180546001600160a01b0319166001600160a01b038316179055610815565b600382600b81111561062e57fe5b14156106555761016280546001600160a01b0319166001600160a01b038316179055610815565b600482600b81111561066357fe5b141561068a5761016380546001600160a01b0319166001600160a01b038316179055610815565b600582600b81111561069857fe5b14156106bf5761016480546001600160a01b0319166001600160a01b038316179055610815565b600682600b8111156106cd57fe5b14156106f45761016580546001600160a01b0319166001600160a01b038316179055610815565b600782600b81111561070257fe5b14156107295761016680546001600160a01b0319166001600160a01b038316179055610815565b600882600b81111561073757fe5b141561075e5761016780546001600160a01b0319166001600160a01b038316179055610815565b600982600b81111561076c57fe5b14156107935761016880546001600160a01b0319166001600160a01b038316179055610815565b600a82600b8111156107a157fe5b14156107c85761016980546001600160a01b0319166001600160a01b038316179055610815565b600b82600b8111156107d657fe5b14156107fd5761016a80546001600160a01b0319166001600160a01b038316179055610815565b60405162461bcd60e51b81526004016105789061515c565b806001600160a01b031682600b81111561082b57fe5b6040517f90b0e35c110f9f250b584328e42e7eb7c007b77bf8c081c5aaef84c63a121efc90600090a35050565b610164546001600160a01b031681565b6108706113e3565b6001600160a01b0316610881610ccd565b6001600160a01b0316146108ca576040805162461bcd60e51b815260206004820181905260248201526000805160206155e1833981519152604482015290519081900360640190fd5b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b61091c6104e6565b15610961576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600061096c846113e7565b90508015610a025761016b546001600160a01b03166323b872dd61098e6113e3565b30846040518463ffffffff1660e01b81526004016109ae93929190614bfc565b602060405180830381600087803b1580156109c857600080fd5b505af11580156109dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0091906143fa565b505b6000610a1185604001516114b2565b90506000808080846001811115610a2457fe5b1415610a5557610a358860006114ce565b91945092509050610a468288612387565b610a508187612387565b610aa7565b6001846001811115610a6357fe5b1415610a8f57610a748860006123b2565b91945092509050610a8582886127b7565b610a5081876127b7565b60405162461bcd60e51b815260040161057890614e73565b7fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610ad69190614c71565b60405180910390a1610ae6612859565b8415610af457610af461286d565b5050505050505050565b610b066113e3565b6001600160a01b0316610b17610ccd565b6001600160a01b031614610b60576040805162461bcd60e51b815260206004820181905260248201526000805160206155e1833981519152604482015290519081900360640190fd5b60005b81811015610c195761016b546001600160a01b031663095ea7b3848484818110610b8957fe5b9050602002016020810190610b9e9190613eea565b6000196040518363ffffffff1660e01b8152600401610bbe929190614c58565b602060405180830381600087803b158015610bd857600080fd5b505af1158015610bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1091906143fa565b50600101610b63565b505050565b610c266113e3565b6001600160a01b0316610c37610ccd565b6001600160a01b031614610c80576040805162461bcd60e51b815260206004820181905260248201526000805160206155e1833981519152604482015290519081900360640190fd5b61016a546001600160a01b031615610caa5760405162461bcd60e51b815260040161057890615082565b61016a80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031690565b610163546001600160a01b031681565b610160546001600160a01b031681565b610d046104e6565b15610d49576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60008060008060008060005b8a51811015610d8657610d7a8b8281518110610d6d57fe5b60200260200101516113e7565b90910190600101610d55565b508015610e1b5761016b546001600160a01b03166323b872dd610da76113e3565b30846040518463ffffffff1660e01b8152600401610dc793929190614bfc565b602060405180830381600087803b158015610de157600080fd5b505af1158015610df5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1991906143fa565b505b60005b8a51811015610f45576000610e498c8381518110610e3857fe5b6020026020010151604001516114b2565b90506000808080846001811115610e5c57fe5b1415610ea357610e7f8f8681518110610e7157fe5b60200260200101518d6114ce565b91945092509050610e908b83612981565b9a50610e9c8a82612981565b9950610ef4565b6001846001811115610eb157fe5b1415610a8f57610ed48f8681518110610ec657fe5b60200260200101518d6123b2565b91945092509050610ee58983612981565b9850610ef18882612981565b97505b8680610efd5750825b96507fcc54b89ca2d75d5612023b14f0a477212b0e08bc0c5b8ad2804e2f8e2e401fc083604051610f2e9190614c71565b60405180910390a150505050806001019050610e1e565b5081610f635760405162461bcd60e51b8152600401610578906150ee565b610f6d868a612387565b610f778589612387565b610f81848a6127b7565b610f8b83896127b7565b610f93612859565b8015610fa157610fa161286d565b50505050505050505050565b63bc197c8160e01b95945050505050565b610165546001600160a01b031681565b600054610100900460ff1680610fe75750610fe76129e2565b80610ff5575060005460ff16155b6110305760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff1615801561105b576000805460ff1961ff0019909116610100171660011790555b6110636129f3565b61106b612aa4565b611073612b39565b61107b612bd6565b845161015f80546001600160a01b03199081166001600160a01b039384161790915560208701516101608054831691841691909117815560408801516101618054841691851691909117905560608801516101628054841691851691909117905560808801516101638054841691851691909117905560a08801516101648054841691851691909117905560c08801516101658054841691851691909117905560e08801516101668054841691851691909117905561010088015161016780548416918516919091179055610120880151610168805484169185169190911790556101408801516101698054841691851691909117905587015161016a8054831691841691909117905561016b805490911691861691909117905560005b835181101561125c5761016b546001600160a01b0316156112545761016b5484516001600160a01b039091169063095ea7b3908690849081106111d857fe5b60200260200101516000196040518363ffffffff1660e01b8152600401611200929190614c58565b602060405180830381600087803b15801561121a57600080fd5b505af115801561122e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061125291906143fa565b505b600101611199565b50611266826112c0565b8015611278576000805461ff00191690555b5050505050565b61015f546001600160a01b031681565b61016a546001600160a01b031681565b610167546001600160a01b031681565b63f23a6e6160e01b95945050505050565b6112c86113e3565b6001600160a01b03166112d9610ccd565b6001600160a01b031614611322576040805162461bcd60e51b815260206004820181905260248201526000805160206155e1833981519152604482015290519081900360640190fd5b6001600160a01b0381166113675760405162461bcd60e51b815260040180806020018281038252602681526020018061556c6026913960400191505060405180910390fd5b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b610169546001600160a01b031681565b610162546001600160a01b031681565b3390565b6000806000905060006113fd84604001516114b2565b9050600181600181111561140d57fe5b14156114ab576020840151604085015192810192600091829161142f91612c73565b91509150808285010193506000611453876060015188604001518960000151612ca4565b91505060005b81518110156114a657600060a083838151811061147257fe5b6020026020010151901c90506000611497828b60200151612d5d90919063ffffffff16565b97909701965050600101611459565b505050505b5092915050565b6000603082901c61ffff1660018111156114c857fe5b92915050565b60008060008060006114ed876060015188604001518960000151612ca4565b6020890151919350915060028851600b81111561150657fe5b14156115ba57610161546040516000916001600160a01b031690839061152d908790614bcc565b60006040518083038185875af1925050503d806000811461156a576040519150601f19603f3d011682016040523d82523d6000602084013e61156f565b606091505b505090508715611597578061159257600080600096509650965050505050612380565b6115b4565b806115b45760405162461bcd60e51b815260040161057890614ed9565b5061234e565b60018851600b8111156115c957fe5b14156116725761015f546040516000916001600160a01b03169083906115f0908790614bcc565b60006040518083038185875af1925050503d806000811461162d576040519150601f19603f3d011682016040523d82523d6000602084013e611632565b606091505b505090508715611655578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b815260040161057890614cfb565b60008851600b81111561168157fe5b141561172a57610160546040516000916001600160a01b03169083906116a8908790614bcc565b60006040518083038185875af1925050503d80600081146116e5576040519150601f19603f3d011682016040523d82523d6000602084013e6116ea565b606091505b50509050871561170d578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b815260040161057890614d69565b60038851600b81111561173957fe5b1415611b46576000838060200190518101906117559190614626565b905087156117d8576101625460405163357a150b60e01b81526001600160a01b039091169063357a150b9084906117909085906004016151c1565b6000604051808303818588803b1580156117a957600080fd5b505af1935050505080156117bb575060015b6117d357600080600096509650965050505050612380565b61183e565b6101625460405163357a150b60e01b81526001600160a01b039091169063357a150b90849061180b9085906004016151c1565b6000604051808303818588803b15801561182457600080fd5b505af1158015611838573d6000803e3d6000fd5b50505050505b60005b816020015151811015611b3f5760008260200151828151811061186057fe5b602002602001015160200151905060008360200151838151811061188057fe5b60200260200101516040015190506000846000015183815181106118a057fe5b6020026020010151610100015182815181106118b857fe5b60200260200101516020015190506000856000015184815181106118d857fe5b602002602001015160e001515111801561190e57506000856020015185815181106118ff57fe5b602002602001015160c0015151115b1561195457611954818660200151868151811061192757fe5b602002602001015160c001518760000151868151811061194357fe5b602002602001015160e00151612d75565b845180518490811061196257fe5b60200260200101516080015160011415611a375760008180602001905181019061198c9190614289565b905060005b8151811015611a305760008282815181106119a857fe5b6020026020010151905080600001516001600160a01b03166342842e0e306119ce6113e3565b84602001516040518463ffffffff1660e01b81526004016119f193929190614bfc565b600060405180830381600087803b158015611a0b57600080fd5b505af1158015611a1f573d6000803e3d6000fd5b505060019093019250611991915050565b5050611b31565b8451805184908110611a4557fe5b60200260200101516080015160021415611b1957600081806020019051810190611a6f91906141ac565b905060005b8151811015611a30576000828281518110611a8b57fe5b6020026020010151905080600001516001600160a01b031663f242432a30611ab16113e3565b846020015185604001516040518563ffffffff1660e01b8152600401611ada9493929190614c20565b600060405180830381600087803b158015611af457600080fd5b505af1158015611b08573d6000803e3d6000fd5b505060019093019250611a74915050565b60405162461bcd60e51b815260040161057890614fe8565b505050806001019050611841565b505061234e565b60048851600b811115611b5557fe5b1415611d7457600080600085806020019051810190611b7491906146ee565b9250925092508915611bff5761016354604051635a72594b60e11b81526001600160a01b039091169063b4e4b296908690611bb59087908790600401615348565b6000604051808303818588803b158015611bce57600080fd5b505af193505050508015611be0575060015b611bfa576000806000985098509850505050505050612380565b611c67565b61016354604051635a72594b60e11b81526001600160a01b039091169063b4e4b296908690611c349087908790600401615348565b6000604051808303818588803b158015611c4d57600080fd5b505af1158015611c61573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b1415611cf65781604001516001600160a01b03166342842e0e30611c9c6113e3565b85608001516040518463ffffffff1660e01b8152600401611cbf93929190614bfc565b600060405180830381600087803b158015611cd957600080fd5b505af1158015611ced573d6000803e3d6000fd5b50505050611d6c565b6001600160e01b0319811663025ceed960e61b1415611d545781604001516001600160a01b031663f242432a30611d2b6113e3565b85608001518660a001516040518563ffffffff1660e01b8152600401611cbf9493929190614c20565b60405162461bcd60e51b815260040161057890615056565b50505061234e565b60058851600b811115611d8357fe5b1415611e2c57610164546040516000916001600160a01b0316908390611daa908790614bcc565b60006040518083038185875af1925050503d8060008114611de7576040519150601f19603f3d011682016040523d82523d6000602084013e611dec565b606091505b505090508715611e0f578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b815260040161057890614fb1565b60068851600b811115611e3b57fe5b1415611ee457610165546040516000916001600160a01b0316908390611e62908790614bcc565b60006040518083038185875af1925050503d8060008114611e9f576040519150601f19603f3d011682016040523d82523d6000602084013e611ea4565b606091505b505090508715611ec7578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b815260040161057890614d32565b60078851600b811115611ef357fe5b1415611f9c57610166546040516000916001600160a01b0316908390611f1a908790614bcc565b60006040518083038185875af1925050503d8060008114611f57576040519150601f19603f3d011682016040523d82523d6000602084013e611f5c565b606091505b505090508715611f7f578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b81526004016105789061501f565b60088851600b811115611fab57fe5b141561218357600080600085806020019051810190611fca919061455c565b92509250925089156120555761016754604051639a1fc3a760e01b81526001600160a01b0390911690639a1fc3a790869061200b9087908790600401615193565b6000604051808303818588803b15801561202457600080fd5b505af193505050508015612036575060015b612050576000806000985098509850505050505050612380565b6120bd565b61016754604051639a1fc3a760e01b81526001600160a01b0390911690639a1fc3a790869061208a9087908790600401615193565b6000604051808303818588803b1580156120a357600080fd5b505af11580156120b7573d6000803e3d6000fd5b50505050505b6001600160e01b031981166339d690a360e11b141561211c578251606001516001600160a01b03166342842e0e306120f36113e3565b8651608001516040516001600160e01b031960e086901b168152611cbf93929190600401614bfc565b6001600160e01b0319811663025ceed960e61b1415611d54578251606001516001600160a01b031663f242432a306121526113e3565b8651608081015160a0909101516040516001600160e01b031960e087901b168152611cbf9493929190600401614c20565b60098851600b81111561219257fe5b141561223b57610168546040516000916001600160a01b03169083906121b9908790614bcc565b60006040518083038185875af1925050503d80600081146121f6576040519150601f19603f3d011682016040523d82523d6000602084013e6121fb565b606091505b50509050871561221e578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b815260040161057890614f45565b600a8851600b81111561224a57fe5b14156122f357610169546040516000916001600160a01b0316908390612271908790614bcc565b60006040518083038185875af1925050503d80600081146122ae576040519150601f19603f3d011682016040523d82523d6000602084013e6122b3565b606091505b5050905087156122d6578061159257600080600096509650965050505050612380565b806115b45760405162461bcd60e51b815260040161057890614e05565b600b8851600b81111561230257fe5b14156123365761016a546001600160a01b03166123315760405162461bcd60e51b815260040161057890615125565b61234e565b60405162461bcd60e51b815260040161057890614dd7565b61235c828960200151612e06565b6000806123718a604001518b60200151612c73565b60019950909750955050505050505b9250925092565b60008211801561239f57506001600160a01b03811615155b156123ae576123ae8183612e8f565b5050565b60008060008060006123d1876060015188604001518960000151612ca4565b909250905060028751600b8111156123e557fe5b141561249657610161546040516000916001600160a01b03169061240a908590614bcc565b6000604051808303816000865af19150503d8060008114612447576040519150601f19603f3d011682016040523d82523d6000602084013e61244c565b606091505b505090508615612473578061246e576000806000955095509550505050612380565b612490565b806124905760405162461bcd60e51b815260040161057890614f7c565b50612782565b60008751600b8111156124a557fe5b141561254b57610160546040516000916001600160a01b0316906124ca908590614bcc565b6000604051808303816000865af19150503d8060008114612507576040519150601f19603f3d011682016040523d82523d6000602084013e61250c565b606091505b50509050861561252e578061246e576000806000955095509550505050612380565b806124905760405162461bcd60e51b815260040161057890614da0565b60068751600b81111561255a57fe5b141561260057610165546040516000916001600160a01b03169061257f908590614bcc565b6000604051808303816000865af19150503d80600081146125bc576040519150601f19603f3d011682016040523d82523d6000602084013e6125c1565b606091505b5050905086156125e3578061246e576000806000955095509550505050612380565b806124905760405162461bcd60e51b815260040161057890614c91565b60098751600b81111561260f57fe5b14156126b557610168546040516000916001600160a01b031690612634908590614bcc565b6000604051808303816000865af19150503d8060008114612671576040519150601f19603f3d011682016040523d82523d6000602084013e612676565b606091505b505090508615612698578061246e576000806000955095509550505050612380565b806124905760405162461bcd60e51b815260040161057890614cc6565b600a8751600b8111156126c457fe5b141561276a57610169546040516000916001600160a01b0316906126e9908590614bcc565b6000604051808303816000865af19150503d8060008114612726576040519150601f19603f3d011682016040523d82523d6000602084013e61272b565b606091505b50509050861561274d578061246e576000806000955095509550505050612380565b806124905760405162461bcd60e51b815260040161057890614f10565b60405162461bcd60e51b815260040161057890614eaa565b612790818860200151612f27565b6000806127a589604001518a60200151612c73565b60019b919a5098509650505050505050565b6000821180156127cf57506001600160a01b03811615155b156123ae5761016b5460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb906128079084908690600401614c58565b602060405180830381600087803b15801561282157600080fd5b505af1158015612835573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1991906143fa565b47801561286a5761286a3382612e8f565b50565b61016b546040516370a0823160e01b81526000916001600160a01b0316906370a082319061289f903090600401614be8565b60206040518083038186803b1580156128b757600080fd5b505afa1580156128cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ef91906147db565b9050801561286a5761016b546001600160a01b031663a9059cbb6129116113e3565b836040518363ffffffff1660e01b815260040161292f929190614c58565b602060405180830381600087803b15801561294957600080fd5b505af115801561295d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ae91906143fa565b6000828201838110156129db576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006129ed30612fb0565b15905090565b600054610100900460ff1680612a0c5750612a0c6129e2565b80612a1a575060005460ff16155b612a555760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015612a80576000805460ff1961ff0019909116610100171660011790555b612a88612fb6565b612a90613056565b801561286a576000805461ff001916905550565b600054610100900460ff1680612abd5750612abd6129e2565b80612acb575060005460ff16155b612b065760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015612b31576000805460ff1961ff0019909116610100171660011790555b612a90612fb6565b600054610100900460ff1680612b525750612b526129e2565b80612b60575060005460ff16155b612b9b5760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015612bc6576000805460ff1961ff0019909116610100171660011790555b612bce61314f565b612b316131ec565b600054610100900460ff1680612bef5750612bef6129e2565b80612bfd575060005460ff16155b612c385760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015612c63576000805460ff1961ff0019909116610100171660011790555b612c6b612fb6565b612a90613289565b60008061ffff601085901c8116908516612c8d8583612d5d565b612c978683612d5d565b9350935050509250929050565b6060806000602085901c61ffff166001811115612cbd57fe5b905060606000826001811115612ccf57fe5b1415612ce1578693509150612d559050565b6001826001811115612cef57fe5b1415612d3d57600087806020019051810190612d0b9190614468565b9050612d1686613335565b15612d31578060000151816020015194509450505050612d55565b5193509150612d559050565b60405162461bcd60e51b8152600401610578906150b7565b935093915050565b60006129db612710612d6f8585613387565b906133e0565b8151835114612d8357600080fd5b8051835114612d9157600080fd5b60005b8351811015612e0057818181518110612da957fe5b01602001516001600160f81b03191615612df857828181518110612dc957fe5b602001015160f81c60f81b848281518110612de057fe5b60200101906001600160f81b031916908160001a9053505b600101612d94565b50505050565b60005b8251811015610c19576000838281518110612e2057fe5b60200260200101511115612e87576000838281518110612e3c57fe5b60200260200101519050600060a0858481518110612e5657fe5b6020026020010151901c90506000612e778286612d5d90919063ffffffff16565b9050612e838184612387565b5050505b600101612e09565b6040516000906001600160a01b0384169083908381818185875af1925050503d8060008114612eda576040519150601f19603f3d011682016040523d82523d6000602084013e612edf565b606091505b5050905080610c19576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60005b8251811015610c19576000838281518110612f4157fe5b60200260200101511115612fa8576000838281518110612f5d57fe5b60200260200101519050600060a0858481518110612f7757fe5b6020026020010151901c90506000612f988286612d5d90919063ffffffff16565b9050612fa481846127b7565b5050505b600101612f2a565b3b151590565b600054610100900460ff1680612fcf5750612fcf6129e2565b80612fdd575060005460ff16155b6130185760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015612a90576000805460ff1961ff001990911661010017166001179055801561286a576000805461ff001916905550565b600054610100900460ff168061306f575061306f6129e2565b8061307d575060005460ff16155b6130b85760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff161580156130e3576000805460ff1961ff0019909116610100171660011790555b60006130ed6113e3565b603380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561286a576000805461ff001916905550565b600054610100900460ff168061316857506131686129e2565b80613176575060005460ff16155b6131b15760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff161580156131dc576000805460ff1961ff0019909116610100171660011790555b612a906301ffc9a760e01b613447565b600054610100900460ff168061320557506132056129e2565b80613213575060005460ff16155b61324e5760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015613279576000805460ff1961ff0019909116610100171660011790555b612a90630271189760e51b613447565b600054610100900460ff16806132a257506132a26129e2565b806132b0575060005460ff16155b6132eb5760405162461bcd60e51b815260040180806020018281038252602e815260200180615592602e913960400191505060405180910390fd5b600054610100900460ff16158015613316576000805460ff1961ff0019909116610100171660011790555b61012d805460ff19169055801561286a576000805461ff001916905550565b6000600582600b81111561334557fe5b148061335c5750600482600b81111561335a57fe5b145b806133725750600782600b81111561337057fe5b145b1561337f575060016104a1565b506000919050565b600082613396575060006114c8565b828202828482816133a357fe5b04146129db5760405162461bcd60e51b81526004018080602001828103825260218152602001806155c06021913960400191505060405180910390fd5b6000808211613436576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161343f57fe5b049392505050565b6001600160e01b031980821614156134a6576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152609760205260409020805460ff19166001179055565b80356104a181615532565b80516104a181615532565b600082601f8301126134f1578081fd5b81356020613506613501836154c8565b6154a5565b8281528181019085830183850287018401881015613522578586fd5b855b8581101561354957813561353781615532565b84529284019290840190600101613524565b5090979650505050505050565b600082601f830112613566578081fd5b81516020613576613501836154c8565b82815281810190858301604080860288018501891015613594578687fd5b865b868110156135fe5781838b0312156135ac578788fd5b81518281018181106001600160401b03821117156135c657fe5b8352835161ffff811681146135d957898afd5b8152838701516135e881615532565b8188015285529385019391810191600101613596565b509198975050505050505050565b600082601f83011261361c578081fd5b8151602061362c613501836154c8565b8281528181019085830160408086028801850189101561364a578687fd5b865b868110156135fe5781838b031215613662578788fd5b81518281018181106001600160401b038211171561367c57fe5b8352835181528684015161368f81615532565b818801528552938501939181019160010161364c565b600082601f8301126136b5578081fd5b815160206136c5613501836154c8565b82815281810190858301855b858110156135495781518801604080601f19838d030112156136f1578889fd5b80518181016001600160401b03828210818311171561370c57fe5b818452848a01518352928401519280841115613726578b8cfd5b50506137368c8984860101613a8a565b818901528652505092840192908401906001016136d1565b600082601f83011261375e578081fd5b8151602061376e613501836154c8565b82815281810190858301855b8581101561354957815188016101a080601f19838d0301121561379b578889fd5b6137a4816154a5565b8783015181526137b6604084016134d6565b88820152606083015160408201526080830151606082015260a0830151608082015260c083015160a08201526137ee60e084016134d6565b60c0820152610100808401516001600160401b038082111561380e578c8dfd5b61381c8f8c84890101613a8a565b60e0850152610120860151915080821115613835578c8dfd5b506138448e8b838801016136a5565b82840152505061014080840151610120830152610160840151818301525061386f6101808401613ed9565b610160820152613880828401613ed9565b61018082015286525050928401929084019060010161377a565b600082601f8301126138aa578081fd5b815160206138ba613501836154c8565b82815281810190858301855b85811015613549578151880161016080601f19838d030112156138e7578889fd5b6138f0816154a5565b6138fb888401613ae4565b8152604083015188820152606083015160408201526080830151606082015260a0830151608082015260c06139318185016134d6565b60a083015260e08401516001600160401b038082111561394f578c8dfd5b61395d8f8c84890101613a8a565b8385015261010092508286015160e085015261012091508186015183850152610140925082860151828501528486015194508085111561399b578c8dfd5b50506139ab8d8a8587010161360c565b908201528652505092840192908401906001016138c6565b600082601f8301126139d3578081fd5b813560206139e3613501836154c8565b82815281810190858301838502870184018810156139ff578586fd5b855b8581101561354957813584529284019290840190600101613a01565b80356104a181615547565b80516104a181615547565b80516104a181615555565b600082601f830112613a4e578081fd5b8135613a5c613501826154e5565b818152846020838601011115613a70578283fd5b816020850160208301379081016020019190915292915050565b600082601f830112613a9a578081fd5b8151613aa8613501826154e5565b818152846020838601011115613abc578283fd5b613acd826020830160208701615506565b949350505050565b8035600c81106104a157600080fd5b8051600881106104a157600080fd5b8051600281106104a157600080fd5b600060e08284031215613b13578081fd5b613b1d60e06154a5565b905081516001600160401b0380821115613b3657600080fd5b613b4285838601613cc6565b8352613b5060208501613ed9565b602084015260408401516040840152606084015160608401526080840151915080821115613b7d57600080fd5b50613b8a84828501613a8a565b608083015250613b9c60a08301613af3565b60a082015260c082015160c082015292915050565b6000610200808385031215613bc4578182fd5b613bcd816154a5565b915050613bd982613a28565b8152613be7602083016134d6565b6020820152613bf8604083016134d6565b6040820152606082015160608201526080820151608082015260a082015160a0820152613c2760c083016134d6565b60c0820152613c3860e083016134d6565b60e08201526101008281015190820152610120808301519082015261014080830151908201526101608083015190820152610180808301516001600160401b03811115613c8457600080fd5b613c9085828601613a8a565b8284015250506101a0613ca4818401613ed9565b908201526101c082810151908201526101e09182015191810191909152919050565b60006101a0808385031215613cd9578182fd5b613ce2816154a5565b915050613cee826134d6565b8152613cfc60208301613af3565b6020820152613d0d604083016134d6565b6040820152613d1e606083016134d6565b60608201526080820151608082015260a082015160a0820152613d4360c083016134d6565b60c082015260e0828101519082015261010080830151908201526101208083015190820152610140808301516001600160401b0380821115613d8457600080fd5b613d9086838701613556565b8385015261016092508285015183850152610180925082850151915080821115613db957600080fd5b50613dc685828601613a8a565b82840152505092915050565b600060808284031215613de3578081fd5b604051608081016001600160401b038282108183111715613e0057fe5b81604052829350613e1085613ad5565b835260208501356020840152604085013560408401526060850135915080821115613e3a57600080fd5b50613e4785828601613a3e565b6060830152505092915050565b600060c08284031215613e65578081fd5b60405160c081018181106001600160401b0382111715613e8157fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201526080830151613eb981615532565b608082015260a0830151613ecc81615547565b60a0919091015292915050565b805160ff811681146104a157600080fd5b600060208284031215613efb578081fd5b81356129db81615532565b600080600080600060a08688031215613f1d578081fd5b8535613f2881615532565b94506020860135613f3881615532565b935060408601356001600160401b0380821115613f53578283fd5b613f5f89838a016139c3565b94506060880135915080821115613f74578283fd5b613f8089838a016139c3565b93506080880135915080821115613f95578283fd5b50613fa288828901613a3e565b9150509295509295909350565b60008060008060808587031215613fc4578182fd5b8435613fcf81615532565b93506020850135613fdf81615532565b92506040850135915060608501356001600160401b03811115614000578182fd5b61400c87828801613a3e565b91505092959194509250565b600080600080600060a0868803121561402f578283fd5b853561403a81615532565b9450602086013561404a81615532565b9350604086013592506060860135915060808601356001600160401b03811115614072578182fd5b613fa288828901613a3e565b6000806000806101e08587031215614094578182fd5b85601f8601126140a2578182fd5b6101806140ae816154a5565b908601908087898411156140c0578586fd5b855b600c8110156140eb5781356140d681615532565b845260209384019391909101906001016140c2565b505080965050506140fb816134cb565b9350506101a08501356001600160401b03811115614117578283fd5b614123878288016134e1565b9250506141336101c086016134cb565b905092959194509250565b60008060208385031215614150578182fd5b82356001600160401b0380821115614166578384fd5b818501915085601f830112614179578384fd5b813581811115614187578485fd5b866020808302850101111561419a578485fd5b60209290920196919550909350505050565b600060208083850312156141be578182fd5b82516001600160401b03808211156141d4578384fd5b818501915085601f8301126141e7578384fd5b81516141f5613501826154c8565b818152848101908486016060808502870188018b1015614213578889fd5b8896505b8487101561427a5780828c03121561422d578889fd5b60408051828101818110898211171561424257fe5b8252835161424f81615532565b8152838a01518a82015281840151918101919091528452600196909601959287019290810190614217565b50909998505050505050505050565b6000602080838503121561429b578182fd5b82516001600160401b03808211156142b1578384fd5b818501915085601f8301126142c4578384fd5b81516142d2613501826154c8565b818152848101908486016040808502870188018b10156142f0578889fd5b8896505b8487101561427a5780828c03121561430a578889fd5b8051818101818110888211171561431d57fe5b8252825161432a81615532565b8152828901518982015284526001969096019592870192908101906142f4565b6000806000806080858703121561435f578182fd5b84356001600160401b03811115614374578283fd5b8501601f81018713614384578283fd5b80356020614394613501836154c8565b82815281810190848301875b858110156143c9576143b78d8684358a0101613dd2565b845292840192908401906001016143a0565b505080985050506143db8189016134cb565b95505050506143ec604086016134cb565b915061413360608601613a1d565b60006020828403121561440b578081fd5b81516129db81615547565b600060208284031215614427578081fd5b81356129db81615555565b60008060408385031215614444578182fd5b61444d83613ad5565b9150602083013561445d81615532565b809150509250929050565b6000602080838503121561447a578182fd5b82516001600160401b0380821115614490578384fd5b90840190604082870312156144a3578384fd5b6040516040810181811083821117156144b857fe5b6040528251828111156144c9578586fd5b6144d588828601613a8a565b82525083830151828111156144e8578586fd5b80840193505086601f8401126144fc578485fd5b8251915061450c613501836154c8565b82815284810190848601868502860187018a1015614528578788fd5b8795505b8486101561454a57805183526001959095019491860191860161452c565b50948201949094529695505050505050565b600080600060608486031215614570578081fd5b83516001600160401b0380821115614586578283fd5b61459287838801613b02565b945060208601519150808211156145a7578283fd5b506145b486828701613b02565b92505060408401516145c581615555565b809150509250925092565b6000806000606084860312156145e4578081fd5b83356001600160401b038111156145f9578182fd5b61460586828701613dd2565b935050602084013561461681615532565b915060408401356145c581615532565b600060208284031215614637578081fd5b81516001600160401b038082111561464d578283fd5b908301906101608286031215614661578283fd5b61466b60c06154a5565b825182811115614679578485fd5b6146858782860161374e565b825250602083015182811115614699578485fd5b6146a58782860161389a565b6020830152506146b88660408501613e54565b6040820152610100830151606082015261012083015160808201526146e06101408401613ed9565b60a082015295945050505050565b600080600060608486031215614702578081fd5b83516001600160401b0380821115614718578283fd5b9085019060c0828803121561472b578283fd5b60405160c08101818110838211171561474057fe5b60405261474c83613a28565b815261475a602084016134d6565b602082015260408301516040820152606083015160608201526080830151608082015260a08301518281111561478e578485fd5b61479a89828601613a8a565b60a08301525060208701519095509150808211156147b6578283fd5b506147c386828701613bb1565b9250506147d260408501613a33565b90509250925092565b6000602082840312156147ec578081fd5b5051919050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015614847578151805161ffff1688528301516001600160a01b03168388015260409096019590820190600101614813565b509495945050505050565b6000815180845260208085019450808401835b83811015614847578151805188528301516001600160a01b03168388015260409096019590820190600101614865565b6000815180845260208085018081965082840281019150828601855b858110156148ef57828403895281518051855285015160408686018190526148db818701836149e1565b9a87019a95505050908401906001016148b1565b5091979650505050505050565b6000815180845260208085018081965082840281019150828601855b858110156148ef5782840389528151610160614935868351614a0d565b818701518688015260408083015190870152606080830151908701526080808301519087015260a08083015161496d828901826147f3565b505060c0808301518282890152614986838901826149e1565b60e085810151908a015261010080860151908a015261012080860151908a015261014094850151898203958a019590955292506149c7915082905083614852565b9a87019a9550505090840190600101614918565b15159052565b600081518084526149f9816020860160208601615506565b601f01601f19169290920160200192915050565b60088110614a1757fe5b9052565b60028110614a1757fe5b6000815160e08452614a3b60e0850182516147f3565b6020810151610100614a4f81870183614a1b565b60408301519150610120614a65818801846147f3565b60608401519250610140614a7b818901856147f3565b6080850151935061016084818a015260a0860151945061018085818b015260c087015195506101a0614aaf818c01886147f3565b60e08801516101c08c0152858801516101e08c0152848801516102008c0152838801519650806102208c015250614aea6102808b0187614800565b918701516102408b01529095015188860360df19016102608a0152949350614b1892508391508490506149e1565b9150506020830151614b2d6020860182614bc5565b50604083015160408501526060830151606085015260808301518482036080860152614b5982826149e1565b91505060a0830151614b6e60a0860182614a1b565b5060c083015160c08501528091505092915050565b805182526020808201519083015260408082015190830152606080820151908301526080808201516001600160a01b03169083015260a0908101511515910152565b60ff169052565b60008251614bde818460208701615506565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a06080820181905260009082015260c00190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6001600160e01b031991909116815260200190565b6020808252818101527f507572636861736520536561506f72745f315f34206661696c65642057455448604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f35206661696c65642057455448604082015260600190565b6020808252601e908201527f50757263686173652077797665726e45786368616e6765206661696c65640000604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f34206661696c65640000000000604082015260600190565b60208082526017908201527f50757263686173652072617269626c65206661696c6564000000000000000000604082015260600190565b6020808252601c908201527f50757263686173652072617269626c65206661696c6564205745544800000000604082015260600190565b6020808252601490820152730aadcd6dcdeeedc40dac2e4d6cae892c8408aa8960631b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f36206661696c65640000000000604082015260600190565b6020808252601a908201527f4e657720616464726573732063616e6e6f74206265207a65726f000000000000604082015260600190565b60208082526019908201527f556e6b6e6f776e2070757263686173652063757272656e637900000000000000604082015260600190565b6020808252601590820152740aadcd6dcdeeedc40dac2e4d6cae892c840ae8aa89605b1b604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f31206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f36206661696c65642057455448604082015260600190565b6020808252601b908201527f507572636861736520536561506f72745f315f35206661696c65640000000000604082015260600190565b6020808252818101527f507572636861736520536561506f72745f315f31206661696c65642057455448604082015260600190565b60208082526018908201527f5075726368617365207375646f73776170206661696c65640000000000000000604082015260600190565b60208082526019908201527f756e6b6e6f776e2064656c656761746554797065207832793200000000000000604082015260600190565b6020808252601b908201527f5075726368617365204c6f6f6b73526172655632206661696c65640000000000604082015260600190565b602080825260129082015271556e6b6e6f776e20746f6b656e207479706560701b604082015260600190565b6020808252818101527f4e65774d61726b6574206164647265737320697320616c726561647920736574604082015260600190565b6020808252601a908201527f756e6b6e6f776e206164646974696f6e616c4461746154797065000000000000604082015260600190565b60208082526018908201527f6e6f207375636365737366756c20657865637574696f6e730000000000000000604082015260600190565b6020808252601c908201527f4e65774d61726b65742061646472657373206973206e6f742073657400000000604082015260600190565b60208082526018908201527f496e76616c6964206d61726b6574706c61636520747970650000000000000000604082015260600190565b6000604082526151a66040830185614a25565b82810360208401526151b88185614a25565b95945050505050565b60006020808352610180808401855161016080858801528282518085526101a094508489019150848782028a01018785019450885b828110156152de578a820361019f190184528551805183528981015161521e8b8501826147f3565b5060408181015190840152606080820151908401526080808201519084015260a0808201519084015260c080820151615259828601826147f3565b505060e08082015189828601526152728a8601826149e1565b915050610100808301518583038287015261528d8382614895565b92505050610120808301518186015250610140808301518186015250868201516152b988860182614bc5565b5090890151906152cb848b0183614bc5565b968a0196948a01949250506001016151f6565b50968a0151898803601f190160408b0152966152fa81896148fc565b9750505050604088015193506153136060880185614b83565b6060880151610120880152608088015161014088015260a0880151935061533c81880185614bc5565b50929695505050505050565b60006040825261010084511515604084015260018060a01b03602086015116606084015260408501516080840152606085015160a0840152608085015160c084015260a085015160c060e08501526153a2828501826149e1565b905083810360208501526102006153ba8287516149db565b60208601516153cc60208401826147f3565b5060408601516153df60408401826147f3565b50606086015160608301526080860151608083015260a086015160a083015260c086015161541060c08401826147f3565b5060e086015161542360e08401826147f3565b5085830151928201929092526101208086015190820152610140808601519082015261016080860151908201526101808086015181830184905290929061546c828401826149e1565b935050506101a08086015161548382840182614bc5565b50506101c085810151908201526101e094850151940193909352509092915050565b6040518181016001600160401b03811182821017156154c057fe5b604052919050565b60006001600160401b038211156154db57fe5b5060209081020190565b60006001600160401b038211156154f857fe5b50601f01601f191660200190565b60005b83811015615521578181015183820152602001615509565b83811115612e005750506000910152565b6001600160a01b038116811461286a57600080fd5b801515811461286a57600080fd5b6001600160e01b03198116811461286a57600080fdfe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220de9f341452868417f9d1e126640190795cc9e739cbd2cb193425cd6e85c449f264736f6c63430007060033", + "immutableReferences": {}, + "generatedSources": [], + "deployedGeneratedSources": [ + { + "ast": { + "nodeType": "YulBlock", + "src": "0:58620:67", + "statements": [ + { + "nodeType": "YulBlock", + "src": "6:3:67", + "statements": [] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "65:87:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "75:29:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "97:6:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "84:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "84:20:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "75:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "140:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "113:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "113:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "113:33:67" + } + ] + }, + "name": "abi_decode_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "44:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "55:5:67", + "type": "" + } + ], + "src": "14:138:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "219:80:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "229:22:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "244:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "238:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "238:13:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "229:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "287:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "260:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "260:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "260:33:67" + } + ] + }, + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "198:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "209:5:67", + "type": "" + } + ], + "src": "157:142:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "374:712:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "423:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "432:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "439:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "425:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "425:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "425:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "402:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "410:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "398:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "398:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "417:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "394:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "394:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "387:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "387:35:67" + }, + "nodeType": "YulIf", + "src": "384:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "456:30:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "479:6:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "466:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "466:20:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "460:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "495:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "505:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "499:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "518:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "590:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "544:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "544:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "529:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "529:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "522:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "603:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "616:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "607:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "635:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "640:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "628:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "628:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "628:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "652:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "663:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "668:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "659:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "659:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "652:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "680:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "695:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "703:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "691:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "691:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "684:3:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "761:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "770:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "777:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "763:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "763:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "763:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "729:6:67" + }, + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "741:2:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "745:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "737:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "737:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "725:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "725:24:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "751:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "721:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "721:33:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "756:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "718:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "718:42:67" + }, + "nodeType": "YulIf", + "src": "715:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "794:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "803:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "798:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "862:195:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "876:30:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "902:3:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "889:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "889:17:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "880:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "946:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "919:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "919:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "919:33:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "972:3:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "977:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "965:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "965:18:67" + }, + "nodeType": "YulExpressionStatement", + "src": "965:18:67" + }, + { + "nodeType": "YulAssignment", + "src": "996:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1007:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1012:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1003:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1003:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "996:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "1028:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "1039:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1044:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1035:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1035:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "1028:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "828:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "831:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "825:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "825:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "835:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "837:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "846:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "849:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "842:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "842:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "837:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "821:3:67", + "statements": [] + }, + "src": "817:240:67" + }, + { + "nodeType": "YulAssignment", + "src": "1066:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "1075:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1066:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_address_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "348:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "356:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "364:5:67", + "type": "" + } + ], + "src": "304:782:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1176:1200:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1225:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1234:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1241:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1227:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "1227:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "1227:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1204:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1212:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1200:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1200:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1219:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1196:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1196:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "1189:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "1189:35:67" + }, + "nodeType": "YulIf", + "src": "1186:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1258:23:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1274:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "1268:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "1268:13:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "1262:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1290:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1300:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "1294:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1313:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1385:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "1339:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "1339:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "1324:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "1324:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "1317:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1398:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1411:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "1402:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1430:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1435:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1423:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "1423:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "1423:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "1447:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1458:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1463:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1454:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1454:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "1447:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1475:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1490:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1498:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1486:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1486:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "1479:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1510:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1520:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "1514:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1579:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1588:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1595:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1581:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "1581:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "1581:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "1547:6:67" + }, + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1559:2:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1563:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "1555:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1555:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1543:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1543:24:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "1569:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1539:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1539:33:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1574:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1536:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "1536:42:67" + }, + "nodeType": "YulIf", + "src": "1533:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1612:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1621:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "1616:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1680:667:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "1720:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1729:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "1736:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "1722:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "1722:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "1722:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "1705:3:67" + }, + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "1710:3:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "1701:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1701:13:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1716:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "1697:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1697:22:67" + }, + "nodeType": "YulIf", + "src": "1694:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1757:23:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1777:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "1771:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "1771:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "1761:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1793:33:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1815:6:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1823:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1811:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1811:15:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "1797:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "1905:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "1907:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "1907:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "1907:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "1848:10:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1860:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "1845:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "1845:34:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "1884:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "1896:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "1881:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "1881:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "1842:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "1842:62:67" + }, + "nodeType": "YulIf", + "src": "1839:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "1938:2:67" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "1942:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "1931:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "1931:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "1931:22:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "1966:23:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "1985:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "1979:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "1979:10:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "1970:5:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2043:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2052:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2059:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2045:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2045:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2045:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2015:5:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2026:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2033:6:67", + "type": "", + "value": "0xffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "2022:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2022:18:67" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "2012:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "2012:29:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "2005:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2005:37:67" + }, + "nodeType": "YulIf", + "src": "2002:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2087:6:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "2095:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2080:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2080:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2080:21:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2114:34:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "2139:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2144:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2135:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2135:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "2129:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "2129:19:67" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "2118:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "2188:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "2161:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "2161:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2161:35:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2220:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2228:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2216:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2216:15:67" + }, + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "2233:7:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2209:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2209:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2209:32:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2261:3:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "2266:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2254:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2254:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2254:19:67" + }, + { + "nodeType": "YulAssignment", + "src": "2286:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2297:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2302:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2293:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2293:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2286:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "2318:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "2329:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "2334:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2325:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2325:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "2318:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1646:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "1649:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "1643:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "1643:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "1653:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "1655:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1664:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "1667:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "1660:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "1660:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "1655:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "1639:3:67", + "statements": [] + }, + "src": "1635:712:67" + }, + { + "nodeType": "YulAssignment", + "src": "2356:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "2365:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2356:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_struct$_Fee_$dyn_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "1150:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "1158:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "1166:5:67", + "type": "" + } + ], + "src": "1091:1285:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2488:1085:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "2537:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2546:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2553:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2539:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2539:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2539:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2516:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2524:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2512:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2512:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "2531:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "2508:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2508:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "2501:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2501:35:67" + }, + "nodeType": "YulIf", + "src": "2498:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2570:23:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2586:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "2580:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "2580:13:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "2574:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2602:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2612:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "2606:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2625:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2697:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "2651:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "2651:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "2636:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "2636:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "2629:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2710:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2723:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "2714:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2742:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2747:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "2735:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2735:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2735:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "2759:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2770:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2775:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2766:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2766:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "2759:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2787:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2802:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2810:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2798:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2798:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "2791:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2822:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2832:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "2826:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2891:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2900:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2907:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "2893:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "2893:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "2893:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "2859:6:67" + }, + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2871:2:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "2875:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "2867:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2867:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2855:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2855:24:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "2881:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2851:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2851:33:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "2886:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "2848:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "2848:42:67" + }, + "nodeType": "YulIf", + "src": "2845:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "2924:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "2933:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "2928:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "2992:552:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "3032:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3041:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3048:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3034:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3034:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3034:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3017:3:67" + }, + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3022:3:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "3013:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3013:13:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3028:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "3009:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3009:22:67" + }, + "nodeType": "YulIf", + "src": "3006:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3069:23:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3089:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3083:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "3083:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "3073:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3105:33:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3127:6:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3135:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3123:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3123:15:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "3109:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3217:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "3219:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "3219:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3219:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "3160:10:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3172:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "3157:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "3157:34:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "3196:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3208:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "3193:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "3193:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "3154:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "3154:62:67" + }, + "nodeType": "YulIf", + "src": "3151:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3250:2:67" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "3254:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3243:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3243:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3243:22:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3285:6:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3299:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3293:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "3293:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3278:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3278:26:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3278:26:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3317:32:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3340:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3345:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3336:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3336:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3330:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "3330:19:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "3321:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3389:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "3362:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "3362:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3362:33:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3419:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3427:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3415:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3415:15:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "3432:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3408:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3408:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3408:30:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3458:3:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "3463:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3451:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3451:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3451:19:67" + }, + { + "nodeType": "YulAssignment", + "src": "3483:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3494:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3499:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3490:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3490:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3483:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "3515:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3526:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "3531:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3522:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3522:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "3515:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "2958:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "2961:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "2955:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "2955:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "2965:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "2967:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "2976:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "2979:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "2972:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "2972:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "2967:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "2951:3:67", + "statements": [] + }, + "src": "2947:597:67" + }, + { + "nodeType": "YulAssignment", + "src": "3553:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "3562:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3553:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "2462:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "2470:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "2478:5:67", + "type": "" + } + ], + "src": "2381:1192:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "3669:1172:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "3718:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3727:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "3734:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "3720:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3720:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3720:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3697:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3705:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3693:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3693:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "3712:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "3689:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3689:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "3682:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3682:35:67" + }, + "nodeType": "YulIf", + "src": "3679:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3751:23:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3767:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "3761:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "3761:13:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "3755:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3783:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "3793:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "3787:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3806:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "3878:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "3832:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "3832:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "3817:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "3817:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "3810:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3891:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3904:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "3895:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3923:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "3928:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "3916:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "3916:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "3916:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "3940:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3951:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3956:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3947:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3947:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "3940:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "3968:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "3983:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "3991:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "3979:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "3979:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "3972:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4003:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4012:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "4007:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4071:741:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "4085:33:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4099:6:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4113:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "4107:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "4107:10:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4095:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4095:23:67" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "4089:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4131:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4141:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "4135:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4197:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4206:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4213:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4199:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4199:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4199:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "4173:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "4178:2:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "4169:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4169:12:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4187:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "4183:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4183:7:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4165:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4165:26:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "4193:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "4161:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4161:35:67" + }, + "nodeType": "YulIf", + "src": "4158:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4234:23:67", + "value": { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "4254:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "4248:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "4248:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "4238:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4270:33:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4292:6:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "4300:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4288:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4288:15:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "4274:10:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4316:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4326:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "4320:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4407:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "4409:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "4409:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4409:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "4366:10:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "4378:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "4363:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "4363:18:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "4386:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4398:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "4383:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "4383:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "4360:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "4360:46:67" + }, + "nodeType": "YulIf", + "src": "4357:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "4440:2:67" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "4444:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4433:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4433:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4433:22:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4475:6:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "4493:2:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4497:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4489:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4489:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "4483:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "4483:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4468:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4468:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4468:34:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "4515:34:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "4541:2:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "4545:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4537:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4537:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "4531:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "4531:18:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "4519:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4582:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4591:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4598:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4584:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4584:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4584:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "4568:8:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "4578:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "4565:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "4565:16:67" + }, + "nodeType": "YulIf", + "src": "4562:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4630:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4638:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4626:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4626:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "4681:2:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "4685:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4677:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4677:17:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4696:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4673:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4673:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "4701:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "4643:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "4643:62:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4619:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4619:87:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4619:87:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "4726:3:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "4731:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "4719:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4719:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4719:19:67" + }, + { + "nodeType": "YulAssignment", + "src": "4751:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "4762:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4767:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4758:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4758:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "4751:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "4783:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4794:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "4799:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4790:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4790:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "4783:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "4037:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "4040:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "4034:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "4034:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "4044:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "4046:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "4055:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4058:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4051:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4051:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "4046:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "4030:3:67", + "statements": [] + }, + "src": "4026:786:67" + }, + { + "nodeType": "YulAssignment", + "src": "4821:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "4830:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4821:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_struct$_OrderItem_$dyn_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "3643:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "3651:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "3659:5:67", + "type": "" + } + ], + "src": "3578:1263:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "4933:1967:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "4982:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4991:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "4998:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "4984:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4984:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "4984:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "4961:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "4969:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "4957:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4957:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "4976:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "4953:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "4953:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "4946:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "4946:35:67" + }, + "nodeType": "YulIf", + "src": "4943:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5015:23:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5031:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5025:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5025:13:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "5019:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5047:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5057:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "5051:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5070:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "5142:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "5096:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "5096:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "5081:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "5081:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "5074:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5155:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "5168:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "5159:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "5187:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "5192:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5180:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5180:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5180:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "5204:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "5215:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "5220:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5211:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5211:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "5204:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5232:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5247:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "5255:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5243:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5243:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "5236:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5267:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "5276:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "5271:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5335:1536:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "5349:33:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "5363:6:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "5377:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5371:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5371:10:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5359:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5359:23:67" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "5353:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5395:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5405:6:67", + "type": "", + "value": "0x01a0" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "5399:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "5463:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "5472:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "5479:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "5465:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5465:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5465:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "5439:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5444:2:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "5435:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5435:12:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5453:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "5449:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5449:7:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5431:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5431:26:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "5459:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "5427:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5427:35:67" + }, + "nodeType": "YulIf", + "src": "5424:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5500:31:67", + "value": { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "5528:2:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "5513:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "5513:18:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "5504:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5551:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5568:2:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "5572:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5564:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5564:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5558:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5558:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5544:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5544:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5544:33:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5601:5:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "5608:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5597:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5597:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5649:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5653:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5645:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5645:11:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "5613:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "5613:44:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5590:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5590:68:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5590:68:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5682:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5689:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5678:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5678:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5704:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5708:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5700:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5700:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5694:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5694:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5671:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5671:42:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5671:42:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5737:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5744:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5733:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5733:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5759:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5763:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5755:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5755:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5749:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5749:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5726:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5726:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5726:43:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5793:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5800:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5789:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5789:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5816:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5820:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5812:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5812:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5806:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5806:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5782:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5782:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5782:44:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5850:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5857:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5846:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5846:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5873:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5877:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5869:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5869:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "5863:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "5863:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5839:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5839:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5839:44:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "5907:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5914:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5903:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5903:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "5956:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5960:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5952:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5952:12:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "5920:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "5920:45:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "5896:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "5896:70:67" + }, + "nodeType": "YulExpressionStatement", + "src": "5896:70:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "5979:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5989:3:67", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "5983:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6005:34:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6031:2:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "6035:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6027:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6027:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "6021:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "6021:18:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "6009:8:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6052:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6062:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "6056:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6113:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "6122:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "6129:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "6115:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6115:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6115:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "6099:8:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "6109:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "6096:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "6096:16:67" + }, + "nodeType": "YulIf", + "src": "6093:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6161:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6168:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6157:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6157:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6212:2:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "6216:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6208:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6208:17:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "6227:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6204:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6204:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "6232:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "6174:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "6174:62:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6150:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6150:87:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6150:87:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6250:35:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6276:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6280:3:67", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6272:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6272:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "6266:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "6266:19:67" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "6254:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6318:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "6327:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "6334:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "6320:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6320:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6320:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "6304:8:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "6314:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "6301:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "6301:16:67" + }, + "nodeType": "YulIf", + "src": "6298:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6366:5:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "6373:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6362:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6362:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6442:2:67" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "6446:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6438:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6438:17:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "6457:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6434:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6434:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "6462:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_OrderItem_$dyn_fromMemory", + "nodeType": "YulIdentifier", + "src": "6378:55:67" + }, + "nodeType": "YulFunctionCall", + "src": "6378:88:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6355:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6355:112:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6355:112:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "6480:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6490:3:67", + "type": "", + "value": "320" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "6484:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6517:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6524:3:67", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6513:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6513:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6540:2:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "6544:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6536:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6536:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "6530:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "6530:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6506:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6506:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6506:43:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6573:5:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "6580:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6569:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6569:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6595:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6599:3:67", + "type": "", + "value": "352" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6591:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6591:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "6585:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "6585:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6562:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6562:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6562:43:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6629:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6636:3:67", + "type": "", + "value": "352" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6625:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6625:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6676:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6680:3:67", + "type": "", + "value": "384" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6672:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6672:12:67" + } + ], + "functionName": { + "name": "abi_decode_t_uint8_fromMemory", + "nodeType": "YulIdentifier", + "src": "6642:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "6642:43:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6618:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6618:68:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6618:68:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6710:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "6717:3:67", + "type": "", + "value": "384" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6706:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6706:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "6757:2:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "6761:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6753:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6753:11:67" + } + ], + "functionName": { + "name": "abi_decode_t_uint8_fromMemory", + "nodeType": "YulIdentifier", + "src": "6723:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "6723:42:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6699:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6699:67:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6699:67:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "6786:3:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "6791:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "6779:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "6779:18:67" + }, + "nodeType": "YulExpressionStatement", + "src": "6779:18:67" + }, + { + "nodeType": "YulAssignment", + "src": "6810:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "6821:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "6826:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6817:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6817:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "6810:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "6842:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "6853:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "6858:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "6849:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "6849:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "6842:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "5301:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "5304:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "5298:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "5298:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "5308:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "5310:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "5319:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "5322:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "5315:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "5315:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "5310:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "5294:3:67", + "statements": [] + }, + "src": "5290:1581:67" + }, + { + "nodeType": "YulAssignment", + "src": "6880:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "6889:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "6880:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_struct$_Order_$dyn_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "4907:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "4915:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "4923:5:67", + "type": "" + } + ], + "src": "4846:2054:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "6999:1870:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "7048:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "7057:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "7064:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7050:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7050:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7050:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7027:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7035:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7023:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7023:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "7042:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "7019:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7019:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "7012:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7012:35:67" + }, + "nodeType": "YulIf", + "src": "7009:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7081:23:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7097:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "7091:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "7091:13:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "7085:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7113:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7123:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "7117:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7136:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "7208:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "7162:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "7162:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "7147:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "7147:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "7140:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7221:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "7234:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "7225:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "7253:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "7258:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7246:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7246:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7246:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "7270:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "7281:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7286:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7277:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7277:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "7270:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7298:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7313:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7321:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7309:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7309:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "7302:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7333:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "7342:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "7337:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7401:1439:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "7415:33:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "7429:6:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "7443:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "7437:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "7437:10:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7425:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7425:23:67" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "7419:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7461:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7471:6:67", + "type": "", + "value": "0x0160" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "7465:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "7529:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "7538:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "7545:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "7531:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7531:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7531:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "7505:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "7510:2:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "7501:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7501:12:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7519:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "7515:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7515:7:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7497:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7497:26:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "7525:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "7493:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7493:35:67" + }, + "nodeType": "YulIf", + "src": "7490:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7566:31:67", + "value": { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "7594:2:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "7579:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "7579:18:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "7570:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7617:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "7661:2:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7665:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7657:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7657:11:67" + } + ], + "functionName": { + "name": "abi_decode_t_enum$_Op_fromMemory", + "nodeType": "YulIdentifier", + "src": "7624:32:67" + }, + "nodeType": "YulFunctionCall", + "src": "7624:45:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7610:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7610:60:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7610:60:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7694:5:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "7701:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7690:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7690:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "7716:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7720:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7712:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7712:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "7706:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "7706:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7683:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7683:42:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7683:42:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7749:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7756:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7745:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7745:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "7771:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7775:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7767:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7767:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "7761:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "7761:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7738:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7738:42:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7738:42:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7804:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7811:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7800:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7800:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "7826:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7830:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7822:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7822:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "7816:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "7816:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7793:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7793:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7793:43:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7860:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7867:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7856:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7856:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "7883:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7887:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7879:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7879:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "7873:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "7873:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7849:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7849:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7849:44:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "7906:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7916:3:67", + "type": "", + "value": "192" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "7910:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "7943:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7950:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7939:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7939:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "7992:2:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "7996:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7988:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7988:11:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "7956:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "7956:44:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "7932:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "7932:69:67" + }, + "nodeType": "YulExpressionStatement", + "src": "7932:69:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8014:35:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8040:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8044:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8036:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8036:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "8030:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "8030:19:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "8018:8:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8062:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8072:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "8066:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8123:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "8132:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "8139:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "8125:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8125:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8125:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "8109:8:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "8119:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "8106:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "8106:16:67" + }, + "nodeType": "YulIf", + "src": "8103:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8171:5:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "8178:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8167:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8167:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8221:2:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "8225:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8217:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8217:17:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8236:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8213:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8213:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "8241:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "8183:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "8183:62:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8160:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8160:86:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8160:86:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8259:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8269:3:67", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "8263:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8296:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8303:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8292:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8292:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8319:2:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "8323:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8315:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8315:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "8309:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "8309:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8285:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8285:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8285:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8341:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8351:3:67", + "type": "", + "value": "288" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "8345:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8378:5:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "8385:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8374:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8374:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8400:2:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "8404:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8396:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8396:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "8390:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "8390:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8367:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8367:42:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8367:42:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8422:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8432:3:67", + "type": "", + "value": "320" + }, + "variables": [ + { + "name": "_9", + "nodeType": "YulTypedName", + "src": "8426:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8459:5:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "8466:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8455:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8455:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8481:2:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "8485:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8477:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8477:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "8471:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "8471:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8448:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8448:42:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8448:42:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "8503:34:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8529:2:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "8533:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8525:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8525:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "8519:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "8519:18:67" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "8507:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8570:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "8579:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "8586:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "8572:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8572:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8572:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "8556:8:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "8566:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "8553:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "8553:16:67" + }, + "nodeType": "YulIf", + "src": "8550:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8618:5:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "8625:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8614:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8614:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "8710:2:67" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "8714:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8706:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8706:17:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8725:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8702:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8702:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "8730:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr_fromMemory", + "nodeType": "YulIdentifier", + "src": "8630:71:67" + }, + "nodeType": "YulFunctionCall", + "src": "8630:104:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8607:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8607:128:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8607:128:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "8755:3:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "8760:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "8748:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8748:18:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8748:18:67" + }, + { + "nodeType": "YulAssignment", + "src": "8779:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "8790:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8795:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8786:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8786:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "8779:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "8811:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "8822:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "8827:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8818:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8818:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "8811:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "7367:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "7370:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "7364:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "7364:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "7374:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "7376:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "7385:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "7388:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "7381:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "7381:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "7376:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "7360:3:67", + "statements": [] + }, + "src": "7356:1484:67" + }, + { + "nodeType": "YulAssignment", + "src": "8849:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "8858:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "8849:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_struct$_SettleDetail_$dyn_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "6973:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "6981:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "6989:5:67", + "type": "" + } + ], + "src": "6905:1964:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "8944:635:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "8993:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "9002:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "9009:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "8995:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8995:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "8995:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "8972:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "8980:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "8968:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8968:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "8987:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "8964:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "8964:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "8957:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "8957:35:67" + }, + "nodeType": "YulIf", + "src": "8954:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9026:30:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9049:6:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "9036:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "9036:20:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "9030:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9065:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9075:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "9069:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9088:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "9160:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "9114:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "9114:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "9099:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "9099:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "9092:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9173:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9186:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "9177:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9205:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "9210:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9198:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "9198:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "9198:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "9222:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9233:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9238:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9229:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9229:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9222:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9250:26:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9265:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9273:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9261:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9261:15:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "9254:3:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9331:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "9340:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "9347:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "9333:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "9333:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "9333:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9299:6:67" + }, + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "9311:2:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9315:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "9307:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9307:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9295:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9295:24:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9321:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9291:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9291:33:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "9326:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "9288:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "9288:42:67" + }, + "nodeType": "YulIf", + "src": "9285:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "9364:14:67", + "value": { + "name": "array", + "nodeType": "YulIdentifier", + "src": "9373:5:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "9368:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9432:118:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9453:3:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "9471:3:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "9458:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "9458:17:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "9446:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "9446:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "9446:30:67" + }, + { + "nodeType": "YulAssignment", + "src": "9489:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9500:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9505:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9496:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9496:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "9489:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "9521:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "9532:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "9537:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9528:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9528:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "9521:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "9398:1:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "9401:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "9395:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "9395:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "9405:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9407:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "9416:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "9419:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "9412:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "9412:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "9407:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "9391:3:67", + "statements": [] + }, + "src": "9387:163:67" + }, + { + "nodeType": "YulAssignment", + "src": "9559:14:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "9568:5:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "9559:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_array$_t_uint256_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "8918:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "8926:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "8934:5:67", + "type": "" + } + ], + "src": "8874:705:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9632:84:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9642:29:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9664:6:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "9651:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "9651:20:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9642:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9704:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_bool", + "nodeType": "YulIdentifier", + "src": "9680:23:67" + }, + "nodeType": "YulFunctionCall", + "src": "9680:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "9680:30:67" + } + ] + }, + "name": "abi_decode_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "9611:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "9622:5:67", + "type": "" + } + ], + "src": "9584:132:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9780:77:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9790:22:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9805:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "9799:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "9799:13:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9790:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9845:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_bool", + "nodeType": "YulIdentifier", + "src": "9821:23:67" + }, + "nodeType": "YulFunctionCall", + "src": "9821:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "9821:30:67" + } + ] + }, + "name": "abi_decode_t_bool_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "9759:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "9770:5:67", + "type": "" + } + ], + "src": "9721:136:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "9923:79:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "9933:22:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "9948:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "9942:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "9942:13:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9933:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "9990:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_bytes4", + "nodeType": "YulIdentifier", + "src": "9964:25:67" + }, + "nodeType": "YulFunctionCall", + "src": "9964:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "9964:32:67" + } + ] + }, + "name": "abi_decode_t_bytes4_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "9902:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "9913:5:67", + "type": "" + } + ], + "src": "9862:140:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10061:431:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "10110:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10119:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10126:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "10112:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10112:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10112:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10089:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10097:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10085:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10085:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "10104:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "10081:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10081:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "10074:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10074:35:67" + }, + "nodeType": "YulIf", + "src": "10071:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10143:30:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10166:6:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "10153:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "10153:20:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "10147:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10182:64:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10242:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_bytes", + "nodeType": "YulIdentifier", + "src": "10212:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "10212:33:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "10197:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "10197:49:67" + }, + "variables": [ + { + "name": "array_1", + "nodeType": "YulTypedName", + "src": "10186:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "10262:7:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10271:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10255:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10255:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10255:19:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10322:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10331:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10338:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "10324:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10324:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10324:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10297:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10305:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10293:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10293:15:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10310:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10289:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10289:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "10317:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "10286:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "10286:35:67" + }, + "nodeType": "YulIf", + "src": "10283:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "10372:7:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10381:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10368:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10368:18:67" + }, + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10392:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10400:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10388:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10388:17:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10407:2:67" + } + ], + "functionName": { + "name": "calldatacopy", + "nodeType": "YulIdentifier", + "src": "10355:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "10355:55:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10355:55:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "10434:7:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10443:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10430:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10430:16:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10448:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10426:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10426:27:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10455:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10419:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10419:42:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10419:42:67" + }, + { + "nodeType": "YulAssignment", + "src": "10470:16:67", + "value": { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "10479:7:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10470:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_bytes", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "10035:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "10043:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "10051:5:67", + "type": "" + } + ], + "src": "10007:485:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10562:382:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "10611:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10620:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10627:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "10613:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10613:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10613:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10590:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10598:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10586:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10586:17:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "10605:3:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "10582:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10582:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "10575:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10575:35:67" + }, + "nodeType": "YulIf", + "src": "10572:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10644:23:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10660:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "10654:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "10654:13:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "10648:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "10676:64:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10736:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_bytes", + "nodeType": "YulIdentifier", + "src": "10706:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "10706:33:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "10691:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "10691:49:67" + }, + "variables": [ + { + "name": "array_1", + "nodeType": "YulTypedName", + "src": "10680:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "10756:7:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10765:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "10749:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10749:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10749:19:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "10816:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10825:5:67" + }, + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10832:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "10818:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "10818:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10818:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10791:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10799:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10787:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10787:15:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10804:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10783:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10783:26:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "10811:3:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "10780:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "10780:35:67" + }, + "nodeType": "YulIf", + "src": "10777:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "10875:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10883:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10871:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10871:17:67" + }, + { + "arguments": [ + { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "10894:7:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "10903:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "10890:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "10890:18:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "10910:2:67" + } + ], + "functionName": { + "name": "copy_memory_to_memory", + "nodeType": "YulIdentifier", + "src": "10849:21:67" + }, + "nodeType": "YulFunctionCall", + "src": "10849:64:67" + }, + "nodeType": "YulExpressionStatement", + "src": "10849:64:67" + }, + { + "nodeType": "YulAssignment", + "src": "10922:16:67", + "value": { + "name": "array_1", + "nodeType": "YulIdentifier", + "src": "10931:7:67" + }, + "variableNames": [ + { + "name": "array", + "nodeType": "YulIdentifier", + "src": "10922:5:67" + } + ] + } + ] + }, + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "10536:6:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "10544:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nodeType": "YulTypedName", + "src": "10552:5:67", + "type": "" + } + ], + "src": "10497:447:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11006:95:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11016:29:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11038:6:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "11025:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "11025:20:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11016:5:67" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11079:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11088:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11091:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "11081:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11081:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11081:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11067:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11074:2:67", + "type": "", + "value": "12" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "11064:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "11064:13:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "11057:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11057:21:67" + }, + "nodeType": "YulIf", + "src": "11054:2:67" + } + ] + }, + "name": "abi_decode_t_enum$_Markets", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "10985:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "10996:5:67", + "type": "" + } + ], + "src": "10949:152:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11169:87:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11179:22:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11194:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11188:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "11188:13:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11179:5:67" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11234:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11243:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11246:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "11236:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11236:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11236:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11223:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11230:1:67", + "type": "", + "value": "8" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "11220:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "11220:12:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "11213:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11213:20:67" + }, + "nodeType": "YulIf", + "src": "11210:2:67" + } + ] + }, + "name": "abi_decode_t_enum$_Op_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "11148:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "11159:5:67", + "type": "" + } + ], + "src": "11106:150:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11326:87:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "11336:22:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11351:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11345:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "11345:13:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11336:5:67" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11391:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11400:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11403:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "11393:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11393:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11393:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11380:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11387:1:67", + "type": "", + "value": "2" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "11377:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "11377:12:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "11370:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11370:20:67" + }, + "nodeType": "YulIf", + "src": "11367:2:67" + } + ] + }, + "name": "abi_decode_t_enum$_Side_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "11305:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "11316:5:67", + "type": "" + } + ], + "src": "11261:152:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11494:858:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "11538:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11547:5:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11554:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "11540:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11540:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11540:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "11515:3:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11520:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "11511:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11511:19:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11532:4:67", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "11507:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11507:30:67" + }, + "nodeType": "YulIf", + "src": "11504:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "11571:29:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11595:4:67", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "11580:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "11580:20:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11571:5:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11609:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11629:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11623:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "11623:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "11613:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "11648:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11658:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "11652:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "11703:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11712:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11715:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "11705:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11705:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11705:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11691:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "11699:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "11688:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "11688:14:67" + }, + "nodeType": "YulIf", + "src": "11685:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11735:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11784:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "11795:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11780:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11780:22:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "11804:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_Order_fromMemory", + "nodeType": "YulIdentifier", + "src": "11742:37:67" + }, + "nodeType": "YulFunctionCall", + "src": "11742:66:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11728:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11728:81:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11728:81:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11829:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11836:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11825:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11825:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11875:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11886:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11871:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11871:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_uint8_fromMemory", + "nodeType": "YulIdentifier", + "src": "11841:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "11841:49:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11818:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11818:73:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11818:73:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11911:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11918:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11907:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11907:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11933:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11944:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11929:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11929:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11923:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "11923:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11900:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11900:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11900:49:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "11969:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "11976:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11965:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11965:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "11991:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12002:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "11987:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "11987:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "11981:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "11981:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "11958:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "11958:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "11958:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "12016:42:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12042:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12053:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12038:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12038:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12032:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "12032:26:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "12020:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12087:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12096:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12099:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "12089:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12089:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12089:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "12073:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "12083:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "12070:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "12070:16:67" + }, + "nodeType": "YulIf", + "src": "12067:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12123:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12130:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12119:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12119:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12170:9:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "12181:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12166:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12166:24:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "12192:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "12136:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "12136:60:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12112:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12112:85:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12112:85:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12217:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12224:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12213:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12213:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12269:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12280:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12265:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12265:19:67" + } + ], + "functionName": { + "name": "abi_decode_t_enum$_Side_fromMemory", + "nodeType": "YulIdentifier", + "src": "12230:34:67" + }, + "nodeType": "YulFunctionCall", + "src": "12230:55:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12206:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12206:80:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12206:80:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12306:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12313:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12302:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12302:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12329:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12340:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12325:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12325:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12319:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "12319:26:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12295:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12295:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12295:51:67" + } + ] + }, + "name": "abi_decode_t_struct$_Input_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "11465:9:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "11476:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "11484:5:67", + "type": "" + } + ], + "src": "11418:934:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12438:1518:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "12448:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12458:6:67", + "type": "", + "value": "0x0200" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "12452:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "12505:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12514:5:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12521:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "12507:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12507:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12507:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "12484:3:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12489:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "12480:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12480:19:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "12501:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "12476:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12476:28:67" + }, + "nodeType": "YulIf", + "src": "12473:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "12538:27:67", + "value": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "12562:2:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "12547:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "12547:18:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12538:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12581:5:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12617:9:67" + } + ], + "functionName": { + "name": "abi_decode_t_bool_fromMemory", + "nodeType": "YulIdentifier", + "src": "12588:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "12588:39:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12574:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12574:54:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12574:54:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12648:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12655:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12644:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12644:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12696:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12707:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12692:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12692:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "12660:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "12660:51:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12637:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12637:75:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12637:75:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12732:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12739:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12728:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12728:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12780:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12791:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12776:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12776:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "12744:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "12744:51:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12721:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12721:75:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12721:75:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12816:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12823:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12812:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12812:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12838:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12849:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12834:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12834:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12828:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "12828:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12805:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12805:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12805:49:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12874:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12881:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12870:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12870:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12897:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12908:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12893:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12893:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12887:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "12887:26:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12863:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12863:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12863:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12934:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12941:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12930:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12930:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "12957:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "12968:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12953:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12953:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "12947:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "12947:26:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12923:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12923:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12923:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "12994:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13001:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "12990:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "12990:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13043:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13054:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13039:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13039:19:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "13007:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "13007:52:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "12983:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "12983:77:67" + }, + "nodeType": "YulExpressionStatement", + "src": "12983:77:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13080:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13087:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13076:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13076:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13129:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13140:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13125:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13125:19:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "13093:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "13093:52:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13069:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13069:77:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13069:77:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13155:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13165:3:67", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "13159:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13188:5:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "13195:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13184:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13184:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13210:9:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "13221:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13206:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13206:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13200:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13200:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13177:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13177:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13177:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13235:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13245:3:67", + "type": "", + "value": "288" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "13239:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13268:5:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "13275:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13264:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13264:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13290:9:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "13301:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13286:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13286:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13280:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13280:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13257:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13257:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13257:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13315:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13325:3:67", + "type": "", + "value": "320" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "13319:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13348:5:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "13355:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13344:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13344:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13370:9:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "13381:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13366:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13366:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13360:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13360:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13337:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13337:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13337:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13395:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13405:3:67", + "type": "", + "value": "352" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "13399:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13428:5:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "13435:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13424:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13424:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13450:9:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "13461:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13446:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13446:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13440:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13440:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13417:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13417:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13417:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13475:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13485:3:67", + "type": "", + "value": "384" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "13479:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13497:39:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13521:9:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "13532:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13517:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13517:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13511:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13511:25:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "13501:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "13579:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13588:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13591:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "13581:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13581:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13581:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "13551:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13559:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "13548:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "13548:30:67" + }, + "nodeType": "YulIf", + "src": "13545:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13615:5:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "13622:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13611:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13611:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13661:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "13672:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13657:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13657:22:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "13681:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "13627:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "13627:58:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13604:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13604:82:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13604:82:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13695:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13705:3:67", + "type": "", + "value": "416" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "13699:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13728:5:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "13735:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13724:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13724:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13774:9:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "13785:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13770:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13770:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_uint8_fromMemory", + "nodeType": "YulIdentifier", + "src": "13740:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "13740:49:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13717:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13717:73:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13717:73:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13799:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13809:3:67", + "type": "", + "value": "448" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "13803:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13832:5:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "13839:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13828:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13828:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13854:9:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "13865:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13850:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13850:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13844:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13844:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13821:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13821:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13821:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "13879:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "13889:3:67", + "type": "", + "value": "480" + }, + "variables": [ + { + "name": "_9", + "nodeType": "YulTypedName", + "src": "13883:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "13912:5:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "13919:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13908:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13908:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "13934:9:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "13945:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "13930:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "13930:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "13924:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "13924:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "13901:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "13901:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "13901:49:67" + } + ] + }, + "name": "abi_decode_t_struct$_MakerOrder_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "12409:9:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "12420:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "12428:5:67", + "type": "" + } + ], + "src": "12357:1599:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14037:1431:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "14047:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14057:6:67", + "type": "", + "value": "0x01a0" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "14051:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "14104:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14113:5:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14120:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "14106:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14106:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14106:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "14083:3:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14088:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "14079:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14079:19:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "14100:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "14075:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14075:28:67" + }, + "nodeType": "YulIf", + "src": "14072:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "14137:27:67", + "value": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "14161:2:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "14146:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "14146:18:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14137:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14180:5:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14219:9:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "14187:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "14187:42:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14173:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14173:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14173:57:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14250:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14257:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14246:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14246:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14301:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14312:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14297:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14297:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_enum$_Side_fromMemory", + "nodeType": "YulIdentifier", + "src": "14262:34:67" + }, + "nodeType": "YulFunctionCall", + "src": "14262:54:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14239:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14239:78:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14239:78:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14337:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14344:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14333:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14333:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14385:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14396:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14381:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14381:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "14349:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "14349:51:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14326:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14326:75:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14326:75:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14421:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14428:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14417:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14417:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14469:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14480:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14465:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14465:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "14433:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "14433:51:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14410:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14410:75:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14410:75:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14505:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14512:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14501:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14501:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14528:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14539:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14524:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14524:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14518:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "14518:26:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14494:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14494:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14494:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14565:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14572:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14561:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14561:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14588:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14599:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14584:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14584:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14578:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "14578:26:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14554:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14554:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14554:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14625:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14632:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14621:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14621:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14674:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14685:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14670:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14670:19:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "14638:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "14638:52:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14614:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14614:77:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14614:77:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14711:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14718:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14707:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14707:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14734:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14745:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14730:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14730:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14724:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "14724:26:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14700:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14700:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14700:51:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14760:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14770:3:67", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "14764:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14793:5:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "14800:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14789:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14789:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14815:9:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "14826:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14811:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14811:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14805:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "14805:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14782:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14782:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14782:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14840:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14850:3:67", + "type": "", + "value": "288" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "14844:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "14873:5:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "14880:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14869:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14869:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14895:9:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "14906:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14891:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14891:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14885:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "14885:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "14862:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "14862:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "14862:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14920:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "14930:3:67", + "type": "", + "value": "320" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "14924:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14942:39:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "14966:9:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "14977:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "14962:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "14962:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "14956:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "14956:25:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "14946:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "14990:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15000:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "14994:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15045:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15054:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15057:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "15047:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15047:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15047:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "15033:6:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "15041:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "15030:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "15030:14:67" + }, + "nodeType": "YulIf", + "src": "15027:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15081:5:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "15088:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15077:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15077:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15147:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "15158:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15143:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15143:22:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "15167:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Fee_$dyn_fromMemory", + "nodeType": "YulIdentifier", + "src": "15093:49:67" + }, + "nodeType": "YulFunctionCall", + "src": "15093:78:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15070:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15070:102:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15070:102:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15181:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15191:3:67", + "type": "", + "value": "352" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "15185:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15214:5:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "15221:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15210:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15210:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15236:9:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "15247:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15232:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15232:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15226:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "15226:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15203:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15203:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15203:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15261:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15271:3:67", + "type": "", + "value": "384" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "15265:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15283:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15309:9:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "15320:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15305:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15305:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15299:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "15299:25:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "15287:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15353:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15362:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15365:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "15355:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15355:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15355:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "15339:8:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "15349:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "15336:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "15336:16:67" + }, + "nodeType": "YulIf", + "src": "15333:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15389:5:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "15396:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15385:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15385:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15435:9:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "15446:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15431:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15431:24:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "15457:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "15401:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "15401:60:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15378:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15378:84:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15378:84:67" + } + ] + }, + "name": "abi_decode_t_struct$_Order_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "14008:9:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "14019:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "14027:5:67", + "type": "" + } + ], + "src": "13961:1507:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15548:687:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "15592:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15601:5:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15608:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "15594:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15594:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15594:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "15569:3:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15574:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "15565:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15565:19:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15586:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "15561:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15561:30:67" + }, + "nodeType": "YulIf", + "src": "15558:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15625:23:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15645:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "15639:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "15639:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "15629:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15657:35:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "15679:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15687:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15675:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15675:17:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "15661:10:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "15701:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15711:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "15705:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "15788:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "15790:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "15790:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15790:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "15747:10:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "15759:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "15744:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "15744:18:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "15767:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "15779:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "15764:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "15764:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "15741:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "15741:46:67" + }, + "nodeType": "YulIf", + "src": "15738:2:67" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15817:2:67", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "15821:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15810:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15810:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15810:22:67" + }, + { + "nodeType": "YulAssignment", + "src": "15841:15:67", + "value": { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "15850:6:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "15841:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "15872:6:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15907:9:67" + } + ], + "functionName": { + "name": "abi_decode_t_enum$_Markets", + "nodeType": "YulIdentifier", + "src": "15880:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "15880:37:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15865:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15865:53:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15865:53:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "15938:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15946:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15934:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15934:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "15968:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "15979:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "15964:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "15964:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "15951:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "15951:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15927:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15927:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15927:57:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16004:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16012:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16000:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16000:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16034:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16045:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16030:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16030:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "16017:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "16017:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "15993:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "15993:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "15993:57:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "16059:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16090:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16101:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16086:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16086:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "16073:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "16073:32:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "16063:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16132:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16141:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16144:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "16134:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16134:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16134:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "16120:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "16128:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "16117:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "16117:14:67" + }, + "nodeType": "YulIf", + "src": "16114:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16168:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16176:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16164:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16164:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16204:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "16215:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16200:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16200:22:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "16224:3:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "16181:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "16181:47:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16157:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16157:72:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16157:72:67" + } + ] + }, + "name": "abi_decode_t_struct$_PurchaseDetails", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "15519:9:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "15530:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "15538:5:67", + "type": "" + } + ], + "src": "15473:762:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16323:780:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "16367:24:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "16376:5:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "16383:5:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "16369:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16369:20:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16369:20:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "16344:3:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16349:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "16340:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16340:19:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16361:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "16336:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16336:30:67" + }, + "nodeType": "YulIf", + "src": "16333:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "16400:23:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16420:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16414:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "16414:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "16404:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "16432:35:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16454:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16462:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16450:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16450:17:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "16436:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "16542:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "16544:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "16544:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16544:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "16485:10:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16497:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "16482:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "16482:34:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "16521:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16533:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "16518:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "16518:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "16479:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "16479:62:67" + }, + "nodeType": "YulIf", + "src": "16476:2:67" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16571:2:67", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "16575:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16564:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16564:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16564:22:67" + }, + { + "nodeType": "YulAssignment", + "src": "16595:15:67", + "value": { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16604:6:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "16595:5:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16626:6:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16640:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16634:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "16634:16:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16619:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16619:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16619:32:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16671:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16679:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16667:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16667:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16694:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16705:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16690:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16690:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16684:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "16684:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16660:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16660:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16660:50:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16730:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16738:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16726:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16726:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16753:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16764:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16749:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16749:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16743:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "16743:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16719:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16719:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16719:50:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16789:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16797:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16785:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16785:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16812:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16823:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16808:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16808:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16802:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "16802:25:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16778:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16778:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16778:50:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "16837:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16862:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16873:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16858:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16858:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16852:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "16852:26:67" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "16841:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "16914:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "16887:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "16887:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16887:35:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "16942:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "16950:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16938:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16938:16:67" + }, + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "16956:7:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "16931:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "16931:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "16931:33:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "16973:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "16998:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17009:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "16994:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "16994:19:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "16988:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "16988:26:67" + }, + "variables": [ + { + "name": "value_2", + "nodeType": "YulTypedName", + "src": "16977:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_2", + "nodeType": "YulIdentifier", + "src": "17047:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_bool", + "nodeType": "YulIdentifier", + "src": "17023:23:67" + }, + "nodeType": "YulFunctionCall", + "src": "17023:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17023:32:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "17075:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17083:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17071:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17071:16:67" + }, + { + "name": "value_2", + "nodeType": "YulIdentifier", + "src": "17089:7:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "17064:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "17064:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17064:33:67" + } + ] + }, + "name": "abi_decode_t_struct$_SettleShared_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "16294:9:67", + "type": "" + }, + { + "name": "end", + "nodeType": "YulTypedName", + "src": "16305:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "16313:5:67", + "type": "" + } + ], + "src": "16240:863:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "17168:102:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "17178:22:67", + "value": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "17193:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "17187:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "17187:13:67" + }, + "variableNames": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "17178:5:67" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "17248:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17257:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17260:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "17250:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "17250:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17250:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "17222:5:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "17233:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17240:4:67", + "type": "", + "value": "0xff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "17229:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17229:16:67" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "17219:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "17219:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "17212:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "17212:35:67" + }, + "nodeType": "YulIf", + "src": "17209:2:67" + } + ] + }, + "name": "abi_decode_t_uint8_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "17147:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "17158:5:67", + "type": "" + } + ], + "src": "17108:162:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "17345:189:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "17391:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "17400:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "17408:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "17393:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "17393:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17393:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "17366:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17375:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "17362:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17362:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17387:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "17358:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17358:32:67" + }, + "nodeType": "YulIf", + "src": "17355:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "17426:36:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17452:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "17439:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "17439:23:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "17430:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "17498:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "17471:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "17471:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17471:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "17513:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "17523:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "17513:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "17311:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "17322:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "17334:6:67", + "type": "" + } + ], + "src": "17275:259:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "17736:932:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "17783:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "17792:6:67" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "17800:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "17785:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "17785:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17785:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "17757:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17766:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "17753:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17753:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17778:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "17749:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17749:33:67" + }, + "nodeType": "YulIf", + "src": "17746:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "17818:36:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17844:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "17831:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "17831:23:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "17822:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "17890:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "17863:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "17863:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17863:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "17905:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "17915:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "17905:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "17929:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "17961:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "17972:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "17957:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "17957:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "17944:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "17944:32:67" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "17933:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "18012:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "17985:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "17985:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "17985:35:67" + }, + { + "nodeType": "YulAssignment", + "src": "18029:17:67", + "value": { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "18039:7:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "18029:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18055:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18086:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18097:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18082:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18082:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "18069:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "18069:32:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "18059:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18110:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18120:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "18114:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18165:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18174:6:67" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18182:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "18167:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "18167:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "18167:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "18153:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "18161:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "18150:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "18150:14:67" + }, + "nodeType": "YulIf", + "src": "18147:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "18200:77:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18249:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "18260:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18245:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18245:22:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "18269:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_uint256_$dyn", + "nodeType": "YulIdentifier", + "src": "18210:34:67" + }, + "nodeType": "YulFunctionCall", + "src": "18210:67:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "18200:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18286:48:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18319:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18330:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18315:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18315:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "18302:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "18302:32:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "18290:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18363:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18372:6:67" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18380:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "18365:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "18365:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "18365:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "18349:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "18359:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "18346:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "18346:16:67" + }, + "nodeType": "YulIf", + "src": "18343:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "18398:79:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18447:9:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "18458:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18443:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18443:24:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "18469:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_uint256_$dyn", + "nodeType": "YulIdentifier", + "src": "18408:34:67" + }, + "nodeType": "YulFunctionCall", + "src": "18408:69:67" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "18398:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18486:49:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18519:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18530:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18515:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18515:19:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "18502:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "18502:33:67" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "18490:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18564:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18573:6:67" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18581:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "18566:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "18566:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "18566:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "18550:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "18560:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "18547:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "18547:16:67" + }, + "nodeType": "YulIf", + "src": "18544:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "18599:63:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18632:9:67" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "18643:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "18628:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18628:24:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "18654:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "18609:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "18609:53:67" + }, + "variableNames": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "18599:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_addresst_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "17670:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "17681:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "17693:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "17701:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "17709:6:67", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "17717:6:67", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "17725:6:67", + "type": "" + } + ], + "src": "17539:1129:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "18803:561:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "18850:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "18859:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "18867:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "18852:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "18852:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "18852:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "18824:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18833:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "18820:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18820:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "18845:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "18816:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "18816:33:67" + }, + "nodeType": "YulIf", + "src": "18813:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18885:36:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "18911:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "18898:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "18898:23:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "18889:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "18957:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "18930:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "18930:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "18930:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "18972:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "18982:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "18972:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "18996:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19028:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19039:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19024:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19024:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19011:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19011:32:67" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "19000:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19079:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "19052:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "19052:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "19052:35:67" + }, + { + "nodeType": "YulAssignment", + "src": "19096:17:67", + "value": { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19106:7:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "19096:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "19122:42:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19149:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19160:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19145:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19145:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19132:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19132:32:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "19122:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19173:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19204:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19215:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19200:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19200:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19187:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19187:32:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "19177:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "19262:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "19271:6:67" + }, + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "19279:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "19264:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "19264:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "19264:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "19234:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19242:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "19231:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "19231:30:67" + }, + "nodeType": "YulIf", + "src": "19228:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "19297:61:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19330:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "19341:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19326:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19326:22:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "19350:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "19307:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "19307:51:67" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "19297:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "18745:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "18756:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "18768:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "18776:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "18784:6:67", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "18792:6:67", + "type": "" + } + ], + "src": "18673:691:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "19516:613:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "19563:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "19572:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "19580:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "19565:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "19565:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "19565:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "19537:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19546:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "19533:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19533:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19558:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "19529:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19529:33:67" + }, + "nodeType": "YulIf", + "src": "19526:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19598:36:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19624:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19611:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19611:23:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "19602:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19670:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "19643:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "19643:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "19643:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "19685:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "19695:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "19685:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19709:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19741:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19752:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19737:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19737:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19724:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19724:32:67" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "19713:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19792:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "19765:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "19765:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "19765:35:67" + }, + { + "nodeType": "YulAssignment", + "src": "19809:17:67", + "value": { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "19819:7:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "19809:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "19835:42:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19862:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19873:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19858:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19858:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19845:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19845:32:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "19835:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "19886:42:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19913:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19924:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19909:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19909:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19896:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19896:32:67" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "19886:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "19937:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "19968:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "19979:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "19964:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "19964:19:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "19951:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "19951:33:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "19941:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "20027:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "20036:6:67" + }, + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "20044:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "20029:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "20029:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "20029:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "19999:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20007:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "19996:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "19996:30:67" + }, + "nodeType": "YulIf", + "src": "19993:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "20062:61:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20095:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "20106:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20091:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20091:22:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "20115:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes", + "nodeType": "YulIdentifier", + "src": "20072:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "20072:51:67" + }, + "variableNames": [ + { + "name": "value4", + "nodeType": "YulIdentifier", + "src": "20062:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_bytes_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "19450:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "19461:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "19473:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "19481:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "19489:6:67", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "19497:6:67", + "type": "" + }, + { + "name": "value4", + "nodeType": "YulTypedName", + "src": "19505:6:67", + "type": "" + } + ], + "src": "19369:760:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "20304:1005:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "20351:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20360:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20368:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "20353:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "20353:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "20353:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "20325:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20334:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "20321:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20321:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20346:3:67", + "type": "", + "value": "480" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "20317:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20317:33:67" + }, + "nodeType": "YulIf", + "src": "20314:2:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "20432:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20441:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20449:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "20434:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "20434:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "20434:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20404:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20415:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20400:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20400:20:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "20422:7:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "20396:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20396:34:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "20389:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "20389:42:67" + }, + "nodeType": "YulIf", + "src": "20386:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20467:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20477:3:67", + "type": "", + "value": "384" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "20471:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20489:29:67", + "value": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "20515:2:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "20500:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "20500:18:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "20493:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20527:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "20540:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "20531:5:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20552:20:67", + "value": { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20563:9:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "20556:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20581:28:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "20595:9:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "20606:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20591:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20591:18:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "20585:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "20637:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20646:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20654:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "20639:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "20639:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "20639:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "20624:2:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "20628:7:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "20621:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "20621:15:67" + }, + "nodeType": "YulIf", + "src": "20618:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20672:15:67", + "value": { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "20681:6:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "20676:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "20743:222:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "20757:30:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "20783:3:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "20770:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "20770:17:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "20761:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "20827:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "20800:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "20800:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "20800:33:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "20853:3:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "20858:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "20846:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "20846:18:67" + }, + "nodeType": "YulExpressionStatement", + "src": "20846:18:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "20877:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20887:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "20881:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "20904:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "20915:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "20920:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20911:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20911:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "20904:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "20936:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "20947:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "20952:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20943:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20943:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "20936:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "20707:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20710:4:67", + "type": "", + "value": "0x0c" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "20704:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "20704:11:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "20716:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "20718:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "20727:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "20730:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "20723:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "20723:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "20718:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "20700:3:67", + "statements": [] + }, + "src": "20696:269:67" + }, + { + "nodeType": "YulAssignment", + "src": "20974:15:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "20984:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "20974:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "20998:34:67", + "value": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "21029:2:67" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "21008:20:67" + }, + "nodeType": "YulFunctionCall", + "src": "21008:24:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "20998:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21041:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21072:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21083:3:67", + "type": "", + "value": "416" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21068:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21068:19:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "21055:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "21055:33:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "21045:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "21131:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "21140:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "21148:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "21133:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21133:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "21133:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "21103:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21111:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "21100:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "21100:30:67" + }, + "nodeType": "YulIf", + "src": "21097:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "21166:77:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21215:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "21226:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21211:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21211:22:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "21235:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "21176:34:67" + }, + "nodeType": "YulFunctionCall", + "src": "21176:67:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "21166:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "21252:51:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21287:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21298:3:67", + "type": "", + "value": "448" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21283:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21283:19:67" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "21262:20:67" + }, + "nodeType": "YulFunctionCall", + "src": "21262:41:67" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "21252:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_array$_t_address_$12_memory_ptrt_addresst_array$_t_address_$dyn_memory_ptrt_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "20246:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "20257:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "20269:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "20277:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "20285:6:67", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "20293:6:67", + "type": "" + } + ], + "src": "20134:1175:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "21419:561:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "21465:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21474:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21482:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "21467:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21467:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "21467:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "21440:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21449:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "21436:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21436:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21461:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "21432:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21432:32:67" + }, + "nodeType": "YulIf", + "src": "21429:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21500:37:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21527:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "21514:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "21514:23:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "21504:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21546:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21556:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "21550:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "21601:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21610:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21618:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "21603:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21603:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "21603:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "21589:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "21597:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "21586:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "21586:14:67" + }, + "nodeType": "YulIf", + "src": "21583:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21636:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "21650:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "21661:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21646:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21646:22:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "21640:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "21716:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21725:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21733:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "21718:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21718:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "21718:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "21695:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21699:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21691:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21691:13:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "21706:7:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "21687:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21687:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "21680:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21680:35:67" + }, + "nodeType": "YulIf", + "src": "21677:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "21751:30:67", + "value": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "21778:2:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "21765:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "21765:16:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "21755:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "21808:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21817:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21825:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "21810:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21810:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "21810:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "21796:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "21804:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "21793:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "21793:14:67" + }, + "nodeType": "YulIf", + "src": "21790:2:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "21893:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21902:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21910:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "21895:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "21895:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "21895:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "21857:2:67" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "21865:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21873:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "21861:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21861:15:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21853:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21853:24:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21879:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21849:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21849:33:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "21884:7:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "21846:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "21846:46:67" + }, + "nodeType": "YulIf", + "src": "21843:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "21928:21:67", + "value": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "21942:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "21946:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "21938:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "21938:11:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "21928:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "21958:16:67", + "value": { + "name": "length", + "nodeType": "YulIdentifier", + "src": "21968:6:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "21958:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "21377:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "21388:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "21400:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "21408:6:67", + "type": "" + } + ], + "src": "21314:666:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22117:1394:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "22127:12:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22137:2:67", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "22131:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22184:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22193:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22201:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "22186:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22186:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "22186:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "22159:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22168:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "22155:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22155:23:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "22180:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "22151:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22151:32:67" + }, + "nodeType": "YulIf", + "src": "22148:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22219:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22239:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "22233:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "22233:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "22223:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22258:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22268:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "22262:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22313:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22322:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22330:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "22315:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22315:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "22315:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "22301:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "22309:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "22298:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "22298:14:67" + }, + "nodeType": "YulIf", + "src": "22295:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22348:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "22362:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "22373:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22358:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22358:22:67" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "22352:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22428:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22437:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22445:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "22430:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22430:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "22430:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "22407:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22411:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22403:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22403:13:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "22418:7:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "22399:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22399:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "22392:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22392:35:67" + }, + "nodeType": "YulIf", + "src": "22389:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22463:19:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "22479:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "22473:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "22473:9:67" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "22467:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22491:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "22563:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "22517:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "22517:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "22502:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "22502:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "22495:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22576:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "22589:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "22580:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "22608:3:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "22613:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "22601:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22601:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "22601:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "22625:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "22636:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "22641:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22632:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22632:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "22625:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22653:22:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "22668:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "22672:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22664:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22664:11:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "22657:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22684:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22694:4:67", + "type": "", + "value": "0x60" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "22688:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22753:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22762:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22770:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "22755:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22755:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "22755:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "22721:2:67" + }, + { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "22729:2:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "22733:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "22725:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22725:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22717:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22717:20:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "22739:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22713:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22713:29:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "22744:7:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "22710:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "22710:42:67" + }, + "nodeType": "YulIf", + "src": "22707:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22788:15:67", + "value": { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22797:6:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "22792:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "22857:624:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "22901:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22910:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "22918:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "22903:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "22903:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "22903:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "22882:7:67" + }, + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "22891:3:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "22878:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22878:17:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "22897:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "22874:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22874:26:67" + }, + "nodeType": "YulIf", + "src": "22871:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22940:12:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22950:2:67", + "type": "", + "value": "64" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "22944:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "22965:23:67", + "value": { + "arguments": [ + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "22985:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "22979:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "22979:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "22969:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23001:33:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "23023:6:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "23031:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23019:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23019:15:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "23005:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "23097:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "23099:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "23099:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23099:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "23056:10:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "23068:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "23053:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "23053:18:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "23076:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "23088:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "23073:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "23073:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "23050:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "23050:46:67" + }, + "nodeType": "YulIf", + "src": "23047:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "23130:2:67" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "23134:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "23123:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23123:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23123:22:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23158:23:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "23177:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23171:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "23171:10:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "23162:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "23221:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "23194:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "23194:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23194:33:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "23247:6:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "23255:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "23240:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23240:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23240:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "23285:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "23293:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23281:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23281:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "23308:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "23313:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23304:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23304:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23298:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "23298:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "23274:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23274:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23274:44:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "23342:6:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "23350:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23338:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23338:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "23365:3:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "23370:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23361:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23361:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23355:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "23355:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "23331:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23331:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23331:44:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "23395:3:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "23400:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "23388:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23388:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23388:19:67" + }, + { + "nodeType": "YulAssignment", + "src": "23420:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "23431:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "23436:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23427:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23427:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "23420:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "23452:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "23463:3:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "23468:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23459:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23459:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "23452:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "22823:1:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "22826:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "22820:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "22820:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "22830:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "22832:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "22841:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "22844:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "22837:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "22837:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "22832:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "22816:3:67", + "statements": [] + }, + "src": "22812:669:67" + }, + { + "nodeType": "YulAssignment", + "src": "23490:15:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "23500:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23490:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_array$_t_struct$_Pair1155_$4754_memory_ptr_$dyn_memory_ptr_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "22083:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "22094:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "22106:6:67", + "type": "" + } + ], + "src": "21985:1526:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "23647:1312:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "23657:12:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23667:2:67", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "23661:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "23714:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23723:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23731:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "23716:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23716:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23716:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "23689:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "23698:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "23685:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23685:23:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "23710:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "23681:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23681:32:67" + }, + "nodeType": "YulIf", + "src": "23678:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23749:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "23769:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "23763:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "23763:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "23753:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23788:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23798:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "23792:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "23843:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23852:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23860:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "23845:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23845:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23845:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "23831:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "23839:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "23828:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "23828:14:67" + }, + "nodeType": "YulIf", + "src": "23825:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23878:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "23892:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "23903:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23888:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23888:22:67" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "23882:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "23958:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23967:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "23975:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "23960:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23960:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "23960:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "23937:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "23941:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "23933:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23933:13:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "23948:7:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "23929:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "23929:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "23922:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "23922:35:67" + }, + "nodeType": "YulIf", + "src": "23919:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "23993:19:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "24009:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "24003:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "24003:9:67" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "23997:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24021:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "24093:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "24047:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "24047:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "24032:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "24032:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "24025:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24106:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "24119:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "24110:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "24138:3:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "24143:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "24131:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24131:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24131:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "24155:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "24166:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "24171:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24162:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24162:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "24155:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24183:22:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "24198:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "24202:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24194:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24194:11:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "24187:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24214:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "24224:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "24218:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "24283:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24292:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24300:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "24285:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24285:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24285:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "24251:2:67" + }, + { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "24259:2:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "24263:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "24255:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24255:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24247:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24247:20:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "24269:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24243:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24243:29:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "24274:7:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "24240:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "24240:42:67" + }, + "nodeType": "YulIf", + "src": "24237:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24318:15:67", + "value": { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24327:6:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "24322:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "24387:542:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "24431:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24440:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24448:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "24433:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24433:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24433:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "24412:7:67" + }, + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "24421:3:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "24408:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24408:17:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "24427:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "24404:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24404:26:67" + }, + "nodeType": "YulIf", + "src": "24401:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24470:23:67", + "value": { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "24490:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "24484:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "24484:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "24474:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24506:33:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "24528:6:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "24536:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24524:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24524:15:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "24510:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "24602:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "24604:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "24604:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24604:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "24561:10:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "24573:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "24558:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "24558:18:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "24581:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "24593:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "24578:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "24578:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "24555:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "24555:46:67" + }, + "nodeType": "YulIf", + "src": "24552:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "24635:2:67" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "24639:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "24628:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24628:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24628:22:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "24663:23:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "24682:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "24676:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "24676:10:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "24667:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "24726:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "24699:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "24699:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24699:33:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "24752:6:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "24760:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "24745:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24745:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24745:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "24790:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "24798:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24786:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24786:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "24813:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "24818:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24809:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24809:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "24803:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "24803:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "24779:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24779:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24779:44:67" + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "24843:3:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "24848:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "24836:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "24836:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "24836:19:67" + }, + { + "nodeType": "YulAssignment", + "src": "24868:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "24879:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "24884:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24875:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24875:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "24868:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "24900:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "24911:3:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "24916:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24907:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24907:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "24900:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "24353:1:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "24356:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "24350:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "24350:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "24360:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "24362:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "24371:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "24374:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "24367:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "24367:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "24362:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "24346:3:67", + "statements": [] + }, + "src": "24342:587:67" + }, + { + "nodeType": "YulAssignment", + "src": "24938:15:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "24948:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "24938:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_array$_t_struct$_Pair721_$4747_memory_ptr_$dyn_memory_ptr_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "23613:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "23624:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "23636:6:67", + "type": "" + } + ], + "src": "23516:1443:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "25140:1019:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "25187:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25196:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25204:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "25189:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "25189:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "25189:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "25161:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "25170:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "25157:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25157:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25182:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "25153:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25153:33:67" + }, + "nodeType": "YulIf", + "src": "25150:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25222:37:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "25249:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "25236:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "25236:23:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "25226:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "25302:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25311:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25319:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "25304:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "25304:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "25304:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "25274:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25282:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "25271:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "25271:30:67" + }, + "nodeType": "YulIf", + "src": "25268:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25337:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "25351:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "25362:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25347:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25347:22:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "25341:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "25417:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25426:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25434:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "25419:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "25419:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "25419:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "25396:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25400:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25392:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25392:13:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "25407:7:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "25388:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25388:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "25381:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "25381:35:67" + }, + "nodeType": "YulIf", + "src": "25378:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25452:26:67", + "value": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "25475:2:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "25462:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "25462:16:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "25456:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25487:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25497:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "25491:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25510:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "25582:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "25536:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "25536:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "25521:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "25521:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "25514:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25595:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25608:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "25599:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25627:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "25632:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "25620:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "25620:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "25620:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "25644:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25655:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "25660:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25651:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25651:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25644:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25672:22:67", + "value": { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "25687:2:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "25691:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25683:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25683:11:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "25676:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "25703:15:67", + "value": { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "25712:6:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "25707:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "25772:183:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25793:3:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "25843:2:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "25860:3:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "25847:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "25847:17:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25839:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25839:26:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "25867:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25835:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25835:35:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "25872:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_PurchaseDetails", + "nodeType": "YulIdentifier", + "src": "25798:36:67" + }, + "nodeType": "YulFunctionCall", + "src": "25798:82:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "25786:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "25786:95:67" + }, + "nodeType": "YulExpressionStatement", + "src": "25786:95:67" + }, + { + "nodeType": "YulAssignment", + "src": "25894:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25905:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "25910:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25901:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25901:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "25894:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "25926:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "25937:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "25942:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25933:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25933:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "25926:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "25738:1:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "25741:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "25735:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "25735:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "25745:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "25747:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "25756:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "25759:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "25752:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "25752:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "25747:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "25731:3:67", + "statements": [] + }, + "src": "25727:228:67" + }, + { + "nodeType": "YulAssignment", + "src": "25964:15:67", + "value": { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "25974:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "25964:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "25988:50:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26023:9:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "26034:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26019:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26019:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "25998:20:67" + }, + "nodeType": "YulFunctionCall", + "src": "25998:40:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "25988:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "26047:50:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26082:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26093:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26078:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26078:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_address", + "nodeType": "YulIdentifier", + "src": "26057:20:67" + }, + "nodeType": "YulFunctionCall", + "src": "26057:40:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "26047:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "26106:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26138:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26149:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26134:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26134:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_bool", + "nodeType": "YulIdentifier", + "src": "26116:17:67" + }, + "nodeType": "YulFunctionCall", + "src": "26116:37:67" + }, + "variableNames": [ + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "26106:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_array$_t_struct$_PurchaseDetails_$8724_memory_ptr_$dyn_memory_ptrt_addresst_addresst_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "25082:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "25093:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "25105:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "25113:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "25121:6:67", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "25129:6:67", + "type": "" + } + ], + "src": "24964:1195:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "26242:179:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "26288:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26297:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26305:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "26290:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "26290:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "26290:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "26263:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26272:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "26259:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26259:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26284:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "26255:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26255:32:67" + }, + "nodeType": "YulIf", + "src": "26252:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "26323:29:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26342:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "26336:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "26336:16:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "26327:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "26385:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_bool", + "nodeType": "YulIdentifier", + "src": "26361:23:67" + }, + "nodeType": "YulFunctionCall", + "src": "26361:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "26361:30:67" + }, + { + "nodeType": "YulAssignment", + "src": "26400:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "26410:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26400:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bool_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "26208:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "26219:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "26231:6:67", + "type": "" + } + ], + "src": "26164:257:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "26495:188:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "26541:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26550:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26558:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "26543:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "26543:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "26543:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "26516:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26525:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "26512:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26512:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26537:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "26508:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26508:32:67" + }, + "nodeType": "YulIf", + "src": "26505:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "26576:36:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26602:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "26589:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "26589:23:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "26580:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "26647:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_bytes4", + "nodeType": "YulIdentifier", + "src": "26621:25:67" + }, + "nodeType": "YulFunctionCall", + "src": "26621:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "26621:32:67" + }, + { + "nodeType": "YulAssignment", + "src": "26662:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "26672:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26662:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes4", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "26461:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "26472:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "26484:6:67", + "type": "" + } + ], + "src": "26426:257:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "26787:254:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "26833:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26842:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26850:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "26835:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "26835:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "26835:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "26808:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26817:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "26804:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26804:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26829:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "26800:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26800:32:67" + }, + "nodeType": "YulIf", + "src": "26797:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "26868:47:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26905:9:67" + } + ], + "functionName": { + "name": "abi_decode_t_enum$_Markets", + "nodeType": "YulIdentifier", + "src": "26878:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "26878:37:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "26868:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "26924:45:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "26954:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "26965:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "26950:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "26950:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "26937:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "26937:32:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "26928:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "27005:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "26978:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "26978:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "26978:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "27020:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "27030:5:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "27020:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_enum$_Markets_$8709t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "26745:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "26756:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "26768:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "26776:6:67", + "type": "" + } + ], + "src": "26688:353:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "27159:1452:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "27169:12:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27179:2:67", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "27173:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "27226:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27235:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27243:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "27228:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27228:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27228:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "27201:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "27210:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "27197:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27197:23:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "27222:2:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "27193:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27193:32:67" + }, + "nodeType": "YulIf", + "src": "27190:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27261:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "27281:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27275:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "27275:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "27265:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27300:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27310:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "27304:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "27355:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27364:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27372:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "27357:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27357:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27357:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "27343:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "27351:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "27340:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "27340:14:67" + }, + "nodeType": "YulIf", + "src": "27337:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27390:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "27404:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "27415:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27400:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27400:22:67" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "27394:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "27462:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27471:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27479:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "27464:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27464:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27464:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "27442:7:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "27451:2:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "27438:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27438:16:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27456:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "27434:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27434:27:67" + }, + "nodeType": "YulIf", + "src": "27431:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27497:25:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27517:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27511:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "27511:11:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "27501:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27531:35:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "27553:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27561:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27549:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27549:17:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "27535:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "27625:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "27627:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "27627:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27627:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "27584:10:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "27596:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "27581:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "27581:18:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "27604:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "27616:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "27601:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "27601:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "27578:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "27578:46:67" + }, + "nodeType": "YulIf", + "src": "27575:2:67" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "27654:4:67", + "type": "", + "value": "0x40" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "27660:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "27647:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27647:24:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27647:24:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27680:25:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "27702:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27696:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "27696:9:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "27684:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "27734:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27743:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27751:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "27736:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27736:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27736:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "27720:8:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "27730:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "27717:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "27717:16:67" + }, + "nodeType": "YulIf", + "src": "27714:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "27776:6:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "27818:2:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "27822:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27814:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27814:17:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "27833:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "27784:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "27784:57:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "27769:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27769:73:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27769:73:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27851:34:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "27877:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "27881:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27873:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27873:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "27867:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "27867:18:67" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "27855:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "27914:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27923:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "27931:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "27916:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27916:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "27916:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "27900:8:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "27910:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "27897:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "27897:16:67" + }, + "nodeType": "YulIf", + "src": "27894:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "27949:27:67", + "value": { + "arguments": [ + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "27963:2:67" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "27967:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27959:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27959:17:67" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "27953:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "28024:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28033:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28041:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "28026:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28026:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28026:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "28003:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28007:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "27999:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27999:13:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "28014:7:67" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "27995:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "27995:27:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "27988:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "27988:35:67" + }, + "nodeType": "YulIf", + "src": "27985:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28059:19:67", + "value": { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "28075:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28069:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "28069:9:67" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "28063:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28087:76:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "28159:2:67" + } + ], + "functionName": { + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulIdentifier", + "src": "28113:45:67" + }, + "nodeType": "YulFunctionCall", + "src": "28113:49:67" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "28098:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "28098:65:67" + }, + "variables": [ + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "28091:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28172:16:67", + "value": { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28185:3:67" + }, + "variables": [ + { + "name": "dst_1", + "nodeType": "YulTypedName", + "src": "28176:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28204:3:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "28209:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28197:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28197:15:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28197:15:67" + }, + { + "nodeType": "YulAssignment", + "src": "28221:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28232:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28237:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28228:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28228:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28221:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28249:22:67", + "value": { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "28264:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28268:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28260:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28260:11:67" + }, + "variables": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "28253:3:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "28326:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28335:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28343:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "28328:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28328:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28328:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "28294:2:67" + }, + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "28302:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28306:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "28298:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28298:11:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28290:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28290:20:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28312:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28286:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28286:29:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "28317:7:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "28283:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "28283:42:67" + }, + "nodeType": "YulIf", + "src": "28280:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28361:15:67", + "value": { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28370:6:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "28365:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "28430:111:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28451:3:67" + }, + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "28462:3:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28456:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "28456:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28444:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28444:23:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28444:23:67" + }, + { + "nodeType": "YulAssignment", + "src": "28480:19:67", + "value": { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28491:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28496:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28487:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28487:12:67" + }, + "variableNames": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "28480:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "28512:19:67", + "value": { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "28523:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28528:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28519:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28519:12:67" + }, + "variableNames": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "28512:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "28396:1:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "28399:2:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "28393:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "28393:9:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "28403:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "28405:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "28414:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28417:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28410:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28410:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "28405:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "28389:3:67", + "statements": [] + }, + "src": "28385:156:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "28561:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28569:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "28557:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28557:15:67" + }, + { + "name": "dst_1", + "nodeType": "YulIdentifier", + "src": "28574:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "28550:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28550:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28550:30:67" + }, + { + "nodeType": "YulAssignment", + "src": "28589:16:67", + "value": { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "28599:6:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28589:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_AdditionalData_$8730_memory_ptr_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "27125:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "27136:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "27148:6:67", + "type": "" + } + ], + "src": "27046:1565:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "28776:604:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "28822:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "28831:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "28839:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "28824:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28824:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28824:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "28797:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "28806:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "28793:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28793:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28818:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "28789:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "28789:32:67" + }, + "nodeType": "YulIf", + "src": "28786:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28857:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "28877:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "28871:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "28871:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "28861:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "28896:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "28906:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "28900:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "28951:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "28960:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "28968:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "28953:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "28953:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "28953:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "28939:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "28947:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "28936:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "28936:14:67" + }, + "nodeType": "YulIf", + "src": "28933:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "28986:80:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29038:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "29049:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29034:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29034:22:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "29058:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_Input_fromMemory", + "nodeType": "YulIdentifier", + "src": "28996:37:67" + }, + "nodeType": "YulFunctionCall", + "src": "28996:70:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "28986:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "29075:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29101:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29112:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29097:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29097:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29091:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "29091:25:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "29079:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "29145:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29154:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29162:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "29147:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "29147:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "29147:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "29131:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "29141:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "29128:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "29128:16:67" + }, + "nodeType": "YulIf", + "src": "29125:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "29180:82:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29232:9:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "29243:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29228:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29228:24:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "29254:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_Input_fromMemory", + "nodeType": "YulIdentifier", + "src": "29190:37:67" + }, + "nodeType": "YulFunctionCall", + "src": "29190:72:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "29180:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "29271:38:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29294:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29305:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29290:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29290:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "29284:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "29284:25:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "29275:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "29344:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_bytes4", + "nodeType": "YulIdentifier", + "src": "29318:25:67" + }, + "nodeType": "YulFunctionCall", + "src": "29318:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "29318:32:67" + }, + { + "nodeType": "YulAssignment", + "src": "29359:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "29369:5:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29359:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_Input_$4556_memory_ptrt_struct$_Input_$4556_memory_ptrt_bytes4_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "28726:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "28737:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "28749:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "28757:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "28765:6:67", + "type": "" + } + ], + "src": "28616:764:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "29522:527:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "29568:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29577:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29585:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "29570:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "29570:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "29570:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "29543:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29552:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "29539:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29539:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29564:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "29535:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29535:32:67" + }, + "nodeType": "YulIf", + "src": "29532:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "29603:37:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29630:9:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "29617:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "29617:23:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "29607:6:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "29683:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29692:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "29700:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "29685:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "29685:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "29685:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "29655:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29663:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "29652:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "29652:30:67" + }, + "nodeType": "YulIf", + "src": "29649:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "29718:79:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29769:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "29780:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29765:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29765:22:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "29789:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_PurchaseDetails", + "nodeType": "YulIdentifier", + "src": "29728:36:67" + }, + "nodeType": "YulFunctionCall", + "src": "29728:69:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "29718:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "29806:45:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29836:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29847:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29832:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29832:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "29819:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "29819:32:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "29810:5:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "29887:5:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "29860:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "29860:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "29860:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "29902:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "29912:5:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "29902:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "29926:47:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "29958:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "29969:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "29954:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "29954:18:67" + } + ], + "functionName": { + "name": "calldataload", + "nodeType": "YulIdentifier", + "src": "29941:12:67" + }, + "nodeType": "YulFunctionCall", + "src": "29941:32:67" + }, + "variables": [ + { + "name": "value_1", + "nodeType": "YulTypedName", + "src": "29930:7:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "30009:7:67" + } + ], + "functionName": { + "name": "validator_revert_t_address", + "nodeType": "YulIdentifier", + "src": "29982:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "29982:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "29982:35:67" + }, + { + "nodeType": "YulAssignment", + "src": "30026:17:67", + "value": { + "name": "value_1", + "nodeType": "YulIdentifier", + "src": "30036:7:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "30026:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_PurchaseDetails_$8724_memory_ptrt_addresst_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "29472:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "29483:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "29495:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "29503:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "29511:6:67", + "type": "" + } + ], + "src": "29385:664:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "30161:1076:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "30207:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30216:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30224:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "30209:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30209:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30209:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "30182:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "30191:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "30178:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30178:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30203:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "30174:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30174:32:67" + }, + "nodeType": "YulIf", + "src": "30171:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30242:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "30262:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30256:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "30256:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "30246:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30281:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30291:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "30285:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "30336:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30345:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30353:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "30338:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30338:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30338:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "30324:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "30332:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "30321:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "30321:14:67" + }, + "nodeType": "YulIf", + "src": "30318:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30371:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "30385:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "30396:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30381:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30381:22:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "30375:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "30445:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30454:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30462:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "30447:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30447:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30447:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "30423:7:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "30432:2:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "30419:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30419:16:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30437:6:67", + "type": "", + "value": "0x0160" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "30415:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30415:29:67" + }, + "nodeType": "YulIf", + "src": "30412:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30480:33:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30508:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "allocateMemory", + "nodeType": "YulIdentifier", + "src": "30493:14:67" + }, + "nodeType": "YulFunctionCall", + "src": "30493:20:67" + }, + "variables": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "30484:5:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30522:25:67", + "value": { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "30544:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30538:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "30538:9:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "30526:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "30576:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30585:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30593:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "30578:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30578:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30578:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "30562:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "30572:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "30559:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "30559:16:67" + }, + "nodeType": "YulIf", + "src": "30556:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "30618:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "30681:2:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "30685:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30677:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30677:17:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "30696:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_Order_$dyn_fromMemory", + "nodeType": "YulIdentifier", + "src": "30625:51:67" + }, + "nodeType": "YulFunctionCall", + "src": "30625:79:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "30611:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30611:94:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30611:94:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "30714:34:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "30740:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30744:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30736:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30736:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "30730:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "30730:18:67" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "30718:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "30777:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30786:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "30794:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "30779:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30779:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30779:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "30763:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "30773:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "30760:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "30760:16:67" + }, + "nodeType": "YulIf", + "src": "30757:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "30823:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30830:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30819:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30819:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "30898:2:67" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "30902:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30894:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30894:17:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "30913:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_array$_t_struct$_SettleDetail_$dyn_fromMemory", + "nodeType": "YulIdentifier", + "src": "30835:58:67" + }, + "nodeType": "YulFunctionCall", + "src": "30835:86:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "30812:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30812:110:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30812:110:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "30942:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "30949:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30938:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30938:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "31003:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31007:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "30999:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "30999:11:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "31012:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_SettleShared_fromMemory", + "nodeType": "YulIdentifier", + "src": "30954:44:67" + }, + "nodeType": "YulFunctionCall", + "src": "30954:66:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "30931:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "30931:90:67" + }, + "nodeType": "YulExpressionStatement", + "src": "30931:90:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "31041:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31048:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31037:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31037:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "31065:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31069:3:67", + "type": "", + "value": "256" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31061:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31061:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31055:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "31055:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "31030:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31030:45:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31030:45:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "31095:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31102:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31091:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31091:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "31119:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31123:3:67", + "type": "", + "value": "288" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31115:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31115:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31109:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "31109:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "31084:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31084:45:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31084:45:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "31149:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31156:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31145:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31145:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "31197:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31201:3:67", + "type": "", + "value": "320" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31193:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31193:12:67" + } + ], + "functionName": { + "name": "abi_decode_t_uint8_fromMemory", + "nodeType": "YulIdentifier", + "src": "31163:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "31163:43:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "31138:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31138:69:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31138:69:67" + }, + { + "nodeType": "YulAssignment", + "src": "31216:15:67", + "value": { + "name": "value", + "nodeType": "YulIdentifier", + "src": "31226:5:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "31216:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_RunInput_$4839_memory_ptr_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "30127:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "30138:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "30150:6:67", + "type": "" + } + ], + "src": "30054:1183:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "31412:1272:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "31458:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "31467:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "31475:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "31460:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31460:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31460:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "31433:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "31442:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "31429:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31429:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31454:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "31425:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31425:32:67" + }, + "nodeType": "YulIf", + "src": "31422:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "31493:30:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "31513:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31507:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "31507:16:67" + }, + "variables": [ + { + "name": "offset", + "nodeType": "YulTypedName", + "src": "31497:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "31532:28:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31542:18:67", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "31536:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "31587:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "31596:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "31604:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "31589:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31589:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31589:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "31575:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "31583:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "31572:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "31572:14:67" + }, + "nodeType": "YulIf", + "src": "31569:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "31622:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "31636:9:67" + }, + { + "name": "offset", + "nodeType": "YulIdentifier", + "src": "31647:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31632:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31632:22:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "31626:2:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "31694:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "31703:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "31711:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "31696:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31696:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31696:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "31674:7:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "31683:2:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "31670:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31670:16:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31688:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "31666:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31666:27:67" + }, + "nodeType": "YulIf", + "src": "31663:2:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "31729:23:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31749:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "31743:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "31743:9:67" + }, + "variables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "31733:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "31761:35:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "31783:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31791:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31779:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31779:17:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "31765:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "31855:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "31857:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "31857:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31857:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "31814:10:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "31826:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "31811:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "31811:18:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "31834:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "31846:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "31831:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "31831:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "31808:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "31808:46:67" + }, + "nodeType": "YulIf", + "src": "31805:2:67" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31884:2:67", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "31888:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "31877:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31877:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31877:22:67" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "31915:6:67" + }, + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "31952:2:67" + } + ], + "functionName": { + "name": "abi_decode_t_bool_fromMemory", + "nodeType": "YulIdentifier", + "src": "31923:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "31923:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "31908:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31908:48:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31908:48:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "31976:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "31984:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "31972:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "31972:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "32025:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32029:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32021:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32021:11:67" + } + ], + "functionName": { + "name": "abi_decode_t_address_fromMemory", + "nodeType": "YulIdentifier", + "src": "31989:31:67" + }, + "nodeType": "YulFunctionCall", + "src": "31989:44:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "31965:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "31965:69:67" + }, + "nodeType": "YulExpressionStatement", + "src": "31965:69:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "32054:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32062:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32050:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32050:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "32077:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32081:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32073:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32073:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32067:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "32067:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "32043:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32043:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32043:43:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "32106:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32114:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32102:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32102:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "32129:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32133:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32125:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32125:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32119:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "32119:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "32095:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32095:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32095:43:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "32158:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32166:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32154:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32154:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "32182:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32186:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32178:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32178:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32172:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "32172:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "32147:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32147:45:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32147:45:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "32201:35:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "32227:2:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32231:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32223:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32223:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32217:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "32217:19:67" + }, + "variables": [ + { + "name": "offset_1", + "nodeType": "YulTypedName", + "src": "32205:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "32265:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "32274:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "32282:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "32267:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32267:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32267:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "32251:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "32261:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "32248:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "32248:16:67" + }, + "nodeType": "YulIf", + "src": "32245:2:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "32311:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32319:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32307:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32307:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "32359:2:67" + }, + { + "name": "offset_1", + "nodeType": "YulIdentifier", + "src": "32363:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32355:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32355:17:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "32374:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes_fromMemory", + "nodeType": "YulIdentifier", + "src": "32325:29:67" + }, + "nodeType": "YulFunctionCall", + "src": "32325:57:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "32300:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32300:83:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32300:83:67" + }, + { + "nodeType": "YulAssignment", + "src": "32392:16:67", + "value": { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "32402:6:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "32392:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "32417:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "32443:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32454:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32439:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32439:18:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32433:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "32433:25:67" + }, + "variables": [ + { + "name": "offset_2", + "nodeType": "YulTypedName", + "src": "32421:8:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "32487:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "32496:6:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "32504:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "32489:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32489:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32489:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "32473:8:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "32483:2:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "32470:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "32470:16:67" + }, + "nodeType": "YulIf", + "src": "32467:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "32522:87:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "32579:9:67" + }, + { + "name": "offset_2", + "nodeType": "YulIdentifier", + "src": "32590:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32575:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32575:24:67" + }, + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "32601:7:67" + } + ], + "functionName": { + "name": "abi_decode_t_struct$_MakerOrder_fromMemory", + "nodeType": "YulIdentifier", + "src": "32532:42:67" + }, + "nodeType": "YulFunctionCall", + "src": "32532:77:67" + }, + "variableNames": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "32522:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "32618:60:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "32663:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32674:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "32659:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32659:18:67" + } + ], + "functionName": { + "name": "abi_decode_t_bytes4_fromMemory", + "nodeType": "YulIdentifier", + "src": "32628:30:67" + }, + "nodeType": "YulFunctionCall", + "src": "32628:50:67" + }, + "variableNames": [ + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "32618:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_struct$_TakerOrder_$4903_memory_ptrt_struct$_MakerOrder_$4890_memory_ptrt_bytes4_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "31362:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "31373:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "31385:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "31393:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "31401:6:67", + "type": "" + } + ], + "src": "31242:1442:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "32770:113:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "32816:26:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "32825:6:67" + }, + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "32833:6:67" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "32818:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32818:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32818:22:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nodeType": "YulIdentifier", + "src": "32791:7:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "32800:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "32787:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32787:23:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32812:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nodeType": "YulIdentifier", + "src": "32783:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32783:32:67" + }, + "nodeType": "YulIf", + "src": "32780:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "32851:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "32867:9:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "32861:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "32861:16:67" + }, + "variableNames": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "32851:6:67" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_uint256_fromMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "32736:9:67", + "type": "" + }, + { + "name": "dataEnd", + "nodeType": "YulTypedName", + "src": "32747:7:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "32759:6:67", + "type": "" + } + ], + "src": "32689:194:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "32942:60:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "32959:3:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "32968:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32983:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32988:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "32979:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32979:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "32992:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "32975:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32975:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "32964:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "32964:31:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "32952:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "32952:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "32952:44:67" + } + ] + }, + "name": "abi_encode_t_address_payable", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "32926:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "32933:3:67", + "type": "" + } + ], + "src": "32888:114:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "33078:502:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "33088:26:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "33108:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33102:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "33102:12:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "33092:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33130:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "33135:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "33123:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "33123:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "33123:19:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33151:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33161:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "33155:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "33174:19:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33185:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33190:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33181:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33181:12:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33174:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33202:28:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "33220:5:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33227:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33216:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33216:14:67" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "33206:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33239:12:67", + "value": { + "name": "end", + "nodeType": "YulIdentifier", + "src": "33248:3:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "33243:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "33309:246:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "33323:23:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "33339:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33333:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "33333:13:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "33327:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33366:3:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "33381:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33375:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "33375:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33386:6:67", + "type": "", + "value": "0xffff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "33371:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33371:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "33359:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "33359:35:67" + }, + "nodeType": "YulExpressionStatement", + "src": "33359:35:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33418:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33423:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33414:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33414:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "33442:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33446:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33438:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33438:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33432:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "33432:18:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33460:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33465:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "33456:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33456:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33469:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "33452:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33452:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "33428:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33428:44:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "33407:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "33407:66:67" + }, + "nodeType": "YulExpressionStatement", + "src": "33407:66:67" + }, + { + "nodeType": "YulAssignment", + "src": "33486:21:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33497:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33502:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33493:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33493:14:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33486:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "33520:25:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "33534:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33542:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33530:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33530:15:67" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "33520:6:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "33271:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "33274:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "33268:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "33268:13:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "33282:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "33284:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "33293:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33296:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33289:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33289:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "33284:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "33264:3:67", + "statements": [] + }, + "src": "33260:295:67" + }, + { + "nodeType": "YulAssignment", + "src": "33564:10:67", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33571:3:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "33564:3:67" + } + ] + } + ] + }, + "name": "abi_encode_t_array$_t_struct$_Fee_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "33055:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "33062:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "33070:3:67", + "type": "" + } + ], + "src": "33007:573:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "33678:489:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "33688:26:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "33708:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33702:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "33702:12:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "33692:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33730:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "33735:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "33723:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "33723:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "33723:19:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33751:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33761:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "33755:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "33774:19:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33785:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33790:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33781:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33781:12:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33774:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33802:28:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "33820:5:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "33827:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33816:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33816:14:67" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "33806:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "33839:12:67", + "value": { + "name": "end", + "nodeType": "YulIdentifier", + "src": "33848:3:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "33843:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "33909:233:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "33923:23:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "33939:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33933:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "33933:13:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "33927:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "33966:3:67" + }, + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "33977:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "33971:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "33971:9:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "33959:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "33959:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "33959:22:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34005:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34010:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34001:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34001:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "34029:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34033:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34025:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34025:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34019:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "34019:18:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34047:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34052:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "34043:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34043:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34056:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "34039:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34039:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "34015:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34015:44:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "33994:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "33994:66:67" + }, + "nodeType": "YulExpressionStatement", + "src": "33994:66:67" + }, + { + "nodeType": "YulAssignment", + "src": "34073:21:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34084:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34089:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34080:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34080:14:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34073:3:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "34107:25:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "34121:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34129:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34117:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34117:15:67" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "34107:6:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "33871:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "33874:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "33868:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "33868:13:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "33882:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "33884:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "33893:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "33896:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "33889:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "33889:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "33884:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "33864:3:67", + "statements": [] + }, + "src": "33860:282:67" + }, + { + "nodeType": "YulAssignment", + "src": "34151:10:67", + "value": { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34158:3:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "34151:3:67" + } + ] + } + ] + }, + "name": "abi_encode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "33655:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "33662:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "33670:3:67", + "type": "" + } + ], + "src": "33585:582:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "34249:756:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "34259:26:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "34279:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34273:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "34273:12:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "34263:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34301:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "34306:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "34294:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "34294:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "34294:19:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34322:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34332:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "34326:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34345:31:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34368:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34373:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34364:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34364:12:67" + }, + "variables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "34349:11:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34385:24:67", + "value": { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "34398:11:67" + }, + "variables": [ + { + "name": "pos_1", + "nodeType": "YulTypedName", + "src": "34389:5:67", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "34418:18:67", + "value": { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "34425:11:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34418:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34445:39:67", + "value": { + "arguments": [ + { + "name": "pos_1", + "nodeType": "YulIdentifier", + "src": "34461:5:67" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "34472:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34480:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "34468:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34468:15:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34457:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34457:27:67" + }, + "variables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "34449:4:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34493:28:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "34511:5:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34518:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34507:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34507:14:67" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "34497:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34530:12:67", + "value": { + "name": "end", + "nodeType": "YulIdentifier", + "src": "34539:3:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "34534:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "34600:379:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34621:3:67" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "34630:4:67" + }, + { + "name": "pos_1", + "nodeType": "YulIdentifier", + "src": "34636:5:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "34626:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34626:16:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "34614:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "34614:29:67" + }, + "nodeType": "YulExpressionStatement", + "src": "34614:29:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34656:23:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "34672:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34666:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "34666:13:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "34660:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34692:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34702:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "34696:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "34726:4:67" + }, + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "34738:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34732:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "34732:9:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "34719:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "34719:23:67" + }, + "nodeType": "YulExpressionStatement", + "src": "34719:23:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "34755:38:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "34785:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34789:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34781:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34781:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "34775:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "34775:18:67" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "34759:12:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "34817:4:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34823:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34813:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34813:13:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "34828:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "34806:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "34806:25:67" + }, + "nodeType": "YulExpressionStatement", + "src": "34806:25:67" + }, + { + "nodeType": "YulAssignment", + "src": "34844:55:67", + "value": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "34871:12:67" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "34889:4:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "34895:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34885:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34885:13:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "34852:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "34852:47:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "34844:4:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "34912:25:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "34926:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34934:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34922:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34922:15:67" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "34912:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "34950:19:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34961:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "34966:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34957:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34957:12:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "34950:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "34562:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "34565:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "34559:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "34559:13:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "34573:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "34575:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "34584:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "34587:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "34580:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "34580:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "34575:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "34555:3:67", + "statements": [] + }, + "src": "34551:428:67" + }, + { + "nodeType": "YulAssignment", + "src": "34988:11:67", + "value": { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "34995:4:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "34988:3:67" + } + ] + } + ] + }, + "name": "abi_encode_t_array$_t_struct$_OrderItem_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "34226:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "34233:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "34241:3:67", + "type": "" + } + ], + "src": "34172:833:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "35090:1751:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "35100:26:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "35120:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35114:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35114:12:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "35104:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "35142:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "35147:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "35135:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "35135:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35135:19:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35163:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35173:4:67", + "type": "", + "value": "0x20" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "35167:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35186:31:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "35209:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "35214:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35205:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35205:12:67" + }, + "variables": [ + { + "name": "updated_pos", + "nodeType": "YulTypedName", + "src": "35190:11:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35226:24:67", + "value": { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "35239:11:67" + }, + "variables": [ + { + "name": "pos_1", + "nodeType": "YulTypedName", + "src": "35230:5:67", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "35259:18:67", + "value": { + "name": "updated_pos", + "nodeType": "YulIdentifier", + "src": "35266:11:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "35259:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35286:39:67", + "value": { + "arguments": [ + { + "name": "pos_1", + "nodeType": "YulIdentifier", + "src": "35302:5:67" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "35313:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "35321:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "35309:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35309:15:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35298:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35298:27:67" + }, + "variables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "35290:4:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35334:28:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "35352:5:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "35359:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35348:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35348:14:67" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "35338:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35371:12:67", + "value": { + "name": "end", + "nodeType": "YulIdentifier", + "src": "35380:3:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "35375:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "35441:1374:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "35462:3:67" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35471:4:67" + }, + { + "name": "pos_1", + "nodeType": "YulIdentifier", + "src": "35477:5:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "35467:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35467:16:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "35455:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "35455:29:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35455:29:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35497:23:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "35513:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35507:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35507:13:67" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "35501:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35533:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35543:6:67", + "type": "", + "value": "0x0160" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "35537:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "35590:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35584:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35584:9:67" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35595:4:67" + } + ], + "functionName": { + "name": "abi_encode_t_enum$_Op", + "nodeType": "YulIdentifier", + "src": "35562:21:67" + }, + "nodeType": "YulFunctionCall", + "src": "35562:38:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35562:38:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35624:4:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "35630:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35620:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35620:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "35645:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "35649:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35641:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35641:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35635:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35635:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "35613:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "35613:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35613:41:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35667:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35677:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "35671:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35705:4:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "35711:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35701:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35701:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "35726:2:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "35730:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35722:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35722:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35716:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35716:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "35694:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "35694:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35694:41:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35748:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35758:4:67", + "type": "", + "value": "0x60" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "35752:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35786:4:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "35792:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35782:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35782:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "35807:2:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "35811:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35803:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35803:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35797:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35797:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "35775:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "35775:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35775:41:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35829:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35839:4:67", + "type": "", + "value": "0x80" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "35833:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "35867:4:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "35873:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35863:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35863:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "35888:2:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "35892:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35884:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35884:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35878:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35878:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "35856:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "35856:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35856:41:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35910:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35920:4:67", + "type": "", + "value": "0xa0" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "35914:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "35937:38:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "35967:2:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "35971:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35963:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35963:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "35957:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "35957:18:67" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "35941:12:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "36017:12:67" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36035:4:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "36041:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36031:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36031:13:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "35988:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "35988:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "35988:57:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36058:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36068:4:67", + "type": "", + "value": "0xc0" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "36062:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36085:40:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "36117:2:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "36121:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36113:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36113:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36107:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "36107:18:67" + }, + "variables": [ + { + "name": "memberValue0_1", + "nodeType": "YulTypedName", + "src": "36089:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36149:4:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "36155:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36145:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36145:13:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "36160:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "36138:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36138:25:67" + }, + "nodeType": "YulExpressionStatement", + "src": "36138:25:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36176:63:67", + "value": { + "arguments": [ + { + "name": "memberValue0_1", + "nodeType": "YulIdentifier", + "src": "36209:14:67" + }, + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36229:4:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "36235:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36225:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36225:13:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "36190:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "36190:49:67" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "36180:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36252:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36262:4:67", + "type": "", + "value": "0xe0" + }, + "variables": [ + { + "name": "_9", + "nodeType": "YulTypedName", + "src": "36256:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36290:4:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "36296:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36286:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36286:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "36311:2:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "36315:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36307:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36307:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36301:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "36301:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "36279:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36279:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "36279:41:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36333:17:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36344:6:67", + "type": "", + "value": "0x0100" + }, + "variables": [ + { + "name": "_10", + "nodeType": "YulTypedName", + "src": "36337:3:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36374:4:67" + }, + { + "name": "_10", + "nodeType": "YulIdentifier", + "src": "36380:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36370:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36370:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "36396:2:67" + }, + { + "name": "_10", + "nodeType": "YulIdentifier", + "src": "36400:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36392:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36392:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36386:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "36386:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "36363:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36363:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "36363:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36419:17:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36430:6:67", + "type": "", + "value": "0x0120" + }, + "variables": [ + { + "name": "_11", + "nodeType": "YulTypedName", + "src": "36423:3:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36460:4:67" + }, + { + "name": "_11", + "nodeType": "YulIdentifier", + "src": "36466:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36456:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36456:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "36482:2:67" + }, + { + "name": "_11", + "nodeType": "YulIdentifier", + "src": "36486:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36478:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36478:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36472:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "36472:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "36449:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36449:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "36449:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36505:17:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "36516:6:67", + "type": "", + "value": "0x0140" + }, + "variables": [ + { + "name": "_12", + "nodeType": "YulTypedName", + "src": "36509:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "36535:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "36567:2:67" + }, + { + "name": "_12", + "nodeType": "YulIdentifier", + "src": "36571:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36563:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36563:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "36557:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "36557:19:67" + }, + "variables": [ + { + "name": "memberValue0_2", + "nodeType": "YulTypedName", + "src": "36539:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36600:4:67" + }, + { + "name": "_12", + "nodeType": "YulIdentifier", + "src": "36606:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36596:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36596:14:67" + }, + { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "36616:6:67" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36624:4:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "36612:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36612:17:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "36589:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36589:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "36589:41:67" + }, + { + "nodeType": "YulAssignment", + "src": "36643:92:67", + "value": { + "arguments": [ + { + "name": "memberValue0_2", + "nodeType": "YulIdentifier", + "src": "36712:14:67" + }, + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "36728:6:67" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr", + "nodeType": "YulIdentifier", + "src": "36651:60:67" + }, + "nodeType": "YulFunctionCall", + "src": "36651:84:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36643:4:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "36748:25:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "36762:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "36770:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36758:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36758:15:67" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "36748:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "36786:19:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "36797:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "36802:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "36793:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "36793:12:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "36786:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "35403:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "35406:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "35400:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "35400:13:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "35414:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "35416:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "35425:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "35428:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "35421:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "35421:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "35416:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "35396:3:67", + "statements": [] + }, + "src": "35392:1423:67" + }, + { + "nodeType": "YulAssignment", + "src": "36824:11:67", + "value": { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "36831:4:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "36824:3:67" + } + ] + } + ] + }, + "name": "abi_encode_t_array$_t_struct$_SettleDetail_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "35067:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "35074:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "35082:3:67", + "type": "" + } + ], + "src": "35010:1831:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "36889:50:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "36906:3:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "36925:5:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "36918:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36918:13:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "36911:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36911:21:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "36899:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "36899:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "36899:34:67" + } + ] + }, + "name": "abi_encode_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "36873:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "36880:3:67", + "type": "" + } + ], + "src": "36846:93:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "36995:208:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "37005:26:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37025:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "37019:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "37019:12:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "37009:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37047:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "37052:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "37040:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37040:19:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37040:19:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37094:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37101:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37090:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37090:16:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37112:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37117:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37108:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37108:14:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "37124:6:67" + } + ], + "functionName": { + "name": "copy_memory_to_memory", + "nodeType": "YulIdentifier", + "src": "37068:21:67" + }, + "nodeType": "YulFunctionCall", + "src": "37068:63:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37068:63:67" + }, + { + "nodeType": "YulAssignment", + "src": "37140:57:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37155:3:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "37168:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37176:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37164:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37164:15:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37185:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "37181:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37181:7:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "37160:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37160:29:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37151:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37151:39:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37192:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37147:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37147:50:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "37140:3:67" + } + ] + } + ] + }, + "name": "abi_encode_t_bytes", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "36972:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "36979:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "36987:3:67", + "type": "" + } + ], + "src": "36944:259:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "37255:80:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "37289:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "37291:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "37291:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37291:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37278:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37285:1:67", + "type": "", + "value": "8" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "37275:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "37275:12:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "37268:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37268:20:67" + }, + "nodeType": "YulIf", + "src": "37265:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37318:3:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37323:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "37311:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37311:18:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37311:18:67" + } + ] + }, + "name": "abi_encode_t_enum$_Op", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "37239:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "37246:3:67", + "type": "" + } + ], + "src": "37208:127:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "37389:80:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "37423:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "37425:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "37425:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37425:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37412:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37419:1:67", + "type": "", + "value": "2" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "37409:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "37409:12:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "37402:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37402:20:67" + }, + "nodeType": "YulIf", + "src": "37399:2:67" + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37452:3:67" + }, + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37457:5:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "37445:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37445:18:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37445:18:67" + } + ] + }, + "name": "abi_encode_t_enum$_Side", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "37373:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "37380:3:67", + "type": "" + } + ], + "src": "37340:129:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "37533:2148:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "37543:32:67", + "value": { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "37569:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "37563:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "37563:12:67" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "37547:12:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37591:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37596:4:67", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "37584:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "37584:17:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37584:17:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "37645:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "37639:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "37639:19:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37664:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37669:4:67", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37660:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37660:14:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "37610:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "37610:65:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37610:65:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "37684:52:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "37716:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37730:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37712:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37712:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "37706:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "37706:30:67" + }, + "variables": [ + { + "name": "memberValue0_1", + "nodeType": "YulTypedName", + "src": "37688:14:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "37745:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37755:3:67", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "37749:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_1", + "nodeType": "YulIdentifier", + "src": "37791:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37811:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "37816:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37807:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37807:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_enum$_Side", + "nodeType": "YulIdentifier", + "src": "37767:23:67" + }, + "nodeType": "YulFunctionCall", + "src": "37767:53:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37767:53:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "37829:52:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "37861:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37875:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37857:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37857:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "37851:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "37851:30:67" + }, + "variables": [ + { + "name": "memberValue0_2", + "nodeType": "YulTypedName", + "src": "37833:14:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "37890:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "37900:3:67", + "type": "", + "value": "288" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "37894:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_2", + "nodeType": "YulIdentifier", + "src": "37941:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "37961:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "37966:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "37957:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "37957:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "37912:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "37912:58:67" + }, + "nodeType": "YulExpressionStatement", + "src": "37912:58:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "37979:52:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38011:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38025:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38007:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38007:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38001:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38001:30:67" + }, + "variables": [ + { + "name": "memberValue0_3", + "nodeType": "YulTypedName", + "src": "37983:14:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38040:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38050:3:67", + "type": "", + "value": "320" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "38044:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_3", + "nodeType": "YulIdentifier", + "src": "38091:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38111:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "38116:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38107:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38107:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "38062:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "38062:58:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38062:58:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38129:40:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38149:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38163:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38145:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38145:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38139:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38139:30:67" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "38133:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38178:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38188:3:67", + "type": "", + "value": "352" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "38182:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38211:3:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "38216:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38207:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38207:12:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "38221:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38200:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38200:24:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38200:24:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38233:40:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38253:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38267:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38249:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38249:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38243:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38243:30:67" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "38237:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38282:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38292:3:67", + "type": "", + "value": "384" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "38286:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38315:3:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "38320:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38311:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38311:12:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "38325:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38304:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38304:24:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38304:24:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38337:52:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38369:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38383:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38365:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38365:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38359:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38359:30:67" + }, + "variables": [ + { + "name": "memberValue0_4", + "nodeType": "YulTypedName", + "src": "38341:14:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38398:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38408:6:67", + "type": "", + "value": "0x01a0" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "38402:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_4", + "nodeType": "YulIdentifier", + "src": "38452:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38472:3:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "38477:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38468:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38468:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "38423:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "38423:58:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38423:58:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38501:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38506:3:67", + "type": "", + "value": "448" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38497:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38497:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38522:12:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38536:4:67", + "type": "", + "value": "0xe0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38518:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38518:23:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38512:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38512:30:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38490:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38490:53:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38490:53:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38563:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38568:3:67", + "type": "", + "value": "480" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38559:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38559:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38584:12:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "38598:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38580:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38580:21:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38574:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38574:28:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38552:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38552:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38552:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38623:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38628:3:67", + "type": "", + "value": "512" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38619:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38619:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38644:12:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "38658:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38640:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38640:21:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38634:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38634:28:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38612:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38612:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38612:51:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38672:50:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38704:12:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "38718:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38700:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38700:21:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38694:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38694:28:67" + }, + "variables": [ + { + "name": "memberValue0_5", + "nodeType": "YulTypedName", + "src": "38676:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38742:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38747:3:67", + "type": "", + "value": "544" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38738:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38738:13:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "38753:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38731:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38731:25:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38731:25:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38765:81:67", + "value": { + "arguments": [ + { + "name": "memberValue0_5", + "nodeType": "YulIdentifier", + "src": "38816:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38836:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38841:3:67", + "type": "", + "value": "640" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38832:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38832:13:67" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_Fee_$dyn", + "nodeType": "YulIdentifier", + "src": "38777:38:67" + }, + "nodeType": "YulFunctionCall", + "src": "38777:69:67" + }, + "variables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "38769:4:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38866:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38871:3:67", + "type": "", + "value": "576" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38862:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38862:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38887:12:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "38901:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38883:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38883:21:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38877:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38877:28:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38855:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38855:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38855:51:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "38915:50:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "38947:12:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "38961:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38943:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38943:21:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "38937:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "38937:28:67" + }, + "variables": [ + { + "name": "memberValue0_6", + "nodeType": "YulTypedName", + "src": "38919:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "38985:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "38990:3:67", + "type": "", + "value": "608" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38981:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38981:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "39004:4:67" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39010:3:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "39000:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39000:14:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39020:3:67", + "type": "", + "value": "223" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "39016:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39016:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "38996:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "38996:29:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "38974:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "38974:52:67" + }, + "nodeType": "YulExpressionStatement", + "src": "38974:52:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39035:53:67", + "value": { + "arguments": [ + { + "name": "memberValue0_6", + "nodeType": "YulIdentifier", + "src": "39067:14:67" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "39083:4:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "39048:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "39048:40:67" + }, + "variables": [ + { + "name": "end_1", + "nodeType": "YulTypedName", + "src": "39039:5:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39097:45:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39129:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39136:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39125:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39125:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39119:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39119:23:67" + }, + "variables": [ + { + "name": "memberValue0_7", + "nodeType": "YulTypedName", + "src": "39101:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_7", + "nodeType": "YulIdentifier", + "src": "39170:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39190:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39195:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39186:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39186:14:67" + } + ], + "functionName": { + "name": "abi_encode_t_uint8", + "nodeType": "YulIdentifier", + "src": "39151:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "39151:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39151:50:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39221:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39226:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39217:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39217:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39243:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39250:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39239:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39239:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39233:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39233:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39210:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39210:47:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39210:47:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39277:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39282:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39273:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39273:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39299:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39306:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39295:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39295:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39289:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39289:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39266:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39266:47:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39266:47:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39322:45:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39354:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39361:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39350:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39350:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39344:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39344:23:67" + }, + "variables": [ + { + "name": "memberValue0_8", + "nodeType": "YulTypedName", + "src": "39326:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39387:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39392:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39383:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39383:14:67" + }, + { + "arguments": [ + { + "name": "end_1", + "nodeType": "YulIdentifier", + "src": "39403:5:67" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39410:3:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "39399:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39399:15:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39376:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39376:39:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39376:39:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39424:55:67", + "value": { + "arguments": [ + { + "name": "memberValue0_8", + "nodeType": "YulIdentifier", + "src": "39457:14:67" + }, + { + "name": "end_1", + "nodeType": "YulIdentifier", + "src": "39473:5:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "39438:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "39438:41:67" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "39428:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "39488:45:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39520:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39527:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39516:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39516:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39510:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39510:23:67" + }, + "variables": [ + { + "name": "memberValue0_9", + "nodeType": "YulTypedName", + "src": "39492:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_9", + "nodeType": "YulIdentifier", + "src": "39566:14:67" + }, + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39586:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39591:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39582:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39582:14:67" + } + ], + "functionName": { + "name": "abi_encode_t_enum$_Side", + "nodeType": "YulIdentifier", + "src": "39542:23:67" + }, + "nodeType": "YulFunctionCall", + "src": "39542:55:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39542:55:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39617:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39622:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39613:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39613:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39639:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39646:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39635:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39635:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39629:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39629:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39606:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39606:47:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39606:47:67" + }, + { + "nodeType": "YulAssignment", + "src": "39662:13:67", + "value": { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "39669:6:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "39662:3:67" + } + ] + } + ] + }, + "name": "abi_encode_t_struct$_Input", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "37510:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "37517:3:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "37525:3:67", + "type": "" + } + ], + "src": "37474:2207:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "39745:363:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39762:3:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39773:5:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39767:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39767:12:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39755:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39755:25:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39755:25:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39800:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39805:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39796:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39796:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39822:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39829:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39818:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39818:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39812:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39812:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39789:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39789:47:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39789:47:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39856:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39861:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39852:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39852:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39878:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39885:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39874:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39874:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39868:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39868:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39845:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39845:47:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39845:47:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39912:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39917:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39908:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39908:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39934:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39941:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39930:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39930:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39924:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39924:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39901:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39901:47:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39901:47:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "39968:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "39973:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39964:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39964:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "39994:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40001:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "39990:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39990:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "39984:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "39984:23:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40017:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40022:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "40013:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40013:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40026:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "40009:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40009:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "39980:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "39980:49:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "39957:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "39957:73:67" + }, + "nodeType": "YulExpressionStatement", + "src": "39957:73:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "40050:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40055:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40046:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40046:14:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "40086:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40093:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40082:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40082:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "40076:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "40076:23:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "40069:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40069:31:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "40062:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40062:39:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "40039:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40039:63:67" + }, + "nodeType": "YulExpressionStatement", + "src": "40039:63:67" + } + ] + }, + "name": "abi_encode_t_struct$_SettleShared", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "39729:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "39736:3:67", + "type": "" + } + ], + "src": "39686:422:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "40157:33:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "40166:3:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "40175:5:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40182:4:67", + "type": "", + "value": "0xff" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "40171:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40171:16:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "40159:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40159:29:67" + }, + "nodeType": "YulExpressionStatement", + "src": "40159:29:67" + } + ] + }, + "name": "abi_encode_t_uint8", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "40141:5:67", + "type": "" + }, + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "40148:3:67", + "type": "" + } + ], + "src": "40113:77:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "40332:137:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "40342:27:67", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "40362:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "40356:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "40356:13:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "40346:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "40404:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40412:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40400:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40400:17:67" + }, + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "40419:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "40424:6:67" + } + ], + "functionName": { + "name": "copy_memory_to_memory", + "nodeType": "YulIdentifier", + "src": "40378:21:67" + }, + "nodeType": "YulFunctionCall", + "src": "40378:53:67" + }, + "nodeType": "YulExpressionStatement", + "src": "40378:53:67" + }, + { + "nodeType": "YulAssignment", + "src": "40440:23:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "40451:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "40456:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40447:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40447:16:67" + }, + "variableNames": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "40440:3:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "40308:3:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "40313:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "40324:3:67", + "type": "" + } + ], + "src": "40195:274:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "40575:102:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "40585:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "40597:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40608:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40593:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40593:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "40585:4:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "40627:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "40642:6:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40658:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40663:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "40654:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40654:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40667:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "40650:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40650:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "40638:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40638:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "40620:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40620:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "40620:51:67" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "40544:9:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "40555:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "40566:4:67", + "type": "" + } + ], + "src": "40474:203:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "40791:102:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "40801:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "40813:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40824:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "40809:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40809:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "40801:4:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "40843:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "40858:6:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40874:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40879:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "40870:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40870:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "40883:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "40866:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40866:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "40854:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "40854:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "40836:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "40836:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "40836:51:67" + } + ] + }, + "name": "abi_encode_tuple_t_address_payable__to_t_address__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "40760:9:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "40771:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "40782:4:67", + "type": "" + } + ], + "src": "40682:211:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "41071:218:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "41081:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41093:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41104:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41089:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41089:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "41081:4:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "41116:29:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41134:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41139:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "41130:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41130:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41143:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "41126:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41126:19:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "41120:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41161:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "41176:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "41184:2:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "41172:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41172:15:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41154:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41154:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41154:34:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41208:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41219:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41204:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41204:18:67" + }, + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "41228:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "41236:2:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "41224:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41224:15:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41197:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41197:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41197:43:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41260:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41271:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41256:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41256:18:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "41276:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41249:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41249:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41249:34:67" + } + ] + }, + "name": "abi_encode_tuple_t_address_payable_t_address_payable_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "41024:9:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "41035:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "41043:6:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "41051:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "41062:4:67", + "type": "" + } + ], + "src": "40898:391:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "41595:345:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "41605:29:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41623:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41628:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "41619:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41619:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41632:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "41615:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41615:19:67" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "41609:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41650:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "41665:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "41673:2:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "41661:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41661:15:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41643:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41643:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41643:34:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41697:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41708:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41693:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41693:18:67" + }, + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "41717:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "41725:2:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "41713:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41713:15:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41686:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41686:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41686:43:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41749:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41760:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41745:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41745:18:67" + }, + { + "name": "value2", + "nodeType": "YulIdentifier", + "src": "41765:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41738:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41738:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41738:34:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41792:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41803:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41788:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41788:18:67" + }, + { + "name": "value3", + "nodeType": "YulIdentifier", + "src": "41808:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41781:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41781:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41781:34:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41835:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41846:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41831:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41831:19:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41852:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41824:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41824:32:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41824:32:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41876:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41887:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41872:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41872:19:67" + }, + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "41893:4:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "41865:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "41865:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "41865:33:67" + }, + { + "nodeType": "YulAssignment", + "src": "41907:27:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "41919:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "41930:3:67", + "type": "", + "value": "192" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "41915:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "41915:19:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "41907:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_address_payable_t_address_payable_t_uint256_t_uint256_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_address_t_address_t_uint256_t_uint256_t_bytes_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "41540:9:67", + "type": "" + }, + { + "name": "value3", + "nodeType": "YulTypedName", + "src": "41551:6:67", + "type": "" + }, + { + "name": "value2", + "nodeType": "YulTypedName", + "src": "41559:6:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "41567:6:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "41575:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "41586:4:67", + "type": "" + } + ], + "src": "41294:646:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "42082:145:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "42092:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42104:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42115:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "42100:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42100:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "42092:4:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42134:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "42149:6:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42165:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42170:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "42161:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42161:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42174:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "42157:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42157:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "42145:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42145:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "42127:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42127:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "42127:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42198:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42209:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "42194:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42194:18:67" + }, + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "42214:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "42187:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42187:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "42187:34:67" + } + ] + }, + "name": "abi_encode_tuple_t_address_payable_t_uint256__to_t_address_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "42043:9:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "42054:6:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "42062:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "42073:4:67", + "type": "" + } + ], + "src": "41945:282:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "42361:145:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "42371:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42383:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42394:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "42379:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42379:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "42371:4:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42413:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "42428:6:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42444:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42449:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "42440:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42440:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42453:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "42436:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42436:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "42424:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42424:32:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "42406:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42406:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "42406:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42477:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42488:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "42473:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42473:18:67" + }, + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "42493:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "42466:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42466:34:67" + }, + "nodeType": "YulExpressionStatement", + "src": "42466:34:67" + } + ] + }, + "name": "abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "42322:9:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "42333:6:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "42341:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "42352:4:67", + "type": "" + } + ], + "src": "42232:274:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "42606:92:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "42616:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42628:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42639:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "42624:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42624:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "42616:4:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42658:9:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "42683:6:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "42676:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42676:14:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "42669:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42669:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "42651:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42651:41:67" + }, + "nodeType": "YulExpressionStatement", + "src": "42651:41:67" + } + ] + }, + "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "42575:9:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "42586:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "42597:4:67", + "type": "" + } + ], + "src": "42511:187:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "42802:103:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "42812:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42824:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42835:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "42820:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42820:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "42812:4:67" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "42854:9:67" + }, + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "42869:6:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42881:3:67", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "42886:10:67", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "42877:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42877:20:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "42865:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "42865:33:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "42847:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "42847:52:67" + }, + "nodeType": "YulExpressionStatement", + "src": "42847:52:67" + } + ] + }, + "name": "abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "42771:9:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "42782:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "42793:4:67", + "type": "" + } + ], + "src": "42703:202:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "43084:182:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43101:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43112:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43094:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43094:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43094:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43135:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43146:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43131:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43131:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43151:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43124:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43124:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43124:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43174:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43185:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43170:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43170:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "43190:34:67", + "type": "", + "value": "Purchase SeaPort_1_4 failed WETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43163:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43163:62:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43163:62:67" + }, + { + "nodeType": "YulAssignment", + "src": "43234:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43246:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43257:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43242:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43242:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "43234:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_05a847584de3c2ae6c800d1f7b0a5d67e8bceaac16366dec690fd8433d46a23a__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "43061:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "43075:4:67", + "type": "" + } + ], + "src": "42910:356:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "43445:182:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43462:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43473:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43455:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43455:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43455:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43496:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43507:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43492:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43492:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43512:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43485:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43485:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43485:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43535:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43546:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43531:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43531:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "43551:34:67", + "type": "", + "value": "Purchase SeaPort_1_5 failed WETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43524:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43524:62:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43524:62:67" + }, + { + "nodeType": "YulAssignment", + "src": "43595:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43607:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43618:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43603:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43603:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "43595:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_1461016c88004ca93c55e893467e5e7d0c1ff55121e923be5ca0e173134693e9__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "43422:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "43436:4:67", + "type": "" + } + ], + "src": "43271:356:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "43806:180:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43823:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43834:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43816:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43816:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43816:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43857:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43868:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43853:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43853:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43873:2:67", + "type": "", + "value": "30" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43846:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43846:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43846:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43896:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43907:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43892:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43892:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "43912:32:67", + "type": "", + "value": "Purchase wyvernExchange failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "43885:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "43885:60:67" + }, + "nodeType": "YulExpressionStatement", + "src": "43885:60:67" + }, + { + "nodeType": "YulAssignment", + "src": "43954:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "43966:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "43977:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "43962:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "43962:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "43954:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_1cdf96c41f1501fb82e87942f0faf4d72a6efd57209b4dccba0c17cf2c4017c6__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "43783:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "43797:4:67", + "type": "" + } + ], + "src": "43632:354:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "44165:177:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44182:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44193:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44175:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44175:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44175:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44216:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44227:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44212:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44212:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44232:2:67", + "type": "", + "value": "27" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44205:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44205:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44205:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44255:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44266:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44251:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44251:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "44271:29:67", + "type": "", + "value": "Purchase SeaPort_1_4 failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44244:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44244:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44244:57:67" + }, + { + "nodeType": "YulAssignment", + "src": "44310:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44322:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44333:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44318:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44318:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "44310:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_1cf39be99a03bb39414ad01e616c59ec2038a5746618a3f8aee8a485d8d5e50a__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "44142:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "44156:4:67", + "type": "" + } + ], + "src": "43991:351:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "44521:173:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44538:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44549:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44531:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44531:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44531:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44572:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44583:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44568:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44568:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44588:2:67", + "type": "", + "value": "23" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44561:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44561:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44561:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44611:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44622:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44607:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44607:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "44627:25:67", + "type": "", + "value": "Purchase rarible failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44600:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44600:53:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44600:53:67" + }, + { + "nodeType": "YulAssignment", + "src": "44662:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44674:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44685:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44670:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44670:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "44662:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_2b352c406e176536877560097b51d8b7a1d4ebdd84181eeb9cfae44540c1b868__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "44498:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "44512:4:67", + "type": "" + } + ], + "src": "44347:347:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "44873:178:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44890:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44901:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44883:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44883:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44883:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44924:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44935:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44920:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44920:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44940:2:67", + "type": "", + "value": "28" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44913:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44913:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44913:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "44963:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "44974:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "44959:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "44959:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "44979:30:67", + "type": "", + "value": "Purchase rarible failed WETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "44952:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "44952:58:67" + }, + "nodeType": "YulExpressionStatement", + "src": "44952:58:67" + }, + { + "nodeType": "YulAssignment", + "src": "45019:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45031:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45042:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45027:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45027:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "45019:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_2ec0a2b485cd497572ad8de2f4110630fd04a79c3fc75a9aaa133bc5c098fd7e__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "44850:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "44864:4:67", + "type": "" + } + ], + "src": "44699:352:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "45230:170:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45247:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45258:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45240:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45240:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45240:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45281:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45292:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45277:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45277:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45297:2:67", + "type": "", + "value": "20" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45270:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45270:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45270:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45320:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45331:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45316:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45316:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "45336:22:67", + "type": "", + "value": "Unknown marketId ETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45309:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45309:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45309:50:67" + }, + { + "nodeType": "YulAssignment", + "src": "45368:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45380:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45391:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45376:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45376:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "45368:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_3bc896cadc7524646943368edd2f41dfd35c78e313328c146d90408931cae185__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "45207:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "45221:4:67", + "type": "" + } + ], + "src": "45056:344:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "45579:177:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45596:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45607:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45589:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45589:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45589:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45630:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45641:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45626:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45626:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45646:2:67", + "type": "", + "value": "27" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45619:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45619:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45619:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45669:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45680:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45665:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45665:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "45685:29:67", + "type": "", + "value": "Purchase SeaPort_1_6 failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45658:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45658:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45658:57:67" + }, + { + "nodeType": "YulAssignment", + "src": "45724:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45736:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45747:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45732:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45732:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "45724:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_5320b653cd5780735adae92ac3bcf0fff2a8be3d44e7d778c7caac0f6e924b5d__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "45556:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "45570:4:67", + "type": "" + } + ], + "src": "45405:351:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "45935:176:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45952:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45963:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45945:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45945:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45945:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "45986:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "45997:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "45982:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "45982:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46002:2:67", + "type": "", + "value": "26" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "45975:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "45975:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "45975:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46025:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46036:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46021:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46021:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "46041:28:67", + "type": "", + "value": "New address cannot be zero" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46014:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46014:56:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46014:56:67" + }, + { + "nodeType": "YulAssignment", + "src": "46079:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46091:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46102:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46087:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46087:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "46079:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_5904c3e21a28364a0c2d14d132ae0ba7e1f2dcf1f9ade73ba991a7031640606b__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "45912:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "45926:4:67", + "type": "" + } + ], + "src": "45761:350:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "46290:175:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46307:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46318:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46300:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46300:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46300:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46341:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46352:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46337:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46337:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46357:2:67", + "type": "", + "value": "25" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46330:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46330:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46330:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46380:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46391:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46376:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46376:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "46396:27:67", + "type": "", + "value": "Unknown purchase currency" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46369:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46369:55:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46369:55:67" + }, + { + "nodeType": "YulAssignment", + "src": "46433:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46445:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46456:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46441:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46441:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "46433:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "46267:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "46281:4:67", + "type": "" + } + ], + "src": "46116:349:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "46644:171:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46661:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46672:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46654:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46654:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46654:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46695:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46706:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46691:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46691:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46711:2:67", + "type": "", + "value": "21" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46684:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46684:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46684:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46734:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46745:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46730:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46730:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "46750:23:67", + "type": "", + "value": "Unknown marketId WETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "46723:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "46723:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "46723:51:67" + }, + { + "nodeType": "YulAssignment", + "src": "46783:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "46795:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "46806:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "46791:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "46791:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "46783:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_6c57fe9713182a834bdd4831295dedf89e8ff161b7041e5a8170e9b0afd4c42f__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "46621:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "46635:4:67", + "type": "" + } + ], + "src": "46470:345:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "46994:177:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47011:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47022:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47004:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47004:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47004:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47045:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47056:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47041:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47041:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47061:2:67", + "type": "", + "value": "27" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47034:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47034:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47034:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47084:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47095:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47080:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47080:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "47100:29:67", + "type": "", + "value": "Purchase SeaPort_1_1 failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47073:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47073:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47073:57:67" + }, + { + "nodeType": "YulAssignment", + "src": "47139:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47151:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47162:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47147:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47147:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "47139:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_74739c97d81f6776122daced63f78d93149e498efd7fbf2084eabb7018fcdc3b__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "46971:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "46985:4:67", + "type": "" + } + ], + "src": "46820:351:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "47350:182:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47367:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47378:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47360:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47360:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47360:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47401:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47412:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47397:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47397:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47417:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47390:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47390:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47390:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47440:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47451:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47436:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47436:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "47456:34:67", + "type": "", + "value": "Purchase SeaPort_1_6 failed WETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47429:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47429:62:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47429:62:67" + }, + { + "nodeType": "YulAssignment", + "src": "47500:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47512:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47523:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47508:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47508:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "47500:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_7d4fa3070cdac7b556bda72a8ba21317d4366b909fe8ae7528922ba67829f31c__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "47327:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "47341:4:67", + "type": "" + } + ], + "src": "47176:356:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "47711:177:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47728:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47739:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47721:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47721:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47721:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47762:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47773:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47758:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47758:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47778:2:67", + "type": "", + "value": "27" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47751:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47751:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47751:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47801:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47812:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47797:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47797:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "47817:29:67", + "type": "", + "value": "Purchase SeaPort_1_5 failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "47790:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "47790:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "47790:57:67" + }, + { + "nodeType": "YulAssignment", + "src": "47856:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "47868:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "47879:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "47864:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "47864:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "47856:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_83f62501a9582b49b15f73bfa16e8789fc9181acb73eb6b2a01520c5a8cee0ce__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "47688:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "47702:4:67", + "type": "" + } + ], + "src": "47537:351:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "48067:182:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48084:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48095:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48077:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48077:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48077:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48118:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48129:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48114:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48114:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48134:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48107:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48107:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48107:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48157:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48168:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48153:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48153:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "48173:34:67", + "type": "", + "value": "Purchase SeaPort_1_1 failed WETH" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48146:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48146:62:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48146:62:67" + }, + { + "nodeType": "YulAssignment", + "src": "48217:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48229:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48240:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48225:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48225:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "48217:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_9d7bf9b147b8e8ea1a011a4553d7d866e6536c248028d8dc1aeaa1b40c8d32c7__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "48044:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "48058:4:67", + "type": "" + } + ], + "src": "47893:356:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "48428:174:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48445:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48456:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48438:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48438:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48438:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48479:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48490:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48475:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48475:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48495:2:67", + "type": "", + "value": "24" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48468:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48468:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48468:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48518:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48529:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48514:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48514:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "48534:26:67", + "type": "", + "value": "Purchase sudoswap failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48507:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48507:54:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48507:54:67" + }, + { + "nodeType": "YulAssignment", + "src": "48570:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48582:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48593:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48578:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48578:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "48570:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_af8784af813955ccf5679f356dd871ef58abf3a7050c9104ea0ff5ddaa4b9287__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "48405:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "48419:4:67", + "type": "" + } + ], + "src": "48254:348:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "48781:175:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48798:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48809:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48791:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48791:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48791:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48832:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48843:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48828:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48828:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48848:2:67", + "type": "", + "value": "25" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48821:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48821:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48821:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48871:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48882:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48867:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48867:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "48887:27:67", + "type": "", + "value": "unknown delegateType x2y2" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "48860:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "48860:55:67" + }, + "nodeType": "YulExpressionStatement", + "src": "48860:55:67" + }, + { + "nodeType": "YulAssignment", + "src": "48924:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "48936:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "48947:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "48932:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "48932:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "48924:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_b9e628d538abf867b76153fc9fbf92e2395d1f1d03fe95fb0b6ee129f4f808af__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "48758:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "48772:4:67", + "type": "" + } + ], + "src": "48607:349:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "49135:177:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49152:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49163:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49145:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49145:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49145:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49186:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49197:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49182:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49182:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49202:2:67", + "type": "", + "value": "27" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49175:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49175:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49175:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49225:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49236:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49221:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49221:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "49241:29:67", + "type": "", + "value": "Purchase LooksRareV2 failed" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49214:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49214:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49214:57:67" + }, + { + "nodeType": "YulAssignment", + "src": "49280:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49292:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49303:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49288:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49288:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "49280:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_bf725f533a31a5fc822de78c3f59575168899683c9fc9b37f7d7aa10c766d3c1__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "49112:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "49126:4:67", + "type": "" + } + ], + "src": "48961:351:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "49491:168:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49508:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49519:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49501:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49501:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49501:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49542:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49553:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49538:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49538:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49558:2:67", + "type": "", + "value": "18" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49531:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49531:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49531:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49581:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49592:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49577:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49577:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "49597:20:67", + "type": "", + "value": "Unknown token type" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49570:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49570:48:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49570:48:67" + }, + { + "nodeType": "YulAssignment", + "src": "49627:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49639:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49650:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49635:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49635:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "49627:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "49468:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "49482:4:67", + "type": "" + } + ], + "src": "49317:342:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "49838:182:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49855:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49866:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49848:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49848:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49848:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49889:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49900:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49885:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49885:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49905:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49878:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49878:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49878:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "49928:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "49939:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49924:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49924:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "49944:34:67", + "type": "", + "value": "NewMarket address is already set" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "49917:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "49917:62:67" + }, + "nodeType": "YulExpressionStatement", + "src": "49917:62:67" + }, + { + "nodeType": "YulAssignment", + "src": "49988:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50000:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50011:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "49996:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "49996:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "49988:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_e7f1a9d4424e262167e7334a51cbb1e41a967f417508d8063df52487d1f973b8__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "49815:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "49829:4:67", + "type": "" + } + ], + "src": "49664:356:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "50199:176:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50216:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50227:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50209:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50209:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50209:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50250:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50261:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50246:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50246:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50266:2:67", + "type": "", + "value": "26" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50239:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50239:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50239:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50289:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50300:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50285:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50285:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "50305:28:67", + "type": "", + "value": "unknown additionalDataType" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50278:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50278:56:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50278:56:67" + }, + { + "nodeType": "YulAssignment", + "src": "50343:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50355:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50366:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50351:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50351:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "50343:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_e89eb59adf40d46cfd63ce8f1b9b12cb445413877fb23a6846b8ace3266a633d__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "50176:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "50190:4:67", + "type": "" + } + ], + "src": "50025:350:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "50554:174:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50571:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50582:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50564:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50564:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50564:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50605:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50616:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50601:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50601:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50621:2:67", + "type": "", + "value": "24" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50594:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50594:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50594:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50644:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50655:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50640:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50640:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "50660:26:67", + "type": "", + "value": "no successful executions" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50633:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50633:54:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50633:54:67" + }, + { + "nodeType": "YulAssignment", + "src": "50696:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50708:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50719:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50704:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50704:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "50696:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_ec72e63c53a628868607248de6752f6e953ad035609908ced114156f1eeff564__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "50531:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "50545:4:67", + "type": "" + } + ], + "src": "50380:348:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "50907:178:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50924:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50935:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50917:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50917:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50917:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50958:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50969:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50954:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50954:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "50974:2:67", + "type": "", + "value": "28" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50947:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50947:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50947:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "50997:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51008:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "50993:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "50993:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "51013:30:67", + "type": "", + "value": "NewMarket address is not set" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "50986:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "50986:58:67" + }, + "nodeType": "YulExpressionStatement", + "src": "50986:58:67" + }, + { + "nodeType": "YulAssignment", + "src": "51053:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51065:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51076:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51061:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51061:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "51053:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_eca0115108343535314aab82fd1751e6b0aefc82e973d3018693051f60d56563__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "50884:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "50898:4:67", + "type": "" + } + ], + "src": "50733:352:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "51264:174:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51281:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51292:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "51274:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "51274:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "51274:21:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51315:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51326:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51311:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51311:18:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51331:2:67", + "type": "", + "value": "24" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "51304:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "51304:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "51304:30:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51354:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51365:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51350:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51350:18:67" + }, + { + "kind": "string", + "nodeType": "YulLiteral", + "src": "51370:26:67", + "type": "", + "value": "Invalid marketplace type" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "51343:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "51343:54:67" + }, + "nodeType": "YulExpressionStatement", + "src": "51343:54:67" + }, + { + "nodeType": "YulAssignment", + "src": "51406:26:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51418:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51429:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51414:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51414:18:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "51406:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_febc375c51703703674424cdadfabf329e51db90f4495b4c56145c8182019182__to_t_string_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "51241:9:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "51255:4:67", + "type": "" + } + ], + "src": "51090:348:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "51664:232:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51681:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51692:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "51674:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "51674:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "51674:21:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "51704:68:67", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "51745:6:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51757:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51768:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51753:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51753:18:67" + } + ], + "functionName": { + "name": "abi_encode_t_struct$_Input", + "nodeType": "YulIdentifier", + "src": "51718:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "51718:54:67" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "51708:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51792:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "51803:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "51788:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51788:18:67" + }, + { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "51812:6:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "51820:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "51808:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "51808:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "51781:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "51781:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "51781:50:67" + }, + { + "nodeType": "YulAssignment", + "src": "51840:50:67", + "value": { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "51875:6:67" + }, + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "51883:6:67" + } + ], + "functionName": { + "name": "abi_encode_t_struct$_Input", + "nodeType": "YulIdentifier", + "src": "51848:26:67" + }, + "nodeType": "YulFunctionCall", + "src": "51848:42:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "51840:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_struct$_Input_$4556_memory_ptr_t_struct$_Input_$4556_memory_ptr__to_t_struct$_Input_$4556_memory_ptr_t_struct$_Input_$4556_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "51625:9:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "51636:6:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "51644:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "51655:4:67", + "type": "" + } + ], + "src": "51443:453:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "52054:2908:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "52064:12:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52074:2:67", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "52068:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "52092:9:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "52103:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "52085:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "52085:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52085:21:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52115:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52125:3:67", + "type": "", + "value": "384" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "52119:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52137:32:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "52155:9:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "52166:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52151:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52151:18:67" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "52141:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52178:33:67", + "value": { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "52204:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52198:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52198:13:67" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "52182:12:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52220:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52230:6:67", + "type": "", + "value": "0x0160" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "52224:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "52256:9:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "52267:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52252:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52252:18:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "52272:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "52245:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "52245:30:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52245:30:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52284:17:67", + "value": { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "52295:6:67" + }, + "variables": [ + { + "name": "pos", + "nodeType": "YulTypedName", + "src": "52288:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52310:33:67", + "value": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "52330:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52324:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52324:19:67" + }, + "variables": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "52314:6:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "52359:6:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "52367:6:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "52352:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "52352:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52352:22:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52383:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52393:3:67", + "type": "", + "value": "416" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "52387:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "52405:25:67", + "value": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "52416:9:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "52427:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52412:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52412:18:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "52405:3:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52439:54:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "52461:9:67" + }, + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "52476:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "52484:2:67" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "52472:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52472:15:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52457:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52457:31:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "52490:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52453:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52453:40:67" + }, + "variables": [ + { + "name": "tail_2", + "nodeType": "YulTypedName", + "src": "52443:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52502:35:67", + "value": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "52520:12:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "52534:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52516:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52516:21:67" + }, + "variables": [ + { + "name": "srcPtr", + "nodeType": "YulTypedName", + "src": "52506:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52546:13:67", + "value": { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "52555:4:67" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "52550:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "52617:1711:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "52638:3:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52651:6:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "52659:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "52647:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52647:22:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52675:3:67", + "type": "", + "value": "415" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "52671:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52671:8:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52643:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52643:37:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "52631:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "52631:50:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52631:50:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52694:23:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "52710:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52704:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52704:13:67" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "52698:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52737:6:67" + }, + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "52751:2:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52745:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52745:9:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "52730:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "52730:25:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52730:25:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52768:40:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "52800:2:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "52804:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52796:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52796:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52790:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52790:18:67" + }, + "variables": [ + { + "name": "memberValue0_1", + "nodeType": "YulTypedName", + "src": "52772:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_1", + "nodeType": "YulIdentifier", + "src": "52850:14:67" + }, + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52870:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "52878:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52866:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52866:15:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "52821:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "52821:61:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52821:61:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52895:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52905:4:67", + "type": "", + "value": "0x40" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "52899:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "52933:6:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "52941:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52929:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52929:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "52956:2:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "52960:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52952:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52952:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "52946:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "52946:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "52922:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "52922:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "52922:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "52978:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52988:4:67", + "type": "", + "value": "0x60" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "52982:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53016:6:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "53024:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53012:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53012:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "53039:2:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "53043:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53035:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53035:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53029:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53029:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "53005:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "53005:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53005:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53061:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "53071:4:67", + "type": "", + "value": "0x80" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "53065:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53099:6:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "53107:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53095:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53095:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "53122:2:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "53126:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53118:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53118:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53112:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53112:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "53088:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "53088:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53088:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53144:14:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "53154:4:67", + "type": "", + "value": "0xa0" + }, + "variables": [ + { + "name": "_9", + "nodeType": "YulTypedName", + "src": "53148:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53182:6:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "53190:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53178:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53178:15:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "53205:2:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "53209:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53201:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53201:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53195:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53195:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "53171:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "53171:43:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53171:43:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53227:15:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "53238:4:67", + "type": "", + "value": "0xc0" + }, + "variables": [ + { + "name": "_10", + "nodeType": "YulTypedName", + "src": "53231:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53255:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "53287:2:67" + }, + { + "name": "_10", + "nodeType": "YulIdentifier", + "src": "53291:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53283:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53283:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53277:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53277:19:67" + }, + "variables": [ + { + "name": "memberValue0_2", + "nodeType": "YulTypedName", + "src": "53259:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_2", + "nodeType": "YulIdentifier", + "src": "53338:14:67" + }, + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53358:6:67" + }, + { + "name": "_10", + "nodeType": "YulIdentifier", + "src": "53366:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53354:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53354:16:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "53309:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "53309:62:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53309:62:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53384:15:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "53395:4:67", + "type": "", + "value": "0xe0" + }, + "variables": [ + { + "name": "_11", + "nodeType": "YulTypedName", + "src": "53388:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53412:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "53444:2:67" + }, + { + "name": "_11", + "nodeType": "YulIdentifier", + "src": "53448:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53440:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53440:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53434:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53434:19:67" + }, + "variables": [ + { + "name": "memberValue0_3", + "nodeType": "YulTypedName", + "src": "53416:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53477:6:67" + }, + { + "name": "_11", + "nodeType": "YulIdentifier", + "src": "53485:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53473:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53473:16:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "53491:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "53466:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "53466:28:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53466:28:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53507:65:67", + "value": { + "arguments": [ + { + "name": "memberValue0_3", + "nodeType": "YulIdentifier", + "src": "53540:14:67" + }, + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53560:6:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "53568:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53556:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53556:15:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "53521:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "53521:51:67" + }, + "variables": [ + { + "name": "tail_3", + "nodeType": "YulTypedName", + "src": "53511:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53585:17:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "53596:6:67", + "type": "", + "value": "0x0100" + }, + "variables": [ + { + "name": "_12", + "nodeType": "YulTypedName", + "src": "53589:3:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53615:41:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "53647:2:67" + }, + { + "name": "_12", + "nodeType": "YulIdentifier", + "src": "53651:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53643:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53643:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53637:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53637:19:67" + }, + "variables": [ + { + "name": "memberValue0_4", + "nodeType": "YulTypedName", + "src": "53619:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53680:6:67" + }, + { + "name": "_12", + "nodeType": "YulIdentifier", + "src": "53688:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53676:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53676:16:67" + }, + { + "arguments": [ + { + "name": "tail_3", + "nodeType": "YulIdentifier", + "src": "53698:6:67" + }, + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53706:6:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "53694:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53694:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "53669:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "53669:45:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53669:45:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53727:82:67", + "value": { + "arguments": [ + { + "name": "memberValue0_4", + "nodeType": "YulIdentifier", + "src": "53786:14:67" + }, + { + "name": "tail_3", + "nodeType": "YulIdentifier", + "src": "53802:6:67" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_OrderItem_$dyn", + "nodeType": "YulIdentifier", + "src": "53741:44:67" + }, + "nodeType": "YulFunctionCall", + "src": "53741:68:67" + }, + "variables": [ + { + "name": "tail_4", + "nodeType": "YulTypedName", + "src": "53731:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53822:17:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "53833:6:67", + "type": "", + "value": "0x0120" + }, + "variables": [ + { + "name": "_13", + "nodeType": "YulTypedName", + "src": "53826:3:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53863:6:67" + }, + { + "name": "_13", + "nodeType": "YulIdentifier", + "src": "53871:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53859:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53859:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "53887:2:67" + }, + { + "name": "_13", + "nodeType": "YulIdentifier", + "src": "53891:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53883:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53883:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53877:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53877:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "53852:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "53852:45:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53852:45:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53910:17:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "53921:6:67", + "type": "", + "value": "0x0140" + }, + "variables": [ + { + "name": "_14", + "nodeType": "YulTypedName", + "src": "53914:3:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "53951:6:67" + }, + { + "name": "_14", + "nodeType": "YulIdentifier", + "src": "53959:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53947:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53947:16:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "53975:2:67" + }, + { + "name": "_14", + "nodeType": "YulIdentifier", + "src": "53979:3:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "53971:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "53971:12:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "53965:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "53965:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "53940:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "53940:45:67" + }, + "nodeType": "YulExpressionStatement", + "src": "53940:45:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "53998:40:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "54030:2:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "54034:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54026:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54026:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54020:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54020:18:67" + }, + "variables": [ + { + "name": "memberValue0_5", + "nodeType": "YulTypedName", + "src": "54002:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_5", + "nodeType": "YulIdentifier", + "src": "54070:14:67" + }, + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "54090:6:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "54098:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54086:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54086:15:67" + } + ], + "functionName": { + "name": "abi_encode_t_uint8", + "nodeType": "YulIdentifier", + "src": "54051:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "54051:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54051:51:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "54115:40:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "54147:2:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "54151:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54143:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54143:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54137:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54137:18:67" + }, + "variables": [ + { + "name": "memberValue0_6", + "nodeType": "YulTypedName", + "src": "54119:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_6", + "nodeType": "YulIdentifier", + "src": "54187:14:67" + }, + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "54207:6:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "54215:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54203:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54203:15:67" + } + ], + "functionName": { + "name": "abi_encode_t_uint8", + "nodeType": "YulIdentifier", + "src": "54168:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "54168:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54168:51:67" + }, + { + "nodeType": "YulAssignment", + "src": "54232:16:67", + "value": { + "name": "tail_4", + "nodeType": "YulIdentifier", + "src": "54242:6:67" + }, + "variableNames": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "54232:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "54261:25:67", + "value": { + "arguments": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "54275:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "54283:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54271:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54271:15:67" + }, + "variableNames": [ + { + "name": "srcPtr", + "nodeType": "YulIdentifier", + "src": "54261:6:67" + } + ] + }, + { + "nodeType": "YulAssignment", + "src": "54299:19:67", + "value": { + "arguments": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "54310:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "54315:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54306:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54306:12:67" + }, + "variableNames": [ + { + "name": "pos", + "nodeType": "YulIdentifier", + "src": "54299:3:67" + } + ] + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "52579:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "52582:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "52576:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "52576:13:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "52590:18:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "52592:14:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "52601:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "52604:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "52597:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "52597:9:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "52592:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "52572:3:67", + "statements": [] + }, + "src": "52568:1760:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "54337:44:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "54369:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "54377:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54365:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54365:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54359:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54359:22:67" + }, + "variables": [ + { + "name": "memberValue0_7", + "nodeType": "YulTypedName", + "src": "54341:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54401:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54412:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54397:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54397:20:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "54427:6:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54435:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "54423:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54423:22:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54451:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "54447:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54447:7:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54419:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54419:36:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "54390:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "54390:66:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54390:66:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "54465:85:67", + "value": { + "arguments": [ + { + "name": "memberValue0_7", + "nodeType": "YulIdentifier", + "src": "54527:14:67" + }, + { + "name": "tail_2", + "nodeType": "YulIdentifier", + "src": "54543:6:67" + } + ], + "functionName": { + "name": "abi_encode_t_array$_t_struct$_SettleDetail_$dyn", + "nodeType": "YulIdentifier", + "src": "54479:47:67" + }, + "nodeType": "YulFunctionCall", + "src": "54479:71:67" + }, + "variables": [ + { + "name": "tail_5", + "nodeType": "YulTypedName", + "src": "54469:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "54559:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "54591:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54599:4:67", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54587:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54587:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54581:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54581:24:67" + }, + "variables": [ + { + "name": "memberValue0_8", + "nodeType": "YulTypedName", + "src": "54563:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_8", + "nodeType": "YulIdentifier", + "src": "54648:14:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54668:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54679:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54664:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54664:20:67" + } + ], + "functionName": { + "name": "abi_encode_t_struct$_SettleShared", + "nodeType": "YulIdentifier", + "src": "54614:33:67" + }, + "nodeType": "YulFunctionCall", + "src": "54614:71:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54614:71:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54705:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54716:6:67", + "type": "", + "value": "0x0120" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54701:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54701:22:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "54735:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54743:4:67", + "type": "", + "value": "0x60" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54731:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54731:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54725:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54725:24:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "54694:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "54694:56:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54694:56:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54770:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54781:6:67", + "type": "", + "value": "0x0140" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54766:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54766:22:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "54800:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54808:4:67", + "type": "", + "value": "0x80" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54796:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54796:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54790:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54790:24:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "54759:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "54759:56:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54759:56:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "54824:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "54856:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "54864:4:67", + "type": "", + "value": "0xa0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54852:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54852:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "54846:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "54846:24:67" + }, + "variables": [ + { + "name": "memberValue0_9", + "nodeType": "YulTypedName", + "src": "54828:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_9", + "nodeType": "YulIdentifier", + "src": "54898:14:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "54918:9:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "54929:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "54914:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "54914:18:67" + } + ], + "functionName": { + "name": "abi_encode_t_uint8", + "nodeType": "YulIdentifier", + "src": "54879:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "54879:54:67" + }, + "nodeType": "YulExpressionStatement", + "src": "54879:54:67" + }, + { + "nodeType": "YulAssignment", + "src": "54942:14:67", + "value": { + "name": "tail_5", + "nodeType": "YulIdentifier", + "src": "54950:6:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "54942:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_struct$_RunInput_$4839_memory_ptr__to_t_struct$_RunInput_$4839_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "52023:9:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "52034:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "52045:4:67", + "type": "" + } + ], + "src": "51901:3061:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "55208:2125:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55225:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55236:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55218:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55218:21:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55218:21:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "55248:13:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55258:3:67", + "type": "", + "value": "256" + }, + "variables": [ + { + "name": "_1", + "nodeType": "YulTypedName", + "src": "55252:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55281:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55292:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55277:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55277:18:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "55317:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55311:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55311:13:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "55304:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55304:21:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "55297:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55297:29:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55270:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55270:57:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55270:57:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55347:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55358:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55343:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55343:18:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "55377:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55385:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55373:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55373:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55367:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55367:24:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55401:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55406:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "55397:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55397:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55410:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "55393:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55393:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "55363:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55363:50:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55336:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55336:78:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55336:78:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55434:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55445:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55430:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55430:19:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "55461:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55469:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55457:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55457:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55451:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55451:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55423:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55423:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55423:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55494:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55505:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55490:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55490:19:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "55521:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55529:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55517:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55517:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55511:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55511:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55483:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55483:51:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55483:51:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55554:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55565:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55550:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55550:20:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "55582:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55590:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55578:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55578:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55572:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55572:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55543:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55543:53:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55543:53:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "55605:43:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nodeType": "YulIdentifier", + "src": "55635:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55643:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55631:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55631:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55625:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55625:23:67" + }, + "variables": [ + { + "name": "memberValue0", + "nodeType": "YulTypedName", + "src": "55609:12:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55668:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55679:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55664:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55664:19:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55685:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55657:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55657:33:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55657:33:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "55699:63:67", + "value": { + "arguments": [ + { + "name": "memberValue0", + "nodeType": "YulIdentifier", + "src": "55729:12:67" + }, + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55747:9:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "55758:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55743:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55743:18:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "55710:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "55710:52:67" + }, + "variables": [ + { + "name": "end", + "nodeType": "YulTypedName", + "src": "55703:3:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55782:9:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55793:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55778:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55778:20:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "55804:3:67" + }, + { + "name": "headStart", + "nodeType": "YulIdentifier", + "src": "55809:9:67" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "55800:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55800:19:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "55771:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "55771:49:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55771:49:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "55829:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55839:6:67", + "type": "", + "value": "0x0200" + }, + "variables": [ + { + "name": "_2", + "nodeType": "YulTypedName", + "src": "55833:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "55878:6:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55872:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55872:13:67" + }, + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "55887:3:67" + } + ], + "functionName": { + "name": "abi_encode_t_bool", + "nodeType": "YulIdentifier", + "src": "55854:17:67" + }, + "nodeType": "YulFunctionCall", + "src": "55854:37:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55854:37:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "55900:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "55932:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "55940:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "55928:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "55928:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "55922:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "55922:24:67" + }, + "variables": [ + { + "name": "memberValue0_1", + "nodeType": "YulTypedName", + "src": "55904:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_1", + "nodeType": "YulIdentifier", + "src": "55984:14:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56004:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56009:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56000:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56000:14:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "55955:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "55955:60:67" + }, + "nodeType": "YulExpressionStatement", + "src": "55955:60:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56024:44:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56056:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56064:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56052:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56052:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56046:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56046:22:67" + }, + "variables": [ + { + "name": "memberValue0_2", + "nodeType": "YulTypedName", + "src": "56028:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_2", + "nodeType": "YulIdentifier", + "src": "56106:14:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56126:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56131:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56122:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56122:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "56077:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "56077:58:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56077:58:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56155:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56160:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56151:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56151:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56175:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56183:2:67", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56171:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56171:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56165:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56165:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56144:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56144:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56144:44:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56208:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56213:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56204:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56204:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56229:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56237:3:67", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56225:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56225:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56219:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56219:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56197:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56197:46:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56197:46:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56263:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56268:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56259:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56259:13:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56284:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56292:3:67", + "type": "", + "value": "160" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56280:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56280:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56274:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56274:23:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56252:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56252:46:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56252:46:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56307:46:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56339:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56347:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56335:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56335:17:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56329:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56329:24:67" + }, + "variables": [ + { + "name": "memberValue0_3", + "nodeType": "YulTypedName", + "src": "56311:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_3", + "nodeType": "YulIdentifier", + "src": "56391:14:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56411:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56416:4:67", + "type": "", + "value": "0xc0" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56407:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56407:14:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "56362:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "56362:60:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56362:60:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56431:45:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56463:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56471:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56459:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56459:16:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56453:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56453:23:67" + }, + "variables": [ + { + "name": "memberValue0_4", + "nodeType": "YulTypedName", + "src": "56435:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_4", + "nodeType": "YulIdentifier", + "src": "56514:14:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56534:3:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56539:3:67", + "type": "", + "value": "224" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56530:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56530:13:67" + } + ], + "functionName": { + "name": "abi_encode_t_address_payable", + "nodeType": "YulIdentifier", + "src": "56485:28:67" + }, + "nodeType": "YulFunctionCall", + "src": "56485:59:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56485:59:67" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56564:3:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "56569:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56560:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56560:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56584:6:67" + }, + { + "name": "_1", + "nodeType": "YulIdentifier", + "src": "56592:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56580:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56580:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56574:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56574:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56553:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56553:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56553:44:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56606:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56616:6:67", + "type": "", + "value": "0x0120" + }, + "variables": [ + { + "name": "_3", + "nodeType": "YulTypedName", + "src": "56610:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56642:3:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "56647:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56638:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56638:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56662:6:67" + }, + { + "name": "_3", + "nodeType": "YulIdentifier", + "src": "56670:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56658:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56658:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56652:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56652:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56631:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56631:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56631:44:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56684:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56694:6:67", + "type": "", + "value": "0x0140" + }, + "variables": [ + { + "name": "_4", + "nodeType": "YulTypedName", + "src": "56688:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56720:3:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "56725:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56716:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56716:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56740:6:67" + }, + { + "name": "_4", + "nodeType": "YulIdentifier", + "src": "56748:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56736:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56736:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56730:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56730:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56709:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56709:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56709:44:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56762:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56772:6:67", + "type": "", + "value": "0x0160" + }, + "variables": [ + { + "name": "_5", + "nodeType": "YulTypedName", + "src": "56766:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56798:3:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "56803:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56794:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56794:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56818:6:67" + }, + { + "name": "_5", + "nodeType": "YulIdentifier", + "src": "56826:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56814:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56814:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56808:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56808:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56787:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56787:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56787:44:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56840:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "56850:6:67", + "type": "", + "value": "0x0180" + }, + "variables": [ + { + "name": "_6", + "nodeType": "YulTypedName", + "src": "56844:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56865:44:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "56897:6:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "56905:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56893:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56893:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "56887:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "56887:22:67" + }, + "variables": [ + { + "name": "memberValue0_5", + "nodeType": "YulTypedName", + "src": "56869:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "56929:3:67" + }, + { + "name": "_6", + "nodeType": "YulIdentifier", + "src": "56934:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "56925:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "56925:12:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "56939:2:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "56918:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "56918:24:67" + }, + "nodeType": "YulExpressionStatement", + "src": "56918:24:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "56951:62:67", + "value": { + "arguments": [ + { + "name": "memberValue0_5", + "nodeType": "YulIdentifier", + "src": "56984:14:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "57004:3:67" + }, + { + "name": "_2", + "nodeType": "YulIdentifier", + "src": "57009:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57000:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57000:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_bytes", + "nodeType": "YulIdentifier", + "src": "56965:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "56965:48:67" + }, + "variables": [ + { + "name": "tail_1", + "nodeType": "YulTypedName", + "src": "56955:6:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "57022:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57032:6:67", + "type": "", + "value": "0x01a0" + }, + "variables": [ + { + "name": "_7", + "nodeType": "YulTypedName", + "src": "57026:2:67", + "type": "" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "57047:44:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "57079:6:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "57087:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57075:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57075:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "57069:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "57069:22:67" + }, + "variables": [ + { + "name": "memberValue0_6", + "nodeType": "YulTypedName", + "src": "57051:14:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "memberValue0_6", + "nodeType": "YulIdentifier", + "src": "57119:14:67" + }, + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "57139:3:67" + }, + { + "name": "_7", + "nodeType": "YulIdentifier", + "src": "57144:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57135:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57135:12:67" + } + ], + "functionName": { + "name": "abi_encode_t_uint8", + "nodeType": "YulIdentifier", + "src": "57100:18:67" + }, + "nodeType": "YulFunctionCall", + "src": "57100:48:67" + }, + "nodeType": "YulExpressionStatement", + "src": "57100:48:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "57157:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57167:6:67", + "type": "", + "value": "0x01c0" + }, + "variables": [ + { + "name": "_8", + "nodeType": "YulTypedName", + "src": "57161:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "57193:3:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "57198:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57189:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57189:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "57213:6:67" + }, + { + "name": "_8", + "nodeType": "YulIdentifier", + "src": "57221:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57209:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57209:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "57203:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "57203:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "57182:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "57182:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "57182:44:67" + }, + { + "nodeType": "YulVariableDeclaration", + "src": "57235:16:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57245:6:67", + "type": "", + "value": "0x01e0" + }, + "variables": [ + { + "name": "_9", + "nodeType": "YulTypedName", + "src": "57239:2:67", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "end", + "nodeType": "YulIdentifier", + "src": "57271:3:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "57276:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57267:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57267:12:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nodeType": "YulIdentifier", + "src": "57291:6:67" + }, + { + "name": "_9", + "nodeType": "YulIdentifier", + "src": "57299:2:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57287:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57287:15:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "57281:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "57281:22:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "57260:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "57260:44:67" + }, + "nodeType": "YulExpressionStatement", + "src": "57260:44:67" + }, + { + "nodeType": "YulAssignment", + "src": "57313:14:67", + "value": { + "name": "tail_1", + "nodeType": "YulIdentifier", + "src": "57321:6:67" + }, + "variableNames": [ + { + "name": "tail", + "nodeType": "YulIdentifier", + "src": "57313:4:67" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_struct$_TakerOrder_$4903_memory_ptr_t_struct$_MakerOrder_$4890_memory_ptr__to_t_struct$_TakerOrder_$4903_memory_ptr_t_struct$_MakerOrder_$4890_memory_ptr__fromStack_reversed", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nodeType": "YulTypedName", + "src": "55169:9:67", + "type": "" + }, + { + "name": "value1", + "nodeType": "YulTypedName", + "src": "55180:6:67", + "type": "" + }, + { + "name": "value0", + "nodeType": "YulTypedName", + "src": "55188:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nodeType": "YulTypedName", + "src": "55199:4:67", + "type": "" + } + ], + "src": "54967:2366:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "57382:198:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "57392:19:67", + "value": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57408:2:67", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "57402:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "57402:9:67" + }, + "variableNames": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57392:6:67" + } + ] + }, + { + "nodeType": "YulVariableDeclaration", + "src": "57420:35:67", + "value": { + "arguments": [ + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57442:6:67" + }, + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "57450:4:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57438:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57438:17:67" + }, + "variables": [ + { + "name": "newFreePtr", + "nodeType": "YulTypedName", + "src": "57424:10:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "57530:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "57532:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "57532:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "57532:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "57473:10:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57485:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "57470:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "57470:34:67" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "57509:10:67" + }, + { + "name": "memPtr", + "nodeType": "YulIdentifier", + "src": "57521:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "57506:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "57506:22:67" + } + ], + "functionName": { + "name": "or", + "nodeType": "YulIdentifier", + "src": "57467:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "57467:62:67" + }, + "nodeType": "YulIf", + "src": "57464:2:67" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57559:2:67", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nodeType": "YulIdentifier", + "src": "57563:10:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "57552:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "57552:22:67" + }, + "nodeType": "YulExpressionStatement", + "src": "57552:22:67" + } + ] + }, + "name": "allocateMemory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "57362:4:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "memPtr", + "nodeType": "YulTypedName", + "src": "57371:6:67", + "type": "" + } + ], + "src": "57338:242:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "57660:108:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "57704:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "57706:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "57706:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "57706:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "57676:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57684:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "57673:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "57673:30:67" + }, + "nodeType": "YulIf", + "src": "57670:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "57726:36:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "57742:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57750:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "mul", + "nodeType": "YulIdentifier", + "src": "57738:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57738:17:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57757:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57734:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57734:28:67" + }, + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "57726:4:67" + } + ] + } + ] + }, + "name": "array_allocation_size_t_array$_t_address_$dyn", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "57640:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "57651:4:67", + "type": "" + } + ], + "src": "57585:183:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "57832:122:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "57876:13:67", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "invalid", + "nodeType": "YulIdentifier", + "src": "57878:7:67" + }, + "nodeType": "YulFunctionCall", + "src": "57878:9:67" + }, + "nodeType": "YulExpressionStatement", + "src": "57878:9:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "57848:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57856:18:67", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "57845:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "57845:30:67" + }, + "nodeType": "YulIf", + "src": "57842:2:67" + }, + { + "nodeType": "YulAssignment", + "src": "57898:50:67", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "57918:6:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57926:4:67", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57914:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57914:17:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57937:2:67", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nodeType": "YulIdentifier", + "src": "57933:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57933:7:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "57910:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57910:31:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "57943:4:67", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "57906:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "57906:42:67" + }, + "variableNames": [ + { + "name": "size", + "nodeType": "YulIdentifier", + "src": "57898:4:67" + } + ] + } + ] + }, + "name": "array_allocation_size_t_bytes", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "length", + "nodeType": "YulTypedName", + "src": "57812:6:67", + "type": "" + } + ], + "returnVariables": [ + { + "name": "size", + "nodeType": "YulTypedName", + "src": "57823:4:67", + "type": "" + } + ], + "src": "57773:181:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "58012:205:67", + "statements": [ + { + "nodeType": "YulVariableDeclaration", + "src": "58022:10:67", + "value": { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58031:1:67", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nodeType": "YulTypedName", + "src": "58026:1:67", + "type": "" + } + ] + }, + { + "body": { + "nodeType": "YulBlock", + "src": "58091:63:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "58116:3:67" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "58121:1:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "58112:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "58112:11:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nodeType": "YulIdentifier", + "src": "58135:3:67" + }, + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "58140:1:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "58131:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "58131:11:67" + } + ], + "functionName": { + "name": "mload", + "nodeType": "YulIdentifier", + "src": "58125:5:67" + }, + "nodeType": "YulFunctionCall", + "src": "58125:18:67" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "58105:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "58105:39:67" + }, + "nodeType": "YulExpressionStatement", + "src": "58105:39:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "58052:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "58055:6:67" + } + ], + "functionName": { + "name": "lt", + "nodeType": "YulIdentifier", + "src": "58049:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "58049:13:67" + }, + "nodeType": "YulForLoop", + "post": { + "nodeType": "YulBlock", + "src": "58063:19:67", + "statements": [ + { + "nodeType": "YulAssignment", + "src": "58065:15:67", + "value": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "58074:1:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58077:2:67", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "58070:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "58070:10:67" + }, + "variableNames": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "58065:1:67" + } + ] + } + ] + }, + "pre": { + "nodeType": "YulBlock", + "src": "58045:3:67", + "statements": [] + }, + "src": "58041:113:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "58180:31:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nodeType": "YulIdentifier", + "src": "58193:3:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "58198:6:67" + } + ], + "functionName": { + "name": "add", + "nodeType": "YulIdentifier", + "src": "58189:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "58189:16:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58207:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nodeType": "YulIdentifier", + "src": "58182:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "58182:27:67" + }, + "nodeType": "YulExpressionStatement", + "src": "58182:27:67" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nodeType": "YulIdentifier", + "src": "58169:1:67" + }, + { + "name": "length", + "nodeType": "YulIdentifier", + "src": "58172:6:67" + } + ], + "functionName": { + "name": "gt", + "nodeType": "YulIdentifier", + "src": "58166:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "58166:13:67" + }, + "nodeType": "YulIf", + "src": "58163:2:67" + } + ] + }, + "name": "copy_memory_to_memory", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "src", + "nodeType": "YulTypedName", + "src": "57990:3:67", + "type": "" + }, + { + "name": "dst", + "nodeType": "YulTypedName", + "src": "57995:3:67", + "type": "" + }, + { + "name": "length", + "nodeType": "YulTypedName", + "src": "58000:6:67", + "type": "" + } + ], + "src": "57959:258:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "58269:86:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "58333:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58342:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58345:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "58335:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "58335:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "58335:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "58292:5:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "58303:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58318:3:67", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58323:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "58314:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "58314:11:67" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58327:1:67", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nodeType": "YulIdentifier", + "src": "58310:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "58310:19:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "58299:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "58299:31:67" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "58289:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "58289:42:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "58282:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "58282:50:67" + }, + "nodeType": "YulIf", + "src": "58279:2:67" + } + ] + }, + "name": "validator_revert_t_address", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "58258:5:67", + "type": "" + } + ], + "src": "58222:133:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "58404:76:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "58458:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58467:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58470:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "58460:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "58460:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "58460:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "58427:5:67" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "58448:5:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "58441:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "58441:13:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "58434:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "58434:21:67" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "58424:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "58424:32:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "58417:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "58417:40:67" + }, + "nodeType": "YulIf", + "src": "58414:2:67" + } + ] + }, + "name": "validator_revert_t_bool", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "58393:5:67", + "type": "" + } + ], + "src": "58360:120:67" + }, + { + "body": { + "nodeType": "YulBlock", + "src": "58531:87:67", + "statements": [ + { + "body": { + "nodeType": "YulBlock", + "src": "58596:16:67", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58605:1:67", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58608:1:67", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nodeType": "YulIdentifier", + "src": "58598:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "58598:12:67" + }, + "nodeType": "YulExpressionStatement", + "src": "58598:12:67" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "58554:5:67" + }, + { + "arguments": [ + { + "name": "value", + "nodeType": "YulIdentifier", + "src": "58565:5:67" + }, + { + "arguments": [ + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58576:3:67", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nodeType": "YulLiteral", + "src": "58581:10:67", + "type": "", + "value": "0xffffffff" + } + ], + "functionName": { + "name": "shl", + "nodeType": "YulIdentifier", + "src": "58572:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "58572:20:67" + } + ], + "functionName": { + "name": "and", + "nodeType": "YulIdentifier", + "src": "58561:3:67" + }, + "nodeType": "YulFunctionCall", + "src": "58561:32:67" + } + ], + "functionName": { + "name": "eq", + "nodeType": "YulIdentifier", + "src": "58551:2:67" + }, + "nodeType": "YulFunctionCall", + "src": "58551:43:67" + } + ], + "functionName": { + "name": "iszero", + "nodeType": "YulIdentifier", + "src": "58544:6:67" + }, + "nodeType": "YulFunctionCall", + "src": "58544:51:67" + }, + "nodeType": "YulIf", + "src": "58541:2:67" + } + ] + }, + "name": "validator_revert_t_bytes4", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nodeType": "YulTypedName", + "src": "58520:5:67", + "type": "" + } + ], + "src": "58485:133:67" + } + ] + }, + "contents": "{\n { }\n function abi_decode_t_address(offset) -> value\n {\n value := calldataload(offset)\n validator_revert_t_address(value)\n }\n function abi_decode_t_address_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_t_address(value)\n }\n function abi_decode_t_array$_t_address_$dyn(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := calldataload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n if gt(add(add(offset, mul(_1, _2)), _2), end) { revert(array, array) }\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n let value := calldataload(src)\n validator_revert_t_address(value)\n mstore(dst, value)\n dst := add(dst, _2)\n src := add(src, _2)\n }\n array := dst_1\n }\n function abi_decode_t_array$_t_struct$_Fee_$dyn_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := mload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n let _3 := 0x40\n if gt(add(add(offset, mul(_1, _3)), _2), end) { revert(array, array) }\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n if slt(sub(end, src), _3) { revert(array, array) }\n let memPtr := mload(_3)\n let newFreePtr := add(memPtr, _3)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n mstore(_3, newFreePtr)\n let value := mload(src)\n if iszero(eq(value, and(value, 0xffff))) { revert(array, array) }\n mstore(memPtr, value)\n let value_1 := mload(add(src, _2))\n validator_revert_t_address(value_1)\n mstore(add(memPtr, _2), value_1)\n mstore(dst, memPtr)\n dst := add(dst, _2)\n src := add(src, _3)\n }\n array := dst_1\n }\n function abi_decode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := mload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n let _3 := 0x40\n if gt(add(add(offset, mul(_1, _3)), _2), end) { revert(array, array) }\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n if slt(sub(end, src), _3) { revert(array, array) }\n let memPtr := mload(_3)\n let newFreePtr := add(memPtr, _3)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n mstore(_3, newFreePtr)\n mstore(memPtr, mload(src))\n let value := mload(add(src, _2))\n validator_revert_t_address(value)\n mstore(add(memPtr, _2), value)\n mstore(dst, memPtr)\n dst := add(dst, _2)\n src := add(src, _3)\n }\n array := dst_1\n }\n function abi_decode_t_array$_t_struct$_OrderItem_$dyn_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := mload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n let _3 := add(offset, mload(src))\n let _4 := 0x40\n if slt(add(sub(end, _3), not(31)), _4) { revert(array, array) }\n let memPtr := mload(_4)\n let newFreePtr := add(memPtr, _4)\n let _5 := 0xffffffffffffffff\n if or(gt(newFreePtr, _5), lt(newFreePtr, memPtr)) { invalid() }\n mstore(_4, newFreePtr)\n mstore(memPtr, mload(add(_3, _2)))\n let offset_1 := mload(add(_3, _4))\n if gt(offset_1, _5) { revert(array, array) }\n mstore(add(memPtr, _2), abi_decode_t_bytes_fromMemory(add(add(_3, offset_1), _2), end))\n mstore(dst, memPtr)\n dst := add(dst, _2)\n src := add(src, _2)\n }\n array := dst_1\n }\n function abi_decode_t_array$_t_struct$_Order_$dyn_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := mload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n let _3 := add(offset, mload(src))\n let _4 := 0x01a0\n if slt(add(sub(end, _3), not(31)), _4) { revert(array, array) }\n let value := allocateMemory(_4)\n mstore(value, mload(add(_3, _2)))\n mstore(add(value, _2), abi_decode_t_address_fromMemory(add(_3, 64)))\n mstore(add(value, 64), mload(add(_3, 96)))\n mstore(add(value, 96), mload(add(_3, 128)))\n mstore(add(value, 128), mload(add(_3, 160)))\n mstore(add(value, 160), mload(add(_3, 192)))\n mstore(add(value, 192), abi_decode_t_address_fromMemory(add(_3, 224)))\n let _5 := 256\n let offset_1 := mload(add(_3, _5))\n let _6 := 0xffffffffffffffff\n if gt(offset_1, _6) { revert(array, array) }\n mstore(add(value, 224), abi_decode_t_bytes_fromMemory(add(add(_3, offset_1), _2), end))\n let offset_2 := mload(add(_3, 288))\n if gt(offset_2, _6) { revert(array, array) }\n mstore(add(value, _5), abi_decode_t_array$_t_struct$_OrderItem_$dyn_fromMemory(add(add(_3, offset_2), _2), end))\n let _7 := 320\n mstore(add(value, 288), mload(add(_3, _7)))\n mstore(add(value, _7), mload(add(_3, 352)))\n mstore(add(value, 352), abi_decode_t_uint8_fromMemory(add(_3, 384)))\n mstore(add(value, 384), abi_decode_t_uint8_fromMemory(add(_3, _4)))\n mstore(dst, value)\n dst := add(dst, _2)\n src := add(src, _2)\n }\n array := dst_1\n }\n function abi_decode_t_array$_t_struct$_SettleDetail_$dyn_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := mload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n let _3 := add(offset, mload(src))\n let _4 := 0x0160\n if slt(add(sub(end, _3), not(31)), _4) { revert(array, array) }\n let value := allocateMemory(_4)\n mstore(value, abi_decode_t_enum$_Op_fromMemory(add(_3, _2)))\n mstore(add(value, _2), mload(add(_3, 64)))\n mstore(add(value, 64), mload(add(_3, 96)))\n mstore(add(value, 96), mload(add(_3, 128)))\n mstore(add(value, 128), mload(add(_3, 160)))\n let _5 := 192\n mstore(add(value, 160), abi_decode_t_address_fromMemory(add(_3, _5)))\n let offset_1 := mload(add(_3, 224))\n let _6 := 0xffffffffffffffff\n if gt(offset_1, _6) { revert(array, array) }\n mstore(add(value, _5), abi_decode_t_bytes_fromMemory(add(add(_3, offset_1), _2), end))\n let _7 := 256\n mstore(add(value, 224), mload(add(_3, _7)))\n let _8 := 288\n mstore(add(value, _7), mload(add(_3, _8)))\n let _9 := 320\n mstore(add(value, _8), mload(add(_3, _9)))\n let offset_2 := mload(add(_3, _4))\n if gt(offset_2, _6) { revert(array, array) }\n mstore(add(value, _9), abi_decode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr_fromMemory(add(add(_3, offset_2), _2), end))\n mstore(dst, value)\n dst := add(dst, _2)\n src := add(src, _2)\n }\n array := dst_1\n }\n function abi_decode_t_array$_t_uint256_$dyn(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := calldataload(offset)\n let _2 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_1))\n let dst_1 := dst\n mstore(dst, _1)\n dst := add(dst, _2)\n let src := add(offset, _2)\n if gt(add(add(offset, mul(_1, _2)), _2), end) { revert(array, array) }\n let i := array\n for { } lt(i, _1) { i := add(i, 1) }\n {\n mstore(dst, calldataload(src))\n dst := add(dst, _2)\n src := add(src, _2)\n }\n array := dst_1\n }\n function abi_decode_t_bool(offset) -> value\n {\n value := calldataload(offset)\n validator_revert_t_bool(value)\n }\n function abi_decode_t_bool_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_t_bool(value)\n }\n function abi_decode_t_bytes4_fromMemory(offset) -> value\n {\n value := mload(offset)\n validator_revert_t_bytes4(value)\n }\n function abi_decode_t_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := calldataload(offset)\n let array_1 := allocateMemory(array_allocation_size_t_bytes(_1))\n mstore(array_1, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n calldatacopy(add(array_1, 0x20), add(offset, 0x20), _1)\n mstore(add(add(array_1, _1), 0x20), array)\n array := array_1\n }\n function abi_decode_t_bytes_fromMemory(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(array, array) }\n let _1 := mload(offset)\n let array_1 := allocateMemory(array_allocation_size_t_bytes(_1))\n mstore(array_1, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(array, array) }\n copy_memory_to_memory(add(offset, 0x20), add(array_1, 0x20), _1)\n array := array_1\n }\n function abi_decode_t_enum$_Markets(offset) -> value\n {\n value := calldataload(offset)\n if iszero(lt(value, 12)) { revert(0, 0) }\n }\n function abi_decode_t_enum$_Op_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(lt(value, 8)) { revert(0, 0) }\n }\n function abi_decode_t_enum$_Side_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(lt(value, 2)) { revert(0, 0) }\n }\n function abi_decode_t_struct$_Input_fromMemory(headStart, end) -> value\n {\n if slt(sub(end, headStart), 0xe0) { revert(value, value) }\n value := allocateMemory(0xe0)\n let offset := mload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n mstore(value, abi_decode_t_struct$_Order_fromMemory(add(headStart, offset), end))\n mstore(add(value, 32), abi_decode_t_uint8_fromMemory(add(headStart, 32)))\n mstore(add(value, 64), mload(add(headStart, 64)))\n mstore(add(value, 96), mload(add(headStart, 96)))\n let offset_1 := mload(add(headStart, 128))\n if gt(offset_1, _1) { revert(0, 0) }\n mstore(add(value, 128), abi_decode_t_bytes_fromMemory(add(headStart, offset_1), end))\n mstore(add(value, 160), abi_decode_t_enum$_Side_fromMemory(add(headStart, 160)))\n mstore(add(value, 192), mload(add(headStart, 192)))\n }\n function abi_decode_t_struct$_MakerOrder_fromMemory(headStart, end) -> value\n {\n let _1 := 0x0200\n if slt(sub(end, headStart), _1) { revert(value, value) }\n value := allocateMemory(_1)\n mstore(value, abi_decode_t_bool_fromMemory(headStart))\n mstore(add(value, 32), abi_decode_t_address_fromMemory(add(headStart, 32)))\n mstore(add(value, 64), abi_decode_t_address_fromMemory(add(headStart, 64)))\n mstore(add(value, 96), mload(add(headStart, 96)))\n mstore(add(value, 128), mload(add(headStart, 128)))\n mstore(add(value, 160), mload(add(headStart, 160)))\n mstore(add(value, 192), abi_decode_t_address_fromMemory(add(headStart, 192)))\n mstore(add(value, 224), abi_decode_t_address_fromMemory(add(headStart, 224)))\n let _2 := 256\n mstore(add(value, _2), mload(add(headStart, _2)))\n let _3 := 288\n mstore(add(value, _3), mload(add(headStart, _3)))\n let _4 := 320\n mstore(add(value, _4), mload(add(headStart, _4)))\n let _5 := 352\n mstore(add(value, _5), mload(add(headStart, _5)))\n let _6 := 384\n let offset := mload(add(headStart, _6))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n mstore(add(value, _6), abi_decode_t_bytes_fromMemory(add(headStart, offset), end))\n let _7 := 416\n mstore(add(value, _7), abi_decode_t_uint8_fromMemory(add(headStart, _7)))\n let _8 := 448\n mstore(add(value, _8), mload(add(headStart, _8)))\n let _9 := 480\n mstore(add(value, _9), mload(add(headStart, _9)))\n }\n function abi_decode_t_struct$_Order_fromMemory(headStart, end) -> value\n {\n let _1 := 0x01a0\n if slt(sub(end, headStart), _1) { revert(value, value) }\n value := allocateMemory(_1)\n mstore(value, abi_decode_t_address_fromMemory(headStart))\n mstore(add(value, 32), abi_decode_t_enum$_Side_fromMemory(add(headStart, 32)))\n mstore(add(value, 64), abi_decode_t_address_fromMemory(add(headStart, 64)))\n mstore(add(value, 96), abi_decode_t_address_fromMemory(add(headStart, 96)))\n mstore(add(value, 128), mload(add(headStart, 128)))\n mstore(add(value, 160), mload(add(headStart, 160)))\n mstore(add(value, 192), abi_decode_t_address_fromMemory(add(headStart, 192)))\n mstore(add(value, 224), mload(add(headStart, 224)))\n let _2 := 256\n mstore(add(value, _2), mload(add(headStart, _2)))\n let _3 := 288\n mstore(add(value, _3), mload(add(headStart, _3)))\n let _4 := 320\n let offset := mload(add(headStart, _4))\n let _5 := 0xffffffffffffffff\n if gt(offset, _5) { revert(0, 0) }\n mstore(add(value, _4), abi_decode_t_array$_t_struct$_Fee_$dyn_fromMemory(add(headStart, offset), end))\n let _6 := 352\n mstore(add(value, _6), mload(add(headStart, _6)))\n let _7 := 384\n let offset_1 := mload(add(headStart, _7))\n if gt(offset_1, _5) { revert(0, 0) }\n mstore(add(value, _7), abi_decode_t_bytes_fromMemory(add(headStart, offset_1), end))\n }\n function abi_decode_t_struct$_PurchaseDetails(headStart, end) -> value\n {\n if slt(sub(end, headStart), 0x80) { revert(value, value) }\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, 0x80)\n let _1 := 0xffffffffffffffff\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { invalid() }\n mstore(64, newFreePtr)\n value := memPtr\n mstore(memPtr, abi_decode_t_enum$_Markets(headStart))\n mstore(add(memPtr, 32), calldataload(add(headStart, 32)))\n mstore(add(memPtr, 64), calldataload(add(headStart, 64)))\n let offset := calldataload(add(headStart, 96))\n if gt(offset, _1) { revert(0, 0) }\n mstore(add(memPtr, 96), abi_decode_t_bytes(add(headStart, offset), end))\n }\n function abi_decode_t_struct$_SettleShared_fromMemory(headStart, end) -> value\n {\n if slt(sub(end, headStart), 0xc0) { revert(value, value) }\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, 0xc0)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n mstore(64, newFreePtr)\n value := memPtr\n mstore(memPtr, mload(headStart))\n mstore(add(memPtr, 32), mload(add(headStart, 32)))\n mstore(add(memPtr, 64), mload(add(headStart, 64)))\n mstore(add(memPtr, 96), mload(add(headStart, 96)))\n let value_1 := mload(add(headStart, 128))\n validator_revert_t_address(value_1)\n mstore(add(memPtr, 128), value_1)\n let value_2 := mload(add(headStart, 160))\n validator_revert_t_bool(value_2)\n mstore(add(memPtr, 160), value_2)\n }\n function abi_decode_t_uint8_fromMemory(offset) -> value\n {\n value := mload(offset)\n if iszero(eq(value, and(value, 0xff))) { revert(0, 0) }\n }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n }\n function abi_decode_tuple_t_addresst_addresst_array$_t_uint256_$dyn_memory_ptrt_array$_t_uint256_$dyn_memory_ptrt_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(value4, value4) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_t_address(value_1)\n value1 := value_1\n let offset := calldataload(add(headStart, 64))\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value4, value4) }\n value2 := abi_decode_t_array$_t_uint256_$dyn(add(headStart, offset), dataEnd)\n let offset_1 := calldataload(add(headStart, 96))\n if gt(offset_1, _1) { revert(value4, value4) }\n value3 := abi_decode_t_array$_t_uint256_$dyn(add(headStart, offset_1), dataEnd)\n let offset_2 := calldataload(add(headStart, 128))\n if gt(offset_2, _1) { revert(value4, value4) }\n value4 := abi_decode_t_bytes(add(headStart, offset_2), dataEnd)\n }\n function abi_decode_tuple_t_addresst_addresst_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_t_address(value_1)\n value1 := value_1\n value2 := calldataload(add(headStart, 64))\n let offset := calldataload(add(headStart, 96))\n if gt(offset, 0xffffffffffffffff) { revert(value3, value3) }\n value3 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n }\n function abi_decode_tuple_t_addresst_addresst_uint256t_uint256t_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2, value3, value4\n {\n if slt(sub(dataEnd, headStart), 160) { revert(value2, value2) }\n let value := calldataload(headStart)\n validator_revert_t_address(value)\n value0 := value\n let value_1 := calldataload(add(headStart, 32))\n validator_revert_t_address(value_1)\n value1 := value_1\n value2 := calldataload(add(headStart, 64))\n value3 := calldataload(add(headStart, 96))\n let offset := calldataload(add(headStart, 128))\n if gt(offset, 0xffffffffffffffff) { revert(value4, value4) }\n value4 := abi_decode_t_bytes(add(headStart, offset), dataEnd)\n }\n function abi_decode_tuple_t_array$_t_address_$12_memory_ptrt_addresst_array$_t_address_$dyn_memory_ptrt_address(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 480) { revert(value2, value2) }\n if iszero(slt(add(headStart, 0x1f), dataEnd)) { revert(value2, value2) }\n let _1 := 384\n let dst := allocateMemory(_1)\n let dst_1 := dst\n let src := headStart\n let _2 := add(headStart, _1)\n if gt(_2, dataEnd) { revert(value2, value2) }\n let i := value2\n for { } lt(i, 0x0c) { i := add(i, 1) }\n {\n let value := calldataload(src)\n validator_revert_t_address(value)\n mstore(dst, value)\n let _3 := 0x20\n dst := add(dst, _3)\n src := add(src, _3)\n }\n value0 := dst_1\n value1 := abi_decode_t_address(_2)\n let offset := calldataload(add(headStart, 416))\n if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n value2 := abi_decode_t_array$_t_address_$dyn(add(headStart, offset), dataEnd)\n value3 := abi_decode_t_address(add(headStart, 448))\n }\n function abi_decode_tuple_t_array$_t_address_$dyn_calldata_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := calldataload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value0, value0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(value0, value0) }\n let length := calldataload(_2)\n if gt(length, _1) { revert(value0, value0) }\n if gt(add(add(_2, mul(length, 32)), 32), dataEnd) { revert(value0, value0) }\n value0 := add(_2, 32)\n value1 := length\n }\n function abi_decode_tuple_t_array$_t_struct$_Pair1155_$4754_memory_ptr_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := 32\n if slt(sub(dataEnd, headStart), _1) { revert(value0, value0) }\n let offset := mload(headStart)\n let _2 := 0xffffffffffffffff\n if gt(offset, _2) { revert(value0, value0) }\n let _3 := add(headStart, offset)\n if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(value0, value0) }\n let _4 := mload(_3)\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_4))\n let dst_1 := dst\n mstore(dst, _4)\n dst := add(dst, _1)\n let src := add(_3, _1)\n let _5 := 0x60\n if gt(add(add(_3, mul(_4, _5)), _1), dataEnd) { revert(value0, value0) }\n let i := value0\n for { } lt(i, _4) { i := add(i, 1) }\n {\n if slt(sub(dataEnd, src), _5) { revert(value0, value0) }\n let _6 := 64\n let memPtr := mload(_6)\n let newFreePtr := add(memPtr, _5)\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { invalid() }\n mstore(_6, newFreePtr)\n let value := mload(src)\n validator_revert_t_address(value)\n mstore(memPtr, value)\n mstore(add(memPtr, _1), mload(add(src, _1)))\n mstore(add(memPtr, _6), mload(add(src, _6)))\n mstore(dst, memPtr)\n dst := add(dst, _1)\n src := add(src, _5)\n }\n value0 := dst_1\n }\n function abi_decode_tuple_t_array$_t_struct$_Pair721_$4747_memory_ptr_$dyn_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := 32\n if slt(sub(dataEnd, headStart), _1) { revert(value0, value0) }\n let offset := mload(headStart)\n let _2 := 0xffffffffffffffff\n if gt(offset, _2) { revert(value0, value0) }\n let _3 := add(headStart, offset)\n if iszero(slt(add(_3, 0x1f), dataEnd)) { revert(value0, value0) }\n let _4 := mload(_3)\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_4))\n let dst_1 := dst\n mstore(dst, _4)\n dst := add(dst, _1)\n let src := add(_3, _1)\n let _5 := 0x40\n if gt(add(add(_3, mul(_4, _5)), _1), dataEnd) { revert(value0, value0) }\n let i := value0\n for { } lt(i, _4) { i := add(i, 1) }\n {\n if slt(sub(dataEnd, src), _5) { revert(value0, value0) }\n let memPtr := mload(_5)\n let newFreePtr := add(memPtr, _5)\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { invalid() }\n mstore(_5, newFreePtr)\n let value := mload(src)\n validator_revert_t_address(value)\n mstore(memPtr, value)\n mstore(add(memPtr, _1), mload(add(src, _1)))\n mstore(dst, memPtr)\n dst := add(dst, _1)\n src := add(src, _5)\n }\n value0 := dst_1\n }\n function abi_decode_tuple_t_array$_t_struct$_PurchaseDetails_$8724_memory_ptr_$dyn_memory_ptrt_addresst_addresst_bool(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 128) { revert(value2, value2) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(value2, value2) }\n let _2 := calldataload(_1)\n let _3 := 0x20\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_2))\n let dst_1 := dst\n mstore(dst, _2)\n dst := add(dst, _3)\n let src := add(_1, _3)\n let i := value2\n for { } lt(i, _2) { i := add(i, 1) }\n {\n mstore(dst, abi_decode_t_struct$_PurchaseDetails(add(add(_1, calldataload(src)), _3), dataEnd))\n dst := add(dst, _3)\n src := add(src, _3)\n }\n value0 := dst_1\n value1 := abi_decode_t_address(add(headStart, _3))\n value2 := abi_decode_t_address(add(headStart, 64))\n value3 := abi_decode_t_bool(add(headStart, 96))\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let value := mload(headStart)\n validator_revert_t_bool(value)\n value0 := value\n }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let value := calldataload(headStart)\n validator_revert_t_bytes4(value)\n value0 := value\n }\n function abi_decode_tuple_t_enum$_Markets_$8709t_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(value0, value0) }\n value0 := abi_decode_t_enum$_Markets(headStart)\n let value := calldataload(add(headStart, 32))\n validator_revert_t_address(value)\n value1 := value\n }\n function abi_decode_tuple_t_struct$_AdditionalData_$8730_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n let _1 := 32\n if slt(sub(dataEnd, headStart), _1) { revert(value0, value0) }\n let offset := mload(headStart)\n let _2 := 0xffffffffffffffff\n if gt(offset, _2) { revert(value0, value0) }\n let _3 := add(headStart, offset)\n if slt(sub(dataEnd, _3), 0x40) { revert(value0, value0) }\n let memPtr := mload(0x40)\n let newFreePtr := add(memPtr, 0x40)\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { invalid() }\n mstore(0x40, newFreePtr)\n let offset_1 := mload(_3)\n if gt(offset_1, _2) { revert(value0, value0) }\n mstore(memPtr, abi_decode_t_bytes_fromMemory(add(_3, offset_1), dataEnd))\n let offset_2 := mload(add(_3, _1))\n if gt(offset_2, _2) { revert(value0, value0) }\n let _4 := add(_3, offset_2)\n if iszero(slt(add(_4, 0x1f), dataEnd)) { revert(value0, value0) }\n let _5 := mload(_4)\n let dst := allocateMemory(array_allocation_size_t_array$_t_address_$dyn(_5))\n let dst_1 := dst\n mstore(dst, _5)\n dst := add(dst, _1)\n let src := add(_4, _1)\n if gt(add(add(_4, mul(_5, _1)), _1), dataEnd) { revert(value0, value0) }\n let i := value0\n for { } lt(i, _5) { i := add(i, 1) }\n {\n mstore(dst, mload(src))\n dst := add(dst, _1)\n src := add(src, _1)\n }\n mstore(add(memPtr, _1), dst_1)\n value0 := memPtr\n }\n function abi_decode_tuple_t_struct$_Input_$4556_memory_ptrt_struct$_Input_$4556_memory_ptrt_bytes4_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n let offset := mload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value2, value2) }\n value0 := abi_decode_t_struct$_Input_fromMemory(add(headStart, offset), dataEnd)\n let offset_1 := mload(add(headStart, 32))\n if gt(offset_1, _1) { revert(value2, value2) }\n value1 := abi_decode_t_struct$_Input_fromMemory(add(headStart, offset_1), dataEnd)\n let value := mload(add(headStart, 64))\n validator_revert_t_bytes4(value)\n value2 := value\n }\n function abi_decode_tuple_t_struct$_PurchaseDetails_$8724_memory_ptrt_addresst_address(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(value2, value2) }\n value0 := abi_decode_t_struct$_PurchaseDetails(add(headStart, offset), dataEnd)\n let value := calldataload(add(headStart, 32))\n validator_revert_t_address(value)\n value1 := value\n let value_1 := calldataload(add(headStart, 64))\n validator_revert_t_address(value_1)\n value2 := value_1\n }\n function abi_decode_tuple_t_struct$_RunInput_$4839_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n let offset := mload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value0, value0) }\n let _2 := add(headStart, offset)\n if slt(sub(dataEnd, _2), 0x0160) { revert(value0, value0) }\n let value := allocateMemory(0xc0)\n let offset_1 := mload(_2)\n if gt(offset_1, _1) { revert(value0, value0) }\n mstore(value, abi_decode_t_array$_t_struct$_Order_$dyn_fromMemory(add(_2, offset_1), dataEnd))\n let offset_2 := mload(add(_2, 32))\n if gt(offset_2, _1) { revert(value0, value0) }\n mstore(add(value, 32), abi_decode_t_array$_t_struct$_SettleDetail_$dyn_fromMemory(add(_2, offset_2), dataEnd))\n mstore(add(value, 64), abi_decode_t_struct$_SettleShared_fromMemory(add(_2, 64), dataEnd))\n mstore(add(value, 0x60), mload(add(_2, 256)))\n mstore(add(value, 0x80), mload(add(_2, 288)))\n mstore(add(value, 0xa0), abi_decode_t_uint8_fromMemory(add(_2, 320)))\n value0 := value\n }\n function abi_decode_tuple_t_struct$_TakerOrder_$4903_memory_ptrt_struct$_MakerOrder_$4890_memory_ptrt_bytes4_fromMemory(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(value2, value2) }\n let offset := mload(headStart)\n let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(value2, value2) }\n let _2 := add(headStart, offset)\n if slt(sub(dataEnd, _2), 0xc0) { revert(value2, value2) }\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, 0xc0)\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { invalid() }\n mstore(64, newFreePtr)\n mstore(memPtr, abi_decode_t_bool_fromMemory(_2))\n mstore(add(memPtr, 32), abi_decode_t_address_fromMemory(add(_2, 32)))\n mstore(add(memPtr, 64), mload(add(_2, 64)))\n mstore(add(memPtr, 96), mload(add(_2, 96)))\n mstore(add(memPtr, 128), mload(add(_2, 128)))\n let offset_1 := mload(add(_2, 160))\n if gt(offset_1, _1) { revert(value2, value2) }\n mstore(add(memPtr, 160), abi_decode_t_bytes_fromMemory(add(_2, offset_1), dataEnd))\n value0 := memPtr\n let offset_2 := mload(add(headStart, 32))\n if gt(offset_2, _1) { revert(value2, value2) }\n value1 := abi_decode_t_struct$_MakerOrder_fromMemory(add(headStart, offset_2), dataEnd)\n value2 := abi_decode_t_bytes4_fromMemory(add(headStart, 64))\n }\n function abi_decode_tuple_t_uint256_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(value0, value0) }\n value0 := mload(headStart)\n }\n function abi_encode_t_address_payable(value, pos)\n {\n mstore(pos, and(value, sub(shl(160, 1), 1)))\n }\n function abi_encode_t_array$_t_struct$_Fee_$dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let srcPtr := add(value, _1)\n let i := end\n for { } lt(i, length) { i := add(i, 1) }\n {\n let _2 := mload(srcPtr)\n mstore(pos, and(mload(_2), 0xffff))\n mstore(add(pos, _1), and(mload(add(_2, _1)), sub(shl(160, 1), 1)))\n pos := add(pos, 0x40)\n srcPtr := add(srcPtr, _1)\n }\n end := pos\n }\n function abi_encode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n pos := add(pos, _1)\n let srcPtr := add(value, _1)\n let i := end\n for { } lt(i, length) { i := add(i, 1) }\n {\n let _2 := mload(srcPtr)\n mstore(pos, mload(_2))\n mstore(add(pos, _1), and(mload(add(_2, _1)), sub(shl(160, 1), 1)))\n pos := add(pos, 0x40)\n srcPtr := add(srcPtr, _1)\n }\n end := pos\n }\n function abi_encode_t_array$_t_struct$_OrderItem_$dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n let updated_pos := add(pos, _1)\n let pos_1 := updated_pos\n pos := updated_pos\n let tail := add(pos_1, mul(length, _1))\n let srcPtr := add(value, _1)\n let i := end\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, sub(tail, pos_1))\n let _2 := mload(srcPtr)\n let _3 := 0x40\n mstore(tail, mload(_2))\n let memberValue0 := mload(add(_2, _1))\n mstore(add(tail, _1), _3)\n tail := abi_encode_t_bytes(memberValue0, add(tail, _3))\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n end := tail\n }\n function abi_encode_t_array$_t_struct$_SettleDetail_$dyn(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n let _1 := 0x20\n let updated_pos := add(pos, _1)\n let pos_1 := updated_pos\n pos := updated_pos\n let tail := add(pos_1, mul(length, _1))\n let srcPtr := add(value, _1)\n let i := end\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, sub(tail, pos_1))\n let _2 := mload(srcPtr)\n let _3 := 0x0160\n abi_encode_t_enum$_Op(mload(_2), tail)\n mstore(add(tail, _1), mload(add(_2, _1)))\n let _4 := 0x40\n mstore(add(tail, _4), mload(add(_2, _4)))\n let _5 := 0x60\n mstore(add(tail, _5), mload(add(_2, _5)))\n let _6 := 0x80\n mstore(add(tail, _6), mload(add(_2, _6)))\n let _7 := 0xa0\n let memberValue0 := mload(add(_2, _7))\n abi_encode_t_address_payable(memberValue0, add(tail, _7))\n let _8 := 0xc0\n let memberValue0_1 := mload(add(_2, _8))\n mstore(add(tail, _8), _3)\n let tail_1 := abi_encode_t_bytes(memberValue0_1, add(tail, _3))\n let _9 := 0xe0\n mstore(add(tail, _9), mload(add(_2, _9)))\n let _10 := 0x0100\n mstore(add(tail, _10), mload(add(_2, _10)))\n let _11 := 0x0120\n mstore(add(tail, _11), mload(add(_2, _11)))\n let _12 := 0x0140\n let memberValue0_2 := mload(add(_2, _12))\n mstore(add(tail, _12), sub(tail_1, tail))\n tail := abi_encode_t_array$_t_struct$_Fee_memory_ptr_$dyn_memory_ptr(memberValue0_2, tail_1)\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n end := tail\n }\n function abi_encode_t_bool(value, pos)\n {\n mstore(pos, iszero(iszero(value)))\n }\n function abi_encode_t_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_t_enum$_Op(value, pos)\n {\n if iszero(lt(value, 8)) { invalid() }\n mstore(pos, value)\n }\n function abi_encode_t_enum$_Side(value, pos)\n {\n if iszero(lt(value, 2)) { invalid() }\n mstore(pos, value)\n }\n function abi_encode_t_struct$_Input(value, pos) -> end\n {\n let memberValue0 := mload(value)\n mstore(pos, 0xe0)\n abi_encode_t_address_payable(mload(memberValue0), add(pos, 0xe0))\n let memberValue0_1 := mload(add(memberValue0, 0x20))\n let _1 := 256\n abi_encode_t_enum$_Side(memberValue0_1, add(pos, _1))\n let memberValue0_2 := mload(add(memberValue0, 0x40))\n let _2 := 288\n abi_encode_t_address_payable(memberValue0_2, add(pos, _2))\n let memberValue0_3 := mload(add(memberValue0, 0x60))\n let _3 := 320\n abi_encode_t_address_payable(memberValue0_3, add(pos, _3))\n let _4 := mload(add(memberValue0, 0x80))\n let _5 := 352\n mstore(add(pos, _5), _4)\n let _6 := mload(add(memberValue0, 0xa0))\n let _7 := 384\n mstore(add(pos, _7), _6)\n let memberValue0_4 := mload(add(memberValue0, 0xc0))\n let _8 := 0x01a0\n abi_encode_t_address_payable(memberValue0_4, add(pos, _8))\n mstore(add(pos, 448), mload(add(memberValue0, 0xe0)))\n mstore(add(pos, 480), mload(add(memberValue0, _1)))\n mstore(add(pos, 512), mload(add(memberValue0, _2)))\n let memberValue0_5 := mload(add(memberValue0, _3))\n mstore(add(pos, 544), _8)\n let tail := abi_encode_t_array$_t_struct$_Fee_$dyn(memberValue0_5, add(pos, 640))\n mstore(add(pos, 576), mload(add(memberValue0, _5)))\n let memberValue0_6 := mload(add(memberValue0, _7))\n mstore(add(pos, 608), add(sub(tail, pos), not(223)))\n let end_1 := abi_encode_t_bytes(memberValue0_6, tail)\n let memberValue0_7 := mload(add(value, 0x20))\n abi_encode_t_uint8(memberValue0_7, add(pos, 0x20))\n mstore(add(pos, 0x40), mload(add(value, 0x40)))\n mstore(add(pos, 0x60), mload(add(value, 0x60)))\n let memberValue0_8 := mload(add(value, 0x80))\n mstore(add(pos, 0x80), sub(end_1, pos))\n let tail_1 := abi_encode_t_bytes(memberValue0_8, end_1)\n let memberValue0_9 := mload(add(value, 0xa0))\n abi_encode_t_enum$_Side(memberValue0_9, add(pos, 0xa0))\n mstore(add(pos, 0xc0), mload(add(value, 0xc0)))\n end := tail_1\n }\n function abi_encode_t_struct$_SettleShared(value, pos)\n {\n mstore(pos, mload(value))\n mstore(add(pos, 0x20), mload(add(value, 0x20)))\n mstore(add(pos, 0x40), mload(add(value, 0x40)))\n mstore(add(pos, 0x60), mload(add(value, 0x60)))\n mstore(add(pos, 0x80), and(mload(add(value, 0x80)), sub(shl(160, 1), 1)))\n mstore(add(pos, 0xa0), iszero(iszero(mload(add(value, 0xa0)))))\n }\n function abi_encode_t_uint8(value, pos)\n { mstore(pos, and(value, 0xff)) }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_address_payable__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_address_payable_t_address_payable_t_uint256__to_t_address_t_address_t_uint256__fromStack_reversed(headStart, value2, value1, value0) -> tail\n {\n tail := add(headStart, 96)\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), value2)\n }\n function abi_encode_tuple_t_address_payable_t_address_payable_t_uint256_t_uint256_t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470__to_t_address_t_address_t_uint256_t_uint256_t_bytes_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n let _1 := sub(shl(160, 1), 1)\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), value2)\n mstore(add(headStart, 96), value3)\n mstore(add(headStart, 128), 160)\n mstore(add(headStart, 160), tail)\n tail := add(headStart, 192)\n }\n function abi_encode_tuple_t_address_payable_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_address_t_uint256__to_t_address_t_uint256__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), value1)\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_bytes4__to_t_bytes4__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, shl(224, 0xffffffff)))\n }\n function abi_encode_tuple_t_stringliteral_05a847584de3c2ae6c800d1f7b0a5d67e8bceaac16366dec690fd8433d46a23a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_4 failed WETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_1461016c88004ca93c55e893467e5e7d0c1ff55121e923be5ca0e173134693e9__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_5 failed WETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_1cdf96c41f1501fb82e87942f0faf4d72a6efd57209b4dccba0c17cf2c4017c6__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 30)\n mstore(add(headStart, 64), \"Purchase wyvernExchange failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_1cf39be99a03bb39414ad01e616c59ec2038a5746618a3f8aee8a485d8d5e50a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_4 failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_2b352c406e176536877560097b51d8b7a1d4ebdd84181eeb9cfae44540c1b868__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 23)\n mstore(add(headStart, 64), \"Purchase rarible failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_2ec0a2b485cd497572ad8de2f4110630fd04a79c3fc75a9aaa133bc5c098fd7e__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 28)\n mstore(add(headStart, 64), \"Purchase rarible failed WETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_3bc896cadc7524646943368edd2f41dfd35c78e313328c146d90408931cae185__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 20)\n mstore(add(headStart, 64), \"Unknown marketId ETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_5320b653cd5780735adae92ac3bcf0fff2a8be3d44e7d778c7caac0f6e924b5d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_6 failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_5904c3e21a28364a0c2d14d132ae0ba7e1f2dcf1f9ade73ba991a7031640606b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 26)\n mstore(add(headStart, 64), \"New address cannot be zero\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 25)\n mstore(add(headStart, 64), \"Unknown purchase currency\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_6c57fe9713182a834bdd4831295dedf89e8ff161b7041e5a8170e9b0afd4c42f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 21)\n mstore(add(headStart, 64), \"Unknown marketId WETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_74739c97d81f6776122daced63f78d93149e498efd7fbf2084eabb7018fcdc3b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_1 failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_7d4fa3070cdac7b556bda72a8ba21317d4366b909fe8ae7528922ba67829f31c__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_6 failed WETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_83f62501a9582b49b15f73bfa16e8789fc9181acb73eb6b2a01520c5a8cee0ce__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_5 failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_9d7bf9b147b8e8ea1a011a4553d7d866e6536c248028d8dc1aeaa1b40c8d32c7__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Purchase SeaPort_1_1 failed WETH\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_af8784af813955ccf5679f356dd871ef58abf3a7050c9104ea0ff5ddaa4b9287__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 24)\n mstore(add(headStart, 64), \"Purchase sudoswap failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_b9e628d538abf867b76153fc9fbf92e2395d1f1d03fe95fb0b6ee129f4f808af__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 25)\n mstore(add(headStart, 64), \"unknown delegateType x2y2\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_bf725f533a31a5fc822de78c3f59575168899683c9fc9b37f7d7aa10c766d3c1__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"Purchase LooksRareV2 failed\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 18)\n mstore(add(headStart, 64), \"Unknown token type\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_e7f1a9d4424e262167e7334a51cbb1e41a967f417508d8063df52487d1f973b8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"NewMarket address is already set\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_e89eb59adf40d46cfd63ce8f1b9b12cb445413877fb23a6846b8ace3266a633d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 26)\n mstore(add(headStart, 64), \"unknown additionalDataType\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_ec72e63c53a628868607248de6752f6e953ad035609908ced114156f1eeff564__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 24)\n mstore(add(headStart, 64), \"no successful executions\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_eca0115108343535314aab82fd1751e6b0aefc82e973d3018693051f60d56563__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 28)\n mstore(add(headStart, 64), \"NewMarket address is not set\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_febc375c51703703674424cdadfabf329e51db90f4495b4c56145c8182019182__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 24)\n mstore(add(headStart, 64), \"Invalid marketplace type\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_struct$_Input_$4556_memory_ptr_t_struct$_Input_$4556_memory_ptr__to_t_struct$_Input_$4556_memory_ptr_t_struct$_Input_$4556_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 64)\n let tail_1 := abi_encode_t_struct$_Input(value0, add(headStart, 64))\n mstore(add(headStart, 32), sub(tail_1, headStart))\n tail := abi_encode_t_struct$_Input(value1, tail_1)\n }\n function abi_encode_tuple_t_struct$_RunInput_$4839_memory_ptr__to_t_struct$_RunInput_$4839_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n let _1 := 32\n mstore(headStart, _1)\n let _2 := 384\n let tail_1 := add(headStart, _2)\n let memberValue0 := mload(value0)\n let _3 := 0x0160\n mstore(add(headStart, _1), _3)\n let pos := tail_1\n let length := mload(memberValue0)\n mstore(tail_1, length)\n let _4 := 416\n pos := add(headStart, _4)\n let tail_2 := add(add(headStart, mul(length, _1)), _4)\n let srcPtr := add(memberValue0, _1)\n let i := tail\n for { } lt(i, length) { i := add(i, 1) }\n {\n mstore(pos, add(sub(tail_2, headStart), not(415)))\n let _5 := mload(srcPtr)\n mstore(tail_2, mload(_5))\n let memberValue0_1 := mload(add(_5, _1))\n abi_encode_t_address_payable(memberValue0_1, add(tail_2, _1))\n let _6 := 0x40\n mstore(add(tail_2, _6), mload(add(_5, _6)))\n let _7 := 0x60\n mstore(add(tail_2, _7), mload(add(_5, _7)))\n let _8 := 0x80\n mstore(add(tail_2, _8), mload(add(_5, _8)))\n let _9 := 0xa0\n mstore(add(tail_2, _9), mload(add(_5, _9)))\n let _10 := 0xc0\n let memberValue0_2 := mload(add(_5, _10))\n abi_encode_t_address_payable(memberValue0_2, add(tail_2, _10))\n let _11 := 0xe0\n let memberValue0_3 := mload(add(_5, _11))\n mstore(add(tail_2, _11), _4)\n let tail_3 := abi_encode_t_bytes(memberValue0_3, add(tail_2, _4))\n let _12 := 0x0100\n let memberValue0_4 := mload(add(_5, _12))\n mstore(add(tail_2, _12), sub(tail_3, tail_2))\n let tail_4 := abi_encode_t_array$_t_struct$_OrderItem_$dyn(memberValue0_4, tail_3)\n let _13 := 0x0120\n mstore(add(tail_2, _13), mload(add(_5, _13)))\n let _14 := 0x0140\n mstore(add(tail_2, _14), mload(add(_5, _14)))\n let memberValue0_5 := mload(add(_5, _3))\n abi_encode_t_uint8(memberValue0_5, add(tail_2, _3))\n let memberValue0_6 := mload(add(_5, _2))\n abi_encode_t_uint8(memberValue0_6, add(tail_2, _2))\n tail_2 := tail_4\n srcPtr := add(srcPtr, _1)\n pos := add(pos, _1)\n }\n let memberValue0_7 := mload(add(value0, _1))\n mstore(add(headStart, 0x40), add(sub(tail_2, headStart), not(31)))\n let tail_5 := abi_encode_t_array$_t_struct$_SettleDetail_$dyn(memberValue0_7, tail_2)\n let memberValue0_8 := mload(add(value0, 0x40))\n abi_encode_t_struct$_SettleShared(memberValue0_8, add(headStart, 0x60))\n mstore(add(headStart, 0x0120), mload(add(value0, 0x60)))\n mstore(add(headStart, 0x0140), mload(add(value0, 0x80)))\n let memberValue0_9 := mload(add(value0, 0xa0))\n abi_encode_t_uint8(memberValue0_9, add(headStart, _3))\n tail := tail_5\n }\n function abi_encode_tuple_t_struct$_TakerOrder_$4903_memory_ptr_t_struct$_MakerOrder_$4890_memory_ptr__to_t_struct$_TakerOrder_$4903_memory_ptr_t_struct$_MakerOrder_$4890_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, 64)\n let _1 := 256\n mstore(add(headStart, 64), iszero(iszero(mload(value0))))\n mstore(add(headStart, 96), and(mload(add(value0, 0x20)), sub(shl(160, 1), 1)))\n mstore(add(headStart, 128), mload(add(value0, 64)))\n mstore(add(headStart, 160), mload(add(value0, 96)))\n mstore(add(headStart, 0xc0), mload(add(value0, 128)))\n let memberValue0 := mload(add(value0, 160))\n mstore(add(headStart, 224), 0xc0)\n let end := abi_encode_t_bytes(memberValue0, add(headStart, _1))\n mstore(add(headStart, 0x20), sub(end, headStart))\n let _2 := 0x0200\n abi_encode_t_bool(mload(value1), end)\n let memberValue0_1 := mload(add(value1, 0x20))\n abi_encode_t_address_payable(memberValue0_1, add(end, 0x20))\n let memberValue0_2 := mload(add(value1, 64))\n abi_encode_t_address_payable(memberValue0_2, add(end, 64))\n mstore(add(end, 96), mload(add(value1, 96)))\n mstore(add(end, 128), mload(add(value1, 128)))\n mstore(add(end, 160), mload(add(value1, 160)))\n let memberValue0_3 := mload(add(value1, 0xc0))\n abi_encode_t_address_payable(memberValue0_3, add(end, 0xc0))\n let memberValue0_4 := mload(add(value1, 224))\n abi_encode_t_address_payable(memberValue0_4, add(end, 224))\n mstore(add(end, _1), mload(add(value1, _1)))\n let _3 := 0x0120\n mstore(add(end, _3), mload(add(value1, _3)))\n let _4 := 0x0140\n mstore(add(end, _4), mload(add(value1, _4)))\n let _5 := 0x0160\n mstore(add(end, _5), mload(add(value1, _5)))\n let _6 := 0x0180\n let memberValue0_5 := mload(add(value1, _6))\n mstore(add(end, _6), _2)\n let tail_1 := abi_encode_t_bytes(memberValue0_5, add(end, _2))\n let _7 := 0x01a0\n let memberValue0_6 := mload(add(value1, _7))\n abi_encode_t_uint8(memberValue0_6, add(end, _7))\n let _8 := 0x01c0\n mstore(add(end, _8), mload(add(value1, _8)))\n let _9 := 0x01e0\n mstore(add(end, _9), mload(add(value1, _9)))\n tail := tail_1\n }\n function allocateMemory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, size)\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { invalid() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_t_array$_t_address_$dyn(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { invalid() }\n size := add(mul(length, 0x20), 0x20)\n }\n function array_allocation_size_t_bytes(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { invalid() }\n size := add(and(add(length, 0x1f), not(31)), 0x20)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function validator_revert_t_address(value)\n {\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n }\n function validator_revert_t_bool(value)\n {\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n }\n function validator_revert_t_bytes4(value)\n {\n if iszero(eq(value, and(value, shl(224, 0xffffffff)))) { revert(0, 0) }\n }\n}", + "id": 67, + "language": "Yul", + "name": "#utility.yul" + } + ], + "sourceMap": "1631:29600:66:-:0;;;;;;;;;;;;;;;;;;;", + "deployedSourceMap": "1631:29600:66:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1988:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1176:148:2;;;;;;;;;;-1:-1:-1;1176:148:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;806:162:11:-;;;;;;;;;;-1:-1:-1;806:162:11;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2193:26:66:-;;;;;;;;;;;;;:::i;2136:::-;;;;;;;;;;;;;:::i;2330:19::-;;;;;;;;;;;;;:::i;1305:84:16:-;;;;;;;;;;;;;:::i;29786:1376:66:-;;;;;;;;;;-1:-1:-1;29786:1376:66;;;;;:::i;:::-;;:::i;:::-;;2075:23;;;;;;;;;;;;;:::i;1967:145:0:-;;;;;;;;;;;;;:::i;6199:1479:66:-;;;;;;:::i;:::-;;:::i;29369:234::-;;;;;;;;;;-1:-1:-1;29369:234:66;;;;;:::i;:::-;;:::i;5706:187::-;;;;;;;;;;-1:-1:-1;5706:187:66;;;;;:::i;:::-;;:::i;1335:85:0:-;;;;;;;;;;;;;:::i;2045:24:66:-;;;;;;;;;;;;;:::i;1957:25::-;;;;;;;;;;;;;:::i;8138:2387::-;;;;;;:::i;:::-;;:::i;716:201:6:-;;;;;;;;;;-1:-1:-1;716:201:6;;;;;:::i;:::-;;:::i;2104:26:66:-;;;;;;;;;;;;;:::i;4504:1065::-;;;;;;;;;;-1:-1:-1;4504:1065:66;;;;;:::i;:::-;;:::i;1922:29::-;;;;;;;;;;;;;:::i;2281:24::-;;;;;;;;;;;;;:::i;2168:19::-;;;;;;;;;;;;;:::i;537:173:6:-;;;;;;;;;;-1:-1:-1;537:173:6;;;;;:::i;:::-;;:::i;2261:240:0:-;;;;;;;;;;-1:-1:-1;2261:240:0;;;;;:::i;:::-;;:::i;2225:26:66:-;;;;;;;;;;;;;:::i;2020:19::-;;;;;;;;;;;;;:::i;1988:26::-;;;-1:-1:-1;;;;;1988:26:66;;:::o;1176:148:2:-;-1:-1:-1;;;;;;1284:33:2;;1261:4;1284:33;;;:20;:33;;;;;;;;1176:148;;;;:::o;806:162:11:-;-1:-1:-1;;;806:162:11;;;;;;:::o;2193:26:66:-;;;-1:-1:-1;;;;;2193:26:66;;:::o;2136:::-;;;-1:-1:-1;;;;;2136:26:66;;:::o;2330:19::-;;;-1:-1:-1;;;;;2330:19:66;;:::o;1305:84:16:-;1375:7;;;;1305:84;:::o;29786:1376:66:-;1558:12:0;:10;:12::i;:::-;-1:-1:-1;;;;;1547:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1547:23:0;;1539:68;;;;;-1:-1:-1;;;1539:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1539:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29895:25:66;::::1;29887:64;;;;-1:-1:-1::0;;;29887:64:66::1;;;;;;;:::i;:::-;;;;;;;;;29977:22;29966:7;:33;;;;;;;;;29962:1131;;;30015:14;:28:::0;;-1:-1:-1;;;;;;30015:28:66::1;-1:-1:-1::0;;;;;30015:28:66;::::1;;::::0;;29962:1131:::1;;;30075:18;30064:7;:29;;;;;;;;;30060:1033;;;30109:10;:24:::0;;-1:-1:-1;;;;;;30109:24:66::1;-1:-1:-1::0;;;;;30109:24:66;::::1;;::::0;;30060:1033:::1;;;30165:19;30154:7;:30;;;;;;;;;30150:943;;;30200:11;:25:::0;;-1:-1:-1;;;;;;30200:25:66::1;-1:-1:-1::0;;;;;30200:25:66;::::1;;::::0;;30150:943:::1;;;30257:12;30246:7;:23;;;;;;;;;30242:851;;;30285:4;:18:::0;;-1:-1:-1;;;;;;30285:18:66::1;-1:-1:-1::0;;;;;30285:18:66;::::1;;::::0;;30242:851:::1;;;30335:23;30324:7;:34;;;;;;;;;30320:773;;;30374:9;:23:::0;;-1:-1:-1;;;;;;30374:23:66::1;-1:-1:-1::0;;;;;30374:23:66;::::1;;::::0;;30320:773:::1;;;30429:16;30418:7;:27;;;;;;;;;30414:679;;;30461:8;:22:::0;;-1:-1:-1;;;;;;30461:22:66::1;-1:-1:-1::0;;;;;30461:22:66;::::1;;::::0;;30414:679:::1;;;30515:19;30504:7;:30;;;;;;;;;30500:593;;;30550:11;:25:::0;;-1:-1:-1;;;;;;30550:25:66::1;-1:-1:-1::0;;;;;30550:25:66;::::1;;::::0;;30500:593:::1;;;30607:19;30596:7;:30;;;;;;;;;30592:501;;;30642:11;:25:::0;;-1:-1:-1;;;;;;30642:25:66::1;-1:-1:-1::0;;;;;30642:25:66;::::1;;::::0;;30592:501:::1;;;30699:12;30688:7;:23;;;;;;;;;30684:409;;;30727:4;:18:::0;;-1:-1:-1;;;;;;30727:18:66::1;-1:-1:-1::0;;;;;30727:18:66;::::1;;::::0;;30684:409:::1;;;30777:19;30766:7;:30;;;;;;;;;30762:331;;;30812:11;:25:::0;;-1:-1:-1;;;;;;30812:25:66::1;-1:-1:-1::0;;;;;30812:25:66;::::1;;::::0;;30762:331:::1;;;30869:19;30858:7;:30;;;;;;;;;30854:239;;;30904:11;:25:::0;;-1:-1:-1;;;;;;30904:25:66::1;-1:-1:-1::0;;;;;30904:25:66;::::1;;::::0;;30854:239:::1;;;30961:17;30950:7;:28;;;;;;;;;30946:147;;;30994:9;:23:::0;;-1:-1:-1;;;;;;30994:23:66::1;-1:-1:-1::0;;;;;30994:23:66;::::1;;::::0;;30946:147:::1;;;31048:34;;-1:-1:-1::0;;;31048:34:66::1;;;;;;;:::i;30946:147::-;31143:11;-1:-1:-1::0;;;;;31108:47:66::1;31134:7;31108:47;;;;;;;;;::::0;::::1;::::0;;;::::1;29786:1376:::0;;:::o;2075:23::-;;;-1:-1:-1;;;;;2075:23:66;;:::o;1967:145:0:-;1558:12;:10;:12::i;:::-;-1:-1:-1;;;;;1547:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1547:23:0;;1539:68;;;;;-1:-1:-1;;;1539:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1539:68:0;;;;;;;;;;;;;;;2057:6:::1;::::0;2036:40:::1;::::0;2073:1:::1;::::0;-1:-1:-1;;;;;2057:6:0::1;::::0;2036:40:::1;::::0;2073:1;;2036:40:::1;2086:6;:19:::0;;-1:-1:-1;;;;;;2086:19:0::1;::::0;;1967:145::o;6199:1479:66:-;1619:8:16;:6;:8::i;:::-;1618:9;1610:38;;;;;-1:-1:-1;;;1610:38:16;;;;;;;;;;;;-1:-1:-1;;;1610:38:16;;;;;;;;;;;;;;;6436:24:66::1;6463:43;6490:15;6463:26;:43::i;:::-;6436:70:::0;-1:-1:-1;6574:20:66;;6570:134:::1;;6628:4;::::0;-1:-1:-1;;;;;6628:4:66::1;6610:36;6647:12;:10;:12::i;:::-;6669:4;6676:16;6610:83;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6570:134;6714:19;6736:33;6748:15;:20;;;6736:11;:33::i;:::-;6714:55:::0;-1:-1:-1;6779:12:66::1;::::0;;;6871:8:::1;:26;;;;;;;;;6867:603;;;6958:32;6967:15;6984:5;6958:8;:32::i;:::-;6913:77:::0;;-1:-1:-1;6913:77:66;-1:-1:-1;6913:77:66;-1:-1:-1;7004:49:66::1;6913:77:::0;7035:17;7004:14:::1;:49::i;:::-;7067:51;7082:15;7099:18;7067:14;:51::i;:::-;6867:603;;;7151:15;7139:8;:27;;;;;;;;;7135:335;;;7227:36;7240:15;7257:5;7227:12;:36::i;:::-;7182:81:::0;;-1:-1:-1;7182:81:66;-1:-1:-1;7182:81:66;-1:-1:-1;7277:50:66::1;7182:81:::0;7309:17;7277:15:::1;:50::i;:::-;7341:52;7357:15;7374:18;7341:15;:52::i;7135:335::-;7424:35;;-1:-1:-1::0;;;7424:35:66::1;;;;;;;:::i;7135:335::-;7485:18;7495:7;7485:18;;;;;;:::i;:::-;;;;;;;;7544:16;:14;:16::i;:::-;7605:20:::0;;7601:71:::1;;7641:20;:18;:20::i;:::-;1658:1:16;;;;;6199:1479:66::0;;;:::o;29369:234::-;1558:12:0;:10;:12::i;:::-;-1:-1:-1;;;;;1547:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1547:23:0;;1539:68;;;;;-1:-1:-1;;;1539:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1539:68:0;;;;;;;;;;;;;;;29460:9:66::1;29455:142;29475:26:::0;;::::1;29455:142;;;29540:4;::::0;-1:-1:-1;;;;;29540:4:66::1;29522:31;29554:15:::0;;29570:1;29554:18;;::::1;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29522:64:66::1;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29503:3:66::1;;29455:142;;;;29369:234:::0;;:::o;5706:187::-;1558:12:0;:10;:12::i;:::-;-1:-1:-1;;;;;1547:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1547:23:0;;1539:68;;;;;-1:-1:-1;;;1539:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1539:68:0;;;;;;;;;;;;;;;5794:9:66::1;::::0;-1:-1:-1;;;;;5794:9:66::1;:23:::0;5786:68:::1;;;;-1:-1:-1::0;;;5786:68:66::1;;;;;;;:::i;:::-;5864:9;:22:::0;;-1:-1:-1;;;;;;5864:22:66::1;-1:-1:-1::0;;;;;5864:22:66;;;::::1;::::0;;;::::1;::::0;;5706:187::o;1335:85:0:-;1407:6;;-1:-1:-1;;;;;1407:6:0;1335:85;:::o;2045:24:66:-;;;-1:-1:-1;;;;;2045:24:66;;:::o;1957:25::-;;;-1:-1:-1;;;;;1957:25:66;;:::o;8138:2387::-;1619:8:16;:6;:8::i;:::-;1618:9;1610:38;;;;;-1:-1:-1;;;1610:38:16;;;;;;;;;;;;-1:-1:-1;;;1610:38:16;;;;;;;;;;;;;;;8352:23:66::1;8389:24:::0;8427::::1;8465:25:::0;8504:11:::1;8581:24:::0;8624:9:::1;8619:162;8643:15;:22;8639:1;:26;8619:162;;;8724:46;8751:15;8767:1;8751:18;;;;;;;;;;;;;;8724:26;:46::i;:::-;8705:65:::0;;::::1;::::0;8667:3:::1;;8619:162;;;-1:-1:-1::0;8848:20:66;;8844:134:::1;;8902:4;::::0;-1:-1:-1;;;;;8902:4:66::1;8884:36;8921:12;:10;:12::i;:::-;8943:4;8950:16;8884:83;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8844:134;8993:9;8988:1006;9012:15;:22;9008:1;:26;8988:1006;;;9055:19;9077:36;9089:15;9105:1;9089:18;;;;;;;;;;;;;;:23;;;9077:11;:36::i;:::-;9055:58:::0;-1:-1:-1;9127:12:66::1;::::0;;;9231:8:::1;:26;;;;;;;;;9227:679;;;9322:39;9331:15;9347:1;9331:18;;;;;;;;;;;;;;9351:9;9322:8;:39::i;:::-;9277:84:::0;;-1:-1:-1;9277:84:66;-1:-1:-1;9277:84:66;-1:-1:-1;9398:35:66::1;:15:::0;9277:84;9398:19:::1;:35::i;:::-;9380:53:::0;-1:-1:-1;9470:37:66::1;:16:::0;9491:15;9470:20:::1;:37::i;:::-;9451:56;;9227:679;;;9544:15;9532:8;:27;;;;;;;;;9528:378;;;9624:43;9637:15;9653:1;9637:18;;;;;;;;;;;;;;9657:9;9624:12;:43::i;:::-;9579:88:::0;;-1:-1:-1;9579:88:66;-1:-1:-1;9579:88:66;-1:-1:-1;9705:36:66::1;:16:::0;9579:88;9705:20:::1;:36::i;:::-;9686:55:::0;-1:-1:-1;9779:38:66::1;:17:::0;9801:15;9779:21:::1;:38::i;:::-;9759:58;;9528:378;9929:6;:17;;;;9939:7;9929:17;9920:26;;9965:18;9975:7;9965:18;;;;;;:::i;:::-;;;;;;;;8988:1006;;;;9036:3;;;;;8988:1006;;;;10012:6;10004:43;;;;-1:-1:-1::0;;;10004:43:66::1;;;;;;;:::i;:::-;10084:50;10099:15;10116:17;10084:14;:50::i;:::-;10144:52;10159:16;10177:18;10144:14;:52::i;:::-;10234;10250:16;10268:17;10234:15;:52::i;:::-;10296:54;10312:17;10331:18;10296:15;:54::i;:::-;10391:16;:14;:16::i;:::-;10452:20:::0;;10448:71:::1;;10488:20;:18;:20::i;:::-;1658:1:16;;;;;;8138:2387:66::0;;;;:::o;716:201:6:-;-1:-1:-1;;;716:201:6;;;;;;;:::o;2104:26:66:-;;;-1:-1:-1;;;;;2104:26:66;;:::o;4504:1065::-;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;4716:16:66::1;:14;:16::i;:::-;4742:21;:19;:21::i;:::-;4773:22;:20;:22::i;:::-;4805:17;:15;:17::i;:::-;4850:16:::0;;4833:14:::1;:33:::0;;-1:-1:-1;;;;;;4833:33:66;;::::1;-1:-1:-1::0;;;;;4833:33:66;;::::1;;::::0;;;4850:16:::1;4889::::0;::::1;::::0;4876:10:::1;:29:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;4929:16;;::::1;::::0;4915:11:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;4962:16;;::::1;::::0;4955:4:::1;:23:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;5000:16;;::::1;::::0;4988:9:::1;:28:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;5037:16;;::::1;::::0;5026:8:::1;:27:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;5077:16;;::::1;::::0;5063:11:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;5117:16;;::::1;::::0;5103:11:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;5150:16;;::::1;::::0;5143:4:::1;:23:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;5190:16;;::::1;::::0;5176:11:::1;:30:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;5230:17;;::::1;::::0;5216:11:::1;:31:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;5269:17;::::1;::::0;5257:9:::1;:29:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;5297:4:::1;:12:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;5320:200:66::1;5344:16;:23;5340:1;:27;5320:200;;;5392:4;::::0;-1:-1:-1;;;;;5392:4:66::1;:18:::0;5388:122:::1;;5448:4;::::0;5462:19;;-1:-1:-1;;;;;5448:4:66;;::::1;::::0;5430:31:::1;::::0;5462:16;;5479:1;;5462:19;::::1;;;;;;;;;;;-1:-1:-1::0;;5430:65:66::1;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5388:122;5369:3;;5320:200;;;;5530:32;5548:13;5530:17;:32::i;:::-;1794:14:5::0;1790:66;;;1840:5;1824:21;;-1:-1:-1;;1824:21:5;;;1790:66;4504:1065:66;;;;;:::o;1922:29::-;;;-1:-1:-1;;;;;1922:29:66;;:::o;2281:24::-;;;-1:-1:-1;;;;;2281:24:66;;:::o;2168:19::-;;;-1:-1:-1;;;;;2168:19:66;;:::o;537:173:6:-;-1:-1:-1;;;537:173:6;;;;;;;:::o;2261:240:0:-;1558:12;:10;:12::i;:::-;-1:-1:-1;;;;;1547:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1547:23:0;;1539:68;;;;;-1:-1:-1;;;1539:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1539:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;2349:22:0;::::1;2341:73;;;;-1:-1:-1::0;;;2341:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2450:6;::::0;2429:38:::1;::::0;-1:-1:-1;;;;;2429:38:0;;::::1;::::0;2450:6:::1;::::0;2429:38:::1;::::0;2450:6:::1;::::0;2429:38:::1;2477:6;:17:::0;;-1:-1:-1;;;;;;2477:17:0::1;-1:-1:-1::0;;;;;2477:17:0;;;::::1;::::0;;;::::1;::::0;;2261:240::o;2225:26:66:-;;;-1:-1:-1;;;;;2225:26:66;;:::o;2020:19::-;;;-1:-1:-1;;;;;2020:19:66;;:::o;828:104:15:-;915:10;828:104;:::o;28196:1022:66:-;28286:7;28305:14;28322:1;28305:18;;28334:19;28356:24;28368:6;:11;;;28356;:24::i;:::-;28334:46;-1:-1:-1;28487:15:66;28475:8;:27;;;;;;;;;28471:717;;;28561:13;;;;28672:11;;;;28552:22;;;;28613;;;;28664:35;;:7;:35::i;:::-;28612:87;;;;28748:15;28731:14;28722:6;:23;:41;28713:50;;28809:26;28839:67;28864:6;:11;;;28877:6;:11;;;28890:6;:15;;;28839:24;:67::i;:::-;28806:100;;;28925:9;28920:258;28944:9;:16;28940:1;:20;28920:258;;;28985:24;29036:3;29020:9;29030:1;29020:12;;;;;;;;;;;;;;:19;;28985:55;;29058:20;29081:34;29098:16;29081:6;:13;;;:16;;:34;;;;:::i;:::-;29142:21;;;;;-1:-1:-1;;28962:3:66;;28920:258;;;;28471:717;;;;-1:-1:-1;29205:6:66;28196:1022;-1:-1:-1;;28196:1022:66:o;24501:124::-;24559:10;24614:2;24606:4;:10;;24588:30;;;;;;;;;;24581:37;24501:124;-1:-1:-1;;24501:124:66:o;10970:8298::-;11091:4;11109:7;11130;11163:23;11188:36;11228:94;11253:15;:20;;;11275:15;:20;;;11297:15;:24;;;11228;:94::i;:::-;11356:22;;;;11162:160;;-1:-1:-1;11162:160:66;-1:-1:-1;11420:19:66;11392:24;;:47;;;;;;;;;11388:7583;;;11482:11;;11474:59;;11456:12;;-1:-1:-1;;;;;11482:11:66;;11507:13;;11474:59;;11522:10;;11474:59;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11455:78;;;11551:9;11547:208;;;11585:7;11580:75;;11624:5;11631:1;11634;11616:20;;;;;;;;;;;;11580:75;11547:208;;;11701:7;11693:47;;;;-1:-1:-1;;;11693:47:66;;;;;;;:::i;:::-;11388:7583;;;;11803:22;11775:24;;:50;;;;;;;;;11771:7200;;;11868:14;;11860:62;;11842:12;;-1:-1:-1;;;;;11868:14:66;;11896:13;;11860:62;;11911:10;;11860:62;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11841:81;;;11940:9;11936:211;;;11974:7;11969:75;;12013:5;12020:1;12023;12005:20;;;;;;;;;;;;11936:211;12090:7;12082:50;;;;-1:-1:-1;;;12082:50:66;;;;;;;:::i;11771:7200::-;12195:18;12167:24;;:46;;;;;;;;;12163:6808;;;12256:10;;12248:58;;12230:12;;-1:-1:-1;;;;;12256:10:66;;12280:13;;12248:58;;12295:10;;12248:58;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12229:77;;;12324:9;12320:204;;;12358:7;12353:75;;12397:5;12404:1;12407;12389:20;;;;;;;;;;;;12320:204;12474:7;12466:43;;;;-1:-1:-1;;;12466:43:66;;;;;;;:::i;12163:6808::-;12572:12;12544:24;;:40;;;;;;;;;12540:6431;;;12600:27;12641:10;12630:40;;;;;;;;;;;;:::i;:::-;12600:70;;12689:9;12685:249;;;12728:4;;12722:44;;-1:-1:-1;;;12722:44:66;;-1:-1:-1;;;;;12728:4:66;;;;12722:15;;12745:13;;12722:44;;12760:5;;12722:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12718:119;;12806:5;12813:1;12816;12798:20;;;;;;;;;;;;12718:119;12685:249;;;12881:4;;12875:44;;-1:-1:-1;;;12875:44:66;;-1:-1:-1;;;;;12881:4:66;;;;12875:15;;12898:13;;12875:44;;12913:5;;12875:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12685:249;13135:9;13130:1576;13154:5;:13;;;:20;13150:1;:24;13130:1576;;;13199:15;13217:5;:13;;;13231:1;13217:16;;;;;;;;;;;;;;:25;;;13199:43;;13260:14;13277:5;:13;;;13291:1;13277:16;;;;;;;;;;;;;;:24;;;13260:41;;13319:17;13339:5;:12;;;13352:7;13339:21;;;;;;;;;;;;;;:27;;;13367:6;13339:35;;;;;;;;;;;;;;:40;;;13319:60;;13463:1;13423:5;:12;;;13436:7;13423:21;;;;;;;;;;;;;;:30;;;:37;:41;:88;;;;;13510:1;13468:5;:13;;;13482:1;13468:16;;;;;;;;;;;;;;:32;;;:39;:43;13423:88;13419:228;;;13539:85;13553:4;13559:5;:13;;;13573:1;13559:16;;;;;;;;;;;;;;:32;;;13593:5;:12;;;13606:7;13593:21;;;;;;;;;;;;;;:30;;;13539:13;:85::i;:::-;13718:12;;:21;;13731:7;;13718:21;;;;;;;;;;;;:34;;;13756:1;13718:39;13714:978;;;13781:28;13823:4;13812:35;;;;;;;;;;;;:::i;:::-;13781:66;;13875:9;13870:244;13894:5;:12;13890:1;:16;13870:244;;;13939:22;13964:5;13970:1;13964:8;;;;;;;;;;;;;;13939:33;;14025:1;:7;;;-1:-1:-1;;;;;13998:53:66;;14060:4;14067:12;:10;:12::i;:::-;14081:1;:9;;;13998:93;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13908:3:66;;;;;-1:-1:-1;13870:244:66;;-1:-1:-1;;13870:244:66;;;13714:978;;;;14142:12;;:21;;14155:7;;14142:21;;;;;;;;;;;;:34;;;14180:1;14142:39;14138:554;;;14241:29;14284:4;14273:36;;;;;;;;;;;;:::i;:::-;14241:68;;14337:9;14332:260;14356:5;:12;14352:1;:16;14332:260;;;14401:23;14427:5;14433:1;14427:8;;;;;;;;;;;;;;14401:34;;14489:1;:7;;;-1:-1:-1;;;;;14461:54:66;;14524:4;14531:12;:10;:12::i;:::-;14545:1;:9;;;14556:1;:8;;;14461:108;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14370:3:66;;;;;-1:-1:-1;14332:260:66;;-1:-1:-1;;14332:260:66;14138:554;14638:35;;-1:-1:-1;;;14638:35:66;;;;;;;:::i;14138:554::-;13130:1576;;;13176:3;;;;;13130:1576;;;;12540:6431;;;;14754:23;14726:24;;:51;;;;;;;;;14722:4249;;;14794:41;14837;14880:14;14909:10;14898:82;;;;;;;;;;;;:::i;:::-;14793:187;;;;;;14998:9;14994:367;;;15042:9;;15031:103;;-1:-1:-1;;;15031:103:66;;-1:-1:-1;;;;;15042:9:66;;;;15031:57;;15096:13;;15031:103;;15111:10;;15123;;15031:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15027:178;;15174:5;15181:1;15184;15166:20;;;;;;;;;;;;;;15027:178;14994:367;;;15254:9;;15243:103;;-1:-1:-1;;;15243:103:66;;-1:-1:-1;;;;;15254:9:66;;;;15243:57;;15308:13;;15243:103;;15323:10;;15335;;15243:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14994:367;-1:-1:-1;;;;;;15378:38:66;;-1:-1:-1;;;15378:38:66;15374:466;;;15455:10;:21;;;-1:-1:-1;;;;;15436:58:66;;15503:4;15510:12;:10;:12::i;:::-;15524:10;:18;;;15436:107;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15374:466;;;-1:-1:-1;;;;;;15568:39:66;;-1:-1:-1;;;15568:39:66;15564:276;;;15647:10;:21;;;-1:-1:-1;;;;;15627:59:66;;15695:4;15702:12;:10;:12::i;:::-;15716:10;:18;;;15736:10;:17;;;15627:131;;;;;;;;;;;;;;;;;;:::i;15564:276::-;15797:28;;-1:-1:-1;;;15797:28:66;;;;;;;:::i;15564:276::-;14722:4249;;;;;;15888:16;15860:24;;:44;;;;;;;;;15856:3115;;;15947:8;;15939:56;;15921:12;;-1:-1:-1;;;;;15947:8:66;;15969:13;;15939:56;;15984:10;;15939:56;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15920:75;;;16013:9;16009:205;;;16047:7;16042:75;;16086:5;16093:1;16096;16078:20;;;;;;;;;;;;16009:205;16163:7;16155:44;;;;-1:-1:-1;;;16155:44:66;;;;;;;:::i;15856:3115::-;16262:19;16234:24;;:47;;;;;;;;;16230:2741;;;16324:11;;16316:59;;16298:12;;-1:-1:-1;;;;;16324:11:66;;16349:13;;16316:59;;16364:10;;16316:59;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16297:78;;;16393:9;16389:208;;;16427:7;16422:75;;16466:5;16473:1;16476;16458:20;;;;;;;;;;;;16389:208;16543:7;16535:47;;;;-1:-1:-1;;;16535:47:66;;;;;;;:::i;16230:2741::-;16645:19;16617:24;;:47;;;;;;;;;16613:2358;;;16707:11;;16699:59;;16681:12;;-1:-1:-1;;;;;16707:11:66;;16732:13;;16699:59;;16747:10;;16699:59;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16680:78;;;16776:9;16772:208;;;16810:7;16805:75;;16849:5;16856:1;16859;16841:20;;;;;;;;;;;;16772:208;16926:7;16918:47;;;;-1:-1:-1;;;16918:47:66;;;;;;;:::i;16613:2358::-;17028:12;17000:24;;:40;;;;;;;;;16996:1975;;;17057:23;17082:22;17106:14;17135:10;17124:58;;;;;;;;;;;;:::i;:::-;17056:126;;;;;;17200:9;17196:265;;;17239:4;;17233:52;;-1:-1:-1;;;17233:52:66;;-1:-1:-1;;;;;17239:4:66;;;;17233:19;;17260:13;;17233:52;;17275:4;;17281:3;;17233:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17229:127;;17325:5;17332:1;17335;17317:20;;;;;;;;;;;;;;17229:127;17196:265;;;17400:4;;17394:52;;-1:-1:-1;;;17394:52:66;;-1:-1:-1;;;;;17400:4:66;;;;17394:19;;17421:13;;17394:52;;17436:4;;17442:3;;17394:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17196:265;-1:-1:-1;;;;;;17478:38:66;;-1:-1:-1;;;17478:38:66;17474:466;;;17555:10;;:21;;;-1:-1:-1;;;;;17536:58:66;;17603:4;17610:12;:10;:12::i;:::-;17624:10;;:18;;;17536:107;;-1:-1:-1;;;;;;17536:107:66;;;;;;;;;;;17624:18;17536:107;;;:::i;17474:466::-;-1:-1:-1;;;;;;17668:39:66;;-1:-1:-1;;;17668:39:66;17664:276;;;17747:10;;:21;;;-1:-1:-1;;;;;17727:59:66;;17795:4;17802:12;:10;:12::i;:::-;17816:10;;:18;;;;17836:17;;;;;17727:131;;-1:-1:-1;;;;;;17727:131:66;;;;;;;;;;;17816:18;17836:17;17727:131;;;:::i;16996:1975::-;17988:19;17960:24;;:47;;;;;;;;;17956:1015;;;18050:11;;18042:59;;18024:12;;-1:-1:-1;;;;;18050:11:66;;18075:13;;18042:59;;18090:10;;18042:59;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18023:78;;;18119:9;18115:208;;;18153:7;18148:75;;18192:5;18199:1;18202;18184:20;;;;;;;;;;;;18115:208;18269:7;18261:47;;;;-1:-1:-1;;;18261:47:66;;;;;;;:::i;17956:1015::-;18371:19;18343:24;;:47;;;;;;;;;18339:632;;;18433:11;;18425:59;;18407:12;;-1:-1:-1;;;;;18433:11:66;;18458:13;;18425:59;;18473:10;;18425:59;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18406:78;;;18502:9;18498:208;;;18536:7;18531:75;;18575:5;18582:1;18585;18567:20;;;;;;;;;;;;18498:208;18652:7;18644:47;;;;-1:-1:-1;;;18644:47:66;;;;;;;:::i;18339:632::-;18754:17;18726:24;;:45;;;;;;;;;18722:249;;;18843:9;;-1:-1:-1;;;;;18843:9:66;18835:64;;;;-1:-1:-1;;;18835:64:66;;;;;;;:::i;:::-;18722:249;;;18930:30;;-1:-1:-1;;;18930:30:66;;;;;;;:::i;18722:249::-;19014:75;19045:19;19066:15;:22;;;19014:30;:75::i;:::-;19101:22;19125:23;19152:53;19160:15;:20;;;19182:15;:22;;;19152:7;:53::i;:::-;19223:4;;-1:-1:-1;19100:105:66;;-1:-1:-1;19100:105:66;-1:-1:-1;;;;;;10970:8298:66;;;;;;:::o;22469:212::-;22569:1;22557:9;:13;:43;;;;-1:-1:-1;;;;;;22574:26:66;;;;22557:43;22553:122;;;22616:48;22640:12;22654:9;22616:23;:48::i;:::-;22469:212;;:::o;19714:2577::-;19839:4;19857:7;19878;19911:23;19936:36;19976:94;20001:15;:20;;;20023:15;:20;;;20045:15;:24;;;19976;:94::i;:::-;19910:160;;-1:-1:-1;19910:160:66;-1:-1:-1;20130:19:66;20102:24;;:47;;;;;;;;;20098:1880;;;20192:11;;20184:37;;20166:12;;-1:-1:-1;;;;;20192:11:66;;20184:37;;20210:10;;20184:37;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20165:56;;;20239:9;20235:213;;;20273:7;20268:75;;20312:5;20319:1;20322;20304:20;;;;;;;;;;;20268:75;20235:213;;;20389:7;20381:52;;;;-1:-1:-1;;;20381:52:66;;;;;;;:::i;:::-;20098:1880;;;;20496:18;20468:24;;:46;;;;;;;;;20464:1514;;;20557:10;;20549:36;;20531:12;;-1:-1:-1;;;;;20557:10:66;;20549:36;;20574:10;;20549:36;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20530:55;;;20603:9;20599:209;;;20637:7;20632:75;;20676:5;20683:1;20686;20668:20;;;;;;;;;;;20599:209;20753:7;20745:48;;;;-1:-1:-1;;;20745:48:66;;;;;;;:::i;20464:1514::-;20856:19;20828:24;;:47;;;;;;;;;20824:1154;;;20918:11;;20910:37;;20892:12;;-1:-1:-1;;;;;20918:11:66;;20910:37;;20936:10;;20910:37;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20891:56;;;20965:9;20961:213;;;20999:7;20994:75;;21038:5;21045:1;21048;21030:20;;;;;;;;;;;20961:213;21115:7;21107:52;;;;-1:-1:-1;;;21107:52:66;;;;;;;:::i;20824:1154::-;21222:19;21194:24;;:47;;;;;;;;;21190:788;;;21284:11;;21276:37;;21258:12;;-1:-1:-1;;;;;21284:11:66;;21276:37;;21302:10;;21276:37;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21257:56;;;21331:9;21327:213;;;21365:7;21360:75;;21404:5;21411:1;21414;21396:20;;;;;;;;;;;21327:213;21481:7;21473:52;;;;-1:-1:-1;;;21473:52:66;;;;;;;:::i;21190:788::-;21588:19;21560:24;;:47;;;;;;;;;21556:422;;;21650:11;;21642:37;;21624:12;;-1:-1:-1;;;;;21650:11:66;;21642:37;;21668:10;;21642:37;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21623:56;;;21697:9;21693:213;;;21731:7;21726:75;;21770:5;21777:1;21780;21762:20;;;;;;;;;;;21693:213;21847:7;21839:52;;;;-1:-1:-1;;;21839:52:66;;;;;;;:::i;21556:422::-;21936:31;;-1:-1:-1;;;21936:31:66;;;;;;;:::i;21556:422::-;22017:76;22049:19;22070:15;:22;;;22017:31;:76::i;:::-;22124:22;22148:23;22175:53;22183:15;:20;;;22205:15;:22;;;22175:7;:53::i;:::-;22246:4;;22123:105;;-1:-1:-1;22123:105:66;-1:-1:-1;19714:2577:66;-1:-1:-1;;;;;;;19714:2577:66:o;22860:222::-;22961:1;22949:9;:13;:43;;;;-1:-1:-1;;;;;;22966:26:66;;;;22949:43;22945:131;;;23026:4;;23008:57;;-1:-1:-1;;;23008:57:66;;-1:-1:-1;;;;;23026:4:66;;;;23008:32;;:57;;23041:12;;23055:9;;23008:57;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23152:188::-;23217:21;23252:13;;23248:86;;23281:42;23289:10;23313:9;23281:31;:42::i;:::-;23152:188;:::o;23415:237::-;23503:4;;23485:48;;-1:-1:-1;;;23485:48:66;;23464:18;;-1:-1:-1;;;;;23503:4:66;;23485:33;;:48;;23527:4;;23485:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23464:69;-1:-1:-1;23547:14:66;;23543:103;;23595:4;;-1:-1:-1;;;;;23595:4:66;23577:32;23610:12;:10;:12::i;:::-;23624:10;23577:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2701:175:4:-;2759:7;2790:5;;;2813:6;;;;2805:46;;;;;-1:-1:-1;;;2805:46:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;2868:1;2701:175;-1:-1:-1;;;2701:175:4:o;1952:123:5:-;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;935:126:0:-;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;992:26:0::1;:24;:26::i;:::-;1028;:24;:26::i;:::-;1794:14:5::0;1790:66;;;1840:5;1824:21;;-1:-1:-1;;1824:21:5;;;935:126:0;:::o;483:100:11:-;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;545:31:11::1;:29;:31::i;275:181:6:-:0;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;338:25:6::1;:23;:25::i;:::-;373:34;:32;:34::i;986:128:16:-:0;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;1044:26:16::1;:24;:26::i;:::-;1080:27;:25;:27::i;24056:262:66:-:0;24126:7;;24173:27;24196:2;24188:10;;;24173:27;;;24230:21;;24269:19;:6;24173:27;24269:9;:19::i;:::-;24290:20;:6;24300:9;24290;:20::i;:::-;24261:50;;;;;;24056:262;;;;;:::o;24901:1018::-;25051:12;25065:16;25093:28;25170:2;25151:15;:21;;25124:50;;;;;;;;;;25093:81;-1:-1:-1;25184:36:66;25296;25284:8;:48;;;;;;;;;25280:114;;;25356:5;;-1:-1:-1;25363:19:66;-1:-1:-1;25348:35:66;;-1:-1:-1;25348:35:66;25280:114;25420:43;25408:8;:55;;;;;;;;;25404:462;;;25479:36;25529:5;25518:35;;;;;;;;;;;;:::i;:::-;25479:74;;25642:27;25660:8;25642:17;:27::i;:::-;25638:218;;;25697:14;:19;;;25718:14;:34;;;25689:64;;;;;;;;;25638:218;25800:19;;-1:-1:-1;25821:19:66;-1:-1:-1;25792:49:66;;-1:-1:-1;25792:49:66;25404:462;25876:36;;-1:-1:-1;;;25876:36:66;;;;;;;:::i;24901:1018::-;;;;;;;:::o;198:120:45:-;259:4;282:29;305:5;282:18;:5;292:7;282:9;:18::i;:::-;:22;;:29::i;27310:389:66:-;27480:11;:18;27466:3;:10;:32;27458:41;;;;;;27531:4;:11;27517:3;:10;:25;27509:34;;;;;;27559:9;27554:139;27578:3;:10;27574:1;:14;27554:139;;;27613:4;27618:1;27613:7;;;;;;;;;;;;-1:-1:-1;;;;;;27613:7:66;:12;27609:74;;27654:11;27666:1;27654:14;;;;;;;;;;;;;;;;27645:3;27649:1;27645:6;;;;;;;;;;;:23;-1:-1:-1;;;;;27645:23:66;;;;;;;;;27609:74;27590:3;;27554:139;;;;27310:389;;;:::o;26085:514::-;26204:9;26199:394;26223:20;:27;26219:1;:31;26199:394;;;26301:1;26275:20;26296:1;26275:23;;;;;;;;;;;;;;:27;26271:312;;;26322:23;26364:20;26385:1;26364:23;;;;;;;;;;;;;;26322:67;;26407:17;26462:3;26435:20;26456:1;26435:23;;;;;;;;;;;;;;:30;;26407:59;;26484:13;26500:20;26510:9;26500:6;:9;;:20;;;;:::i;:::-;26484:36;;26538:30;26553:5;26560:7;26538:14;:30::i;:::-;26271:312;;;;26252:3;;26199:394;;83:161:63;165:27;;148:12;;-1:-1:-1;;;;;165:7:63;;;181:5;;148:12;165:27;148:12;165:27;181:5;165:7;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;147:45;;;210:7;202:35;;;;;-1:-1:-1;;;202:35:63;;;;;;;;;;;;-1:-1:-1;;;202:35:63;;;;;;;;;;;;;;26766:516:66;26886:9;26881:395;26905:20;:27;26901:1;:31;26881:395;;;26983:1;26957:20;26978:1;26957:23;;;;;;;;;;;;;;:27;26953:313;;;27004:23;27046:20;27067:1;27046:23;;;;;;;;;;;;;;27004:67;;27089:17;27144:3;27117:20;27138:1;27117:23;;;;;;;;;;;;;;:30;;27089:59;;27166:13;27182:20;27192:9;27182:6;:9;;:20;;;;:::i;:::-;27166:36;;27220:31;27236:5;27243:7;27220:15;:31::i;:::-;26953:313;;;;26934:3;;26881:395;;737:413:14;1097:20;1135:8;;;737:413::o;759:64:15:-;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1794:14;1790:66;;;1840:5;1824:21;;-1:-1:-1;;1824:21:5;;;759:64:15;:::o;1067:192:0:-;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;1134:17:0::1;1154:12;:10;:12::i;:::-;1176:6;:18:::0;;-1:-1:-1;;;;;;1176:18:0::1;-1:-1:-1::0;;;;;1176:18:0;::::1;::::0;;::::1;::::0;;;1209:43:::1;::::0;1176:18;;-1:-1:-1;1176:18:0;-1:-1:-1;;1209:43:0::1;::::0;-1:-1:-1;;1209:43:0::1;1778:1:5;1794:14:::0;1790:66;;;1840:5;1824:21;;-1:-1:-1;;1824:21:5;;;1067:192:0;:::o;777:249:2:-;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;979:40:2::1;-1:-1:-1::0;;;979:18:2::1;:40::i;506:274:7:-:0;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;581:192:7::1;-1:-1:-1::0;;;581:18:7::1;:192::i;1120:90:16:-:0;1512:13:5;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:5;;;;1549:13;1512:50;1504:109;;;;-1:-1:-1;;;1504:109:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;-1:-1:-1;;;;1704:20:5;;;;;1738:19;1720:4;1738:19;;;1670:98;1188:7:16::1;:15:::0;;-1:-1:-1;;1188:15:16::1;::::0;;1790:66:5;;;;1840:5;1824:21;;-1:-1:-1;;1824:21:5;;;1120:90:16;:::o;27933:257:66:-;28001:4;28033:16;28021:8;:28;;;;;;;;;:67;;;-1:-1:-1;28065:23:66;28053:8;:35;;;;;;;;;28021:67;:102;;;-1:-1:-1;28104:19:66;28092:8;:31;;;;;;;;;28021:102;28017:144;;;-1:-1:-1;28146:4:66;28139:11;;28017:144;-1:-1:-1;28178:5:66;27933:257;;;:::o;3549:215:4:-;3607:7;3630:6;3626:20;;-1:-1:-1;3645:1:4;3638:8;;3626:20;3668:5;;;3672:1;3668;:5;:1;3691:5;;;;;:10;3683:56;;;;-1:-1:-1;;;3683:56:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4228:150;4286:7;4317:1;4313;:5;4305:44;;;;;-1:-1:-1;;;4305:44:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;4370:1;4366;:5;;;;;;;4228:150;-1:-1:-1;;;4228:150:4:o;1718:198:2:-;-1:-1:-1;;;;;;1801:25:2;;;;;1793:66;;;;;-1:-1:-1;;;1793:66:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1869:33:2;;;;;:20;:33;;;;;:40;;-1:-1:-1;;1869:40:2;1905:4;1869:40;;;1718:198::o;14:138:67:-;84:20;;113:33;84:20;113:33;:::i;157:142::-;238:13;;260:33;238:13;260:33;:::i;304:782::-;;417:3;410:4;402:6;398:17;394:27;384:2;;439:5;432;425:20;384:2;479:6;466:20;505:4;529:65;544:49;590:2;544:49;:::i;:::-;529:65;:::i;:::-;628:15;;;659:12;;;;691:15;;;737:11;;;725:24;;721:33;;718:42;-1:-1:-1;715:2:67;;;777:5;770;763:20;715:2;803:5;817:240;831:2;828:1;825:9;817:240;;;902:3;889:17;919:33;946:5;919:33;:::i;:::-;965:18;;1003:12;;;;1035;;;;849:1;842:9;817:240;;;-1:-1:-1;1075:5:67;;374:712;-1:-1:-1;;;;;;;374:712:67:o;1091:1285::-;;1219:3;1212:4;1204:6;1200:17;1196:27;1186:2;;1241:5;1234;1227:20;1186:2;1274:6;1268:13;1300:4;1324:65;1339:49;1385:2;1339:49;:::i;1324:65::-;1423:15;;;1454:12;;;;1486:15;;;1520:4;1555:11;;;1543:24;;1539:33;;1536:42;-1:-1:-1;1533:2:67;;;1595:5;1588;1581:20;1533:2;1621:5;1635:712;1649:2;1646:1;1643:9;1635:712;;;1716:2;1710:3;1705;1701:13;1697:22;1694:2;;;1736:5;1729;1722:20;1694:2;1777;1771:9;1823:2;1815:6;1811:15;1896:6;1884:10;1881:22;-1:-1:-1;;;;;1848:10:67;1845:34;1842:62;1839:2;;;1907:9;1839:2;1931:22;;1979:10;;2033:6;2022:18;;2012:29;;2002:2;;2059:5;2052;2045:20;2002:2;2080:21;;2135:12;;;2129:19;2161:35;2129:19;2161:35;:::i;:::-;2216:15;;;2209:32;2254:19;;2293:12;;;;2325;;;;1667:1;1660:9;1635:712;;;-1:-1:-1;2365:5:67;;1176:1200;-1:-1:-1;;;;;;;;1176:1200:67:o;2381:1192::-;;2531:3;2524:4;2516:6;2512:17;2508:27;2498:2;;2553:5;2546;2539:20;2498:2;2586:6;2580:13;2612:4;2636:65;2651:49;2697:2;2651:49;:::i;2636:65::-;2735:15;;;2766:12;;;;2798:15;;;2832:4;2867:11;;;2855:24;;2851:33;;2848:42;-1:-1:-1;2845:2:67;;;2907:5;2900;2893:20;2845:2;2933:5;2947:597;2961:2;2958:1;2955:9;2947:597;;;3028:2;3022:3;3017;3013:13;3009:22;3006:2;;;3048:5;3041;3034:20;3006:2;3089;3083:9;3135:2;3127:6;3123:15;3208:6;3196:10;3193:22;-1:-1:-1;;;;;3160:10:67;3157:34;3154:62;3151:2;;;3219:9;3151:2;3243:22;;3293:10;;3278:26;;3336:12;;;3330:19;3362:33;3330:19;3362:33;:::i;:::-;3415:15;;;3408:30;3451:19;;3490:12;;;;3522;;;;2979:1;2972:9;2947:597;;3578:1263;;3712:3;3705:4;3697:6;3693:17;3689:27;3679:2;;3734:5;3727;3720:20;3679:2;3767:6;3761:13;3793:4;3817:65;3832:49;3878:2;3832:49;:::i;3817:65::-;3916:15;;;3947:12;;;;3979:15;;;4012:5;4026:786;4040:2;4037:1;4034:9;4026:786;;;4113:3;4107:10;4099:6;4095:23;4141:4;4193:2;4187;4183:7;4178:2;4173:3;4169:12;4165:26;4161:35;4158:2;;;4213:5;4206;4199:20;4158:2;4254;4248:9;4300:2;4292:6;4288:15;-1:-1:-1;;;;;4398:6:67;4386:10;4383:22;4378:2;4366:10;4363:18;4360:46;4357:2;;;4409:9;4357:2;4433:22;;;4489:11;;;4483:18;4468:34;;4537:11;;;4531:18;;4565:16;;;4562:2;;;4598:5;4591;4584:20;4562:2;;;4643:62;4701:3;4696:2;4685:8;4681:2;4677:17;4673:26;4643:62;:::i;:::-;4626:15;;;4619:87;4719:19;;-1:-1:-1;;4758:12:67;;;;4790;;;;4058:1;4051:9;4026:786;;4846:2054;;4976:3;4969:4;4961:6;4957:17;4953:27;4943:2;;4998:5;4991;4984:20;4943:2;5031:6;5025:13;5057:4;5081:65;5096:49;5142:2;5096:49;:::i;5081:65::-;5180:15;;;5211:12;;;;5243:15;;;5276:5;5290:1581;5304:2;5301:1;5298:9;5290:1581;;;5377:3;5371:10;5363:6;5359:23;5405:6;5459:2;5453;5449:7;5444:2;5439:3;5435:12;5431:26;5427:35;5424:2;;;5479:5;5472;5465:20;5424:2;5513:18;5528:2;5513:18;:::i;:::-;5572:2;5568;5564:11;5558:18;5551:5;5544:33;5613:44;5653:2;5649;5645:11;5613:44;:::i;:::-;5608:2;5601:5;5597:14;5590:68;5708:2;5704;5700:11;5694:18;5689:2;5682:5;5678:14;5671:42;5763:3;5759:2;5755:12;5749:19;5744:2;5737:5;5733:14;5726:43;5820:3;5816:2;5812:12;5806:19;5800:3;5793:5;5789:15;5782:44;5877:3;5873:2;5869:12;5863:19;5857:3;5850:5;5846:15;5839:44;5920:45;5960:3;5956:2;5952:12;5920:45;:::i;:::-;5914:3;5907:5;5903:15;5896:70;5989:3;6035:2;6031;6027:11;6021:18;-1:-1:-1;;;;;6109:2:67;6099:8;6096:16;6093:2;;;6129:5;6122;6115:20;6093:2;6174:62;6232:3;6227:2;6216:8;6212:2;6208:17;6204:26;6174:62;:::i;:::-;6168:3;6161:5;6157:15;6150:87;6280:3;6276:2;6272:12;6266:19;6250:35;;6314:2;6304:8;6301:16;6298:2;;;6334:5;6327;6320:20;6298:2;;6378:88;6462:3;6457:2;6446:8;6442:2;6438:17;6434:26;6378:88;:::i;:::-;6373:2;6366:5;6362:14;6355:112;;;6490:3;6544:2;6540;6536:11;6530:18;6524:3;6517:5;6513:15;6506:43;6599:3;6595:2;6591:12;6585:19;6580:2;6573:5;6569:14;6562:43;;6642;6680:3;6676:2;6672:12;6642:43;:::i;:::-;6636:3;6629:5;6625:15;6618:68;6723:42;6761:2;6757;6753:11;6723:42;:::i;:::-;6717:3;6706:15;;6699:67;6779:18;;-1:-1:-1;;6817:12:67;;;;6849;;;;5322:1;5315:9;5290:1581;;6905:1964;;7042:3;7035:4;7027:6;7023:17;7019:27;7009:2;;7064:5;7057;7050:20;7009:2;7097:6;7091:13;7123:4;7147:65;7162:49;7208:2;7162:49;:::i;7147:65::-;7246:15;;;7277:12;;;;7309:15;;;7342:5;7356:1484;7370:2;7367:1;7364:9;7356:1484;;;7443:3;7437:10;7429:6;7425:23;7471:6;7525:2;7519;7515:7;7510:2;7505:3;7501:12;7497:26;7493:35;7490:2;;;7545:5;7538;7531:20;7490:2;7579:18;7594:2;7579:18;:::i;:::-;7624:45;7665:2;7661;7657:11;7624:45;:::i;:::-;7617:5;7610:60;7720:2;7716;7712:11;7706:18;7701:2;7694:5;7690:14;7683:42;7775:2;7771;7767:11;7761:18;7756:2;7749:5;7745:14;7738:42;7830:3;7826:2;7822:12;7816:19;7811:2;7804:5;7800:14;7793:43;7887:3;7883:2;7879:12;7873:19;7867:3;7860:5;7856:15;7849:44;7916:3;7956:44;7996:2;7992;7988:11;7956:44;:::i;:::-;7950:3;7943:5;7939:15;7932:69;8044:3;8040:2;8036:12;8030:19;-1:-1:-1;;;;;8119:2:67;8109:8;8106:16;8103:2;;;8139:5;8132;8125:20;8103:2;8183:62;8241:3;8236:2;8225:8;8221:2;8217:17;8213:26;8183:62;:::i;:::-;8178:2;8171:5;8167:14;8160:86;8269:3;8259:13;;8323:2;8319;8315:11;8309:18;8303:3;8296:5;8292:15;8285:43;8351:3;8341:13;;8404:2;8400;8396:11;8390:18;8385:2;8378:5;8374:14;8367:42;8432:3;8422:13;;8485:2;8481;8477:11;8471:18;8466:2;8459:5;8455:14;8448:42;8533:2;8529;8525:11;8519:18;8503:34;;8566:2;8556:8;8553:16;8550:2;;;8586:5;8579;8572:20;8550:2;;;8630:104;8730:3;8725:2;8714:8;8710:2;8706:17;8702:26;8630:104;:::i;:::-;8614:14;;;8607:128;8748:18;;-1:-1:-1;;8786:12:67;;;;8818;;;;7388:1;7381:9;7356:1484;;8874:705;;8987:3;8980:4;8972:6;8968:17;8964:27;8954:2;;9009:5;9002;8995:20;8954:2;9049:6;9036:20;9075:4;9099:65;9114:49;9160:2;9114:49;:::i;9099:65::-;9198:15;;;9229:12;;;;9261:15;;;9307:11;;;9295:24;;9291:33;;9288:42;-1:-1:-1;9285:2:67;;;9347:5;9340;9333:20;9285:2;9373:5;9387:163;9401:2;9398:1;9395:9;9387:163;;;9458:17;;9446:30;;9496:12;;;;9528;;;;9419:1;9412:9;9387:163;;9584:132;9651:20;;9680:30;9651:20;9680:30;:::i;9721:136::-;9799:13;;9821:30;9799:13;9821:30;:::i;9862:140::-;9942:13;;9964:32;9942:13;9964:32;:::i;10007:485::-;;10104:3;10097:4;10089:6;10085:17;10081:27;10071:2;;10126:5;10119;10112:20;10071:2;10166:6;10153:20;10197:49;10212:33;10242:2;10212:33;:::i;10197:49::-;10271:2;10262:7;10255:19;10317:3;10310:4;10305:2;10297:6;10293:15;10289:26;10286:35;10283:2;;;10338:5;10331;10324:20;10283:2;10407;10400:4;10392:6;10388:17;10381:4;10372:7;10368:18;10355:55;10430:16;;;10448:4;10426:27;10419:42;;;;10434:7;10061:431;-1:-1:-1;;10061:431:67:o;10497:447::-;;10605:3;10598:4;10590:6;10586:17;10582:27;10572:2;;10627:5;10620;10613:20;10572:2;10660:6;10654:13;10691:49;10706:33;10736:2;10706:33;:::i;10691:49::-;10765:2;10756:7;10749:19;10811:3;10804:4;10799:2;10791:6;10787:15;10783:26;10780:35;10777:2;;;10832:5;10825;10818:20;10777:2;10849:64;10910:2;10903:4;10894:7;10890:18;10883:4;10875:6;10871:17;10849:64;:::i;:::-;10931:7;10562:382;-1:-1:-1;;;;10562:382:67:o;10949:152::-;11025:20;;11074:2;11064:13;;11054:2;;11091:1;11088;11081:12;11106:150;11188:13;;11230:1;11220:12;;11210:2;;11246:1;11243;11236:12;11261:152;11345:13;;11387:1;11377:12;;11367:2;;11403:1;11400;11393:12;11418:934;;11532:4;11520:9;11515:3;11511:19;11507:30;11504:2;;;11554:5;11547;11540:20;11504:2;11580:20;11595:4;11580:20;:::i;:::-;11571:29;;11629:9;11623:16;-1:-1:-1;;;;;11699:2:67;11691:6;11688:14;11685:2;;;11715:1;11712;11705:12;11685:2;11742:66;11804:3;11795:6;11784:9;11780:22;11742:66;:::i;:::-;11735:5;11728:81;11841:49;11886:2;11875:9;11871:18;11841:49;:::i;:::-;11836:2;11829:5;11825:14;11818:73;11944:2;11933:9;11929:18;11923:25;11918:2;11911:5;11907:14;11900:49;12002:2;11991:9;11987:18;11981:25;11976:2;11969:5;11965:14;11958:49;12053:3;12042:9;12038:19;12032:26;12016:42;;12083:2;12073:8;12070:16;12067:2;;;12099:1;12096;12089:12;12067:2;;12136:60;12192:3;12181:8;12170:9;12166:24;12136:60;:::i;:::-;12130:3;12123:5;12119:15;12112:85;;12230:55;12280:3;12269:9;12265:19;12230:55;:::i;:::-;12224:3;12217:5;12213:15;12206:80;12340:3;12329:9;12325:19;12319:26;12313:3;12306:5;12302:15;12295:51;11494:858;;;;:::o;12357:1599::-;;12458:6;12501:2;12489:9;12484:3;12480:19;12476:28;12473:2;;;12521:5;12514;12507:20;12473:2;12547:18;12562:2;12547:18;:::i;:::-;12538:27;;;12588:39;12617:9;12588:39;:::i;:::-;12581:5;12574:54;12660:51;12707:2;12696:9;12692:18;12660:51;:::i;:::-;12655:2;12648:5;12644:14;12637:75;12744:51;12791:2;12780:9;12776:18;12744:51;:::i;:::-;12739:2;12732:5;12728:14;12721:75;12849:2;12838:9;12834:18;12828:25;12823:2;12816:5;12812:14;12805:49;12908:3;12897:9;12893:19;12887:26;12881:3;12874:5;12870:15;12863:51;12968:3;12957:9;12953:19;12947:26;12941:3;12934:5;12930:15;12923:51;13007:52;13054:3;13043:9;13039:19;13007:52;:::i;:::-;13001:3;12994:5;12990:15;12983:77;13093:52;13140:3;13129:9;13125:19;13093:52;:::i;:::-;13087:3;13076:15;;13069:77;13165:3;13206:18;;;13200:25;13184:14;;;13177:49;13245:3;13286:18;;;13280:25;13264:14;;;13257:49;13325:3;13366:18;;;13360:25;13344:14;;;13337:49;13405:3;13446:18;;;13440:25;13424:14;;;13417:49;13485:3;13517:18;;;13511:25;-1:-1:-1;;;;;13548:30:67;;13545:2;;;13591:1;13588;13581:12;13545:2;13627:58;13681:3;13672:6;13661:9;13657:22;13627:58;:::i;:::-;13622:2;13615:5;13611:14;13604:82;;;13705:3;13740:49;13785:2;13774:9;13770:18;13740:49;:::i;:::-;13724:14;;;13717:73;13809:3;13850:18;;;13844:25;13828:14;;;13821:49;13889:3;13930:18;;;13924:25;13908:14;;;13901:49;;;;13728:5;12438:1518;-1:-1:-1;12438:1518:67:o;13961:1507::-;;14057:6;14100:2;14088:9;14083:3;14079:19;14075:28;14072:2;;;14120:5;14113;14106:20;14072:2;14146:18;14161:2;14146:18;:::i;:::-;14137:27;;;14187:42;14219:9;14187:42;:::i;:::-;14180:5;14173:57;14262:54;14312:2;14301:9;14297:18;14262:54;:::i;:::-;14257:2;14250:5;14246:14;14239:78;14349:51;14396:2;14385:9;14381:18;14349:51;:::i;:::-;14344:2;14337:5;14333:14;14326:75;14433:51;14480:2;14469:9;14465:18;14433:51;:::i;:::-;14428:2;14421:5;14417:14;14410:75;14539:3;14528:9;14524:19;14518:26;14512:3;14505:5;14501:15;14494:51;14599:3;14588:9;14584:19;14578:26;14572:3;14565:5;14561:15;14554:51;14638:52;14685:3;14674:9;14670:19;14638:52;:::i;:::-;14632:3;14621:15;;14614:77;14745:3;14730:19;;;14724:26;14707:15;;;14700:51;14770:3;14811:18;;;14805:25;14789:14;;;14782:49;14850:3;14891:18;;;14885:25;14869:14;;;14862:49;14930:3;14962:18;;;14956:25;-1:-1:-1;;;;;15030:14:67;;;15027:2;;;15057:1;15054;15047:12;15027:2;15093:78;15167:3;15158:6;15147:9;15143:22;15093:78;:::i;:::-;15088:2;15081:5;15077:14;15070:102;15191:3;15181:13;;15247:2;15236:9;15232:18;15226:25;15221:2;15214:5;15210:14;15203:49;15271:3;15261:13;;15320:2;15309:9;15305:18;15299:25;15283:41;;15349:2;15339:8;15336:16;15333:2;;;15365:1;15362;15355:12;15333:2;;15401:60;15457:3;15446:8;15435:9;15431:24;15401:60;:::i;:::-;15396:2;15389:5;15385:14;15378:84;;;14037:1431;;;;:::o;15473:762::-;;15586:4;15574:9;15569:3;15565:19;15561:30;15558:2;;;15608:5;15601;15594:20;15558:2;15645;15639:9;15687:4;15679:6;15675:17;-1:-1:-1;;;;;15779:6:67;15767:10;15764:22;15759:2;15747:10;15744:18;15741:46;15738:2;;;15790:9;15738:2;15821:10;15817:2;15810:22;15850:6;15841:15;;15880:37;15907:9;15880:37;:::i;:::-;15872:6;15865:53;15979:2;15968:9;15964:18;15951:32;15946:2;15938:6;15934:15;15927:57;16045:2;16034:9;16030:18;16017:32;16012:2;16004:6;16000:15;15993:57;16101:2;16090:9;16086:18;16073:32;16059:46;;16128:2;16120:6;16117:14;16114:2;;;16144:1;16141;16134:12;16114:2;;16181:47;16224:3;16215:6;16204:9;16200:22;16181:47;:::i;:::-;16176:2;16168:6;16164:15;16157:72;;;15548:687;;;;:::o;16240:863::-;;16361:4;16349:9;16344:3;16340:19;16336:30;16333:2;;;16383:5;16376;16369:20;16333:2;16420;16414:9;16462:4;16454:6;16450:17;16533:6;16521:10;16518:22;-1:-1:-1;;;;;16485:10:67;16482:34;16479:62;16476:2;;;16544:9;16476:2;16575:10;16571:2;16564:22;;16604:6;16595:15;;16640:9;16634:16;16626:6;16619:32;16705:2;16694:9;16690:18;16684:25;16679:2;16671:6;16667:15;16660:50;16764:2;16753:9;16749:18;16743:25;16738:2;16730:6;16726:15;16719:50;16823:2;16812:9;16808:18;16802:25;16797:2;16789:6;16785:15;16778:50;16873:3;16862:9;16858:19;16852:26;16887:35;16914:7;16887:35;:::i;:::-;16950:3;16938:16;;16931:33;17009:3;16994:19;;16988:26;17023:32;16988:26;17023:32;:::i;:::-;17083:3;17071:16;;;;17064:33;16323:780;;-1:-1:-1;;16323:780:67:o;17108:162::-;17187:13;;17240:4;17229:16;;17219:27;;17209:2;;17260:1;17257;17250:12;17275:259;;17387:2;17375:9;17366:7;17362:23;17358:32;17355:2;;;17408:6;17400;17393:22;17355:2;17452:9;17439:23;17471:33;17498:5;17471:33;:::i;17539:1129::-;;;;;;17778:3;17766:9;17757:7;17753:23;17749:33;17746:2;;;17800:6;17792;17785:22;17746:2;17844:9;17831:23;17863:33;17890:5;17863:33;:::i;:::-;17915:5;-1:-1:-1;17972:2:67;17957:18;;17944:32;17985:35;17944:32;17985:35;:::i;:::-;18039:7;-1:-1:-1;18097:2:67;18082:18;;18069:32;-1:-1:-1;;;;;18150:14:67;;;18147:2;;;18182:6;18174;18167:22;18147:2;18210:67;18269:7;18260:6;18249:9;18245:22;18210:67;:::i;:::-;18200:77;;18330:2;18319:9;18315:18;18302:32;18286:48;;18359:2;18349:8;18346:16;18343:2;;;18380:6;18372;18365:22;18343:2;18408:69;18469:7;18458:8;18447:9;18443:24;18408:69;:::i;:::-;18398:79;;18530:3;18519:9;18515:19;18502:33;18486:49;;18560:2;18550:8;18547:16;18544:2;;;18581:6;18573;18566:22;18544:2;;18609:53;18654:7;18643:8;18632:9;18628:24;18609:53;:::i;:::-;18599:63;;;17736:932;;;;;;;;:::o;18673:691::-;;;;;18845:3;18833:9;18824:7;18820:23;18816:33;18813:2;;;18867:6;18859;18852:22;18813:2;18911:9;18898:23;18930:33;18957:5;18930:33;:::i;:::-;18982:5;-1:-1:-1;19039:2:67;19024:18;;19011:32;19052:35;19011:32;19052:35;:::i;:::-;19106:7;-1:-1:-1;19160:2:67;19145:18;;19132:32;;-1:-1:-1;19215:2:67;19200:18;;19187:32;-1:-1:-1;;;;;19231:30:67;;19228:2;;;19279:6;19271;19264:22;19228:2;19307:51;19350:7;19341:6;19330:9;19326:22;19307:51;:::i;:::-;19297:61;;;18803:561;;;;;;;:::o;19369:760::-;;;;;;19558:3;19546:9;19537:7;19533:23;19529:33;19526:2;;;19580:6;19572;19565:22;19526:2;19624:9;19611:23;19643:33;19670:5;19643:33;:::i;:::-;19695:5;-1:-1:-1;19752:2:67;19737:18;;19724:32;19765:35;19724:32;19765:35;:::i;:::-;19819:7;-1:-1:-1;19873:2:67;19858:18;;19845:32;;-1:-1:-1;19924:2:67;19909:18;;19896:32;;-1:-1:-1;19979:3:67;19964:19;;19951:33;-1:-1:-1;;;;;19996:30:67;;19993:2;;;20044:6;20036;20029:22;19993:2;20072:51;20115:7;20106:6;20095:9;20091:22;20072:51;:::i;20134:1175::-;;;;;20346:3;20334:9;20325:7;20321:23;20317:33;20314:2;;;20368:6;20360;20353:22;20314:2;20422:7;20415:4;20404:9;20400:20;20396:34;20386:2;;20449:6;20441;20434:22;20386:2;20477:3;20500:18;20515:2;20500:18;:::i;:::-;20591;;;;20540:3;20563:9;20621:15;;;20618:2;;;20654:6;20646;20639:22;20618:2;20681:6;20696:269;20710:4;20707:1;20704:11;20696:269;;;20783:3;20770:17;20800:33;20827:5;20800:33;:::i;:::-;20846:18;;20887:4;20911:12;;;;20943;;;;;20730:1;20723:9;20696:269;;;20700:3;;20984:5;20974:15;;;;21008:24;21029:2;21008:24;:::i;:::-;20998:34;;;21083:3;21072:9;21068:19;21055:33;-1:-1:-1;;;;;21103:6:67;21100:30;21097:2;;;21148:6;21140;21133:22;21097:2;21176:67;21235:7;21226:6;21215:9;21211:22;21176:67;:::i;:::-;21166:77;;;21262:41;21298:3;21287:9;21283:19;21262:41;:::i;:::-;21252:51;;20304:1005;;;;;;;:::o;21314:666::-;;;21461:2;21449:9;21440:7;21436:23;21432:32;21429:2;;;21482:6;21474;21467:22;21429:2;21527:9;21514:23;-1:-1:-1;;;;;21597:2:67;21589:6;21586:14;21583:2;;;21618:6;21610;21603:22;21583:2;21661:6;21650:9;21646:22;21636:32;;21706:7;21699:4;21695:2;21691:13;21687:27;21677:2;;21733:6;21725;21718:22;21677:2;21778;21765:16;21804:2;21796:6;21793:14;21790:2;;;21825:6;21817;21810:22;21790:2;21884:7;21879:2;21873;21865:6;21861:15;21857:2;21853:24;21849:33;21846:46;21843:2;;;21910:6;21902;21895:22;21843:2;21946;21938:11;;;;;21968:6;;-1:-1:-1;21419:561:67;;-1:-1:-1;;;;21419:561:67:o;21985:1526::-;;22137:2;22180;22168:9;22159:7;22155:23;22151:32;22148:2;;;22201:6;22193;22186:22;22148:2;22239:9;22233:16;-1:-1:-1;;;;;22309:2:67;22301:6;22298:14;22295:2;;;22330:6;22322;22315:22;22295:2;22373:6;22362:9;22358:22;22348:32;;22418:7;22411:4;22407:2;22403:13;22399:27;22389:2;;22445:6;22437;22430:22;22389:2;22479;22473:9;22502:65;22517:49;22563:2;22517:49;:::i;22502:65::-;22601:15;;;22632:12;;;;22664:11;;;22694:4;22725:11;;;22717:20;;22713:29;;22710:42;-1:-1:-1;22707:2:67;;;22770:6;22762;22755:22;22707:2;22797:6;22788:15;;22812:669;22826:2;22823:1;22820:9;22812:669;;;22897:2;22891:3;22882:7;22878:17;22874:26;22871:2;;;22918:6;22910;22903:22;22871:2;22950;22985;22979:9;23031:2;23023:6;23019:15;23088:6;23076:10;23073:22;23068:2;23056:10;23053:18;23050:46;23047:2;;;23099:9;23047:2;23123:22;;23171:10;;23194:33;23171:10;23194:33;:::i;:::-;23240:21;;23304:12;;;23298:19;23281:15;;;23274:44;23361:12;;;23355:19;23338:15;;;23331:44;;;;23388:19;;22844:1;22837:9;;;;;23427:12;;;;23459;;;;22812:669;;;-1:-1:-1;23500:5:67;;22117:1394;-1:-1:-1;;;;;;;;;22117:1394:67:o;23516:1443::-;;23667:2;23710;23698:9;23689:7;23685:23;23681:32;23678:2;;;23731:6;23723;23716:22;23678:2;23769:9;23763:16;-1:-1:-1;;;;;23839:2:67;23831:6;23828:14;23825:2;;;23860:6;23852;23845:22;23825:2;23903:6;23892:9;23888:22;23878:32;;23948:7;23941:4;23937:2;23933:13;23929:27;23919:2;;23975:6;23967;23960:22;23919:2;24009;24003:9;24032:65;24047:49;24093:2;24047:49;:::i;24032:65::-;24131:15;;;24162:12;;;;24194:11;;;24224:4;24255:11;;;24247:20;;24243:29;;24240:42;-1:-1:-1;24237:2:67;;;24300:6;24292;24285:22;24237:2;24327:6;24318:15;;24342:587;24356:2;24353:1;24350:9;24342:587;;;24427:2;24421:3;24412:7;24408:17;24404:26;24401:2;;;24448:6;24440;24433:22;24401:2;24490;24484:9;24536:2;24528:6;24524:15;24593:6;24581:10;24578:22;24573:2;24561:10;24558:18;24555:46;24552:2;;;24604:9;24552:2;24628:22;;24676:10;;24699:33;24676:10;24699:33;:::i;:::-;24745:21;;24809:12;;;24803:19;24786:15;;;24779:44;24836:19;;24374:1;24367:9;;;;;24875:12;;;;24907;;;;24342:587;;24964:1195;;;;;25182:3;25170:9;25161:7;25157:23;25153:33;25150:2;;;25204:6;25196;25189:22;25150:2;25249:9;25236:23;-1:-1:-1;;;;;25274:6:67;25271:30;25268:2;;;25319:6;25311;25304:22;25268:2;25347:22;;25400:4;25392:13;;25388:27;-1:-1:-1;25378:2:67;;25434:6;25426;25419:22;25378:2;25475;25462:16;25497:4;25521:65;25536:49;25582:2;25536:49;:::i;25521:65::-;25620:15;;;25651:12;;;;25683:11;;;25712:6;25727:228;25741:2;25738:1;25735:9;25727:228;;;25798:82;25872:7;25867:2;25860:3;25847:17;25843:2;25839:26;25835:35;25798:82;:::i;:::-;25786:95;;25901:12;;;;25933;;;;25759:1;25752:9;25727:228;;;25731:3;;25974:5;25964:15;;;;25998:40;26034:2;26023:9;26019:18;25998:40;:::i;:::-;25988:50;;;;;26057:40;26093:2;26082:9;26078:18;26057:40;:::i;:::-;26047:50;;26116:37;26149:2;26138:9;26134:18;26116:37;:::i;26164:257::-;;26284:2;26272:9;26263:7;26259:23;26255:32;26252:2;;;26305:6;26297;26290:22;26252:2;26342:9;26336:16;26361:30;26385:5;26361:30;:::i;26426:257::-;;26537:2;26525:9;26516:7;26512:23;26508:32;26505:2;;;26558:6;26550;26543:22;26505:2;26602:9;26589:23;26621:32;26647:5;26621:32;:::i;26688:353::-;;;26829:2;26817:9;26808:7;26804:23;26800:32;26797:2;;;26850:6;26842;26835:22;26797:2;26878:37;26905:9;26878:37;:::i;:::-;26868:47;;26965:2;26954:9;26950:18;26937:32;26978:33;27005:5;26978:33;:::i;:::-;27030:5;27020:15;;;26787:254;;;;;:::o;27046:1565::-;;27179:2;27222;27210:9;27201:7;27197:23;27193:32;27190:2;;;27243:6;27235;27228:22;27190:2;27281:9;27275:16;-1:-1:-1;;;;;27351:2:67;27343:6;27340:14;27337:2;;;27372:6;27364;27357:22;27337:2;27400:22;;;;27456:4;27438:16;;;27434:27;27431:2;;;27479:6;27471;27464:22;27431:2;27517:4;27511:11;27561:4;27553:6;27549:17;27616:6;27604:10;27601:22;27596:2;27584:10;27581:18;27578:46;27575:2;;;27627:9;27575:2;27654:4;27647:24;27696:9;;27717:16;;;27714:2;;;27751:6;27743;27736:22;27714:2;27784:57;27833:7;27822:8;27818:2;27814:17;27784:57;:::i;:::-;27776:6;27769:73;;27881:2;27877;27873:11;27867:18;27910:2;27900:8;27897:16;27894:2;;;27931:6;27923;27916:22;27894:2;27967:8;27963:2;27959:17;27949:27;;;28014:7;28007:4;28003:2;27999:13;27995:27;27985:2;;28041:6;28033;28026:22;27985:2;28075;28069:9;28059:19;;28098:65;28113:49;28159:2;28113:49;:::i;28098:65::-;28197:15;;;28228:12;;;;28260:11;;;28298;;;28290:20;;28286:29;;28283:42;-1:-1:-1;28280:2:67;;;28343:6;28335;28328:22;28280:2;28370:6;28361:15;;28385:156;28399:2;28396:1;28393:9;28385:156;;;28456:10;;28444:23;;28417:1;28410:9;;;;;28487:12;;;;28519;;28385:156;;;-1:-1:-1;28557:15:67;;;28550:30;;;;28561:6;27159:1452;-1:-1:-1;;;;;;27159:1452:67:o;28616:764::-;;;;28818:2;28806:9;28797:7;28793:23;28789:32;28786:2;;;28839:6;28831;28824:22;28786:2;28877:9;28871:16;-1:-1:-1;;;;;28947:2:67;28939:6;28936:14;28933:2;;;28968:6;28960;28953:22;28933:2;28996:70;29058:7;29049:6;29038:9;29034:22;28996:70;:::i;:::-;28986:80;;29112:2;29101:9;29097:18;29091:25;29075:41;;29141:2;29131:8;29128:16;29125:2;;;29162:6;29154;29147:22;29125:2;;29190:72;29254:7;29243:8;29232:9;29228:24;29190:72;:::i;:::-;29180:82;;;29305:2;29294:9;29290:18;29284:25;29318:32;29344:5;29318:32;:::i;:::-;29369:5;29359:15;;;28776:604;;;;;:::o;29385:664::-;;;;29564:2;29552:9;29543:7;29539:23;29535:32;29532:2;;;29585:6;29577;29570:22;29532:2;29630:9;29617:23;-1:-1:-1;;;;;29655:6:67;29652:30;29649:2;;;29700:6;29692;29685:22;29649:2;29728:69;29789:7;29780:6;29769:9;29765:22;29728:69;:::i;:::-;29718:79;;;29847:2;29836:9;29832:18;29819:32;29860:33;29887:5;29860:33;:::i;:::-;29912:5;-1:-1:-1;29969:2:67;29954:18;;29941:32;29982:35;29941:32;29982:35;:::i;30054:1183::-;;30203:2;30191:9;30182:7;30178:23;30174:32;30171:2;;;30224:6;30216;30209:22;30171:2;30262:9;30256:16;-1:-1:-1;;;;;30332:2:67;30324:6;30321:14;30318:2;;;30353:6;30345;30338:22;30318:2;30381:22;;;;30437:6;30419:16;;;30415:29;30412:2;;;30462:6;30454;30447:22;30412:2;30493:20;30508:4;30493:20;:::i;:::-;30544:2;30538:9;30572:2;30562:8;30559:16;30556:2;;;30593:6;30585;30578:22;30556:2;30625:79;30696:7;30685:8;30681:2;30677:17;30625:79;:::i;:::-;30618:5;30611:94;;30744:2;30740;30736:11;30730:18;30773:2;30763:8;30760:16;30757:2;;;30794:6;30786;30779:22;30757:2;30835:86;30913:7;30902:8;30898:2;30894:17;30835:86;:::i;:::-;30830:2;30823:5;30819:14;30812:110;;30954:66;31012:7;31007:2;31003;30999:11;30954:66;:::i;:::-;30949:2;30942:5;30938:14;30931:90;31069:3;31065:2;31061:12;31055:19;31048:4;31041:5;31037:16;31030:45;31123:3;31119:2;31115:12;31109:19;31102:4;31095:5;31091:16;31084:45;31163:43;31201:3;31197:2;31193:12;31163:43;:::i;:::-;31156:4;31145:16;;31138:69;31149:5;30161:1076;-1:-1:-1;;;;;30161:1076:67:o;31242:1442::-;;;;31454:2;31442:9;31433:7;31429:23;31425:32;31422:2;;;31475:6;31467;31460:22;31422:2;31513:9;31507:16;-1:-1:-1;;;;;31583:2:67;31575:6;31572:14;31569:2;;;31604:6;31596;31589:22;31569:2;31632:22;;;;31688:4;31670:16;;;31666:27;31663:2;;;31711:6;31703;31696:22;31663:2;31749;31743:9;31791:4;31783:6;31779:17;31846:6;31834:10;31831:22;31826:2;31814:10;31811:18;31808:46;31805:2;;;31857:9;31805:2;31884;31877:22;31923:32;31952:2;31923:32;:::i;:::-;31915:6;31908:48;31989:44;32029:2;32025;32021:11;31989:44;:::i;:::-;31984:2;31976:6;31972:15;31965:69;32081:2;32077;32073:11;32067:18;32062:2;32054:6;32050:15;32043:43;32133:2;32129;32125:11;32119:18;32114:2;32106:6;32102:15;32095:43;32186:3;32182:2;32178:12;32172:19;32166:3;32158:6;32154:16;32147:45;32231:3;32227:2;32223:12;32217:19;32261:2;32251:8;32248:16;32245:2;;;32282:6;32274;32267:22;32245:2;32325:57;32374:7;32363:8;32359:2;32355:17;32325:57;:::i;:::-;32319:3;32307:16;;32300:83;-1:-1:-1;32454:2:67;32439:18;;32433:25;32311:6;;-1:-1:-1;32433:25:67;-1:-1:-1;32470:16:67;;;32467:2;;;32504:6;32496;32489:22;32467:2;;32532:77;32601:7;32590:8;32579:9;32575:24;32532:77;:::i;:::-;32522:87;;;32628:50;32674:2;32663:9;32659:18;32628:50;:::i;:::-;32618:60;;31412:1272;;;;;:::o;32689:194::-;;32812:2;32800:9;32791:7;32787:23;32783:32;32780:2;;;32833:6;32825;32818:22;32780:2;-1:-1:-1;32861:16:67;;32770:113;-1:-1:-1;32770:113:67:o;32888:114::-;-1:-1:-1;;;;;32964:31:67;32952:44;;32942:60::o;33007:573::-;;33108:5;33102:12;33135:6;33130:3;33123:19;33161:4;33190:2;33185:3;33181:12;33174:19;;33227:2;33220:5;33216:14;33248:3;33260:295;33274:6;33271:1;33268:13;33260:295;;;33333:13;;33375:9;;33386:6;33371:22;33359:35;;33438:11;;33432:18;-1:-1:-1;;;;;33428:44:67;33414:12;;;33407:66;33502:4;33493:14;;;;33530:15;;;;33469:1;33289:9;33260:295;;;-1:-1:-1;33571:3:67;;33078:502;-1:-1:-1;;;;;33078:502:67:o;33585:582::-;;33708:5;33702:12;33735:6;33730:3;33723:19;33761:4;33790:2;33785:3;33781:12;33774:19;;33827:2;33820:5;33816:14;33848:3;33860:282;33874:6;33871:1;33868:13;33860:282;;;33933:13;;33971:9;;33959:22;;34025:11;;34019:18;-1:-1:-1;;;;;34015:44:67;34001:12;;;33994:66;34089:4;34080:14;;;;34117:15;;;;34056:1;33889:9;33860:282;;34172:833;;34279:5;34273:12;34306:6;34301:3;34294:19;34332:4;34373:2;34368:3;34364:12;34398:11;34425;34418:18;;34480:2;34472:6;34468:15;34461:5;34457:27;34445:39;;34518:2;34511:5;34507:14;34539:3;34551:428;34565:6;34562:1;34559:13;34551:428;;;34626:16;;;34614:29;;34666:13;;34732:9;;34719:23;;34781:11;;34775:18;34702:4;34813:13;;;34806:25;;;34852:47;34885:13;;;34775:18;34852:47;:::i;:::-;34957:12;;;;34844:55;-1:-1:-1;;;34922:15:67;;;;34587:1;34580:9;34551:428;;;-1:-1:-1;34995:4:67;;34249:756;-1:-1:-1;;;;;;;34249:756:67:o;35010:1831::-;;35120:5;35114:12;35147:6;35142:3;35135:19;35173:4;35214:2;35209:3;35205:12;35239:11;35266;35259:18;;35321:2;35313:6;35309:15;35302:5;35298:27;35286:39;;35359:2;35352:5;35348:14;35380:3;35392:1423;35406:6;35403:1;35400:13;35392:1423;;;35477:5;35471:4;35467:16;35462:3;35455:29;35513:6;35507:13;35543:6;35562:38;35595:4;35590:2;35584:9;35562:38;:::i;:::-;35641:11;;;35635:18;35620:13;;;35613:41;35677:4;35722:11;;;35716:18;35701:13;;;35694:41;35758:4;35803:11;;;35797:18;35782:13;;;35775:41;35839:4;35884:11;;;35878:18;35863:13;;;35856:41;35920:4;35963:11;;;35957:18;35988:57;36031:13;;;35957:18;35988:57;:::i;:::-;;;36068:4;36121:2;36117;36113:11;36107:18;36160:2;36155;36149:4;36145:13;36138:25;36190:49;36235:2;36229:4;36225:13;36209:14;36190:49;:::i;:::-;36262:4;36307:11;;;36301:18;36286:13;;;36279:41;36344:6;36392:12;;;36386:19;36370:14;;;36363:43;36430:6;36478:12;;;36472:19;36456:14;;;36449:43;36516:6;36563:12;;;36557:19;36612:17;;;36596:14;;;36589:41;;;;36176:63;-1:-1:-1;36651:84:67;;-1:-1:-1;36176:63:67;;-1:-1:-1;36557:19:67;36651:84;:::i;:::-;36793:12;;;;36643:92;-1:-1:-1;;;36758:15:67;;;;35428:1;35421:9;35392:1423;;36846:93;36918:13;36911:21;36899:34;;36889:50::o;36944:259::-;;37025:5;37019:12;37052:6;37047:3;37040:19;37068:63;37124:6;37117:4;37112:3;37108:14;37101:4;37094:5;37090:16;37068:63;:::i;:::-;37185:2;37164:15;-1:-1:-1;;37160:29:67;37151:39;;;;37192:4;37147:50;;36995:208;-1:-1:-1;;36995:208:67:o;37208:127::-;37285:1;37278:5;37275:12;37265:2;;37291:9;37265:2;37311:18;;37255:80::o;37340:129::-;37419:1;37412:5;37409:12;37399:2;;37425:9;37474:2207;;37569:5;37563:12;37596:4;37591:3;37584:17;37610:65;37669:4;37664:3;37660:14;37645:12;37639:19;37610:65;:::i;:::-;37730:4;37716:12;37712:23;37706:30;37755:3;37767:53;37816:2;37811:3;37807:12;37791:14;37767:53;:::i;:::-;37875:4;37861:12;37857:23;37851:30;37829:52;;37900:3;37912:58;37966:2;37961:3;37957:12;37941:14;37912:58;:::i;:::-;38025:4;38011:12;38007:23;38001:30;37979:52;;38050:3;38062:58;38116:2;38111:3;38107:12;38091:14;38062:58;:::i;:::-;38163:4;38149:12;38145:23;38139:30;38129:40;;38188:3;38221:2;38216;38211:3;38207:12;38200:24;38267:4;38253:12;38249:23;38243:30;38233:40;;38292:3;38325:2;38320;38315:3;38311:12;38304:24;38383:4;38369:12;38365:23;38359:30;38337:52;;38408:6;38423:58;38477:2;38472:3;38468:12;38452:14;38423:58;:::i;:::-;38536:4;38522:12;38518:23;38512:30;38506:3;38501;38497:13;38490:53;38598:2;38584:12;38580:21;38574:28;38568:3;38563;38559:13;38552:51;38658:2;38644:12;38640:21;38634:28;38628:3;38623;38619:13;38612:51;38718:2;38704:12;38700:21;38694:28;38672:50;;38753:2;38747:3;38742;38738:13;38731:25;;38777:69;38841:3;38836;38832:13;38816:14;38777:69;:::i;:::-;38883:21;;;38877:28;38871:3;38862:13;;38855:51;38943:21;;;38937:28;39000:14;;;-1:-1:-1;;38996:29:67;38990:3;38981:13;;38974:52;38937:28;38765:81;-1:-1:-1;39048:40:67;;-1:-1:-1;38765:81:67;;-1:-1:-1;38937:28:67;;-1:-1:-1;39048:40:67;:::i;:::-;39035:53;;;39136:4;39129:5;39125:16;39119:23;39151:50;39195:4;39190:3;39186:14;39170;39151:50;:::i;:::-;;39250:4;39243:5;39239:16;39233:23;39226:4;39221:3;39217:14;39210:47;39306:4;39299:5;39295:16;39289:23;39282:4;39277:3;39273:14;39266:47;39361:4;39354:5;39350:16;39344:23;39410:3;39403:5;39399:15;39392:4;39387:3;39383:14;39376:39;39438:41;39473:5;39457:14;39438:41;:::i;:::-;39424:55;;;39527:4;39520:5;39516:16;39510:23;39542:55;39591:4;39586:3;39582:14;39566;39542:55;:::i;:::-;;39646:4;39639:5;39635:16;39629:23;39622:4;39617:3;39613:14;39606:47;39669:6;39662:13;;;37533:2148;;;;:::o;39686:422::-;39767:12;;39755:25;;39829:4;39818:16;;;39812:23;39796:14;;;39789:47;39885:4;39874:16;;;39868:23;39852:14;;;39845:47;39941:4;39930:16;;;39924:23;39908:14;;;39901:47;40001:4;39990:16;;;39984:23;-1:-1:-1;;;;;39980:49:67;39964:14;;;39957:73;40017:3;40082:16;;;40076:23;40069:31;40062:39;40046:14;;40039:63;39745:363::o;40113:77::-;40182:4;40171:16;40159:29;;40157:33::o;40195:274::-;;40362:6;40356:13;40378:53;40424:6;40419:3;40412:4;40404:6;40400:17;40378:53;:::i;:::-;40447:16;;;;;40332:137;-1:-1:-1;;40332:137:67:o;40474:203::-;-1:-1:-1;;;;;40638:32:67;;;;40620:51;;40608:2;40593:18;;40575:102::o;40898:391::-;-1:-1:-1;;;;;41172:15:67;;;41154:34;;41224:15;;;;41219:2;41204:18;;41197:43;41271:2;41256:18;;41249:34;;;;41104:2;41089:18;;41071:218::o;41294:646::-;-1:-1:-1;;;;;41661:15:67;;;41643:34;;41713:15;;;;41708:2;41693:18;;41686:43;41760:2;41745:18;;41738:34;41803:2;41788:18;;41781:34;;;;41623:3;41846;41831:19;;41824:32;;;41294:646;41872:19;;;41865:33;41930:3;41915:19;;41595:345::o;41945:282::-;-1:-1:-1;;;;;42145:32:67;;;;42127:51;;42209:2;42194:18;;42187:34;42115:2;42100:18;;42082:145::o;42511:187::-;42676:14;;42669:22;42651:41;;42639:2;42624:18;;42606:92::o;42703:202::-;-1:-1:-1;;;;;;42865:33:67;;;;42847:52;;42835:2;42820:18;;42802:103::o;42910:356::-;43112:2;43094:21;;;43131:18;;;43124:30;43190:34;43185:2;43170:18;;43163:62;43257:2;43242:18;;43084:182::o;43271:356::-;43473:2;43455:21;;;43492:18;;;43485:30;43551:34;43546:2;43531:18;;43524:62;43618:2;43603:18;;43445:182::o;43632:354::-;43834:2;43816:21;;;43873:2;43853:18;;;43846:30;43912:32;43907:2;43892:18;;43885:60;43977:2;43962:18;;43806:180::o;43991:351::-;44193:2;44175:21;;;44232:2;44212:18;;;44205:30;44271:29;44266:2;44251:18;;44244:57;44333:2;44318:18;;44165:177::o;44347:347::-;44549:2;44531:21;;;44588:2;44568:18;;;44561:30;44627:25;44622:2;44607:18;;44600:53;44685:2;44670:18;;44521:173::o;44699:352::-;44901:2;44883:21;;;44940:2;44920:18;;;44913:30;44979;44974:2;44959:18;;44952:58;45042:2;45027:18;;44873:178::o;45056:344::-;45258:2;45240:21;;;45297:2;45277:18;;;45270:30;-1:-1:-1;;;45331:2:67;45316:18;;45309:50;45391:2;45376:18;;45230:170::o;45405:351::-;45607:2;45589:21;;;45646:2;45626:18;;;45619:30;45685:29;45680:2;45665:18;;45658:57;45747:2;45732:18;;45579:177::o;45761:350::-;45963:2;45945:21;;;46002:2;45982:18;;;45975:30;46041:28;46036:2;46021:18;;46014:56;46102:2;46087:18;;45935:176::o;46116:349::-;46318:2;46300:21;;;46357:2;46337:18;;;46330:30;46396:27;46391:2;46376:18;;46369:55;46456:2;46441:18;;46290:175::o;46470:345::-;46672:2;46654:21;;;46711:2;46691:18;;;46684:30;-1:-1:-1;;;46745:2:67;46730:18;;46723:51;46806:2;46791:18;;46644:171::o;46820:351::-;47022:2;47004:21;;;47061:2;47041:18;;;47034:30;47100:29;47095:2;47080:18;;47073:57;47162:2;47147:18;;46994:177::o;47176:356::-;47378:2;47360:21;;;47397:18;;;47390:30;47456:34;47451:2;47436:18;;47429:62;47523:2;47508:18;;47350:182::o;47537:351::-;47739:2;47721:21;;;47778:2;47758:18;;;47751:30;47817:29;47812:2;47797:18;;47790:57;47879:2;47864:18;;47711:177::o;47893:356::-;48095:2;48077:21;;;48114:18;;;48107:30;48173:34;48168:2;48153:18;;48146:62;48240:2;48225:18;;48067:182::o;48254:348::-;48456:2;48438:21;;;48495:2;48475:18;;;48468:30;48534:26;48529:2;48514:18;;48507:54;48593:2;48578:18;;48428:174::o;48607:349::-;48809:2;48791:21;;;48848:2;48828:18;;;48821:30;48887:27;48882:2;48867:18;;48860:55;48947:2;48932:18;;48781:175::o;48961:351::-;49163:2;49145:21;;;49202:2;49182:18;;;49175:30;49241:29;49236:2;49221:18;;49214:57;49303:2;49288:18;;49135:177::o;49317:342::-;49519:2;49501:21;;;49558:2;49538:18;;;49531:30;-1:-1:-1;;;49592:2:67;49577:18;;49570:48;49650:2;49635:18;;49491:168::o;49664:356::-;49866:2;49848:21;;;49885:18;;;49878:30;49944:34;49939:2;49924:18;;49917:62;50011:2;49996:18;;49838:182::o;50025:350::-;50227:2;50209:21;;;50266:2;50246:18;;;50239:30;50305:28;50300:2;50285:18;;50278:56;50366:2;50351:18;;50199:176::o;50380:348::-;50582:2;50564:21;;;50621:2;50601:18;;;50594:30;50660:26;50655:2;50640:18;;50633:54;50719:2;50704:18;;50554:174::o;50733:352::-;50935:2;50917:21;;;50974:2;50954:18;;;50947:30;51013;51008:2;50993:18;;50986:58;51076:2;51061:18;;50907:178::o;51090:348::-;51292:2;51274:21;;;51331:2;51311:18;;;51304:30;51370:26;51365:2;51350:18;;51343:54;51429:2;51414:18;;51264:174::o;51443:453::-;;51692:2;51681:9;51674:21;51718:54;51768:2;51757:9;51753:18;51745:6;51718:54;:::i;:::-;51820:9;51812:6;51808:22;51803:2;51792:9;51788:18;51781:50;51848:42;51883:6;51875;51848:42;:::i;:::-;51840:50;51664:232;-1:-1:-1;;;;;51664:232:67:o;51901:3061::-;;52074:2;52103;52092:9;52085:21;52125:3;52166:2;52155:9;52151:18;52204:6;52198:13;52230:6;52272:2;52267;52256:9;52252:18;52245:30;52295:6;52330:12;52324:19;52367:6;52359;52352:22;52393:3;52383:13;;52427:2;52416:9;52412:18;52405:25;;52490:2;52484;52476:6;52472:15;52461:9;52457:31;52453:40;52534:2;52520:12;52516:21;52502:35;;52555:4;52568:1760;52582:6;52579:1;52576:13;52568:1760;;;52647:22;;;-1:-1:-1;;52643:37:67;52631:50;;52704:13;;52745:9;;52730:25;;52796:11;;;52790:18;52821:61;52866:15;;;52790:18;52821:61;:::i;:::-;-1:-1:-1;52905:4:67;52952:11;;;52946:18;52929:15;;;52922:43;52988:4;53035:11;;;53029:18;53012:15;;;53005:43;53071:4;53118:11;;;53112:18;53095:15;;;53088:43;53154:4;53201:11;;;53195:18;53178:15;;;53171:43;53238:4;53283:12;;;53277:19;53309:62;53354:16;;;53277:19;53309:62;:::i;:::-;;;53395:4;53448:3;53444:2;53440:12;53434:19;53491:2;53485:3;53477:6;53473:16;53466:28;53521:51;53568:2;53560:6;53556:15;53540:14;53521:51;:::i;:::-;53507:65;;;53596:6;53651:3;53647:2;53643:12;53637:19;53706:6;53698;53694:19;53688:3;53680:6;53676:16;53669:45;53741:68;53802:6;53786:14;53741:68;:::i;:::-;53727:82;;;;53833:6;53891:3;53887:2;53883:12;53877:19;53871:3;53863:6;53859:16;53852:45;;53921:6;53979:3;53975:2;53971:12;53965:19;53959:3;53951:6;53947:16;53940:45;;54034:2;54030;54026:11;54020:18;54051:51;54098:2;54090:6;54086:15;54070:14;54051:51;:::i;:::-;-1:-1:-1;54143:11:67;;;54137:18;;54168:51;54203:15;;;54137:18;54168:51;:::i;:::-;54271:15;;;;54306:12;;;;54242:6;-1:-1:-1;;52604:1:67;52597:9;52568:1760;;;-1:-1:-1;54365:15:67;;;54359:22;54423;;;-1:-1:-1;;54419:36:67;54412:4;54397:20;;54390:66;54359:22;54479:71;54427:6;54359:22;54479:71;:::i;:::-;54465:85;;;;;54599:4;54591:6;54587:17;54581:24;54559:46;;54614:71;54679:4;54668:9;54664:20;54648:14;54614:71;:::i;:::-;54743:4;54735:6;54731:17;54725:24;54716:6;54705:9;54701:22;54694:56;54808:4;54800:6;54796:17;54790:24;54781:6;54770:9;54766:22;54759:56;54864:4;54856:6;54852:17;54846:24;54824:46;;54879:54;54929:2;54918:9;54914:18;54898:14;54879:54;:::i;:::-;-1:-1:-1;54950:6:67;;52054:2908;-1:-1:-1;;;;;;52054:2908:67:o;54967:2366::-;;55236:2;55225:9;55218:21;55258:3;55317:6;55311:13;55304:21;55297:29;55292:2;55281:9;55277:18;55270:57;55410:1;55406;55401:3;55397:11;55393:19;55385:4;55377:6;55373:17;55367:24;55363:50;55358:2;55347:9;55343:18;55336:78;55469:2;55461:6;55457:15;55451:22;55445:3;55434:9;55430:19;55423:51;55529:2;55521:6;55517:15;55511:22;55505:3;55494:9;55490:19;55483:51;55590:3;55582:6;55578:16;55572:23;55565:4;55554:9;55550:20;55543:53;55643:3;55635:6;55631:16;55625:23;55685:4;55679:3;55668:9;55664:19;55657:33;55710:52;55758:2;55747:9;55743:18;55729:12;55710:52;:::i;:::-;55699:63;;55809:9;55804:3;55800:19;55793:4;55782:9;55778:20;55771:49;55839:6;55854:37;55887:3;55878:6;55872:13;55854:37;:::i;:::-;55940:4;55932:6;55928:17;55922:24;55955:60;56009:4;56004:3;56000:14;55984;55955:60;:::i;:::-;;56064:2;56056:6;56052:15;56046:22;56077:58;56131:2;56126:3;56122:12;56106:14;56077:58;:::i;:::-;;56183:2;56175:6;56171:15;56165:22;56160:2;56155:3;56151:12;56144:44;56237:3;56229:6;56225:16;56219:23;56213:3;56208;56204:13;56197:46;56292:3;56284:6;56280:16;56274:23;56268:3;56263;56259:13;56252:46;56347:4;56339:6;56335:17;56329:24;56362:60;56416:4;56411:3;56407:14;56391;56362:60;:::i;:::-;;56471:3;56463:6;56459:16;56453:23;56485:59;56539:3;56534;56530:13;56514:14;56485:59;:::i;:::-;-1:-1:-1;56580:15:67;;;56574:22;56560:12;;;56553:44;;;;56616:6;56658:15;;;56652:22;56638:12;;;56631:44;56694:6;56736:15;;;56730:22;56716:12;;;56709:44;56772:6;56814:15;;;56808:22;56794:12;;;56787:44;56850:6;56893:15;;;56887:22;56925:12;;;56918:24;;;56850:6;;56939:2;56965:48;57000:12;;;56887:22;56965:48;:::i;:::-;56951:62;;;;57032:6;57087:2;57079:6;57075:15;57069:22;57100:48;57144:2;57139:3;57135:12;57119:14;57100:48;:::i;:::-;-1:-1:-1;;57167:6:67;57209:15;;;57203:22;57189:12;;;57182:44;57245:6;57287:15;;;57281:22;57267:12;;57260:44;;;;-1:-1:-1;57321:6:67;;55208:2125;-1:-1:-1;;55208:2125:67:o;57338:242::-;57408:2;57402:9;57438:17;;;-1:-1:-1;;;;;57470:34:67;;57506:22;;;57467:62;57464:2;;;57532:9;57464:2;57559;57552:22;57382:198;;-1:-1:-1;57382:198:67:o;57585:183::-;;-1:-1:-1;;;;;57676:6:67;57673:30;57670:2;;;57706:9;57670:2;-1:-1:-1;57757:4:67;57738:17;;;57734:28;;57660:108::o;57773:181::-;;-1:-1:-1;;;;;57848:6:67;57845:30;57842:2;;;57878:9;57842:2;-1:-1:-1;57937:2:67;57914:17;-1:-1:-1;;57910:31:67;57943:4;57906:42;;57832:122::o;57959:258::-;58031:1;58041:113;58055:6;58052:1;58049:13;58041:113;;;58131:11;;;58125:18;58112:11;;;58105:39;58077:2;58070:10;58041:113;;;58172:6;58169:1;58166:13;58163:2;;;-1:-1:-1;;58207:1:67;58189:16;;58182:27;58012:205::o;58222:133::-;-1:-1:-1;;;;;58299:31:67;;58289:42;;58279:2;;58345:1;58342;58335:12;58360:120;58448:5;58441:13;58434:21;58427:5;58424:32;58414:2;;58470:1;58467;58460:12;58485:133;-1:-1:-1;;;;;;58561:32:67;;58551:43;;58541:2;;58608:1;58605;58598:12", + "source": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.7.6;\npragma abicoder v2;\n\nimport \"@rarible/transfer-manager/contracts/lib/LibTransfer.sol\";\nimport \"@rarible/lib-bp/contracts/BpLibrary.sol\";\nimport \"@rarible/lib-part/contracts/LibPart.sol\";\n\n// import \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol\";\n\n// import \"@openzeppelin/contracts/token/ERC721/ERC721Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol\";\n// import \"@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol\";\n// import \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol\";\n\nimport \"@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol\";\nimport \"@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol\";\nimport \"@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol\";\nimport \"@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol\";\nimport \"@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol\";\nimport \"@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol\";\n\n// import \"./libraries/IsPausable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/proxy/Initializable.sol\";\n\n// contract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable {\ncontract RaribleExchangeWrapperUpgradeableV2 is Initializable, OwnableUpgradeable, ERC721HolderUpgradeable, ERC1155HolderUpgradeable, PausableUpgradeable {\n using LibTransfer for address;\n using BpLibrary for uint256;\n using SafeMathUpgradeable for uint256;\n\n //marketplaces\n address public wyvernExchange;\n address public exchangeV2;\n address public seaPort_1_1;\n address public x2y2;\n address public looksRare;\n address public sudoswap;\n address public seaPort_1_4;\n address public looksRareV2;\n address public blur;\n address public seaPort_1_5;\n address public seaPort_1_6;\n\n // new marketplace\n address public newMarket;\n\n //currencties\n address public weth;\n\n //constants\n uint256 private constant UINT256_MAX = type(uint256).max;\n\n event Execution(bool result);\n event MarketplaceAddressUpdated(Markets indexed _market, address indexed _newAddress);\n\n enum Markets {\n ExchangeV2, //0\n WyvernExchange, //1\n SeaPort_1_1, //2\n X2Y2, //3\n LooksRareOrders, //4\n SudoSwap, //5\n SeaPort_1_4, //6\n LooksRareV2, //7\n Blur, //8\n SeaPort_1_5, //9\n SeaPort_1_6, //10\n NewMarket\n }\n\n enum AdditionalDataTypes {\n NoAdditionalData,\n RoyaltiesAdditionalData\n }\n\n enum Currencies {\n ETH,\n WETH\n }\n\n /**\n @notice struct for the purchase data\n @param marketId - market key from Markets enum (what market to use)\n @param amount - eth price (amount of eth that needs to be send to the marketplace)\n @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256\n bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20)\n bytes (27,28) used for dataType\n bytes (29,30) used for the first value (goes to feeRecipientFirst)\n bytes (31,32) are used for the second value (goes to feeRecipientSecond)\n @param data - data for market call\n */\n struct PurchaseDetails {\n Markets marketId;\n uint256 amount;\n uint256 fees;\n bytes data;\n }\n\n /**\n @notice struct for the data with additional Ddta\n @param data - data for market call\n @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient)\n */\n struct AdditionalData {\n bytes data;\n uint256[] additionalRoyalties;\n }\n\n /**\n @notice initializes the proxy contract\n @param _marketplaces - array of addresses of the marketplaces\n @param _weth - address of the WETH erc-20 token\n @param _transferProxies - array of addresses of the transfer proxies\n @param _initialOwner - address of the owner\n */\n function __ExchangeWrapper_init_proxy(\n address[12] memory _marketplaces,\n address _weth,\n address[] memory _transferProxies,\n address _initialOwner\n ) public initializer {\n __Ownable_init();\n __ERC721Holder_init();\n __ERC1155Holder_init();\n __Pausable_init();\n\n wyvernExchange = _marketplaces[0];\n exchangeV2 = _marketplaces[1];\n seaPort_1_1 = _marketplaces[2];\n x2y2 = _marketplaces[3];\n looksRare = _marketplaces[4];\n sudoswap = _marketplaces[5];\n seaPort_1_4 = _marketplaces[6];\n looksRareV2 = _marketplaces[7];\n blur = _marketplaces[8];\n seaPort_1_5 = _marketplaces[9];\n seaPort_1_6 = _marketplaces[10];\n newMarket = _marketplaces[11];\n\n weth = _weth;\n\n for (uint256 i = 0; i < _transferProxies.length; ++i) {\n if (weth != address(0)) {\n IERC20Upgradeable(weth).approve(_transferProxies[i], UINT256_MAX);\n }\n }\n\n transferOwnership(_initialOwner);\n }\n\n /**\n @notice sets the address of the new marketplace\n @param _newMarket - address of the new marketplace\n */\n function __initializeNewMarket(address _newMarket) external onlyOwner {\n require(newMarket == address(0), \"NewMarket address is already set\");\n newMarket = _newMarket;\n }\n\n /**\n @notice executes a single purchase\n @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n */\n function singlePurchase(\n PurchaseDetails memory purchaseDetails,\n address feeRecipientFirst,\n address feeRecipientSecond\n ) external payable whenNotPaused {\n //amount of WETH needed for purchases:\n uint256 wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails);\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n Currencies currency = getCurrency(purchaseDetails.fees);\n bool success;\n uint256 firstFeeAmount;\n uint256 secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false);\n transferFeeETH(firstFeeAmount, feeRecipientFirst);\n transferFeeETH(secondFeeAmount, feeRecipientSecond);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false);\n transferFeeWETH(firstFeeAmount, feeRecipientFirst);\n transferFeeWETH(secondFeeAmount, feeRecipientSecond);\n } else {\n revert(\"Unknown purchase currency\");\n }\n\n emit Execution(success);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes an array of purchases\n @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n @param feeRecipientFirst - address of the first fee recipient\n @param feeRecipientSecond - address of the second fee recipient\n @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch\n */\n\n function bulkPurchase(\n PurchaseDetails[] memory purchaseDetails,\n address feeRecipientFirst,\n address feeRecipientSecond,\n bool allowFail\n ) external payable whenNotPaused {\n uint256 sumFirstFeesETH = 0;\n uint256 sumSecondFeesETH = 0;\n uint256 sumFirstFeesWETH = 0;\n uint256 sumSecondFeesWETH = 0;\n bool result = false;\n\n //amount of WETH needed for purchases:\n uint256 wethAmountNeeded = 0;\n for (uint256 i = 0; i < purchaseDetails.length; ++i) {\n wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]);\n }\n\n //transfer WETH to this contract (if needed)\n if (wethAmountNeeded > 0) {\n IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded);\n }\n\n for (uint256 i = 0; i < purchaseDetails.length; ++i) {\n Currencies currency = getCurrency(purchaseDetails[i].fees);\n bool success;\n uint256 firstFeeAmount;\n uint256 secondFeeAmount;\n\n if (currency == Currencies.ETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail);\n\n sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount);\n sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount);\n } else if (currency == Currencies.WETH) {\n (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail);\n\n sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount);\n sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount);\n } else {\n revert(\"Unknown purchase currency\");\n }\n\n result = result || success;\n emit Execution(success);\n }\n\n require(result, \"no successful executions\");\n\n //pay fees in ETH\n transferFeeETH(sumFirstFeesETH, feeRecipientFirst);\n transferFeeETH(sumSecondFeesETH, feeRecipientSecond);\n\n //pay fees in WETH\n transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst);\n transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond);\n\n //transfer ETH change\n transferChange();\n //transfer WETH change\n if (wethAmountNeeded > 0) {\n transferChangeWETH();\n }\n }\n\n /**\n @notice executes one purchase in ETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchase(PurchaseDetails memory purchaseDetails, bool allowFail)\n internal\n returns (\n bool,\n uint256,\n uint256\n )\n {\n (bytes memory marketData, uint256[] memory additionalRoyalties) = getDataAndAdditionalData(purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n uint256 paymentAmount = purchaseDetails.amount;\n if (purchaseDetails.marketId == Markets.SeaPort_1_1) {\n (bool success, ) = address(seaPort_1_1).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.WyvernExchange) {\n (bool success, ) = address(wyvernExchange).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase wyvernExchange failed\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success, ) = address(exchangeV2).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed\");\n }\n } else if (purchaseDetails.marketId == Markets.X2Y2) {\n Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput));\n\n if (allowFail) {\n try Ix2y2(x2y2).run{value: paymentAmount}(input) {} catch {\n return (false, 0, 0);\n }\n } else {\n Ix2y2(x2y2).run{value: paymentAmount}(input);\n }\n\n //for every element in input.details[] getting\n // order = input.details[i].orderIdx\n // and from that order getting item = input.details[i].itemId\n for (uint256 i = 0; i < input.details.length; ++i) {\n uint256 orderId = input.details[i].orderIdx;\n uint256 itemId = input.details[i].itemIdx;\n bytes memory data = input.orders[orderId].items[itemId].data;\n {\n if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) {\n _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask);\n }\n }\n\n // 1 = erc-721\n if (input.orders[orderId].delegateType == 1) {\n Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair721 memory p = pairs[j];\n IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId);\n }\n } else if (input.orders[orderId].delegateType == 2) {\n // 2 = erc-1155\n Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[]));\n\n for (uint256 j = 0; j < pairs.length; j++) {\n Ix2y2.Pair1155 memory p = pairs[j];\n IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, \"\");\n }\n } else {\n revert(\"unknown delegateType x2y2\");\n }\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareOrders) {\n (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4));\n if (allowFail) {\n try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value: paymentAmount}(takerOrder, makerOrder) {} catch {\n return (false, 0, 0);\n }\n } else {\n ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value: paymentAmount}(takerOrder, makerOrder);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SudoSwap) {\n (bool success, ) = address(sudoswap).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase sudoswap failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4) {\n (bool success, ) = address(seaPort_1_4).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.LooksRareV2) {\n (bool success, ) = address(looksRareV2).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase LooksRareV2 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.Blur) {\n (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4));\n if (allowFail) {\n try IBlur(blur).execute{value: paymentAmount}(sell, buy) {} catch {\n return (false, 0, 0);\n }\n } else {\n IBlur(blur).execute{value: paymentAmount}(sell, buy);\n }\n if (typeNft == LibAsset.ERC721_ASSET_CLASS) {\n IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId);\n } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) {\n IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, \"\");\n } else {\n revert(\"Unknown token type\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5) {\n (bool success, ) = address(seaPort_1_5).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6) {\n (bool success, ) = address(seaPort_1_6).call{value: paymentAmount}(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed\");\n }\n } else if (purchaseDetails.marketId == Markets.NewMarket) {\n /* Implement new market handling */\n require(newMarket != address(0), \"NewMarket address is not set\");\n } else {\n revert(\"Unknown marketId ETH\");\n }\n\n //transferring royalties\n transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount);\n\n (uint256 firstFeeAmount, uint256 secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice executes one purchase in WETH\n @param purchaseDetails - details about the purchase\n @param allowFail - true if errors are handled, false if revert on errors\n @return result false if execution failed, true if succeded\n @return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n @return secondFeeAmount amount of the second fee of the purchase, 0 if failed\n */\n function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail)\n internal\n returns (\n bool,\n uint256,\n uint256\n )\n {\n (bytes memory marketData, uint256[] memory additionalRoyalties) = getDataAndAdditionalData(purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId);\n\n //buying\n if (purchaseDetails.marketId == Markets.SeaPort_1_1) {\n (bool success, ) = address(seaPort_1_1).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_1 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.ExchangeV2) {\n (bool success, ) = address(exchangeV2).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase rarible failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_4) {\n (bool success, ) = address(seaPort_1_4).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_4 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_5) {\n (bool success, ) = address(seaPort_1_5).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_5 failed WETH\");\n }\n } else if (purchaseDetails.marketId == Markets.SeaPort_1_6) {\n (bool success, ) = address(seaPort_1_6).call(marketData);\n if (allowFail) {\n if (!success) {\n return (false, 0, 0);\n }\n } else {\n require(success, \"Purchase SeaPort_1_6 failed WETH\");\n }\n } else {\n revert(\"Unknown marketId WETH\");\n }\n\n //transfer royalties\n transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount);\n\n //get fees\n (uint256 firstFeeAmount, uint256 secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount);\n return (true, firstFeeAmount, secondFeeAmount);\n }\n\n /**\n @notice transfers ETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeETH(uint256 feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n LibTransfer.transferEth(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers WETH fee to feeRecipient\n @param feeAmount - amount to be transfered\n @param feeRecipient - address of the recipient\n */\n function transferFeeWETH(uint256 feeAmount, address feeRecipient) internal {\n if (feeAmount > 0 && feeRecipient != address(0)) {\n IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount);\n }\n }\n\n /**\n @notice transfers change back to sender\n */\n function transferChange() internal {\n uint256 ethAmount = address(this).balance;\n if (ethAmount > 0) {\n address(msg.sender).transferEth(ethAmount);\n }\n }\n\n /**\n @notice transfers weth change back to sender\n */\n function transferChangeWETH() internal {\n uint256 wethAmount = IERC20Upgradeable(weth).balanceOf(address(this));\n if (wethAmount > 0) {\n IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount);\n }\n }\n\n /**\n @notice parses fees in base points from one uint and calculates real amount of fees\n @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n @param amount price of the order\n @return firstFeeAmount real amount for the first fee\n @return secondFeeAmount real amount for the second fee\n */\n function getFees(uint256 fees, uint256 amount) internal pure returns (uint256, uint256) {\n uint256 firstFee = uint256(uint16(fees >> 16));\n uint256 secondFee = uint256(uint16(fees));\n return (amount.bp(firstFee), amount.bp(secondFee));\n }\n\n /**\n @notice parses \"fees\" field to find the currency for the purchase\n @param fees field with encoded data\n @return 0 if ETH, 1 if WETH ERC-20\n */\n function getCurrency(uint256 fees) internal pure returns (Currencies) {\n return Currencies(uint16(fees >> 48));\n }\n\n /**\n @notice parses _data to data for market call and additionalData\n @param feesAndDataType 27 and 28 bytes for dataType\n @return marketData data for market call\n @return additionalRoyalties array uint256, (base point + address)\n */\n function getDataAndAdditionalData(\n bytes memory _data,\n uint256 feesAndDataType,\n Markets marketId\n ) internal pure returns (bytes memory, uint256[] memory) {\n AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32));\n uint256[] memory additionalRoyalties;\n\n //return no royalties if wrong data type\n if (dataType == AdditionalDataTypes.NoAdditionalData) {\n return (_data, additionalRoyalties);\n }\n\n if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) {\n AdditionalData memory additionalData = abi.decode(_data, (AdditionalData));\n\n //return no royalties if market doesn't support royalties\n if (supportsRoyalties(marketId)) {\n return (additionalData.data, additionalData.additionalRoyalties);\n } else {\n return (additionalData.data, additionalRoyalties);\n }\n }\n\n revert(\"unknown additionalDataType\");\n }\n\n /**\n @notice transfer additional royalties in ETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesETH(uint256[] memory _additionalRoyalties, uint256 amount) internal {\n for (uint256 i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint256 basePoint = uint256(_additionalRoyalties[i] >> 160);\n uint256 value = amount.bp(basePoint);\n transferFeeETH(value, account);\n }\n }\n }\n\n /**\n @notice transfer additional royalties in WETH\n @param _additionalRoyalties array uint256 (base point + royalty recipient address)\n */\n function transferAdditionalRoyaltiesWETH(uint256[] memory _additionalRoyalties, uint256 amount) internal {\n for (uint256 i = 0; i < _additionalRoyalties.length; ++i) {\n if (_additionalRoyalties[i] > 0) {\n address payable account = payable(address(_additionalRoyalties[i]));\n uint256 basePoint = uint256(_additionalRoyalties[i] >> 160);\n uint256 value = amount.bp(basePoint);\n transferFeeWETH(value, account);\n }\n }\n }\n\n // modifies `src`\n function _arrayReplace(\n bytes memory src,\n bytes memory replacement,\n bytes memory mask\n ) internal view virtual {\n require(src.length == replacement.length);\n require(src.length == mask.length);\n\n for (uint256 i = 0; i < src.length; ++i) {\n if (mask[i] != 0) {\n src[i] = replacement[i];\n }\n }\n }\n\n /**\n @notice returns true if this contract supports additional royalties for the marketplace;\n now royalties are supported for:\n 1. SudoSwap\n 2. LooksRare old\n 3. LooksRare V2\n */\n function supportsRoyalties(Markets marketId) internal pure returns (bool) {\n if (marketId == Markets.SudoSwap || marketId == Markets.LooksRareOrders || marketId == Markets.LooksRareV2) {\n return true;\n }\n\n return false;\n }\n\n function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint256) {\n uint256 result = 0;\n\n Currencies currency = getCurrency(detail.fees);\n\n //for every purchase with WETH we sum amount, fees and royalties needed\n if (currency == Currencies.WETH) {\n //add amount\n result = result + detail.amount;\n\n //add fees\n (uint256 firstFeeAmount, uint256 secondFeeAmount) = getFees(detail.fees, detail.amount);\n result = result + firstFeeAmount + secondFeeAmount;\n\n //add royalties\n (, uint256[] memory royalties) = getDataAndAdditionalData(detail.data, detail.fees, detail.marketId);\n for (uint256 j = 0; j < royalties.length; ++j) {\n uint256 royaltyBasePoint = uint256(royalties[j] >> 160);\n uint256 royaltyValue = detail.amount.bp(royaltyBasePoint);\n result = result + royaltyValue;\n }\n }\n\n return result;\n }\n\n /**\n @notice approves weth for a list of the addresses\n @param transferProxies - array of addresses to approve WETH for\n */\n function approveWETH(address[] calldata transferProxies) external onlyOwner {\n for (uint256 i = 0; i < transferProxies.length; ++i) {\n IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX);\n }\n }\n\n /**\n * @notice updates the address of the marketplace\n * @param _market - type of the marketplace\n * @param _newAddress - new address of the marketplace\n */\n function updateMarketplaceAddress(Markets _market, address _newAddress) external onlyOwner {\n require(_newAddress != address(0), \"New address cannot be zero\");\n\n if (_market == Markets.WyvernExchange) {\n wyvernExchange = _newAddress;\n } else if (_market == Markets.ExchangeV2) {\n exchangeV2 = _newAddress;\n } else if (_market == Markets.SeaPort_1_1) {\n seaPort_1_1 = _newAddress;\n } else if (_market == Markets.X2Y2) {\n x2y2 = _newAddress;\n } else if (_market == Markets.LooksRareOrders) {\n looksRare = _newAddress;\n } else if (_market == Markets.SudoSwap) {\n sudoswap = _newAddress;\n } else if (_market == Markets.SeaPort_1_4) {\n seaPort_1_4 = _newAddress;\n } else if (_market == Markets.LooksRareV2) {\n looksRareV2 = _newAddress;\n } else if (_market == Markets.Blur) {\n blur = _newAddress;\n } else if (_market == Markets.SeaPort_1_5) {\n seaPort_1_5 = _newAddress;\n } else if (_market == Markets.SeaPort_1_6) {\n seaPort_1_6 = _newAddress;\n } else if (_market == Markets.NewMarket) {\n newMarket = _newAddress;\n } else {\n revert(\"Invalid marketplace type\");\n }\n\n emit MarketplaceAddressUpdated(_market, _newAddress);\n }\n\n receive() external payable {}\n\n uint256[50] private __gap;\n}\n", + "sourcePath": "/Users/gonzaotc/developer/github/rarible/protocol-contracts/projects/exchange-wrapper/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol", + "ast": { + "absolutePath": "project:/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol", + "exportedSymbols": { + "AddressUpgradeable": [ + 1600 + ], + "AssetMatcher": [ + 2132 + ], + "BpLibrary": [ + 5594 + ], + "ContextUpgradeable": [ + 1645 + ], + "EIP712Upgradeable": [ + 290 + ], + "ERC1155HolderUpgradeable": [ + 877 + ], + "ERC1155ReceiverUpgradeable": [ + 932 + ], + "ERC165Upgradeable": [ + 365 + ], + "ERC20TransferProxy": [ + 8528 + ], + "ERC721HolderUpgradeable": [ + 1222 + ], + "ExchangeV2": [ + 2257 + ], + "ExchangeV2Core": [ + 3234 + ], + "IAssetMatcher": [ + 1772 + ], + "IBlur": [ + 4564 + ], + "IERC1155ReceiverUpgradeable": [ + 973 + ], + "IERC1155Upgradeable": [ + 1095 + ], + "IERC1271": [ + 5639 + ], + "IERC165Upgradeable": [ + 377 + ], + "IERC20TransferProxy": [ + 1788 + ], + "IERC20Upgradeable": [ + 1173 + ], + "IERC721ReceiverUpgradeable": [ + 1240 + ], + "IERC721Upgradeable": [ + 1356 + ], + "IExchangeV2": [ + 4591 + ], + "ILooksRare": [ + 4617 + ], + "INftTransferProxy": [ + 1820 + ], + "IRoyaltiesProvider": [ + 1835 + ], + "ISeaPort": [ + 4672 + ], + "ITransferExecutor": [ + 8325 + ], + "ITransferManager": [ + 8346 + ], + "ITransferProxy": [ + 1849 + ], + "IWyvernExchange": [ + 4734 + ], + "Initializable": [ + 798 + ], + "Ix2y2": [ + 4854 + ], + "LibAsset": [ + 5569 + ], + "LibDeal": [ + 8368 + ], + "LibDirectTransfer": [ + 3436 + ], + "LibERC1155LazyMint": [ + 5308 + ], + "LibERC721LazyMint": [ + 5456 + ], + "LibFeeSide": [ + 8443 + ], + "LibFill": [ + 3597 + ], + "LibLooksRare": [ + 4962 + ], + "LibMath": [ + 3794 + ], + "LibOrder": [ + 4037 + ], + "LibOrderData": [ + 4432 + ], + "LibOrderDataV1": [ + 4452 + ], + "LibOrderDataV2": [ + 4474 + ], + "LibOrderDataV3": [ + 4496 + ], + "LibPart": [ + 5626 + ], + "LibSeaPort": [ + 5156 + ], + "LibSignature": [ + 5791 + ], + "LibTransfer": [ + 8468 + ], + "OrderValidator": [ + 3370 + ], + "OwnableUpgradeable": [ + 130 + ], + "PausableUpgradeable": [ + 1758 + ], + "RaribleExchangeWrapperUpgradeableV2": [ + 11101 + ], + "RaribleTransferManager": [ + 7969 + ], + "RoyaltiesRegistry": [ + 6722 + ], + "SafeMathUpgradeable": [ + 732 + ], + "TransferExecutor": [ + 8309 + ], + "TransferProxy": [ + 8615 + ] + }, + "id": 11102, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 8617, + "literals": [ + "solidity", + "0.7", + ".6" + ], + "nodeType": "PragmaDirective", + "src": "33:22:66" + }, + { + "id": 8618, + "literals": [ + "abicoder", + "v2" + ], + "nodeType": "PragmaDirective", + "src": "56:19:66" + }, + { + "absolutePath": "@rarible/transfer-manager/contracts/lib/LibTransfer.sol", + "file": "@rarible/transfer-manager/contracts/lib/LibTransfer.sol", + "id": 8619, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 8469, + "src": "77:65:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@rarible/lib-bp/contracts/BpLibrary.sol", + "file": "@rarible/lib-bp/contracts/BpLibrary.sol", + "id": 8620, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 5595, + "src": "143:49:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@rarible/lib-part/contracts/LibPart.sol", + "file": "@rarible/lib-part/contracts/LibPart.sol", + "id": 8621, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 5627, + "src": "193:49:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol", + "id": 8622, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 733, + "src": "299:74:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol", + "id": 8623, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 1223, + "src": "442:86:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol", + "id": 8624, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 878, + "src": "598:88:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol", + "id": 8625, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 1174, + "src": "770:79:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol", + "file": "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol", + "id": 8626, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 4735, + "src": "851:76:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol", + "file": "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol", + "id": 8627, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 4592, + "src": "928:72:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol", + "file": "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol", + "id": 8628, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 4673, + "src": "1001:69:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol", + "file": "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol", + "id": 8629, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 4855, + "src": "1071:66:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol", + "file": "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol", + "id": 8630, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 4618, + "src": "1138:71:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol", + "file": "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol", + "id": 8631, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 4565, + "src": "1210:66:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", + "id": 8632, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 1759, + "src": "1318:75:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "id": 8633, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 131, + "src": "1395:75:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol", + "file": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol", + "id": 8634, + "nodeType": "ImportDirective", + "scope": 11102, + "sourceUnit": 799, + "src": "1471:69:66", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 8635, + "name": "Initializable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 798, + "src": "1679:13:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_Initializable_$798", + "typeString": "contract Initializable" + } + }, + "id": 8636, + "nodeType": "InheritanceSpecifier", + "src": "1679:13:66" + }, + { + "baseName": { + "id": 8637, + "name": "OwnableUpgradeable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 130, + "src": "1694:18:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_OwnableUpgradeable_$130", + "typeString": "contract OwnableUpgradeable" + } + }, + "id": 8638, + "nodeType": "InheritanceSpecifier", + "src": "1694:18:66" + }, + { + "baseName": { + "id": 8639, + "name": "ERC721HolderUpgradeable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1222, + "src": "1714:23:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC721HolderUpgradeable_$1222", + "typeString": "contract ERC721HolderUpgradeable" + } + }, + "id": 8640, + "nodeType": "InheritanceSpecifier", + "src": "1714:23:66" + }, + { + "baseName": { + "id": 8641, + "name": "ERC1155HolderUpgradeable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 877, + "src": "1739:24:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC1155HolderUpgradeable_$877", + "typeString": "contract ERC1155HolderUpgradeable" + } + }, + "id": 8642, + "nodeType": "InheritanceSpecifier", + "src": "1739:24:66" + }, + { + "baseName": { + "id": 8643, + "name": "PausableUpgradeable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 1758, + "src": "1765:19:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_PausableUpgradeable_$1758", + "typeString": "contract PausableUpgradeable" + } + }, + "id": 8644, + "nodeType": "InheritanceSpecifier", + "src": "1765:19:66" + } + ], + "contractDependencies": [ + 130, + 365, + 377, + 798, + 877, + 932, + 973, + 1222, + 1240, + 1645, + 1758 + ], + "contractKind": "contract", + "fullyImplemented": true, + "id": 11101, + "linearizedBaseContracts": [ + 11101, + 1758, + 877, + 932, + 973, + 365, + 377, + 1222, + 1240, + 130, + 1645, + 798 + ], + "name": "RaribleExchangeWrapperUpgradeableV2", + "nodeType": "ContractDefinition", + "nodes": [ + { + "id": 8647, + "libraryName": { + "id": 8645, + "name": "LibTransfer", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8468, + "src": "1797:11:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_LibTransfer_$8468", + "typeString": "library LibTransfer" + } + }, + "nodeType": "UsingForDirective", + "src": "1791:30:66", + "typeName": { + "id": 8646, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1813:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + }, + { + "id": 8650, + "libraryName": { + "id": 8648, + "name": "BpLibrary", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 5594, + "src": "1832:9:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_BpLibrary_$5594", + "typeString": "library BpLibrary" + } + }, + "nodeType": "UsingForDirective", + "src": "1826:28:66", + "typeName": { + "id": 8649, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1846:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "id": 8653, + "libraryName": { + "id": 8651, + "name": "SafeMathUpgradeable", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 732, + "src": "1865:19:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_SafeMathUpgradeable_$732", + "typeString": "library SafeMathUpgradeable" + } + }, + "nodeType": "UsingForDirective", + "src": "1859:38:66", + "typeName": { + "id": 8652, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1889:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "constant": false, + "functionSelector": "c9f0a2fa", + "id": 8655, + "mutability": "mutable", + "name": "wyvernExchange", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "1922:29:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8654, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1922:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "a05f32dc", + "id": 8657, + "mutability": "mutable", + "name": "exchangeV2", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "1957:25:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8656, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1957:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "008534f7", + "id": 8659, + "mutability": "mutable", + "name": "seaPort_1_1", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "1988:26:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8658, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1988:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "fc40c9c7", + "id": 8661, + "mutability": "mutable", + "name": "x2y2", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "2020:19:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8660, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2020:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "9110c777", + "id": 8663, + "mutability": "mutable", + "name": "looksRare", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "2045:24:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8662, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2045:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "5ea1e4c9", + "id": 8665, + "mutability": "mutable", + "name": "sudoswap", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "2075:23:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8664, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2075:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "bd4486ee", + "id": 8667, + "mutability": "mutable", + "name": "seaPort_1_4", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "2104:26:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8666, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2104:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "3733b82b", + "id": 8669, + "mutability": "mutable", + "name": "looksRareV2", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "2136:26:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8668, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2136:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "df6c2558", + "id": 8671, + "mutability": "mutable", + "name": "blur", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "2168:19:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8670, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2168:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "349d6a85", + "id": 8673, + "mutability": "mutable", + "name": "seaPort_1_5", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "2193:26:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8672, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2193:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "f66ac0cb", + "id": 8675, + "mutability": "mutable", + "name": "seaPort_1_6", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "2225:26:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8674, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2225:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "cc236dfa", + "id": 8677, + "mutability": "mutable", + "name": "newMarket", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "2281:24:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8676, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2281:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": false, + "functionSelector": "3fc8cef3", + "id": 8679, + "mutability": "mutable", + "name": "weth", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "2330:19:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8678, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2330:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "public" + }, + { + "constant": true, + "id": 8686, + "mutability": "constant", + "name": "UINT256_MAX", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "2372:56:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8680, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2372:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "value": { + "expression": { + "arguments": [ + { + "id": 8683, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2416:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 8682, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2416:7:66", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "id": 8681, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967269, + "src": "2411:4:66", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 8684, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "2411:13:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint256", + "typeString": "type(uint256)" + } + }, + "id": 8685, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "max", + "nodeType": "MemberAccess", + "src": "2411:17:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "private" + }, + { + "anonymous": false, + "id": 8690, + "name": "Execution", + "nodeType": "EventDefinition", + "parameters": { + "id": 8689, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8688, + "indexed": false, + "mutability": "mutable", + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 8690, + "src": "2451:11:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8687, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2451:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2450:13:66" + }, + "src": "2435:29:66" + }, + { + "anonymous": false, + "id": 8696, + "name": "MarketplaceAddressUpdated", + "nodeType": "EventDefinition", + "parameters": { + "id": 8695, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8692, + "indexed": true, + "mutability": "mutable", + "name": "_market", + "nodeType": "VariableDeclaration", + "scope": 8696, + "src": "2501:23:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "typeName": { + "id": 8691, + "name": "Markets", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8709, + "src": "2501:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8694, + "indexed": true, + "mutability": "mutable", + "name": "_newAddress", + "nodeType": "VariableDeclaration", + "scope": 8696, + "src": "2526:27:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8693, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2526:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2500:54:66" + }, + "src": "2469:86:66" + }, + { + "canonicalName": "RaribleExchangeWrapperUpgradeableV2.Markets", + "id": 8709, + "members": [ + { + "id": 8697, + "name": "ExchangeV2", + "nodeType": "EnumValue", + "src": "2584:10:66" + }, + { + "id": 8698, + "name": "WyvernExchange", + "nodeType": "EnumValue", + "src": "2608:14:66" + }, + { + "id": 8699, + "name": "SeaPort_1_1", + "nodeType": "EnumValue", + "src": "2636:11:66" + }, + { + "id": 8700, + "name": "X2Y2", + "nodeType": "EnumValue", + "src": "2661:4:66" + }, + { + "id": 8701, + "name": "LooksRareOrders", + "nodeType": "EnumValue", + "src": "2679:15:66" + }, + { + "id": 8702, + "name": "SudoSwap", + "nodeType": "EnumValue", + "src": "2708:8:66" + }, + { + "id": 8703, + "name": "SeaPort_1_4", + "nodeType": "EnumValue", + "src": "2730:11:66" + }, + { + "id": 8704, + "name": "LooksRareV2", + "nodeType": "EnumValue", + "src": "2755:11:66" + }, + { + "id": 8705, + "name": "Blur", + "nodeType": "EnumValue", + "src": "2780:4:66" + }, + { + "id": 8706, + "name": "SeaPort_1_5", + "nodeType": "EnumValue", + "src": "2798:11:66" + }, + { + "id": 8707, + "name": "SeaPort_1_6", + "nodeType": "EnumValue", + "src": "2823:11:66" + }, + { + "id": 8708, + "name": "NewMarket", + "nodeType": "EnumValue", + "src": "2849:9:66" + } + ], + "name": "Markets", + "nodeType": "EnumDefinition", + "src": "2561:303:66" + }, + { + "canonicalName": "RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes", + "id": 8712, + "members": [ + { + "id": 8710, + "name": "NoAdditionalData", + "nodeType": "EnumValue", + "src": "2905:16:66" + }, + { + "id": 8711, + "name": "RoyaltiesAdditionalData", + "nodeType": "EnumValue", + "src": "2931:23:66" + } + ], + "name": "AdditionalDataTypes", + "nodeType": "EnumDefinition", + "src": "2870:90:66" + }, + { + "canonicalName": "RaribleExchangeWrapperUpgradeableV2.Currencies", + "id": 8715, + "members": [ + { + "id": 8713, + "name": "ETH", + "nodeType": "EnumValue", + "src": "2992:3:66" + }, + { + "id": 8714, + "name": "WETH", + "nodeType": "EnumValue", + "src": "3005:4:66" + } + ], + "name": "Currencies", + "nodeType": "EnumDefinition", + "src": "2966:49:66" + }, + { + "canonicalName": "RaribleExchangeWrapperUpgradeableV2.PurchaseDetails", + "id": 8724, + "members": [ + { + "constant": false, + "id": 8717, + "mutability": "mutable", + "name": "marketId", + "nodeType": "VariableDeclaration", + "scope": 8724, + "src": "3769:16:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "typeName": { + "id": 8716, + "name": "Markets", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8709, + "src": "3769:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8719, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 8724, + "src": "3795:14:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8718, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3795:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8721, + "mutability": "mutable", + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 8724, + "src": "3819:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8720, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3819:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8723, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 8724, + "src": "3841:10:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 8722, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3841:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "name": "PurchaseDetails", + "nodeType": "StructDefinition", + "scope": 11101, + "src": "3736:122:66", + "visibility": "public" + }, + { + "canonicalName": "RaribleExchangeWrapperUpgradeableV2.AdditionalData", + "id": 8730, + "members": [ + { + "constant": false, + "id": 8726, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 8730, + "src": "4124:10:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 8725, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4124:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8729, + "mutability": "mutable", + "name": "additionalRoyalties", + "nodeType": "VariableDeclaration", + "scope": 8730, + "src": "4144:29:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 8727, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4144:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8728, + "nodeType": "ArrayTypeName", + "src": "4144:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "name": "AdditionalData", + "nodeType": "StructDefinition", + "scope": 11101, + "src": "4092:88:66", + "visibility": "public" + }, + { + "body": { + "id": 8870, + "nodeType": "Block", + "src": "4706:863:66", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8747, + "name": "__Ownable_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 29, + "src": "4716:14:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8748, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4716:16:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8749, + "nodeType": "ExpressionStatement", + "src": "4716:16:66" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8750, + "name": "__ERC721Holder_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1191, + "src": "4742:19:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8751, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4742:21:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8752, + "nodeType": "ExpressionStatement", + "src": "4742:21:66" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8753, + "name": "__ERC1155Holder_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 822, + "src": "4773:20:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8754, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4773:22:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8755, + "nodeType": "ExpressionStatement", + "src": "4773:22:66" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8756, + "name": "__Pausable_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1679, + "src": "4805:15:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 8757, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "4805:17:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8758, + "nodeType": "ExpressionStatement", + "src": "4805:17:66" + }, + { + "expression": { + "id": 8763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8759, + "name": "wyvernExchange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8655, + "src": "4833:14:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8760, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8735, + "src": "4850:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_memory_ptr", + "typeString": "address[12] memory" + } + }, + "id": 8762, + "indexExpression": { + "hexValue": "30", + "id": 8761, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4864:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4850:16:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4833:33:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8764, + "nodeType": "ExpressionStatement", + "src": "4833:33:66" + }, + { + "expression": { + "id": 8769, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8765, + "name": "exchangeV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8657, + "src": "4876:10:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8766, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8735, + "src": "4889:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_memory_ptr", + "typeString": "address[12] memory" + } + }, + "id": 8768, + "indexExpression": { + "hexValue": "31", + "id": 8767, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4903:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4889:16:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4876:29:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8770, + "nodeType": "ExpressionStatement", + "src": "4876:29:66" + }, + { + "expression": { + "id": 8775, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8771, + "name": "seaPort_1_1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8659, + "src": "4915:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8772, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8735, + "src": "4929:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_memory_ptr", + "typeString": "address[12] memory" + } + }, + "id": 8774, + "indexExpression": { + "hexValue": "32", + "id": 8773, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4943:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4929:16:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4915:30:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8776, + "nodeType": "ExpressionStatement", + "src": "4915:30:66" + }, + { + "expression": { + "id": 8781, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8777, + "name": "x2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8661, + "src": "4955:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8778, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8735, + "src": "4962:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_memory_ptr", + "typeString": "address[12] memory" + } + }, + "id": 8780, + "indexExpression": { + "hexValue": "33", + "id": 8779, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4976:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_3_by_1", + "typeString": "int_const 3" + }, + "value": "3" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "4962:16:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4955:23:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8782, + "nodeType": "ExpressionStatement", + "src": "4955:23:66" + }, + { + "expression": { + "id": 8787, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8783, + "name": "looksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8663, + "src": "4988:9:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8784, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8735, + "src": "5000:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_memory_ptr", + "typeString": "address[12] memory" + } + }, + "id": 8786, + "indexExpression": { + "hexValue": "34", + "id": 8785, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5014:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_4_by_1", + "typeString": "int_const 4" + }, + "value": "4" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5000:16:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4988:28:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8788, + "nodeType": "ExpressionStatement", + "src": "4988:28:66" + }, + { + "expression": { + "id": 8793, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8789, + "name": "sudoswap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8665, + "src": "5026:8:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8790, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8735, + "src": "5037:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_memory_ptr", + "typeString": "address[12] memory" + } + }, + "id": 8792, + "indexExpression": { + "hexValue": "35", + "id": 8791, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5051:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_5_by_1", + "typeString": "int_const 5" + }, + "value": "5" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5037:16:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5026:27:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8794, + "nodeType": "ExpressionStatement", + "src": "5026:27:66" + }, + { + "expression": { + "id": 8799, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8795, + "name": "seaPort_1_4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8667, + "src": "5063:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8796, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8735, + "src": "5077:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_memory_ptr", + "typeString": "address[12] memory" + } + }, + "id": 8798, + "indexExpression": { + "hexValue": "36", + "id": 8797, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5091:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_6_by_1", + "typeString": "int_const 6" + }, + "value": "6" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5077:16:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5063:30:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8800, + "nodeType": "ExpressionStatement", + "src": "5063:30:66" + }, + { + "expression": { + "id": 8805, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8801, + "name": "looksRareV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8669, + "src": "5103:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8802, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8735, + "src": "5117:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_memory_ptr", + "typeString": "address[12] memory" + } + }, + "id": 8804, + "indexExpression": { + "hexValue": "37", + "id": 8803, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5131:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_7_by_1", + "typeString": "int_const 7" + }, + "value": "7" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5117:16:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5103:30:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8806, + "nodeType": "ExpressionStatement", + "src": "5103:30:66" + }, + { + "expression": { + "id": 8811, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8807, + "name": "blur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8671, + "src": "5143:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8808, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8735, + "src": "5150:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_memory_ptr", + "typeString": "address[12] memory" + } + }, + "id": 8810, + "indexExpression": { + "hexValue": "38", + "id": 8809, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5164:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5150:16:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5143:23:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8812, + "nodeType": "ExpressionStatement", + "src": "5143:23:66" + }, + { + "expression": { + "id": 8817, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8813, + "name": "seaPort_1_5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8673, + "src": "5176:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8814, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8735, + "src": "5190:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_memory_ptr", + "typeString": "address[12] memory" + } + }, + "id": 8816, + "indexExpression": { + "hexValue": "39", + "id": 8815, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5204:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_9_by_1", + "typeString": "int_const 9" + }, + "value": "9" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5190:16:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5176:30:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8818, + "nodeType": "ExpressionStatement", + "src": "5176:30:66" + }, + { + "expression": { + "id": 8823, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8819, + "name": "seaPort_1_6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8675, + "src": "5216:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8820, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8735, + "src": "5230:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_memory_ptr", + "typeString": "address[12] memory" + } + }, + "id": 8822, + "indexExpression": { + "hexValue": "3130", + "id": 8821, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5244:2:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5230:17:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5216:31:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8824, + "nodeType": "ExpressionStatement", + "src": "5216:31:66" + }, + { + "expression": { + "id": 8829, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8825, + "name": "newMarket", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8677, + "src": "5257:9:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 8826, + "name": "_marketplaces", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8735, + "src": "5269:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_memory_ptr", + "typeString": "address[12] memory" + } + }, + "id": 8828, + "indexExpression": { + "hexValue": "3131", + "id": 8827, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5283:2:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_11_by_1", + "typeString": "int_const 11" + }, + "value": "11" + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5269:17:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5257:29:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8830, + "nodeType": "ExpressionStatement", + "src": "5257:29:66" + }, + { + "expression": { + "id": 8833, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8831, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8679, + "src": "5297:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 8832, + "name": "_weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8737, + "src": "5304:5:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5297:12:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8834, + "nodeType": "ExpressionStatement", + "src": "5297:12:66" + }, + { + "body": { + "id": 8864, + "nodeType": "Block", + "src": "5374:146:66", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 8851, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8846, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8679, + "src": "5392:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 8849, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5408:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 8848, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5400:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8847, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5400:7:66", + "typeDescriptions": {} + } + }, + "id": 8850, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5400:10:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5392:18:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8863, + "nodeType": "IfStatement", + "src": "5388:122:66", + "trueBody": { + "id": 8862, + "nodeType": "Block", + "src": "5412:98:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 8856, + "name": "_transferProxies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8740, + "src": "5462:16:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 8858, + "indexExpression": { + "id": 8857, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8836, + "src": "5479:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "5462:19:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 8859, + "name": "UINT256_MAX", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8686, + "src": "5483:11:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 8853, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8679, + "src": "5448:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8852, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "5430:17:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 8854, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5430:23:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 8855, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 1142, + "src": "5430:31:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 8860, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5430:65:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8861, + "nodeType": "ExpressionStatement", + "src": "5430:65:66" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8842, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8839, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8836, + "src": "5340:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 8840, + "name": "_transferProxies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8740, + "src": "5344:16:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[] memory" + } + }, + "id": 8841, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "5344:23:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "5340:27:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8865, + "initializationExpression": { + "assignments": [ + 8836 + ], + "declarations": [ + { + "constant": false, + "id": 8836, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 8865, + "src": "5325:9:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8835, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5325:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8838, + "initialValue": { + "hexValue": "30", + "id": 8837, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5337:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "5325:13:66" + }, + "loopExpression": { + "expression": { + "id": 8844, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "5369:3:66", + "subExpression": { + "id": 8843, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8836, + "src": "5371:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 8845, + "nodeType": "ExpressionStatement", + "src": "5369:3:66" + }, + "nodeType": "ForStatement", + "src": "5320:200:66" + }, + { + "expression": { + "arguments": [ + { + "id": 8867, + "name": "_initialOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8742, + "src": "5548:13:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8866, + "name": "transferOwnership", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 125, + "src": "5530:17:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 8868, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5530:32:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8869, + "nodeType": "ExpressionStatement", + "src": "5530:32:66" + } + ] + }, + "documentation": { + "id": 8731, + "nodeType": "StructuredDocumentation", + "src": "4186:313:66", + "text": "@notice initializes the proxy contract\n@param _marketplaces - array of addresses of the marketplaces\n@param _weth - address of the WETH erc-20 token\n@param _transferProxies - array of addresses of the transfer proxies\n@param _initialOwner - address of the owner" + }, + "functionSelector": "bf628ddf", + "id": 8871, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8745, + "modifierName": { + "id": 8744, + "name": "initializer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 781, + "src": "4694:11:66", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "4694:11:66" + } + ], + "name": "__ExchangeWrapper_init_proxy", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8743, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8735, + "mutability": "mutable", + "name": "_marketplaces", + "nodeType": "VariableDeclaration", + "scope": 8871, + "src": "4551:32:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_memory_ptr", + "typeString": "address[12]" + }, + "typeName": { + "baseType": { + "id": 8732, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4551:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8734, + "length": { + "hexValue": "3132", + "id": 8733, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4559:2:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_12_by_1", + "typeString": "int_const 12" + }, + "value": "12" + }, + "nodeType": "ArrayTypeName", + "src": "4551:11:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$12_storage_ptr", + "typeString": "address[12]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8737, + "mutability": "mutable", + "name": "_weth", + "nodeType": "VariableDeclaration", + "scope": 8871, + "src": "4593:13:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8736, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4593:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8740, + "mutability": "mutable", + "name": "_transferProxies", + "nodeType": "VariableDeclaration", + "scope": 8871, + "src": "4616:33:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 8738, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4616:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8739, + "nodeType": "ArrayTypeName", + "src": "4616:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8742, + "mutability": "mutable", + "name": "_initialOwner", + "nodeType": "VariableDeclaration", + "scope": 8871, + "src": "4659:21:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8741, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4659:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "4541:145:66" + }, + "returnParameters": { + "id": 8746, + "nodeType": "ParameterList", + "parameters": [], + "src": "4706:0:66" + }, + "scope": 11101, + "src": "4504:1065:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 8893, + "nodeType": "Block", + "src": "5776:117:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 8885, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8880, + "name": "newMarket", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8677, + "src": "5794:9:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 8883, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5815:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 8882, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5807:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8881, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5807:7:66", + "typeDescriptions": {} + } + }, + "id": 8884, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5807:10:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "5794:23:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4e65774d61726b6574206164647265737320697320616c726561647920736574", + "id": 8886, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5819:34:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e7f1a9d4424e262167e7334a51cbb1e41a967f417508d8063df52487d1f973b8", + "typeString": "literal_string \"NewMarket address is already set\"" + }, + "value": "NewMarket address is already set" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_e7f1a9d4424e262167e7334a51cbb1e41a967f417508d8063df52487d1f973b8", + "typeString": "literal_string \"NewMarket address is already set\"" + } + ], + "id": 8879, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "5786:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 8887, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "5786:68:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8888, + "nodeType": "ExpressionStatement", + "src": "5786:68:66" + }, + { + "expression": { + "id": 8891, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 8889, + "name": "newMarket", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8677, + "src": "5864:9:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 8890, + "name": "_newMarket", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8874, + "src": "5876:10:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "5864:22:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 8892, + "nodeType": "ExpressionStatement", + "src": "5864:22:66" + } + ] + }, + "documentation": { + "id": 8872, + "nodeType": "StructuredDocumentation", + "src": "5575:126:66", + "text": "@notice sets the address of the new marketplace\n@param _newMarket - address of the new marketplace" + }, + "functionSelector": "8b879649", + "id": 8894, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8877, + "modifierName": { + "id": 8876, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 75, + "src": "5766:9:66", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "5766:9:66" + } + ], + "name": "__initializeNewMarket", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8875, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8874, + "mutability": "mutable", + "name": "_newMarket", + "nodeType": "VariableDeclaration", + "scope": 8894, + "src": "5737:18:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8873, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5737:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "5736:20:66" + }, + "returnParameters": { + "id": 8878, + "nodeType": "ParameterList", + "parameters": [], + "src": "5776:0:66" + }, + "scope": 11101, + "src": "5706:187:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 9018, + "nodeType": "Block", + "src": "6379:1299:66", + "statements": [ + { + "assignments": [ + 8907 + ], + "declarations": [ + { + "constant": false, + "id": 8907, + "mutability": "mutable", + "name": "wethAmountNeeded", + "nodeType": "VariableDeclaration", + "scope": 9018, + "src": "6436:24:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8906, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6436:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8911, + "initialValue": { + "arguments": [ + { + "id": 8909, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8897, + "src": "6490:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + ], + "id": 8908, + "name": "getAmountOfWethForPurchase", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10908, + "src": "6463:26:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_PurchaseDetails_$8724_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory) pure returns (uint256)" + } + }, + "id": 8910, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6463:43:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6436:70:66" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 8914, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8912, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8907, + "src": "6574:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 8913, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6593:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "6574:20:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8929, + "nodeType": "IfStatement", + "src": "6570:134:66", + "trueBody": { + "id": 8928, + "nodeType": "Block", + "src": "6596:108:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 8919, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "6647:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 8920, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6647:12:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [ + { + "id": 8923, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "6669:4:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "id": 8922, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6661:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 8921, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6661:7:66", + "typeDescriptions": {} + } + }, + "id": 8924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6661:13:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 8925, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8907, + "src": "6676:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 8916, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8679, + "src": "6628:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8915, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "6610:17:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 8917, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6610:23:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 8918, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1154, + "src": "6610:36:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 8926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6610:83:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 8927, + "nodeType": "ExpressionStatement", + "src": "6610:83:66" + } + ] + } + }, + { + "assignments": [ + 8931 + ], + "declarations": [ + { + "constant": false, + "id": 8931, + "mutability": "mutable", + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 9018, + "src": "6714:19:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "typeName": { + "id": 8930, + "name": "Currencies", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8715, + "src": "6714:10:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "visibility": "internal" + } + ], + "id": 8936, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 8933, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8897, + "src": "6748:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 8934, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8721, + "src": "6748:20:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 8932, + "name": "getCurrency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10511, + "src": "6736:11:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_enum$_Currencies_$8715_$", + "typeString": "function (uint256) pure returns (enum RaribleExchangeWrapperUpgradeableV2.Currencies)" + } + }, + "id": 8935, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6736:33:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6714:55:66" + }, + { + "assignments": [ + 8938 + ], + "declarations": [ + { + "constant": false, + "id": 8938, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9018, + "src": "6779:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 8937, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "6779:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 8939, + "nodeType": "VariableDeclarationStatement", + "src": "6779:12:66" + }, + { + "assignments": [ + 8941 + ], + "declarations": [ + { + "constant": false, + "id": 8941, + "mutability": "mutable", + "name": "firstFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 9018, + "src": "6801:22:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8940, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6801:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8942, + "nodeType": "VariableDeclarationStatement", + "src": "6801:22:66" + }, + { + "assignments": [ + 8944 + ], + "declarations": [ + { + "constant": false, + "id": 8944, + "mutability": "mutable", + "name": "secondFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 9018, + "src": "6833:23:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 8943, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6833:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 8945, + "nodeType": "VariableDeclarationStatement", + "src": "6833:23:66" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "id": 8949, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8946, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8931, + "src": "6871:8:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 8947, + "name": "Currencies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8715, + "src": "6883:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Currencies_$8715_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Currencies)" + } + }, + "id": 8948, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "ETH", + "nodeType": "MemberAccess", + "src": "6883:14:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "src": "6871:26:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "id": 8974, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 8971, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8931, + "src": "7139:8:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 8972, + "name": "Currencies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8715, + "src": "7151:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Currencies_$8715_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Currencies)" + } + }, + "id": 8973, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "WETH", + "nodeType": "MemberAccess", + "src": "7151:15:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "src": "7139:27:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9000, + "nodeType": "Block", + "src": "7410:60:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "556e6b6e6f776e2070757263686173652063757272656e6379", + "id": 8997, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7431:27:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090", + "typeString": "literal_string \"Unknown purchase currency\"" + }, + "value": "Unknown purchase currency" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090", + "typeString": "literal_string \"Unknown purchase currency\"" + } + ], + "id": 8996, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "7424:6:66", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 8998, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7424:35:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8999, + "nodeType": "ExpressionStatement", + "src": "7424:35:66" + } + ] + }, + "id": 9001, + "nodeType": "IfStatement", + "src": "7135:335:66", + "trueBody": { + "id": 8995, + "nodeType": "Block", + "src": "7168:236:66", + "statements": [ + { + "expression": { + "id": 8983, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 8975, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8938, + "src": "7183:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 8976, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8941, + "src": "7192:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8977, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8944, + "src": "7208:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 8978, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "7182:42:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8980, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8897, + "src": "7240:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + { + "hexValue": "66616c7365", + "id": 8981, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7257:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 8979, + "name": "purchaseWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10333, + "src": "7227:12:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_PurchaseDetails_$8724_memory_ptr_$_t_bool_$returns$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "function (struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory,bool) returns (bool,uint256,uint256)" + } + }, + "id": 8982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7227:36:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "src": "7182:81:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8984, + "nodeType": "ExpressionStatement", + "src": "7182:81:66" + }, + { + "expression": { + "arguments": [ + { + "id": 8986, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8941, + "src": "7293:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8987, + "name": "feeRecipientFirst", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8899, + "src": "7309:17:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8985, + "name": "transferFeeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10390, + "src": "7277:15:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 8988, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7277:50:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8989, + "nodeType": "ExpressionStatement", + "src": "7277:50:66" + }, + { + "expression": { + "arguments": [ + { + "id": 8991, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8944, + "src": "7357:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8992, + "name": "feeRecipientSecond", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8901, + "src": "7374:18:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8990, + "name": "transferFeeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10390, + "src": "7341:15:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 8993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7341:52:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8994, + "nodeType": "ExpressionStatement", + "src": "7341:52:66" + } + ] + } + }, + "id": 9002, + "nodeType": "IfStatement", + "src": "6867:603:66", + "trueBody": { + "id": 8970, + "nodeType": "Block", + "src": "6899:230:66", + "statements": [ + { + "expression": { + "id": 8958, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 8950, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8938, + "src": "6914:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 8951, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8941, + "src": "6923:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8952, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8944, + "src": "6939:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 8953, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "6913:42:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 8955, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8897, + "src": "6967:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + { + "hexValue": "66616c7365", + "id": 8956, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "6984:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 8954, + "name": "purchase", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10102, + "src": "6958:8:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_PurchaseDetails_$8724_memory_ptr_$_t_bool_$returns$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "function (struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory,bool) returns (bool,uint256,uint256)" + } + }, + "id": 8957, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "6958:32:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "src": "6913:77:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8959, + "nodeType": "ExpressionStatement", + "src": "6913:77:66" + }, + { + "expression": { + "arguments": [ + { + "id": 8961, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8941, + "src": "7019:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8962, + "name": "feeRecipientFirst", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8899, + "src": "7035:17:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8960, + "name": "transferFeeETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10361, + "src": "7004:14:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 8963, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7004:49:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8964, + "nodeType": "ExpressionStatement", + "src": "7004:49:66" + }, + { + "expression": { + "arguments": [ + { + "id": 8966, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8944, + "src": "7082:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 8967, + "name": "feeRecipientSecond", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8901, + "src": "7099:18:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 8965, + "name": "transferFeeETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10361, + "src": "7067:14:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 8968, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7067:51:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 8969, + "nodeType": "ExpressionStatement", + "src": "7067:51:66" + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 9004, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8938, + "src": "7495:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 9003, + "name": "Execution", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8690, + "src": "7485:9:66", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bool_$returns$__$", + "typeString": "function (bool)" + } + }, + "id": 9005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7485:18:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9006, + "nodeType": "EmitStatement", + "src": "7480:23:66" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9007, + "name": "transferChange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10417, + "src": "7544:14:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 9008, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7544:16:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9009, + "nodeType": "ExpressionStatement", + "src": "7544:16:66" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9012, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9010, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8907, + "src": "7605:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9011, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7624:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7605:20:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9017, + "nodeType": "IfStatement", + "src": "7601:71:66", + "trueBody": { + "id": 9016, + "nodeType": "Block", + "src": "7627:45:66", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9013, + "name": "transferChangeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10448, + "src": "7641:18:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 9014, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "7641:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9015, + "nodeType": "ExpressionStatement", + "src": "7641:20:66" + } + ] + } + } + ] + }, + "documentation": { + "id": 8895, + "nodeType": "StructuredDocumentation", + "src": "5899:295:66", + "text": "@notice executes a single purchase\n@param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n@param feeRecipientFirst - address of the first fee recipient\n@param feeRecipientSecond - address of the second fee recipient" + }, + "functionSelector": "86496e7a", + "id": 9019, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 8904, + "modifierName": { + "id": 8903, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1710, + "src": "6365:13:66", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "6365:13:66" + } + ], + "name": "singlePurchase", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 8902, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 8897, + "mutability": "mutable", + "name": "purchaseDetails", + "nodeType": "VariableDeclaration", + "scope": 9019, + "src": "6232:38:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + }, + "typeName": { + "id": 8896, + "name": "PurchaseDetails", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8724, + "src": "6232:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8899, + "mutability": "mutable", + "name": "feeRecipientFirst", + "nodeType": "VariableDeclaration", + "scope": 9019, + "src": "6280:25:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8898, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6280:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 8901, + "mutability": "mutable", + "name": "feeRecipientSecond", + "nodeType": "VariableDeclaration", + "scope": 9019, + "src": "6315:26:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 8900, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6315:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "6222:125:66" + }, + "returnParameters": { + "id": 8905, + "nodeType": "ParameterList", + "parameters": [], + "src": "6379:0:66" + }, + "scope": 11101, + "src": "6199:1479:66", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 9245, + "nodeType": "Block", + "src": "8342:2183:66", + "statements": [ + { + "assignments": [ + 9035 + ], + "declarations": [ + { + "constant": false, + "id": 9035, + "mutability": "mutable", + "name": "sumFirstFeesETH", + "nodeType": "VariableDeclaration", + "scope": 9245, + "src": "8352:23:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9034, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8352:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9037, + "initialValue": { + "hexValue": "30", + "id": 9036, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8378:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "8352:27:66" + }, + { + "assignments": [ + 9039 + ], + "declarations": [ + { + "constant": false, + "id": 9039, + "mutability": "mutable", + "name": "sumSecondFeesETH", + "nodeType": "VariableDeclaration", + "scope": 9245, + "src": "8389:24:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9038, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8389:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9041, + "initialValue": { + "hexValue": "30", + "id": 9040, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8416:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "8389:28:66" + }, + { + "assignments": [ + 9043 + ], + "declarations": [ + { + "constant": false, + "id": 9043, + "mutability": "mutable", + "name": "sumFirstFeesWETH", + "nodeType": "VariableDeclaration", + "scope": 9245, + "src": "8427:24:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9042, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8427:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9045, + "initialValue": { + "hexValue": "30", + "id": 9044, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8454:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "8427:28:66" + }, + { + "assignments": [ + 9047 + ], + "declarations": [ + { + "constant": false, + "id": 9047, + "mutability": "mutable", + "name": "sumSecondFeesWETH", + "nodeType": "VariableDeclaration", + "scope": 9245, + "src": "8465:25:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9046, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8465:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9049, + "initialValue": { + "hexValue": "30", + "id": 9048, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8493:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "8465:29:66" + }, + { + "assignments": [ + 9051 + ], + "declarations": [ + { + "constant": false, + "id": 9051, + "mutability": "mutable", + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 9245, + "src": "8504:11:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9050, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8504:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 9053, + "initialValue": { + "hexValue": "66616c7365", + "id": 9052, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8518:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "nodeType": "VariableDeclarationStatement", + "src": "8504:19:66" + }, + { + "assignments": [ + 9055 + ], + "declarations": [ + { + "constant": false, + "id": 9055, + "mutability": "mutable", + "name": "wethAmountNeeded", + "nodeType": "VariableDeclaration", + "scope": 9245, + "src": "8581:24:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9054, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8581:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9057, + "initialValue": { + "hexValue": "30", + "id": 9056, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8608:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "8581:28:66" + }, + { + "body": { + "id": 9079, + "nodeType": "Block", + "src": "8672:109:66", + "statements": [ + { + "expression": { + "id": 9077, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9069, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9055, + "src": "8686:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9076, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9070, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9055, + "src": "8705:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "arguments": [ + { + "baseExpression": { + "id": 9072, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9023, + "src": "8751:15:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8724_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory[] memory" + } + }, + "id": 9074, + "indexExpression": { + "id": 9073, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9059, + "src": "8767:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "8751:18:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + ], + "id": 9071, + "name": "getAmountOfWethForPurchase", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10908, + "src": "8724:26:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_struct$_PurchaseDetails_$8724_memory_ptr_$returns$_t_uint256_$", + "typeString": "function (struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory) pure returns (uint256)" + } + }, + "id": 9075, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8724:46:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8705:65:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8686:84:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9078, + "nodeType": "ExpressionStatement", + "src": "8686:84:66" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9065, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9062, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9059, + "src": "8639:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 9063, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9023, + "src": "8643:15:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8724_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory[] memory" + } + }, + "id": 9064, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "8643:22:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8639:26:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9080, + "initializationExpression": { + "assignments": [ + 9059 + ], + "declarations": [ + { + "constant": false, + "id": 9059, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 9080, + "src": "8624:9:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9058, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8624:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9061, + "initialValue": { + "hexValue": "30", + "id": 9060, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8636:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "8624:13:66" + }, + "loopExpression": { + "expression": { + "id": 9067, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "8667:3:66", + "subExpression": { + "id": 9066, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9059, + "src": "8669:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9068, + "nodeType": "ExpressionStatement", + "src": "8667:3:66" + }, + "nodeType": "ForStatement", + "src": "8619:162:66" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9083, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9081, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9055, + "src": "8848:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9082, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "8867:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "8848:20:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9098, + "nodeType": "IfStatement", + "src": "8844:134:66", + "trueBody": { + "id": 9097, + "nodeType": "Block", + "src": "8870:108:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9088, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "8921:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 9089, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8921:12:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [ + { + "id": 9092, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "8943:4:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "id": 9091, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8935:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9090, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8935:7:66", + "typeDescriptions": {} + } + }, + "id": 9093, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8935:13:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 9094, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9055, + "src": "8950:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 9085, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8679, + "src": "8902:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9084, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "8884:17:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 9086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8884:23:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 9087, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1154, + "src": "8884:36:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,address,uint256) external returns (bool)" + } + }, + "id": 9095, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "8884:83:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9096, + "nodeType": "ExpressionStatement", + "src": "8884:83:66" + } + ] + } + }, + { + "body": { + "id": 9207, + "nodeType": "Block", + "src": "9041:953:66", + "statements": [ + { + "assignments": [ + 9111 + ], + "declarations": [ + { + "constant": false, + "id": 9111, + "mutability": "mutable", + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 9207, + "src": "9055:19:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "typeName": { + "id": 9110, + "name": "Currencies", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8715, + "src": "9055:10:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "visibility": "internal" + } + ], + "id": 9118, + "initialValue": { + "arguments": [ + { + "expression": { + "baseExpression": { + "id": 9113, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9023, + "src": "9089:15:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8724_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory[] memory" + } + }, + "id": 9115, + "indexExpression": { + "id": 9114, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9100, + "src": "9105:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9089:18:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9116, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8721, + "src": "9089:23:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 9112, + "name": "getCurrency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10511, + "src": "9077:11:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_enum$_Currencies_$8715_$", + "typeString": "function (uint256) pure returns (enum RaribleExchangeWrapperUpgradeableV2.Currencies)" + } + }, + "id": 9117, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9077:36:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9055:58:66" + }, + { + "assignments": [ + 9120 + ], + "declarations": [ + { + "constant": false, + "id": 9120, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9207, + "src": "9127:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9119, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "9127:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "id": 9121, + "nodeType": "VariableDeclarationStatement", + "src": "9127:12:66" + }, + { + "assignments": [ + 9123 + ], + "declarations": [ + { + "constant": false, + "id": 9123, + "mutability": "mutable", + "name": "firstFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 9207, + "src": "9153:22:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9122, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9153:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9124, + "nodeType": "VariableDeclarationStatement", + "src": "9153:22:66" + }, + { + "assignments": [ + 9126 + ], + "declarations": [ + { + "constant": false, + "id": 9126, + "mutability": "mutable", + "name": "secondFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 9207, + "src": "9189:23:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9125, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9189:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9127, + "nodeType": "VariableDeclarationStatement", + "src": "9189:23:66" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "id": 9131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9128, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9111, + "src": "9231:8:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9129, + "name": "Currencies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8715, + "src": "9243:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Currencies_$8715_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Currencies)" + } + }, + "id": 9130, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "ETH", + "nodeType": "MemberAccess", + "src": "9243:14:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "src": "9231:26:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "id": 9162, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9159, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9111, + "src": "9532:8:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9160, + "name": "Currencies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8715, + "src": "9544:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Currencies_$8715_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Currencies)" + } + }, + "id": 9161, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "WETH", + "nodeType": "MemberAccess", + "src": "9544:15:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "src": "9532:27:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9194, + "nodeType": "Block", + "src": "9838:68:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "556e6b6e6f776e2070757263686173652063757272656e6379", + "id": 9191, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9863:27:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090", + "typeString": "literal_string \"Unknown purchase currency\"" + }, + "value": "Unknown purchase currency" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090", + "typeString": "literal_string \"Unknown purchase currency\"" + } + ], + "id": 9190, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "9856:6:66", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 9192, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9856:35:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9193, + "nodeType": "ExpressionStatement", + "src": "9856:35:66" + } + ] + }, + "id": 9195, + "nodeType": "IfStatement", + "src": "9528:378:66", + "trueBody": { + "id": 9189, + "nodeType": "Block", + "src": "9561:271:66", + "statements": [ + { + "expression": { + "id": 9173, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 9163, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9120, + "src": "9580:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 9164, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9123, + "src": "9589:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9165, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9126, + "src": "9605:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 9166, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "9579:42:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 9168, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9023, + "src": "9637:15:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8724_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory[] memory" + } + }, + "id": 9170, + "indexExpression": { + "id": 9169, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9100, + "src": "9653:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9637:18:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + { + "id": 9171, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9029, + "src": "9657:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 9167, + "name": "purchaseWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10333, + "src": "9624:12:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_PurchaseDetails_$8724_memory_ptr_$_t_bool_$returns$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "function (struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory,bool) returns (bool,uint256,uint256)" + } + }, + "id": 9172, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9624:43:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "src": "9579:88:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9174, + "nodeType": "ExpressionStatement", + "src": "9579:88:66" + }, + { + "expression": { + "id": 9180, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9175, + "name": "sumFirstFeesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9043, + "src": "9686:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 9178, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9123, + "src": "9726:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9176, + "name": "sumFirstFeesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9043, + "src": "9705:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 559, + "src": "9705:20:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9179, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9705:36:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9686:55:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9181, + "nodeType": "ExpressionStatement", + "src": "9686:55:66" + }, + { + "expression": { + "id": 9187, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9182, + "name": "sumSecondFeesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9047, + "src": "9759:17:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 9185, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9126, + "src": "9801:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9183, + "name": "sumSecondFeesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9047, + "src": "9779:17:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9184, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 559, + "src": "9779:21:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9779:38:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9759:58:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9188, + "nodeType": "ExpressionStatement", + "src": "9759:58:66" + } + ] + } + }, + "id": 9196, + "nodeType": "IfStatement", + "src": "9227:679:66", + "trueBody": { + "id": 9158, + "nodeType": "Block", + "src": "9259:263:66", + "statements": [ + { + "expression": { + "id": 9142, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "components": [ + { + "id": 9132, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9120, + "src": "9278:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 9133, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9123, + "src": "9287:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9134, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9126, + "src": "9303:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 9135, + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "TupleExpression", + "src": "9277:42:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "baseExpression": { + "id": 9137, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9023, + "src": "9331:15:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8724_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory[] memory" + } + }, + "id": 9139, + "indexExpression": { + "id": 9138, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9100, + "src": "9347:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "9331:18:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + { + "id": 9140, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9029, + "src": "9351:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 9136, + "name": "purchase", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10102, + "src": "9322:8:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_PurchaseDetails_$8724_memory_ptr_$_t_bool_$returns$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "function (struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory,bool) returns (bool,uint256,uint256)" + } + }, + "id": 9141, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9322:39:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "src": "9277:84:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9143, + "nodeType": "ExpressionStatement", + "src": "9277:84:66" + }, + { + "expression": { + "id": 9149, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9144, + "name": "sumFirstFeesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9035, + "src": "9380:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 9147, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9123, + "src": "9418:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9145, + "name": "sumFirstFeesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9035, + "src": "9398:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9146, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 559, + "src": "9398:19:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9148, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9398:35:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9380:53:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9150, + "nodeType": "ExpressionStatement", + "src": "9380:53:66" + }, + { + "expression": { + "id": 9156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9151, + "name": "sumSecondFeesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9039, + "src": "9451:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 9154, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9126, + "src": "9491:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 9152, + "name": "sumSecondFeesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9039, + "src": "9470:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9153, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "add", + "nodeType": "MemberAccess", + "referencedDeclaration": 559, + "src": "9470:20:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 9155, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9470:37:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9451:56:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9157, + "nodeType": "ExpressionStatement", + "src": "9451:56:66" + } + ] + } + }, + { + "expression": { + "id": 9201, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 9197, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9051, + "src": "9920:6:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 9200, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9198, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9051, + "src": "9929:6:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "id": 9199, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9120, + "src": "9939:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "9929:17:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "9920:26:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9202, + "nodeType": "ExpressionStatement", + "src": "9920:26:66" + }, + { + "eventCall": { + "arguments": [ + { + "id": 9204, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9120, + "src": "9975:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 9203, + "name": "Execution", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8690, + "src": "9965:9:66", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_bool_$returns$__$", + "typeString": "function (bool)" + } + }, + "id": 9205, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "9965:18:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9206, + "nodeType": "EmitStatement", + "src": "9960:23:66" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9106, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9103, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9100, + "src": "9008:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 9104, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9023, + "src": "9012:15:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8724_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory[] memory" + } + }, + "id": 9105, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "9012:22:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "9008:26:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9208, + "initializationExpression": { + "assignments": [ + 9100 + ], + "declarations": [ + { + "constant": false, + "id": 9100, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 9208, + "src": "8993:9:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9099, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8993:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9102, + "initialValue": { + "hexValue": "30", + "id": 9101, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9005:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "8993:13:66" + }, + "loopExpression": { + "expression": { + "id": 9108, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "9036:3:66", + "subExpression": { + "id": 9107, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9100, + "src": "9038:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9109, + "nodeType": "ExpressionStatement", + "src": "9036:3:66" + }, + "nodeType": "ForStatement", + "src": "8988:1006:66" + }, + { + "expression": { + "arguments": [ + { + "id": 9210, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9051, + "src": "10012:6:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "6e6f207375636365737366756c20657865637574696f6e73", + "id": 9211, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10020:26:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ec72e63c53a628868607248de6752f6e953ad035609908ced114156f1eeff564", + "typeString": "literal_string \"no successful executions\"" + }, + "value": "no successful executions" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ec72e63c53a628868607248de6752f6e953ad035609908ced114156f1eeff564", + "typeString": "literal_string \"no successful executions\"" + } + ], + "id": 9209, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "10004:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9212, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10004:43:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9213, + "nodeType": "ExpressionStatement", + "src": "10004:43:66" + }, + { + "expression": { + "arguments": [ + { + "id": 9215, + "name": "sumFirstFeesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9035, + "src": "10099:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9216, + "name": "feeRecipientFirst", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9025, + "src": "10116:17:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9214, + "name": "transferFeeETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10361, + "src": "10084:14:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 9217, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10084:50:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9218, + "nodeType": "ExpressionStatement", + "src": "10084:50:66" + }, + { + "expression": { + "arguments": [ + { + "id": 9220, + "name": "sumSecondFeesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9039, + "src": "10159:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9221, + "name": "feeRecipientSecond", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9027, + "src": "10177:18:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9219, + "name": "transferFeeETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10361, + "src": "10144:14:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 9222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10144:52:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9223, + "nodeType": "ExpressionStatement", + "src": "10144:52:66" + }, + { + "expression": { + "arguments": [ + { + "id": 9225, + "name": "sumFirstFeesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9043, + "src": "10250:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9226, + "name": "feeRecipientFirst", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9025, + "src": "10268:17:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9224, + "name": "transferFeeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10390, + "src": "10234:15:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 9227, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10234:52:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9228, + "nodeType": "ExpressionStatement", + "src": "10234:52:66" + }, + { + "expression": { + "arguments": [ + { + "id": 9230, + "name": "sumSecondFeesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9047, + "src": "10312:17:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 9231, + "name": "feeRecipientSecond", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9027, + "src": "10331:18:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9229, + "name": "transferFeeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10390, + "src": "10296:15:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 9232, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10296:54:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9233, + "nodeType": "ExpressionStatement", + "src": "10296:54:66" + }, + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9234, + "name": "transferChange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10417, + "src": "10391:14:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 9235, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10391:16:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9236, + "nodeType": "ExpressionStatement", + "src": "10391:16:66" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9239, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9237, + "name": "wethAmountNeeded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9055, + "src": "10452:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9238, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "10471:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "10452:20:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9244, + "nodeType": "IfStatement", + "src": "10448:71:66", + "trueBody": { + "id": 9243, + "nodeType": "Block", + "src": "10474:45:66", + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9240, + "name": "transferChangeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10448, + "src": "10488:18:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 9241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "10488:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9242, + "nodeType": "ExpressionStatement", + "src": "10488:20:66" + } + ] + } + } + ] + }, + "documentation": { + "id": 9020, + "nodeType": "StructuredDocumentation", + "src": "7684:448:66", + "text": "@notice executes an array of purchases\n@param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n@param feeRecipientFirst - address of the first fee recipient\n@param feeRecipientSecond - address of the second fee recipient\n@param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch" + }, + "functionSelector": "b94ee332", + "id": 9246, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 9032, + "modifierName": { + "id": 9031, + "name": "whenNotPaused", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1710, + "src": "8328:13:66", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "8328:13:66" + } + ], + "name": "bulkPurchase", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9030, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9023, + "mutability": "mutable", + "name": "purchaseDetails", + "nodeType": "VariableDeclaration", + "scope": 9246, + "src": "8169:40:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8724_memory_ptr_$dyn_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails[]" + }, + "typeName": { + "baseType": { + "id": 9021, + "name": "PurchaseDetails", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8724, + "src": "8169:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + } + }, + "id": 9022, + "nodeType": "ArrayTypeName", + "src": "8169:17:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_PurchaseDetails_$8724_storage_$dyn_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9025, + "mutability": "mutable", + "name": "feeRecipientFirst", + "nodeType": "VariableDeclaration", + "scope": 9246, + "src": "8219:25:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9024, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8219:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9027, + "mutability": "mutable", + "name": "feeRecipientSecond", + "nodeType": "VariableDeclaration", + "scope": 9246, + "src": "8254:26:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 9026, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8254:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9029, + "mutability": "mutable", + "name": "allowFail", + "nodeType": "VariableDeclaration", + "scope": 9246, + "src": "8290:14:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9028, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "8290:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "8159:151:66" + }, + "returnParameters": { + "id": 9033, + "nodeType": "ParameterList", + "parameters": [], + "src": "8342:0:66" + }, + "scope": 11101, + "src": "8138:2387:66", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 10101, + "nodeType": "Block", + "src": "11152:8116:66", + "statements": [ + { + "assignments": [ + 9261, + 9264 + ], + "declarations": [ + { + "constant": false, + "id": 9261, + "mutability": "mutable", + "name": "marketData", + "nodeType": "VariableDeclaration", + "scope": 10101, + "src": "11163:23:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 9260, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "11163:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9264, + "mutability": "mutable", + "name": "additionalRoyalties", + "nodeType": "VariableDeclaration", + "scope": 10101, + "src": "11188:36:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 9262, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11188:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9263, + "nodeType": "ArrayTypeName", + "src": "11188:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 9273, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 9266, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "11253:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9267, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "data", + "nodeType": "MemberAccess", + "referencedDeclaration": 8723, + "src": "11253:20:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "id": 9268, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "11275:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9269, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8721, + "src": "11275:20:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9270, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "11297:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9271, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "11297:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + ], + "id": 9265, + "name": "getDataAndAdditionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10590, + "src": "11228:24:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_enum$_Markets_$8709_$returns$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes memory,uint256,enum RaribleExchangeWrapperUpgradeableV2.Markets) pure returns (bytes memory,uint256[] memory)" + } + }, + "id": 9272, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11228:94:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bytes memory,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11162:160:66" + }, + { + "assignments": [ + 9275 + ], + "declarations": [ + { + "constant": false, + "id": 9275, + "mutability": "mutable", + "name": "paymentAmount", + "nodeType": "VariableDeclaration", + "scope": 10101, + "src": "11332:21:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9274, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11332:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9278, + "initialValue": { + "expression": { + "id": 9276, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "11356:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9277, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8719, + "src": "11356:22:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11332:46:66" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 9283, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9279, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "11392:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9280, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "11392:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9281, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "11420:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 9282, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_1", + "nodeType": "MemberAccess", + "src": "11420:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "11392:47:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 9319, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9315, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "11775:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9316, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "11775:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9317, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "11803:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 9318, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "WyvernExchange", + "nodeType": "MemberAccess", + "src": "11803:22:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "11775:50:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 9355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9351, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "12167:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9352, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "12167:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9353, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "12195:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 9354, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "ExchangeV2", + "nodeType": "MemberAccess", + "src": "12195:18:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "12167:46:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 9391, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9387, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "12544:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9388, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "12544:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9389, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "12572:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 9390, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "X2Y2", + "nodeType": "MemberAccess", + "src": "12572:12:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "12544:40:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 9647, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9643, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "14726:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9644, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "14726:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9645, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "14754:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 9646, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "LooksRareOrders", + "nodeType": "MemberAccess", + "src": "14754:23:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "14726:51:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 9756, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9752, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "15860:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9753, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "15860:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9754, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "15888:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 9755, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SudoSwap", + "nodeType": "MemberAccess", + "src": "15888:16:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "15860:44:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 9792, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9788, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "16234:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9789, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "16234:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9790, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "16262:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 9791, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_4", + "nodeType": "MemberAccess", + "src": "16262:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "16234:47:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 9828, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9824, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "16617:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9825, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "16617:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9826, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "16645:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 9827, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "LooksRareV2", + "nodeType": "MemberAccess", + "src": "16645:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "16617:47:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 9864, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9860, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "17000:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9861, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "17000:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9862, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "17028:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 9863, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "Blur", + "nodeType": "MemberAccess", + "src": "17028:12:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "17000:40:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 9978, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 9974, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "17960:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 9975, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "17960:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9976, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "17988:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 9977, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_5", + "nodeType": "MemberAccess", + "src": "17988:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "17960:47:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10014, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10010, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "18343:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10011, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "18343:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10012, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "18371:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10013, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_6", + "nodeType": "MemberAccess", + "src": "18371:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "18343:47:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10050, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10046, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "18726:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10047, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "18726:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10048, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "18754:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10049, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "NewMarket", + "nodeType": "MemberAccess", + "src": "18754:17:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "18726:45:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 10066, + "nodeType": "Block", + "src": "18916:55:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "556e6b6e6f776e206d61726b6574496420455448", + "id": 10063, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18937:22:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_3bc896cadc7524646943368edd2f41dfd35c78e313328c146d90408931cae185", + "typeString": "literal_string \"Unknown marketId ETH\"" + }, + "value": "Unknown marketId ETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_3bc896cadc7524646943368edd2f41dfd35c78e313328c146d90408931cae185", + "typeString": "literal_string \"Unknown marketId ETH\"" + } + ], + "id": 10062, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "18930:6:66", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 10064, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18930:30:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10065, + "nodeType": "ExpressionStatement", + "src": "18930:30:66" + } + ] + }, + "id": 10067, + "nodeType": "IfStatement", + "src": "18722:249:66", + "trueBody": { + "id": 10061, + "nodeType": "Block", + "src": "18773:137:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10052, + "name": "newMarket", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8677, + "src": "18843:9:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 10055, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18864:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 10054, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "18856:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10053, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18856:7:66", + "typeDescriptions": {} + } + }, + "id": 10056, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18856:10:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "18843:23:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4e65774d61726b65742061646472657373206973206e6f7420736574", + "id": 10058, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18868:30:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_eca0115108343535314aab82fd1751e6b0aefc82e973d3018693051f60d56563", + "typeString": "literal_string \"NewMarket address is not set\"" + }, + "value": "NewMarket address is not set" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_eca0115108343535314aab82fd1751e6b0aefc82e973d3018693051f60d56563", + "typeString": "literal_string \"NewMarket address is not set\"" + } + ], + "id": 10051, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "18835:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10059, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18835:64:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10060, + "nodeType": "ExpressionStatement", + "src": "18835:64:66" + } + ] + } + }, + "id": 10068, + "nodeType": "IfStatement", + "src": "18339:632:66", + "trueBody": { + "id": 10045, + "nodeType": "Block", + "src": "18392:324:66", + "statements": [ + { + "assignments": [ + 10016, + null + ], + "declarations": [ + { + "constant": false, + "id": 10016, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 10045, + "src": "18407:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10015, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "18407:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 10026, + "initialValue": { + "arguments": [ + { + "id": 10024, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9261, + "src": "18473:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 10019, + "name": "seaPort_1_6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8675, + "src": "18433:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10018, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "18425:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10017, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18425:7:66", + "typeDescriptions": {} + } + }, + "id": 10020, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18425:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "18425:25:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 10023, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 10022, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "18458:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "18425:47:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 10025, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18425:59:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "18406:78:66" + }, + { + "condition": { + "id": 10027, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9251, + "src": "18502:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 10043, + "nodeType": "Block", + "src": "18626:80:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10039, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10016, + "src": "18652:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f36206661696c6564", + "id": 10040, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18661:29:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_5320b653cd5780735adae92ac3bcf0fff2a8be3d44e7d778c7caac0f6e924b5d", + "typeString": "literal_string \"Purchase SeaPort_1_6 failed\"" + }, + "value": "Purchase SeaPort_1_6 failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5320b653cd5780735adae92ac3bcf0fff2a8be3d44e7d778c7caac0f6e924b5d", + "typeString": "literal_string \"Purchase SeaPort_1_6 failed\"" + } + ], + "id": 10038, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "18644:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10041, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18644:47:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10042, + "nodeType": "ExpressionStatement", + "src": "18644:47:66" + } + ] + }, + "id": 10044, + "nodeType": "IfStatement", + "src": "18498:208:66", + "trueBody": { + "id": 10037, + "nodeType": "Block", + "src": "18513:107:66", + "statements": [ + { + "condition": { + "id": 10029, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "18535:8:66", + "subExpression": { + "id": 10028, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10016, + "src": "18536:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10036, + "nodeType": "IfStatement", + "src": "18531:75:66", + "trueBody": { + "id": 10035, + "nodeType": "Block", + "src": "18545:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 10030, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18575:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 10031, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18582:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 10032, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18585:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 10033, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18574:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9259, + "id": 10034, + "nodeType": "Return", + "src": "18567:20:66" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 10069, + "nodeType": "IfStatement", + "src": "17956:1015:66", + "trueBody": { + "id": 10009, + "nodeType": "Block", + "src": "18009:324:66", + "statements": [ + { + "assignments": [ + 9980, + null + ], + "declarations": [ + { + "constant": false, + "id": 9980, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 10009, + "src": "18024:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9979, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "18024:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9990, + "initialValue": { + "arguments": [ + { + "id": 9988, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9261, + "src": "18090:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9983, + "name": "seaPort_1_5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8673, + "src": "18050:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9982, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "18042:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9981, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "18042:7:66", + "typeDescriptions": {} + } + }, + "id": 9984, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18042:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "18042:25:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9987, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9986, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "18075:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "18042:47:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9989, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18042:59:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "18023:78:66" + }, + { + "condition": { + "id": 9991, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9251, + "src": "18119:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 10007, + "nodeType": "Block", + "src": "18243:80:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10003, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9980, + "src": "18269:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f35206661696c6564", + "id": 10004, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18278:29:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_83f62501a9582b49b15f73bfa16e8789fc9181acb73eb6b2a01520c5a8cee0ce", + "typeString": "literal_string \"Purchase SeaPort_1_5 failed\"" + }, + "value": "Purchase SeaPort_1_5 failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_83f62501a9582b49b15f73bfa16e8789fc9181acb73eb6b2a01520c5a8cee0ce", + "typeString": "literal_string \"Purchase SeaPort_1_5 failed\"" + } + ], + "id": 10002, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "18261:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10005, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "18261:47:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10006, + "nodeType": "ExpressionStatement", + "src": "18261:47:66" + } + ] + }, + "id": 10008, + "nodeType": "IfStatement", + "src": "18115:208:66", + "trueBody": { + "id": 10001, + "nodeType": "Block", + "src": "18130:107:66", + "statements": [ + { + "condition": { + "id": 9993, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "18152:8:66", + "subExpression": { + "id": 9992, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9980, + "src": "18153:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10000, + "nodeType": "IfStatement", + "src": "18148:75:66", + "trueBody": { + "id": 9999, + "nodeType": "Block", + "src": "18162:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9994, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18192:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9995, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18199:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9996, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "18202:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9997, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "18191:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9259, + "id": 9998, + "nodeType": "Return", + "src": "18184:20:66" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 10070, + "nodeType": "IfStatement", + "src": "16996:1975:66", + "trueBody": { + "id": 9973, + "nodeType": "Block", + "src": "17042:908:66", + "statements": [ + { + "assignments": [ + 9868, + 9870, + 9872 + ], + "declarations": [ + { + "constant": false, + "id": 9868, + "mutability": "mutable", + "name": "sell", + "nodeType": "VariableDeclaration", + "scope": 9973, + "src": "17057:23:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input" + }, + "typeName": { + "id": 9867, + "name": "IBlur.Input", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4556, + "src": "17057:11:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$4556_storage_ptr", + "typeString": "struct IBlur.Input" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9870, + "mutability": "mutable", + "name": "buy", + "nodeType": "VariableDeclaration", + "scope": 9973, + "src": "17082:22:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input" + }, + "typeName": { + "id": 9869, + "name": "IBlur.Input", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4556, + "src": "17082:11:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$4556_storage_ptr", + "typeString": "struct IBlur.Input" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9872, + "mutability": "mutable", + "name": "typeNft", + "nodeType": "VariableDeclaration", + "scope": 9973, + "src": "17106:14:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 9871, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "17106:6:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "id": 9884, + "initialValue": { + "arguments": [ + { + "id": 9875, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9261, + "src": "17135:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "expression": { + "id": 9876, + "name": "IBlur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4564, + "src": "17148:5:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IBlur_$4564_$", + "typeString": "type(contract IBlur)" + } + }, + "id": 9877, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "Input", + "nodeType": "MemberAccess", + "referencedDeclaration": 4556, + "src": "17148:11:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Input_$4556_storage_ptr_$", + "typeString": "type(struct IBlur.Input storage pointer)" + } + }, + { + "expression": { + "id": 9878, + "name": "IBlur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4564, + "src": "17161:5:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IBlur_$4564_$", + "typeString": "type(contract IBlur)" + } + }, + "id": 9879, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "Input", + "nodeType": "MemberAccess", + "referencedDeclaration": 4556, + "src": "17161:11:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Input_$4556_storage_ptr_$", + "typeString": "type(struct IBlur.Input storage pointer)" + } + }, + { + "id": 9881, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "17174:6:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes4_$", + "typeString": "type(bytes4)" + }, + "typeName": { + "id": 9880, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "17174:6:66", + "typeDescriptions": {} + } + } + ], + "id": 9882, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "17147:34:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_struct$_Input_$4556_storage_ptr_$_$_t_type$_t_struct$_Input_$4556_storage_ptr_$_$_t_type$_t_bytes4_$_$", + "typeString": "tuple(type(struct IBlur.Input storage pointer),type(struct IBlur.Input storage pointer),type(bytes4))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_struct$_Input_$4556_storage_ptr_$_$_t_type$_t_struct$_Input_$4556_storage_ptr_$_$_t_type$_t_bytes4_$_$", + "typeString": "tuple(type(struct IBlur.Input storage pointer),type(struct IBlur.Input storage pointer),type(bytes4))" + } + ], + "expression": { + "id": 9873, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "17124:3:66", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9874, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "17124:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9883, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17124:58:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_struct$_Input_$4556_memory_ptr_$_t_struct$_Input_$4556_memory_ptr_$_t_bytes4_$", + "typeString": "tuple(struct IBlur.Input memory,struct IBlur.Input memory,bytes4)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "17056:126:66" + }, + { + "condition": { + "id": 9885, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9251, + "src": "17200:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9916, + "nodeType": "Block", + "src": "17376:85:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9912, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9868, + "src": "17436:4:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + { + "id": 9913, + "name": "buy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9870, + "src": "17442:3:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9907, + "name": "blur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8671, + "src": "17400:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9906, + "name": "IBlur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4564, + "src": "17394:5:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IBlur_$4564_$", + "typeString": "type(contract IBlur)" + } + }, + "id": 9908, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17394:11:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBlur_$4564", + "typeString": "contract IBlur" + } + }, + "id": 9909, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "execute", + "nodeType": "MemberAccess", + "referencedDeclaration": 4563, + "src": "17394:19:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_Input_$4556_memory_ptr_$_t_struct$_Input_$4556_memory_ptr_$returns$__$", + "typeString": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + } + }, + "id": 9911, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9910, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "17421:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "17394:41:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_Input_$4556_memory_ptr_$_t_struct$_Input_$4556_memory_ptr_$returns$__$value", + "typeString": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + } + }, + "id": 9914, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17394:52:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9915, + "nodeType": "ExpressionStatement", + "src": "17394:52:66" + } + ] + }, + "id": 9917, + "nodeType": "IfStatement", + "src": "17196:265:66", + "trueBody": { + "id": 9905, + "nodeType": "Block", + "src": "17211:159:66", + "statements": [ + { + "clauses": [ + { + "block": { + "id": 9895, + "nodeType": "Block", + "src": "17286:2:66", + "statements": [] + }, + "errorName": "", + "id": 9896, + "nodeType": "TryCatchClause", + "src": "17286:2:66" + }, + { + "block": { + "id": 9902, + "nodeType": "Block", + "src": "17295:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9897, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17325:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9898, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17332:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9899, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17335:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9900, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "17324:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9259, + "id": 9901, + "nodeType": "Return", + "src": "17317:20:66" + } + ] + }, + "errorName": "", + "id": 9903, + "nodeType": "TryCatchClause", + "src": "17289:67:66" + } + ], + "externalCall": { + "arguments": [ + { + "id": 9892, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9868, + "src": "17275:4:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + { + "id": 9893, + "name": "buy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9870, + "src": "17281:3:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9887, + "name": "blur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8671, + "src": "17239:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9886, + "name": "IBlur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4564, + "src": "17233:5:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IBlur_$4564_$", + "typeString": "type(contract IBlur)" + } + }, + "id": 9888, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17233:11:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IBlur_$4564", + "typeString": "contract IBlur" + } + }, + "id": 9889, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "execute", + "nodeType": "MemberAccess", + "referencedDeclaration": 4563, + "src": "17233:19:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_Input_$4556_memory_ptr_$_t_struct$_Input_$4556_memory_ptr_$returns$__$", + "typeString": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + } + }, + "id": 9891, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9890, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "17260:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "17233:41:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_Input_$4556_memory_ptr_$_t_struct$_Input_$4556_memory_ptr_$returns$__$value", + "typeString": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + } + }, + "id": 9894, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17233:52:66", + "tryCall": true, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9904, + "nodeType": "TryStatement", + "src": "17229:127:66" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "id": 9921, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9918, + "name": "typeNft", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9872, + "src": "17478:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9919, + "name": "LibAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5569, + "src": "17489:8:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibAsset_$5569_$", + "typeString": "type(library LibAsset)" + } + }, + "id": 9920, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC721_ASSET_CLASS", + "nodeType": "MemberAccess", + "referencedDeclaration": 5482, + "src": "17489:27:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "src": "17478:38:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "id": 9943, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9940, + "name": "typeNft", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9872, + "src": "17668:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9941, + "name": "LibAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5569, + "src": "17679:8:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibAsset_$5569_$", + "typeString": "type(library LibAsset)" + } + }, + "id": 9942, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC1155_ASSET_CLASS", + "nodeType": "MemberAccess", + "referencedDeclaration": 5490, + "src": "17679:28:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "src": "17668:39:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9970, + "nodeType": "Block", + "src": "17879:61:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "556e6b6e6f776e20746f6b656e2074797065", + "id": 9967, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17904:20:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b", + "typeString": "literal_string \"Unknown token type\"" + }, + "value": "Unknown token type" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b", + "typeString": "literal_string \"Unknown token type\"" + } + ], + "id": 9966, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "17897:6:66", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 9968, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17897:28:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9969, + "nodeType": "ExpressionStatement", + "src": "17897:28:66" + } + ] + }, + "id": 9971, + "nodeType": "IfStatement", + "src": "17664:276:66", + "trueBody": { + "id": 9965, + "nodeType": "Block", + "src": "17709:164:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9952, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "17795:4:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "id": 9951, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "17787:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9950, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17787:7:66", + "typeDescriptions": {} + } + }, + "id": 9953, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17787:13:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9954, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "17802:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 9955, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17802:12:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "expression": { + "expression": { + "id": 9956, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9868, + "src": "17816:4:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + "id": 9957, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "order", + "nodeType": "MemberAccess", + "referencedDeclaration": 4543, + "src": "17816:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$4541_memory_ptr", + "typeString": "struct IBlur.Order memory" + } + }, + "id": 9958, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenId", + "nodeType": "MemberAccess", + "referencedDeclaration": 4523, + "src": "17816:18:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "expression": { + "id": 9959, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9868, + "src": "17836:4:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + "id": 9960, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "order", + "nodeType": "MemberAccess", + "referencedDeclaration": 4543, + "src": "17836:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$4541_memory_ptr", + "typeString": "struct IBlur.Order memory" + } + }, + "id": 9961, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4525, + "src": "17836:17:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "", + "id": 9962, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "17855:2:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "expression": { + "arguments": [ + { + "expression": { + "expression": { + "id": 9945, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9868, + "src": "17747:4:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + "id": 9946, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "order", + "nodeType": "MemberAccess", + "referencedDeclaration": 4543, + "src": "17747:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$4541_memory_ptr", + "typeString": "struct IBlur.Order memory" + } + }, + "id": 9947, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "collection", + "nodeType": "MemberAccess", + "referencedDeclaration": 4521, + "src": "17747:21:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9944, + "name": "IERC1155Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1095, + "src": "17727:19:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC1155Upgradeable_$1095_$", + "typeString": "type(contract IERC1155Upgradeable)" + } + }, + "id": 9948, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17727:42:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1155Upgradeable_$1095", + "typeString": "contract IERC1155Upgradeable" + } + }, + "id": 9949, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1078, + "src": "17727:59:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,address,uint256,uint256,bytes memory) external" + } + }, + "id": 9963, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17727:131:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9964, + "nodeType": "ExpressionStatement", + "src": "17727:131:66" + } + ] + } + }, + "id": 9972, + "nodeType": "IfStatement", + "src": "17474:466:66", + "trueBody": { + "id": 9939, + "nodeType": "Block", + "src": "17518:140:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9930, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "17603:4:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "id": 9929, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "17595:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9928, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "17595:7:66", + "typeDescriptions": {} + } + }, + "id": 9931, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17595:13:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9932, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "17610:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 9933, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17610:12:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "expression": { + "expression": { + "id": 9934, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9868, + "src": "17624:4:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + "id": 9935, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "order", + "nodeType": "MemberAccess", + "referencedDeclaration": 4543, + "src": "17624:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$4541_memory_ptr", + "typeString": "struct IBlur.Order memory" + } + }, + "id": 9936, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenId", + "nodeType": "MemberAccess", + "referencedDeclaration": 4523, + "src": "17624:18:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "expression": { + "expression": { + "id": 9923, + "name": "sell", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9868, + "src": "17555:4:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + }, + "id": 9924, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "order", + "nodeType": "MemberAccess", + "referencedDeclaration": 4543, + "src": "17555:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$4541_memory_ptr", + "typeString": "struct IBlur.Order memory" + } + }, + "id": 9925, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "collection", + "nodeType": "MemberAccess", + "referencedDeclaration": 4521, + "src": "17555:21:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9922, + "name": "IERC721Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1356, + "src": "17536:18:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC721Upgradeable_$1356_$", + "typeString": "type(contract IERC721Upgradeable)" + } + }, + "id": 9926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17536:41:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC721Upgradeable_$1356", + "typeString": "contract IERC721Upgradeable" + } + }, + "id": 9927, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1299, + "src": "17536:58:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256) external" + } + }, + "id": 9937, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "17536:107:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9938, + "nodeType": "ExpressionStatement", + "src": "17536:107:66" + } + ] + } + } + ] + } + }, + "id": 10071, + "nodeType": "IfStatement", + "src": "16613:2358:66", + "trueBody": { + "id": 9859, + "nodeType": "Block", + "src": "16666:324:66", + "statements": [ + { + "assignments": [ + 9830, + null + ], + "declarations": [ + { + "constant": false, + "id": 9830, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9859, + "src": "16681:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9829, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "16681:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9840, + "initialValue": { + "arguments": [ + { + "id": 9838, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9261, + "src": "16747:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9833, + "name": "looksRareV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8669, + "src": "16707:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9832, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "16699:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9831, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16699:7:66", + "typeDescriptions": {} + } + }, + "id": 9834, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16699:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9835, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "16699:25:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9837, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9836, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "16732:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "16699:47:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9839, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16699:59:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "16680:78:66" + }, + { + "condition": { + "id": 9841, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9251, + "src": "16776:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9857, + "nodeType": "Block", + "src": "16900:80:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9853, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9830, + "src": "16926:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5075726368617365204c6f6f6b73526172655632206661696c6564", + "id": 9854, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16935:29:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_bf725f533a31a5fc822de78c3f59575168899683c9fc9b37f7d7aa10c766d3c1", + "typeString": "literal_string \"Purchase LooksRareV2 failed\"" + }, + "value": "Purchase LooksRareV2 failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_bf725f533a31a5fc822de78c3f59575168899683c9fc9b37f7d7aa10c766d3c1", + "typeString": "literal_string \"Purchase LooksRareV2 failed\"" + } + ], + "id": 9852, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "16918:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9855, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16918:47:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9856, + "nodeType": "ExpressionStatement", + "src": "16918:47:66" + } + ] + }, + "id": 9858, + "nodeType": "IfStatement", + "src": "16772:208:66", + "trueBody": { + "id": 9851, + "nodeType": "Block", + "src": "16787:107:66", + "statements": [ + { + "condition": { + "id": 9843, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "16809:8:66", + "subExpression": { + "id": 9842, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9830, + "src": "16810:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9850, + "nodeType": "IfStatement", + "src": "16805:75:66", + "trueBody": { + "id": 9849, + "nodeType": "Block", + "src": "16819:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9844, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16849:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9845, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16856:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9846, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16859:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9847, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "16848:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9259, + "id": 9848, + "nodeType": "Return", + "src": "16841:20:66" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 10072, + "nodeType": "IfStatement", + "src": "16230:2741:66", + "trueBody": { + "id": 9823, + "nodeType": "Block", + "src": "16283:324:66", + "statements": [ + { + "assignments": [ + 9794, + null + ], + "declarations": [ + { + "constant": false, + "id": 9794, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9823, + "src": "16298:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9793, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "16298:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9804, + "initialValue": { + "arguments": [ + { + "id": 9802, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9261, + "src": "16364:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9797, + "name": "seaPort_1_4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8667, + "src": "16324:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9796, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "16316:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9795, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "16316:7:66", + "typeDescriptions": {} + } + }, + "id": 9798, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16316:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9799, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "16316:25:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9801, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9800, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "16349:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "16316:47:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9803, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16316:59:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "16297:78:66" + }, + { + "condition": { + "id": 9805, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9251, + "src": "16393:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9821, + "nodeType": "Block", + "src": "16517:80:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9817, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9794, + "src": "16543:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f34206661696c6564", + "id": 9818, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16552:29:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1cf39be99a03bb39414ad01e616c59ec2038a5746618a3f8aee8a485d8d5e50a", + "typeString": "literal_string \"Purchase SeaPort_1_4 failed\"" + }, + "value": "Purchase SeaPort_1_4 failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1cf39be99a03bb39414ad01e616c59ec2038a5746618a3f8aee8a485d8d5e50a", + "typeString": "literal_string \"Purchase SeaPort_1_4 failed\"" + } + ], + "id": 9816, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "16535:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9819, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16535:47:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9820, + "nodeType": "ExpressionStatement", + "src": "16535:47:66" + } + ] + }, + "id": 9822, + "nodeType": "IfStatement", + "src": "16389:208:66", + "trueBody": { + "id": 9815, + "nodeType": "Block", + "src": "16404:107:66", + "statements": [ + { + "condition": { + "id": 9807, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "16426:8:66", + "subExpression": { + "id": 9806, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9794, + "src": "16427:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9814, + "nodeType": "IfStatement", + "src": "16422:75:66", + "trueBody": { + "id": 9813, + "nodeType": "Block", + "src": "16436:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9808, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16466:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9809, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16473:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9810, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16476:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9811, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "16465:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9259, + "id": 9812, + "nodeType": "Return", + "src": "16458:20:66" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 10073, + "nodeType": "IfStatement", + "src": "15856:3115:66", + "trueBody": { + "id": 9787, + "nodeType": "Block", + "src": "15906:318:66", + "statements": [ + { + "assignments": [ + 9758, + null + ], + "declarations": [ + { + "constant": false, + "id": 9758, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9787, + "src": "15921:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9757, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "15921:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9768, + "initialValue": { + "arguments": [ + { + "id": 9766, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9261, + "src": "15984:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9761, + "name": "sudoswap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8665, + "src": "15947:8:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9760, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15939:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9759, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15939:7:66", + "typeDescriptions": {} + } + }, + "id": 9762, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15939:17:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9763, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "15939:22:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9765, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9764, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "15969:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "15939:44:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9767, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15939:56:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "15920:75:66" + }, + { + "condition": { + "id": 9769, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9251, + "src": "16013:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9785, + "nodeType": "Block", + "src": "16137:77:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9781, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9758, + "src": "16163:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5075726368617365207375646f73776170206661696c6564", + "id": 9782, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16172:26:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_af8784af813955ccf5679f356dd871ef58abf3a7050c9104ea0ff5ddaa4b9287", + "typeString": "literal_string \"Purchase sudoswap failed\"" + }, + "value": "Purchase sudoswap failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_af8784af813955ccf5679f356dd871ef58abf3a7050c9104ea0ff5ddaa4b9287", + "typeString": "literal_string \"Purchase sudoswap failed\"" + } + ], + "id": 9780, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "16155:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9783, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "16155:44:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9784, + "nodeType": "ExpressionStatement", + "src": "16155:44:66" + } + ] + }, + "id": 9786, + "nodeType": "IfStatement", + "src": "16009:205:66", + "trueBody": { + "id": 9779, + "nodeType": "Block", + "src": "16024:107:66", + "statements": [ + { + "condition": { + "id": 9771, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "16046:8:66", + "subExpression": { + "id": 9770, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9758, + "src": "16047:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9778, + "nodeType": "IfStatement", + "src": "16042:75:66", + "trueBody": { + "id": 9777, + "nodeType": "Block", + "src": "16056:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9772, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16086:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9773, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16093:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9774, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "16096:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9775, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "16085:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9259, + "id": 9776, + "nodeType": "Return", + "src": "16078:20:66" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 10074, + "nodeType": "IfStatement", + "src": "14722:4249:66", + "trueBody": { + "id": 9751, + "nodeType": "Block", + "src": "14779:1071:66", + "statements": [ + { + "assignments": [ + 9651, + 9653, + 9655 + ], + "declarations": [ + { + "constant": false, + "id": 9651, + "mutability": "mutable", + "name": "takerOrder", + "nodeType": "VariableDeclaration", + "scope": 9751, + "src": "14794:41:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TakerOrder_$4903_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder" + }, + "typeName": { + "id": 9650, + "name": "LibLooksRare.TakerOrder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4903, + "src": "14794:23:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TakerOrder_$4903_storage_ptr", + "typeString": "struct LibLooksRare.TakerOrder" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9653, + "mutability": "mutable", + "name": "makerOrder", + "nodeType": "VariableDeclaration", + "scope": 9751, + "src": "14837:41:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder" + }, + "typeName": { + "id": 9652, + "name": "LibLooksRare.MakerOrder", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4890, + "src": "14837:23:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$4890_storage_ptr", + "typeString": "struct LibLooksRare.MakerOrder" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9655, + "mutability": "mutable", + "name": "typeNft", + "nodeType": "VariableDeclaration", + "scope": 9751, + "src": "14880:14:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "typeName": { + "id": 9654, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "14880:6:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "visibility": "internal" + } + ], + "id": 9667, + "initialValue": { + "arguments": [ + { + "id": 9658, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9261, + "src": "14909:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "expression": { + "id": 9659, + "name": "LibLooksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4962, + "src": "14922:12:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibLooksRare_$4962_$", + "typeString": "type(library LibLooksRare)" + } + }, + "id": 9660, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "TakerOrder", + "nodeType": "MemberAccess", + "referencedDeclaration": 4903, + "src": "14922:23:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_TakerOrder_$4903_storage_ptr_$", + "typeString": "type(struct LibLooksRare.TakerOrder storage pointer)" + } + }, + { + "expression": { + "id": 9661, + "name": "LibLooksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4962, + "src": "14947:12:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibLooksRare_$4962_$", + "typeString": "type(library LibLooksRare)" + } + }, + "id": 9662, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "MakerOrder", + "nodeType": "MemberAccess", + "referencedDeclaration": 4890, + "src": "14947:23:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_MakerOrder_$4890_storage_ptr_$", + "typeString": "type(struct LibLooksRare.MakerOrder storage pointer)" + } + }, + { + "id": 9664, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14972:6:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes4_$", + "typeString": "type(bytes4)" + }, + "typeName": { + "id": 9663, + "name": "bytes4", + "nodeType": "ElementaryTypeName", + "src": "14972:6:66", + "typeDescriptions": {} + } + } + ], + "id": 9665, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "14921:58:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_type$_t_struct$_TakerOrder_$4903_storage_ptr_$_$_t_type$_t_struct$_MakerOrder_$4890_storage_ptr_$_$_t_type$_t_bytes4_$_$", + "typeString": "tuple(type(struct LibLooksRare.TakerOrder storage pointer),type(struct LibLooksRare.MakerOrder storage pointer),type(bytes4))" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_struct$_TakerOrder_$4903_storage_ptr_$_$_t_type$_t_struct$_MakerOrder_$4890_storage_ptr_$_$_t_type$_t_bytes4_$_$", + "typeString": "tuple(type(struct LibLooksRare.TakerOrder storage pointer),type(struct LibLooksRare.MakerOrder storage pointer),type(bytes4))" + } + ], + "expression": { + "id": 9656, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "14898:3:66", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9657, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "14898:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9666, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14898:82:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_struct$_TakerOrder_$4903_memory_ptr_$_t_struct$_MakerOrder_$4890_memory_ptr_$_t_bytes4_$", + "typeString": "tuple(struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory,bytes4)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14793:187:66" + }, + { + "condition": { + "id": 9668, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9251, + "src": "14998:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9699, + "nodeType": "Block", + "src": "15225:136:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9695, + "name": "takerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9651, + "src": "15323:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TakerOrder_$4903_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + } + }, + { + "id": 9696, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9653, + "src": "15335:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$4903_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$4903_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9690, + "name": "looksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8663, + "src": "15254:9:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9689, + "name": "ILooksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4617, + "src": "15243:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILooksRare_$4617_$", + "typeString": "type(contract ILooksRare)" + } + }, + "id": 9691, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15243:21:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILooksRare_$4617", + "typeString": "contract ILooksRare" + } + }, + "id": 9692, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "matchAskWithTakerBidUsingETHAndWETH", + "nodeType": "MemberAccess", + "referencedDeclaration": 4602, + "src": "15243:57:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_TakerOrder_$4903_memory_ptr_$_t_struct$_MakerOrder_$4890_memory_ptr_$returns$__$", + "typeString": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + } + }, + "id": 9694, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9693, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "15308:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "15243:79:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_TakerOrder_$4903_memory_ptr_$_t_struct$_MakerOrder_$4890_memory_ptr_$returns$__$value", + "typeString": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + } + }, + "id": 9697, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15243:103:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9698, + "nodeType": "ExpressionStatement", + "src": "15243:103:66" + } + ] + }, + "id": 9700, + "nodeType": "IfStatement", + "src": "14994:367:66", + "trueBody": { + "id": 9688, + "nodeType": "Block", + "src": "15009:210:66", + "statements": [ + { + "clauses": [ + { + "block": { + "id": 9678, + "nodeType": "Block", + "src": "15135:2:66", + "statements": [] + }, + "errorName": "", + "id": 9679, + "nodeType": "TryCatchClause", + "src": "15135:2:66" + }, + { + "block": { + "id": 9685, + "nodeType": "Block", + "src": "15144:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9680, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15174:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9681, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15181:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9682, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15184:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9683, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "15173:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9259, + "id": 9684, + "nodeType": "Return", + "src": "15166:20:66" + } + ] + }, + "errorName": "", + "id": 9686, + "nodeType": "TryCatchClause", + "src": "15138:67:66" + } + ], + "externalCall": { + "arguments": [ + { + "id": 9675, + "name": "takerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9651, + "src": "15111:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_TakerOrder_$4903_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + } + }, + { + "id": 9676, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9653, + "src": "15123:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$4903_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$4903_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9670, + "name": "looksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8663, + "src": "15042:9:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9669, + "name": "ILooksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4617, + "src": "15031:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ILooksRare_$4617_$", + "typeString": "type(contract ILooksRare)" + } + }, + "id": 9671, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15031:21:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ILooksRare_$4617", + "typeString": "contract ILooksRare" + } + }, + "id": 9672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "matchAskWithTakerBidUsingETHAndWETH", + "nodeType": "MemberAccess", + "referencedDeclaration": 4602, + "src": "15031:57:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_TakerOrder_$4903_memory_ptr_$_t_struct$_MakerOrder_$4890_memory_ptr_$returns$__$", + "typeString": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + } + }, + "id": 9674, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9673, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "15096:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "15031:79:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_TakerOrder_$4903_memory_ptr_$_t_struct$_MakerOrder_$4890_memory_ptr_$returns$__$value", + "typeString": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + } + }, + "id": 9677, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15031:103:66", + "tryCall": true, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9687, + "nodeType": "TryStatement", + "src": "15027:178:66" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "id": 9704, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9701, + "name": "typeNft", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9655, + "src": "15378:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9702, + "name": "LibAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5569, + "src": "15389:8:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibAsset_$5569_$", + "typeString": "type(library LibAsset)" + } + }, + "id": 9703, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC721_ASSET_CLASS", + "nodeType": "MemberAccess", + "referencedDeclaration": 5482, + "src": "15389:27:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "src": "15378:38:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "id": 9724, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9721, + "name": "typeNft", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9655, + "src": "15568:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 9722, + "name": "LibAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 5569, + "src": "15579:8:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibAsset_$5569_$", + "typeString": "type(library LibAsset)" + } + }, + "id": 9723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "ERC1155_ASSET_CLASS", + "nodeType": "MemberAccess", + "referencedDeclaration": 5490, + "src": "15579:28:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + } + }, + "src": "15568:39:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9748, + "nodeType": "Block", + "src": "15779:61:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "556e6b6e6f776e20746f6b656e2074797065", + "id": 9745, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15804:20:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b", + "typeString": "literal_string \"Unknown token type\"" + }, + "value": "Unknown token type" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b", + "typeString": "literal_string \"Unknown token type\"" + } + ], + "id": 9744, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "15797:6:66", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 9746, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15797:28:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9747, + "nodeType": "ExpressionStatement", + "src": "15797:28:66" + } + ] + }, + "id": 9749, + "nodeType": "IfStatement", + "src": "15564:276:66", + "trueBody": { + "id": 9743, + "nodeType": "Block", + "src": "15609:164:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9732, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "15695:4:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "id": 9731, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15687:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9730, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15687:7:66", + "typeDescriptions": {} + } + }, + "id": 9733, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15687:13:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9734, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "15702:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 9735, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15702:12:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "expression": { + "id": 9736, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9653, + "src": "15716:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + }, + "id": 9737, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenId", + "nodeType": "MemberAccess", + "referencedDeclaration": 4867, + "src": "15716:18:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9738, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9653, + "src": "15736:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + }, + "id": 9739, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4869, + "src": "15736:17:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "", + "id": 9740, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "15755:2:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "expression": { + "arguments": [ + { + "expression": { + "id": 9726, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9653, + "src": "15647:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + }, + "id": 9727, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "collection", + "nodeType": "MemberAccess", + "referencedDeclaration": 4863, + "src": "15647:21:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9725, + "name": "IERC1155Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1095, + "src": "15627:19:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC1155Upgradeable_$1095_$", + "typeString": "type(contract IERC1155Upgradeable)" + } + }, + "id": 9728, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15627:42:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1155Upgradeable_$1095", + "typeString": "contract IERC1155Upgradeable" + } + }, + "id": 9729, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1078, + "src": "15627:59:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,address,uint256,uint256,bytes memory) external" + } + }, + "id": 9741, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15627:131:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9742, + "nodeType": "ExpressionStatement", + "src": "15627:131:66" + } + ] + } + }, + "id": 9750, + "nodeType": "IfStatement", + "src": "15374:466:66", + "trueBody": { + "id": 9720, + "nodeType": "Block", + "src": "15418:140:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9712, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "15503:4:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "id": 9711, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "15495:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9710, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "15495:7:66", + "typeDescriptions": {} + } + }, + "id": 9713, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15495:13:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9714, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "15510:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 9715, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15510:12:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "expression": { + "id": 9716, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9653, + "src": "15524:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + }, + "id": 9717, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenId", + "nodeType": "MemberAccess", + "referencedDeclaration": 4867, + "src": "15524:18:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "expression": { + "id": 9706, + "name": "makerOrder", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9653, + "src": "15455:10:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + }, + "id": 9707, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "collection", + "nodeType": "MemberAccess", + "referencedDeclaration": 4863, + "src": "15455:21:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9705, + "name": "IERC721Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1356, + "src": "15436:18:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC721Upgradeable_$1356_$", + "typeString": "type(contract IERC721Upgradeable)" + } + }, + "id": 9708, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15436:41:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC721Upgradeable_$1356", + "typeString": "contract IERC721Upgradeable" + } + }, + "id": 9709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1299, + "src": "15436:58:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256) external" + } + }, + "id": 9718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "15436:107:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9719, + "nodeType": "ExpressionStatement", + "src": "15436:107:66" + } + ] + } + } + ] + } + }, + "id": 10075, + "nodeType": "IfStatement", + "src": "12540:6431:66", + "trueBody": { + "id": 9642, + "nodeType": "Block", + "src": "12586:2130:66", + "statements": [ + { + "assignments": [ + 9395 + ], + "declarations": [ + { + "constant": false, + "id": 9395, + "mutability": "mutable", + "name": "input", + "nodeType": "VariableDeclaration", + "scope": 9642, + "src": "12600:27:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput" + }, + "typeName": { + "id": 9394, + "name": "Ix2y2.RunInput", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4839, + "src": "12600:14:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_storage_ptr", + "typeString": "struct Ix2y2.RunInput" + } + }, + "visibility": "internal" + } + ], + "id": 9403, + "initialValue": { + "arguments": [ + { + "id": 9398, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9261, + "src": "12641:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "expression": { + "id": 9399, + "name": "Ix2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4854, + "src": "12654:5:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Ix2y2_$4854_$", + "typeString": "type(contract Ix2y2)" + } + }, + "id": 9400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "RunInput", + "nodeType": "MemberAccess", + "referencedDeclaration": 4839, + "src": "12654:14:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_RunInput_$4839_storage_ptr_$", + "typeString": "type(struct Ix2y2.RunInput storage pointer)" + } + } + ], + "id": 9401, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12653:16:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_RunInput_$4839_storage_ptr_$", + "typeString": "type(struct Ix2y2.RunInput storage pointer)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_struct$_RunInput_$4839_storage_ptr_$", + "typeString": "type(struct Ix2y2.RunInput storage pointer)" + } + ], + "expression": { + "id": 9396, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "12630:3:66", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9397, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "12630:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9402, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12630:40:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12600:70:66" + }, + { + "condition": { + "id": 9404, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9251, + "src": "12689:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9433, + "nodeType": "Block", + "src": "12857:77:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9430, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "12913:5:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9425, + "name": "x2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8661, + "src": "12881:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9424, + "name": "Ix2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4854, + "src": "12875:5:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Ix2y2_$4854_$", + "typeString": "type(contract Ix2y2)" + } + }, + "id": 9426, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12875:11:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ix2y2_$4854", + "typeString": "contract Ix2y2" + } + }, + "id": 9427, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "run", + "nodeType": "MemberAccess", + "referencedDeclaration": 4853, + "src": "12875:15:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_RunInput_$4839_memory_ptr_$returns$__$", + "typeString": "function (struct Ix2y2.RunInput memory) payable external" + } + }, + "id": 9429, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9428, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "12898:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "12875:37:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_RunInput_$4839_memory_ptr_$returns$__$value", + "typeString": "function (struct Ix2y2.RunInput memory) payable external" + } + }, + "id": 9431, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12875:44:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9432, + "nodeType": "ExpressionStatement", + "src": "12875:44:66" + } + ] + }, + "id": 9434, + "nodeType": "IfStatement", + "src": "12685:249:66", + "trueBody": { + "id": 9423, + "nodeType": "Block", + "src": "12700:151:66", + "statements": [ + { + "clauses": [ + { + "block": { + "id": 9413, + "nodeType": "Block", + "src": "12767:2:66", + "statements": [] + }, + "errorName": "", + "id": 9414, + "nodeType": "TryCatchClause", + "src": "12767:2:66" + }, + { + "block": { + "id": 9420, + "nodeType": "Block", + "src": "12776:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9415, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12806:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9416, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12813:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9417, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12816:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9418, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12805:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9259, + "id": 9419, + "nodeType": "Return", + "src": "12798:20:66" + } + ] + }, + "errorName": "", + "id": 9421, + "nodeType": "TryCatchClause", + "src": "12770:67:66" + } + ], + "externalCall": { + "arguments": [ + { + "id": 9411, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "12760:5:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9406, + "name": "x2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8661, + "src": "12728:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9405, + "name": "Ix2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4854, + "src": "12722:5:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Ix2y2_$4854_$", + "typeString": "type(contract Ix2y2)" + } + }, + "id": 9407, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12722:11:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Ix2y2_$4854", + "typeString": "contract Ix2y2" + } + }, + "id": 9408, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "run", + "nodeType": "MemberAccess", + "referencedDeclaration": 4853, + "src": "12722:15:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_RunInput_$4839_memory_ptr_$returns$__$", + "typeString": "function (struct Ix2y2.RunInput memory) payable external" + } + }, + "id": 9410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9409, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "12745:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "12722:37:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_payable$_t_struct$_RunInput_$4839_memory_ptr_$returns$__$value", + "typeString": "function (struct Ix2y2.RunInput memory) payable external" + } + }, + "id": 9412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12722:44:66", + "tryCall": true, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9422, + "nodeType": "TryStatement", + "src": "12718:119:66" + } + ] + } + }, + { + "body": { + "id": 9640, + "nodeType": "Block", + "src": "13181:1525:66", + "statements": [ + { + "assignments": [ + 9448 + ], + "declarations": [ + { + "constant": false, + "id": 9448, + "mutability": "mutable", + "name": "orderId", + "nodeType": "VariableDeclaration", + "scope": 9640, + "src": "13199:15:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9447, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13199:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9454, + "initialValue": { + "expression": { + "baseExpression": { + "expression": { + "id": 9449, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "13217:5:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 9450, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "details", + "nodeType": "MemberAccess", + "referencedDeclaration": 4830, + "src": "13217:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_SettleDetail_$4811_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory[] memory" + } + }, + "id": 9452, + "indexExpression": { + "id": 9451, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9436, + "src": "13231:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13217:16:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SettleDetail_$4811_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory" + } + }, + "id": 9453, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "orderIdx", + "nodeType": "MemberAccess", + "referencedDeclaration": 4791, + "src": "13217:25:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13199:43:66" + }, + { + "assignments": [ + 9456 + ], + "declarations": [ + { + "constant": false, + "id": 9456, + "mutability": "mutable", + "name": "itemId", + "nodeType": "VariableDeclaration", + "scope": 9640, + "src": "13260:14:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9455, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13260:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9462, + "initialValue": { + "expression": { + "baseExpression": { + "expression": { + "id": 9457, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "13277:5:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 9458, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "details", + "nodeType": "MemberAccess", + "referencedDeclaration": 4830, + "src": "13277:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_SettleDetail_$4811_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory[] memory" + } + }, + "id": 9460, + "indexExpression": { + "id": 9459, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9436, + "src": "13291:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13277:16:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SettleDetail_$4811_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory" + } + }, + "id": 9461, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "itemIdx", + "nodeType": "MemberAccess", + "referencedDeclaration": 4793, + "src": "13277:24:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13260:41:66" + }, + { + "assignments": [ + 9464 + ], + "declarations": [ + { + "constant": false, + "id": 9464, + "mutability": "mutable", + "name": "data", + "nodeType": "VariableDeclaration", + "scope": 9640, + "src": "13319:17:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 9463, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "13319:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 9473, + "initialValue": { + "expression": { + "baseExpression": { + "expression": { + "baseExpression": { + "expression": { + "id": 9465, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "13339:5:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 9466, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "orders", + "nodeType": "MemberAccess", + "referencedDeclaration": 4827, + "src": "13339:12:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Order_$4782_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Order memory[] memory" + } + }, + "id": 9468, + "indexExpression": { + "id": 9467, + "name": "orderId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "13352:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13339:21:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$4782_memory_ptr", + "typeString": "struct Ix2y2.Order memory" + } + }, + "id": 9469, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "items", + "nodeType": "MemberAccess", + "referencedDeclaration": 4773, + "src": "13339:27:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_OrderItem_$4742_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.OrderItem memory[] memory" + } + }, + "id": 9471, + "indexExpression": { + "id": 9470, + "name": "itemId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9456, + "src": "13367:6:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13339:35:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_OrderItem_$4742_memory_ptr", + "typeString": "struct Ix2y2.OrderItem memory" + } + }, + "id": 9472, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "data", + "nodeType": "MemberAccess", + "referencedDeclaration": 4741, + "src": "13339:40:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13319:60:66" + }, + { + "id": 9507, + "nodeType": "Block", + "src": "13397:268:66", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 9490, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "baseExpression": { + "expression": { + "id": 9474, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "13423:5:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 9475, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "orders", + "nodeType": "MemberAccess", + "referencedDeclaration": 4827, + "src": "13423:12:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Order_$4782_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Order memory[] memory" + } + }, + "id": 9477, + "indexExpression": { + "id": 9476, + "name": "orderId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "13436:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13423:21:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$4782_memory_ptr", + "typeString": "struct Ix2y2.Order memory" + } + }, + "id": 9478, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "dataMask", + "nodeType": "MemberAccess", + "referencedDeclaration": 4770, + "src": "13423:30:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 9479, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "13423:37:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9480, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13463:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "13423:41:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9489, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "baseExpression": { + "expression": { + "id": 9482, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "13468:5:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 9483, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "details", + "nodeType": "MemberAccess", + "referencedDeclaration": 4830, + "src": "13468:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_SettleDetail_$4811_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory[] memory" + } + }, + "id": 9485, + "indexExpression": { + "id": 9484, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9436, + "src": "13482:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13468:16:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SettleDetail_$4811_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory" + } + }, + "id": 9486, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "dataReplacement", + "nodeType": "MemberAccess", + "referencedDeclaration": 4801, + "src": "13468:32:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 9487, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "13468:39:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 9488, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13510:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "13468:43:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "13423:88:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9506, + "nodeType": "IfStatement", + "src": "13419:228:66", + "trueBody": { + "id": 9505, + "nodeType": "Block", + "src": "13513:134:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9492, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9464, + "src": "13553:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "baseExpression": { + "expression": { + "id": 9493, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "13559:5:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 9494, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "details", + "nodeType": "MemberAccess", + "referencedDeclaration": 4830, + "src": "13559:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_SettleDetail_$4811_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory[] memory" + } + }, + "id": 9496, + "indexExpression": { + "id": 9495, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9436, + "src": "13573:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13559:16:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_SettleDetail_$4811_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory" + } + }, + "id": 9497, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "dataReplacement", + "nodeType": "MemberAccess", + "referencedDeclaration": 4801, + "src": "13559:32:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "baseExpression": { + "expression": { + "id": 9498, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "13593:5:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 9499, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "orders", + "nodeType": "MemberAccess", + "referencedDeclaration": 4827, + "src": "13593:12:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Order_$4782_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Order memory[] memory" + } + }, + "id": 9501, + "indexExpression": { + "id": 9500, + "name": "orderId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "13606:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13593:21:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$4782_memory_ptr", + "typeString": "struct Ix2y2.Order memory" + } + }, + "id": 9502, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "dataMask", + "nodeType": "MemberAccess", + "referencedDeclaration": 4770, + "src": "13593:30:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 9491, + "name": "_arrayReplace", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10774, + "src": "13539:13:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (bytes memory,bytes memory,bytes memory) view" + } + }, + "id": 9503, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13539:85:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9504, + "nodeType": "ExpressionStatement", + "src": "13539:85:66" + } + ] + } + } + ] + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9514, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "baseExpression": { + "expression": { + "id": 9508, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "13718:5:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 9509, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "orders", + "nodeType": "MemberAccess", + "referencedDeclaration": 4827, + "src": "13718:12:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Order_$4782_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Order memory[] memory" + } + }, + "id": 9511, + "indexExpression": { + "id": 9510, + "name": "orderId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "13731:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13718:21:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$4782_memory_ptr", + "typeString": "struct Ix2y2.Order memory" + } + }, + "id": 9512, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "delegateType", + "nodeType": "MemberAccess", + "referencedDeclaration": 4764, + "src": "13718:34:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "31", + "id": 9513, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13756:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_1_by_1", + "typeString": "int_const 1" + }, + "value": "1" + }, + "src": "13718:39:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9575, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "baseExpression": { + "expression": { + "id": 9569, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "14142:5:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 9570, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "orders", + "nodeType": "MemberAccess", + "referencedDeclaration": 4827, + "src": "14142:12:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Order_$4782_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Order memory[] memory" + } + }, + "id": 9572, + "indexExpression": { + "id": 9571, + "name": "orderId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9448, + "src": "14155:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14142:21:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Order_$4782_memory_ptr", + "typeString": "struct Ix2y2.Order memory" + } + }, + "id": 9573, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "delegateType", + "nodeType": "MemberAccess", + "referencedDeclaration": 4764, + "src": "14142:34:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "32", + "id": 9574, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14180:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_2_by_1", + "typeString": "int_const 2" + }, + "value": "2" + }, + "src": "14142:39:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9637, + "nodeType": "Block", + "src": "14616:76:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "756e6b6e6f776e2064656c6567617465547970652078327932", + "id": 9634, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14645:27:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_b9e628d538abf867b76153fc9fbf92e2395d1f1d03fe95fb0b6ee129f4f808af", + "typeString": "literal_string \"unknown delegateType x2y2\"" + }, + "value": "unknown delegateType x2y2" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_b9e628d538abf867b76153fc9fbf92e2395d1f1d03fe95fb0b6ee129f4f808af", + "typeString": "literal_string \"unknown delegateType x2y2\"" + } + ], + "id": 9633, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "14638:6:66", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 9635, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14638:35:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9636, + "nodeType": "ExpressionStatement", + "src": "14638:35:66" + } + ] + }, + "id": 9638, + "nodeType": "IfStatement", + "src": "14138:554:66", + "trueBody": { + "id": 9632, + "nodeType": "Block", + "src": "14183:427:66", + "statements": [ + { + "assignments": [ + 9580 + ], + "declarations": [ + { + "constant": false, + "id": 9580, + "mutability": "mutable", + "name": "pairs", + "nodeType": "VariableDeclaration", + "scope": 9632, + "src": "14241:29:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$4754_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair1155[]" + }, + "typeName": { + "baseType": { + "id": 9578, + "name": "Ix2y2.Pair1155", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4754, + "src": "14241:14:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$4754_storage_ptr", + "typeString": "struct Ix2y2.Pair1155" + } + }, + "id": 9579, + "nodeType": "ArrayTypeName", + "src": "14241:16:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$4754_storage_$dyn_storage_ptr", + "typeString": "struct Ix2y2.Pair1155[]" + } + }, + "visibility": "internal" + } + ], + "id": 9589, + "initialValue": { + "arguments": [ + { + "id": 9583, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9464, + "src": "14284:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "baseExpression": { + "expression": { + "id": 9584, + "name": "Ix2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4854, + "src": "14291:5:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Ix2y2_$4854_$", + "typeString": "type(contract Ix2y2)" + } + }, + "id": 9585, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "Pair1155", + "nodeType": "MemberAccess", + "referencedDeclaration": 4754, + "src": "14291:14:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Pair1155_$4754_storage_ptr_$", + "typeString": "type(struct Ix2y2.Pair1155 storage pointer)" + } + }, + "id": 9586, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14291:16:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair1155_$4754_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair1155 memory[] memory)" + } + } + ], + "id": 9587, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "14290:18:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair1155_$4754_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair1155 memory[] memory)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair1155_$4754_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair1155 memory[] memory)" + } + ], + "expression": { + "id": 9581, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "14273:3:66", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9582, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "14273:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9588, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14273:36:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$4754_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14241:68:66" + }, + { + "body": { + "id": 9630, + "nodeType": "Block", + "src": "14375:217:66", + "statements": [ + { + "assignments": [ + 9604 + ], + "declarations": [ + { + "constant": false, + "id": 9604, + "mutability": "mutable", + "name": "p", + "nodeType": "VariableDeclaration", + "scope": 9630, + "src": "14401:23:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$4754_memory_ptr", + "typeString": "struct Ix2y2.Pair1155" + }, + "typeName": { + "id": 9603, + "name": "Ix2y2.Pair1155", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4754, + "src": "14401:14:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$4754_storage_ptr", + "typeString": "struct Ix2y2.Pair1155" + } + }, + "visibility": "internal" + } + ], + "id": 9608, + "initialValue": { + "baseExpression": { + "id": 9605, + "name": "pairs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9580, + "src": "14427:5:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$4754_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory[] memory" + } + }, + "id": 9607, + "indexExpression": { + "id": 9606, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9591, + "src": "14433:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "14427:8:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$4754_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "14401:34:66" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9619, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "14524:4:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "id": 9618, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14516:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9617, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14516:7:66", + "typeDescriptions": {} + } + }, + "id": 9620, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14516:13:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9621, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "14531:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 9622, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14531:12:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "expression": { + "id": 9623, + "name": "p", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9604, + "src": "14545:1:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$4754_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory" + } + }, + "id": 9624, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenId", + "nodeType": "MemberAccess", + "referencedDeclaration": 4751, + "src": "14545:9:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 9625, + "name": "p", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9604, + "src": "14556:1:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$4754_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory" + } + }, + "id": 9626, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 4753, + "src": "14556:8:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "", + "id": 9627, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14566:2:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + }, + "value": "" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 9612, + "name": "p", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9604, + "src": "14489:1:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair1155_$4754_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory" + } + }, + "id": 9613, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "token", + "nodeType": "MemberAccess", + "referencedDeclaration": 4749, + "src": "14489:7:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9611, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14481:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9610, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14481:7:66", + "typeDescriptions": {} + } + }, + "id": 9614, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14481:16:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9609, + "name": "IERC1155Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1095, + "src": "14461:19:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC1155Upgradeable_$1095_$", + "typeString": "type(contract IERC1155Upgradeable)" + } + }, + "id": 9615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14461:37:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC1155Upgradeable_$1095", + "typeString": "contract IERC1155Upgradeable" + } + }, + "id": 9616, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1078, + "src": "14461:54:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_bytes_memory_ptr_$returns$__$", + "typeString": "function (address,address,uint256,uint256,bytes memory) external" + } + }, + "id": 9628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14461:108:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9629, + "nodeType": "ExpressionStatement", + "src": "14461:108:66" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9597, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9594, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9591, + "src": "14352:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 9595, + "name": "pairs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9580, + "src": "14356:5:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair1155_$4754_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair1155 memory[] memory" + } + }, + "id": 9596, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "14356:12:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "14352:16:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9631, + "initializationExpression": { + "assignments": [ + 9591 + ], + "declarations": [ + { + "constant": false, + "id": 9591, + "mutability": "mutable", + "name": "j", + "nodeType": "VariableDeclaration", + "scope": 9631, + "src": "14337:9:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9590, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14337:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9593, + "initialValue": { + "hexValue": "30", + "id": 9592, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "14349:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "14337:13:66" + }, + "loopExpression": { + "expression": { + "id": 9599, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "14370:3:66", + "subExpression": { + "id": 9598, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9591, + "src": "14370:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9600, + "nodeType": "ExpressionStatement", + "src": "14370:3:66" + }, + "nodeType": "ForStatement", + "src": "14332:260:66" + } + ] + } + }, + "id": 9639, + "nodeType": "IfStatement", + "src": "13714:978:66", + "trueBody": { + "id": 9568, + "nodeType": "Block", + "src": "13759:373:66", + "statements": [ + { + "assignments": [ + 9519 + ], + "declarations": [ + { + "constant": false, + "id": 9519, + "mutability": "mutable", + "name": "pairs", + "nodeType": "VariableDeclaration", + "scope": 9568, + "src": "13781:28:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair721_$4747_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair721[]" + }, + "typeName": { + "baseType": { + "id": 9517, + "name": "Ix2y2.Pair721", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4747, + "src": "13781:13:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair721_$4747_storage_ptr", + "typeString": "struct Ix2y2.Pair721" + } + }, + "id": 9518, + "nodeType": "ArrayTypeName", + "src": "13781:15:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair721_$4747_storage_$dyn_storage_ptr", + "typeString": "struct Ix2y2.Pair721[]" + } + }, + "visibility": "internal" + } + ], + "id": 9528, + "initialValue": { + "arguments": [ + { + "id": 9522, + "name": "data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9464, + "src": "13823:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "baseExpression": { + "expression": { + "id": 9523, + "name": "Ix2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4854, + "src": "13830:5:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Ix2y2_$4854_$", + "typeString": "type(contract Ix2y2)" + } + }, + "id": 9524, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "Pair721", + "nodeType": "MemberAccess", + "referencedDeclaration": 4747, + "src": "13830:13:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_Pair721_$4747_storage_ptr_$", + "typeString": "type(struct Ix2y2.Pair721 storage pointer)" + } + }, + "id": 9525, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13830:15:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair721_$4747_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair721 memory[] memory)" + } + } + ], + "id": 9526, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "13829:17:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair721_$4747_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair721 memory[] memory)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair721_$4747_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair721 memory[] memory)" + } + ], + "expression": { + "id": 9520, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "13812:3:66", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 9521, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "13812:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 9527, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13812:35:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair721_$4747_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair721 memory[] memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13781:66:66" + }, + { + "body": { + "id": 9566, + "nodeType": "Block", + "src": "13913:201:66", + "statements": [ + { + "assignments": [ + 9543 + ], + "declarations": [ + { + "constant": false, + "id": 9543, + "mutability": "mutable", + "name": "p", + "nodeType": "VariableDeclaration", + "scope": 9566, + "src": "13939:22:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair721_$4747_memory_ptr", + "typeString": "struct Ix2y2.Pair721" + }, + "typeName": { + "id": 9542, + "name": "Ix2y2.Pair721", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 4747, + "src": "13939:13:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair721_$4747_storage_ptr", + "typeString": "struct Ix2y2.Pair721" + } + }, + "visibility": "internal" + } + ], + "id": 9547, + "initialValue": { + "baseExpression": { + "id": 9544, + "name": "pairs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9519, + "src": "13964:5:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair721_$4747_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair721 memory[] memory" + } + }, + "id": 9546, + "indexExpression": { + "id": 9545, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9530, + "src": "13970:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "13964:8:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair721_$4747_memory_ptr", + "typeString": "struct Ix2y2.Pair721 memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "13939:33:66" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 9558, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "14060:4:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "id": 9557, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14052:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9556, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14052:7:66", + "typeDescriptions": {} + } + }, + "id": 9559, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14052:13:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 9560, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "14067:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 9561, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14067:12:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "expression": { + "id": 9562, + "name": "p", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9543, + "src": "14081:1:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair721_$4747_memory_ptr", + "typeString": "struct Ix2y2.Pair721 memory" + } + }, + "id": 9563, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "tokenId", + "nodeType": "MemberAccess", + "referencedDeclaration": 4746, + "src": "14081:9:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "expression": { + "id": 9551, + "name": "p", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9543, + "src": "14025:1:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_Pair721_$4747_memory_ptr", + "typeString": "struct Ix2y2.Pair721 memory" + } + }, + "id": 9552, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "token", + "nodeType": "MemberAccess", + "referencedDeclaration": 4744, + "src": "14025:7:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9550, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14017:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9549, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14017:7:66", + "typeDescriptions": {} + } + }, + "id": 9553, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "14017:16:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9548, + "name": "IERC721Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1356, + "src": "13998:18:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC721Upgradeable_$1356_$", + "typeString": "type(contract IERC721Upgradeable)" + } + }, + "id": 9554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13998:36:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC721Upgradeable_$1356", + "typeString": "contract IERC721Upgradeable" + } + }, + "id": 9555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "safeTransferFrom", + "nodeType": "MemberAccess", + "referencedDeclaration": 1299, + "src": "13998:53:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,address,uint256) external" + } + }, + "id": 9564, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "13998:93:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9565, + "nodeType": "ExpressionStatement", + "src": "13998:93:66" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9536, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9533, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9530, + "src": "13890:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 9534, + "name": "pairs", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9519, + "src": "13894:5:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_Pair721_$4747_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.Pair721 memory[] memory" + } + }, + "id": 9535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "13894:12:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13890:16:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9567, + "initializationExpression": { + "assignments": [ + 9530 + ], + "declarations": [ + { + "constant": false, + "id": 9530, + "mutability": "mutable", + "name": "j", + "nodeType": "VariableDeclaration", + "scope": 9567, + "src": "13875:9:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9529, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13875:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9532, + "initialValue": { + "hexValue": "30", + "id": 9531, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13887:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "13875:13:66" + }, + "loopExpression": { + "expression": { + "id": 9538, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": false, + "src": "13908:3:66", + "subExpression": { + "id": 9537, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9530, + "src": "13908:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9539, + "nodeType": "ExpressionStatement", + "src": "13908:3:66" + }, + "nodeType": "ForStatement", + "src": "13870:244:66" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 9443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 9439, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9436, + "src": "13150:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "expression": { + "id": 9440, + "name": "input", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9395, + "src": "13154:5:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + }, + "id": 9441, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "details", + "nodeType": "MemberAccess", + "referencedDeclaration": 4830, + "src": "13154:13:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_struct$_SettleDetail_$4811_memory_ptr_$dyn_memory_ptr", + "typeString": "struct Ix2y2.SettleDetail memory[] memory" + } + }, + "id": 9442, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "13154:20:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13150:24:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9641, + "initializationExpression": { + "assignments": [ + 9436 + ], + "declarations": [ + { + "constant": false, + "id": 9436, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 9641, + "src": "13135:9:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9435, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13135:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 9438, + "initialValue": { + "hexValue": "30", + "id": 9437, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13147:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "13135:13:66" + }, + "loopExpression": { + "expression": { + "id": 9445, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "13176:3:66", + "subExpression": { + "id": 9444, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9436, + "src": "13178:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 9446, + "nodeType": "ExpressionStatement", + "src": "13176:3:66" + }, + "nodeType": "ForStatement", + "src": "13130:1576:66" + } + ] + } + }, + "id": 10076, + "nodeType": "IfStatement", + "src": "12163:6808:66", + "trueBody": { + "id": 9386, + "nodeType": "Block", + "src": "12215:319:66", + "statements": [ + { + "assignments": [ + 9357, + null + ], + "declarations": [ + { + "constant": false, + "id": 9357, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9386, + "src": "12230:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9356, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "12230:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9367, + "initialValue": { + "arguments": [ + { + "id": 9365, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9261, + "src": "12295:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9360, + "name": "exchangeV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8657, + "src": "12256:10:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9359, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "12248:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9358, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "12248:7:66", + "typeDescriptions": {} + } + }, + "id": 9361, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12248:19:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "12248:24:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9364, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9363, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "12280:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "12248:46:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9366, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12248:58:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "12229:77:66" + }, + { + "condition": { + "id": 9368, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9251, + "src": "12324:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9384, + "nodeType": "Block", + "src": "12448:76:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9380, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9357, + "src": "12474:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "50757263686173652072617269626c65206661696c6564", + "id": 9381, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12483:25:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2b352c406e176536877560097b51d8b7a1d4ebdd84181eeb9cfae44540c1b868", + "typeString": "literal_string \"Purchase rarible failed\"" + }, + "value": "Purchase rarible failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2b352c406e176536877560097b51d8b7a1d4ebdd84181eeb9cfae44540c1b868", + "typeString": "literal_string \"Purchase rarible failed\"" + } + ], + "id": 9379, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "12466:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9382, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12466:43:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9383, + "nodeType": "ExpressionStatement", + "src": "12466:43:66" + } + ] + }, + "id": 9385, + "nodeType": "IfStatement", + "src": "12320:204:66", + "trueBody": { + "id": 9378, + "nodeType": "Block", + "src": "12335:107:66", + "statements": [ + { + "condition": { + "id": 9370, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "12357:8:66", + "subExpression": { + "id": 9369, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9357, + "src": "12358:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9377, + "nodeType": "IfStatement", + "src": "12353:75:66", + "trueBody": { + "id": 9376, + "nodeType": "Block", + "src": "12367:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9371, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12397:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9372, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12404:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9373, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12407:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9374, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12396:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9259, + "id": 9375, + "nodeType": "Return", + "src": "12389:20:66" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 10077, + "nodeType": "IfStatement", + "src": "11771:7200:66", + "trueBody": { + "id": 9350, + "nodeType": "Block", + "src": "11827:330:66", + "statements": [ + { + "assignments": [ + 9321, + null + ], + "declarations": [ + { + "constant": false, + "id": 9321, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9350, + "src": "11842:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9320, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11842:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9331, + "initialValue": { + "arguments": [ + { + "id": 9329, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9261, + "src": "11911:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9324, + "name": "wyvernExchange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8655, + "src": "11868:14:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9323, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "11860:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9322, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11860:7:66", + "typeDescriptions": {} + } + }, + "id": 9325, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11860:23:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9326, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "11860:28:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9328, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9327, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "11896:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "11860:50:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9330, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11860:62:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11841:81:66" + }, + { + "condition": { + "id": 9332, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9251, + "src": "11940:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9348, + "nodeType": "Block", + "src": "12064:83:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9344, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9321, + "src": "12090:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "50757263686173652077797665726e45786368616e6765206661696c6564", + "id": 9345, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12099:32:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1cdf96c41f1501fb82e87942f0faf4d72a6efd57209b4dccba0c17cf2c4017c6", + "typeString": "literal_string \"Purchase wyvernExchange failed\"" + }, + "value": "Purchase wyvernExchange failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1cdf96c41f1501fb82e87942f0faf4d72a6efd57209b4dccba0c17cf2c4017c6", + "typeString": "literal_string \"Purchase wyvernExchange failed\"" + } + ], + "id": 9343, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "12082:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9346, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "12082:50:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9347, + "nodeType": "ExpressionStatement", + "src": "12082:50:66" + } + ] + }, + "id": 9349, + "nodeType": "IfStatement", + "src": "11936:211:66", + "trueBody": { + "id": 9342, + "nodeType": "Block", + "src": "11951:107:66", + "statements": [ + { + "condition": { + "id": 9334, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "11973:8:66", + "subExpression": { + "id": 9333, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9321, + "src": "11974:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9341, + "nodeType": "IfStatement", + "src": "11969:75:66", + "trueBody": { + "id": 9340, + "nodeType": "Block", + "src": "11983:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9335, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12013:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9336, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12020:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9337, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12023:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9338, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "12012:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9259, + "id": 9339, + "nodeType": "Return", + "src": "12005:20:66" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 10078, + "nodeType": "IfStatement", + "src": "11388:7583:66", + "trueBody": { + "id": 9314, + "nodeType": "Block", + "src": "11441:324:66", + "statements": [ + { + "assignments": [ + 9285, + null + ], + "declarations": [ + { + "constant": false, + "id": 9285, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 9314, + "src": "11456:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9284, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11456:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 9295, + "initialValue": { + "arguments": [ + { + "id": 9293, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9261, + "src": "11522:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 9288, + "name": "seaPort_1_1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8659, + "src": "11482:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 9287, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "11474:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 9286, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11474:7:66", + "typeDescriptions": {} + } + }, + "id": 9289, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11474:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 9290, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "11474:25:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "nodeType": "FunctionCallOptions", + "options": [ + { + "id": 9291, + "name": "paymentAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9275, + "src": "11507:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "src": "11474:47:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 9294, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11474:59:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "11455:78:66" + }, + { + "condition": { + "id": 9296, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9251, + "src": "11551:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 9312, + "nodeType": "Block", + "src": "11675:80:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 9308, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9285, + "src": "11701:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f31206661696c6564", + "id": 9309, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11710:29:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_74739c97d81f6776122daced63f78d93149e498efd7fbf2084eabb7018fcdc3b", + "typeString": "literal_string \"Purchase SeaPort_1_1 failed\"" + }, + "value": "Purchase SeaPort_1_1 failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_74739c97d81f6776122daced63f78d93149e498efd7fbf2084eabb7018fcdc3b", + "typeString": "literal_string \"Purchase SeaPort_1_1 failed\"" + } + ], + "id": 9307, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "11693:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 9310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "11693:47:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 9311, + "nodeType": "ExpressionStatement", + "src": "11693:47:66" + } + ] + }, + "id": 9313, + "nodeType": "IfStatement", + "src": "11547:208:66", + "trueBody": { + "id": 9306, + "nodeType": "Block", + "src": "11562:107:66", + "statements": [ + { + "condition": { + "id": 9298, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "11584:8:66", + "subExpression": { + "id": 9297, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9285, + "src": "11585:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 9305, + "nodeType": "IfStatement", + "src": "11580:75:66", + "trueBody": { + "id": 9304, + "nodeType": "Block", + "src": "11594:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 9299, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11624:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 9300, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11631:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 9301, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "11634:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 9302, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "11623:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 9259, + "id": 9303, + "nodeType": "Return", + "src": "11616:20:66" + } + ] + } + } + ] + } + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 10080, + "name": "additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9264, + "src": "19045:19:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "expression": { + "id": 10081, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "19066:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10082, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8719, + "src": "19066:22:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10079, + "name": "transferAdditionalRoyaltiesETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10655, + "src": "19014:30:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$__$", + "typeString": "function (uint256[] memory,uint256)" + } + }, + "id": 10083, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19014:75:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10084, + "nodeType": "ExpressionStatement", + "src": "19014:75:66" + }, + { + "assignments": [ + 10086, + 10088 + ], + "declarations": [ + { + "constant": false, + "id": 10086, + "mutability": "mutable", + "name": "firstFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 10101, + "src": "19101:22:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10085, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19101:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10088, + "mutability": "mutable", + "name": "secondFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 10101, + "src": "19125:23:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10087, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19125:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10095, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 10090, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "19160:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10091, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8721, + "src": "19160:20:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 10092, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 9249, + "src": "19182:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10093, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8719, + "src": "19182:22:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10089, + "name": "getFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10493, + "src": "19152:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256,uint256)" + } + }, + "id": 10094, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19152:53:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "19100:105:66" + }, + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 10096, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "19223:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "id": 10097, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10086, + "src": "19229:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10098, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10088, + "src": "19245:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 10099, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "19222:39:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "functionReturnParameters": 9259, + "id": 10100, + "nodeType": "Return", + "src": "19215:46:66" + } + ] + }, + "documentation": { + "id": 9247, + "nodeType": "StructuredDocumentation", + "src": "10531:434:66", + "text": "@notice executes one purchase in ETH\n@param purchaseDetails - details about the purchase\n@param allowFail - true if errors are handled, false if revert on errors\n@return result false if execution failed, true if succeded\n@return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n@return secondFeeAmount amount of the second fee of the purchase, 0 if failed" + }, + "id": 10102, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "purchase", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 9252, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9249, + "mutability": "mutable", + "name": "purchaseDetails", + "nodeType": "VariableDeclaration", + "scope": 10102, + "src": "10988:38:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + }, + "typeName": { + "id": 9248, + "name": "PurchaseDetails", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8724, + "src": "10988:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9251, + "mutability": "mutable", + "name": "allowFail", + "nodeType": "VariableDeclaration", + "scope": 10102, + "src": "11028:14:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9250, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11028:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "10987:56:66" + }, + "returnParameters": { + "id": 9259, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 9254, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10102, + "src": "11091:4:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 9253, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "11091:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9256, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10102, + "src": "11109:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9255, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11109:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 9258, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10102, + "src": "11130:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 9257, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "11130:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "11077:70:66" + }, + "scope": 11101, + "src": "10970:8298:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10332, + "nodeType": "Block", + "src": "19900:2391:66", + "statements": [ + { + "assignments": [ + 10117, + 10120 + ], + "declarations": [ + { + "constant": false, + "id": 10117, + "mutability": "mutable", + "name": "marketData", + "nodeType": "VariableDeclaration", + "scope": 10332, + "src": "19911:23:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10116, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "19911:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10120, + "mutability": "mutable", + "name": "additionalRoyalties", + "nodeType": "VariableDeclaration", + "scope": 10332, + "src": "19936:36:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10118, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19936:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10119, + "nodeType": "ArrayTypeName", + "src": "19936:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 10129, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 10122, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10105, + "src": "20001:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10123, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "data", + "nodeType": "MemberAccess", + "referencedDeclaration": 8723, + "src": "20001:20:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "id": 10124, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10105, + "src": "20023:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10125, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8721, + "src": "20023:20:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 10126, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10105, + "src": "20045:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10127, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "20045:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + ], + "id": 10121, + "name": "getDataAndAdditionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10590, + "src": "19976:24:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_enum$_Markets_$8709_$returns$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes memory,uint256,enum RaribleExchangeWrapperUpgradeableV2.Markets) pure returns (bytes memory,uint256[] memory)" + } + }, + "id": 10128, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "19976:94:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bytes memory,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "19910:160:66" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10134, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10130, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10105, + "src": "20102:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10131, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "20102:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10132, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "20130:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10133, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_1", + "nodeType": "MemberAccess", + "src": "20130:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "20102:47:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10168, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10164, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10105, + "src": "20468:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10165, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "20468:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10166, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "20496:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10167, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "ExchangeV2", + "nodeType": "MemberAccess", + "src": "20496:18:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "20468:46:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10202, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10198, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10105, + "src": "20828:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10199, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "20828:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10200, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "20856:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10201, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_4", + "nodeType": "MemberAccess", + "src": "20856:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "20828:47:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10236, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10232, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10105, + "src": "21194:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10233, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "21194:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10234, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "21222:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10235, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_5", + "nodeType": "MemberAccess", + "src": "21222:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "21194:47:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10270, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10266, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10105, + "src": "21560:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10267, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "21560:24:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10268, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "21588:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10269, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_6", + "nodeType": "MemberAccess", + "src": "21588:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "21560:47:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 10304, + "nodeType": "Block", + "src": "21922:56:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "556e6b6e6f776e206d61726b657449642057455448", + "id": 10301, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21943:23:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6c57fe9713182a834bdd4831295dedf89e8ff161b7041e5a8170e9b0afd4c42f", + "typeString": "literal_string \"Unknown marketId WETH\"" + }, + "value": "Unknown marketId WETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_6c57fe9713182a834bdd4831295dedf89e8ff161b7041e5a8170e9b0afd4c42f", + "typeString": "literal_string \"Unknown marketId WETH\"" + } + ], + "id": 10300, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "21936:6:66", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 10302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21936:31:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10303, + "nodeType": "ExpressionStatement", + "src": "21936:31:66" + } + ] + }, + "id": 10305, + "nodeType": "IfStatement", + "src": "21556:422:66", + "trueBody": { + "id": 10299, + "nodeType": "Block", + "src": "21609:307:66", + "statements": [ + { + "assignments": [ + 10272, + null + ], + "declarations": [ + { + "constant": false, + "id": 10272, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 10299, + "src": "21624:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10271, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "21624:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 10280, + "initialValue": { + "arguments": [ + { + "id": 10278, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10117, + "src": "21668:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 10275, + "name": "seaPort_1_6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8675, + "src": "21650:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10274, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "21642:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10273, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21642:7:66", + "typeDescriptions": {} + } + }, + "id": 10276, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21642:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10277, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "21642:25:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 10279, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21642:37:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21623:56:66" + }, + { + "condition": { + "id": 10281, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10107, + "src": "21697:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 10297, + "nodeType": "Block", + "src": "21821:85:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10293, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10272, + "src": "21847:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f36206661696c65642057455448", + "id": 10294, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21856:34:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7d4fa3070cdac7b556bda72a8ba21317d4366b909fe8ae7528922ba67829f31c", + "typeString": "literal_string \"Purchase SeaPort_1_6 failed WETH\"" + }, + "value": "Purchase SeaPort_1_6 failed WETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7d4fa3070cdac7b556bda72a8ba21317d4366b909fe8ae7528922ba67829f31c", + "typeString": "literal_string \"Purchase SeaPort_1_6 failed WETH\"" + } + ], + "id": 10292, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "21839:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21839:52:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10296, + "nodeType": "ExpressionStatement", + "src": "21839:52:66" + } + ] + }, + "id": 10298, + "nodeType": "IfStatement", + "src": "21693:213:66", + "trueBody": { + "id": 10291, + "nodeType": "Block", + "src": "21708:107:66", + "statements": [ + { + "condition": { + "id": 10283, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "21730:8:66", + "subExpression": { + "id": 10282, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10272, + "src": "21731:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10290, + "nodeType": "IfStatement", + "src": "21726:75:66", + "trueBody": { + "id": 10289, + "nodeType": "Block", + "src": "21740:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 10284, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21770:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 10285, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21777:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 10286, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21780:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 10287, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "21769:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 10115, + "id": 10288, + "nodeType": "Return", + "src": "21762:20:66" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 10306, + "nodeType": "IfStatement", + "src": "21190:788:66", + "trueBody": { + "id": 10265, + "nodeType": "Block", + "src": "21243:307:66", + "statements": [ + { + "assignments": [ + 10238, + null + ], + "declarations": [ + { + "constant": false, + "id": 10238, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 10265, + "src": "21258:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10237, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "21258:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 10246, + "initialValue": { + "arguments": [ + { + "id": 10244, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10117, + "src": "21302:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 10241, + "name": "seaPort_1_5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8673, + "src": "21284:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10240, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "21276:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10239, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "21276:7:66", + "typeDescriptions": {} + } + }, + "id": 10242, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21276:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10243, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "21276:25:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 10245, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21276:37:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "21257:56:66" + }, + { + "condition": { + "id": 10247, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10107, + "src": "21331:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 10263, + "nodeType": "Block", + "src": "21455:85:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10259, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10238, + "src": "21481:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f35206661696c65642057455448", + "id": 10260, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21490:34:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1461016c88004ca93c55e893467e5e7d0c1ff55121e923be5ca0e173134693e9", + "typeString": "literal_string \"Purchase SeaPort_1_5 failed WETH\"" + }, + "value": "Purchase SeaPort_1_5 failed WETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1461016c88004ca93c55e893467e5e7d0c1ff55121e923be5ca0e173134693e9", + "typeString": "literal_string \"Purchase SeaPort_1_5 failed WETH\"" + } + ], + "id": 10258, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "21473:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10261, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21473:52:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10262, + "nodeType": "ExpressionStatement", + "src": "21473:52:66" + } + ] + }, + "id": 10264, + "nodeType": "IfStatement", + "src": "21327:213:66", + "trueBody": { + "id": 10257, + "nodeType": "Block", + "src": "21342:107:66", + "statements": [ + { + "condition": { + "id": 10249, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "21364:8:66", + "subExpression": { + "id": 10248, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10238, + "src": "21365:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10256, + "nodeType": "IfStatement", + "src": "21360:75:66", + "trueBody": { + "id": 10255, + "nodeType": "Block", + "src": "21374:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 10250, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21404:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 10251, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21411:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 10252, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21414:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 10253, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "21403:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 10115, + "id": 10254, + "nodeType": "Return", + "src": "21396:20:66" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 10307, + "nodeType": "IfStatement", + "src": "20824:1154:66", + "trueBody": { + "id": 10231, + "nodeType": "Block", + "src": "20877:307:66", + "statements": [ + { + "assignments": [ + 10204, + null + ], + "declarations": [ + { + "constant": false, + "id": 10204, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 10231, + "src": "20892:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10203, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "20892:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 10212, + "initialValue": { + "arguments": [ + { + "id": 10210, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10117, + "src": "20936:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 10207, + "name": "seaPort_1_4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8667, + "src": "20918:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10206, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "20910:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10205, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20910:7:66", + "typeDescriptions": {} + } + }, + "id": 10208, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20910:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10209, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "20910:25:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 10211, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20910:37:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20891:56:66" + }, + { + "condition": { + "id": 10213, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10107, + "src": "20965:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 10229, + "nodeType": "Block", + "src": "21089:85:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10225, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10204, + "src": "21115:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f34206661696c65642057455448", + "id": 10226, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21124:34:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_05a847584de3c2ae6c800d1f7b0a5d67e8bceaac16366dec690fd8433d46a23a", + "typeString": "literal_string \"Purchase SeaPort_1_4 failed WETH\"" + }, + "value": "Purchase SeaPort_1_4 failed WETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_05a847584de3c2ae6c800d1f7b0a5d67e8bceaac16366dec690fd8433d46a23a", + "typeString": "literal_string \"Purchase SeaPort_1_4 failed WETH\"" + } + ], + "id": 10224, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "21107:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10227, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "21107:52:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10228, + "nodeType": "ExpressionStatement", + "src": "21107:52:66" + } + ] + }, + "id": 10230, + "nodeType": "IfStatement", + "src": "20961:213:66", + "trueBody": { + "id": 10223, + "nodeType": "Block", + "src": "20976:107:66", + "statements": [ + { + "condition": { + "id": 10215, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "20998:8:66", + "subExpression": { + "id": 10214, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10204, + "src": "20999:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10222, + "nodeType": "IfStatement", + "src": "20994:75:66", + "trueBody": { + "id": 10221, + "nodeType": "Block", + "src": "21008:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 10216, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21038:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 10217, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21045:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 10218, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "21048:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 10219, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "21037:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 10115, + "id": 10220, + "nodeType": "Return", + "src": "21030:20:66" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 10308, + "nodeType": "IfStatement", + "src": "20464:1514:66", + "trueBody": { + "id": 10197, + "nodeType": "Block", + "src": "20516:302:66", + "statements": [ + { + "assignments": [ + 10170, + null + ], + "declarations": [ + { + "constant": false, + "id": 10170, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 10197, + "src": "20531:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10169, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "20531:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 10178, + "initialValue": { + "arguments": [ + { + "id": 10176, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10117, + "src": "20574:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 10173, + "name": "exchangeV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8657, + "src": "20557:10:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10172, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "20549:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10171, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20549:7:66", + "typeDescriptions": {} + } + }, + "id": 10174, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20549:19:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10175, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "20549:24:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 10177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20549:36:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20530:55:66" + }, + { + "condition": { + "id": 10179, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10107, + "src": "20603:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 10195, + "nodeType": "Block", + "src": "20727:81:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10191, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10170, + "src": "20753:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "50757263686173652072617269626c65206661696c65642057455448", + "id": 10192, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20762:30:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_2ec0a2b485cd497572ad8de2f4110630fd04a79c3fc75a9aaa133bc5c098fd7e", + "typeString": "literal_string \"Purchase rarible failed WETH\"" + }, + "value": "Purchase rarible failed WETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2ec0a2b485cd497572ad8de2f4110630fd04a79c3fc75a9aaa133bc5c098fd7e", + "typeString": "literal_string \"Purchase rarible failed WETH\"" + } + ], + "id": 10190, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "20745:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10193, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20745:48:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10194, + "nodeType": "ExpressionStatement", + "src": "20745:48:66" + } + ] + }, + "id": 10196, + "nodeType": "IfStatement", + "src": "20599:209:66", + "trueBody": { + "id": 10189, + "nodeType": "Block", + "src": "20614:107:66", + "statements": [ + { + "condition": { + "id": 10181, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "20636:8:66", + "subExpression": { + "id": 10180, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10170, + "src": "20637:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10188, + "nodeType": "IfStatement", + "src": "20632:75:66", + "trueBody": { + "id": 10187, + "nodeType": "Block", + "src": "20646:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 10182, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20676:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 10183, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20683:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 10184, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20686:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 10185, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20675:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 10115, + "id": 10186, + "nodeType": "Return", + "src": "20668:20:66" + } + ] + } + } + ] + } + } + ] + } + }, + "id": 10309, + "nodeType": "IfStatement", + "src": "20098:1880:66", + "trueBody": { + "id": 10163, + "nodeType": "Block", + "src": "20151:307:66", + "statements": [ + { + "assignments": [ + 10136, + null + ], + "declarations": [ + { + "constant": false, + "id": 10136, + "mutability": "mutable", + "name": "success", + "nodeType": "VariableDeclaration", + "scope": 10163, + "src": "20166:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10135, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "20166:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + null + ], + "id": 10144, + "initialValue": { + "arguments": [ + { + "id": 10142, + "name": "marketData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10117, + "src": "20210:10:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "id": 10139, + "name": "seaPort_1_1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8659, + "src": "20192:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10138, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "20184:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10137, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "20184:7:66", + "typeDescriptions": {} + } + }, + "id": 10140, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20184:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10141, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "call", + "nodeType": "MemberAccess", + "src": "20184:25:66", + "typeDescriptions": { + "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) payable returns (bool,bytes memory)" + } + }, + "id": 10143, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20184:37:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "20165:56:66" + }, + { + "condition": { + "id": 10145, + "name": "allowFail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10107, + "src": "20239:9:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 10161, + "nodeType": "Block", + "src": "20363:85:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10157, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10136, + "src": "20389:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "507572636861736520536561506f72745f315f31206661696c65642057455448", + "id": 10158, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20398:34:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_9d7bf9b147b8e8ea1a011a4553d7d866e6536c248028d8dc1aeaa1b40c8d32c7", + "typeString": "literal_string \"Purchase SeaPort_1_1 failed WETH\"" + }, + "value": "Purchase SeaPort_1_1 failed WETH" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9d7bf9b147b8e8ea1a011a4553d7d866e6536c248028d8dc1aeaa1b40c8d32c7", + "typeString": "literal_string \"Purchase SeaPort_1_1 failed WETH\"" + } + ], + "id": 10156, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "20381:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10159, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "20381:52:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10160, + "nodeType": "ExpressionStatement", + "src": "20381:52:66" + } + ] + }, + "id": 10162, + "nodeType": "IfStatement", + "src": "20235:213:66", + "trueBody": { + "id": 10155, + "nodeType": "Block", + "src": "20250:107:66", + "statements": [ + { + "condition": { + "id": 10147, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "20272:8:66", + "subExpression": { + "id": 10146, + "name": "success", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10136, + "src": "20273:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10154, + "nodeType": "IfStatement", + "src": "20268:75:66", + "trueBody": { + "id": 10153, + "nodeType": "Block", + "src": "20282:61:66", + "statements": [ + { + "expression": { + "components": [ + { + "hexValue": "66616c7365", + "id": 10148, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20312:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "30", + "id": 10149, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20319:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "hexValue": "30", + "id": 10150, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "20322:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "id": 10151, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "20311:13:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_rational_0_by_1_$_t_rational_0_by_1_$", + "typeString": "tuple(bool,int_const 0,int_const 0)" + } + }, + "functionReturnParameters": 10115, + "id": 10152, + "nodeType": "Return", + "src": "20304:20:66" + } + ] + } + } + ] + } + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "id": 10311, + "name": "additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10120, + "src": "22049:19:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + { + "expression": { + "id": 10312, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10105, + "src": "22070:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10313, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8719, + "src": "22070:22:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10310, + "name": "transferAdditionalRoyaltiesWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10720, + "src": "22017:31:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$__$", + "typeString": "function (uint256[] memory,uint256)" + } + }, + "id": 10314, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22017:76:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10315, + "nodeType": "ExpressionStatement", + "src": "22017:76:66" + }, + { + "assignments": [ + 10317, + 10319 + ], + "declarations": [ + { + "constant": false, + "id": 10317, + "mutability": "mutable", + "name": "firstFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 10332, + "src": "22124:22:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10316, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22124:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10319, + "mutability": "mutable", + "name": "secondFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 10332, + "src": "22148:23:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10318, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22148:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10326, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 10321, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10105, + "src": "22183:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10322, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8721, + "src": "22183:20:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 10323, + "name": "purchaseDetails", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10105, + "src": "22205:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10324, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8719, + "src": "22205:22:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10320, + "name": "getFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10493, + "src": "22175:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256,uint256)" + } + }, + "id": 10325, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22175:53:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "22123:105:66" + }, + { + "expression": { + "components": [ + { + "hexValue": "74727565", + "id": 10327, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22246:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "id": 10328, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10317, + "src": "22252:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10329, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10319, + "src": "22268:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 10330, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "22245:39:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_uint256_$_t_uint256_$", + "typeString": "tuple(bool,uint256,uint256)" + } + }, + "functionReturnParameters": 10115, + "id": 10331, + "nodeType": "Return", + "src": "22238:46:66" + } + ] + }, + "documentation": { + "id": 10103, + "nodeType": "StructuredDocumentation", + "src": "19274:435:66", + "text": "@notice executes one purchase in WETH\n@param purchaseDetails - details about the purchase\n@param allowFail - true if errors are handled, false if revert on errors\n@return result false if execution failed, true if succeded\n@return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n@return secondFeeAmount amount of the second fee of the purchase, 0 if failed" + }, + "id": 10333, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "purchaseWETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10108, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10105, + "mutability": "mutable", + "name": "purchaseDetails", + "nodeType": "VariableDeclaration", + "scope": 10333, + "src": "19736:38:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + }, + "typeName": { + "id": 10104, + "name": "PurchaseDetails", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8724, + "src": "19736:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10107, + "mutability": "mutable", + "name": "allowFail", + "nodeType": "VariableDeclaration", + "scope": 10333, + "src": "19776:14:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10106, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "19776:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "19735:56:66" + }, + "returnParameters": { + "id": 10115, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10110, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10333, + "src": "19839:4:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10109, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "19839:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10112, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10333, + "src": "19857:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10111, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19857:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10114, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10333, + "src": "19878:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10113, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "19878:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "19825:70:66" + }, + "scope": 11101, + "src": "19714:2577:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10360, + "nodeType": "Block", + "src": "22543:138:66", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 10350, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10343, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10341, + "name": "feeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10336, + "src": "22557:9:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 10342, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22569:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "22557:13:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10349, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10344, + "name": "feeRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10338, + "src": "22574:12:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 10347, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22598:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 10346, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "22590:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10345, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22590:7:66", + "typeDescriptions": {} + } + }, + "id": 10348, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22590:10:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "22574:26:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "22557:43:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10359, + "nodeType": "IfStatement", + "src": "22553:122:66", + "trueBody": { + "id": 10358, + "nodeType": "Block", + "src": "22602:73:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10354, + "name": "feeRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10338, + "src": "22640:12:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10355, + "name": "feeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10336, + "src": "22654:9:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10351, + "name": "LibTransfer", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8468, + "src": "22616:11:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_LibTransfer_$8468_$", + "typeString": "type(library LibTransfer)" + } + }, + "id": 10353, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferEth", + "nodeType": "MemberAccess", + "referencedDeclaration": 8467, + "src": "22616:23:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 10356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22616:48:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10357, + "nodeType": "ExpressionStatement", + "src": "22616:48:66" + } + ] + } + } + ] + }, + "documentation": { + "id": 10334, + "nodeType": "StructuredDocumentation", + "src": "22297:167:66", + "text": "@notice transfers ETH fee to feeRecipient\n@param feeAmount - amount to be transfered\n@param feeRecipient - address of the recipient" + }, + "id": 10361, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferFeeETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10339, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10336, + "mutability": "mutable", + "name": "feeAmount", + "nodeType": "VariableDeclaration", + "scope": 10361, + "src": "22493:17:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10335, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22493:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10338, + "mutability": "mutable", + "name": "feeRecipient", + "nodeType": "VariableDeclaration", + "scope": 10361, + "src": "22512:20:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10337, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22512:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "22492:41:66" + }, + "returnParameters": { + "id": 10340, + "nodeType": "ParameterList", + "parameters": [], + "src": "22543:0:66" + }, + "scope": 11101, + "src": "22469:212:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10389, + "nodeType": "Block", + "src": "22935:147:66", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 10378, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10371, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10369, + "name": "feeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10364, + "src": "22949:9:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 10370, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22961:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "22949:13:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10377, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10372, + "name": "feeRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10366, + "src": "22966:12:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 10375, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "22990:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 10374, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "22982:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10373, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22982:7:66", + "typeDescriptions": {} + } + }, + "id": 10376, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "22982:10:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "22966:26:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "22949:43:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10388, + "nodeType": "IfStatement", + "src": "22945:131:66", + "trueBody": { + "id": 10387, + "nodeType": "Block", + "src": "22994:82:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10383, + "name": "feeRecipient", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10366, + "src": "23041:12:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10384, + "name": "feeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10364, + "src": "23055:9:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 10380, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8679, + "src": "23026:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10379, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "23008:17:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 10381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23008:23:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 10382, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 1122, + "src": "23008:32:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 10385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23008:57:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10386, + "nodeType": "ExpressionStatement", + "src": "23008:57:66" + } + ] + } + } + ] + }, + "documentation": { + "id": 10362, + "nodeType": "StructuredDocumentation", + "src": "22687:168:66", + "text": "@notice transfers WETH fee to feeRecipient\n@param feeAmount - amount to be transfered\n@param feeRecipient - address of the recipient" + }, + "id": 10390, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferFeeWETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10367, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10364, + "mutability": "mutable", + "name": "feeAmount", + "nodeType": "VariableDeclaration", + "scope": 10390, + "src": "22885:17:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10363, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "22885:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10366, + "mutability": "mutable", + "name": "feeRecipient", + "nodeType": "VariableDeclaration", + "scope": 10390, + "src": "22904:20:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10365, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "22904:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "22884:41:66" + }, + "returnParameters": { + "id": 10368, + "nodeType": "ParameterList", + "parameters": [], + "src": "22935:0:66" + }, + "scope": 11101, + "src": "22860:222:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10416, + "nodeType": "Block", + "src": "23187:153:66", + "statements": [ + { + "assignments": [ + 10395 + ], + "declarations": [ + { + "constant": false, + "id": 10395, + "mutability": "mutable", + "name": "ethAmount", + "nodeType": "VariableDeclaration", + "scope": 10416, + "src": "23197:17:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10394, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23197:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10401, + "initialValue": { + "expression": { + "arguments": [ + { + "id": 10398, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "23225:4:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "id": 10397, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "23217:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10396, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "23217:7:66", + "typeDescriptions": {} + } + }, + "id": 10399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23217:13:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "id": 10400, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balance", + "nodeType": "MemberAccess", + "src": "23217:21:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23197:41:66" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10404, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10402, + "name": "ethAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10395, + "src": "23252:9:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 10403, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "23264:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "23252:13:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10415, + "nodeType": "IfStatement", + "src": "23248:86:66", + "trueBody": { + "id": 10414, + "nodeType": "Block", + "src": "23267:67:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 10411, + "name": "ethAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10395, + "src": "23313:9:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "expression": { + "id": 10407, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "23289:3:66", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 10408, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "23289:10:66", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 10406, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "23281:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10405, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "23281:7:66", + "typeDescriptions": {} + } + }, + "id": 10409, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23281:19:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10410, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transferEth", + "nodeType": "MemberAccess", + "referencedDeclaration": 8467, + "src": "23281:31:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$bound_to$_t_address_$", + "typeString": "function (address,uint256)" + } + }, + "id": 10412, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23281:42:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10413, + "nodeType": "ExpressionStatement", + "src": "23281:42:66" + } + ] + } + } + ] + }, + "documentation": { + "id": 10391, + "nodeType": "StructuredDocumentation", + "src": "23088:59:66", + "text": "@notice transfers change back to sender" + }, + "id": 10417, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferChange", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10392, + "nodeType": "ParameterList", + "parameters": [], + "src": "23175:2:66" + }, + "returnParameters": { + "id": 10393, + "nodeType": "ParameterList", + "parameters": [], + "src": "23187:0:66" + }, + "scope": 11101, + "src": "23152:188:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10447, + "nodeType": "Block", + "src": "23454:198:66", + "statements": [ + { + "assignments": [ + 10422 + ], + "declarations": [ + { + "constant": false, + "id": 10422, + "mutability": "mutable", + "name": "wethAmount", + "nodeType": "VariableDeclaration", + "scope": 10447, + "src": "23464:18:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10421, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "23464:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10432, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 10429, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "23527:4:66", + "typeDescriptions": { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "id": 10428, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "23519:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10427, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "23519:7:66", + "typeDescriptions": {} + } + }, + "id": 10430, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23519:13:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "expression": { + "arguments": [ + { + "id": 10424, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8679, + "src": "23503:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10423, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "23485:17:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 10425, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23485:23:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 10426, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "balanceOf", + "nodeType": "MemberAccess", + "referencedDeclaration": 1112, + "src": "23485:33:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$", + "typeString": "function (address) view external returns (uint256)" + } + }, + "id": 10431, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23485:48:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "23464:69:66" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10435, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10433, + "name": "wethAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10422, + "src": "23547:10:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 10434, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "23560:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "23547:14:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10446, + "nodeType": "IfStatement", + "src": "23543:103:66", + "trueBody": { + "id": 10445, + "nodeType": "Block", + "src": "23563:83:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 10440, + "name": "_msgSender", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1629, + "src": "23610:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$", + "typeString": "function () view returns (address payable)" + } + }, + "id": 10441, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23610:12:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + { + "id": 10442, + "name": "wethAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10422, + "src": "23624:10:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 10437, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8679, + "src": "23595:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10436, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "23577:17:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 10438, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23577:23:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 10439, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "transfer", + "nodeType": "MemberAccess", + "referencedDeclaration": 1122, + "src": "23577:32:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 10443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "23577:58:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10444, + "nodeType": "ExpressionStatement", + "src": "23577:58:66" + } + ] + } + } + ] + }, + "documentation": { + "id": 10418, + "nodeType": "StructuredDocumentation", + "src": "23346:64:66", + "text": "@notice transfers weth change back to sender" + }, + "id": 10448, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferChangeWETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10419, + "nodeType": "ParameterList", + "parameters": [], + "src": "23442:2:66" + }, + "returnParameters": { + "id": 10420, + "nodeType": "ParameterList", + "parameters": [], + "src": "23454:0:66" + }, + "scope": 11101, + "src": "23415:237:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10492, + "nodeType": "Block", + "src": "24144:174:66", + "statements": [ + { + "assignments": [ + 10461 + ], + "declarations": [ + { + "constant": false, + "id": 10461, + "mutability": "mutable", + "name": "firstFee", + "nodeType": "VariableDeclaration", + "scope": 10492, + "src": "24154:16:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10460, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24154:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10471, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10468, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10466, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10451, + "src": "24188:4:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "3136", + "id": 10467, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "24196:2:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_16_by_1", + "typeString": "int_const 16" + }, + "value": "16" + }, + "src": "24188:10:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10465, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "24181:6:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint16_$", + "typeString": "type(uint16)" + }, + "typeName": { + "id": 10464, + "name": "uint16", + "nodeType": "ElementaryTypeName", + "src": "24181:6:66", + "typeDescriptions": {} + } + }, + "id": 10469, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24181:18:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "id": 10463, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "24173:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 10462, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24173:7:66", + "typeDescriptions": {} + } + }, + "id": 10470, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24173:27:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "24154:46:66" + }, + { + "assignments": [ + 10473 + ], + "declarations": [ + { + "constant": false, + "id": 10473, + "mutability": "mutable", + "name": "secondFee", + "nodeType": "VariableDeclaration", + "scope": 10492, + "src": "24210:17:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10472, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24210:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10481, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 10478, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10451, + "src": "24245:4:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10477, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "24238:6:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint16_$", + "typeString": "type(uint16)" + }, + "typeName": { + "id": 10476, + "name": "uint16", + "nodeType": "ElementaryTypeName", + "src": "24238:6:66", + "typeDescriptions": {} + } + }, + "id": 10479, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24238:12:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "id": 10475, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "24230:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 10474, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24230:7:66", + "typeDescriptions": {} + } + }, + "id": 10480, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24230:21:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "24210:41:66" + }, + { + "expression": { + "components": [ + { + "arguments": [ + { + "id": 10484, + "name": "firstFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10461, + "src": "24279:8:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10482, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10453, + "src": "24269:6:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10483, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bp", + "nodeType": "MemberAccess", + "referencedDeclaration": 5593, + "src": "24269:9:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10485, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24269:19:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 10488, + "name": "secondFee", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10473, + "src": "24300:9:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10486, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10453, + "src": "24290:6:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10487, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bp", + "nodeType": "MemberAccess", + "referencedDeclaration": 5593, + "src": "24290:9:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10489, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24290:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 10490, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "24268:43:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "functionReturnParameters": 10459, + "id": 10491, + "nodeType": "Return", + "src": "24261:50:66" + } + ] + }, + "documentation": { + "id": 10449, + "nodeType": "StructuredDocumentation", + "src": "23658:393:66", + "text": "@notice parses fees in base points from one uint and calculates real amount of fees\n@param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n@param amount price of the order\n@return firstFeeAmount real amount for the first fee\n@return secondFeeAmount real amount for the second fee" + }, + "id": 10493, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getFees", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10454, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10451, + "mutability": "mutable", + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 10493, + "src": "24073:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10450, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24073:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10453, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 10493, + "src": "24087:14:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10452, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24087:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "24072:30:66" + }, + "returnParameters": { + "id": 10459, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10456, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10493, + "src": "24126:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10455, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24126:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10458, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10493, + "src": "24135:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10457, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24135:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "24125:18:66" + }, + "scope": 11101, + "src": "24056:262:66", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10510, + "nodeType": "Block", + "src": "24571:54:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10506, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10504, + "name": "fees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10496, + "src": "24606:4:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "3438", + "id": 10505, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "24614:2:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_48_by_1", + "typeString": "int_const 48" + }, + "value": "48" + }, + "src": "24606:10:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10503, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "24599:6:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint16_$", + "typeString": "type(uint16)" + }, + "typeName": { + "id": 10502, + "name": "uint16", + "nodeType": "ElementaryTypeName", + "src": "24599:6:66", + "typeDescriptions": {} + } + }, + "id": 10507, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24599:18:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "id": 10501, + "name": "Currencies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8715, + "src": "24588:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Currencies_$8715_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Currencies)" + } + }, + "id": 10508, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "24588:30:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "functionReturnParameters": 10500, + "id": 10509, + "nodeType": "Return", + "src": "24581:37:66" + } + ] + }, + "documentation": { + "id": 10494, + "nodeType": "StructuredDocumentation", + "src": "24324:172:66", + "text": "@notice parses \"fees\" field to find the currency for the purchase\n@param fees field with encoded data\n@return 0 if ETH, 1 if WETH ERC-20" + }, + "id": 10511, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getCurrency", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10497, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10496, + "mutability": "mutable", + "name": "fees", + "nodeType": "VariableDeclaration", + "scope": 10511, + "src": "24522:12:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10495, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24522:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "24521:14:66" + }, + "returnParameters": { + "id": 10500, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10499, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10511, + "src": "24559:10:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "typeName": { + "id": 10498, + "name": "Currencies", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8715, + "src": "24559:10:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "visibility": "internal" + } + ], + "src": "24558:12:66" + }, + "scope": 11101, + "src": "24501:124:66", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10589, + "nodeType": "Block", + "src": "25083:836:66", + "statements": [ + { + "assignments": [ + 10527 + ], + "declarations": [ + { + "constant": false, + "id": 10527, + "mutability": "mutable", + "name": "dataType", + "nodeType": "VariableDeclaration", + "scope": 10589, + "src": "25093:28:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8712", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + }, + "typeName": { + "id": 10526, + "name": "AdditionalDataTypes", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8712, + "src": "25093:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8712", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + } + }, + "visibility": "internal" + } + ], + "id": 10536, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10533, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10531, + "name": "feesAndDataType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10516, + "src": "25151:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "3332", + "id": 10532, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "25170:2:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_32_by_1", + "typeString": "int_const 32" + }, + "value": "32" + }, + "src": "25151:21:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10530, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "25144:6:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint16_$", + "typeString": "type(uint16)" + }, + "typeName": { + "id": 10529, + "name": "uint16", + "nodeType": "ElementaryTypeName", + "src": "25144:6:66", + "typeDescriptions": {} + } + }, + "id": 10534, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25144:29:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "id": 10528, + "name": "AdditionalDataTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8712, + "src": "25124:19:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_AdditionalDataTypes_$8712_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes)" + } + }, + "id": 10535, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25124:50:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8712", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "25093:81:66" + }, + { + "assignments": [ + 10541 + ], + "declarations": [ + { + "constant": false, + "id": 10541, + "mutability": "mutable", + "name": "additionalRoyalties", + "nodeType": "VariableDeclaration", + "scope": 10589, + "src": "25184:36:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10539, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25184:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10540, + "nodeType": "ArrayTypeName", + "src": "25184:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 10542, + "nodeType": "VariableDeclarationStatement", + "src": "25184:36:66" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8712", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + }, + "id": 10546, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10543, + "name": "dataType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10527, + "src": "25284:8:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8712", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10544, + "name": "AdditionalDataTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8712, + "src": "25296:19:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_AdditionalDataTypes_$8712_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes)" + } + }, + "id": 10545, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "NoAdditionalData", + "nodeType": "MemberAccess", + "src": "25296:36:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8712", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + } + }, + "src": "25284:48:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10552, + "nodeType": "IfStatement", + "src": "25280:114:66", + "trueBody": { + "id": 10551, + "nodeType": "Block", + "src": "25334:60:66", + "statements": [ + { + "expression": { + "components": [ + { + "id": 10547, + "name": "_data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10514, + "src": "25356:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 10548, + "name": "additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10541, + "src": "25363:19:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 10549, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "25355:28:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bytes memory,uint256[] memory)" + } + }, + "functionReturnParameters": 10525, + "id": 10550, + "nodeType": "Return", + "src": "25348:35:66" + } + ] + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8712", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + }, + "id": 10556, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10553, + "name": "dataType", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10527, + "src": "25408:8:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8712", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10554, + "name": "AdditionalDataTypes", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8712, + "src": "25420:19:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_AdditionalDataTypes_$8712_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes)" + } + }, + "id": 10555, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "RoyaltiesAdditionalData", + "nodeType": "MemberAccess", + "src": "25420:43:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8712", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + } + }, + "src": "25408:55:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10584, + "nodeType": "IfStatement", + "src": "25404:462:66", + "trueBody": { + "id": 10583, + "nodeType": "Block", + "src": "25465:401:66", + "statements": [ + { + "assignments": [ + 10558 + ], + "declarations": [ + { + "constant": false, + "id": 10558, + "mutability": "mutable", + "name": "additionalData", + "nodeType": "VariableDeclaration", + "scope": 10583, + "src": "25479:36:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AdditionalData_$8730_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.AdditionalData" + }, + "typeName": { + "id": 10557, + "name": "AdditionalData", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8730, + "src": "25479:14:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AdditionalData_$8730_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.AdditionalData" + } + }, + "visibility": "internal" + } + ], + "id": 10565, + "initialValue": { + "arguments": [ + { + "id": 10561, + "name": "_data", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10514, + "src": "25529:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 10562, + "name": "AdditionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8730, + "src": "25537:14:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_AdditionalData_$8730_storage_ptr_$", + "typeString": "type(struct RaribleExchangeWrapperUpgradeableV2.AdditionalData storage pointer)" + } + } + ], + "id": 10563, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "25536:16:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_struct$_AdditionalData_$8730_storage_ptr_$", + "typeString": "type(struct RaribleExchangeWrapperUpgradeableV2.AdditionalData storage pointer)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_struct$_AdditionalData_$8730_storage_ptr_$", + "typeString": "type(struct RaribleExchangeWrapperUpgradeableV2.AdditionalData storage pointer)" + } + ], + "expression": { + "id": 10559, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "25518:3:66", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 10560, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "25518:10:66", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 10564, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25518:35:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_AdditionalData_$8730_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.AdditionalData memory" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "25479:74:66" + }, + { + "condition": { + "arguments": [ + { + "id": 10567, + "name": "marketId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10518, + "src": "25660:8:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + ], + "id": 10566, + "name": "supportsRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10803, + "src": "25642:17:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_enum$_Markets_$8709_$returns$_t_bool_$", + "typeString": "function (enum RaribleExchangeWrapperUpgradeableV2.Markets) pure returns (bool)" + } + }, + "id": 10568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25642:27:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 10581, + "nodeType": "Block", + "src": "25774:82:66", + "statements": [ + { + "expression": { + "components": [ + { + "expression": { + "id": 10576, + "name": "additionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10558, + "src": "25800:14:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AdditionalData_$8730_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.AdditionalData memory" + } + }, + "id": 10577, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "data", + "nodeType": "MemberAccess", + "referencedDeclaration": 8726, + "src": "25800:19:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 10578, + "name": "additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10541, + "src": "25821:19:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 10579, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "25799:42:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bytes memory,uint256[] memory)" + } + }, + "functionReturnParameters": 10525, + "id": 10580, + "nodeType": "Return", + "src": "25792:49:66" + } + ] + }, + "id": 10582, + "nodeType": "IfStatement", + "src": "25638:218:66", + "trueBody": { + "id": 10575, + "nodeType": "Block", + "src": "25671:97:66", + "statements": [ + { + "expression": { + "components": [ + { + "expression": { + "id": 10569, + "name": "additionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10558, + "src": "25697:14:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AdditionalData_$8730_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.AdditionalData memory" + } + }, + "id": 10570, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "data", + "nodeType": "MemberAccess", + "referencedDeclaration": 8726, + "src": "25697:19:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "id": 10571, + "name": "additionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10558, + "src": "25718:14:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_AdditionalData_$8730_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.AdditionalData memory" + } + }, + "id": 10572, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "additionalRoyalties", + "nodeType": "MemberAccess", + "referencedDeclaration": 8729, + "src": "25718:34:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + } + ], + "id": 10573, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "25696:57:66", + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bytes memory,uint256[] memory)" + } + }, + "functionReturnParameters": 10525, + "id": 10574, + "nodeType": "Return", + "src": "25689:64:66" + } + ] + } + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "hexValue": "756e6b6e6f776e206164646974696f6e616c4461746154797065", + "id": 10586, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "25883:28:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e89eb59adf40d46cfd63ce8f1b9b12cb445413877fb23a6846b8ace3266a633d", + "typeString": "literal_string \"unknown additionalDataType\"" + }, + "value": "unknown additionalDataType" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_e89eb59adf40d46cfd63ce8f1b9b12cb445413877fb23a6846b8ace3266a633d", + "typeString": "literal_string \"unknown additionalDataType\"" + } + ], + "id": 10585, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "25876:6:66", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 10587, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "25876:36:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10588, + "nodeType": "ExpressionStatement", + "src": "25876:36:66" + } + ] + }, + "documentation": { + "id": 10512, + "nodeType": "StructuredDocumentation", + "src": "24631:265:66", + "text": "@notice parses _data to data for market call and additionalData\n@param feesAndDataType 27 and 28 bytes for dataType\n@return marketData data for market call\n@return additionalRoyalties array uint256, (base point + address)" + }, + "id": 10590, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getDataAndAdditionalData", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10519, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10514, + "mutability": "mutable", + "name": "_data", + "nodeType": "VariableDeclaration", + "scope": 10590, + "src": "24944:18:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10513, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "24944:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10516, + "mutability": "mutable", + "name": "feesAndDataType", + "nodeType": "VariableDeclaration", + "scope": 10590, + "src": "24972:23:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10515, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "24972:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10518, + "mutability": "mutable", + "name": "marketId", + "nodeType": "VariableDeclaration", + "scope": 10590, + "src": "25005:16:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "typeName": { + "id": 10517, + "name": "Markets", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8709, + "src": "25005:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "visibility": "internal" + } + ], + "src": "24934:93:66" + }, + "returnParameters": { + "id": 10525, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10521, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10590, + "src": "25051:12:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10520, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "25051:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10524, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10590, + "src": "25065:16:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10522, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "25065:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10523, + "nodeType": "ArrayTypeName", + "src": "25065:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "src": "25050:32:66" + }, + "scope": 11101, + "src": "24901:1018:66", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10654, + "nodeType": "Block", + "src": "26189:410:66", + "statements": [ + { + "body": { + "id": 10652, + "nodeType": "Block", + "src": "26257:336:66", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10614, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 10610, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10594, + "src": "26275:20:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10612, + "indexExpression": { + "id": 10611, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10600, + "src": "26296:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "26275:23:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 10613, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26301:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "26275:27:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10651, + "nodeType": "IfStatement", + "src": "26271:312:66", + "trueBody": { + "id": 10650, + "nodeType": "Block", + "src": "26304:279:66", + "statements": [ + { + "assignments": [ + 10616 + ], + "declarations": [ + { + "constant": false, + "id": 10616, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 10650, + "src": "26322:23:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 10615, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "26322:15:66", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + } + ], + "id": 10626, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "baseExpression": { + "id": 10621, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10594, + "src": "26364:20:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10623, + "indexExpression": { + "id": 10622, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10600, + "src": "26385:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "26364:23:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10620, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "26356:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10619, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "26356:7:66", + "typeDescriptions": {} + } + }, + "id": 10624, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26356:32:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 10618, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "26348:8:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_payable_$", + "typeString": "type(address payable)" + }, + "typeName": { + "id": 10617, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "26348:8:66", + "stateMutability": "payable", + "typeDescriptions": {} + } + }, + "id": 10625, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26348:41:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "26322:67:66" + }, + { + "assignments": [ + 10628 + ], + "declarations": [ + { + "constant": false, + "id": 10628, + "mutability": "mutable", + "name": "basePoint", + "nodeType": "VariableDeclaration", + "scope": 10650, + "src": "26407:17:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10627, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26407:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10637, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10635, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 10631, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10594, + "src": "26435:20:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10633, + "indexExpression": { + "id": 10632, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10600, + "src": "26456:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "26435:23:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "313630", + "id": 10634, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26462:3:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_160_by_1", + "typeString": "int_const 160" + }, + "value": "160" + }, + "src": "26435:30:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10630, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "26427:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 10629, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26427:7:66", + "typeDescriptions": {} + } + }, + "id": 10636, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26427:39:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "26407:59:66" + }, + { + "assignments": [ + 10639 + ], + "declarations": [ + { + "constant": false, + "id": 10639, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 10650, + "src": "26484:13:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10638, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26484:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10644, + "initialValue": { + "arguments": [ + { + "id": 10642, + "name": "basePoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10628, + "src": "26510:9:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10640, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10596, + "src": "26500:6:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10641, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bp", + "nodeType": "MemberAccess", + "referencedDeclaration": 5593, + "src": "26500:9:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10643, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26500:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "26484:36:66" + }, + { + "expression": { + "arguments": [ + { + "id": 10646, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10639, + "src": "26553:5:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10647, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10616, + "src": "26560:7:66", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 10645, + "name": "transferFeeETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10361, + "src": "26538:14:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 10648, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "26538:30:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10649, + "nodeType": "ExpressionStatement", + "src": "26538:30:66" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10606, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10603, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10600, + "src": "26219:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 10604, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10594, + "src": "26223:20:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10605, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "26223:27:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "26219:31:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10653, + "initializationExpression": { + "assignments": [ + 10600 + ], + "declarations": [ + { + "constant": false, + "id": 10600, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 10653, + "src": "26204:9:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10599, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26204:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10602, + "initialValue": { + "hexValue": "30", + "id": 10601, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26216:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "26204:13:66" + }, + "loopExpression": { + "expression": { + "id": 10608, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "26252:3:66", + "subExpression": { + "id": 10607, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10600, + "src": "26254:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10609, + "nodeType": "ExpressionStatement", + "src": "26252:3:66" + }, + "nodeType": "ForStatement", + "src": "26199:394:66" + } + ] + }, + "documentation": { + "id": 10591, + "nodeType": "StructuredDocumentation", + "src": "25925:155:66", + "text": "@notice transfer additional royalties in ETH\n@param _additionalRoyalties array uint256 (base point + royalty recipient address)" + }, + "id": 10655, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferAdditionalRoyaltiesETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10597, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10594, + "mutability": "mutable", + "name": "_additionalRoyalties", + "nodeType": "VariableDeclaration", + "scope": 10655, + "src": "26125:37:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10592, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26125:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10593, + "nodeType": "ArrayTypeName", + "src": "26125:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10596, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 10655, + "src": "26164:14:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10595, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26164:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26124:55:66" + }, + "returnParameters": { + "id": 10598, + "nodeType": "ParameterList", + "parameters": [], + "src": "26189:0:66" + }, + "scope": 11101, + "src": "26085:514:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10719, + "nodeType": "Block", + "src": "26871:411:66", + "statements": [ + { + "body": { + "id": 10717, + "nodeType": "Block", + "src": "26939:337:66", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10679, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 10675, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10659, + "src": "26957:20:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10677, + "indexExpression": { + "id": 10676, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10665, + "src": "26978:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "26957:23:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "hexValue": "30", + "id": 10678, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26983:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "26957:27:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10716, + "nodeType": "IfStatement", + "src": "26953:313:66", + "trueBody": { + "id": 10715, + "nodeType": "Block", + "src": "26986:280:66", + "statements": [ + { + "assignments": [ + 10681 + ], + "declarations": [ + { + "constant": false, + "id": 10681, + "mutability": "mutable", + "name": "account", + "nodeType": "VariableDeclaration", + "scope": 10715, + "src": "27004:23:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + "typeName": { + "id": 10680, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "27004:15:66", + "stateMutability": "payable", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "visibility": "internal" + } + ], + "id": 10691, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "baseExpression": { + "id": 10686, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10659, + "src": "27046:20:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10688, + "indexExpression": { + "id": 10687, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10665, + "src": "27067:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "27046:23:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10685, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "27038:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10684, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "27038:7:66", + "typeDescriptions": {} + } + }, + "id": 10689, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27038:32:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 10683, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "27030:8:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_payable_$", + "typeString": "type(address payable)" + }, + "typeName": { + "id": 10682, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "27030:8:66", + "stateMutability": "payable", + "typeDescriptions": {} + } + }, + "id": 10690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27030:41:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "27004:67:66" + }, + { + "assignments": [ + 10693 + ], + "declarations": [ + { + "constant": false, + "id": 10693, + "mutability": "mutable", + "name": "basePoint", + "nodeType": "VariableDeclaration", + "scope": 10715, + "src": "27089:17:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10692, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27089:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10702, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10700, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 10696, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10659, + "src": "27117:20:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10698, + "indexExpression": { + "id": 10697, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10665, + "src": "27138:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "27117:23:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "313630", + "id": 10699, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27144:3:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_160_by_1", + "typeString": "int_const 160" + }, + "value": "160" + }, + "src": "27117:30:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10695, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "27109:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 10694, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27109:7:66", + "typeDescriptions": {} + } + }, + "id": 10701, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27109:39:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "27089:59:66" + }, + { + "assignments": [ + 10704 + ], + "declarations": [ + { + "constant": false, + "id": 10704, + "mutability": "mutable", + "name": "value", + "nodeType": "VariableDeclaration", + "scope": 10715, + "src": "27166:13:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10703, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27166:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10709, + "initialValue": { + "arguments": [ + { + "id": 10707, + "name": "basePoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10693, + "src": "27192:9:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 10705, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10661, + "src": "27182:6:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10706, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bp", + "nodeType": "MemberAccess", + "referencedDeclaration": 5593, + "src": "27182:9:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10708, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27182:20:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "27166:36:66" + }, + { + "expression": { + "arguments": [ + { + "id": 10711, + "name": "value", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10704, + "src": "27236:5:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 10712, + "name": "account", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10681, + "src": "27243:7:66", + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 10710, + "name": "transferFeeWETH", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10390, + "src": "27220:15:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address)" + } + }, + "id": 10713, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27220:31:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10714, + "nodeType": "ExpressionStatement", + "src": "27220:31:66" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10671, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10668, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10665, + "src": "26901:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 10669, + "name": "_additionalRoyalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10659, + "src": "26905:20:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10670, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "26905:27:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "26901:31:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10718, + "initializationExpression": { + "assignments": [ + 10665 + ], + "declarations": [ + { + "constant": false, + "id": 10665, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 10718, + "src": "26886:9:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10664, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26886:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10667, + "initialValue": { + "hexValue": "30", + "id": 10666, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "26898:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "26886:13:66" + }, + "loopExpression": { + "expression": { + "id": 10673, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "26934:3:66", + "subExpression": { + "id": 10672, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10665, + "src": "26936:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10674, + "nodeType": "ExpressionStatement", + "src": "26934:3:66" + }, + "nodeType": "ForStatement", + "src": "26881:395:66" + } + ] + }, + "documentation": { + "id": 10656, + "nodeType": "StructuredDocumentation", + "src": "26605:156:66", + "text": "@notice transfer additional royalties in WETH\n@param _additionalRoyalties array uint256 (base point + royalty recipient address)" + }, + "id": 10720, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "transferAdditionalRoyaltiesWETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10662, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10659, + "mutability": "mutable", + "name": "_additionalRoyalties", + "nodeType": "VariableDeclaration", + "scope": 10720, + "src": "26807:37:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10657, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26807:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10658, + "nodeType": "ArrayTypeName", + "src": "26807:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10661, + "mutability": "mutable", + "name": "amount", + "nodeType": "VariableDeclaration", + "scope": 10720, + "src": "26846:14:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10660, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "26846:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "26806:55:66" + }, + "returnParameters": { + "id": 10663, + "nodeType": "ParameterList", + "parameters": [], + "src": "26871:0:66" + }, + "scope": 11101, + "src": "26766:516:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10773, + "nodeType": "Block", + "src": "27448:251:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10734, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10730, + "name": "src", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10722, + "src": "27466:3:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10731, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "27466:10:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10732, + "name": "replacement", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10724, + "src": "27480:11:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10733, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "27480:18:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "27466:32:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 10729, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "27458:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 10735, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27458:41:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10736, + "nodeType": "ExpressionStatement", + "src": "27458:41:66" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10742, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 10738, + "name": "src", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10722, + "src": "27517:3:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "27517:10:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10740, + "name": "mask", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10726, + "src": "27531:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10741, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "27531:11:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "27517:25:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 10737, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "27509:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 10743, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "27509:34:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10744, + "nodeType": "ExpressionStatement", + "src": "27509:34:66" + }, + { + "body": { + "id": 10771, + "nodeType": "Block", + "src": "27595:98:66", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + }, + "id": 10760, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 10756, + "name": "mask", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10726, + "src": "27613:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10758, + "indexExpression": { + "id": 10757, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10746, + "src": "27618:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "27613:7:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "hexValue": "30", + "id": 10759, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27624:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "27613:12:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10770, + "nodeType": "IfStatement", + "src": "27609:74:66", + "trueBody": { + "id": 10769, + "nodeType": "Block", + "src": "27627:56:66", + "statements": [ + { + "expression": { + "id": 10767, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "baseExpression": { + "id": 10761, + "name": "src", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10722, + "src": "27645:3:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10763, + "indexExpression": { + "id": 10762, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10746, + "src": "27649:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "nodeType": "IndexAccess", + "src": "27645:6:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "baseExpression": { + "id": 10764, + "name": "replacement", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10724, + "src": "27654:11:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10766, + "indexExpression": { + "id": 10765, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10746, + "src": "27666:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "27654:14:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "src": "27645:23:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + "id": 10768, + "nodeType": "ExpressionStatement", + "src": "27645:23:66" + } + ] + } + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10752, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10749, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10746, + "src": "27574:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 10750, + "name": "src", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10722, + "src": "27578:3:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 10751, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "27578:10:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "27574:14:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10772, + "initializationExpression": { + "assignments": [ + 10746 + ], + "declarations": [ + { + "constant": false, + "id": 10746, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 10772, + "src": "27559:9:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10745, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "27559:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10748, + "initialValue": { + "hexValue": "30", + "id": 10747, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "27571:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "27559:13:66" + }, + "loopExpression": { + "expression": { + "id": 10754, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "27590:3:66", + "subExpression": { + "id": 10753, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10746, + "src": "27592:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10755, + "nodeType": "ExpressionStatement", + "src": "27590:3:66" + }, + "nodeType": "ForStatement", + "src": "27554:139:66" + } + ] + }, + "id": 10774, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_arrayReplace", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10727, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10722, + "mutability": "mutable", + "name": "src", + "nodeType": "VariableDeclaration", + "scope": 10774, + "src": "27342:16:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10721, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "27342:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10724, + "mutability": "mutable", + "name": "replacement", + "nodeType": "VariableDeclaration", + "scope": 10774, + "src": "27368:24:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10723, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "27368:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10726, + "mutability": "mutable", + "name": "mask", + "nodeType": "VariableDeclaration", + "scope": 10774, + "src": "27402:17:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 10725, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "27402:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "27332:93:66" + }, + "returnParameters": { + "id": 10728, + "nodeType": "ParameterList", + "parameters": [], + "src": "27448:0:66" + }, + "scope": 11101, + "src": "27310:389:66", + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "body": { + "id": 10802, + "nodeType": "Block", + "src": "28007:183:66", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 10795, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 10790, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10785, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10782, + "name": "marketId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10777, + "src": "28021:8:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10783, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "28033:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10784, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SudoSwap", + "nodeType": "MemberAccess", + "src": "28033:16:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "28021:28:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10789, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10786, + "name": "marketId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10777, + "src": "28053:8:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10787, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "28065:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10788, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "LooksRareOrders", + "nodeType": "MemberAccess", + "src": "28065:23:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "28053:35:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "28021:67:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "||", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10794, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10791, + "name": "marketId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10777, + "src": "28092:8:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10792, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "28104:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10793, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "LooksRareV2", + "nodeType": "MemberAccess", + "src": "28104:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "28092:31:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "28021:102:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10799, + "nodeType": "IfStatement", + "src": "28017:144:66", + "trueBody": { + "id": 10798, + "nodeType": "Block", + "src": "28125:36:66", + "statements": [ + { + "expression": { + "hexValue": "74727565", + "id": 10796, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "28146:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 10781, + "id": 10797, + "nodeType": "Return", + "src": "28139:11:66" + } + ] + } + }, + { + "expression": { + "hexValue": "66616c7365", + "id": 10800, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "28178:5:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 10781, + "id": 10801, + "nodeType": "Return", + "src": "28171:12:66" + } + ] + }, + "documentation": { + "id": 10775, + "nodeType": "StructuredDocumentation", + "src": "27705:223:66", + "text": "@notice returns true if this contract supports additional royalties for the marketplace;\nnow royalties are supported for:\n1. SudoSwap\n2. LooksRare old\n3. LooksRare V2" + }, + "id": 10803, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "supportsRoyalties", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10778, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10777, + "mutability": "mutable", + "name": "marketId", + "nodeType": "VariableDeclaration", + "scope": 10803, + "src": "27960:16:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "typeName": { + "id": 10776, + "name": "Markets", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8709, + "src": "27960:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "visibility": "internal" + } + ], + "src": "27959:18:66" + }, + "returnParameters": { + "id": 10781, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10780, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10803, + "src": "28001:4:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 10779, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "28001:4:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "28000:6:66" + }, + "scope": 11101, + "src": "27933:257:66", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10907, + "nodeType": "Block", + "src": "28295:923:66", + "statements": [ + { + "assignments": [ + 10811 + ], + "declarations": [ + { + "constant": false, + "id": 10811, + "mutability": "mutable", + "name": "result", + "nodeType": "VariableDeclaration", + "scope": 10907, + "src": "28305:14:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10810, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28305:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10813, + "initialValue": { + "hexValue": "30", + "id": 10812, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "28322:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "28305:18:66" + }, + { + "assignments": [ + 10815 + ], + "declarations": [ + { + "constant": false, + "id": 10815, + "mutability": "mutable", + "name": "currency", + "nodeType": "VariableDeclaration", + "scope": 10907, + "src": "28334:19:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "typeName": { + "id": 10814, + "name": "Currencies", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8715, + "src": "28334:10:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "visibility": "internal" + } + ], + "id": 10820, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 10817, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10805, + "src": "28368:6:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10818, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8721, + "src": "28368:11:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10816, + "name": "getCurrency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10511, + "src": "28356:11:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_enum$_Currencies_$8715_$", + "typeString": "function (uint256) pure returns (enum RaribleExchangeWrapperUpgradeableV2.Currencies)" + } + }, + "id": 10819, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "28356:24:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "28334:46:66" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "id": 10824, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10821, + "name": "currency", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10815, + "src": "28475:8:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10822, + "name": "Currencies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8715, + "src": "28487:10:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Currencies_$8715_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Currencies)" + } + }, + "id": 10823, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "WETH", + "nodeType": "MemberAccess", + "src": "28487:15:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + } + }, + "src": "28475:27:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10904, + "nodeType": "IfStatement", + "src": "28471:717:66", + "trueBody": { + "id": 10903, + "nodeType": "Block", + "src": "28504:684:66", + "statements": [ + { + "expression": { + "id": 10830, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10825, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10811, + "src": "28543:6:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10829, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10826, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10811, + "src": "28552:6:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "expression": { + "id": 10827, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10805, + "src": "28561:6:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10828, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8719, + "src": "28561:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "28552:22:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "28543:31:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10831, + "nodeType": "ExpressionStatement", + "src": "28543:31:66" + }, + { + "assignments": [ + 10833, + 10835 + ], + "declarations": [ + { + "constant": false, + "id": 10833, + "mutability": "mutable", + "name": "firstFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 10903, + "src": "28613:22:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10832, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28613:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10835, + "mutability": "mutable", + "name": "secondFeeAmount", + "nodeType": "VariableDeclaration", + "scope": 10903, + "src": "28637:23:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10834, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28637:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10842, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 10837, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10805, + "src": "28672:6:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10838, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8721, + "src": "28672:11:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 10839, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10805, + "src": "28685:6:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10840, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8719, + "src": "28685:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10836, + "name": "getFees", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10493, + "src": "28664:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256,uint256)" + } + }, + "id": 10841, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "28664:35:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$", + "typeString": "tuple(uint256,uint256)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "28612:87:66" + }, + { + "expression": { + "id": 10849, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10843, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10811, + "src": "28713:6:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10848, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10846, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10844, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10811, + "src": "28722:6:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 10845, + "name": "firstFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10833, + "src": "28731:14:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "28722:23:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 10847, + "name": "secondFeeAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10835, + "src": "28748:15:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "28722:41:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "28713:50:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10850, + "nodeType": "ExpressionStatement", + "src": "28713:50:66" + }, + { + "assignments": [ + null, + 10855 + ], + "declarations": [ + null, + { + "constant": false, + "id": 10855, + "mutability": "mutable", + "name": "royalties", + "nodeType": "VariableDeclaration", + "scope": 10903, + "src": "28809:26:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[]" + }, + "typeName": { + "baseType": { + "id": 10853, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28809:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10854, + "nodeType": "ArrayTypeName", + "src": "28809:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr", + "typeString": "uint256[]" + } + }, + "visibility": "internal" + } + ], + "id": 10864, + "initialValue": { + "arguments": [ + { + "expression": { + "id": 10857, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10805, + "src": "28864:6:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10858, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "data", + "nodeType": "MemberAccess", + "referencedDeclaration": 8723, + "src": "28864:11:66", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "expression": { + "id": 10859, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10805, + "src": "28877:6:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10860, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "fees", + "nodeType": "MemberAccess", + "referencedDeclaration": 8721, + "src": "28877:11:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "expression": { + "id": 10861, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10805, + "src": "28890:6:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10862, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "marketId", + "nodeType": "MemberAccess", + "referencedDeclaration": 8717, + "src": "28890:15:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + ], + "id": 10856, + "name": "getDataAndAdditionalData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10590, + "src": "28839:24:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_enum$_Markets_$8709_$returns$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "function (bytes memory,uint256,enum RaribleExchangeWrapperUpgradeableV2.Markets) pure returns (bytes memory,uint256[] memory)" + } + }, + "id": 10863, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "28839:67:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bytes_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$", + "typeString": "tuple(bytes memory,uint256[] memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "28806:100:66" + }, + { + "body": { + "id": 10901, + "nodeType": "Block", + "src": "28967:211:66", + "statements": [ + { + "assignments": [ + 10877 + ], + "declarations": [ + { + "constant": false, + "id": 10877, + "mutability": "mutable", + "name": "royaltyBasePoint", + "nodeType": "VariableDeclaration", + "scope": 10901, + "src": "28985:24:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10876, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28985:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10886, + "initialValue": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10884, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "baseExpression": { + "id": 10880, + "name": "royalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10855, + "src": "29020:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10882, + "indexExpression": { + "id": 10881, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10866, + "src": "29030:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "29020:12:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">>", + "rightExpression": { + "hexValue": "313630", + "id": 10883, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "29036:3:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_160_by_1", + "typeString": "int_const 160" + }, + "value": "160" + }, + "src": "29020:19:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 10879, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "29012:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 10878, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29012:7:66", + "typeDescriptions": {} + } + }, + "id": 10885, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "29012:28:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "28985:55:66" + }, + { + "assignments": [ + 10888 + ], + "declarations": [ + { + "constant": false, + "id": 10888, + "mutability": "mutable", + "name": "royaltyValue", + "nodeType": "VariableDeclaration", + "scope": 10901, + "src": "29058:20:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10887, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29058:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10894, + "initialValue": { + "arguments": [ + { + "id": 10892, + "name": "royaltyBasePoint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10877, + "src": "29098:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "expression": { + "id": 10889, + "name": "detail", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10805, + "src": "29081:6:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + }, + "id": 10890, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberName": "amount", + "nodeType": "MemberAccess", + "referencedDeclaration": 8719, + "src": "29081:13:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10891, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "bp", + "nodeType": "MemberAccess", + "referencedDeclaration": 5593, + "src": "29081:16:66", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$", + "typeString": "function (uint256,uint256) pure returns (uint256)" + } + }, + "id": 10893, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "29081:34:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "29058:57:66" + }, + { + "expression": { + "id": 10899, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10895, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10811, + "src": "29133:6:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10898, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10896, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10811, + "src": "29142:6:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "+", + "rightExpression": { + "id": 10897, + "name": "royaltyValue", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10888, + "src": "29151:12:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "29142:21:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "29133:30:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10900, + "nodeType": "ExpressionStatement", + "src": "29133:30:66" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10872, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10869, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10866, + "src": "28940:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 10870, + "name": "royalties", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10855, + "src": "28944:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + } + }, + "id": 10871, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "28944:16:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "28940:20:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10902, + "initializationExpression": { + "assignments": [ + 10866 + ], + "declarations": [ + { + "constant": false, + "id": 10866, + "mutability": "mutable", + "name": "j", + "nodeType": "VariableDeclaration", + "scope": 10902, + "src": "28925:9:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10865, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28925:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10868, + "initialValue": { + "hexValue": "30", + "id": 10867, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "28937:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "28925:13:66" + }, + "loopExpression": { + "expression": { + "id": 10874, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "28962:3:66", + "subExpression": { + "id": 10873, + "name": "j", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10866, + "src": "28964:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10875, + "nodeType": "ExpressionStatement", + "src": "28962:3:66" + }, + "nodeType": "ForStatement", + "src": "28920:258:66" + } + ] + } + }, + { + "expression": { + "id": 10905, + "name": "result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10811, + "src": "29205:6:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 10809, + "id": 10906, + "nodeType": "Return", + "src": "29198:13:66" + } + ] + }, + "id": 10908, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "getAmountOfWethForPurchase", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10806, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10805, + "mutability": "mutable", + "name": "detail", + "nodeType": "VariableDeclaration", + "scope": 10908, + "src": "28232:29:66", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + }, + "typeName": { + "id": 10804, + "name": "PurchaseDetails", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8724, + "src": "28232:15:66", + "typeDescriptions": { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_storage_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + } + }, + "visibility": "internal" + } + ], + "src": "28231:31:66" + }, + "returnParameters": { + "id": 10809, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10808, + "mutability": "mutable", + "name": "", + "nodeType": "VariableDeclaration", + "scope": 10908, + "src": "28286:7:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10807, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "28286:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "28285:9:66" + }, + "scope": 11101, + "src": "28196:1022:66", + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + { + "body": { + "id": 10940, + "nodeType": "Block", + "src": "29445:158:66", + "statements": [ + { + "body": { + "id": 10938, + "nodeType": "Block", + "src": "29508:89:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "baseExpression": { + "id": 10932, + "name": "transferProxies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10912, + "src": "29554:15:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + "id": 10934, + "indexExpression": { + "id": 10933, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10918, + "src": "29570:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "IndexAccess", + "src": "29554:18:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 10935, + "name": "UINT256_MAX", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8686, + "src": "29574:11:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "arguments": [ + { + "id": 10929, + "name": "weth", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8679, + "src": "29540:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 10928, + "name": "IERC20Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 1173, + "src": "29522:17:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IERC20Upgradeable_$1173_$", + "typeString": "type(contract IERC20Upgradeable)" + } + }, + "id": 10930, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "29522:23:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IERC20Upgradeable_$1173", + "typeString": "contract IERC20Upgradeable" + } + }, + "id": 10931, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "approve", + "nodeType": "MemberAccess", + "referencedDeclaration": 1142, + "src": "29522:31:66", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$", + "typeString": "function (address,uint256) external returns (bool)" + } + }, + "id": 10936, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "29522:64:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10937, + "nodeType": "ExpressionStatement", + "src": "29522:64:66" + } + ] + }, + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 10924, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10921, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10918, + "src": "29475:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "expression": { + "id": 10922, + "name": "transferProxies", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10912, + "src": "29479:15:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[] calldata" + } + }, + "id": 10923, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberName": "length", + "nodeType": "MemberAccess", + "src": "29479:22:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "29475:26:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 10939, + "initializationExpression": { + "assignments": [ + 10918 + ], + "declarations": [ + { + "constant": false, + "id": 10918, + "mutability": "mutable", + "name": "i", + "nodeType": "VariableDeclaration", + "scope": 10939, + "src": "29460:9:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 10917, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "29460:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 10920, + "initialValue": { + "hexValue": "30", + "id": 10919, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "29472:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "nodeType": "VariableDeclarationStatement", + "src": "29460:13:66" + }, + "loopExpression": { + "expression": { + "id": 10926, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "++", + "prefix": true, + "src": "29503:3:66", + "subExpression": { + "id": 10925, + "name": "i", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10918, + "src": "29505:1:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 10927, + "nodeType": "ExpressionStatement", + "src": "29503:3:66" + }, + "nodeType": "ForStatement", + "src": "29455:142:66" + } + ] + }, + "documentation": { + "id": 10909, + "nodeType": "StructuredDocumentation", + "src": "29224:140:66", + "text": "@notice approves weth for a list of the addresses\n@param transferProxies - array of addresses to approve WETH for" + }, + "functionSelector": "86dcbd27", + "id": 10941, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 10915, + "modifierName": { + "id": 10914, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 75, + "src": "29435:9:66", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "29435:9:66" + } + ], + "name": "approveWETH", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10913, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10912, + "mutability": "mutable", + "name": "transferProxies", + "nodeType": "VariableDeclaration", + "scope": 10941, + "src": "29390:34:66", + "stateVariable": false, + "storageLocation": "calldata", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_calldata_ptr", + "typeString": "address[]" + }, + "typeName": { + "baseType": { + "id": 10910, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "29390:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10911, + "nodeType": "ArrayTypeName", + "src": "29390:9:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr", + "typeString": "address[]" + } + }, + "visibility": "internal" + } + ], + "src": "29389:36:66" + }, + "returnParameters": { + "id": 10916, + "nodeType": "ParameterList", + "parameters": [], + "src": "29445:0:66" + }, + "scope": 11101, + "src": "29369:234:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 11091, + "nodeType": "Block", + "src": "29877:1285:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 10957, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10952, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "29895:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 10955, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "29918:1:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 10954, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "29910:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 10953, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "29910:7:66", + "typeDescriptions": {} + } + }, + "id": 10956, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "29910:10:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + }, + "src": "29895:25:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "4e657720616464726573732063616e6e6f74206265207a65726f", + "id": 10958, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "29922:28:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_5904c3e21a28364a0c2d14d132ae0ba7e1f2dcf1f9ade73ba991a7031640606b", + "typeString": "literal_string \"New address cannot be zero\"" + }, + "value": "New address cannot be zero" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5904c3e21a28364a0c2d14d132ae0ba7e1f2dcf1f9ade73ba991a7031640606b", + "typeString": "literal_string \"New address cannot be zero\"" + } + ], + "id": 10951, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "29887:7:66", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 10959, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "29887:64:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 10960, + "nodeType": "ExpressionStatement", + "src": "29887:64:66" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10964, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10961, + "name": "_market", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10944, + "src": "29966:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10962, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "29977:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10963, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "WyvernExchange", + "nodeType": "MemberAccess", + "src": "29977:22:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "29966:33:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10973, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10970, + "name": "_market", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10944, + "src": "30064:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10971, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "30075:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10972, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "ExchangeV2", + "nodeType": "MemberAccess", + "src": "30075:18:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "30064:29:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10982, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10979, + "name": "_market", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10944, + "src": "30154:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10980, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "30165:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10981, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_1", + "nodeType": "MemberAccess", + "src": "30165:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "30154:30:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10991, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10988, + "name": "_market", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10944, + "src": "30246:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10989, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "30257:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10990, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "X2Y2", + "nodeType": "MemberAccess", + "src": "30257:12:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "30246:23:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 11000, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 10997, + "name": "_market", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10944, + "src": "30324:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 10998, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "30335:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 10999, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "LooksRareOrders", + "nodeType": "MemberAccess", + "src": "30335:23:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "30324:34:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 11009, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11006, + "name": "_market", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10944, + "src": "30418:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 11007, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "30429:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 11008, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SudoSwap", + "nodeType": "MemberAccess", + "src": "30429:16:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "30418:27:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 11018, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11015, + "name": "_market", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10944, + "src": "30504:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 11016, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "30515:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 11017, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_4", + "nodeType": "MemberAccess", + "src": "30515:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "30504:30:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 11027, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11024, + "name": "_market", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10944, + "src": "30596:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 11025, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "30607:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 11026, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "LooksRareV2", + "nodeType": "MemberAccess", + "src": "30607:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "30596:30:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 11036, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11033, + "name": "_market", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10944, + "src": "30688:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 11034, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "30699:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 11035, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "Blur", + "nodeType": "MemberAccess", + "src": "30699:12:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "30688:23:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 11045, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11042, + "name": "_market", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10944, + "src": "30766:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 11043, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "30777:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 11044, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_5", + "nodeType": "MemberAccess", + "src": "30777:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "30766:30:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 11054, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11051, + "name": "_market", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10944, + "src": "30858:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 11052, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "30869:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 11053, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "SeaPort_1_6", + "nodeType": "MemberAccess", + "src": "30869:19:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "30858:30:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "condition": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 11063, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 11060, + "name": "_market", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10944, + "src": "30950:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "expression": { + "id": 11061, + "name": "Markets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8709, + "src": "30961:7:66", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_enum$_Markets_$8709_$", + "typeString": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)" + } + }, + "id": 11062, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberName": "NewMarket", + "nodeType": "MemberAccess", + "src": "30961:17:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "src": "30950:28:66", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 11073, + "nodeType": "Block", + "src": "31034:59:66", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "496e76616c6964206d61726b6574706c6163652074797065", + "id": 11070, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "31055:26:66", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_febc375c51703703674424cdadfabf329e51db90f4495b4c56145c8182019182", + "typeString": "literal_string \"Invalid marketplace type\"" + }, + "value": "Invalid marketplace type" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_febc375c51703703674424cdadfabf329e51db90f4495b4c56145c8182019182", + "typeString": "literal_string \"Invalid marketplace type\"" + } + ], + "id": 11069, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "31048:6:66", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 11071, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "31048:34:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11072, + "nodeType": "ExpressionStatement", + "src": "31048:34:66" + } + ] + }, + "id": 11074, + "nodeType": "IfStatement", + "src": "30946:147:66", + "trueBody": { + "id": 11068, + "nodeType": "Block", + "src": "30980:48:66", + "statements": [ + { + "expression": { + "id": 11066, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11064, + "name": "newMarket", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8677, + "src": "30994:9:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11065, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "31006:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "30994:23:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 11067, + "nodeType": "ExpressionStatement", + "src": "30994:23:66" + } + ] + } + }, + "id": 11075, + "nodeType": "IfStatement", + "src": "30854:239:66", + "trueBody": { + "id": 11059, + "nodeType": "Block", + "src": "30890:50:66", + "statements": [ + { + "expression": { + "id": 11057, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11055, + "name": "seaPort_1_6", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8675, + "src": "30904:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11056, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "30918:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "30904:25:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 11058, + "nodeType": "ExpressionStatement", + "src": "30904:25:66" + } + ] + } + }, + "id": 11076, + "nodeType": "IfStatement", + "src": "30762:331:66", + "trueBody": { + "id": 11050, + "nodeType": "Block", + "src": "30798:50:66", + "statements": [ + { + "expression": { + "id": 11048, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11046, + "name": "seaPort_1_5", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8673, + "src": "30812:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11047, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "30826:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "30812:25:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 11049, + "nodeType": "ExpressionStatement", + "src": "30812:25:66" + } + ] + } + }, + "id": 11077, + "nodeType": "IfStatement", + "src": "30684:409:66", + "trueBody": { + "id": 11041, + "nodeType": "Block", + "src": "30713:43:66", + "statements": [ + { + "expression": { + "id": 11039, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11037, + "name": "blur", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8671, + "src": "30727:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11038, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "30734:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "30727:18:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 11040, + "nodeType": "ExpressionStatement", + "src": "30727:18:66" + } + ] + } + }, + "id": 11078, + "nodeType": "IfStatement", + "src": "30592:501:66", + "trueBody": { + "id": 11032, + "nodeType": "Block", + "src": "30628:50:66", + "statements": [ + { + "expression": { + "id": 11030, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11028, + "name": "looksRareV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8669, + "src": "30642:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11029, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "30656:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "30642:25:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 11031, + "nodeType": "ExpressionStatement", + "src": "30642:25:66" + } + ] + } + }, + "id": 11079, + "nodeType": "IfStatement", + "src": "30500:593:66", + "trueBody": { + "id": 11023, + "nodeType": "Block", + "src": "30536:50:66", + "statements": [ + { + "expression": { + "id": 11021, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11019, + "name": "seaPort_1_4", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8667, + "src": "30550:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11020, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "30564:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "30550:25:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 11022, + "nodeType": "ExpressionStatement", + "src": "30550:25:66" + } + ] + } + }, + "id": 11080, + "nodeType": "IfStatement", + "src": "30414:679:66", + "trueBody": { + "id": 11014, + "nodeType": "Block", + "src": "30447:47:66", + "statements": [ + { + "expression": { + "id": 11012, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11010, + "name": "sudoswap", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8665, + "src": "30461:8:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11011, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "30472:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "30461:22:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 11013, + "nodeType": "ExpressionStatement", + "src": "30461:22:66" + } + ] + } + }, + "id": 11081, + "nodeType": "IfStatement", + "src": "30320:773:66", + "trueBody": { + "id": 11005, + "nodeType": "Block", + "src": "30360:48:66", + "statements": [ + { + "expression": { + "id": 11003, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 11001, + "name": "looksRare", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8663, + "src": "30374:9:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 11002, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "30386:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "30374:23:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 11004, + "nodeType": "ExpressionStatement", + "src": "30374:23:66" + } + ] + } + }, + "id": 11082, + "nodeType": "IfStatement", + "src": "30242:851:66", + "trueBody": { + "id": 10996, + "nodeType": "Block", + "src": "30271:43:66", + "statements": [ + { + "expression": { + "id": 10994, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10992, + "name": "x2y2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8661, + "src": "30285:4:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10993, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "30292:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "30285:18:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10995, + "nodeType": "ExpressionStatement", + "src": "30285:18:66" + } + ] + } + }, + "id": 11083, + "nodeType": "IfStatement", + "src": "30150:943:66", + "trueBody": { + "id": 10987, + "nodeType": "Block", + "src": "30186:50:66", + "statements": [ + { + "expression": { + "id": 10985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10983, + "name": "seaPort_1_1", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8659, + "src": "30200:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10984, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "30214:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "30200:25:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10986, + "nodeType": "ExpressionStatement", + "src": "30200:25:66" + } + ] + } + }, + "id": 11084, + "nodeType": "IfStatement", + "src": "30060:1033:66", + "trueBody": { + "id": 10978, + "nodeType": "Block", + "src": "30095:49:66", + "statements": [ + { + "expression": { + "id": 10976, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10974, + "name": "exchangeV2", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8657, + "src": "30109:10:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10975, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "30122:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "30109:24:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10977, + "nodeType": "ExpressionStatement", + "src": "30109:24:66" + } + ] + } + }, + "id": 11085, + "nodeType": "IfStatement", + "src": "29962:1131:66", + "trueBody": { + "id": 10969, + "nodeType": "Block", + "src": "30001:53:66", + "statements": [ + { + "expression": { + "id": 10967, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 10965, + "name": "wyvernExchange", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8655, + "src": "30015:14:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 10966, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "30032:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "30015:28:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 10968, + "nodeType": "ExpressionStatement", + "src": "30015:28:66" + } + ] + } + }, + { + "eventCall": { + "arguments": [ + { + "id": 11087, + "name": "_market", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10944, + "src": "31134:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + { + "id": 11088, + "name": "_newAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 10946, + "src": "31143:11:66", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 11086, + "name": "MarketplaceAddressUpdated", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 8696, + "src": "31108:25:66", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_enum$_Markets_$8709_$_t_address_$returns$__$", + "typeString": "function (enum RaribleExchangeWrapperUpgradeableV2.Markets,address)" + } + }, + "id": 11089, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "names": [], + "nodeType": "FunctionCall", + "src": "31108:47:66", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 11090, + "nodeType": "EmitStatement", + "src": "31103:52:66" + } + ] + }, + "documentation": { + "id": 10942, + "nodeType": "StructuredDocumentation", + "src": "29609:172:66", + "text": " @notice updates the address of the marketplace\n @param _market - type of the marketplace\n @param _newAddress - new address of the marketplace" + }, + "functionSelector": "5cdb4367", + "id": 11092, + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 10949, + "modifierName": { + "id": 10948, + "name": "onlyOwner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 75, + "src": "29867:9:66", + "typeDescriptions": { + "typeIdentifier": "t_modifier$__$", + "typeString": "modifier ()" + } + }, + "nodeType": "ModifierInvocation", + "src": "29867:9:66" + } + ], + "name": "updateMarketplaceAddress", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 10947, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 10944, + "mutability": "mutable", + "name": "_market", + "nodeType": "VariableDeclaration", + "scope": 11092, + "src": "29820:15:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "typeName": { + "id": 10943, + "name": "Markets", + "nodeType": "UserDefinedTypeName", + "referencedDeclaration": 8709, + "src": "29820:7:66", + "typeDescriptions": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 10946, + "mutability": "mutable", + "name": "_newAddress", + "nodeType": "VariableDeclaration", + "scope": 11092, + "src": "29837:19:66", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 10945, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "29837:7:66", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "29819:38:66" + }, + "returnParameters": { + "id": 10950, + "nodeType": "ParameterList", + "parameters": [], + "src": "29877:0:66" + }, + "scope": 11101, + "src": "29786:1376:66", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 11095, + "nodeType": "Block", + "src": "31195:2:66", + "statements": [] + }, + "id": 11096, + "implemented": true, + "kind": "receive", + "modifiers": [], + "name": "", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 11093, + "nodeType": "ParameterList", + "parameters": [], + "src": "31175:2:66" + }, + "returnParameters": { + "id": 11094, + "nodeType": "ParameterList", + "parameters": [], + "src": "31195:0:66" + }, + "scope": 11101, + "src": "31168:29:66", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "constant": false, + "id": 11100, + "mutability": "mutable", + "name": "__gap", + "nodeType": "VariableDeclaration", + "scope": 11101, + "src": "31203:25:66", + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage", + "typeString": "uint256[50]" + }, + "typeName": { + "baseType": { + "id": 11097, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "31203:7:66", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 11099, + "length": { + "hexValue": "3530", + "id": 11098, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "31211:2:66", + "typeDescriptions": { + "typeIdentifier": "t_rational_50_by_1", + "typeString": "int_const 50" + }, + "value": "50" + }, + "nodeType": "ArrayTypeName", + "src": "31203:11:66", + "typeDescriptions": { + "typeIdentifier": "t_array$_t_uint256_$50_storage_ptr", + "typeString": "uint256[50]" + } + }, + "visibility": "private" + } + ], + "scope": 11102, + "src": "1631:29600:66" + } + ], + "src": "33:31199:66" + }, + "legacyAST": { + "attributes": { + "absolutePath": "project:/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol", + "exportedSymbols": { + "AddressUpgradeable": [ + 1600 + ], + "AssetMatcher": [ + 2132 + ], + "BpLibrary": [ + 5594 + ], + "ContextUpgradeable": [ + 1645 + ], + "EIP712Upgradeable": [ + 290 + ], + "ERC1155HolderUpgradeable": [ + 877 + ], + "ERC1155ReceiverUpgradeable": [ + 932 + ], + "ERC165Upgradeable": [ + 365 + ], + "ERC20TransferProxy": [ + 8528 + ], + "ERC721HolderUpgradeable": [ + 1222 + ], + "ExchangeV2": [ + 2257 + ], + "ExchangeV2Core": [ + 3234 + ], + "IAssetMatcher": [ + 1772 + ], + "IBlur": [ + 4564 + ], + "IERC1155ReceiverUpgradeable": [ + 973 + ], + "IERC1155Upgradeable": [ + 1095 + ], + "IERC1271": [ + 5639 + ], + "IERC165Upgradeable": [ + 377 + ], + "IERC20TransferProxy": [ + 1788 + ], + "IERC20Upgradeable": [ + 1173 + ], + "IERC721ReceiverUpgradeable": [ + 1240 + ], + "IERC721Upgradeable": [ + 1356 + ], + "IExchangeV2": [ + 4591 + ], + "ILooksRare": [ + 4617 + ], + "INftTransferProxy": [ + 1820 + ], + "IRoyaltiesProvider": [ + 1835 + ], + "ISeaPort": [ + 4672 + ], + "ITransferExecutor": [ + 8325 + ], + "ITransferManager": [ + 8346 + ], + "ITransferProxy": [ + 1849 + ], + "IWyvernExchange": [ + 4734 + ], + "Initializable": [ + 798 + ], + "Ix2y2": [ + 4854 + ], + "LibAsset": [ + 5569 + ], + "LibDeal": [ + 8368 + ], + "LibDirectTransfer": [ + 3436 + ], + "LibERC1155LazyMint": [ + 5308 + ], + "LibERC721LazyMint": [ + 5456 + ], + "LibFeeSide": [ + 8443 + ], + "LibFill": [ + 3597 + ], + "LibLooksRare": [ + 4962 + ], + "LibMath": [ + 3794 + ], + "LibOrder": [ + 4037 + ], + "LibOrderData": [ + 4432 + ], + "LibOrderDataV1": [ + 4452 + ], + "LibOrderDataV2": [ + 4474 + ], + "LibOrderDataV3": [ + 4496 + ], + "LibPart": [ + 5626 + ], + "LibSeaPort": [ + 5156 + ], + "LibSignature": [ + 5791 + ], + "LibTransfer": [ + 8468 + ], + "OrderValidator": [ + 3370 + ], + "OwnableUpgradeable": [ + 130 + ], + "PausableUpgradeable": [ + 1758 + ], + "RaribleExchangeWrapperUpgradeableV2": [ + 11101 + ], + "RaribleTransferManager": [ + 7969 + ], + "RoyaltiesRegistry": [ + 6722 + ], + "SafeMathUpgradeable": [ + 732 + ], + "TransferExecutor": [ + 8309 + ], + "TransferProxy": [ + 8615 + ] + }, + "license": "MIT" + }, + "children": [ + { + "attributes": { + "literals": [ + "solidity", + "0.7", + ".6" + ] + }, + "id": 8617, + "name": "PragmaDirective", + "src": "33:22:66" + }, + { + "attributes": { + "literals": [ + "abicoder", + "v2" + ] + }, + "id": 8618, + "name": "PragmaDirective", + "src": "56:19:66" + }, + { + "attributes": { + "SourceUnit": 8469, + "absolutePath": "@rarible/transfer-manager/contracts/lib/LibTransfer.sol", + "file": "@rarible/transfer-manager/contracts/lib/LibTransfer.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8619, + "name": "ImportDirective", + "src": "77:65:66" + }, + { + "attributes": { + "SourceUnit": 5595, + "absolutePath": "@rarible/lib-bp/contracts/BpLibrary.sol", + "file": "@rarible/lib-bp/contracts/BpLibrary.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8620, + "name": "ImportDirective", + "src": "143:49:66" + }, + { + "attributes": { + "SourceUnit": 5627, + "absolutePath": "@rarible/lib-part/contracts/LibPart.sol", + "file": "@rarible/lib-part/contracts/LibPart.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8621, + "name": "ImportDirective", + "src": "193:49:66" + }, + { + "attributes": { + "SourceUnit": 733, + "absolutePath": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8622, + "name": "ImportDirective", + "src": "299:74:66" + }, + { + "attributes": { + "SourceUnit": 1223, + "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8623, + "name": "ImportDirective", + "src": "442:86:66" + }, + { + "attributes": { + "SourceUnit": 878, + "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8624, + "name": "ImportDirective", + "src": "598:88:66" + }, + { + "attributes": { + "SourceUnit": 1174, + "absolutePath": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8625, + "name": "ImportDirective", + "src": "770:79:66" + }, + { + "attributes": { + "SourceUnit": 4735, + "absolutePath": "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol", + "file": "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8626, + "name": "ImportDirective", + "src": "851:76:66" + }, + { + "attributes": { + "SourceUnit": 4592, + "absolutePath": "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol", + "file": "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8627, + "name": "ImportDirective", + "src": "928:72:66" + }, + { + "attributes": { + "SourceUnit": 4673, + "absolutePath": "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol", + "file": "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8628, + "name": "ImportDirective", + "src": "1001:69:66" + }, + { + "attributes": { + "SourceUnit": 4855, + "absolutePath": "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol", + "file": "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8629, + "name": "ImportDirective", + "src": "1071:66:66" + }, + { + "attributes": { + "SourceUnit": 4618, + "absolutePath": "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol", + "file": "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8630, + "name": "ImportDirective", + "src": "1138:71:66" + }, + { + "attributes": { + "SourceUnit": 4565, + "absolutePath": "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol", + "file": "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8631, + "name": "ImportDirective", + "src": "1210:66:66" + }, + { + "attributes": { + "SourceUnit": 1759, + "absolutePath": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8632, + "name": "ImportDirective", + "src": "1318:75:66" + }, + { + "attributes": { + "SourceUnit": 131, + "absolutePath": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8633, + "name": "ImportDirective", + "src": "1395:75:66" + }, + { + "attributes": { + "SourceUnit": 799, + "absolutePath": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol", + "file": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol", + "scope": 11102, + "symbolAliases": [ + null + ], + "unitAlias": "" + }, + "id": 8634, + "name": "ImportDirective", + "src": "1471:69:66" + }, + { + "attributes": { + "abstract": false, + "contractDependencies": [ + 130, + 365, + 377, + 798, + 877, + 932, + 973, + 1222, + 1240, + 1645, + 1758 + ], + "contractKind": "contract", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 11101, + 1758, + 877, + 932, + 973, + 365, + 377, + 1222, + 1240, + 130, + 1645, + 798 + ], + "name": "RaribleExchangeWrapperUpgradeableV2", + "scope": 11102 + }, + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "name": "Initializable", + "referencedDeclaration": 798, + "type": "contract Initializable" + }, + "id": 8635, + "name": "UserDefinedTypeName", + "src": "1679:13:66" + } + ], + "id": 8636, + "name": "InheritanceSpecifier", + "src": "1679:13:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "name": "OwnableUpgradeable", + "referencedDeclaration": 130, + "type": "contract OwnableUpgradeable" + }, + "id": 8637, + "name": "UserDefinedTypeName", + "src": "1694:18:66" + } + ], + "id": 8638, + "name": "InheritanceSpecifier", + "src": "1694:18:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "name": "ERC721HolderUpgradeable", + "referencedDeclaration": 1222, + "type": "contract ERC721HolderUpgradeable" + }, + "id": 8639, + "name": "UserDefinedTypeName", + "src": "1714:23:66" + } + ], + "id": 8640, + "name": "InheritanceSpecifier", + "src": "1714:23:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "name": "ERC1155HolderUpgradeable", + "referencedDeclaration": 877, + "type": "contract ERC1155HolderUpgradeable" + }, + "id": 8641, + "name": "UserDefinedTypeName", + "src": "1739:24:66" + } + ], + "id": 8642, + "name": "InheritanceSpecifier", + "src": "1739:24:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "name": "PausableUpgradeable", + "referencedDeclaration": 1758, + "type": "contract PausableUpgradeable" + }, + "id": 8643, + "name": "UserDefinedTypeName", + "src": "1765:19:66" + } + ], + "id": 8644, + "name": "InheritanceSpecifier", + "src": "1765:19:66" + }, + { + "children": [ + { + "attributes": { + "name": "LibTransfer", + "referencedDeclaration": 8468, + "type": "library LibTransfer" + }, + "id": 8645, + "name": "UserDefinedTypeName", + "src": "1797:11:66" + }, + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8646, + "name": "ElementaryTypeName", + "src": "1813:7:66" + } + ], + "id": 8647, + "name": "UsingForDirective", + "src": "1791:30:66" + }, + { + "children": [ + { + "attributes": { + "name": "BpLibrary", + "referencedDeclaration": 5594, + "type": "library BpLibrary" + }, + "id": 8648, + "name": "UserDefinedTypeName", + "src": "1832:9:66" + }, + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8649, + "name": "ElementaryTypeName", + "src": "1846:7:66" + } + ], + "id": 8650, + "name": "UsingForDirective", + "src": "1826:28:66" + }, + { + "children": [ + { + "attributes": { + "name": "SafeMathUpgradeable", + "referencedDeclaration": 732, + "type": "library SafeMathUpgradeable" + }, + "id": 8651, + "name": "UserDefinedTypeName", + "src": "1865:19:66" + }, + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8652, + "name": "ElementaryTypeName", + "src": "1889:7:66" + } + ], + "id": 8653, + "name": "UsingForDirective", + "src": "1859:38:66" + }, + { + "attributes": { + "constant": false, + "functionSelector": "c9f0a2fa", + "mutability": "mutable", + "name": "wyvernExchange", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8654, + "name": "ElementaryTypeName", + "src": "1922:7:66" + } + ], + "id": 8655, + "name": "VariableDeclaration", + "src": "1922:29:66" + }, + { + "attributes": { + "constant": false, + "functionSelector": "a05f32dc", + "mutability": "mutable", + "name": "exchangeV2", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8656, + "name": "ElementaryTypeName", + "src": "1957:7:66" + } + ], + "id": 8657, + "name": "VariableDeclaration", + "src": "1957:25:66" + }, + { + "attributes": { + "constant": false, + "functionSelector": "008534f7", + "mutability": "mutable", + "name": "seaPort_1_1", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8658, + "name": "ElementaryTypeName", + "src": "1988:7:66" + } + ], + "id": 8659, + "name": "VariableDeclaration", + "src": "1988:26:66" + }, + { + "attributes": { + "constant": false, + "functionSelector": "fc40c9c7", + "mutability": "mutable", + "name": "x2y2", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8660, + "name": "ElementaryTypeName", + "src": "2020:7:66" + } + ], + "id": 8661, + "name": "VariableDeclaration", + "src": "2020:19:66" + }, + { + "attributes": { + "constant": false, + "functionSelector": "9110c777", + "mutability": "mutable", + "name": "looksRare", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8662, + "name": "ElementaryTypeName", + "src": "2045:7:66" + } + ], + "id": 8663, + "name": "VariableDeclaration", + "src": "2045:24:66" + }, + { + "attributes": { + "constant": false, + "functionSelector": "5ea1e4c9", + "mutability": "mutable", + "name": "sudoswap", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8664, + "name": "ElementaryTypeName", + "src": "2075:7:66" + } + ], + "id": 8665, + "name": "VariableDeclaration", + "src": "2075:23:66" + }, + { + "attributes": { + "constant": false, + "functionSelector": "bd4486ee", + "mutability": "mutable", + "name": "seaPort_1_4", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8666, + "name": "ElementaryTypeName", + "src": "2104:7:66" + } + ], + "id": 8667, + "name": "VariableDeclaration", + "src": "2104:26:66" + }, + { + "attributes": { + "constant": false, + "functionSelector": "3733b82b", + "mutability": "mutable", + "name": "looksRareV2", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8668, + "name": "ElementaryTypeName", + "src": "2136:7:66" + } + ], + "id": 8669, + "name": "VariableDeclaration", + "src": "2136:26:66" + }, + { + "attributes": { + "constant": false, + "functionSelector": "df6c2558", + "mutability": "mutable", + "name": "blur", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8670, + "name": "ElementaryTypeName", + "src": "2168:7:66" + } + ], + "id": 8671, + "name": "VariableDeclaration", + "src": "2168:19:66" + }, + { + "attributes": { + "constant": false, + "functionSelector": "349d6a85", + "mutability": "mutable", + "name": "seaPort_1_5", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8672, + "name": "ElementaryTypeName", + "src": "2193:7:66" + } + ], + "id": 8673, + "name": "VariableDeclaration", + "src": "2193:26:66" + }, + { + "attributes": { + "constant": false, + "functionSelector": "f66ac0cb", + "mutability": "mutable", + "name": "seaPort_1_6", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8674, + "name": "ElementaryTypeName", + "src": "2225:7:66" + } + ], + "id": 8675, + "name": "VariableDeclaration", + "src": "2225:26:66" + }, + { + "attributes": { + "constant": false, + "functionSelector": "cc236dfa", + "mutability": "mutable", + "name": "newMarket", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8676, + "name": "ElementaryTypeName", + "src": "2281:7:66" + } + ], + "id": 8677, + "name": "VariableDeclaration", + "src": "2281:24:66" + }, + { + "attributes": { + "constant": false, + "functionSelector": "3fc8cef3", + "mutability": "mutable", + "name": "weth", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "address", + "visibility": "public" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8678, + "name": "ElementaryTypeName", + "src": "2330:7:66" + } + ], + "id": 8679, + "name": "VariableDeclaration", + "src": "2330:19:66" + }, + { + "attributes": { + "constant": true, + "mutability": "constant", + "name": "UINT256_MAX", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "uint256", + "visibility": "private" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8680, + "name": "ElementaryTypeName", + "src": "2372:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "max", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "type(uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967269, + "type": "function () pure", + "value": "type" + }, + "id": 8681, + "name": "Identifier", + "src": "2411:4:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 8682, + "name": "ElementaryTypeName", + "src": "2416:7:66" + } + ], + "id": 8683, + "name": "ElementaryTypeNameExpression", + "src": "2416:7:66" + } + ], + "id": 8684, + "name": "FunctionCall", + "src": "2411:13:66" + } + ], + "id": 8685, + "name": "MemberAccess", + "src": "2411:17:66" + } + ], + "id": 8686, + "name": "VariableDeclaration", + "src": "2372:56:66" + }, + { + "attributes": { + "anonymous": false, + "name": "Execution" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "indexed": false, + "mutability": "mutable", + "name": "result", + "scope": 8690, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 8687, + "name": "ElementaryTypeName", + "src": "2451:4:66" + } + ], + "id": 8688, + "name": "VariableDeclaration", + "src": "2451:11:66" + } + ], + "id": 8689, + "name": "ParameterList", + "src": "2450:13:66" + } + ], + "id": 8690, + "name": "EventDefinition", + "src": "2435:29:66" + }, + { + "attributes": { + "anonymous": false, + "name": "MarketplaceAddressUpdated" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "indexed": true, + "mutability": "mutable", + "name": "_market", + "scope": 8696, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Markets", + "referencedDeclaration": 8709, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 8691, + "name": "UserDefinedTypeName", + "src": "2501:7:66" + } + ], + "id": 8692, + "name": "VariableDeclaration", + "src": "2501:23:66" + }, + { + "attributes": { + "constant": false, + "indexed": true, + "mutability": "mutable", + "name": "_newAddress", + "scope": 8696, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8693, + "name": "ElementaryTypeName", + "src": "2526:7:66" + } + ], + "id": 8694, + "name": "VariableDeclaration", + "src": "2526:27:66" + } + ], + "id": 8695, + "name": "ParameterList", + "src": "2500:54:66" + } + ], + "id": 8696, + "name": "EventDefinition", + "src": "2469:86:66" + }, + { + "attributes": { + "canonicalName": "RaribleExchangeWrapperUpgradeableV2.Markets", + "name": "Markets" + }, + "children": [ + { + "attributes": { + "name": "ExchangeV2" + }, + "id": 8697, + "name": "EnumValue", + "src": "2584:10:66" + }, + { + "attributes": { + "name": "WyvernExchange" + }, + "id": 8698, + "name": "EnumValue", + "src": "2608:14:66" + }, + { + "attributes": { + "name": "SeaPort_1_1" + }, + "id": 8699, + "name": "EnumValue", + "src": "2636:11:66" + }, + { + "attributes": { + "name": "X2Y2" + }, + "id": 8700, + "name": "EnumValue", + "src": "2661:4:66" + }, + { + "attributes": { + "name": "LooksRareOrders" + }, + "id": 8701, + "name": "EnumValue", + "src": "2679:15:66" + }, + { + "attributes": { + "name": "SudoSwap" + }, + "id": 8702, + "name": "EnumValue", + "src": "2708:8:66" + }, + { + "attributes": { + "name": "SeaPort_1_4" + }, + "id": 8703, + "name": "EnumValue", + "src": "2730:11:66" + }, + { + "attributes": { + "name": "LooksRareV2" + }, + "id": 8704, + "name": "EnumValue", + "src": "2755:11:66" + }, + { + "attributes": { + "name": "Blur" + }, + "id": 8705, + "name": "EnumValue", + "src": "2780:4:66" + }, + { + "attributes": { + "name": "SeaPort_1_5" + }, + "id": 8706, + "name": "EnumValue", + "src": "2798:11:66" + }, + { + "attributes": { + "name": "SeaPort_1_6" + }, + "id": 8707, + "name": "EnumValue", + "src": "2823:11:66" + }, + { + "attributes": { + "name": "NewMarket" + }, + "id": 8708, + "name": "EnumValue", + "src": "2849:9:66" + } + ], + "id": 8709, + "name": "EnumDefinition", + "src": "2561:303:66" + }, + { + "attributes": { + "canonicalName": "RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes", + "name": "AdditionalDataTypes" + }, + "children": [ + { + "attributes": { + "name": "NoAdditionalData" + }, + "id": 8710, + "name": "EnumValue", + "src": "2905:16:66" + }, + { + "attributes": { + "name": "RoyaltiesAdditionalData" + }, + "id": 8711, + "name": "EnumValue", + "src": "2931:23:66" + } + ], + "id": 8712, + "name": "EnumDefinition", + "src": "2870:90:66" + }, + { + "attributes": { + "canonicalName": "RaribleExchangeWrapperUpgradeableV2.Currencies", + "name": "Currencies" + }, + "children": [ + { + "attributes": { + "name": "ETH" + }, + "id": 8713, + "name": "EnumValue", + "src": "2992:3:66" + }, + { + "attributes": { + "name": "WETH" + }, + "id": 8714, + "name": "EnumValue", + "src": "3005:4:66" + } + ], + "id": 8715, + "name": "EnumDefinition", + "src": "2966:49:66" + }, + { + "attributes": { + "canonicalName": "RaribleExchangeWrapperUpgradeableV2.PurchaseDetails", + "name": "PurchaseDetails", + "scope": 11101, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "marketId", + "scope": 8724, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Markets", + "referencedDeclaration": 8709, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 8716, + "name": "UserDefinedTypeName", + "src": "3769:7:66" + } + ], + "id": 8717, + "name": "VariableDeclaration", + "src": "3769:16:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "amount", + "scope": 8724, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8718, + "name": "ElementaryTypeName", + "src": "3795:7:66" + } + ], + "id": 8719, + "name": "VariableDeclaration", + "src": "3795:14:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "fees", + "scope": 8724, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8720, + "name": "ElementaryTypeName", + "src": "3819:7:66" + } + ], + "id": 8721, + "name": "VariableDeclaration", + "src": "3819:12:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 8724, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 8722, + "name": "ElementaryTypeName", + "src": "3841:5:66" + } + ], + "id": 8723, + "name": "VariableDeclaration", + "src": "3841:10:66" + } + ], + "id": 8724, + "name": "StructDefinition", + "src": "3736:122:66" + }, + { + "attributes": { + "canonicalName": "RaribleExchangeWrapperUpgradeableV2.AdditionalData", + "name": "AdditionalData", + "scope": 11101, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 8730, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 8725, + "name": "ElementaryTypeName", + "src": "4124:5:66" + } + ], + "id": 8726, + "name": "VariableDeclaration", + "src": "4124:10:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "additionalRoyalties", + "scope": 8730, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8727, + "name": "ElementaryTypeName", + "src": "4144:7:66" + } + ], + "id": 8728, + "name": "ArrayTypeName", + "src": "4144:9:66" + } + ], + "id": 8729, + "name": "VariableDeclaration", + "src": "4144:29:66" + } + ], + "id": 8730, + "name": "StructDefinition", + "src": "4092:88:66" + }, + { + "attributes": { + "functionSelector": "bf628ddf", + "implemented": true, + "isConstructor": false, + "kind": "function", + "name": "__ExchangeWrapper_init_proxy", + "scope": 11101, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + "children": [ + { + "attributes": { + "text": "@notice initializes the proxy contract\n@param _marketplaces - array of addresses of the marketplaces\n@param _weth - address of the WETH erc-20 token\n@param _transferProxies - array of addresses of the transfer proxies\n@param _initialOwner - address of the owner" + }, + "id": 8731, + "name": "StructuredDocumentation", + "src": "4186:313:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_marketplaces", + "scope": 8871, + "stateVariable": false, + "storageLocation": "memory", + "type": "address[12]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "address[12]" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8732, + "name": "ElementaryTypeName", + "src": "4551:7:66" + }, + { + "attributes": { + "hexvalue": "3132", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 12", + "value": "12" + }, + "id": 8733, + "name": "Literal", + "src": "4559:2:66" + } + ], + "id": 8734, + "name": "ArrayTypeName", + "src": "4551:11:66" + } + ], + "id": 8735, + "name": "VariableDeclaration", + "src": "4551:32:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_weth", + "scope": 8871, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8736, + "name": "ElementaryTypeName", + "src": "4593:7:66" + } + ], + "id": 8737, + "name": "VariableDeclaration", + "src": "4593:13:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_transferProxies", + "scope": 8871, + "stateVariable": false, + "storageLocation": "memory", + "type": "address[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "address[]" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8738, + "name": "ElementaryTypeName", + "src": "4616:7:66" + } + ], + "id": 8739, + "name": "ArrayTypeName", + "src": "4616:9:66" + } + ], + "id": 8740, + "name": "VariableDeclaration", + "src": "4616:33:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_initialOwner", + "scope": 8871, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8741, + "name": "ElementaryTypeName", + "src": "4659:7:66" + } + ], + "id": 8742, + "name": "VariableDeclaration", + "src": "4659:21:66" + } + ], + "id": 8743, + "name": "ParameterList", + "src": "4541:145:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 8746, + "name": "ParameterList", + "src": "4706:0:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 781, + "type": "modifier ()", + "value": "initializer" + }, + "id": 8744, + "name": "Identifier", + "src": "4694:11:66" + } + ], + "id": 8745, + "name": "ModifierInvocation", + "src": "4694:11:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 29, + "type": "function ()", + "value": "__Ownable_init" + }, + "id": 8747, + "name": "Identifier", + "src": "4716:14:66" + } + ], + "id": 8748, + "name": "FunctionCall", + "src": "4716:16:66" + } + ], + "id": 8749, + "name": "ExpressionStatement", + "src": "4716:16:66" + }, + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1191, + "type": "function ()", + "value": "__ERC721Holder_init" + }, + "id": 8750, + "name": "Identifier", + "src": "4742:19:66" + } + ], + "id": 8751, + "name": "FunctionCall", + "src": "4742:21:66" + } + ], + "id": 8752, + "name": "ExpressionStatement", + "src": "4742:21:66" + }, + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 822, + "type": "function ()", + "value": "__ERC1155Holder_init" + }, + "id": 8753, + "name": "Identifier", + "src": "4773:20:66" + } + ], + "id": 8754, + "name": "FunctionCall", + "src": "4773:22:66" + } + ], + "id": 8755, + "name": "ExpressionStatement", + "src": "4773:22:66" + }, + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1679, + "type": "function ()", + "value": "__Pausable_init" + }, + "id": 8756, + "name": "Identifier", + "src": "4805:15:66" + } + ], + "id": 8757, + "name": "FunctionCall", + "src": "4805:17:66" + } + ], + "id": 8758, + "name": "ExpressionStatement", + "src": "4805:17:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8655, + "type": "address", + "value": "wyvernExchange" + }, + "id": 8759, + "name": "Identifier", + "src": "4833:14:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8735, + "type": "address[12] memory", + "value": "_marketplaces" + }, + "id": 8760, + "name": "Identifier", + "src": "4850:13:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8761, + "name": "Literal", + "src": "4864:1:66" + } + ], + "id": 8762, + "name": "IndexAccess", + "src": "4850:16:66" + } + ], + "id": 8763, + "name": "Assignment", + "src": "4833:33:66" + } + ], + "id": 8764, + "name": "ExpressionStatement", + "src": "4833:33:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8657, + "type": "address", + "value": "exchangeV2" + }, + "id": 8765, + "name": "Identifier", + "src": "4876:10:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8735, + "type": "address[12] memory", + "value": "_marketplaces" + }, + "id": 8766, + "name": "Identifier", + "src": "4889:13:66" + }, + { + "attributes": { + "hexvalue": "31", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 1", + "value": "1" + }, + "id": 8767, + "name": "Literal", + "src": "4903:1:66" + } + ], + "id": 8768, + "name": "IndexAccess", + "src": "4889:16:66" + } + ], + "id": 8769, + "name": "Assignment", + "src": "4876:29:66" + } + ], + "id": 8770, + "name": "ExpressionStatement", + "src": "4876:29:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8659, + "type": "address", + "value": "seaPort_1_1" + }, + "id": 8771, + "name": "Identifier", + "src": "4915:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8735, + "type": "address[12] memory", + "value": "_marketplaces" + }, + "id": 8772, + "name": "Identifier", + "src": "4929:13:66" + }, + { + "attributes": { + "hexvalue": "32", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 2", + "value": "2" + }, + "id": 8773, + "name": "Literal", + "src": "4943:1:66" + } + ], + "id": 8774, + "name": "IndexAccess", + "src": "4929:16:66" + } + ], + "id": 8775, + "name": "Assignment", + "src": "4915:30:66" + } + ], + "id": 8776, + "name": "ExpressionStatement", + "src": "4915:30:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8661, + "type": "address", + "value": "x2y2" + }, + "id": 8777, + "name": "Identifier", + "src": "4955:4:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8735, + "type": "address[12] memory", + "value": "_marketplaces" + }, + "id": 8778, + "name": "Identifier", + "src": "4962:13:66" + }, + { + "attributes": { + "hexvalue": "33", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 3", + "value": "3" + }, + "id": 8779, + "name": "Literal", + "src": "4976:1:66" + } + ], + "id": 8780, + "name": "IndexAccess", + "src": "4962:16:66" + } + ], + "id": 8781, + "name": "Assignment", + "src": "4955:23:66" + } + ], + "id": 8782, + "name": "ExpressionStatement", + "src": "4955:23:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8663, + "type": "address", + "value": "looksRare" + }, + "id": 8783, + "name": "Identifier", + "src": "4988:9:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8735, + "type": "address[12] memory", + "value": "_marketplaces" + }, + "id": 8784, + "name": "Identifier", + "src": "5000:13:66" + }, + { + "attributes": { + "hexvalue": "34", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 4", + "value": "4" + }, + "id": 8785, + "name": "Literal", + "src": "5014:1:66" + } + ], + "id": 8786, + "name": "IndexAccess", + "src": "5000:16:66" + } + ], + "id": 8787, + "name": "Assignment", + "src": "4988:28:66" + } + ], + "id": 8788, + "name": "ExpressionStatement", + "src": "4988:28:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8665, + "type": "address", + "value": "sudoswap" + }, + "id": 8789, + "name": "Identifier", + "src": "5026:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8735, + "type": "address[12] memory", + "value": "_marketplaces" + }, + "id": 8790, + "name": "Identifier", + "src": "5037:13:66" + }, + { + "attributes": { + "hexvalue": "35", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 5", + "value": "5" + }, + "id": 8791, + "name": "Literal", + "src": "5051:1:66" + } + ], + "id": 8792, + "name": "IndexAccess", + "src": "5037:16:66" + } + ], + "id": 8793, + "name": "Assignment", + "src": "5026:27:66" + } + ], + "id": 8794, + "name": "ExpressionStatement", + "src": "5026:27:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8667, + "type": "address", + "value": "seaPort_1_4" + }, + "id": 8795, + "name": "Identifier", + "src": "5063:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8735, + "type": "address[12] memory", + "value": "_marketplaces" + }, + "id": 8796, + "name": "Identifier", + "src": "5077:13:66" + }, + { + "attributes": { + "hexvalue": "36", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 6", + "value": "6" + }, + "id": 8797, + "name": "Literal", + "src": "5091:1:66" + } + ], + "id": 8798, + "name": "IndexAccess", + "src": "5077:16:66" + } + ], + "id": 8799, + "name": "Assignment", + "src": "5063:30:66" + } + ], + "id": 8800, + "name": "ExpressionStatement", + "src": "5063:30:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8669, + "type": "address", + "value": "looksRareV2" + }, + "id": 8801, + "name": "Identifier", + "src": "5103:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8735, + "type": "address[12] memory", + "value": "_marketplaces" + }, + "id": 8802, + "name": "Identifier", + "src": "5117:13:66" + }, + { + "attributes": { + "hexvalue": "37", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 7", + "value": "7" + }, + "id": 8803, + "name": "Literal", + "src": "5131:1:66" + } + ], + "id": 8804, + "name": "IndexAccess", + "src": "5117:16:66" + } + ], + "id": 8805, + "name": "Assignment", + "src": "5103:30:66" + } + ], + "id": 8806, + "name": "ExpressionStatement", + "src": "5103:30:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8671, + "type": "address", + "value": "blur" + }, + "id": 8807, + "name": "Identifier", + "src": "5143:4:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8735, + "type": "address[12] memory", + "value": "_marketplaces" + }, + "id": 8808, + "name": "Identifier", + "src": "5150:13:66" + }, + { + "attributes": { + "hexvalue": "38", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 8", + "value": "8" + }, + "id": 8809, + "name": "Literal", + "src": "5164:1:66" + } + ], + "id": 8810, + "name": "IndexAccess", + "src": "5150:16:66" + } + ], + "id": 8811, + "name": "Assignment", + "src": "5143:23:66" + } + ], + "id": 8812, + "name": "ExpressionStatement", + "src": "5143:23:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8673, + "type": "address", + "value": "seaPort_1_5" + }, + "id": 8813, + "name": "Identifier", + "src": "5176:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8735, + "type": "address[12] memory", + "value": "_marketplaces" + }, + "id": 8814, + "name": "Identifier", + "src": "5190:13:66" + }, + { + "attributes": { + "hexvalue": "39", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 9", + "value": "9" + }, + "id": 8815, + "name": "Literal", + "src": "5204:1:66" + } + ], + "id": 8816, + "name": "IndexAccess", + "src": "5190:16:66" + } + ], + "id": 8817, + "name": "Assignment", + "src": "5176:30:66" + } + ], + "id": 8818, + "name": "ExpressionStatement", + "src": "5176:30:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8675, + "type": "address", + "value": "seaPort_1_6" + }, + "id": 8819, + "name": "Identifier", + "src": "5216:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8735, + "type": "address[12] memory", + "value": "_marketplaces" + }, + "id": 8820, + "name": "Identifier", + "src": "5230:13:66" + }, + { + "attributes": { + "hexvalue": "3130", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 10", + "value": "10" + }, + "id": 8821, + "name": "Literal", + "src": "5244:2:66" + } + ], + "id": 8822, + "name": "IndexAccess", + "src": "5230:17:66" + } + ], + "id": 8823, + "name": "Assignment", + "src": "5216:31:66" + } + ], + "id": 8824, + "name": "ExpressionStatement", + "src": "5216:31:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8677, + "type": "address", + "value": "newMarket" + }, + "id": 8825, + "name": "Identifier", + "src": "5257:9:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8735, + "type": "address[12] memory", + "value": "_marketplaces" + }, + "id": 8826, + "name": "Identifier", + "src": "5269:13:66" + }, + { + "attributes": { + "hexvalue": "3131", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 11", + "value": "11" + }, + "id": 8827, + "name": "Literal", + "src": "5283:2:66" + } + ], + "id": 8828, + "name": "IndexAccess", + "src": "5269:17:66" + } + ], + "id": 8829, + "name": "Assignment", + "src": "5257:29:66" + } + ], + "id": 8830, + "name": "ExpressionStatement", + "src": "5257:29:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8679, + "type": "address", + "value": "weth" + }, + "id": 8831, + "name": "Identifier", + "src": "5297:4:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8737, + "type": "address", + "value": "_weth" + }, + "id": 8832, + "name": "Identifier", + "src": "5304:5:66" + } + ], + "id": 8833, + "name": "Assignment", + "src": "5297:12:66" + } + ], + "id": 8834, + "name": "ExpressionStatement", + "src": "5297:12:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8836 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 8865, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8835, + "name": "ElementaryTypeName", + "src": "5325:7:66" + } + ], + "id": 8836, + "name": "VariableDeclaration", + "src": "5325:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8837, + "name": "Literal", + "src": "5337:1:66" + } + ], + "id": 8838, + "name": "VariableDeclarationStatement", + "src": "5325:13:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8836, + "type": "uint256", + "value": "i" + }, + "id": 8839, + "name": "Identifier", + "src": "5340:1:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8740, + "type": "address[] memory", + "value": "_transferProxies" + }, + "id": 8840, + "name": "Identifier", + "src": "5344:16:66" + } + ], + "id": 8841, + "name": "MemberAccess", + "src": "5344:23:66" + } + ], + "id": 8842, + "name": "BinaryOperation", + "src": "5340:27:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8836, + "type": "uint256", + "value": "i" + }, + "id": 8843, + "name": "Identifier", + "src": "5371:1:66" + } + ], + "id": 8844, + "name": "UnaryOperation", + "src": "5369:3:66" + } + ], + "id": 8845, + "name": "ExpressionStatement", + "src": "5369:3:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8679, + "type": "address", + "value": "weth" + }, + "id": 8846, + "name": "Identifier", + "src": "5392:4:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 8847, + "name": "ElementaryTypeName", + "src": "5400:7:66" + } + ], + "id": 8848, + "name": "ElementaryTypeNameExpression", + "src": "5400:7:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8849, + "name": "Literal", + "src": "5408:1:66" + } + ], + "id": 8850, + "name": "FunctionCall", + "src": "5400:10:66" + } + ], + "id": 8851, + "name": "BinaryOperation", + "src": "5392:18:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "approve", + "referencedDeclaration": 1142, + "type": "function (address,uint256) external returns (bool)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 8852, + "name": "Identifier", + "src": "5430:17:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8679, + "type": "address", + "value": "weth" + }, + "id": 8853, + "name": "Identifier", + "src": "5448:4:66" + } + ], + "id": 8854, + "name": "FunctionCall", + "src": "5430:23:66" + } + ], + "id": 8855, + "name": "MemberAccess", + "src": "5430:31:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8740, + "type": "address[] memory", + "value": "_transferProxies" + }, + "id": 8856, + "name": "Identifier", + "src": "5462:16:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8836, + "type": "uint256", + "value": "i" + }, + "id": 8857, + "name": "Identifier", + "src": "5479:1:66" + } + ], + "id": 8858, + "name": "IndexAccess", + "src": "5462:19:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8686, + "type": "uint256", + "value": "UINT256_MAX" + }, + "id": 8859, + "name": "Identifier", + "src": "5483:11:66" + } + ], + "id": 8860, + "name": "FunctionCall", + "src": "5430:65:66" + } + ], + "id": 8861, + "name": "ExpressionStatement", + "src": "5430:65:66" + } + ], + "id": 8862, + "name": "Block", + "src": "5412:98:66" + } + ], + "id": 8863, + "name": "IfStatement", + "src": "5388:122:66" + } + ], + "id": 8864, + "name": "Block", + "src": "5374:146:66" + } + ], + "id": 8865, + "name": "ForStatement", + "src": "5320:200:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 125, + "type": "function (address)", + "value": "transferOwnership" + }, + "id": 8866, + "name": "Identifier", + "src": "5530:17:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8742, + "type": "address", + "value": "_initialOwner" + }, + "id": 8867, + "name": "Identifier", + "src": "5548:13:66" + } + ], + "id": 8868, + "name": "FunctionCall", + "src": "5530:32:66" + } + ], + "id": 8869, + "name": "ExpressionStatement", + "src": "5530:32:66" + } + ], + "id": 8870, + "name": "Block", + "src": "4706:863:66" + } + ], + "id": 8871, + "name": "FunctionDefinition", + "src": "4504:1065:66" + }, + { + "attributes": { + "functionSelector": "8b879649", + "implemented": true, + "isConstructor": false, + "kind": "function", + "name": "__initializeNewMarket", + "scope": 11101, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "attributes": { + "text": "@notice sets the address of the new marketplace\n@param _newMarket - address of the new marketplace" + }, + "id": 8872, + "name": "StructuredDocumentation", + "src": "5575:126:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_newMarket", + "scope": 8894, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8873, + "name": "ElementaryTypeName", + "src": "5737:7:66" + } + ], + "id": 8874, + "name": "VariableDeclaration", + "src": "5737:18:66" + } + ], + "id": 8875, + "name": "ParameterList", + "src": "5736:20:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 8878, + "name": "ParameterList", + "src": "5776:0:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 75, + "type": "modifier ()", + "value": "onlyOwner" + }, + "id": 8876, + "name": "Identifier", + "src": "5766:9:66" + } + ], + "id": 8877, + "name": "ModifierInvocation", + "src": "5766:9:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_e7f1a9d4424e262167e7334a51cbb1e41a967f417508d8063df52487d1f973b8", + "typeString": "literal_string \"NewMarket address is already set\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 8879, + "name": "Identifier", + "src": "5786:7:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8677, + "type": "address", + "value": "newMarket" + }, + "id": 8880, + "name": "Identifier", + "src": "5794:9:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 8881, + "name": "ElementaryTypeName", + "src": "5807:7:66" + } + ], + "id": 8882, + "name": "ElementaryTypeNameExpression", + "src": "5807:7:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8883, + "name": "Literal", + "src": "5815:1:66" + } + ], + "id": 8884, + "name": "FunctionCall", + "src": "5807:10:66" + } + ], + "id": 8885, + "name": "BinaryOperation", + "src": "5794:23:66" + }, + { + "attributes": { + "hexvalue": "4e65774d61726b6574206164647265737320697320616c726561647920736574", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"NewMarket address is already set\"", + "value": "NewMarket address is already set" + }, + "id": 8886, + "name": "Literal", + "src": "5819:34:66" + } + ], + "id": 8887, + "name": "FunctionCall", + "src": "5786:68:66" + } + ], + "id": 8888, + "name": "ExpressionStatement", + "src": "5786:68:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8677, + "type": "address", + "value": "newMarket" + }, + "id": 8889, + "name": "Identifier", + "src": "5864:9:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8874, + "type": "address", + "value": "_newMarket" + }, + "id": 8890, + "name": "Identifier", + "src": "5876:10:66" + } + ], + "id": 8891, + "name": "Assignment", + "src": "5864:22:66" + } + ], + "id": 8892, + "name": "ExpressionStatement", + "src": "5864:22:66" + } + ], + "id": 8893, + "name": "Block", + "src": "5776:117:66" + } + ], + "id": 8894, + "name": "FunctionDefinition", + "src": "5706:187:66" + }, + { + "attributes": { + "functionSelector": "86496e7a", + "implemented": true, + "isConstructor": false, + "kind": "function", + "name": "singlePurchase", + "scope": 11101, + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "attributes": { + "text": "@notice executes a single purchase\n@param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct)\n@param feeRecipientFirst - address of the first fee recipient\n@param feeRecipientSecond - address of the second fee recipient" + }, + "id": 8895, + "name": "StructuredDocumentation", + "src": "5899:295:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "purchaseDetails", + "scope": 9019, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "PurchaseDetails", + "referencedDeclaration": 8724, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + }, + "id": 8896, + "name": "UserDefinedTypeName", + "src": "6232:15:66" + } + ], + "id": 8897, + "name": "VariableDeclaration", + "src": "6232:38:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeRecipientFirst", + "scope": 9019, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8898, + "name": "ElementaryTypeName", + "src": "6280:7:66" + } + ], + "id": 8899, + "name": "VariableDeclaration", + "src": "6280:25:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeRecipientSecond", + "scope": 9019, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 8900, + "name": "ElementaryTypeName", + "src": "6315:7:66" + } + ], + "id": 8901, + "name": "VariableDeclaration", + "src": "6315:26:66" + } + ], + "id": 8902, + "name": "ParameterList", + "src": "6222:125:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 8905, + "name": "ParameterList", + "src": "6379:0:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1710, + "type": "modifier ()", + "value": "whenNotPaused" + }, + "id": 8903, + "name": "Identifier", + "src": "6365:13:66" + } + ], + "id": 8904, + "name": "ModifierInvocation", + "src": "6365:13:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 8907 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "wethAmountNeeded", + "scope": 9018, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8906, + "name": "ElementaryTypeName", + "src": "6436:7:66" + } + ], + "id": 8907, + "name": "VariableDeclaration", + "src": "6436:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10908, + "type": "function (struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory) pure returns (uint256)", + "value": "getAmountOfWethForPurchase" + }, + "id": 8908, + "name": "Identifier", + "src": "6463:26:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8897, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8909, + "name": "Identifier", + "src": "6490:15:66" + } + ], + "id": 8910, + "name": "FunctionCall", + "src": "6463:43:66" + } + ], + "id": 8911, + "name": "VariableDeclarationStatement", + "src": "6436:70:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8907, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 8912, + "name": "Identifier", + "src": "6574:16:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 8913, + "name": "Literal", + "src": "6593:1:66" + } + ], + "id": 8914, + "name": "BinaryOperation", + "src": "6574:20:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transferFrom", + "referencedDeclaration": 1154, + "type": "function (address,address,uint256) external returns (bool)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 8915, + "name": "Identifier", + "src": "6610:17:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8679, + "type": "address", + "value": "weth" + }, + "id": 8916, + "name": "Identifier", + "src": "6628:4:66" + } + ], + "id": 8917, + "name": "FunctionCall", + "src": "6610:23:66" + } + ], + "id": 8918, + "name": "MemberAccess", + "src": "6610:36:66" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 8919, + "name": "Identifier", + "src": "6647:10:66" + } + ], + "id": 8920, + "name": "FunctionCall", + "src": "6647:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 8921, + "name": "ElementaryTypeName", + "src": "6661:7:66" + } + ], + "id": 8922, + "name": "ElementaryTypeNameExpression", + "src": "6661:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeableV2", + "value": "this" + }, + "id": 8923, + "name": "Identifier", + "src": "6669:4:66" + } + ], + "id": 8924, + "name": "FunctionCall", + "src": "6661:13:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8907, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 8925, + "name": "Identifier", + "src": "6676:16:66" + } + ], + "id": 8926, + "name": "FunctionCall", + "src": "6610:83:66" + } + ], + "id": 8927, + "name": "ExpressionStatement", + "src": "6610:83:66" + } + ], + "id": 8928, + "name": "Block", + "src": "6596:108:66" + } + ], + "id": 8929, + "name": "IfStatement", + "src": "6570:134:66" + }, + { + "attributes": { + "assignments": [ + 8931 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "currency", + "scope": 9018, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Currencies", + "referencedDeclaration": 8715, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "id": 8930, + "name": "UserDefinedTypeName", + "src": "6714:10:66" + } + ], + "id": 8931, + "name": "VariableDeclaration", + "src": "6714:19:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10511, + "type": "function (uint256) pure returns (enum RaribleExchangeWrapperUpgradeableV2.Currencies)", + "value": "getCurrency" + }, + "id": 8932, + "name": "Identifier", + "src": "6736:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8721, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8897, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8933, + "name": "Identifier", + "src": "6748:15:66" + } + ], + "id": 8934, + "name": "MemberAccess", + "src": "6748:20:66" + } + ], + "id": 8935, + "name": "FunctionCall", + "src": "6736:33:66" + } + ], + "id": 8936, + "name": "VariableDeclarationStatement", + "src": "6714:55:66" + }, + { + "attributes": { + "assignments": [ + 8938 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9018, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 8937, + "name": "ElementaryTypeName", + "src": "6779:4:66" + } + ], + "id": 8938, + "name": "VariableDeclaration", + "src": "6779:12:66" + } + ], + "id": 8939, + "name": "VariableDeclarationStatement", + "src": "6779:12:66" + }, + { + "attributes": { + "assignments": [ + 8941 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "firstFeeAmount", + "scope": 9018, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8940, + "name": "ElementaryTypeName", + "src": "6801:7:66" + } + ], + "id": 8941, + "name": "VariableDeclaration", + "src": "6801:22:66" + } + ], + "id": 8942, + "name": "VariableDeclarationStatement", + "src": "6801:22:66" + }, + { + "attributes": { + "assignments": [ + 8944 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "secondFeeAmount", + "scope": 9018, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 8943, + "name": "ElementaryTypeName", + "src": "6833:7:66" + } + ], + "id": 8944, + "name": "VariableDeclaration", + "src": "6833:23:66" + } + ], + "id": 8945, + "name": "VariableDeclarationStatement", + "src": "6833:23:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8931, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies", + "value": "currency" + }, + "id": 8946, + "name": "Identifier", + "src": "6871:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "ETH", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8715, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Currencies)", + "value": "Currencies" + }, + "id": 8947, + "name": "Identifier", + "src": "6883:10:66" + } + ], + "id": 8948, + "name": "MemberAccess", + "src": "6883:14:66" + } + ], + "id": 8949, + "name": "BinaryOperation", + "src": "6871:26:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "tuple()" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "tuple(bool,uint256,uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8938, + "type": "bool", + "value": "success" + }, + "id": 8950, + "name": "Identifier", + "src": "6914:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8941, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 8951, + "name": "Identifier", + "src": "6923:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8944, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 8952, + "name": "Identifier", + "src": "6939:15:66" + } + ], + "id": 8953, + "name": "TupleExpression", + "src": "6913:42:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10102, + "type": "function (struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory,bool) returns (bool,uint256,uint256)", + "value": "purchase" + }, + "id": 8954, + "name": "Identifier", + "src": "6958:8:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8897, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8955, + "name": "Identifier", + "src": "6967:15:66" + }, + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 8956, + "name": "Literal", + "src": "6984:5:66" + } + ], + "id": 8957, + "name": "FunctionCall", + "src": "6958:32:66" + } + ], + "id": 8958, + "name": "Assignment", + "src": "6913:77:66" + } + ], + "id": 8959, + "name": "ExpressionStatement", + "src": "6913:77:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10361, + "type": "function (uint256,address)", + "value": "transferFeeETH" + }, + "id": 8960, + "name": "Identifier", + "src": "7004:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8941, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 8961, + "name": "Identifier", + "src": "7019:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8899, + "type": "address", + "value": "feeRecipientFirst" + }, + "id": 8962, + "name": "Identifier", + "src": "7035:17:66" + } + ], + "id": 8963, + "name": "FunctionCall", + "src": "7004:49:66" + } + ], + "id": 8964, + "name": "ExpressionStatement", + "src": "7004:49:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10361, + "type": "function (uint256,address)", + "value": "transferFeeETH" + }, + "id": 8965, + "name": "Identifier", + "src": "7067:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8944, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 8966, + "name": "Identifier", + "src": "7082:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8901, + "type": "address", + "value": "feeRecipientSecond" + }, + "id": 8967, + "name": "Identifier", + "src": "7099:18:66" + } + ], + "id": 8968, + "name": "FunctionCall", + "src": "7067:51:66" + } + ], + "id": 8969, + "name": "ExpressionStatement", + "src": "7067:51:66" + } + ], + "id": 8970, + "name": "Block", + "src": "6899:230:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8931, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies", + "value": "currency" + }, + "id": 8971, + "name": "Identifier", + "src": "7139:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "WETH", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8715, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Currencies)", + "value": "Currencies" + }, + "id": 8972, + "name": "Identifier", + "src": "7151:10:66" + } + ], + "id": 8973, + "name": "MemberAccess", + "src": "7151:15:66" + } + ], + "id": 8974, + "name": "BinaryOperation", + "src": "7139:27:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "tuple()" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "tuple(bool,uint256,uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8938, + "type": "bool", + "value": "success" + }, + "id": 8975, + "name": "Identifier", + "src": "7183:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8941, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 8976, + "name": "Identifier", + "src": "7192:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8944, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 8977, + "name": "Identifier", + "src": "7208:15:66" + } + ], + "id": 8978, + "name": "TupleExpression", + "src": "7182:42:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10333, + "type": "function (struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory,bool) returns (bool,uint256,uint256)", + "value": "purchaseWETH" + }, + "id": 8979, + "name": "Identifier", + "src": "7227:12:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8897, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 8980, + "name": "Identifier", + "src": "7240:15:66" + }, + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 8981, + "name": "Literal", + "src": "7257:5:66" + } + ], + "id": 8982, + "name": "FunctionCall", + "src": "7227:36:66" + } + ], + "id": 8983, + "name": "Assignment", + "src": "7182:81:66" + } + ], + "id": 8984, + "name": "ExpressionStatement", + "src": "7182:81:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10390, + "type": "function (uint256,address)", + "value": "transferFeeWETH" + }, + "id": 8985, + "name": "Identifier", + "src": "7277:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8941, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 8986, + "name": "Identifier", + "src": "7293:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8899, + "type": "address", + "value": "feeRecipientFirst" + }, + "id": 8987, + "name": "Identifier", + "src": "7309:17:66" + } + ], + "id": 8988, + "name": "FunctionCall", + "src": "7277:50:66" + } + ], + "id": 8989, + "name": "ExpressionStatement", + "src": "7277:50:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10390, + "type": "function (uint256,address)", + "value": "transferFeeWETH" + }, + "id": 8990, + "name": "Identifier", + "src": "7341:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8944, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 8991, + "name": "Identifier", + "src": "7357:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8901, + "type": "address", + "value": "feeRecipientSecond" + }, + "id": 8992, + "name": "Identifier", + "src": "7374:18:66" + } + ], + "id": 8993, + "name": "FunctionCall", + "src": "7341:52:66" + } + ], + "id": 8994, + "name": "ExpressionStatement", + "src": "7341:52:66" + } + ], + "id": 8995, + "name": "Block", + "src": "7168:236:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090", + "typeString": "literal_string \"Unknown purchase currency\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 8996, + "name": "Identifier", + "src": "7424:6:66" + }, + { + "attributes": { + "hexvalue": "556e6b6e6f776e2070757263686173652063757272656e6379", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Unknown purchase currency\"", + "value": "Unknown purchase currency" + }, + "id": 8997, + "name": "Literal", + "src": "7431:27:66" + } + ], + "id": 8998, + "name": "FunctionCall", + "src": "7424:35:66" + } + ], + "id": 8999, + "name": "ExpressionStatement", + "src": "7424:35:66" + } + ], + "id": 9000, + "name": "Block", + "src": "7410:60:66" + } + ], + "id": 9001, + "name": "IfStatement", + "src": "7135:335:66" + } + ], + "id": 9002, + "name": "IfStatement", + "src": "6867:603:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8690, + "type": "function (bool)", + "value": "Execution" + }, + "id": 9003, + "name": "Identifier", + "src": "7485:9:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8938, + "type": "bool", + "value": "success" + }, + "id": 9004, + "name": "Identifier", + "src": "7495:7:66" + } + ], + "id": 9005, + "name": "FunctionCall", + "src": "7485:18:66" + } + ], + "id": 9006, + "name": "EmitStatement", + "src": "7480:23:66" + }, + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10417, + "type": "function ()", + "value": "transferChange" + }, + "id": 9007, + "name": "Identifier", + "src": "7544:14:66" + } + ], + "id": 9008, + "name": "FunctionCall", + "src": "7544:16:66" + } + ], + "id": 9009, + "name": "ExpressionStatement", + "src": "7544:16:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8907, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 9010, + "name": "Identifier", + "src": "7605:16:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9011, + "name": "Literal", + "src": "7624:1:66" + } + ], + "id": 9012, + "name": "BinaryOperation", + "src": "7605:20:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10448, + "type": "function ()", + "value": "transferChangeWETH" + }, + "id": 9013, + "name": "Identifier", + "src": "7641:18:66" + } + ], + "id": 9014, + "name": "FunctionCall", + "src": "7641:20:66" + } + ], + "id": 9015, + "name": "ExpressionStatement", + "src": "7641:20:66" + } + ], + "id": 9016, + "name": "Block", + "src": "7627:45:66" + } + ], + "id": 9017, + "name": "IfStatement", + "src": "7601:71:66" + } + ], + "id": 9018, + "name": "Block", + "src": "6379:1299:66" + } + ], + "id": 9019, + "name": "FunctionDefinition", + "src": "6199:1479:66" + }, + { + "attributes": { + "functionSelector": "b94ee332", + "implemented": true, + "isConstructor": false, + "kind": "function", + "name": "bulkPurchase", + "scope": 11101, + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "attributes": { + "text": "@notice executes an array of purchases\n@param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct)\n@param feeRecipientFirst - address of the first fee recipient\n@param feeRecipientSecond - address of the second fee recipient\n@param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch" + }, + "id": 9020, + "name": "StructuredDocumentation", + "src": "7684:448:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "purchaseDetails", + "scope": 9246, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails[]" + }, + "children": [ + { + "attributes": { + "name": "PurchaseDetails", + "referencedDeclaration": 8724, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + }, + "id": 9021, + "name": "UserDefinedTypeName", + "src": "8169:15:66" + } + ], + "id": 9022, + "name": "ArrayTypeName", + "src": "8169:17:66" + } + ], + "id": 9023, + "name": "VariableDeclaration", + "src": "8169:40:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeRecipientFirst", + "scope": 9246, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 9024, + "name": "ElementaryTypeName", + "src": "8219:7:66" + } + ], + "id": 9025, + "name": "VariableDeclaration", + "src": "8219:25:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeRecipientSecond", + "scope": 9246, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 9026, + "name": "ElementaryTypeName", + "src": "8254:7:66" + } + ], + "id": 9027, + "name": "VariableDeclaration", + "src": "8254:26:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "allowFail", + "scope": 9246, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9028, + "name": "ElementaryTypeName", + "src": "8290:4:66" + } + ], + "id": 9029, + "name": "VariableDeclaration", + "src": "8290:14:66" + } + ], + "id": 9030, + "name": "ParameterList", + "src": "8159:151:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 9033, + "name": "ParameterList", + "src": "8342:0:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1710, + "type": "modifier ()", + "value": "whenNotPaused" + }, + "id": 9031, + "name": "Identifier", + "src": "8328:13:66" + } + ], + "id": 9032, + "name": "ModifierInvocation", + "src": "8328:13:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9035 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "sumFirstFeesETH", + "scope": 9245, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9034, + "name": "ElementaryTypeName", + "src": "8352:7:66" + } + ], + "id": 9035, + "name": "VariableDeclaration", + "src": "8352:23:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9036, + "name": "Literal", + "src": "8378:1:66" + } + ], + "id": 9037, + "name": "VariableDeclarationStatement", + "src": "8352:27:66" + }, + { + "attributes": { + "assignments": [ + 9039 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "sumSecondFeesETH", + "scope": 9245, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9038, + "name": "ElementaryTypeName", + "src": "8389:7:66" + } + ], + "id": 9039, + "name": "VariableDeclaration", + "src": "8389:24:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9040, + "name": "Literal", + "src": "8416:1:66" + } + ], + "id": 9041, + "name": "VariableDeclarationStatement", + "src": "8389:28:66" + }, + { + "attributes": { + "assignments": [ + 9043 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "sumFirstFeesWETH", + "scope": 9245, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9042, + "name": "ElementaryTypeName", + "src": "8427:7:66" + } + ], + "id": 9043, + "name": "VariableDeclaration", + "src": "8427:24:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9044, + "name": "Literal", + "src": "8454:1:66" + } + ], + "id": 9045, + "name": "VariableDeclarationStatement", + "src": "8427:28:66" + }, + { + "attributes": { + "assignments": [ + 9047 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "sumSecondFeesWETH", + "scope": 9245, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9046, + "name": "ElementaryTypeName", + "src": "8465:7:66" + } + ], + "id": 9047, + "name": "VariableDeclaration", + "src": "8465:25:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9048, + "name": "Literal", + "src": "8493:1:66" + } + ], + "id": 9049, + "name": "VariableDeclarationStatement", + "src": "8465:29:66" + }, + { + "attributes": { + "assignments": [ + 9051 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "result", + "scope": 9245, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9050, + "name": "ElementaryTypeName", + "src": "8504:4:66" + } + ], + "id": 9051, + "name": "VariableDeclaration", + "src": "8504:11:66" + }, + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9052, + "name": "Literal", + "src": "8518:5:66" + } + ], + "id": 9053, + "name": "VariableDeclarationStatement", + "src": "8504:19:66" + }, + { + "attributes": { + "assignments": [ + 9055 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "wethAmountNeeded", + "scope": 9245, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9054, + "name": "ElementaryTypeName", + "src": "8581:7:66" + } + ], + "id": 9055, + "name": "VariableDeclaration", + "src": "8581:24:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9056, + "name": "Literal", + "src": "8608:1:66" + } + ], + "id": 9057, + "name": "VariableDeclarationStatement", + "src": "8581:28:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9059 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 9080, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9058, + "name": "ElementaryTypeName", + "src": "8624:7:66" + } + ], + "id": 9059, + "name": "VariableDeclaration", + "src": "8624:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9060, + "name": "Literal", + "src": "8636:1:66" + } + ], + "id": 9061, + "name": "VariableDeclarationStatement", + "src": "8624:13:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9059, + "type": "uint256", + "value": "i" + }, + "id": 9062, + "name": "Identifier", + "src": "8639:1:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9023, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory[] memory", + "value": "purchaseDetails" + }, + "id": 9063, + "name": "Identifier", + "src": "8643:15:66" + } + ], + "id": 9064, + "name": "MemberAccess", + "src": "8643:22:66" + } + ], + "id": 9065, + "name": "BinaryOperation", + "src": "8639:26:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9059, + "type": "uint256", + "value": "i" + }, + "id": 9066, + "name": "Identifier", + "src": "8669:1:66" + } + ], + "id": 9067, + "name": "UnaryOperation", + "src": "8667:3:66" + } + ], + "id": 9068, + "name": "ExpressionStatement", + "src": "8667:3:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9055, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 9069, + "name": "Identifier", + "src": "8686:16:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9055, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 9070, + "name": "Identifier", + "src": "8705:16:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10908, + "type": "function (struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory) pure returns (uint256)", + "value": "getAmountOfWethForPurchase" + }, + "id": 9071, + "name": "Identifier", + "src": "8724:26:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9023, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory[] memory", + "value": "purchaseDetails" + }, + "id": 9072, + "name": "Identifier", + "src": "8751:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9059, + "type": "uint256", + "value": "i" + }, + "id": 9073, + "name": "Identifier", + "src": "8767:1:66" + } + ], + "id": 9074, + "name": "IndexAccess", + "src": "8751:18:66" + } + ], + "id": 9075, + "name": "FunctionCall", + "src": "8724:46:66" + } + ], + "id": 9076, + "name": "BinaryOperation", + "src": "8705:65:66" + } + ], + "id": 9077, + "name": "Assignment", + "src": "8686:84:66" + } + ], + "id": 9078, + "name": "ExpressionStatement", + "src": "8686:84:66" + } + ], + "id": 9079, + "name": "Block", + "src": "8672:109:66" + } + ], + "id": 9080, + "name": "ForStatement", + "src": "8619:162:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9055, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 9081, + "name": "Identifier", + "src": "8848:16:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9082, + "name": "Literal", + "src": "8867:1:66" + } + ], + "id": 9083, + "name": "BinaryOperation", + "src": "8848:20:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transferFrom", + "referencedDeclaration": 1154, + "type": "function (address,address,uint256) external returns (bool)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 9084, + "name": "Identifier", + "src": "8884:17:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8679, + "type": "address", + "value": "weth" + }, + "id": 9085, + "name": "Identifier", + "src": "8902:4:66" + } + ], + "id": 9086, + "name": "FunctionCall", + "src": "8884:23:66" + } + ], + "id": 9087, + "name": "MemberAccess", + "src": "8884:36:66" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 9088, + "name": "Identifier", + "src": "8921:10:66" + } + ], + "id": 9089, + "name": "FunctionCall", + "src": "8921:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9090, + "name": "ElementaryTypeName", + "src": "8935:7:66" + } + ], + "id": 9091, + "name": "ElementaryTypeNameExpression", + "src": "8935:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeableV2", + "value": "this" + }, + "id": 9092, + "name": "Identifier", + "src": "8943:4:66" + } + ], + "id": 9093, + "name": "FunctionCall", + "src": "8935:13:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9055, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 9094, + "name": "Identifier", + "src": "8950:16:66" + } + ], + "id": 9095, + "name": "FunctionCall", + "src": "8884:83:66" + } + ], + "id": 9096, + "name": "ExpressionStatement", + "src": "8884:83:66" + } + ], + "id": 9097, + "name": "Block", + "src": "8870:108:66" + } + ], + "id": 9098, + "name": "IfStatement", + "src": "8844:134:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9100 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 9208, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9099, + "name": "ElementaryTypeName", + "src": "8993:7:66" + } + ], + "id": 9100, + "name": "VariableDeclaration", + "src": "8993:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9101, + "name": "Literal", + "src": "9005:1:66" + } + ], + "id": 9102, + "name": "VariableDeclarationStatement", + "src": "8993:13:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9100, + "type": "uint256", + "value": "i" + }, + "id": 9103, + "name": "Identifier", + "src": "9008:1:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9023, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory[] memory", + "value": "purchaseDetails" + }, + "id": 9104, + "name": "Identifier", + "src": "9012:15:66" + } + ], + "id": 9105, + "name": "MemberAccess", + "src": "9012:22:66" + } + ], + "id": 9106, + "name": "BinaryOperation", + "src": "9008:26:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9100, + "type": "uint256", + "value": "i" + }, + "id": 9107, + "name": "Identifier", + "src": "9038:1:66" + } + ], + "id": 9108, + "name": "UnaryOperation", + "src": "9036:3:66" + } + ], + "id": 9109, + "name": "ExpressionStatement", + "src": "9036:3:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9111 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "currency", + "scope": 9207, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Currencies", + "referencedDeclaration": 8715, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "id": 9110, + "name": "UserDefinedTypeName", + "src": "9055:10:66" + } + ], + "id": 9111, + "name": "VariableDeclaration", + "src": "9055:19:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10511, + "type": "function (uint256) pure returns (enum RaribleExchangeWrapperUpgradeableV2.Currencies)", + "value": "getCurrency" + }, + "id": 9112, + "name": "Identifier", + "src": "9077:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8721, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9023, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory[] memory", + "value": "purchaseDetails" + }, + "id": 9113, + "name": "Identifier", + "src": "9089:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9100, + "type": "uint256", + "value": "i" + }, + "id": 9114, + "name": "Identifier", + "src": "9105:1:66" + } + ], + "id": 9115, + "name": "IndexAccess", + "src": "9089:18:66" + } + ], + "id": 9116, + "name": "MemberAccess", + "src": "9089:23:66" + } + ], + "id": 9117, + "name": "FunctionCall", + "src": "9077:36:66" + } + ], + "id": 9118, + "name": "VariableDeclarationStatement", + "src": "9055:58:66" + }, + { + "attributes": { + "assignments": [ + 9120 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9207, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9119, + "name": "ElementaryTypeName", + "src": "9127:4:66" + } + ], + "id": 9120, + "name": "VariableDeclaration", + "src": "9127:12:66" + } + ], + "id": 9121, + "name": "VariableDeclarationStatement", + "src": "9127:12:66" + }, + { + "attributes": { + "assignments": [ + 9123 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "firstFeeAmount", + "scope": 9207, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9122, + "name": "ElementaryTypeName", + "src": "9153:7:66" + } + ], + "id": 9123, + "name": "VariableDeclaration", + "src": "9153:22:66" + } + ], + "id": 9124, + "name": "VariableDeclarationStatement", + "src": "9153:22:66" + }, + { + "attributes": { + "assignments": [ + 9126 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "secondFeeAmount", + "scope": 9207, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9125, + "name": "ElementaryTypeName", + "src": "9189:7:66" + } + ], + "id": 9126, + "name": "VariableDeclaration", + "src": "9189:23:66" + } + ], + "id": 9127, + "name": "VariableDeclarationStatement", + "src": "9189:23:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9111, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies", + "value": "currency" + }, + "id": 9128, + "name": "Identifier", + "src": "9231:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "ETH", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8715, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Currencies)", + "value": "Currencies" + }, + "id": 9129, + "name": "Identifier", + "src": "9243:10:66" + } + ], + "id": 9130, + "name": "MemberAccess", + "src": "9243:14:66" + } + ], + "id": 9131, + "name": "BinaryOperation", + "src": "9231:26:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "tuple()" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "tuple(bool,uint256,uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9120, + "type": "bool", + "value": "success" + }, + "id": 9132, + "name": "Identifier", + "src": "9278:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9123, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 9133, + "name": "Identifier", + "src": "9287:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9126, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 9134, + "name": "Identifier", + "src": "9303:15:66" + } + ], + "id": 9135, + "name": "TupleExpression", + "src": "9277:42:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10102, + "type": "function (struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory,bool) returns (bool,uint256,uint256)", + "value": "purchase" + }, + "id": 9136, + "name": "Identifier", + "src": "9322:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9023, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory[] memory", + "value": "purchaseDetails" + }, + "id": 9137, + "name": "Identifier", + "src": "9331:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9100, + "type": "uint256", + "value": "i" + }, + "id": 9138, + "name": "Identifier", + "src": "9347:1:66" + } + ], + "id": 9139, + "name": "IndexAccess", + "src": "9331:18:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9029, + "type": "bool", + "value": "allowFail" + }, + "id": 9140, + "name": "Identifier", + "src": "9351:9:66" + } + ], + "id": 9141, + "name": "FunctionCall", + "src": "9322:39:66" + } + ], + "id": 9142, + "name": "Assignment", + "src": "9277:84:66" + } + ], + "id": 9143, + "name": "ExpressionStatement", + "src": "9277:84:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9035, + "type": "uint256", + "value": "sumFirstFeesETH" + }, + "id": 9144, + "name": "Identifier", + "src": "9380:15:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "add", + "referencedDeclaration": 559, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9035, + "type": "uint256", + "value": "sumFirstFeesETH" + }, + "id": 9145, + "name": "Identifier", + "src": "9398:15:66" + } + ], + "id": 9146, + "name": "MemberAccess", + "src": "9398:19:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9123, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 9147, + "name": "Identifier", + "src": "9418:14:66" + } + ], + "id": 9148, + "name": "FunctionCall", + "src": "9398:35:66" + } + ], + "id": 9149, + "name": "Assignment", + "src": "9380:53:66" + } + ], + "id": 9150, + "name": "ExpressionStatement", + "src": "9380:53:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9039, + "type": "uint256", + "value": "sumSecondFeesETH" + }, + "id": 9151, + "name": "Identifier", + "src": "9451:16:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "add", + "referencedDeclaration": 559, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9039, + "type": "uint256", + "value": "sumSecondFeesETH" + }, + "id": 9152, + "name": "Identifier", + "src": "9470:16:66" + } + ], + "id": 9153, + "name": "MemberAccess", + "src": "9470:20:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9126, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 9154, + "name": "Identifier", + "src": "9491:15:66" + } + ], + "id": 9155, + "name": "FunctionCall", + "src": "9470:37:66" + } + ], + "id": 9156, + "name": "Assignment", + "src": "9451:56:66" + } + ], + "id": 9157, + "name": "ExpressionStatement", + "src": "9451:56:66" + } + ], + "id": 9158, + "name": "Block", + "src": "9259:263:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9111, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies", + "value": "currency" + }, + "id": 9159, + "name": "Identifier", + "src": "9532:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "WETH", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8715, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Currencies)", + "value": "Currencies" + }, + "id": 9160, + "name": "Identifier", + "src": "9544:10:66" + } + ], + "id": 9161, + "name": "MemberAccess", + "src": "9544:15:66" + } + ], + "id": 9162, + "name": "BinaryOperation", + "src": "9532:27:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "tuple()" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "tuple(bool,uint256,uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9120, + "type": "bool", + "value": "success" + }, + "id": 9163, + "name": "Identifier", + "src": "9580:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9123, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 9164, + "name": "Identifier", + "src": "9589:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9126, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 9165, + "name": "Identifier", + "src": "9605:15:66" + } + ], + "id": 9166, + "name": "TupleExpression", + "src": "9579:42:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_PurchaseDetails_$8724_memory_ptr", + "typeString": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10333, + "type": "function (struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory,bool) returns (bool,uint256,uint256)", + "value": "purchaseWETH" + }, + "id": 9167, + "name": "Identifier", + "src": "9624:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9023, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory[] memory", + "value": "purchaseDetails" + }, + "id": 9168, + "name": "Identifier", + "src": "9637:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9100, + "type": "uint256", + "value": "i" + }, + "id": 9169, + "name": "Identifier", + "src": "9653:1:66" + } + ], + "id": 9170, + "name": "IndexAccess", + "src": "9637:18:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9029, + "type": "bool", + "value": "allowFail" + }, + "id": 9171, + "name": "Identifier", + "src": "9657:9:66" + } + ], + "id": 9172, + "name": "FunctionCall", + "src": "9624:43:66" + } + ], + "id": 9173, + "name": "Assignment", + "src": "9579:88:66" + } + ], + "id": 9174, + "name": "ExpressionStatement", + "src": "9579:88:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9043, + "type": "uint256", + "value": "sumFirstFeesWETH" + }, + "id": 9175, + "name": "Identifier", + "src": "9686:16:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "add", + "referencedDeclaration": 559, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9043, + "type": "uint256", + "value": "sumFirstFeesWETH" + }, + "id": 9176, + "name": "Identifier", + "src": "9705:16:66" + } + ], + "id": 9177, + "name": "MemberAccess", + "src": "9705:20:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9123, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 9178, + "name": "Identifier", + "src": "9726:14:66" + } + ], + "id": 9179, + "name": "FunctionCall", + "src": "9705:36:66" + } + ], + "id": 9180, + "name": "Assignment", + "src": "9686:55:66" + } + ], + "id": 9181, + "name": "ExpressionStatement", + "src": "9686:55:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9047, + "type": "uint256", + "value": "sumSecondFeesWETH" + }, + "id": 9182, + "name": "Identifier", + "src": "9759:17:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "add", + "referencedDeclaration": 559, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9047, + "type": "uint256", + "value": "sumSecondFeesWETH" + }, + "id": 9183, + "name": "Identifier", + "src": "9779:17:66" + } + ], + "id": 9184, + "name": "MemberAccess", + "src": "9779:21:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9126, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 9185, + "name": "Identifier", + "src": "9801:15:66" + } + ], + "id": 9186, + "name": "FunctionCall", + "src": "9779:38:66" + } + ], + "id": 9187, + "name": "Assignment", + "src": "9759:58:66" + } + ], + "id": 9188, + "name": "ExpressionStatement", + "src": "9759:58:66" + } + ], + "id": 9189, + "name": "Block", + "src": "9561:271:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_605a6433b7d321e721e73ab7ad0e763f884f910c90cab603ca0fe502d3d93090", + "typeString": "literal_string \"Unknown purchase currency\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 9190, + "name": "Identifier", + "src": "9856:6:66" + }, + { + "attributes": { + "hexvalue": "556e6b6e6f776e2070757263686173652063757272656e6379", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Unknown purchase currency\"", + "value": "Unknown purchase currency" + }, + "id": 9191, + "name": "Literal", + "src": "9863:27:66" + } + ], + "id": 9192, + "name": "FunctionCall", + "src": "9856:35:66" + } + ], + "id": 9193, + "name": "ExpressionStatement", + "src": "9856:35:66" + } + ], + "id": 9194, + "name": "Block", + "src": "9838:68:66" + } + ], + "id": 9195, + "name": "IfStatement", + "src": "9528:378:66" + } + ], + "id": 9196, + "name": "IfStatement", + "src": "9227:679:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9051, + "type": "bool", + "value": "result" + }, + "id": 9197, + "name": "Identifier", + "src": "9920:6:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "||", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9051, + "type": "bool", + "value": "result" + }, + "id": 9198, + "name": "Identifier", + "src": "9929:6:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9120, + "type": "bool", + "value": "success" + }, + "id": 9199, + "name": "Identifier", + "src": "9939:7:66" + } + ], + "id": 9200, + "name": "BinaryOperation", + "src": "9929:17:66" + } + ], + "id": 9201, + "name": "Assignment", + "src": "9920:26:66" + } + ], + "id": 9202, + "name": "ExpressionStatement", + "src": "9920:26:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8690, + "type": "function (bool)", + "value": "Execution" + }, + "id": 9203, + "name": "Identifier", + "src": "9965:9:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9120, + "type": "bool", + "value": "success" + }, + "id": 9204, + "name": "Identifier", + "src": "9975:7:66" + } + ], + "id": 9205, + "name": "FunctionCall", + "src": "9965:18:66" + } + ], + "id": 9206, + "name": "EmitStatement", + "src": "9960:23:66" + } + ], + "id": 9207, + "name": "Block", + "src": "9041:953:66" + } + ], + "id": 9208, + "name": "ForStatement", + "src": "8988:1006:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ec72e63c53a628868607248de6752f6e953ad035609908ced114156f1eeff564", + "typeString": "literal_string \"no successful executions\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9209, + "name": "Identifier", + "src": "10004:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9051, + "type": "bool", + "value": "result" + }, + "id": 9210, + "name": "Identifier", + "src": "10012:6:66" + }, + { + "attributes": { + "hexvalue": "6e6f207375636365737366756c20657865637574696f6e73", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"no successful executions\"", + "value": "no successful executions" + }, + "id": 9211, + "name": "Literal", + "src": "10020:26:66" + } + ], + "id": 9212, + "name": "FunctionCall", + "src": "10004:43:66" + } + ], + "id": 9213, + "name": "ExpressionStatement", + "src": "10004:43:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10361, + "type": "function (uint256,address)", + "value": "transferFeeETH" + }, + "id": 9214, + "name": "Identifier", + "src": "10084:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9035, + "type": "uint256", + "value": "sumFirstFeesETH" + }, + "id": 9215, + "name": "Identifier", + "src": "10099:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9025, + "type": "address", + "value": "feeRecipientFirst" + }, + "id": 9216, + "name": "Identifier", + "src": "10116:17:66" + } + ], + "id": 9217, + "name": "FunctionCall", + "src": "10084:50:66" + } + ], + "id": 9218, + "name": "ExpressionStatement", + "src": "10084:50:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10361, + "type": "function (uint256,address)", + "value": "transferFeeETH" + }, + "id": 9219, + "name": "Identifier", + "src": "10144:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9039, + "type": "uint256", + "value": "sumSecondFeesETH" + }, + "id": 9220, + "name": "Identifier", + "src": "10159:16:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9027, + "type": "address", + "value": "feeRecipientSecond" + }, + "id": 9221, + "name": "Identifier", + "src": "10177:18:66" + } + ], + "id": 9222, + "name": "FunctionCall", + "src": "10144:52:66" + } + ], + "id": 9223, + "name": "ExpressionStatement", + "src": "10144:52:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10390, + "type": "function (uint256,address)", + "value": "transferFeeWETH" + }, + "id": 9224, + "name": "Identifier", + "src": "10234:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9043, + "type": "uint256", + "value": "sumFirstFeesWETH" + }, + "id": 9225, + "name": "Identifier", + "src": "10250:16:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9025, + "type": "address", + "value": "feeRecipientFirst" + }, + "id": 9226, + "name": "Identifier", + "src": "10268:17:66" + } + ], + "id": 9227, + "name": "FunctionCall", + "src": "10234:52:66" + } + ], + "id": 9228, + "name": "ExpressionStatement", + "src": "10234:52:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10390, + "type": "function (uint256,address)", + "value": "transferFeeWETH" + }, + "id": 9229, + "name": "Identifier", + "src": "10296:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9047, + "type": "uint256", + "value": "sumSecondFeesWETH" + }, + "id": 9230, + "name": "Identifier", + "src": "10312:17:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9027, + "type": "address", + "value": "feeRecipientSecond" + }, + "id": 9231, + "name": "Identifier", + "src": "10331:18:66" + } + ], + "id": 9232, + "name": "FunctionCall", + "src": "10296:54:66" + } + ], + "id": 9233, + "name": "ExpressionStatement", + "src": "10296:54:66" + }, + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10417, + "type": "function ()", + "value": "transferChange" + }, + "id": 9234, + "name": "Identifier", + "src": "10391:14:66" + } + ], + "id": 9235, + "name": "FunctionCall", + "src": "10391:16:66" + } + ], + "id": 9236, + "name": "ExpressionStatement", + "src": "10391:16:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9055, + "type": "uint256", + "value": "wethAmountNeeded" + }, + "id": 9237, + "name": "Identifier", + "src": "10452:16:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9238, + "name": "Literal", + "src": "10471:1:66" + } + ], + "id": 9239, + "name": "BinaryOperation", + "src": "10452:20:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10448, + "type": "function ()", + "value": "transferChangeWETH" + }, + "id": 9240, + "name": "Identifier", + "src": "10488:18:66" + } + ], + "id": 9241, + "name": "FunctionCall", + "src": "10488:20:66" + } + ], + "id": 9242, + "name": "ExpressionStatement", + "src": "10488:20:66" + } + ], + "id": 9243, + "name": "Block", + "src": "10474:45:66" + } + ], + "id": 9244, + "name": "IfStatement", + "src": "10448:71:66" + } + ], + "id": 9245, + "name": "Block", + "src": "8342:2183:66" + } + ], + "id": 9246, + "name": "FunctionDefinition", + "src": "8138:2387:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "purchase", + "scope": 11101, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice executes one purchase in ETH\n@param purchaseDetails - details about the purchase\n@param allowFail - true if errors are handled, false if revert on errors\n@return result false if execution failed, true if succeded\n@return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n@return secondFeeAmount amount of the second fee of the purchase, 0 if failed" + }, + "id": 9247, + "name": "StructuredDocumentation", + "src": "10531:434:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "purchaseDetails", + "scope": 10102, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "PurchaseDetails", + "referencedDeclaration": 8724, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + }, + "id": 9248, + "name": "UserDefinedTypeName", + "src": "10988:15:66" + } + ], + "id": 9249, + "name": "VariableDeclaration", + "src": "10988:38:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "allowFail", + "scope": 10102, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9250, + "name": "ElementaryTypeName", + "src": "11028:4:66" + } + ], + "id": 9251, + "name": "VariableDeclaration", + "src": "11028:14:66" + } + ], + "id": 9252, + "name": "ParameterList", + "src": "10987:56:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10102, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9253, + "name": "ElementaryTypeName", + "src": "11091:4:66" + } + ], + "id": 9254, + "name": "VariableDeclaration", + "src": "11091:4:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10102, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9255, + "name": "ElementaryTypeName", + "src": "11109:7:66" + } + ], + "id": 9256, + "name": "VariableDeclaration", + "src": "11109:7:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10102, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9257, + "name": "ElementaryTypeName", + "src": "11130:7:66" + } + ], + "id": 9258, + "name": "VariableDeclaration", + "src": "11130:7:66" + } + ], + "id": 9259, + "name": "ParameterList", + "src": "11077:70:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9261, + 9264 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "marketData", + "scope": 10101, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 9260, + "name": "ElementaryTypeName", + "src": "11163:5:66" + } + ], + "id": 9261, + "name": "VariableDeclaration", + "src": "11163:23:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "additionalRoyalties", + "scope": 10101, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9262, + "name": "ElementaryTypeName", + "src": "11188:7:66" + } + ], + "id": 9263, + "name": "ArrayTypeName", + "src": "11188:9:66" + } + ], + "id": 9264, + "name": "VariableDeclaration", + "src": "11188:36:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bytes memory,uint256[] memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10590, + "type": "function (bytes memory,uint256,enum RaribleExchangeWrapperUpgradeableV2.Markets) pure returns (bytes memory,uint256[] memory)", + "value": "getDataAndAdditionalData" + }, + "id": 9265, + "name": "Identifier", + "src": "11228:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "data", + "referencedDeclaration": 8723, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9266, + "name": "Identifier", + "src": "11253:15:66" + } + ], + "id": 9267, + "name": "MemberAccess", + "src": "11253:20:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8721, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9268, + "name": "Identifier", + "src": "11275:15:66" + } + ], + "id": 9269, + "name": "MemberAccess", + "src": "11275:20:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9270, + "name": "Identifier", + "src": "11297:15:66" + } + ], + "id": 9271, + "name": "MemberAccess", + "src": "11297:24:66" + } + ], + "id": 9272, + "name": "FunctionCall", + "src": "11228:94:66" + } + ], + "id": 9273, + "name": "VariableDeclarationStatement", + "src": "11162:160:66" + }, + { + "attributes": { + "assignments": [ + 9275 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "paymentAmount", + "scope": 10101, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9274, + "name": "ElementaryTypeName", + "src": "11332:7:66" + } + ], + "id": 9275, + "name": "VariableDeclaration", + "src": "11332:21:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8719, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9276, + "name": "Identifier", + "src": "11356:15:66" + } + ], + "id": 9277, + "name": "MemberAccess", + "src": "11356:22:66" + } + ], + "id": 9278, + "name": "VariableDeclarationStatement", + "src": "11332:46:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9279, + "name": "Identifier", + "src": "11392:15:66" + } + ], + "id": 9280, + "name": "MemberAccess", + "src": "11392:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_1", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 9281, + "name": "Identifier", + "src": "11420:7:66" + } + ], + "id": 9282, + "name": "MemberAccess", + "src": "11420:19:66" + } + ], + "id": 9283, + "name": "BinaryOperation", + "src": "11392:47:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9285, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9314, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9284, + "name": "ElementaryTypeName", + "src": "11456:4:66" + } + ], + "id": 9285, + "name": "VariableDeclaration", + "src": "11456:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9286, + "name": "ElementaryTypeName", + "src": "11474:7:66" + } + ], + "id": 9287, + "name": "ElementaryTypeNameExpression", + "src": "11474:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8659, + "type": "address", + "value": "seaPort_1_1" + }, + "id": 9288, + "name": "Identifier", + "src": "11482:11:66" + } + ], + "id": 9289, + "name": "FunctionCall", + "src": "11474:20:66" + } + ], + "id": 9290, + "name": "MemberAccess", + "src": "11474:25:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9291, + "name": "Identifier", + "src": "11507:13:66" + } + ], + "id": 9292, + "name": "FunctionCallOptions", + "src": "11474:47:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9261, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9293, + "name": "Identifier", + "src": "11522:10:66" + } + ], + "id": 9294, + "name": "FunctionCall", + "src": "11474:59:66" + } + ], + "id": 9295, + "name": "VariableDeclarationStatement", + "src": "11455:78:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9251, + "type": "bool", + "value": "allowFail" + }, + "id": 9296, + "name": "Identifier", + "src": "11551:9:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9285, + "type": "bool", + "value": "success" + }, + "id": 9297, + "name": "Identifier", + "src": "11585:7:66" + } + ], + "id": 9298, + "name": "UnaryOperation", + "src": "11584:8:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9259 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9299, + "name": "Literal", + "src": "11624:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9300, + "name": "Literal", + "src": "11631:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9301, + "name": "Literal", + "src": "11634:1:66" + } + ], + "id": 9302, + "name": "TupleExpression", + "src": "11623:13:66" + } + ], + "id": 9303, + "name": "Return", + "src": "11616:20:66" + } + ], + "id": 9304, + "name": "Block", + "src": "11594:61:66" + } + ], + "id": 9305, + "name": "IfStatement", + "src": "11580:75:66" + } + ], + "id": 9306, + "name": "Block", + "src": "11562:107:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_74739c97d81f6776122daced63f78d93149e498efd7fbf2084eabb7018fcdc3b", + "typeString": "literal_string \"Purchase SeaPort_1_1 failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9307, + "name": "Identifier", + "src": "11693:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9285, + "type": "bool", + "value": "success" + }, + "id": 9308, + "name": "Identifier", + "src": "11701:7:66" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f31206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_1 failed\"", + "value": "Purchase SeaPort_1_1 failed" + }, + "id": 9309, + "name": "Literal", + "src": "11710:29:66" + } + ], + "id": 9310, + "name": "FunctionCall", + "src": "11693:47:66" + } + ], + "id": 9311, + "name": "ExpressionStatement", + "src": "11693:47:66" + } + ], + "id": 9312, + "name": "Block", + "src": "11675:80:66" + } + ], + "id": 9313, + "name": "IfStatement", + "src": "11547:208:66" + } + ], + "id": 9314, + "name": "Block", + "src": "11441:324:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9315, + "name": "Identifier", + "src": "11775:15:66" + } + ], + "id": 9316, + "name": "MemberAccess", + "src": "11775:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "WyvernExchange", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 9317, + "name": "Identifier", + "src": "11803:7:66" + } + ], + "id": 9318, + "name": "MemberAccess", + "src": "11803:22:66" + } + ], + "id": 9319, + "name": "BinaryOperation", + "src": "11775:50:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9321, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9350, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9320, + "name": "ElementaryTypeName", + "src": "11842:4:66" + } + ], + "id": 9321, + "name": "VariableDeclaration", + "src": "11842:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9322, + "name": "ElementaryTypeName", + "src": "11860:7:66" + } + ], + "id": 9323, + "name": "ElementaryTypeNameExpression", + "src": "11860:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8655, + "type": "address", + "value": "wyvernExchange" + }, + "id": 9324, + "name": "Identifier", + "src": "11868:14:66" + } + ], + "id": 9325, + "name": "FunctionCall", + "src": "11860:23:66" + } + ], + "id": 9326, + "name": "MemberAccess", + "src": "11860:28:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9327, + "name": "Identifier", + "src": "11896:13:66" + } + ], + "id": 9328, + "name": "FunctionCallOptions", + "src": "11860:50:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9261, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9329, + "name": "Identifier", + "src": "11911:10:66" + } + ], + "id": 9330, + "name": "FunctionCall", + "src": "11860:62:66" + } + ], + "id": 9331, + "name": "VariableDeclarationStatement", + "src": "11841:81:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9251, + "type": "bool", + "value": "allowFail" + }, + "id": 9332, + "name": "Identifier", + "src": "11940:9:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9321, + "type": "bool", + "value": "success" + }, + "id": 9333, + "name": "Identifier", + "src": "11974:7:66" + } + ], + "id": 9334, + "name": "UnaryOperation", + "src": "11973:8:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9259 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9335, + "name": "Literal", + "src": "12013:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9336, + "name": "Literal", + "src": "12020:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9337, + "name": "Literal", + "src": "12023:1:66" + } + ], + "id": 9338, + "name": "TupleExpression", + "src": "12012:13:66" + } + ], + "id": 9339, + "name": "Return", + "src": "12005:20:66" + } + ], + "id": 9340, + "name": "Block", + "src": "11983:61:66" + } + ], + "id": 9341, + "name": "IfStatement", + "src": "11969:75:66" + } + ], + "id": 9342, + "name": "Block", + "src": "11951:107:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1cdf96c41f1501fb82e87942f0faf4d72a6efd57209b4dccba0c17cf2c4017c6", + "typeString": "literal_string \"Purchase wyvernExchange failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9343, + "name": "Identifier", + "src": "12082:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9321, + "type": "bool", + "value": "success" + }, + "id": 9344, + "name": "Identifier", + "src": "12090:7:66" + }, + { + "attributes": { + "hexvalue": "50757263686173652077797665726e45786368616e6765206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase wyvernExchange failed\"", + "value": "Purchase wyvernExchange failed" + }, + "id": 9345, + "name": "Literal", + "src": "12099:32:66" + } + ], + "id": 9346, + "name": "FunctionCall", + "src": "12082:50:66" + } + ], + "id": 9347, + "name": "ExpressionStatement", + "src": "12082:50:66" + } + ], + "id": 9348, + "name": "Block", + "src": "12064:83:66" + } + ], + "id": 9349, + "name": "IfStatement", + "src": "11936:211:66" + } + ], + "id": 9350, + "name": "Block", + "src": "11827:330:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9351, + "name": "Identifier", + "src": "12167:15:66" + } + ], + "id": 9352, + "name": "MemberAccess", + "src": "12167:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "ExchangeV2", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 9353, + "name": "Identifier", + "src": "12195:7:66" + } + ], + "id": 9354, + "name": "MemberAccess", + "src": "12195:18:66" + } + ], + "id": 9355, + "name": "BinaryOperation", + "src": "12167:46:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9357, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9386, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9356, + "name": "ElementaryTypeName", + "src": "12230:4:66" + } + ], + "id": 9357, + "name": "VariableDeclaration", + "src": "12230:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9358, + "name": "ElementaryTypeName", + "src": "12248:7:66" + } + ], + "id": 9359, + "name": "ElementaryTypeNameExpression", + "src": "12248:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8657, + "type": "address", + "value": "exchangeV2" + }, + "id": 9360, + "name": "Identifier", + "src": "12256:10:66" + } + ], + "id": 9361, + "name": "FunctionCall", + "src": "12248:19:66" + } + ], + "id": 9362, + "name": "MemberAccess", + "src": "12248:24:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9363, + "name": "Identifier", + "src": "12280:13:66" + } + ], + "id": 9364, + "name": "FunctionCallOptions", + "src": "12248:46:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9261, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9365, + "name": "Identifier", + "src": "12295:10:66" + } + ], + "id": 9366, + "name": "FunctionCall", + "src": "12248:58:66" + } + ], + "id": 9367, + "name": "VariableDeclarationStatement", + "src": "12229:77:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9251, + "type": "bool", + "value": "allowFail" + }, + "id": 9368, + "name": "Identifier", + "src": "12324:9:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9357, + "type": "bool", + "value": "success" + }, + "id": 9369, + "name": "Identifier", + "src": "12358:7:66" + } + ], + "id": 9370, + "name": "UnaryOperation", + "src": "12357:8:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9259 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9371, + "name": "Literal", + "src": "12397:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9372, + "name": "Literal", + "src": "12404:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9373, + "name": "Literal", + "src": "12407:1:66" + } + ], + "id": 9374, + "name": "TupleExpression", + "src": "12396:13:66" + } + ], + "id": 9375, + "name": "Return", + "src": "12389:20:66" + } + ], + "id": 9376, + "name": "Block", + "src": "12367:61:66" + } + ], + "id": 9377, + "name": "IfStatement", + "src": "12353:75:66" + } + ], + "id": 9378, + "name": "Block", + "src": "12335:107:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2b352c406e176536877560097b51d8b7a1d4ebdd84181eeb9cfae44540c1b868", + "typeString": "literal_string \"Purchase rarible failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9379, + "name": "Identifier", + "src": "12466:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9357, + "type": "bool", + "value": "success" + }, + "id": 9380, + "name": "Identifier", + "src": "12474:7:66" + }, + { + "attributes": { + "hexvalue": "50757263686173652072617269626c65206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase rarible failed\"", + "value": "Purchase rarible failed" + }, + "id": 9381, + "name": "Literal", + "src": "12483:25:66" + } + ], + "id": 9382, + "name": "FunctionCall", + "src": "12466:43:66" + } + ], + "id": 9383, + "name": "ExpressionStatement", + "src": "12466:43:66" + } + ], + "id": 9384, + "name": "Block", + "src": "12448:76:66" + } + ], + "id": 9385, + "name": "IfStatement", + "src": "12320:204:66" + } + ], + "id": 9386, + "name": "Block", + "src": "12215:319:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9387, + "name": "Identifier", + "src": "12544:15:66" + } + ], + "id": 9388, + "name": "MemberAccess", + "src": "12544:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "X2Y2", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 9389, + "name": "Identifier", + "src": "12572:7:66" + } + ], + "id": 9390, + "name": "MemberAccess", + "src": "12572:12:66" + } + ], + "id": 9391, + "name": "BinaryOperation", + "src": "12544:40:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9395 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "input", + "scope": 9642, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct Ix2y2.RunInput", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Ix2y2.RunInput", + "referencedDeclaration": 4839, + "type": "struct Ix2y2.RunInput" + }, + "id": 9394, + "name": "UserDefinedTypeName", + "src": "12600:14:66" + } + ], + "id": 9395, + "name": "VariableDeclaration", + "src": "12600:27:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "struct Ix2y2.RunInput memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_struct$_RunInput_$4839_storage_ptr_$", + "typeString": "type(struct Ix2y2.RunInput storage pointer)" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "decode", + "type": "function () pure" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 9396, + "name": "Identifier", + "src": "12630:3:66" + } + ], + "id": 9397, + "name": "MemberAccess", + "src": "12630:10:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9261, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9398, + "name": "Identifier", + "src": "12641:10:66" + }, + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "type(struct Ix2y2.RunInput storage pointer)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "RunInput", + "referencedDeclaration": 4839, + "type": "type(struct Ix2y2.RunInput storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4854, + "type": "type(contract Ix2y2)", + "value": "Ix2y2" + }, + "id": 9399, + "name": "Identifier", + "src": "12654:5:66" + } + ], + "id": 9400, + "name": "MemberAccess", + "src": "12654:14:66" + } + ], + "id": 9401, + "name": "TupleExpression", + "src": "12653:16:66" + } + ], + "id": 9402, + "name": "FunctionCall", + "src": "12630:40:66" + } + ], + "id": 9403, + "name": "VariableDeclarationStatement", + "src": "12600:70:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9251, + "type": "bool", + "value": "allowFail" + }, + "id": 9404, + "name": "Identifier", + "src": "12689:9:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": true, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (struct Ix2y2.RunInput memory) payable external" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "run", + "referencedDeclaration": 4853, + "type": "function (struct Ix2y2.RunInput memory) payable external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract Ix2y2", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4854, + "type": "type(contract Ix2y2)", + "value": "Ix2y2" + }, + "id": 9405, + "name": "Identifier", + "src": "12722:5:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8661, + "type": "address", + "value": "x2y2" + }, + "id": 9406, + "name": "Identifier", + "src": "12728:4:66" + } + ], + "id": 9407, + "name": "FunctionCall", + "src": "12722:11:66" + } + ], + "id": 9408, + "name": "MemberAccess", + "src": "12722:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9409, + "name": "Identifier", + "src": "12745:13:66" + } + ], + "id": 9410, + "name": "FunctionCallOptions", + "src": "12722:37:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9395, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 9411, + "name": "Identifier", + "src": "12760:5:66" + } + ], + "id": 9412, + "name": "FunctionCall", + "src": "12722:44:66" + }, + { + "attributes": { + "errorName": "" + }, + "children": [ + { + "attributes": { + "statements": [ + null + ] + }, + "children": [], + "id": 9413, + "name": "Block", + "src": "12767:2:66" + } + ], + "id": 9414, + "name": "TryCatchClause", + "src": "12767:2:66" + }, + { + "attributes": { + "errorName": "" + }, + "children": [ + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9259 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9415, + "name": "Literal", + "src": "12806:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9416, + "name": "Literal", + "src": "12813:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9417, + "name": "Literal", + "src": "12816:1:66" + } + ], + "id": 9418, + "name": "TupleExpression", + "src": "12805:13:66" + } + ], + "id": 9419, + "name": "Return", + "src": "12798:20:66" + } + ], + "id": 9420, + "name": "Block", + "src": "12776:61:66" + } + ], + "id": 9421, + "name": "TryCatchClause", + "src": "12770:67:66" + } + ], + "id": 9422, + "name": "TryStatement", + "src": "12718:119:66" + } + ], + "id": 9423, + "name": "Block", + "src": "12700:151:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (struct Ix2y2.RunInput memory) payable external" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_RunInput_$4839_memory_ptr", + "typeString": "struct Ix2y2.RunInput memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "run", + "referencedDeclaration": 4853, + "type": "function (struct Ix2y2.RunInput memory) payable external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract Ix2y2", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4854, + "type": "type(contract Ix2y2)", + "value": "Ix2y2" + }, + "id": 9424, + "name": "Identifier", + "src": "12875:5:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8661, + "type": "address", + "value": "x2y2" + }, + "id": 9425, + "name": "Identifier", + "src": "12881:4:66" + } + ], + "id": 9426, + "name": "FunctionCall", + "src": "12875:11:66" + } + ], + "id": 9427, + "name": "MemberAccess", + "src": "12875:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9428, + "name": "Identifier", + "src": "12898:13:66" + } + ], + "id": 9429, + "name": "FunctionCallOptions", + "src": "12875:37:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9395, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 9430, + "name": "Identifier", + "src": "12913:5:66" + } + ], + "id": 9431, + "name": "FunctionCall", + "src": "12875:44:66" + } + ], + "id": 9432, + "name": "ExpressionStatement", + "src": "12875:44:66" + } + ], + "id": 9433, + "name": "Block", + "src": "12857:77:66" + } + ], + "id": 9434, + "name": "IfStatement", + "src": "12685:249:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9436 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 9641, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9435, + "name": "ElementaryTypeName", + "src": "13135:7:66" + } + ], + "id": 9436, + "name": "VariableDeclaration", + "src": "13135:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9437, + "name": "Literal", + "src": "13147:1:66" + } + ], + "id": 9438, + "name": "VariableDeclarationStatement", + "src": "13135:13:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9436, + "type": "uint256", + "value": "i" + }, + "id": 9439, + "name": "Identifier", + "src": "13150:1:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "details", + "referencedDeclaration": 4830, + "type": "struct Ix2y2.SettleDetail memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9395, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 9440, + "name": "Identifier", + "src": "13154:5:66" + } + ], + "id": 9441, + "name": "MemberAccess", + "src": "13154:13:66" + } + ], + "id": 9442, + "name": "MemberAccess", + "src": "13154:20:66" + } + ], + "id": 9443, + "name": "BinaryOperation", + "src": "13150:24:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9436, + "type": "uint256", + "value": "i" + }, + "id": 9444, + "name": "Identifier", + "src": "13178:1:66" + } + ], + "id": 9445, + "name": "UnaryOperation", + "src": "13176:3:66" + } + ], + "id": 9446, + "name": "ExpressionStatement", + "src": "13176:3:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9448 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "orderId", + "scope": 9640, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9447, + "name": "ElementaryTypeName", + "src": "13199:7:66" + } + ], + "id": 9448, + "name": "VariableDeclaration", + "src": "13199:15:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "orderIdx", + "referencedDeclaration": 4791, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.SettleDetail memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "details", + "referencedDeclaration": 4830, + "type": "struct Ix2y2.SettleDetail memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9395, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 9449, + "name": "Identifier", + "src": "13217:5:66" + } + ], + "id": 9450, + "name": "MemberAccess", + "src": "13217:13:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9436, + "type": "uint256", + "value": "i" + }, + "id": 9451, + "name": "Identifier", + "src": "13231:1:66" + } + ], + "id": 9452, + "name": "IndexAccess", + "src": "13217:16:66" + } + ], + "id": 9453, + "name": "MemberAccess", + "src": "13217:25:66" + } + ], + "id": 9454, + "name": "VariableDeclarationStatement", + "src": "13199:43:66" + }, + { + "attributes": { + "assignments": [ + 9456 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "itemId", + "scope": 9640, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9455, + "name": "ElementaryTypeName", + "src": "13260:7:66" + } + ], + "id": 9456, + "name": "VariableDeclaration", + "src": "13260:14:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "itemIdx", + "referencedDeclaration": 4793, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.SettleDetail memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "details", + "referencedDeclaration": 4830, + "type": "struct Ix2y2.SettleDetail memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9395, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 9457, + "name": "Identifier", + "src": "13277:5:66" + } + ], + "id": 9458, + "name": "MemberAccess", + "src": "13277:13:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9436, + "type": "uint256", + "value": "i" + }, + "id": 9459, + "name": "Identifier", + "src": "13291:1:66" + } + ], + "id": 9460, + "name": "IndexAccess", + "src": "13277:16:66" + } + ], + "id": 9461, + "name": "MemberAccess", + "src": "13277:24:66" + } + ], + "id": 9462, + "name": "VariableDeclarationStatement", + "src": "13260:41:66" + }, + { + "attributes": { + "assignments": [ + 9464 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "data", + "scope": 9640, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 9463, + "name": "ElementaryTypeName", + "src": "13319:5:66" + } + ], + "id": 9464, + "name": "VariableDeclaration", + "src": "13319:17:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "data", + "referencedDeclaration": 4741, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.OrderItem memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "items", + "referencedDeclaration": 4773, + "type": "struct Ix2y2.OrderItem memory[] memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Order memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "orders", + "referencedDeclaration": 4827, + "type": "struct Ix2y2.Order memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9395, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 9465, + "name": "Identifier", + "src": "13339:5:66" + } + ], + "id": 9466, + "name": "MemberAccess", + "src": "13339:12:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9448, + "type": "uint256", + "value": "orderId" + }, + "id": 9467, + "name": "Identifier", + "src": "13352:7:66" + } + ], + "id": 9468, + "name": "IndexAccess", + "src": "13339:21:66" + } + ], + "id": 9469, + "name": "MemberAccess", + "src": "13339:27:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9456, + "type": "uint256", + "value": "itemId" + }, + "id": 9470, + "name": "Identifier", + "src": "13367:6:66" + } + ], + "id": 9471, + "name": "IndexAccess", + "src": "13339:35:66" + } + ], + "id": 9472, + "name": "MemberAccess", + "src": "13339:40:66" + } + ], + "id": 9473, + "name": "VariableDeclarationStatement", + "src": "13319:60:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "&&", + "type": "bool" + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "dataMask", + "referencedDeclaration": 4770, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Order memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "orders", + "referencedDeclaration": 4827, + "type": "struct Ix2y2.Order memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9395, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 9474, + "name": "Identifier", + "src": "13423:5:66" + } + ], + "id": 9475, + "name": "MemberAccess", + "src": "13423:12:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9448, + "type": "uint256", + "value": "orderId" + }, + "id": 9476, + "name": "Identifier", + "src": "13436:7:66" + } + ], + "id": 9477, + "name": "IndexAccess", + "src": "13423:21:66" + } + ], + "id": 9478, + "name": "MemberAccess", + "src": "13423:30:66" + } + ], + "id": 9479, + "name": "MemberAccess", + "src": "13423:37:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9480, + "name": "Literal", + "src": "13463:1:66" + } + ], + "id": 9481, + "name": "BinaryOperation", + "src": "13423:41:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "dataReplacement", + "referencedDeclaration": 4801, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.SettleDetail memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "details", + "referencedDeclaration": 4830, + "type": "struct Ix2y2.SettleDetail memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9395, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 9482, + "name": "Identifier", + "src": "13468:5:66" + } + ], + "id": 9483, + "name": "MemberAccess", + "src": "13468:13:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9436, + "type": "uint256", + "value": "i" + }, + "id": 9484, + "name": "Identifier", + "src": "13482:1:66" + } + ], + "id": 9485, + "name": "IndexAccess", + "src": "13468:16:66" + } + ], + "id": 9486, + "name": "MemberAccess", + "src": "13468:32:66" + } + ], + "id": 9487, + "name": "MemberAccess", + "src": "13468:39:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9488, + "name": "Literal", + "src": "13510:1:66" + } + ], + "id": 9489, + "name": "BinaryOperation", + "src": "13468:43:66" + } + ], + "id": 9490, + "name": "BinaryOperation", + "src": "13423:88:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10774, + "type": "function (bytes memory,bytes memory,bytes memory) view", + "value": "_arrayReplace" + }, + "id": 9491, + "name": "Identifier", + "src": "13539:13:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9464, + "type": "bytes memory", + "value": "data" + }, + "id": 9492, + "name": "Identifier", + "src": "13553:4:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "dataReplacement", + "referencedDeclaration": 4801, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.SettleDetail memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "details", + "referencedDeclaration": 4830, + "type": "struct Ix2y2.SettleDetail memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9395, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 9493, + "name": "Identifier", + "src": "13559:5:66" + } + ], + "id": 9494, + "name": "MemberAccess", + "src": "13559:13:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9436, + "type": "uint256", + "value": "i" + }, + "id": 9495, + "name": "Identifier", + "src": "13573:1:66" + } + ], + "id": 9496, + "name": "IndexAccess", + "src": "13559:16:66" + } + ], + "id": 9497, + "name": "MemberAccess", + "src": "13559:32:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "dataMask", + "referencedDeclaration": 4770, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Order memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "orders", + "referencedDeclaration": 4827, + "type": "struct Ix2y2.Order memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9395, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 9498, + "name": "Identifier", + "src": "13593:5:66" + } + ], + "id": 9499, + "name": "MemberAccess", + "src": "13593:12:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9448, + "type": "uint256", + "value": "orderId" + }, + "id": 9500, + "name": "Identifier", + "src": "13606:7:66" + } + ], + "id": 9501, + "name": "IndexAccess", + "src": "13593:21:66" + } + ], + "id": 9502, + "name": "MemberAccess", + "src": "13593:30:66" + } + ], + "id": 9503, + "name": "FunctionCall", + "src": "13539:85:66" + } + ], + "id": 9504, + "name": "ExpressionStatement", + "src": "13539:85:66" + } + ], + "id": 9505, + "name": "Block", + "src": "13513:134:66" + } + ], + "id": 9506, + "name": "IfStatement", + "src": "13419:228:66" + } + ], + "id": 9507, + "name": "Block", + "src": "13397:268:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "delegateType", + "referencedDeclaration": 4764, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Order memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "orders", + "referencedDeclaration": 4827, + "type": "struct Ix2y2.Order memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9395, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 9508, + "name": "Identifier", + "src": "13718:5:66" + } + ], + "id": 9509, + "name": "MemberAccess", + "src": "13718:12:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9448, + "type": "uint256", + "value": "orderId" + }, + "id": 9510, + "name": "Identifier", + "src": "13731:7:66" + } + ], + "id": 9511, + "name": "IndexAccess", + "src": "13718:21:66" + } + ], + "id": 9512, + "name": "MemberAccess", + "src": "13718:34:66" + }, + { + "attributes": { + "hexvalue": "31", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 1", + "value": "1" + }, + "id": 9513, + "name": "Literal", + "src": "13756:1:66" + } + ], + "id": 9514, + "name": "BinaryOperation", + "src": "13718:39:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9519 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "pairs", + "scope": 9568, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct Ix2y2.Pair721[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "struct Ix2y2.Pair721[]" + }, + "children": [ + { + "attributes": { + "name": "Ix2y2.Pair721", + "referencedDeclaration": 4747, + "type": "struct Ix2y2.Pair721" + }, + "id": 9517, + "name": "UserDefinedTypeName", + "src": "13781:13:66" + } + ], + "id": 9518, + "name": "ArrayTypeName", + "src": "13781:15:66" + } + ], + "id": 9519, + "name": "VariableDeclaration", + "src": "13781:28:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "struct Ix2y2.Pair721 memory[] memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair721_$4747_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair721 memory[] memory)" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "decode", + "type": "function () pure" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 9520, + "name": "Identifier", + "src": "13812:3:66" + } + ], + "id": 9521, + "name": "MemberAccess", + "src": "13812:10:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9464, + "type": "bytes memory", + "value": "data" + }, + "id": 9522, + "name": "Identifier", + "src": "13823:4:66" + }, + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "type(struct Ix2y2.Pair721 memory[] memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "type(struct Ix2y2.Pair721 memory[] memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "Pair721", + "referencedDeclaration": 4747, + "type": "type(struct Ix2y2.Pair721 storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4854, + "type": "type(contract Ix2y2)", + "value": "Ix2y2" + }, + "id": 9523, + "name": "Identifier", + "src": "13830:5:66" + } + ], + "id": 9524, + "name": "MemberAccess", + "src": "13830:13:66" + } + ], + "id": 9525, + "name": "IndexAccess", + "src": "13830:15:66" + } + ], + "id": 9526, + "name": "TupleExpression", + "src": "13829:17:66" + } + ], + "id": 9527, + "name": "FunctionCall", + "src": "13812:35:66" + } + ], + "id": 9528, + "name": "VariableDeclarationStatement", + "src": "13781:66:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9530 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "j", + "scope": 9567, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9529, + "name": "ElementaryTypeName", + "src": "13875:7:66" + } + ], + "id": 9530, + "name": "VariableDeclaration", + "src": "13875:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9531, + "name": "Literal", + "src": "13887:1:66" + } + ], + "id": 9532, + "name": "VariableDeclarationStatement", + "src": "13875:13:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9530, + "type": "uint256", + "value": "j" + }, + "id": 9533, + "name": "Identifier", + "src": "13890:1:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9519, + "type": "struct Ix2y2.Pair721 memory[] memory", + "value": "pairs" + }, + "id": 9534, + "name": "Identifier", + "src": "13894:5:66" + } + ], + "id": 9535, + "name": "MemberAccess", + "src": "13894:12:66" + } + ], + "id": 9536, + "name": "BinaryOperation", + "src": "13890:16:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9530, + "type": "uint256", + "value": "j" + }, + "id": 9537, + "name": "Identifier", + "src": "13908:1:66" + } + ], + "id": 9538, + "name": "UnaryOperation", + "src": "13908:3:66" + } + ], + "id": 9539, + "name": "ExpressionStatement", + "src": "13908:3:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9543 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "p", + "scope": 9566, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct Ix2y2.Pair721", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Ix2y2.Pair721", + "referencedDeclaration": 4747, + "type": "struct Ix2y2.Pair721" + }, + "id": 9542, + "name": "UserDefinedTypeName", + "src": "13939:13:66" + } + ], + "id": 9543, + "name": "VariableDeclaration", + "src": "13939:22:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Pair721 memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9519, + "type": "struct Ix2y2.Pair721 memory[] memory", + "value": "pairs" + }, + "id": 9544, + "name": "Identifier", + "src": "13964:5:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9530, + "type": "uint256", + "value": "j" + }, + "id": 9545, + "name": "Identifier", + "src": "13970:1:66" + } + ], + "id": 9546, + "name": "IndexAccess", + "src": "13964:8:66" + } + ], + "id": 9547, + "name": "VariableDeclarationStatement", + "src": "13939:33:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "safeTransferFrom", + "referencedDeclaration": 1299, + "type": "function (address,address,uint256) external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC721Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1356, + "type": "type(contract IERC721Upgradeable)", + "value": "IERC721Upgradeable" + }, + "id": 9548, + "name": "Identifier", + "src": "13998:18:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9549, + "name": "ElementaryTypeName", + "src": "14017:7:66" + } + ], + "id": 9550, + "name": "ElementaryTypeNameExpression", + "src": "14017:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "token", + "referencedDeclaration": 4744, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9543, + "type": "struct Ix2y2.Pair721 memory", + "value": "p" + }, + "id": 9551, + "name": "Identifier", + "src": "14025:1:66" + } + ], + "id": 9552, + "name": "MemberAccess", + "src": "14025:7:66" + } + ], + "id": 9553, + "name": "FunctionCall", + "src": "14017:16:66" + } + ], + "id": 9554, + "name": "FunctionCall", + "src": "13998:36:66" + } + ], + "id": 9555, + "name": "MemberAccess", + "src": "13998:53:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9556, + "name": "ElementaryTypeName", + "src": "14052:7:66" + } + ], + "id": 9557, + "name": "ElementaryTypeNameExpression", + "src": "14052:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeableV2", + "value": "this" + }, + "id": 9558, + "name": "Identifier", + "src": "14060:4:66" + } + ], + "id": 9559, + "name": "FunctionCall", + "src": "14052:13:66" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 9560, + "name": "Identifier", + "src": "14067:10:66" + } + ], + "id": 9561, + "name": "FunctionCall", + "src": "14067:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "tokenId", + "referencedDeclaration": 4746, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9543, + "type": "struct Ix2y2.Pair721 memory", + "value": "p" + }, + "id": 9562, + "name": "Identifier", + "src": "14081:1:66" + } + ], + "id": 9563, + "name": "MemberAccess", + "src": "14081:9:66" + } + ], + "id": 9564, + "name": "FunctionCall", + "src": "13998:93:66" + } + ], + "id": 9565, + "name": "ExpressionStatement", + "src": "13998:93:66" + } + ], + "id": 9566, + "name": "Block", + "src": "13913:201:66" + } + ], + "id": 9567, + "name": "ForStatement", + "src": "13870:244:66" + } + ], + "id": 9568, + "name": "Block", + "src": "13759:373:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "delegateType", + "referencedDeclaration": 4764, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Order memory" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "orders", + "referencedDeclaration": 4827, + "type": "struct Ix2y2.Order memory[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9395, + "type": "struct Ix2y2.RunInput memory", + "value": "input" + }, + "id": 9569, + "name": "Identifier", + "src": "14142:5:66" + } + ], + "id": 9570, + "name": "MemberAccess", + "src": "14142:12:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9448, + "type": "uint256", + "value": "orderId" + }, + "id": 9571, + "name": "Identifier", + "src": "14155:7:66" + } + ], + "id": 9572, + "name": "IndexAccess", + "src": "14142:21:66" + } + ], + "id": 9573, + "name": "MemberAccess", + "src": "14142:34:66" + }, + { + "attributes": { + "hexvalue": "32", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 2", + "value": "2" + }, + "id": 9574, + "name": "Literal", + "src": "14180:1:66" + } + ], + "id": 9575, + "name": "BinaryOperation", + "src": "14142:39:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9580 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "pairs", + "scope": 9632, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct Ix2y2.Pair1155[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "struct Ix2y2.Pair1155[]" + }, + "children": [ + { + "attributes": { + "name": "Ix2y2.Pair1155", + "referencedDeclaration": 4754, + "type": "struct Ix2y2.Pair1155" + }, + "id": 9578, + "name": "UserDefinedTypeName", + "src": "14241:14:66" + } + ], + "id": 9579, + "name": "ArrayTypeName", + "src": "14241:16:66" + } + ], + "id": 9580, + "name": "VariableDeclaration", + "src": "14241:29:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "struct Ix2y2.Pair1155 memory[] memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_array$_t_struct$_Pair1155_$4754_memory_ptr_$dyn_memory_ptr_$", + "typeString": "type(struct Ix2y2.Pair1155 memory[] memory)" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "decode", + "type": "function () pure" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 9581, + "name": "Identifier", + "src": "14273:3:66" + } + ], + "id": 9582, + "name": "MemberAccess", + "src": "14273:10:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9464, + "type": "bytes memory", + "value": "data" + }, + "id": 9583, + "name": "Identifier", + "src": "14284:4:66" + }, + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "type(struct Ix2y2.Pair1155 memory[] memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "type(struct Ix2y2.Pair1155 memory[] memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "Pair1155", + "referencedDeclaration": 4754, + "type": "type(struct Ix2y2.Pair1155 storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4854, + "type": "type(contract Ix2y2)", + "value": "Ix2y2" + }, + "id": 9584, + "name": "Identifier", + "src": "14291:5:66" + } + ], + "id": 9585, + "name": "MemberAccess", + "src": "14291:14:66" + } + ], + "id": 9586, + "name": "IndexAccess", + "src": "14291:16:66" + } + ], + "id": 9587, + "name": "TupleExpression", + "src": "14290:18:66" + } + ], + "id": 9588, + "name": "FunctionCall", + "src": "14273:36:66" + } + ], + "id": 9589, + "name": "VariableDeclarationStatement", + "src": "14241:68:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9591 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "j", + "scope": 9631, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 9590, + "name": "ElementaryTypeName", + "src": "14337:7:66" + } + ], + "id": 9591, + "name": "VariableDeclaration", + "src": "14337:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9592, + "name": "Literal", + "src": "14349:1:66" + } + ], + "id": 9593, + "name": "VariableDeclarationStatement", + "src": "14337:13:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9591, + "type": "uint256", + "value": "j" + }, + "id": 9594, + "name": "Identifier", + "src": "14352:1:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9580, + "type": "struct Ix2y2.Pair1155 memory[] memory", + "value": "pairs" + }, + "id": 9595, + "name": "Identifier", + "src": "14356:5:66" + } + ], + "id": 9596, + "name": "MemberAccess", + "src": "14356:12:66" + } + ], + "id": 9597, + "name": "BinaryOperation", + "src": "14352:16:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9591, + "type": "uint256", + "value": "j" + }, + "id": 9598, + "name": "Identifier", + "src": "14370:1:66" + } + ], + "id": 9599, + "name": "UnaryOperation", + "src": "14370:3:66" + } + ], + "id": 9600, + "name": "ExpressionStatement", + "src": "14370:3:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9604 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "p", + "scope": 9630, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct Ix2y2.Pair1155", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Ix2y2.Pair1155", + "referencedDeclaration": 4754, + "type": "struct Ix2y2.Pair1155" + }, + "id": 9603, + "name": "UserDefinedTypeName", + "src": "14401:14:66" + } + ], + "id": 9604, + "name": "VariableDeclaration", + "src": "14401:23:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "struct Ix2y2.Pair1155 memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9580, + "type": "struct Ix2y2.Pair1155 memory[] memory", + "value": "pairs" + }, + "id": 9605, + "name": "Identifier", + "src": "14427:5:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9591, + "type": "uint256", + "value": "j" + }, + "id": 9606, + "name": "Identifier", + "src": "14433:1:66" + } + ], + "id": 9607, + "name": "IndexAccess", + "src": "14427:8:66" + } + ], + "id": 9608, + "name": "VariableDeclarationStatement", + "src": "14401:34:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "safeTransferFrom", + "referencedDeclaration": 1078, + "type": "function (address,address,uint256,uint256,bytes memory) external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC1155Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1095, + "type": "type(contract IERC1155Upgradeable)", + "value": "IERC1155Upgradeable" + }, + "id": 9609, + "name": "Identifier", + "src": "14461:19:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9610, + "name": "ElementaryTypeName", + "src": "14481:7:66" + } + ], + "id": 9611, + "name": "ElementaryTypeNameExpression", + "src": "14481:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "token", + "referencedDeclaration": 4749, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9604, + "type": "struct Ix2y2.Pair1155 memory", + "value": "p" + }, + "id": 9612, + "name": "Identifier", + "src": "14489:1:66" + } + ], + "id": 9613, + "name": "MemberAccess", + "src": "14489:7:66" + } + ], + "id": 9614, + "name": "FunctionCall", + "src": "14481:16:66" + } + ], + "id": 9615, + "name": "FunctionCall", + "src": "14461:37:66" + } + ], + "id": 9616, + "name": "MemberAccess", + "src": "14461:54:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9617, + "name": "ElementaryTypeName", + "src": "14516:7:66" + } + ], + "id": 9618, + "name": "ElementaryTypeNameExpression", + "src": "14516:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeableV2", + "value": "this" + }, + "id": 9619, + "name": "Identifier", + "src": "14524:4:66" + } + ], + "id": 9620, + "name": "FunctionCall", + "src": "14516:13:66" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 9621, + "name": "Identifier", + "src": "14531:10:66" + } + ], + "id": 9622, + "name": "FunctionCall", + "src": "14531:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "tokenId", + "referencedDeclaration": 4751, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9604, + "type": "struct Ix2y2.Pair1155 memory", + "value": "p" + }, + "id": 9623, + "name": "Identifier", + "src": "14545:1:66" + } + ], + "id": 9624, + "name": "MemberAccess", + "src": "14545:9:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 4753, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9604, + "type": "struct Ix2y2.Pair1155 memory", + "value": "p" + }, + "id": 9625, + "name": "Identifier", + "src": "14556:1:66" + } + ], + "id": 9626, + "name": "MemberAccess", + "src": "14556:8:66" + }, + { + "attributes": { + "hexvalue": "", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"\"", + "value": "" + }, + "id": 9627, + "name": "Literal", + "src": "14566:2:66" + } + ], + "id": 9628, + "name": "FunctionCall", + "src": "14461:108:66" + } + ], + "id": 9629, + "name": "ExpressionStatement", + "src": "14461:108:66" + } + ], + "id": 9630, + "name": "Block", + "src": "14375:217:66" + } + ], + "id": 9631, + "name": "ForStatement", + "src": "14332:260:66" + } + ], + "id": 9632, + "name": "Block", + "src": "14183:427:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_b9e628d538abf867b76153fc9fbf92e2395d1f1d03fe95fb0b6ee129f4f808af", + "typeString": "literal_string \"unknown delegateType x2y2\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 9633, + "name": "Identifier", + "src": "14638:6:66" + }, + { + "attributes": { + "hexvalue": "756e6b6e6f776e2064656c6567617465547970652078327932", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"unknown delegateType x2y2\"", + "value": "unknown delegateType x2y2" + }, + "id": 9634, + "name": "Literal", + "src": "14645:27:66" + } + ], + "id": 9635, + "name": "FunctionCall", + "src": "14638:35:66" + } + ], + "id": 9636, + "name": "ExpressionStatement", + "src": "14638:35:66" + } + ], + "id": 9637, + "name": "Block", + "src": "14616:76:66" + } + ], + "id": 9638, + "name": "IfStatement", + "src": "14138:554:66" + } + ], + "id": 9639, + "name": "IfStatement", + "src": "13714:978:66" + } + ], + "id": 9640, + "name": "Block", + "src": "13181:1525:66" + } + ], + "id": 9641, + "name": "ForStatement", + "src": "13130:1576:66" + } + ], + "id": 9642, + "name": "Block", + "src": "12586:2130:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9643, + "name": "Identifier", + "src": "14726:15:66" + } + ], + "id": 9644, + "name": "MemberAccess", + "src": "14726:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "LooksRareOrders", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 9645, + "name": "Identifier", + "src": "14754:7:66" + } + ], + "id": 9646, + "name": "MemberAccess", + "src": "14754:23:66" + } + ], + "id": 9647, + "name": "BinaryOperation", + "src": "14726:51:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9651, + 9653, + 9655 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "takerOrder", + "scope": 9751, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct LibLooksRare.TakerOrder", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "LibLooksRare.TakerOrder", + "referencedDeclaration": 4903, + "type": "struct LibLooksRare.TakerOrder" + }, + "id": 9650, + "name": "UserDefinedTypeName", + "src": "14794:23:66" + } + ], + "id": 9651, + "name": "VariableDeclaration", + "src": "14794:41:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "makerOrder", + "scope": 9751, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct LibLooksRare.MakerOrder", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "LibLooksRare.MakerOrder", + "referencedDeclaration": 4890, + "type": "struct LibLooksRare.MakerOrder" + }, + "id": 9652, + "name": "UserDefinedTypeName", + "src": "14837:23:66" + } + ], + "id": 9653, + "name": "VariableDeclaration", + "src": "14837:41:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "typeNft", + "scope": 9751, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes4", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes4", + "type": "bytes4" + }, + "id": 9654, + "name": "ElementaryTypeName", + "src": "14880:6:66" + } + ], + "id": 9655, + "name": "VariableDeclaration", + "src": "14880:14:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory,bytes4)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_struct$_TakerOrder_$4903_storage_ptr_$_$_t_type$_t_struct$_MakerOrder_$4890_storage_ptr_$_$_t_type$_t_bytes4_$_$", + "typeString": "tuple(type(struct LibLooksRare.TakerOrder storage pointer),type(struct LibLooksRare.MakerOrder storage pointer),type(bytes4))" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "decode", + "type": "function () pure" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 9656, + "name": "Identifier", + "src": "14898:3:66" + } + ], + "id": 9657, + "name": "MemberAccess", + "src": "14898:10:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9261, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9658, + "name": "Identifier", + "src": "14909:10:66" + }, + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(type(struct LibLooksRare.TakerOrder storage pointer),type(struct LibLooksRare.MakerOrder storage pointer),type(bytes4))" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "TakerOrder", + "referencedDeclaration": 4903, + "type": "type(struct LibLooksRare.TakerOrder storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4962, + "type": "type(library LibLooksRare)", + "value": "LibLooksRare" + }, + "id": 9659, + "name": "Identifier", + "src": "14922:12:66" + } + ], + "id": 9660, + "name": "MemberAccess", + "src": "14922:23:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "MakerOrder", + "referencedDeclaration": 4890, + "type": "type(struct LibLooksRare.MakerOrder storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4962, + "type": "type(library LibLooksRare)", + "value": "LibLooksRare" + }, + "id": 9661, + "name": "Identifier", + "src": "14947:12:66" + } + ], + "id": 9662, + "name": "MemberAccess", + "src": "14947:23:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(bytes4)" + }, + "children": [ + { + "attributes": { + "name": "bytes4" + }, + "id": 9663, + "name": "ElementaryTypeName", + "src": "14972:6:66" + } + ], + "id": 9664, + "name": "ElementaryTypeNameExpression", + "src": "14972:6:66" + } + ], + "id": 9665, + "name": "TupleExpression", + "src": "14921:58:66" + } + ], + "id": 9666, + "name": "FunctionCall", + "src": "14898:82:66" + } + ], + "id": 9667, + "name": "VariableDeclarationStatement", + "src": "14793:187:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9251, + "type": "bool", + "value": "allowFail" + }, + "id": 9668, + "name": "Identifier", + "src": "14998:9:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": true, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$4903_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$4903_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "matchAskWithTakerBidUsingETHAndWETH", + "referencedDeclaration": 4602, + "type": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract ILooksRare", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4617, + "type": "type(contract ILooksRare)", + "value": "ILooksRare" + }, + "id": 9669, + "name": "Identifier", + "src": "15031:10:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8663, + "type": "address", + "value": "looksRare" + }, + "id": 9670, + "name": "Identifier", + "src": "15042:9:66" + } + ], + "id": 9671, + "name": "FunctionCall", + "src": "15031:21:66" + } + ], + "id": 9672, + "name": "MemberAccess", + "src": "15031:57:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9673, + "name": "Identifier", + "src": "15096:13:66" + } + ], + "id": 9674, + "name": "FunctionCallOptions", + "src": "15031:79:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9651, + "type": "struct LibLooksRare.TakerOrder memory", + "value": "takerOrder" + }, + "id": 9675, + "name": "Identifier", + "src": "15111:10:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9653, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 9676, + "name": "Identifier", + "src": "15123:10:66" + } + ], + "id": 9677, + "name": "FunctionCall", + "src": "15031:103:66" + }, + { + "attributes": { + "errorName": "" + }, + "children": [ + { + "attributes": { + "statements": [ + null + ] + }, + "children": [], + "id": 9678, + "name": "Block", + "src": "15135:2:66" + } + ], + "id": 9679, + "name": "TryCatchClause", + "src": "15135:2:66" + }, + { + "attributes": { + "errorName": "" + }, + "children": [ + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9259 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9680, + "name": "Literal", + "src": "15174:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9681, + "name": "Literal", + "src": "15181:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9682, + "name": "Literal", + "src": "15184:1:66" + } + ], + "id": 9683, + "name": "TupleExpression", + "src": "15173:13:66" + } + ], + "id": 9684, + "name": "Return", + "src": "15166:20:66" + } + ], + "id": 9685, + "name": "Block", + "src": "15144:61:66" + } + ], + "id": 9686, + "name": "TryCatchClause", + "src": "15138:67:66" + } + ], + "id": 9687, + "name": "TryStatement", + "src": "15027:178:66" + } + ], + "id": 9688, + "name": "Block", + "src": "15009:210:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$4903_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_TakerOrder_$4903_memory_ptr", + "typeString": "struct LibLooksRare.TakerOrder memory" + }, + { + "typeIdentifier": "t_struct$_MakerOrder_$4890_memory_ptr", + "typeString": "struct LibLooksRare.MakerOrder memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "matchAskWithTakerBidUsingETHAndWETH", + "referencedDeclaration": 4602, + "type": "function (struct LibLooksRare.TakerOrder memory,struct LibLooksRare.MakerOrder memory) payable external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract ILooksRare", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4617, + "type": "type(contract ILooksRare)", + "value": "ILooksRare" + }, + "id": 9689, + "name": "Identifier", + "src": "15243:10:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8663, + "type": "address", + "value": "looksRare" + }, + "id": 9690, + "name": "Identifier", + "src": "15254:9:66" + } + ], + "id": 9691, + "name": "FunctionCall", + "src": "15243:21:66" + } + ], + "id": 9692, + "name": "MemberAccess", + "src": "15243:57:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9693, + "name": "Identifier", + "src": "15308:13:66" + } + ], + "id": 9694, + "name": "FunctionCallOptions", + "src": "15243:79:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9651, + "type": "struct LibLooksRare.TakerOrder memory", + "value": "takerOrder" + }, + "id": 9695, + "name": "Identifier", + "src": "15323:10:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9653, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 9696, + "name": "Identifier", + "src": "15335:10:66" + } + ], + "id": 9697, + "name": "FunctionCall", + "src": "15243:103:66" + } + ], + "id": 9698, + "name": "ExpressionStatement", + "src": "15243:103:66" + } + ], + "id": 9699, + "name": "Block", + "src": "15225:136:66" + } + ], + "id": 9700, + "name": "IfStatement", + "src": "14994:367:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9655, + "type": "bytes4", + "value": "typeNft" + }, + "id": 9701, + "name": "Identifier", + "src": "15378:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "ERC721_ASSET_CLASS", + "referencedDeclaration": 5482, + "type": "bytes4" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 5569, + "type": "type(library LibAsset)", + "value": "LibAsset" + }, + "id": 9702, + "name": "Identifier", + "src": "15389:8:66" + } + ], + "id": 9703, + "name": "MemberAccess", + "src": "15389:27:66" + } + ], + "id": 9704, + "name": "BinaryOperation", + "src": "15378:38:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "safeTransferFrom", + "referencedDeclaration": 1299, + "type": "function (address,address,uint256) external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC721Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1356, + "type": "type(contract IERC721Upgradeable)", + "value": "IERC721Upgradeable" + }, + "id": 9705, + "name": "Identifier", + "src": "15436:18:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "collection", + "referencedDeclaration": 4863, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9653, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 9706, + "name": "Identifier", + "src": "15455:10:66" + } + ], + "id": 9707, + "name": "MemberAccess", + "src": "15455:21:66" + } + ], + "id": 9708, + "name": "FunctionCall", + "src": "15436:41:66" + } + ], + "id": 9709, + "name": "MemberAccess", + "src": "15436:58:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9710, + "name": "ElementaryTypeName", + "src": "15495:7:66" + } + ], + "id": 9711, + "name": "ElementaryTypeNameExpression", + "src": "15495:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeableV2", + "value": "this" + }, + "id": 9712, + "name": "Identifier", + "src": "15503:4:66" + } + ], + "id": 9713, + "name": "FunctionCall", + "src": "15495:13:66" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 9714, + "name": "Identifier", + "src": "15510:10:66" + } + ], + "id": 9715, + "name": "FunctionCall", + "src": "15510:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "tokenId", + "referencedDeclaration": 4867, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9653, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 9716, + "name": "Identifier", + "src": "15524:10:66" + } + ], + "id": 9717, + "name": "MemberAccess", + "src": "15524:18:66" + } + ], + "id": 9718, + "name": "FunctionCall", + "src": "15436:107:66" + } + ], + "id": 9719, + "name": "ExpressionStatement", + "src": "15436:107:66" + } + ], + "id": 9720, + "name": "Block", + "src": "15418:140:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9655, + "type": "bytes4", + "value": "typeNft" + }, + "id": 9721, + "name": "Identifier", + "src": "15568:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "ERC1155_ASSET_CLASS", + "referencedDeclaration": 5490, + "type": "bytes4" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 5569, + "type": "type(library LibAsset)", + "value": "LibAsset" + }, + "id": 9722, + "name": "Identifier", + "src": "15579:8:66" + } + ], + "id": 9723, + "name": "MemberAccess", + "src": "15579:28:66" + } + ], + "id": 9724, + "name": "BinaryOperation", + "src": "15568:39:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "safeTransferFrom", + "referencedDeclaration": 1078, + "type": "function (address,address,uint256,uint256,bytes memory) external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC1155Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1095, + "type": "type(contract IERC1155Upgradeable)", + "value": "IERC1155Upgradeable" + }, + "id": 9725, + "name": "Identifier", + "src": "15627:19:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "collection", + "referencedDeclaration": 4863, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9653, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 9726, + "name": "Identifier", + "src": "15647:10:66" + } + ], + "id": 9727, + "name": "MemberAccess", + "src": "15647:21:66" + } + ], + "id": 9728, + "name": "FunctionCall", + "src": "15627:42:66" + } + ], + "id": 9729, + "name": "MemberAccess", + "src": "15627:59:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9730, + "name": "ElementaryTypeName", + "src": "15687:7:66" + } + ], + "id": 9731, + "name": "ElementaryTypeNameExpression", + "src": "15687:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeableV2", + "value": "this" + }, + "id": 9732, + "name": "Identifier", + "src": "15695:4:66" + } + ], + "id": 9733, + "name": "FunctionCall", + "src": "15687:13:66" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 9734, + "name": "Identifier", + "src": "15702:10:66" + } + ], + "id": 9735, + "name": "FunctionCall", + "src": "15702:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "tokenId", + "referencedDeclaration": 4867, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9653, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 9736, + "name": "Identifier", + "src": "15716:10:66" + } + ], + "id": 9737, + "name": "MemberAccess", + "src": "15716:18:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 4869, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9653, + "type": "struct LibLooksRare.MakerOrder memory", + "value": "makerOrder" + }, + "id": 9738, + "name": "Identifier", + "src": "15736:10:66" + } + ], + "id": 9739, + "name": "MemberAccess", + "src": "15736:17:66" + }, + { + "attributes": { + "hexvalue": "", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"\"", + "value": "" + }, + "id": 9740, + "name": "Literal", + "src": "15755:2:66" + } + ], + "id": 9741, + "name": "FunctionCall", + "src": "15627:131:66" + } + ], + "id": 9742, + "name": "ExpressionStatement", + "src": "15627:131:66" + } + ], + "id": 9743, + "name": "Block", + "src": "15609:164:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b", + "typeString": "literal_string \"Unknown token type\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 9744, + "name": "Identifier", + "src": "15797:6:66" + }, + { + "attributes": { + "hexvalue": "556e6b6e6f776e20746f6b656e2074797065", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Unknown token type\"", + "value": "Unknown token type" + }, + "id": 9745, + "name": "Literal", + "src": "15804:20:66" + } + ], + "id": 9746, + "name": "FunctionCall", + "src": "15797:28:66" + } + ], + "id": 9747, + "name": "ExpressionStatement", + "src": "15797:28:66" + } + ], + "id": 9748, + "name": "Block", + "src": "15779:61:66" + } + ], + "id": 9749, + "name": "IfStatement", + "src": "15564:276:66" + } + ], + "id": 9750, + "name": "IfStatement", + "src": "15374:466:66" + } + ], + "id": 9751, + "name": "Block", + "src": "14779:1071:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9752, + "name": "Identifier", + "src": "15860:15:66" + } + ], + "id": 9753, + "name": "MemberAccess", + "src": "15860:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SudoSwap", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 9754, + "name": "Identifier", + "src": "15888:7:66" + } + ], + "id": 9755, + "name": "MemberAccess", + "src": "15888:16:66" + } + ], + "id": 9756, + "name": "BinaryOperation", + "src": "15860:44:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9758, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9787, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9757, + "name": "ElementaryTypeName", + "src": "15921:4:66" + } + ], + "id": 9758, + "name": "VariableDeclaration", + "src": "15921:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9759, + "name": "ElementaryTypeName", + "src": "15939:7:66" + } + ], + "id": 9760, + "name": "ElementaryTypeNameExpression", + "src": "15939:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8665, + "type": "address", + "value": "sudoswap" + }, + "id": 9761, + "name": "Identifier", + "src": "15947:8:66" + } + ], + "id": 9762, + "name": "FunctionCall", + "src": "15939:17:66" + } + ], + "id": 9763, + "name": "MemberAccess", + "src": "15939:22:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9764, + "name": "Identifier", + "src": "15969:13:66" + } + ], + "id": 9765, + "name": "FunctionCallOptions", + "src": "15939:44:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9261, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9766, + "name": "Identifier", + "src": "15984:10:66" + } + ], + "id": 9767, + "name": "FunctionCall", + "src": "15939:56:66" + } + ], + "id": 9768, + "name": "VariableDeclarationStatement", + "src": "15920:75:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9251, + "type": "bool", + "value": "allowFail" + }, + "id": 9769, + "name": "Identifier", + "src": "16013:9:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9758, + "type": "bool", + "value": "success" + }, + "id": 9770, + "name": "Identifier", + "src": "16047:7:66" + } + ], + "id": 9771, + "name": "UnaryOperation", + "src": "16046:8:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9259 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9772, + "name": "Literal", + "src": "16086:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9773, + "name": "Literal", + "src": "16093:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9774, + "name": "Literal", + "src": "16096:1:66" + } + ], + "id": 9775, + "name": "TupleExpression", + "src": "16085:13:66" + } + ], + "id": 9776, + "name": "Return", + "src": "16078:20:66" + } + ], + "id": 9777, + "name": "Block", + "src": "16056:61:66" + } + ], + "id": 9778, + "name": "IfStatement", + "src": "16042:75:66" + } + ], + "id": 9779, + "name": "Block", + "src": "16024:107:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_af8784af813955ccf5679f356dd871ef58abf3a7050c9104ea0ff5ddaa4b9287", + "typeString": "literal_string \"Purchase sudoswap failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9780, + "name": "Identifier", + "src": "16155:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9758, + "type": "bool", + "value": "success" + }, + "id": 9781, + "name": "Identifier", + "src": "16163:7:66" + }, + { + "attributes": { + "hexvalue": "5075726368617365207375646f73776170206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase sudoswap failed\"", + "value": "Purchase sudoswap failed" + }, + "id": 9782, + "name": "Literal", + "src": "16172:26:66" + } + ], + "id": 9783, + "name": "FunctionCall", + "src": "16155:44:66" + } + ], + "id": 9784, + "name": "ExpressionStatement", + "src": "16155:44:66" + } + ], + "id": 9785, + "name": "Block", + "src": "16137:77:66" + } + ], + "id": 9786, + "name": "IfStatement", + "src": "16009:205:66" + } + ], + "id": 9787, + "name": "Block", + "src": "15906:318:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9788, + "name": "Identifier", + "src": "16234:15:66" + } + ], + "id": 9789, + "name": "MemberAccess", + "src": "16234:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_4", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 9790, + "name": "Identifier", + "src": "16262:7:66" + } + ], + "id": 9791, + "name": "MemberAccess", + "src": "16262:19:66" + } + ], + "id": 9792, + "name": "BinaryOperation", + "src": "16234:47:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9794, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9823, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9793, + "name": "ElementaryTypeName", + "src": "16298:4:66" + } + ], + "id": 9794, + "name": "VariableDeclaration", + "src": "16298:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9795, + "name": "ElementaryTypeName", + "src": "16316:7:66" + } + ], + "id": 9796, + "name": "ElementaryTypeNameExpression", + "src": "16316:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8667, + "type": "address", + "value": "seaPort_1_4" + }, + "id": 9797, + "name": "Identifier", + "src": "16324:11:66" + } + ], + "id": 9798, + "name": "FunctionCall", + "src": "16316:20:66" + } + ], + "id": 9799, + "name": "MemberAccess", + "src": "16316:25:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9800, + "name": "Identifier", + "src": "16349:13:66" + } + ], + "id": 9801, + "name": "FunctionCallOptions", + "src": "16316:47:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9261, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9802, + "name": "Identifier", + "src": "16364:10:66" + } + ], + "id": 9803, + "name": "FunctionCall", + "src": "16316:59:66" + } + ], + "id": 9804, + "name": "VariableDeclarationStatement", + "src": "16297:78:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9251, + "type": "bool", + "value": "allowFail" + }, + "id": 9805, + "name": "Identifier", + "src": "16393:9:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9794, + "type": "bool", + "value": "success" + }, + "id": 9806, + "name": "Identifier", + "src": "16427:7:66" + } + ], + "id": 9807, + "name": "UnaryOperation", + "src": "16426:8:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9259 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9808, + "name": "Literal", + "src": "16466:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9809, + "name": "Literal", + "src": "16473:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9810, + "name": "Literal", + "src": "16476:1:66" + } + ], + "id": 9811, + "name": "TupleExpression", + "src": "16465:13:66" + } + ], + "id": 9812, + "name": "Return", + "src": "16458:20:66" + } + ], + "id": 9813, + "name": "Block", + "src": "16436:61:66" + } + ], + "id": 9814, + "name": "IfStatement", + "src": "16422:75:66" + } + ], + "id": 9815, + "name": "Block", + "src": "16404:107:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1cf39be99a03bb39414ad01e616c59ec2038a5746618a3f8aee8a485d8d5e50a", + "typeString": "literal_string \"Purchase SeaPort_1_4 failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9816, + "name": "Identifier", + "src": "16535:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9794, + "type": "bool", + "value": "success" + }, + "id": 9817, + "name": "Identifier", + "src": "16543:7:66" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f34206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_4 failed\"", + "value": "Purchase SeaPort_1_4 failed" + }, + "id": 9818, + "name": "Literal", + "src": "16552:29:66" + } + ], + "id": 9819, + "name": "FunctionCall", + "src": "16535:47:66" + } + ], + "id": 9820, + "name": "ExpressionStatement", + "src": "16535:47:66" + } + ], + "id": 9821, + "name": "Block", + "src": "16517:80:66" + } + ], + "id": 9822, + "name": "IfStatement", + "src": "16389:208:66" + } + ], + "id": 9823, + "name": "Block", + "src": "16283:324:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9824, + "name": "Identifier", + "src": "16617:15:66" + } + ], + "id": 9825, + "name": "MemberAccess", + "src": "16617:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "LooksRareV2", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 9826, + "name": "Identifier", + "src": "16645:7:66" + } + ], + "id": 9827, + "name": "MemberAccess", + "src": "16645:19:66" + } + ], + "id": 9828, + "name": "BinaryOperation", + "src": "16617:47:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9830, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 9859, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9829, + "name": "ElementaryTypeName", + "src": "16681:4:66" + } + ], + "id": 9830, + "name": "VariableDeclaration", + "src": "16681:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9831, + "name": "ElementaryTypeName", + "src": "16699:7:66" + } + ], + "id": 9832, + "name": "ElementaryTypeNameExpression", + "src": "16699:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8669, + "type": "address", + "value": "looksRareV2" + }, + "id": 9833, + "name": "Identifier", + "src": "16707:11:66" + } + ], + "id": 9834, + "name": "FunctionCall", + "src": "16699:20:66" + } + ], + "id": 9835, + "name": "MemberAccess", + "src": "16699:25:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9836, + "name": "Identifier", + "src": "16732:13:66" + } + ], + "id": 9837, + "name": "FunctionCallOptions", + "src": "16699:47:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9261, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9838, + "name": "Identifier", + "src": "16747:10:66" + } + ], + "id": 9839, + "name": "FunctionCall", + "src": "16699:59:66" + } + ], + "id": 9840, + "name": "VariableDeclarationStatement", + "src": "16680:78:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9251, + "type": "bool", + "value": "allowFail" + }, + "id": 9841, + "name": "Identifier", + "src": "16776:9:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9830, + "type": "bool", + "value": "success" + }, + "id": 9842, + "name": "Identifier", + "src": "16810:7:66" + } + ], + "id": 9843, + "name": "UnaryOperation", + "src": "16809:8:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9259 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9844, + "name": "Literal", + "src": "16849:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9845, + "name": "Literal", + "src": "16856:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9846, + "name": "Literal", + "src": "16859:1:66" + } + ], + "id": 9847, + "name": "TupleExpression", + "src": "16848:13:66" + } + ], + "id": 9848, + "name": "Return", + "src": "16841:20:66" + } + ], + "id": 9849, + "name": "Block", + "src": "16819:61:66" + } + ], + "id": 9850, + "name": "IfStatement", + "src": "16805:75:66" + } + ], + "id": 9851, + "name": "Block", + "src": "16787:107:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_bf725f533a31a5fc822de78c3f59575168899683c9fc9b37f7d7aa10c766d3c1", + "typeString": "literal_string \"Purchase LooksRareV2 failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 9852, + "name": "Identifier", + "src": "16918:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9830, + "type": "bool", + "value": "success" + }, + "id": 9853, + "name": "Identifier", + "src": "16926:7:66" + }, + { + "attributes": { + "hexvalue": "5075726368617365204c6f6f6b73526172655632206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase LooksRareV2 failed\"", + "value": "Purchase LooksRareV2 failed" + }, + "id": 9854, + "name": "Literal", + "src": "16935:29:66" + } + ], + "id": 9855, + "name": "FunctionCall", + "src": "16918:47:66" + } + ], + "id": 9856, + "name": "ExpressionStatement", + "src": "16918:47:66" + } + ], + "id": 9857, + "name": "Block", + "src": "16900:80:66" + } + ], + "id": 9858, + "name": "IfStatement", + "src": "16772:208:66" + } + ], + "id": 9859, + "name": "Block", + "src": "16666:324:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9860, + "name": "Identifier", + "src": "17000:15:66" + } + ], + "id": 9861, + "name": "MemberAccess", + "src": "17000:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "Blur", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 9862, + "name": "Identifier", + "src": "17028:7:66" + } + ], + "id": 9863, + "name": "MemberAccess", + "src": "17028:12:66" + } + ], + "id": 9864, + "name": "BinaryOperation", + "src": "17000:40:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9868, + 9870, + 9872 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "sell", + "scope": 9973, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct IBlur.Input", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "IBlur.Input", + "referencedDeclaration": 4556, + "type": "struct IBlur.Input" + }, + "id": 9867, + "name": "UserDefinedTypeName", + "src": "17057:11:66" + } + ], + "id": 9868, + "name": "VariableDeclaration", + "src": "17057:23:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "buy", + "scope": 9973, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct IBlur.Input", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "IBlur.Input", + "referencedDeclaration": 4556, + "type": "struct IBlur.Input" + }, + "id": 9869, + "name": "UserDefinedTypeName", + "src": "17082:11:66" + } + ], + "id": 9870, + "name": "VariableDeclaration", + "src": "17082:22:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "typeNft", + "scope": 9973, + "stateVariable": false, + "storageLocation": "default", + "type": "bytes4", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes4", + "type": "bytes4" + }, + "id": 9871, + "name": "ElementaryTypeName", + "src": "17106:6:66" + } + ], + "id": 9872, + "name": "VariableDeclaration", + "src": "17106:14:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(struct IBlur.Input memory,struct IBlur.Input memory,bytes4)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_tuple$_t_type$_t_struct$_Input_$4556_storage_ptr_$_$_t_type$_t_struct$_Input_$4556_storage_ptr_$_$_t_type$_t_bytes4_$_$", + "typeString": "tuple(type(struct IBlur.Input storage pointer),type(struct IBlur.Input storage pointer),type(bytes4))" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "decode", + "type": "function () pure" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 9873, + "name": "Identifier", + "src": "17124:3:66" + } + ], + "id": 9874, + "name": "MemberAccess", + "src": "17124:10:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9261, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9875, + "name": "Identifier", + "src": "17135:10:66" + }, + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(type(struct IBlur.Input storage pointer),type(struct IBlur.Input storage pointer),type(bytes4))" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "Input", + "referencedDeclaration": 4556, + "type": "type(struct IBlur.Input storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4564, + "type": "type(contract IBlur)", + "value": "IBlur" + }, + "id": 9876, + "name": "Identifier", + "src": "17148:5:66" + } + ], + "id": 9877, + "name": "MemberAccess", + "src": "17148:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "Input", + "referencedDeclaration": 4556, + "type": "type(struct IBlur.Input storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4564, + "type": "type(contract IBlur)", + "value": "IBlur" + }, + "id": 9878, + "name": "Identifier", + "src": "17161:5:66" + } + ], + "id": 9879, + "name": "MemberAccess", + "src": "17161:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(bytes4)" + }, + "children": [ + { + "attributes": { + "name": "bytes4" + }, + "id": 9880, + "name": "ElementaryTypeName", + "src": "17174:6:66" + } + ], + "id": 9881, + "name": "ElementaryTypeNameExpression", + "src": "17174:6:66" + } + ], + "id": 9882, + "name": "TupleExpression", + "src": "17147:34:66" + } + ], + "id": 9883, + "name": "FunctionCall", + "src": "17124:58:66" + } + ], + "id": 9884, + "name": "VariableDeclarationStatement", + "src": "17056:126:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9251, + "type": "bool", + "value": "allowFail" + }, + "id": 9885, + "name": "Identifier", + "src": "17200:9:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": true, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "execute", + "referencedDeclaration": 4563, + "type": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IBlur", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4564, + "type": "type(contract IBlur)", + "value": "IBlur" + }, + "id": 9886, + "name": "Identifier", + "src": "17233:5:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8671, + "type": "address", + "value": "blur" + }, + "id": 9887, + "name": "Identifier", + "src": "17239:4:66" + } + ], + "id": 9888, + "name": "FunctionCall", + "src": "17233:11:66" + } + ], + "id": 9889, + "name": "MemberAccess", + "src": "17233:19:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9890, + "name": "Identifier", + "src": "17260:13:66" + } + ], + "id": 9891, + "name": "FunctionCallOptions", + "src": "17233:41:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9868, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9892, + "name": "Identifier", + "src": "17275:4:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9870, + "type": "struct IBlur.Input memory", + "value": "buy" + }, + "id": 9893, + "name": "Identifier", + "src": "17281:3:66" + } + ], + "id": 9894, + "name": "FunctionCall", + "src": "17233:52:66" + }, + { + "attributes": { + "errorName": "" + }, + "children": [ + { + "attributes": { + "statements": [ + null + ] + }, + "children": [], + "id": 9895, + "name": "Block", + "src": "17286:2:66" + } + ], + "id": 9896, + "name": "TryCatchClause", + "src": "17286:2:66" + }, + { + "attributes": { + "errorName": "" + }, + "children": [ + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9259 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9897, + "name": "Literal", + "src": "17325:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9898, + "name": "Literal", + "src": "17332:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9899, + "name": "Literal", + "src": "17335:1:66" + } + ], + "id": 9900, + "name": "TupleExpression", + "src": "17324:13:66" + } + ], + "id": 9901, + "name": "Return", + "src": "17317:20:66" + } + ], + "id": 9902, + "name": "Block", + "src": "17295:61:66" + } + ], + "id": 9903, + "name": "TryCatchClause", + "src": "17289:67:66" + } + ], + "id": 9904, + "name": "TryStatement", + "src": "17229:127:66" + } + ], + "id": 9905, + "name": "Block", + "src": "17211:159:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + }, + { + "typeIdentifier": "t_struct$_Input_$4556_memory_ptr", + "typeString": "struct IBlur.Input memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "execute", + "referencedDeclaration": 4563, + "type": "function (struct IBlur.Input memory,struct IBlur.Input memory) payable external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IBlur", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4564, + "type": "type(contract IBlur)", + "value": "IBlur" + }, + "id": 9906, + "name": "Identifier", + "src": "17394:5:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8671, + "type": "address", + "value": "blur" + }, + "id": 9907, + "name": "Identifier", + "src": "17400:4:66" + } + ], + "id": 9908, + "name": "FunctionCall", + "src": "17394:11:66" + } + ], + "id": 9909, + "name": "MemberAccess", + "src": "17394:19:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9910, + "name": "Identifier", + "src": "17421:13:66" + } + ], + "id": 9911, + "name": "FunctionCallOptions", + "src": "17394:41:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9868, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9912, + "name": "Identifier", + "src": "17436:4:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9870, + "type": "struct IBlur.Input memory", + "value": "buy" + }, + "id": 9913, + "name": "Identifier", + "src": "17442:3:66" + } + ], + "id": 9914, + "name": "FunctionCall", + "src": "17394:52:66" + } + ], + "id": 9915, + "name": "ExpressionStatement", + "src": "17394:52:66" + } + ], + "id": 9916, + "name": "Block", + "src": "17376:85:66" + } + ], + "id": 9917, + "name": "IfStatement", + "src": "17196:265:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9872, + "type": "bytes4", + "value": "typeNft" + }, + "id": 9918, + "name": "Identifier", + "src": "17478:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "ERC721_ASSET_CLASS", + "referencedDeclaration": 5482, + "type": "bytes4" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 5569, + "type": "type(library LibAsset)", + "value": "LibAsset" + }, + "id": 9919, + "name": "Identifier", + "src": "17489:8:66" + } + ], + "id": 9920, + "name": "MemberAccess", + "src": "17489:27:66" + } + ], + "id": 9921, + "name": "BinaryOperation", + "src": "17478:38:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "safeTransferFrom", + "referencedDeclaration": 1299, + "type": "function (address,address,uint256) external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC721Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1356, + "type": "type(contract IERC721Upgradeable)", + "value": "IERC721Upgradeable" + }, + "id": 9922, + "name": "Identifier", + "src": "17536:18:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "collection", + "referencedDeclaration": 4521, + "type": "address" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "order", + "referencedDeclaration": 4543, + "type": "struct IBlur.Order memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9868, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9923, + "name": "Identifier", + "src": "17555:4:66" + } + ], + "id": 9924, + "name": "MemberAccess", + "src": "17555:10:66" + } + ], + "id": 9925, + "name": "MemberAccess", + "src": "17555:21:66" + } + ], + "id": 9926, + "name": "FunctionCall", + "src": "17536:41:66" + } + ], + "id": 9927, + "name": "MemberAccess", + "src": "17536:58:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9928, + "name": "ElementaryTypeName", + "src": "17595:7:66" + } + ], + "id": 9929, + "name": "ElementaryTypeNameExpression", + "src": "17595:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeableV2", + "value": "this" + }, + "id": 9930, + "name": "Identifier", + "src": "17603:4:66" + } + ], + "id": 9931, + "name": "FunctionCall", + "src": "17595:13:66" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 9932, + "name": "Identifier", + "src": "17610:10:66" + } + ], + "id": 9933, + "name": "FunctionCall", + "src": "17610:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "tokenId", + "referencedDeclaration": 4523, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "order", + "referencedDeclaration": 4543, + "type": "struct IBlur.Order memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9868, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9934, + "name": "Identifier", + "src": "17624:4:66" + } + ], + "id": 9935, + "name": "MemberAccess", + "src": "17624:10:66" + } + ], + "id": 9936, + "name": "MemberAccess", + "src": "17624:18:66" + } + ], + "id": 9937, + "name": "FunctionCall", + "src": "17536:107:66" + } + ], + "id": 9938, + "name": "ExpressionStatement", + "src": "17536:107:66" + } + ], + "id": 9939, + "name": "Block", + "src": "17518:140:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bytes4", + "typeString": "bytes4" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9872, + "type": "bytes4", + "value": "typeNft" + }, + "id": 9940, + "name": "Identifier", + "src": "17668:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "ERC1155_ASSET_CLASS", + "referencedDeclaration": 5490, + "type": "bytes4" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 5569, + "type": "type(library LibAsset)", + "value": "LibAsset" + }, + "id": 9941, + "name": "Identifier", + "src": "17679:8:66" + } + ], + "id": 9942, + "name": "MemberAccess", + "src": "17679:28:66" + } + ], + "id": 9943, + "name": "BinaryOperation", + "src": "17668:39:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "typeString": "literal_string \"\"" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "safeTransferFrom", + "referencedDeclaration": 1078, + "type": "function (address,address,uint256,uint256,bytes memory) external" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC1155Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1095, + "type": "type(contract IERC1155Upgradeable)", + "value": "IERC1155Upgradeable" + }, + "id": 9944, + "name": "Identifier", + "src": "17727:19:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "collection", + "referencedDeclaration": 4521, + "type": "address" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "order", + "referencedDeclaration": 4543, + "type": "struct IBlur.Order memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9868, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9945, + "name": "Identifier", + "src": "17747:4:66" + } + ], + "id": 9946, + "name": "MemberAccess", + "src": "17747:10:66" + } + ], + "id": 9947, + "name": "MemberAccess", + "src": "17747:21:66" + } + ], + "id": 9948, + "name": "FunctionCall", + "src": "17727:42:66" + } + ], + "id": 9949, + "name": "MemberAccess", + "src": "17727:59:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9950, + "name": "ElementaryTypeName", + "src": "17787:7:66" + } + ], + "id": 9951, + "name": "ElementaryTypeNameExpression", + "src": "17787:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeableV2", + "value": "this" + }, + "id": 9952, + "name": "Identifier", + "src": "17795:4:66" + } + ], + "id": 9953, + "name": "FunctionCall", + "src": "17787:13:66" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 9954, + "name": "Identifier", + "src": "17802:10:66" + } + ], + "id": 9955, + "name": "FunctionCall", + "src": "17802:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "tokenId", + "referencedDeclaration": 4523, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "order", + "referencedDeclaration": 4543, + "type": "struct IBlur.Order memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9868, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9956, + "name": "Identifier", + "src": "17816:4:66" + } + ], + "id": 9957, + "name": "MemberAccess", + "src": "17816:10:66" + } + ], + "id": 9958, + "name": "MemberAccess", + "src": "17816:18:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 4525, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "order", + "referencedDeclaration": 4543, + "type": "struct IBlur.Order memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9868, + "type": "struct IBlur.Input memory", + "value": "sell" + }, + "id": 9959, + "name": "Identifier", + "src": "17836:4:66" + } + ], + "id": 9960, + "name": "MemberAccess", + "src": "17836:10:66" + } + ], + "id": 9961, + "name": "MemberAccess", + "src": "17836:17:66" + }, + { + "attributes": { + "hexvalue": "", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"\"", + "value": "" + }, + "id": 9962, + "name": "Literal", + "src": "17855:2:66" + } + ], + "id": 9963, + "name": "FunctionCall", + "src": "17727:131:66" + } + ], + "id": 9964, + "name": "ExpressionStatement", + "src": "17727:131:66" + } + ], + "id": 9965, + "name": "Block", + "src": "17709:164:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_cee65ebea6da90561a870e38c51a3fb197e91f69ad4e41d59c54465ab6d6e37b", + "typeString": "literal_string \"Unknown token type\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 9966, + "name": "Identifier", + "src": "17897:6:66" + }, + { + "attributes": { + "hexvalue": "556e6b6e6f776e20746f6b656e2074797065", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Unknown token type\"", + "value": "Unknown token type" + }, + "id": 9967, + "name": "Literal", + "src": "17904:20:66" + } + ], + "id": 9968, + "name": "FunctionCall", + "src": "17897:28:66" + } + ], + "id": 9969, + "name": "ExpressionStatement", + "src": "17897:28:66" + } + ], + "id": 9970, + "name": "Block", + "src": "17879:61:66" + } + ], + "id": 9971, + "name": "IfStatement", + "src": "17664:276:66" + } + ], + "id": 9972, + "name": "IfStatement", + "src": "17474:466:66" + } + ], + "id": 9973, + "name": "Block", + "src": "17042:908:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 9974, + "name": "Identifier", + "src": "17960:15:66" + } + ], + "id": 9975, + "name": "MemberAccess", + "src": "17960:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_5", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 9976, + "name": "Identifier", + "src": "17988:7:66" + } + ], + "id": 9977, + "name": "MemberAccess", + "src": "17988:19:66" + } + ], + "id": 9978, + "name": "BinaryOperation", + "src": "17960:47:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 9980, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 10009, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 9979, + "name": "ElementaryTypeName", + "src": "18024:4:66" + } + ], + "id": 9980, + "name": "VariableDeclaration", + "src": "18024:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 9981, + "name": "ElementaryTypeName", + "src": "18042:7:66" + } + ], + "id": 9982, + "name": "ElementaryTypeNameExpression", + "src": "18042:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8673, + "type": "address", + "value": "seaPort_1_5" + }, + "id": 9983, + "name": "Identifier", + "src": "18050:11:66" + } + ], + "id": 9984, + "name": "FunctionCall", + "src": "18042:20:66" + } + ], + "id": 9985, + "name": "MemberAccess", + "src": "18042:25:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 9986, + "name": "Identifier", + "src": "18075:13:66" + } + ], + "id": 9987, + "name": "FunctionCallOptions", + "src": "18042:47:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9261, + "type": "bytes memory", + "value": "marketData" + }, + "id": 9988, + "name": "Identifier", + "src": "18090:10:66" + } + ], + "id": 9989, + "name": "FunctionCall", + "src": "18042:59:66" + } + ], + "id": 9990, + "name": "VariableDeclarationStatement", + "src": "18023:78:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9251, + "type": "bool", + "value": "allowFail" + }, + "id": 9991, + "name": "Identifier", + "src": "18119:9:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9980, + "type": "bool", + "value": "success" + }, + "id": 9992, + "name": "Identifier", + "src": "18153:7:66" + } + ], + "id": 9993, + "name": "UnaryOperation", + "src": "18152:8:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9259 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 9994, + "name": "Literal", + "src": "18192:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9995, + "name": "Literal", + "src": "18199:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 9996, + "name": "Literal", + "src": "18202:1:66" + } + ], + "id": 9997, + "name": "TupleExpression", + "src": "18191:13:66" + } + ], + "id": 9998, + "name": "Return", + "src": "18184:20:66" + } + ], + "id": 9999, + "name": "Block", + "src": "18162:61:66" + } + ], + "id": 10000, + "name": "IfStatement", + "src": "18148:75:66" + } + ], + "id": 10001, + "name": "Block", + "src": "18130:107:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_83f62501a9582b49b15f73bfa16e8789fc9181acb73eb6b2a01520c5a8cee0ce", + "typeString": "literal_string \"Purchase SeaPort_1_5 failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 10002, + "name": "Identifier", + "src": "18261:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9980, + "type": "bool", + "value": "success" + }, + "id": 10003, + "name": "Identifier", + "src": "18269:7:66" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f35206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_5 failed\"", + "value": "Purchase SeaPort_1_5 failed" + }, + "id": 10004, + "name": "Literal", + "src": "18278:29:66" + } + ], + "id": 10005, + "name": "FunctionCall", + "src": "18261:47:66" + } + ], + "id": 10006, + "name": "ExpressionStatement", + "src": "18261:47:66" + } + ], + "id": 10007, + "name": "Block", + "src": "18243:80:66" + } + ], + "id": 10008, + "name": "IfStatement", + "src": "18115:208:66" + } + ], + "id": 10009, + "name": "Block", + "src": "18009:324:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10010, + "name": "Identifier", + "src": "18343:15:66" + } + ], + "id": 10011, + "name": "MemberAccess", + "src": "18343:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_6", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10012, + "name": "Identifier", + "src": "18371:7:66" + } + ], + "id": 10013, + "name": "MemberAccess", + "src": "18371:19:66" + } + ], + "id": 10014, + "name": "BinaryOperation", + "src": "18343:47:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10016, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 10045, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 10015, + "name": "ElementaryTypeName", + "src": "18407:4:66" + } + ], + "id": 10016, + "name": "VariableDeclaration", + "src": "18407:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "names": [ + "value" + ], + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10017, + "name": "ElementaryTypeName", + "src": "18425:7:66" + } + ], + "id": 10018, + "name": "ElementaryTypeNameExpression", + "src": "18425:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8675, + "type": "address", + "value": "seaPort_1_6" + }, + "id": 10019, + "name": "Identifier", + "src": "18433:11:66" + } + ], + "id": 10020, + "name": "FunctionCall", + "src": "18425:20:66" + } + ], + "id": 10021, + "name": "MemberAccess", + "src": "18425:25:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9275, + "type": "uint256", + "value": "paymentAmount" + }, + "id": 10022, + "name": "Identifier", + "src": "18458:13:66" + } + ], + "id": 10023, + "name": "FunctionCallOptions", + "src": "18425:47:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9261, + "type": "bytes memory", + "value": "marketData" + }, + "id": 10024, + "name": "Identifier", + "src": "18473:10:66" + } + ], + "id": 10025, + "name": "FunctionCall", + "src": "18425:59:66" + } + ], + "id": 10026, + "name": "VariableDeclarationStatement", + "src": "18406:78:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9251, + "type": "bool", + "value": "allowFail" + }, + "id": 10027, + "name": "Identifier", + "src": "18502:9:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10016, + "type": "bool", + "value": "success" + }, + "id": 10028, + "name": "Identifier", + "src": "18536:7:66" + } + ], + "id": 10029, + "name": "UnaryOperation", + "src": "18535:8:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 9259 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 10030, + "name": "Literal", + "src": "18575:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10031, + "name": "Literal", + "src": "18582:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10032, + "name": "Literal", + "src": "18585:1:66" + } + ], + "id": 10033, + "name": "TupleExpression", + "src": "18574:13:66" + } + ], + "id": 10034, + "name": "Return", + "src": "18567:20:66" + } + ], + "id": 10035, + "name": "Block", + "src": "18545:61:66" + } + ], + "id": 10036, + "name": "IfStatement", + "src": "18531:75:66" + } + ], + "id": 10037, + "name": "Block", + "src": "18513:107:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5320b653cd5780735adae92ac3bcf0fff2a8be3d44e7d778c7caac0f6e924b5d", + "typeString": "literal_string \"Purchase SeaPort_1_6 failed\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 10038, + "name": "Identifier", + "src": "18644:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10016, + "type": "bool", + "value": "success" + }, + "id": 10039, + "name": "Identifier", + "src": "18652:7:66" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f36206661696c6564", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_6 failed\"", + "value": "Purchase SeaPort_1_6 failed" + }, + "id": 10040, + "name": "Literal", + "src": "18661:29:66" + } + ], + "id": 10041, + "name": "FunctionCall", + "src": "18644:47:66" + } + ], + "id": 10042, + "name": "ExpressionStatement", + "src": "18644:47:66" + } + ], + "id": 10043, + "name": "Block", + "src": "18626:80:66" + } + ], + "id": 10044, + "name": "IfStatement", + "src": "18498:208:66" + } + ], + "id": 10045, + "name": "Block", + "src": "18392:324:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10046, + "name": "Identifier", + "src": "18726:15:66" + } + ], + "id": 10047, + "name": "MemberAccess", + "src": "18726:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "NewMarket", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10048, + "name": "Identifier", + "src": "18754:7:66" + } + ], + "id": 10049, + "name": "MemberAccess", + "src": "18754:17:66" + } + ], + "id": 10050, + "name": "BinaryOperation", + "src": "18726:45:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_eca0115108343535314aab82fd1751e6b0aefc82e973d3018693051f60d56563", + "typeString": "literal_string \"NewMarket address is not set\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 10051, + "name": "Identifier", + "src": "18835:7:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8677, + "type": "address", + "value": "newMarket" + }, + "id": 10052, + "name": "Identifier", + "src": "18843:9:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10053, + "name": "ElementaryTypeName", + "src": "18856:7:66" + } + ], + "id": 10054, + "name": "ElementaryTypeNameExpression", + "src": "18856:7:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10055, + "name": "Literal", + "src": "18864:1:66" + } + ], + "id": 10056, + "name": "FunctionCall", + "src": "18856:10:66" + } + ], + "id": 10057, + "name": "BinaryOperation", + "src": "18843:23:66" + }, + { + "attributes": { + "hexvalue": "4e65774d61726b65742061646472657373206973206e6f7420736574", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"NewMarket address is not set\"", + "value": "NewMarket address is not set" + }, + "id": 10058, + "name": "Literal", + "src": "18868:30:66" + } + ], + "id": 10059, + "name": "FunctionCall", + "src": "18835:64:66" + } + ], + "id": 10060, + "name": "ExpressionStatement", + "src": "18835:64:66" + } + ], + "id": 10061, + "name": "Block", + "src": "18773:137:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_3bc896cadc7524646943368edd2f41dfd35c78e313328c146d90408931cae185", + "typeString": "literal_string \"Unknown marketId ETH\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 10062, + "name": "Identifier", + "src": "18930:6:66" + }, + { + "attributes": { + "hexvalue": "556e6b6e6f776e206d61726b6574496420455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Unknown marketId ETH\"", + "value": "Unknown marketId ETH" + }, + "id": 10063, + "name": "Literal", + "src": "18937:22:66" + } + ], + "id": 10064, + "name": "FunctionCall", + "src": "18930:30:66" + } + ], + "id": 10065, + "name": "ExpressionStatement", + "src": "18930:30:66" + } + ], + "id": 10066, + "name": "Block", + "src": "18916:55:66" + } + ], + "id": 10067, + "name": "IfStatement", + "src": "18722:249:66" + } + ], + "id": 10068, + "name": "IfStatement", + "src": "18339:632:66" + } + ], + "id": 10069, + "name": "IfStatement", + "src": "17956:1015:66" + } + ], + "id": 10070, + "name": "IfStatement", + "src": "16996:1975:66" + } + ], + "id": 10071, + "name": "IfStatement", + "src": "16613:2358:66" + } + ], + "id": 10072, + "name": "IfStatement", + "src": "16230:2741:66" + } + ], + "id": 10073, + "name": "IfStatement", + "src": "15856:3115:66" + } + ], + "id": 10074, + "name": "IfStatement", + "src": "14722:4249:66" + } + ], + "id": 10075, + "name": "IfStatement", + "src": "12540:6431:66" + } + ], + "id": 10076, + "name": "IfStatement", + "src": "12163:6808:66" + } + ], + "id": 10077, + "name": "IfStatement", + "src": "11771:7200:66" + } + ], + "id": 10078, + "name": "IfStatement", + "src": "11388:7583:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10655, + "type": "function (uint256[] memory,uint256)", + "value": "transferAdditionalRoyaltiesETH" + }, + "id": 10079, + "name": "Identifier", + "src": "19014:30:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9264, + "type": "uint256[] memory", + "value": "additionalRoyalties" + }, + "id": 10080, + "name": "Identifier", + "src": "19045:19:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8719, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10081, + "name": "Identifier", + "src": "19066:15:66" + } + ], + "id": 10082, + "name": "MemberAccess", + "src": "19066:22:66" + } + ], + "id": 10083, + "name": "FunctionCall", + "src": "19014:75:66" + } + ], + "id": 10084, + "name": "ExpressionStatement", + "src": "19014:75:66" + }, + { + "attributes": { + "assignments": [ + 10086, + 10088 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "firstFeeAmount", + "scope": 10101, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10085, + "name": "ElementaryTypeName", + "src": "19101:7:66" + } + ], + "id": 10086, + "name": "VariableDeclaration", + "src": "19101:22:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "secondFeeAmount", + "scope": 10101, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10087, + "name": "ElementaryTypeName", + "src": "19125:7:66" + } + ], + "id": 10088, + "name": "VariableDeclaration", + "src": "19125:23:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10493, + "type": "function (uint256,uint256) pure returns (uint256,uint256)", + "value": "getFees" + }, + "id": 10089, + "name": "Identifier", + "src": "19152:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8721, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10090, + "name": "Identifier", + "src": "19160:15:66" + } + ], + "id": 10091, + "name": "MemberAccess", + "src": "19160:20:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8719, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 9249, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10092, + "name": "Identifier", + "src": "19182:15:66" + } + ], + "id": 10093, + "name": "MemberAccess", + "src": "19182:22:66" + } + ], + "id": 10094, + "name": "FunctionCall", + "src": "19152:53:66" + } + ], + "id": 10095, + "name": "VariableDeclarationStatement", + "src": "19100:105:66" + }, + { + "attributes": { + "functionReturnParameters": 9259 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(bool,uint256,uint256)" + }, + "children": [ + { + "attributes": { + "hexvalue": "74727565", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "true" + }, + "id": 10096, + "name": "Literal", + "src": "19223:4:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10086, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 10097, + "name": "Identifier", + "src": "19229:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10088, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 10098, + "name": "Identifier", + "src": "19245:15:66" + } + ], + "id": 10099, + "name": "TupleExpression", + "src": "19222:39:66" + } + ], + "id": 10100, + "name": "Return", + "src": "19215:46:66" + } + ], + "id": 10101, + "name": "Block", + "src": "11152:8116:66" + } + ], + "id": 10102, + "name": "FunctionDefinition", + "src": "10970:8298:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "purchaseWETH", + "scope": 11101, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice executes one purchase in WETH\n@param purchaseDetails - details about the purchase\n@param allowFail - true if errors are handled, false if revert on errors\n@return result false if execution failed, true if succeded\n@return firstFeeAmount amount of the first fee of the purchase, 0 if failed\n@return secondFeeAmount amount of the second fee of the purchase, 0 if failed" + }, + "id": 10103, + "name": "StructuredDocumentation", + "src": "19274:435:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "purchaseDetails", + "scope": 10333, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "PurchaseDetails", + "referencedDeclaration": 8724, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + }, + "id": 10104, + "name": "UserDefinedTypeName", + "src": "19736:15:66" + } + ], + "id": 10105, + "name": "VariableDeclaration", + "src": "19736:38:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "allowFail", + "scope": 10333, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 10106, + "name": "ElementaryTypeName", + "src": "19776:4:66" + } + ], + "id": 10107, + "name": "VariableDeclaration", + "src": "19776:14:66" + } + ], + "id": 10108, + "name": "ParameterList", + "src": "19735:56:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10333, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 10109, + "name": "ElementaryTypeName", + "src": "19839:4:66" + } + ], + "id": 10110, + "name": "VariableDeclaration", + "src": "19839:4:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10333, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10111, + "name": "ElementaryTypeName", + "src": "19857:7:66" + } + ], + "id": 10112, + "name": "VariableDeclaration", + "src": "19857:7:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10333, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10113, + "name": "ElementaryTypeName", + "src": "19878:7:66" + } + ], + "id": 10114, + "name": "VariableDeclaration", + "src": "19878:7:66" + } + ], + "id": 10115, + "name": "ParameterList", + "src": "19825:70:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10117, + 10120 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "marketData", + "scope": 10332, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 10116, + "name": "ElementaryTypeName", + "src": "19911:5:66" + } + ], + "id": 10117, + "name": "VariableDeclaration", + "src": "19911:23:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "additionalRoyalties", + "scope": 10332, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10118, + "name": "ElementaryTypeName", + "src": "19936:7:66" + } + ], + "id": 10119, + "name": "ArrayTypeName", + "src": "19936:9:66" + } + ], + "id": 10120, + "name": "VariableDeclaration", + "src": "19936:36:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bytes memory,uint256[] memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10590, + "type": "function (bytes memory,uint256,enum RaribleExchangeWrapperUpgradeableV2.Markets) pure returns (bytes memory,uint256[] memory)", + "value": "getDataAndAdditionalData" + }, + "id": 10121, + "name": "Identifier", + "src": "19976:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "data", + "referencedDeclaration": 8723, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10105, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10122, + "name": "Identifier", + "src": "20001:15:66" + } + ], + "id": 10123, + "name": "MemberAccess", + "src": "20001:20:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8721, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10105, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10124, + "name": "Identifier", + "src": "20023:15:66" + } + ], + "id": 10125, + "name": "MemberAccess", + "src": "20023:20:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10105, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10126, + "name": "Identifier", + "src": "20045:15:66" + } + ], + "id": 10127, + "name": "MemberAccess", + "src": "20045:24:66" + } + ], + "id": 10128, + "name": "FunctionCall", + "src": "19976:94:66" + } + ], + "id": 10129, + "name": "VariableDeclarationStatement", + "src": "19910:160:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10105, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10130, + "name": "Identifier", + "src": "20102:15:66" + } + ], + "id": 10131, + "name": "MemberAccess", + "src": "20102:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_1", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10132, + "name": "Identifier", + "src": "20130:7:66" + } + ], + "id": 10133, + "name": "MemberAccess", + "src": "20130:19:66" + } + ], + "id": 10134, + "name": "BinaryOperation", + "src": "20102:47:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10136, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 10163, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 10135, + "name": "ElementaryTypeName", + "src": "20166:4:66" + } + ], + "id": 10136, + "name": "VariableDeclaration", + "src": "20166:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10137, + "name": "ElementaryTypeName", + "src": "20184:7:66" + } + ], + "id": 10138, + "name": "ElementaryTypeNameExpression", + "src": "20184:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8659, + "type": "address", + "value": "seaPort_1_1" + }, + "id": 10139, + "name": "Identifier", + "src": "20192:11:66" + } + ], + "id": 10140, + "name": "FunctionCall", + "src": "20184:20:66" + } + ], + "id": 10141, + "name": "MemberAccess", + "src": "20184:25:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10117, + "type": "bytes memory", + "value": "marketData" + }, + "id": 10142, + "name": "Identifier", + "src": "20210:10:66" + } + ], + "id": 10143, + "name": "FunctionCall", + "src": "20184:37:66" + } + ], + "id": 10144, + "name": "VariableDeclarationStatement", + "src": "20165:56:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10107, + "type": "bool", + "value": "allowFail" + }, + "id": 10145, + "name": "Identifier", + "src": "20239:9:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10136, + "type": "bool", + "value": "success" + }, + "id": 10146, + "name": "Identifier", + "src": "20273:7:66" + } + ], + "id": 10147, + "name": "UnaryOperation", + "src": "20272:8:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 10115 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 10148, + "name": "Literal", + "src": "20312:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10149, + "name": "Literal", + "src": "20319:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10150, + "name": "Literal", + "src": "20322:1:66" + } + ], + "id": 10151, + "name": "TupleExpression", + "src": "20311:13:66" + } + ], + "id": 10152, + "name": "Return", + "src": "20304:20:66" + } + ], + "id": 10153, + "name": "Block", + "src": "20282:61:66" + } + ], + "id": 10154, + "name": "IfStatement", + "src": "20268:75:66" + } + ], + "id": 10155, + "name": "Block", + "src": "20250:107:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_9d7bf9b147b8e8ea1a011a4553d7d866e6536c248028d8dc1aeaa1b40c8d32c7", + "typeString": "literal_string \"Purchase SeaPort_1_1 failed WETH\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 10156, + "name": "Identifier", + "src": "20381:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10136, + "type": "bool", + "value": "success" + }, + "id": 10157, + "name": "Identifier", + "src": "20389:7:66" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f31206661696c65642057455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_1 failed WETH\"", + "value": "Purchase SeaPort_1_1 failed WETH" + }, + "id": 10158, + "name": "Literal", + "src": "20398:34:66" + } + ], + "id": 10159, + "name": "FunctionCall", + "src": "20381:52:66" + } + ], + "id": 10160, + "name": "ExpressionStatement", + "src": "20381:52:66" + } + ], + "id": 10161, + "name": "Block", + "src": "20363:85:66" + } + ], + "id": 10162, + "name": "IfStatement", + "src": "20235:213:66" + } + ], + "id": 10163, + "name": "Block", + "src": "20151:307:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10105, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10164, + "name": "Identifier", + "src": "20468:15:66" + } + ], + "id": 10165, + "name": "MemberAccess", + "src": "20468:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "ExchangeV2", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10166, + "name": "Identifier", + "src": "20496:7:66" + } + ], + "id": 10167, + "name": "MemberAccess", + "src": "20496:18:66" + } + ], + "id": 10168, + "name": "BinaryOperation", + "src": "20468:46:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10170, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 10197, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 10169, + "name": "ElementaryTypeName", + "src": "20531:4:66" + } + ], + "id": 10170, + "name": "VariableDeclaration", + "src": "20531:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10171, + "name": "ElementaryTypeName", + "src": "20549:7:66" + } + ], + "id": 10172, + "name": "ElementaryTypeNameExpression", + "src": "20549:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8657, + "type": "address", + "value": "exchangeV2" + }, + "id": 10173, + "name": "Identifier", + "src": "20557:10:66" + } + ], + "id": 10174, + "name": "FunctionCall", + "src": "20549:19:66" + } + ], + "id": 10175, + "name": "MemberAccess", + "src": "20549:24:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10117, + "type": "bytes memory", + "value": "marketData" + }, + "id": 10176, + "name": "Identifier", + "src": "20574:10:66" + } + ], + "id": 10177, + "name": "FunctionCall", + "src": "20549:36:66" + } + ], + "id": 10178, + "name": "VariableDeclarationStatement", + "src": "20530:55:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10107, + "type": "bool", + "value": "allowFail" + }, + "id": 10179, + "name": "Identifier", + "src": "20603:9:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10170, + "type": "bool", + "value": "success" + }, + "id": 10180, + "name": "Identifier", + "src": "20637:7:66" + } + ], + "id": 10181, + "name": "UnaryOperation", + "src": "20636:8:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 10115 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 10182, + "name": "Literal", + "src": "20676:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10183, + "name": "Literal", + "src": "20683:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10184, + "name": "Literal", + "src": "20686:1:66" + } + ], + "id": 10185, + "name": "TupleExpression", + "src": "20675:13:66" + } + ], + "id": 10186, + "name": "Return", + "src": "20668:20:66" + } + ], + "id": 10187, + "name": "Block", + "src": "20646:61:66" + } + ], + "id": 10188, + "name": "IfStatement", + "src": "20632:75:66" + } + ], + "id": 10189, + "name": "Block", + "src": "20614:107:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_2ec0a2b485cd497572ad8de2f4110630fd04a79c3fc75a9aaa133bc5c098fd7e", + "typeString": "literal_string \"Purchase rarible failed WETH\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 10190, + "name": "Identifier", + "src": "20745:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10170, + "type": "bool", + "value": "success" + }, + "id": 10191, + "name": "Identifier", + "src": "20753:7:66" + }, + { + "attributes": { + "hexvalue": "50757263686173652072617269626c65206661696c65642057455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase rarible failed WETH\"", + "value": "Purchase rarible failed WETH" + }, + "id": 10192, + "name": "Literal", + "src": "20762:30:66" + } + ], + "id": 10193, + "name": "FunctionCall", + "src": "20745:48:66" + } + ], + "id": 10194, + "name": "ExpressionStatement", + "src": "20745:48:66" + } + ], + "id": 10195, + "name": "Block", + "src": "20727:81:66" + } + ], + "id": 10196, + "name": "IfStatement", + "src": "20599:209:66" + } + ], + "id": 10197, + "name": "Block", + "src": "20516:302:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10105, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10198, + "name": "Identifier", + "src": "20828:15:66" + } + ], + "id": 10199, + "name": "MemberAccess", + "src": "20828:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_4", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10200, + "name": "Identifier", + "src": "20856:7:66" + } + ], + "id": 10201, + "name": "MemberAccess", + "src": "20856:19:66" + } + ], + "id": 10202, + "name": "BinaryOperation", + "src": "20828:47:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10204, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 10231, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 10203, + "name": "ElementaryTypeName", + "src": "20892:4:66" + } + ], + "id": 10204, + "name": "VariableDeclaration", + "src": "20892:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10205, + "name": "ElementaryTypeName", + "src": "20910:7:66" + } + ], + "id": 10206, + "name": "ElementaryTypeNameExpression", + "src": "20910:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8667, + "type": "address", + "value": "seaPort_1_4" + }, + "id": 10207, + "name": "Identifier", + "src": "20918:11:66" + } + ], + "id": 10208, + "name": "FunctionCall", + "src": "20910:20:66" + } + ], + "id": 10209, + "name": "MemberAccess", + "src": "20910:25:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10117, + "type": "bytes memory", + "value": "marketData" + }, + "id": 10210, + "name": "Identifier", + "src": "20936:10:66" + } + ], + "id": 10211, + "name": "FunctionCall", + "src": "20910:37:66" + } + ], + "id": 10212, + "name": "VariableDeclarationStatement", + "src": "20891:56:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10107, + "type": "bool", + "value": "allowFail" + }, + "id": 10213, + "name": "Identifier", + "src": "20965:9:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10204, + "type": "bool", + "value": "success" + }, + "id": 10214, + "name": "Identifier", + "src": "20999:7:66" + } + ], + "id": 10215, + "name": "UnaryOperation", + "src": "20998:8:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 10115 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 10216, + "name": "Literal", + "src": "21038:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10217, + "name": "Literal", + "src": "21045:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10218, + "name": "Literal", + "src": "21048:1:66" + } + ], + "id": 10219, + "name": "TupleExpression", + "src": "21037:13:66" + } + ], + "id": 10220, + "name": "Return", + "src": "21030:20:66" + } + ], + "id": 10221, + "name": "Block", + "src": "21008:61:66" + } + ], + "id": 10222, + "name": "IfStatement", + "src": "20994:75:66" + } + ], + "id": 10223, + "name": "Block", + "src": "20976:107:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_05a847584de3c2ae6c800d1f7b0a5d67e8bceaac16366dec690fd8433d46a23a", + "typeString": "literal_string \"Purchase SeaPort_1_4 failed WETH\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 10224, + "name": "Identifier", + "src": "21107:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10204, + "type": "bool", + "value": "success" + }, + "id": 10225, + "name": "Identifier", + "src": "21115:7:66" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f34206661696c65642057455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_4 failed WETH\"", + "value": "Purchase SeaPort_1_4 failed WETH" + }, + "id": 10226, + "name": "Literal", + "src": "21124:34:66" + } + ], + "id": 10227, + "name": "FunctionCall", + "src": "21107:52:66" + } + ], + "id": 10228, + "name": "ExpressionStatement", + "src": "21107:52:66" + } + ], + "id": 10229, + "name": "Block", + "src": "21089:85:66" + } + ], + "id": 10230, + "name": "IfStatement", + "src": "20961:213:66" + } + ], + "id": 10231, + "name": "Block", + "src": "20877:307:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10105, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10232, + "name": "Identifier", + "src": "21194:15:66" + } + ], + "id": 10233, + "name": "MemberAccess", + "src": "21194:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_5", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10234, + "name": "Identifier", + "src": "21222:7:66" + } + ], + "id": 10235, + "name": "MemberAccess", + "src": "21222:19:66" + } + ], + "id": 10236, + "name": "BinaryOperation", + "src": "21194:47:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10238, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 10265, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 10237, + "name": "ElementaryTypeName", + "src": "21258:4:66" + } + ], + "id": 10238, + "name": "VariableDeclaration", + "src": "21258:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10239, + "name": "ElementaryTypeName", + "src": "21276:7:66" + } + ], + "id": 10240, + "name": "ElementaryTypeNameExpression", + "src": "21276:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8673, + "type": "address", + "value": "seaPort_1_5" + }, + "id": 10241, + "name": "Identifier", + "src": "21284:11:66" + } + ], + "id": 10242, + "name": "FunctionCall", + "src": "21276:20:66" + } + ], + "id": 10243, + "name": "MemberAccess", + "src": "21276:25:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10117, + "type": "bytes memory", + "value": "marketData" + }, + "id": 10244, + "name": "Identifier", + "src": "21302:10:66" + } + ], + "id": 10245, + "name": "FunctionCall", + "src": "21276:37:66" + } + ], + "id": 10246, + "name": "VariableDeclarationStatement", + "src": "21257:56:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10107, + "type": "bool", + "value": "allowFail" + }, + "id": 10247, + "name": "Identifier", + "src": "21331:9:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10238, + "type": "bool", + "value": "success" + }, + "id": 10248, + "name": "Identifier", + "src": "21365:7:66" + } + ], + "id": 10249, + "name": "UnaryOperation", + "src": "21364:8:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 10115 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 10250, + "name": "Literal", + "src": "21404:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10251, + "name": "Literal", + "src": "21411:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10252, + "name": "Literal", + "src": "21414:1:66" + } + ], + "id": 10253, + "name": "TupleExpression", + "src": "21403:13:66" + } + ], + "id": 10254, + "name": "Return", + "src": "21396:20:66" + } + ], + "id": 10255, + "name": "Block", + "src": "21374:61:66" + } + ], + "id": 10256, + "name": "IfStatement", + "src": "21360:75:66" + } + ], + "id": 10257, + "name": "Block", + "src": "21342:107:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_1461016c88004ca93c55e893467e5e7d0c1ff55121e923be5ca0e173134693e9", + "typeString": "literal_string \"Purchase SeaPort_1_5 failed WETH\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 10258, + "name": "Identifier", + "src": "21473:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10238, + "type": "bool", + "value": "success" + }, + "id": 10259, + "name": "Identifier", + "src": "21481:7:66" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f35206661696c65642057455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_5 failed WETH\"", + "value": "Purchase SeaPort_1_5 failed WETH" + }, + "id": 10260, + "name": "Literal", + "src": "21490:34:66" + } + ], + "id": 10261, + "name": "FunctionCall", + "src": "21473:52:66" + } + ], + "id": 10262, + "name": "ExpressionStatement", + "src": "21473:52:66" + } + ], + "id": 10263, + "name": "Block", + "src": "21455:85:66" + } + ], + "id": 10264, + "name": "IfStatement", + "src": "21327:213:66" + } + ], + "id": 10265, + "name": "Block", + "src": "21243:307:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10105, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10266, + "name": "Identifier", + "src": "21560:15:66" + } + ], + "id": 10267, + "name": "MemberAccess", + "src": "21560:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_6", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10268, + "name": "Identifier", + "src": "21588:7:66" + } + ], + "id": 10269, + "name": "MemberAccess", + "src": "21588:19:66" + } + ], + "id": 10270, + "name": "BinaryOperation", + "src": "21560:47:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10272, + null + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "success", + "scope": 10299, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 10271, + "name": "ElementaryTypeName", + "src": "21624:4:66" + } + ], + "id": 10272, + "name": "VariableDeclaration", + "src": "21624:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bool,bytes memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "call", + "type": "function (bytes memory) payable returns (bool,bytes memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10273, + "name": "ElementaryTypeName", + "src": "21642:7:66" + } + ], + "id": 10274, + "name": "ElementaryTypeNameExpression", + "src": "21642:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8675, + "type": "address", + "value": "seaPort_1_6" + }, + "id": 10275, + "name": "Identifier", + "src": "21650:11:66" + } + ], + "id": 10276, + "name": "FunctionCall", + "src": "21642:20:66" + } + ], + "id": 10277, + "name": "MemberAccess", + "src": "21642:25:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10117, + "type": "bytes memory", + "value": "marketData" + }, + "id": 10278, + "name": "Identifier", + "src": "21668:10:66" + } + ], + "id": 10279, + "name": "FunctionCall", + "src": "21642:37:66" + } + ], + "id": 10280, + "name": "VariableDeclarationStatement", + "src": "21623:56:66" + }, + { + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10107, + "type": "bool", + "value": "allowFail" + }, + "id": 10281, + "name": "Identifier", + "src": "21697:9:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!", + "prefix": true, + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10272, + "type": "bool", + "value": "success" + }, + "id": 10282, + "name": "Identifier", + "src": "21731:7:66" + } + ], + "id": 10283, + "name": "UnaryOperation", + "src": "21730:8:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 10115 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "tuple(bool,int_const 0,int_const 0)" + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 10284, + "name": "Literal", + "src": "21770:5:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10285, + "name": "Literal", + "src": "21777:1:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10286, + "name": "Literal", + "src": "21780:1:66" + } + ], + "id": 10287, + "name": "TupleExpression", + "src": "21769:13:66" + } + ], + "id": 10288, + "name": "Return", + "src": "21762:20:66" + } + ], + "id": 10289, + "name": "Block", + "src": "21740:61:66" + } + ], + "id": 10290, + "name": "IfStatement", + "src": "21726:75:66" + } + ], + "id": 10291, + "name": "Block", + "src": "21708:107:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_7d4fa3070cdac7b556bda72a8ba21317d4366b909fe8ae7528922ba67829f31c", + "typeString": "literal_string \"Purchase SeaPort_1_6 failed WETH\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 10292, + "name": "Identifier", + "src": "21839:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10272, + "type": "bool", + "value": "success" + }, + "id": 10293, + "name": "Identifier", + "src": "21847:7:66" + }, + { + "attributes": { + "hexvalue": "507572636861736520536561506f72745f315f36206661696c65642057455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Purchase SeaPort_1_6 failed WETH\"", + "value": "Purchase SeaPort_1_6 failed WETH" + }, + "id": 10294, + "name": "Literal", + "src": "21856:34:66" + } + ], + "id": 10295, + "name": "FunctionCall", + "src": "21839:52:66" + } + ], + "id": 10296, + "name": "ExpressionStatement", + "src": "21839:52:66" + } + ], + "id": 10297, + "name": "Block", + "src": "21821:85:66" + } + ], + "id": 10298, + "name": "IfStatement", + "src": "21693:213:66" + } + ], + "id": 10299, + "name": "Block", + "src": "21609:307:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_6c57fe9713182a834bdd4831295dedf89e8ff161b7041e5a8170e9b0afd4c42f", + "typeString": "literal_string \"Unknown marketId WETH\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 10300, + "name": "Identifier", + "src": "21936:6:66" + }, + { + "attributes": { + "hexvalue": "556e6b6e6f776e206d61726b657449642057455448", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Unknown marketId WETH\"", + "value": "Unknown marketId WETH" + }, + "id": 10301, + "name": "Literal", + "src": "21943:23:66" + } + ], + "id": 10302, + "name": "FunctionCall", + "src": "21936:31:66" + } + ], + "id": 10303, + "name": "ExpressionStatement", + "src": "21936:31:66" + } + ], + "id": 10304, + "name": "Block", + "src": "21922:56:66" + } + ], + "id": 10305, + "name": "IfStatement", + "src": "21556:422:66" + } + ], + "id": 10306, + "name": "IfStatement", + "src": "21190:788:66" + } + ], + "id": 10307, + "name": "IfStatement", + "src": "20824:1154:66" + } + ], + "id": 10308, + "name": "IfStatement", + "src": "20464:1514:66" + } + ], + "id": 10309, + "name": "IfStatement", + "src": "20098:1880:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr", + "typeString": "uint256[] memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10720, + "type": "function (uint256[] memory,uint256)", + "value": "transferAdditionalRoyaltiesWETH" + }, + "id": 10310, + "name": "Identifier", + "src": "22017:31:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10120, + "type": "uint256[] memory", + "value": "additionalRoyalties" + }, + "id": 10311, + "name": "Identifier", + "src": "22049:19:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8719, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10105, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10312, + "name": "Identifier", + "src": "22070:15:66" + } + ], + "id": 10313, + "name": "MemberAccess", + "src": "22070:22:66" + } + ], + "id": 10314, + "name": "FunctionCall", + "src": "22017:76:66" + } + ], + "id": 10315, + "name": "ExpressionStatement", + "src": "22017:76:66" + }, + { + "attributes": { + "assignments": [ + 10317, + 10319 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "firstFeeAmount", + "scope": 10332, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10316, + "name": "ElementaryTypeName", + "src": "22124:7:66" + } + ], + "id": 10317, + "name": "VariableDeclaration", + "src": "22124:22:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "secondFeeAmount", + "scope": 10332, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10318, + "name": "ElementaryTypeName", + "src": "22148:7:66" + } + ], + "id": 10319, + "name": "VariableDeclaration", + "src": "22148:23:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10493, + "type": "function (uint256,uint256) pure returns (uint256,uint256)", + "value": "getFees" + }, + "id": 10320, + "name": "Identifier", + "src": "22175:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8721, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10105, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10321, + "name": "Identifier", + "src": "22183:15:66" + } + ], + "id": 10322, + "name": "MemberAccess", + "src": "22183:20:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8719, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10105, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "purchaseDetails" + }, + "id": 10323, + "name": "Identifier", + "src": "22205:15:66" + } + ], + "id": 10324, + "name": "MemberAccess", + "src": "22205:22:66" + } + ], + "id": 10325, + "name": "FunctionCall", + "src": "22175:53:66" + } + ], + "id": 10326, + "name": "VariableDeclarationStatement", + "src": "22123:105:66" + }, + { + "attributes": { + "functionReturnParameters": 10115 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(bool,uint256,uint256)" + }, + "children": [ + { + "attributes": { + "hexvalue": "74727565", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "true" + }, + "id": 10327, + "name": "Literal", + "src": "22246:4:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10317, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 10328, + "name": "Identifier", + "src": "22252:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10319, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 10329, + "name": "Identifier", + "src": "22268:15:66" + } + ], + "id": 10330, + "name": "TupleExpression", + "src": "22245:39:66" + } + ], + "id": 10331, + "name": "Return", + "src": "22238:46:66" + } + ], + "id": 10332, + "name": "Block", + "src": "19900:2391:66" + } + ], + "id": 10333, + "name": "FunctionDefinition", + "src": "19714:2577:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "transferFeeETH", + "scope": 11101, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice transfers ETH fee to feeRecipient\n@param feeAmount - amount to be transfered\n@param feeRecipient - address of the recipient" + }, + "id": 10334, + "name": "StructuredDocumentation", + "src": "22297:167:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeAmount", + "scope": 10361, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10335, + "name": "ElementaryTypeName", + "src": "22493:7:66" + } + ], + "id": 10336, + "name": "VariableDeclaration", + "src": "22493:17:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeRecipient", + "scope": 10361, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 10337, + "name": "ElementaryTypeName", + "src": "22512:7:66" + } + ], + "id": 10338, + "name": "VariableDeclaration", + "src": "22512:20:66" + } + ], + "id": 10339, + "name": "ParameterList", + "src": "22492:41:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10340, + "name": "ParameterList", + "src": "22543:0:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "&&", + "type": "bool" + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10336, + "type": "uint256", + "value": "feeAmount" + }, + "id": 10341, + "name": "Identifier", + "src": "22557:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10342, + "name": "Literal", + "src": "22569:1:66" + } + ], + "id": 10343, + "name": "BinaryOperation", + "src": "22557:13:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10338, + "type": "address", + "value": "feeRecipient" + }, + "id": 10344, + "name": "Identifier", + "src": "22574:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10345, + "name": "ElementaryTypeName", + "src": "22590:7:66" + } + ], + "id": 10346, + "name": "ElementaryTypeNameExpression", + "src": "22590:7:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10347, + "name": "Literal", + "src": "22598:1:66" + } + ], + "id": 10348, + "name": "FunctionCall", + "src": "22590:10:66" + } + ], + "id": 10349, + "name": "BinaryOperation", + "src": "22574:26:66" + } + ], + "id": 10350, + "name": "BinaryOperation", + "src": "22557:43:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transferEth", + "referencedDeclaration": 8467, + "type": "function (address,uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8468, + "type": "type(library LibTransfer)", + "value": "LibTransfer" + }, + "id": 10351, + "name": "Identifier", + "src": "22616:11:66" + } + ], + "id": 10353, + "name": "MemberAccess", + "src": "22616:23:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10338, + "type": "address", + "value": "feeRecipient" + }, + "id": 10354, + "name": "Identifier", + "src": "22640:12:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10336, + "type": "uint256", + "value": "feeAmount" + }, + "id": 10355, + "name": "Identifier", + "src": "22654:9:66" + } + ], + "id": 10356, + "name": "FunctionCall", + "src": "22616:48:66" + } + ], + "id": 10357, + "name": "ExpressionStatement", + "src": "22616:48:66" + } + ], + "id": 10358, + "name": "Block", + "src": "22602:73:66" + } + ], + "id": 10359, + "name": "IfStatement", + "src": "22553:122:66" + } + ], + "id": 10360, + "name": "Block", + "src": "22543:138:66" + } + ], + "id": 10361, + "name": "FunctionDefinition", + "src": "22469:212:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "transferFeeWETH", + "scope": 11101, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice transfers WETH fee to feeRecipient\n@param feeAmount - amount to be transfered\n@param feeRecipient - address of the recipient" + }, + "id": 10362, + "name": "StructuredDocumentation", + "src": "22687:168:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeAmount", + "scope": 10390, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10363, + "name": "ElementaryTypeName", + "src": "22885:7:66" + } + ], + "id": 10364, + "name": "VariableDeclaration", + "src": "22885:17:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feeRecipient", + "scope": 10390, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 10365, + "name": "ElementaryTypeName", + "src": "22904:7:66" + } + ], + "id": 10366, + "name": "VariableDeclaration", + "src": "22904:20:66" + } + ], + "id": 10367, + "name": "ParameterList", + "src": "22884:41:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10368, + "name": "ParameterList", + "src": "22935:0:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "&&", + "type": "bool" + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10364, + "type": "uint256", + "value": "feeAmount" + }, + "id": 10369, + "name": "Identifier", + "src": "22949:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10370, + "name": "Literal", + "src": "22961:1:66" + } + ], + "id": 10371, + "name": "BinaryOperation", + "src": "22949:13:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10366, + "type": "address", + "value": "feeRecipient" + }, + "id": 10372, + "name": "Identifier", + "src": "22966:12:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10373, + "name": "ElementaryTypeName", + "src": "22982:7:66" + } + ], + "id": 10374, + "name": "ElementaryTypeNameExpression", + "src": "22982:7:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10375, + "name": "Literal", + "src": "22990:1:66" + } + ], + "id": 10376, + "name": "FunctionCall", + "src": "22982:10:66" + } + ], + "id": 10377, + "name": "BinaryOperation", + "src": "22966:26:66" + } + ], + "id": 10378, + "name": "BinaryOperation", + "src": "22949:43:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transfer", + "referencedDeclaration": 1122, + "type": "function (address,uint256) external returns (bool)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 10379, + "name": "Identifier", + "src": "23008:17:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8679, + "type": "address", + "value": "weth" + }, + "id": 10380, + "name": "Identifier", + "src": "23026:4:66" + } + ], + "id": 10381, + "name": "FunctionCall", + "src": "23008:23:66" + } + ], + "id": 10382, + "name": "MemberAccess", + "src": "23008:32:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10366, + "type": "address", + "value": "feeRecipient" + }, + "id": 10383, + "name": "Identifier", + "src": "23041:12:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10364, + "type": "uint256", + "value": "feeAmount" + }, + "id": 10384, + "name": "Identifier", + "src": "23055:9:66" + } + ], + "id": 10385, + "name": "FunctionCall", + "src": "23008:57:66" + } + ], + "id": 10386, + "name": "ExpressionStatement", + "src": "23008:57:66" + } + ], + "id": 10387, + "name": "Block", + "src": "22994:82:66" + } + ], + "id": 10388, + "name": "IfStatement", + "src": "22945:131:66" + } + ], + "id": 10389, + "name": "Block", + "src": "22935:147:66" + } + ], + "id": 10390, + "name": "FunctionDefinition", + "src": "22860:222:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "transferChange", + "scope": 11101, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice transfers change back to sender" + }, + "id": 10391, + "name": "StructuredDocumentation", + "src": "23088:59:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10392, + "name": "ParameterList", + "src": "23175:2:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10393, + "name": "ParameterList", + "src": "23187:0:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10395 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "ethAmount", + "scope": 10416, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10394, + "name": "ElementaryTypeName", + "src": "23197:7:66" + } + ], + "id": 10395, + "name": "VariableDeclaration", + "src": "23197:17:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "balance", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10396, + "name": "ElementaryTypeName", + "src": "23217:7:66" + } + ], + "id": 10397, + "name": "ElementaryTypeNameExpression", + "src": "23217:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeableV2", + "value": "this" + }, + "id": 10398, + "name": "Identifier", + "src": "23225:4:66" + } + ], + "id": 10399, + "name": "FunctionCall", + "src": "23217:13:66" + } + ], + "id": 10400, + "name": "MemberAccess", + "src": "23217:21:66" + } + ], + "id": 10401, + "name": "VariableDeclarationStatement", + "src": "23197:41:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10395, + "type": "uint256", + "value": "ethAmount" + }, + "id": 10402, + "name": "Identifier", + "src": "23252:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10403, + "name": "Literal", + "src": "23264:1:66" + } + ], + "id": 10404, + "name": "BinaryOperation", + "src": "23252:13:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transferEth", + "referencedDeclaration": 8467, + "type": "function (address,uint256)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10405, + "name": "ElementaryTypeName", + "src": "23281:7:66" + } + ], + "id": 10406, + "name": "ElementaryTypeNameExpression", + "src": "23281:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "sender", + "type": "address payable" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967281, + "type": "msg", + "value": "msg" + }, + "id": 10407, + "name": "Identifier", + "src": "23289:3:66" + } + ], + "id": 10408, + "name": "MemberAccess", + "src": "23289:10:66" + } + ], + "id": 10409, + "name": "FunctionCall", + "src": "23281:19:66" + } + ], + "id": 10410, + "name": "MemberAccess", + "src": "23281:31:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10395, + "type": "uint256", + "value": "ethAmount" + }, + "id": 10411, + "name": "Identifier", + "src": "23313:9:66" + } + ], + "id": 10412, + "name": "FunctionCall", + "src": "23281:42:66" + } + ], + "id": 10413, + "name": "ExpressionStatement", + "src": "23281:42:66" + } + ], + "id": 10414, + "name": "Block", + "src": "23267:67:66" + } + ], + "id": 10415, + "name": "IfStatement", + "src": "23248:86:66" + } + ], + "id": 10416, + "name": "Block", + "src": "23187:153:66" + } + ], + "id": 10417, + "name": "FunctionDefinition", + "src": "23152:188:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "transferChangeWETH", + "scope": 11101, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice transfers weth change back to sender" + }, + "id": 10418, + "name": "StructuredDocumentation", + "src": "23346:64:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10419, + "name": "ParameterList", + "src": "23442:2:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10420, + "name": "ParameterList", + "src": "23454:0:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10422 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "wethAmount", + "scope": 10447, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10421, + "name": "ElementaryTypeName", + "src": "23464:7:66" + } + ], + "id": 10422, + "name": "VariableDeclaration", + "src": "23464:18:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "balanceOf", + "referencedDeclaration": 1112, + "type": "function (address) view external returns (uint256)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 10423, + "name": "Identifier", + "src": "23485:17:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8679, + "type": "address", + "value": "weth" + }, + "id": 10424, + "name": "Identifier", + "src": "23503:4:66" + } + ], + "id": 10425, + "name": "FunctionCall", + "src": "23485:23:66" + } + ], + "id": 10426, + "name": "MemberAccess", + "src": "23485:33:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_RaribleExchangeWrapperUpgradeableV2_$11101", + "typeString": "contract RaribleExchangeWrapperUpgradeableV2" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10427, + "name": "ElementaryTypeName", + "src": "23519:7:66" + } + ], + "id": 10428, + "name": "ElementaryTypeNameExpression", + "src": "23519:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967268, + "type": "contract RaribleExchangeWrapperUpgradeableV2", + "value": "this" + }, + "id": 10429, + "name": "Identifier", + "src": "23527:4:66" + } + ], + "id": 10430, + "name": "FunctionCall", + "src": "23519:13:66" + } + ], + "id": 10431, + "name": "FunctionCall", + "src": "23485:48:66" + } + ], + "id": 10432, + "name": "VariableDeclarationStatement", + "src": "23464:69:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10422, + "type": "uint256", + "value": "wethAmount" + }, + "id": 10433, + "name": "Identifier", + "src": "23547:10:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10434, + "name": "Literal", + "src": "23560:1:66" + } + ], + "id": 10435, + "name": "BinaryOperation", + "src": "23547:14:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "transfer", + "referencedDeclaration": 1122, + "type": "function (address,uint256) external returns (bool)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 10436, + "name": "Identifier", + "src": "23577:17:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8679, + "type": "address", + "value": "weth" + }, + "id": 10437, + "name": "Identifier", + "src": "23595:4:66" + } + ], + "id": 10438, + "name": "FunctionCall", + "src": "23577:23:66" + } + ], + "id": 10439, + "name": "MemberAccess", + "src": "23577:32:66" + }, + { + "attributes": { + "arguments": [ + null + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + null + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1629, + "type": "function () view returns (address payable)", + "value": "_msgSender" + }, + "id": 10440, + "name": "Identifier", + "src": "23610:10:66" + } + ], + "id": 10441, + "name": "FunctionCall", + "src": "23610:12:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10422, + "type": "uint256", + "value": "wethAmount" + }, + "id": 10442, + "name": "Identifier", + "src": "23624:10:66" + } + ], + "id": 10443, + "name": "FunctionCall", + "src": "23577:58:66" + } + ], + "id": 10444, + "name": "ExpressionStatement", + "src": "23577:58:66" + } + ], + "id": 10445, + "name": "Block", + "src": "23563:83:66" + } + ], + "id": 10446, + "name": "IfStatement", + "src": "23543:103:66" + } + ], + "id": 10447, + "name": "Block", + "src": "23454:198:66" + } + ], + "id": 10448, + "name": "FunctionDefinition", + "src": "23415:237:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "getFees", + "scope": 11101, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice parses fees in base points from one uint and calculates real amount of fees\n@param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee\n@param amount price of the order\n@return firstFeeAmount real amount for the first fee\n@return secondFeeAmount real amount for the second fee" + }, + "id": 10449, + "name": "StructuredDocumentation", + "src": "23658:393:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "fees", + "scope": 10493, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10450, + "name": "ElementaryTypeName", + "src": "24073:7:66" + } + ], + "id": 10451, + "name": "VariableDeclaration", + "src": "24073:12:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "amount", + "scope": 10493, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10452, + "name": "ElementaryTypeName", + "src": "24087:7:66" + } + ], + "id": 10453, + "name": "VariableDeclaration", + "src": "24087:14:66" + } + ], + "id": 10454, + "name": "ParameterList", + "src": "24072:30:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10493, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10455, + "name": "ElementaryTypeName", + "src": "24126:7:66" + } + ], + "id": 10456, + "name": "VariableDeclaration", + "src": "24126:7:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10493, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10457, + "name": "ElementaryTypeName", + "src": "24135:7:66" + } + ], + "id": 10458, + "name": "VariableDeclaration", + "src": "24135:7:66" + } + ], + "id": 10459, + "name": "ParameterList", + "src": "24125:18:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10461 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "firstFee", + "scope": 10492, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10460, + "name": "ElementaryTypeName", + "src": "24154:7:66" + } + ], + "id": 10461, + "name": "VariableDeclaration", + "src": "24154:16:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 10462, + "name": "ElementaryTypeName", + "src": "24173:7:66" + } + ], + "id": 10463, + "name": "ElementaryTypeNameExpression", + "src": "24173:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint16", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint16)" + }, + "children": [ + { + "attributes": { + "name": "uint16" + }, + "id": 10464, + "name": "ElementaryTypeName", + "src": "24181:6:66" + } + ], + "id": 10465, + "name": "ElementaryTypeNameExpression", + "src": "24181:6:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">>", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10451, + "type": "uint256", + "value": "fees" + }, + "id": 10466, + "name": "Identifier", + "src": "24188:4:66" + }, + { + "attributes": { + "hexvalue": "3136", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 16", + "value": "16" + }, + "id": 10467, + "name": "Literal", + "src": "24196:2:66" + } + ], + "id": 10468, + "name": "BinaryOperation", + "src": "24188:10:66" + } + ], + "id": 10469, + "name": "FunctionCall", + "src": "24181:18:66" + } + ], + "id": 10470, + "name": "FunctionCall", + "src": "24173:27:66" + } + ], + "id": 10471, + "name": "VariableDeclarationStatement", + "src": "24154:46:66" + }, + { + "attributes": { + "assignments": [ + 10473 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "secondFee", + "scope": 10492, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10472, + "name": "ElementaryTypeName", + "src": "24210:7:66" + } + ], + "id": 10473, + "name": "VariableDeclaration", + "src": "24210:17:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 10474, + "name": "ElementaryTypeName", + "src": "24230:7:66" + } + ], + "id": 10475, + "name": "ElementaryTypeNameExpression", + "src": "24230:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint16", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint16)" + }, + "children": [ + { + "attributes": { + "name": "uint16" + }, + "id": 10476, + "name": "ElementaryTypeName", + "src": "24238:6:66" + } + ], + "id": 10477, + "name": "ElementaryTypeNameExpression", + "src": "24238:6:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10451, + "type": "uint256", + "value": "fees" + }, + "id": 10478, + "name": "Identifier", + "src": "24245:4:66" + } + ], + "id": 10479, + "name": "FunctionCall", + "src": "24238:12:66" + } + ], + "id": 10480, + "name": "FunctionCall", + "src": "24230:21:66" + } + ], + "id": 10481, + "name": "VariableDeclarationStatement", + "src": "24210:41:66" + }, + { + "attributes": { + "functionReturnParameters": 10459 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(uint256,uint256)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "bp", + "referencedDeclaration": 5593, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10453, + "type": "uint256", + "value": "amount" + }, + "id": 10482, + "name": "Identifier", + "src": "24269:6:66" + } + ], + "id": 10483, + "name": "MemberAccess", + "src": "24269:9:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10461, + "type": "uint256", + "value": "firstFee" + }, + "id": 10484, + "name": "Identifier", + "src": "24279:8:66" + } + ], + "id": 10485, + "name": "FunctionCall", + "src": "24269:19:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "bp", + "referencedDeclaration": 5593, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10453, + "type": "uint256", + "value": "amount" + }, + "id": 10486, + "name": "Identifier", + "src": "24290:6:66" + } + ], + "id": 10487, + "name": "MemberAccess", + "src": "24290:9:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10473, + "type": "uint256", + "value": "secondFee" + }, + "id": 10488, + "name": "Identifier", + "src": "24300:9:66" + } + ], + "id": 10489, + "name": "FunctionCall", + "src": "24290:20:66" + } + ], + "id": 10490, + "name": "TupleExpression", + "src": "24268:43:66" + } + ], + "id": 10491, + "name": "Return", + "src": "24261:50:66" + } + ], + "id": 10492, + "name": "Block", + "src": "24144:174:66" + } + ], + "id": 10493, + "name": "FunctionDefinition", + "src": "24056:262:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "getCurrency", + "scope": 11101, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice parses \"fees\" field to find the currency for the purchase\n@param fees field with encoded data\n@return 0 if ETH, 1 if WETH ERC-20" + }, + "id": 10494, + "name": "StructuredDocumentation", + "src": "24324:172:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "fees", + "scope": 10511, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10495, + "name": "ElementaryTypeName", + "src": "24522:7:66" + } + ], + "id": 10496, + "name": "VariableDeclaration", + "src": "24522:12:66" + } + ], + "id": 10497, + "name": "ParameterList", + "src": "24521:14:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10511, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Currencies", + "referencedDeclaration": 8715, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "id": 10498, + "name": "UserDefinedTypeName", + "src": "24559:10:66" + } + ], + "id": 10499, + "name": "VariableDeclaration", + "src": "24559:10:66" + } + ], + "id": 10500, + "name": "ParameterList", + "src": "24558:12:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 10500 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8715, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Currencies)", + "value": "Currencies" + }, + "id": 10501, + "name": "Identifier", + "src": "24588:10:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint16", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint16)" + }, + "children": [ + { + "attributes": { + "name": "uint16" + }, + "id": 10502, + "name": "ElementaryTypeName", + "src": "24599:6:66" + } + ], + "id": 10503, + "name": "ElementaryTypeNameExpression", + "src": "24599:6:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">>", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10496, + "type": "uint256", + "value": "fees" + }, + "id": 10504, + "name": "Identifier", + "src": "24606:4:66" + }, + { + "attributes": { + "hexvalue": "3438", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 48", + "value": "48" + }, + "id": 10505, + "name": "Literal", + "src": "24614:2:66" + } + ], + "id": 10506, + "name": "BinaryOperation", + "src": "24606:10:66" + } + ], + "id": 10507, + "name": "FunctionCall", + "src": "24599:18:66" + } + ], + "id": 10508, + "name": "FunctionCall", + "src": "24588:30:66" + } + ], + "id": 10509, + "name": "Return", + "src": "24581:37:66" + } + ], + "id": 10510, + "name": "Block", + "src": "24571:54:66" + } + ], + "id": 10511, + "name": "FunctionDefinition", + "src": "24501:124:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "getDataAndAdditionalData", + "scope": 11101, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice parses _data to data for market call and additionalData\n@param feesAndDataType 27 and 28 bytes for dataType\n@return marketData data for market call\n@return additionalRoyalties array uint256, (base point + address)" + }, + "id": 10512, + "name": "StructuredDocumentation", + "src": "24631:265:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_data", + "scope": 10590, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 10513, + "name": "ElementaryTypeName", + "src": "24944:5:66" + } + ], + "id": 10514, + "name": "VariableDeclaration", + "src": "24944:18:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "feesAndDataType", + "scope": 10590, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10515, + "name": "ElementaryTypeName", + "src": "24972:7:66" + } + ], + "id": 10516, + "name": "VariableDeclaration", + "src": "24972:23:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "marketId", + "scope": 10590, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Markets", + "referencedDeclaration": 8709, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10517, + "name": "UserDefinedTypeName", + "src": "25005:7:66" + } + ], + "id": 10518, + "name": "VariableDeclaration", + "src": "25005:16:66" + } + ], + "id": 10519, + "name": "ParameterList", + "src": "24934:93:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10590, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 10520, + "name": "ElementaryTypeName", + "src": "25051:5:66" + } + ], + "id": 10521, + "name": "VariableDeclaration", + "src": "25051:12:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10590, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10522, + "name": "ElementaryTypeName", + "src": "25065:7:66" + } + ], + "id": 10523, + "name": "ArrayTypeName", + "src": "25065:9:66" + } + ], + "id": 10524, + "name": "VariableDeclaration", + "src": "25065:16:66" + } + ], + "id": 10525, + "name": "ParameterList", + "src": "25050:32:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10527 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "dataType", + "scope": 10589, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "AdditionalDataTypes", + "referencedDeclaration": 8712, + "type": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + }, + "id": 10526, + "name": "UserDefinedTypeName", + "src": "25093:19:66" + } + ], + "id": 10527, + "name": "VariableDeclaration", + "src": "25093:28:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint16", + "typeString": "uint16" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8712, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes)", + "value": "AdditionalDataTypes" + }, + "id": 10528, + "name": "Identifier", + "src": "25124:19:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint16", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint16)" + }, + "children": [ + { + "attributes": { + "name": "uint16" + }, + "id": 10529, + "name": "ElementaryTypeName", + "src": "25144:6:66" + } + ], + "id": 10530, + "name": "ElementaryTypeNameExpression", + "src": "25144:6:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">>", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10516, + "type": "uint256", + "value": "feesAndDataType" + }, + "id": 10531, + "name": "Identifier", + "src": "25151:15:66" + }, + { + "attributes": { + "hexvalue": "3332", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 32", + "value": "32" + }, + "id": 10532, + "name": "Literal", + "src": "25170:2:66" + } + ], + "id": 10533, + "name": "BinaryOperation", + "src": "25151:21:66" + } + ], + "id": 10534, + "name": "FunctionCall", + "src": "25144:29:66" + } + ], + "id": 10535, + "name": "FunctionCall", + "src": "25124:50:66" + } + ], + "id": 10536, + "name": "VariableDeclarationStatement", + "src": "25093:81:66" + }, + { + "attributes": { + "assignments": [ + 10541 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "additionalRoyalties", + "scope": 10589, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10539, + "name": "ElementaryTypeName", + "src": "25184:7:66" + } + ], + "id": 10540, + "name": "ArrayTypeName", + "src": "25184:9:66" + } + ], + "id": 10541, + "name": "VariableDeclaration", + "src": "25184:36:66" + } + ], + "id": 10542, + "name": "VariableDeclarationStatement", + "src": "25184:36:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8712", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10527, + "type": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes", + "value": "dataType" + }, + "id": 10543, + "name": "Identifier", + "src": "25284:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "NoAdditionalData", + "type": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8712, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes)", + "value": "AdditionalDataTypes" + }, + "id": 10544, + "name": "Identifier", + "src": "25296:19:66" + } + ], + "id": 10545, + "name": "MemberAccess", + "src": "25296:36:66" + } + ], + "id": 10546, + "name": "BinaryOperation", + "src": "25284:48:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 10525 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(bytes memory,uint256[] memory)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10514, + "type": "bytes memory", + "value": "_data" + }, + "id": 10547, + "name": "Identifier", + "src": "25356:5:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10541, + "type": "uint256[] memory", + "value": "additionalRoyalties" + }, + "id": 10548, + "name": "Identifier", + "src": "25363:19:66" + } + ], + "id": 10549, + "name": "TupleExpression", + "src": "25355:28:66" + } + ], + "id": 10550, + "name": "Return", + "src": "25348:35:66" + } + ], + "id": 10551, + "name": "Block", + "src": "25334:60:66" + } + ], + "id": 10552, + "name": "IfStatement", + "src": "25280:114:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_AdditionalDataTypes_$8712", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10527, + "type": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes", + "value": "dataType" + }, + "id": 10553, + "name": "Identifier", + "src": "25408:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "RoyaltiesAdditionalData", + "type": "enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8712, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.AdditionalDataTypes)", + "value": "AdditionalDataTypes" + }, + "id": 10554, + "name": "Identifier", + "src": "25420:19:66" + } + ], + "id": 10555, + "name": "MemberAccess", + "src": "25420:43:66" + } + ], + "id": 10556, + "name": "BinaryOperation", + "src": "25408:55:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10558 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "additionalData", + "scope": 10583, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct RaribleExchangeWrapperUpgradeableV2.AdditionalData", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "AdditionalData", + "referencedDeclaration": 8730, + "type": "struct RaribleExchangeWrapperUpgradeableV2.AdditionalData" + }, + "id": 10557, + "name": "UserDefinedTypeName", + "src": "25479:14:66" + } + ], + "id": 10558, + "name": "VariableDeclaration", + "src": "25479:36:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "struct RaribleExchangeWrapperUpgradeableV2.AdditionalData memory", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_struct$_AdditionalData_$8730_storage_ptr_$", + "typeString": "type(struct RaribleExchangeWrapperUpgradeableV2.AdditionalData storage pointer)" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "decode", + "type": "function () pure" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 4294967295, + "type": "abi", + "value": "abi" + }, + "id": 10559, + "name": "Identifier", + "src": "25518:3:66" + } + ], + "id": 10560, + "name": "MemberAccess", + "src": "25518:10:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10514, + "type": "bytes memory", + "value": "_data" + }, + "id": 10561, + "name": "Identifier", + "src": "25529:5:66" + }, + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(struct RaribleExchangeWrapperUpgradeableV2.AdditionalData storage pointer)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8730, + "type": "type(struct RaribleExchangeWrapperUpgradeableV2.AdditionalData storage pointer)", + "value": "AdditionalData" + }, + "id": 10562, + "name": "Identifier", + "src": "25537:14:66" + } + ], + "id": 10563, + "name": "TupleExpression", + "src": "25536:16:66" + } + ], + "id": 10564, + "name": "FunctionCall", + "src": "25518:35:66" + } + ], + "id": 10565, + "name": "VariableDeclarationStatement", + "src": "25479:74:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10803, + "type": "function (enum RaribleExchangeWrapperUpgradeableV2.Markets) pure returns (bool)", + "value": "supportsRoyalties" + }, + "id": 10566, + "name": "Identifier", + "src": "25642:17:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10518, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "marketId" + }, + "id": 10567, + "name": "Identifier", + "src": "25660:8:66" + } + ], + "id": 10568, + "name": "FunctionCall", + "src": "25642:27:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 10525 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(bytes memory,uint256[] memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "data", + "referencedDeclaration": 8726, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10558, + "type": "struct RaribleExchangeWrapperUpgradeableV2.AdditionalData memory", + "value": "additionalData" + }, + "id": 10569, + "name": "Identifier", + "src": "25697:14:66" + } + ], + "id": 10570, + "name": "MemberAccess", + "src": "25697:19:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "additionalRoyalties", + "referencedDeclaration": 8729, + "type": "uint256[] memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10558, + "type": "struct RaribleExchangeWrapperUpgradeableV2.AdditionalData memory", + "value": "additionalData" + }, + "id": 10571, + "name": "Identifier", + "src": "25718:14:66" + } + ], + "id": 10572, + "name": "MemberAccess", + "src": "25718:34:66" + } + ], + "id": 10573, + "name": "TupleExpression", + "src": "25696:57:66" + } + ], + "id": 10574, + "name": "Return", + "src": "25689:64:66" + } + ], + "id": 10575, + "name": "Block", + "src": "25671:97:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 10525 + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "tuple(bytes memory,uint256[] memory)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "data", + "referencedDeclaration": 8726, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10558, + "type": "struct RaribleExchangeWrapperUpgradeableV2.AdditionalData memory", + "value": "additionalData" + }, + "id": 10576, + "name": "Identifier", + "src": "25800:14:66" + } + ], + "id": 10577, + "name": "MemberAccess", + "src": "25800:19:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10541, + "type": "uint256[] memory", + "value": "additionalRoyalties" + }, + "id": 10578, + "name": "Identifier", + "src": "25821:19:66" + } + ], + "id": 10579, + "name": "TupleExpression", + "src": "25799:42:66" + } + ], + "id": 10580, + "name": "Return", + "src": "25792:49:66" + } + ], + "id": 10581, + "name": "Block", + "src": "25774:82:66" + } + ], + "id": 10582, + "name": "IfStatement", + "src": "25638:218:66" + } + ], + "id": 10583, + "name": "Block", + "src": "25465:401:66" + } + ], + "id": 10584, + "name": "IfStatement", + "src": "25404:462:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_e89eb59adf40d46cfd63ce8f1b9b12cb445413877fb23a6846b8ace3266a633d", + "typeString": "literal_string \"unknown additionalDataType\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 10585, + "name": "Identifier", + "src": "25876:6:66" + }, + { + "attributes": { + "hexvalue": "756e6b6e6f776e206164646974696f6e616c4461746154797065", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"unknown additionalDataType\"", + "value": "unknown additionalDataType" + }, + "id": 10586, + "name": "Literal", + "src": "25883:28:66" + } + ], + "id": 10587, + "name": "FunctionCall", + "src": "25876:36:66" + } + ], + "id": 10588, + "name": "ExpressionStatement", + "src": "25876:36:66" + } + ], + "id": 10589, + "name": "Block", + "src": "25083:836:66" + } + ], + "id": 10590, + "name": "FunctionDefinition", + "src": "24901:1018:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "transferAdditionalRoyaltiesETH", + "scope": 11101, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice transfer additional royalties in ETH\n@param _additionalRoyalties array uint256 (base point + royalty recipient address)" + }, + "id": 10591, + "name": "StructuredDocumentation", + "src": "25925:155:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_additionalRoyalties", + "scope": 10655, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10592, + "name": "ElementaryTypeName", + "src": "26125:7:66" + } + ], + "id": 10593, + "name": "ArrayTypeName", + "src": "26125:9:66" + } + ], + "id": 10594, + "name": "VariableDeclaration", + "src": "26125:37:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "amount", + "scope": 10655, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10595, + "name": "ElementaryTypeName", + "src": "26164:7:66" + } + ], + "id": 10596, + "name": "VariableDeclaration", + "src": "26164:14:66" + } + ], + "id": 10597, + "name": "ParameterList", + "src": "26124:55:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10598, + "name": "ParameterList", + "src": "26189:0:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "assignments": [ + 10600 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 10653, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10599, + "name": "ElementaryTypeName", + "src": "26204:7:66" + } + ], + "id": 10600, + "name": "VariableDeclaration", + "src": "26204:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10601, + "name": "Literal", + "src": "26216:1:66" + } + ], + "id": 10602, + "name": "VariableDeclarationStatement", + "src": "26204:13:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10600, + "type": "uint256", + "value": "i" + }, + "id": 10603, + "name": "Identifier", + "src": "26219:1:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10594, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 10604, + "name": "Identifier", + "src": "26223:20:66" + } + ], + "id": 10605, + "name": "MemberAccess", + "src": "26223:27:66" + } + ], + "id": 10606, + "name": "BinaryOperation", + "src": "26219:31:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10600, + "type": "uint256", + "value": "i" + }, + "id": 10607, + "name": "Identifier", + "src": "26254:1:66" + } + ], + "id": 10608, + "name": "UnaryOperation", + "src": "26252:3:66" + } + ], + "id": 10609, + "name": "ExpressionStatement", + "src": "26252:3:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10594, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 10610, + "name": "Identifier", + "src": "26275:20:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10600, + "type": "uint256", + "value": "i" + }, + "id": 10611, + "name": "Identifier", + "src": "26296:1:66" + } + ], + "id": 10612, + "name": "IndexAccess", + "src": "26275:23:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10613, + "name": "Literal", + "src": "26301:1:66" + } + ], + "id": 10614, + "name": "BinaryOperation", + "src": "26275:27:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10616 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "account", + "scope": 10650, + "stateVariable": false, + "storageLocation": "default", + "type": "address payable", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "payable", + "type": "address payable" + }, + "id": 10615, + "name": "ElementaryTypeName", + "src": "26322:15:66" + } + ], + "id": 10616, + "name": "VariableDeclaration", + "src": "26322:23:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address payable)" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "payable" + }, + "id": 10617, + "name": "ElementaryTypeName", + "src": "26348:8:66" + } + ], + "id": 10618, + "name": "ElementaryTypeNameExpression", + "src": "26348:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10619, + "name": "ElementaryTypeName", + "src": "26356:7:66" + } + ], + "id": 10620, + "name": "ElementaryTypeNameExpression", + "src": "26356:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10594, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 10621, + "name": "Identifier", + "src": "26364:20:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10600, + "type": "uint256", + "value": "i" + }, + "id": 10622, + "name": "Identifier", + "src": "26385:1:66" + } + ], + "id": 10623, + "name": "IndexAccess", + "src": "26364:23:66" + } + ], + "id": 10624, + "name": "FunctionCall", + "src": "26356:32:66" + } + ], + "id": 10625, + "name": "FunctionCall", + "src": "26348:41:66" + } + ], + "id": 10626, + "name": "VariableDeclarationStatement", + "src": "26322:67:66" + }, + { + "attributes": { + "assignments": [ + 10628 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "basePoint", + "scope": 10650, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10627, + "name": "ElementaryTypeName", + "src": "26407:7:66" + } + ], + "id": 10628, + "name": "VariableDeclaration", + "src": "26407:17:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 10629, + "name": "ElementaryTypeName", + "src": "26427:7:66" + } + ], + "id": 10630, + "name": "ElementaryTypeNameExpression", + "src": "26427:7:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">>", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10594, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 10631, + "name": "Identifier", + "src": "26435:20:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10600, + "type": "uint256", + "value": "i" + }, + "id": 10632, + "name": "Identifier", + "src": "26456:1:66" + } + ], + "id": 10633, + "name": "IndexAccess", + "src": "26435:23:66" + }, + { + "attributes": { + "hexvalue": "313630", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 160", + "value": "160" + }, + "id": 10634, + "name": "Literal", + "src": "26462:3:66" + } + ], + "id": 10635, + "name": "BinaryOperation", + "src": "26435:30:66" + } + ], + "id": 10636, + "name": "FunctionCall", + "src": "26427:39:66" + } + ], + "id": 10637, + "name": "VariableDeclarationStatement", + "src": "26407:59:66" + }, + { + "attributes": { + "assignments": [ + 10639 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "value", + "scope": 10650, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10638, + "name": "ElementaryTypeName", + "src": "26484:7:66" + } + ], + "id": 10639, + "name": "VariableDeclaration", + "src": "26484:13:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "bp", + "referencedDeclaration": 5593, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10596, + "type": "uint256", + "value": "amount" + }, + "id": 10640, + "name": "Identifier", + "src": "26500:6:66" + } + ], + "id": 10641, + "name": "MemberAccess", + "src": "26500:9:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10628, + "type": "uint256", + "value": "basePoint" + }, + "id": 10642, + "name": "Identifier", + "src": "26510:9:66" + } + ], + "id": 10643, + "name": "FunctionCall", + "src": "26500:20:66" + } + ], + "id": 10644, + "name": "VariableDeclarationStatement", + "src": "26484:36:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10361, + "type": "function (uint256,address)", + "value": "transferFeeETH" + }, + "id": 10645, + "name": "Identifier", + "src": "26538:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10639, + "type": "uint256", + "value": "value" + }, + "id": 10646, + "name": "Identifier", + "src": "26553:5:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10616, + "type": "address payable", + "value": "account" + }, + "id": 10647, + "name": "Identifier", + "src": "26560:7:66" + } + ], + "id": 10648, + "name": "FunctionCall", + "src": "26538:30:66" + } + ], + "id": 10649, + "name": "ExpressionStatement", + "src": "26538:30:66" + } + ], + "id": 10650, + "name": "Block", + "src": "26304:279:66" + } + ], + "id": 10651, + "name": "IfStatement", + "src": "26271:312:66" + } + ], + "id": 10652, + "name": "Block", + "src": "26257:336:66" + } + ], + "id": 10653, + "name": "ForStatement", + "src": "26199:394:66" + } + ], + "id": 10654, + "name": "Block", + "src": "26189:410:66" + } + ], + "id": 10655, + "name": "FunctionDefinition", + "src": "26085:514:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "transferAdditionalRoyaltiesWETH", + "scope": 11101, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice transfer additional royalties in WETH\n@param _additionalRoyalties array uint256 (base point + royalty recipient address)" + }, + "id": 10656, + "name": "StructuredDocumentation", + "src": "26605:156:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_additionalRoyalties", + "scope": 10720, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10657, + "name": "ElementaryTypeName", + "src": "26807:7:66" + } + ], + "id": 10658, + "name": "ArrayTypeName", + "src": "26807:9:66" + } + ], + "id": 10659, + "name": "VariableDeclaration", + "src": "26807:37:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "amount", + "scope": 10720, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10660, + "name": "ElementaryTypeName", + "src": "26846:7:66" + } + ], + "id": 10661, + "name": "VariableDeclaration", + "src": "26846:14:66" + } + ], + "id": 10662, + "name": "ParameterList", + "src": "26806:55:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10663, + "name": "ParameterList", + "src": "26871:0:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "assignments": [ + 10665 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 10718, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10664, + "name": "ElementaryTypeName", + "src": "26886:7:66" + } + ], + "id": 10665, + "name": "VariableDeclaration", + "src": "26886:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10666, + "name": "Literal", + "src": "26898:1:66" + } + ], + "id": 10667, + "name": "VariableDeclarationStatement", + "src": "26886:13:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10665, + "type": "uint256", + "value": "i" + }, + "id": 10668, + "name": "Identifier", + "src": "26901:1:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10659, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 10669, + "name": "Identifier", + "src": "26905:20:66" + } + ], + "id": 10670, + "name": "MemberAccess", + "src": "26905:27:66" + } + ], + "id": 10671, + "name": "BinaryOperation", + "src": "26901:31:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10665, + "type": "uint256", + "value": "i" + }, + "id": 10672, + "name": "Identifier", + "src": "26936:1:66" + } + ], + "id": 10673, + "name": "UnaryOperation", + "src": "26934:3:66" + } + ], + "id": 10674, + "name": "ExpressionStatement", + "src": "26934:3:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10659, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 10675, + "name": "Identifier", + "src": "26957:20:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10665, + "type": "uint256", + "value": "i" + }, + "id": 10676, + "name": "Identifier", + "src": "26978:1:66" + } + ], + "id": 10677, + "name": "IndexAccess", + "src": "26957:23:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10678, + "name": "Literal", + "src": "26983:1:66" + } + ], + "id": 10679, + "name": "BinaryOperation", + "src": "26957:27:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10681 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "account", + "scope": 10715, + "stateVariable": false, + "storageLocation": "default", + "type": "address payable", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "payable", + "type": "address payable" + }, + "id": 10680, + "name": "ElementaryTypeName", + "src": "27004:15:66" + } + ], + "id": 10681, + "name": "VariableDeclaration", + "src": "27004:23:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address payable)" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "payable" + }, + "id": 10682, + "name": "ElementaryTypeName", + "src": "27030:8:66" + } + ], + "id": 10683, + "name": "ElementaryTypeNameExpression", + "src": "27030:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10684, + "name": "ElementaryTypeName", + "src": "27038:7:66" + } + ], + "id": 10685, + "name": "ElementaryTypeNameExpression", + "src": "27038:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10659, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 10686, + "name": "Identifier", + "src": "27046:20:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10665, + "type": "uint256", + "value": "i" + }, + "id": 10687, + "name": "Identifier", + "src": "27067:1:66" + } + ], + "id": 10688, + "name": "IndexAccess", + "src": "27046:23:66" + } + ], + "id": 10689, + "name": "FunctionCall", + "src": "27038:32:66" + } + ], + "id": 10690, + "name": "FunctionCall", + "src": "27030:41:66" + } + ], + "id": 10691, + "name": "VariableDeclarationStatement", + "src": "27004:67:66" + }, + { + "attributes": { + "assignments": [ + 10693 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "basePoint", + "scope": 10715, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10692, + "name": "ElementaryTypeName", + "src": "27089:7:66" + } + ], + "id": 10693, + "name": "VariableDeclaration", + "src": "27089:17:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 10694, + "name": "ElementaryTypeName", + "src": "27109:7:66" + } + ], + "id": 10695, + "name": "ElementaryTypeNameExpression", + "src": "27109:7:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">>", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10659, + "type": "uint256[] memory", + "value": "_additionalRoyalties" + }, + "id": 10696, + "name": "Identifier", + "src": "27117:20:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10665, + "type": "uint256", + "value": "i" + }, + "id": 10697, + "name": "Identifier", + "src": "27138:1:66" + } + ], + "id": 10698, + "name": "IndexAccess", + "src": "27117:23:66" + }, + { + "attributes": { + "hexvalue": "313630", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 160", + "value": "160" + }, + "id": 10699, + "name": "Literal", + "src": "27144:3:66" + } + ], + "id": 10700, + "name": "BinaryOperation", + "src": "27117:30:66" + } + ], + "id": 10701, + "name": "FunctionCall", + "src": "27109:39:66" + } + ], + "id": 10702, + "name": "VariableDeclarationStatement", + "src": "27089:59:66" + }, + { + "attributes": { + "assignments": [ + 10704 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "value", + "scope": 10715, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10703, + "name": "ElementaryTypeName", + "src": "27166:7:66" + } + ], + "id": 10704, + "name": "VariableDeclaration", + "src": "27166:13:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "bp", + "referencedDeclaration": 5593, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10661, + "type": "uint256", + "value": "amount" + }, + "id": 10705, + "name": "Identifier", + "src": "27182:6:66" + } + ], + "id": 10706, + "name": "MemberAccess", + "src": "27182:9:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10693, + "type": "uint256", + "value": "basePoint" + }, + "id": 10707, + "name": "Identifier", + "src": "27192:9:66" + } + ], + "id": 10708, + "name": "FunctionCall", + "src": "27182:20:66" + } + ], + "id": 10709, + "name": "VariableDeclarationStatement", + "src": "27166:36:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10390, + "type": "function (uint256,address)", + "value": "transferFeeWETH" + }, + "id": 10710, + "name": "Identifier", + "src": "27220:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10704, + "type": "uint256", + "value": "value" + }, + "id": 10711, + "name": "Identifier", + "src": "27236:5:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10681, + "type": "address payable", + "value": "account" + }, + "id": 10712, + "name": "Identifier", + "src": "27243:7:66" + } + ], + "id": 10713, + "name": "FunctionCall", + "src": "27220:31:66" + } + ], + "id": 10714, + "name": "ExpressionStatement", + "src": "27220:31:66" + } + ], + "id": 10715, + "name": "Block", + "src": "26986:280:66" + } + ], + "id": 10716, + "name": "IfStatement", + "src": "26953:313:66" + } + ], + "id": 10717, + "name": "Block", + "src": "26939:337:66" + } + ], + "id": 10718, + "name": "ForStatement", + "src": "26881:395:66" + } + ], + "id": 10719, + "name": "Block", + "src": "26871:411:66" + } + ], + "id": 10720, + "name": "FunctionDefinition", + "src": "26766:516:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "_arrayReplace", + "scope": 11101, + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "src", + "scope": 10774, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 10721, + "name": "ElementaryTypeName", + "src": "27342:5:66" + } + ], + "id": 10722, + "name": "VariableDeclaration", + "src": "27342:16:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "replacement", + "scope": 10774, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 10723, + "name": "ElementaryTypeName", + "src": "27368:5:66" + } + ], + "id": 10724, + "name": "VariableDeclaration", + "src": "27368:24:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "mask", + "scope": 10774, + "stateVariable": false, + "storageLocation": "memory", + "type": "bytes", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bytes", + "type": "bytes" + }, + "id": 10725, + "name": "ElementaryTypeName", + "src": "27402:5:66" + } + ], + "id": 10726, + "name": "VariableDeclaration", + "src": "27402:17:66" + } + ], + "id": 10727, + "name": "ParameterList", + "src": "27332:93:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10728, + "name": "ParameterList", + "src": "27448:0:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool) pure", + "value": "require" + }, + "id": 10729, + "name": "Identifier", + "src": "27458:7:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10722, + "type": "bytes memory", + "value": "src" + }, + "id": 10730, + "name": "Identifier", + "src": "27466:3:66" + } + ], + "id": 10731, + "name": "MemberAccess", + "src": "27466:10:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10724, + "type": "bytes memory", + "value": "replacement" + }, + "id": 10732, + "name": "Identifier", + "src": "27480:11:66" + } + ], + "id": 10733, + "name": "MemberAccess", + "src": "27480:18:66" + } + ], + "id": 10734, + "name": "BinaryOperation", + "src": "27466:32:66" + } + ], + "id": 10735, + "name": "FunctionCall", + "src": "27458:41:66" + } + ], + "id": 10736, + "name": "ExpressionStatement", + "src": "27458:41:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool) pure", + "value": "require" + }, + "id": 10737, + "name": "Identifier", + "src": "27509:7:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10722, + "type": "bytes memory", + "value": "src" + }, + "id": 10738, + "name": "Identifier", + "src": "27517:3:66" + } + ], + "id": 10739, + "name": "MemberAccess", + "src": "27517:10:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10726, + "type": "bytes memory", + "value": "mask" + }, + "id": 10740, + "name": "Identifier", + "src": "27531:4:66" + } + ], + "id": 10741, + "name": "MemberAccess", + "src": "27531:11:66" + } + ], + "id": 10742, + "name": "BinaryOperation", + "src": "27517:25:66" + } + ], + "id": 10743, + "name": "FunctionCall", + "src": "27509:34:66" + } + ], + "id": 10744, + "name": "ExpressionStatement", + "src": "27509:34:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10746 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 10772, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10745, + "name": "ElementaryTypeName", + "src": "27559:7:66" + } + ], + "id": 10746, + "name": "VariableDeclaration", + "src": "27559:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10747, + "name": "Literal", + "src": "27571:1:66" + } + ], + "id": 10748, + "name": "VariableDeclarationStatement", + "src": "27559:13:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10746, + "type": "uint256", + "value": "i" + }, + "id": 10749, + "name": "Identifier", + "src": "27574:1:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10722, + "type": "bytes memory", + "value": "src" + }, + "id": 10750, + "name": "Identifier", + "src": "27578:3:66" + } + ], + "id": 10751, + "name": "MemberAccess", + "src": "27578:10:66" + } + ], + "id": 10752, + "name": "BinaryOperation", + "src": "27574:14:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10746, + "type": "uint256", + "value": "i" + }, + "id": 10753, + "name": "Identifier", + "src": "27592:1:66" + } + ], + "id": 10754, + "name": "UnaryOperation", + "src": "27590:3:66" + } + ], + "id": 10755, + "name": "ExpressionStatement", + "src": "27590:3:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "bytes1" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10726, + "type": "bytes memory", + "value": "mask" + }, + "id": 10756, + "name": "Identifier", + "src": "27613:4:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10746, + "type": "uint256", + "value": "i" + }, + "id": 10757, + "name": "Identifier", + "src": "27618:1:66" + } + ], + "id": 10758, + "name": "IndexAccess", + "src": "27613:7:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10759, + "name": "Literal", + "src": "27624:1:66" + } + ], + "id": 10760, + "name": "BinaryOperation", + "src": "27613:12:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "bytes1" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "type": "bytes1" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10722, + "type": "bytes memory", + "value": "src" + }, + "id": 10761, + "name": "Identifier", + "src": "27645:3:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10746, + "type": "uint256", + "value": "i" + }, + "id": 10762, + "name": "Identifier", + "src": "27649:1:66" + } + ], + "id": 10763, + "name": "IndexAccess", + "src": "27645:6:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "bytes1" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10724, + "type": "bytes memory", + "value": "replacement" + }, + "id": 10764, + "name": "Identifier", + "src": "27654:11:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10746, + "type": "uint256", + "value": "i" + }, + "id": 10765, + "name": "Identifier", + "src": "27666:1:66" + } + ], + "id": 10766, + "name": "IndexAccess", + "src": "27654:14:66" + } + ], + "id": 10767, + "name": "Assignment", + "src": "27645:23:66" + } + ], + "id": 10768, + "name": "ExpressionStatement", + "src": "27645:23:66" + } + ], + "id": 10769, + "name": "Block", + "src": "27627:56:66" + } + ], + "id": 10770, + "name": "IfStatement", + "src": "27609:74:66" + } + ], + "id": 10771, + "name": "Block", + "src": "27595:98:66" + } + ], + "id": 10772, + "name": "ForStatement", + "src": "27554:139:66" + } + ], + "id": 10773, + "name": "Block", + "src": "27448:251:66" + } + ], + "id": 10774, + "name": "FunctionDefinition", + "src": "27310:389:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "supportsRoyalties", + "scope": 11101, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "text": "@notice returns true if this contract supports additional royalties for the marketplace;\nnow royalties are supported for:\n1. SudoSwap\n2. LooksRare old\n3. LooksRare V2" + }, + "id": 10775, + "name": "StructuredDocumentation", + "src": "27705:223:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "marketId", + "scope": 10803, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Markets", + "referencedDeclaration": 8709, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10776, + "name": "UserDefinedTypeName", + "src": "27960:7:66" + } + ], + "id": 10777, + "name": "VariableDeclaration", + "src": "27960:16:66" + } + ], + "id": 10778, + "name": "ParameterList", + "src": "27959:18:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10803, + "stateVariable": false, + "storageLocation": "default", + "type": "bool", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "bool", + "type": "bool" + }, + "id": 10779, + "name": "ElementaryTypeName", + "src": "28001:4:66" + } + ], + "id": 10780, + "name": "VariableDeclaration", + "src": "28001:4:66" + } + ], + "id": 10781, + "name": "ParameterList", + "src": "28000:6:66" + }, + { + "children": [ + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "||", + "type": "bool" + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "||", + "type": "bool" + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10777, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "marketId" + }, + "id": 10782, + "name": "Identifier", + "src": "28021:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SudoSwap", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10783, + "name": "Identifier", + "src": "28033:7:66" + } + ], + "id": 10784, + "name": "MemberAccess", + "src": "28033:16:66" + } + ], + "id": 10785, + "name": "BinaryOperation", + "src": "28021:28:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10777, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "marketId" + }, + "id": 10786, + "name": "Identifier", + "src": "28053:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "LooksRareOrders", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10787, + "name": "Identifier", + "src": "28065:7:66" + } + ], + "id": 10788, + "name": "MemberAccess", + "src": "28065:23:66" + } + ], + "id": 10789, + "name": "BinaryOperation", + "src": "28053:35:66" + } + ], + "id": 10790, + "name": "BinaryOperation", + "src": "28021:67:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10777, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "marketId" + }, + "id": 10791, + "name": "Identifier", + "src": "28092:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "LooksRareV2", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10792, + "name": "Identifier", + "src": "28104:7:66" + } + ], + "id": 10793, + "name": "MemberAccess", + "src": "28104:19:66" + } + ], + "id": 10794, + "name": "BinaryOperation", + "src": "28092:31:66" + } + ], + "id": 10795, + "name": "BinaryOperation", + "src": "28021:102:66" + }, + { + "children": [ + { + "attributes": { + "functionReturnParameters": 10781 + }, + "children": [ + { + "attributes": { + "hexvalue": "74727565", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "true" + }, + "id": 10796, + "name": "Literal", + "src": "28146:4:66" + } + ], + "id": 10797, + "name": "Return", + "src": "28139:11:66" + } + ], + "id": 10798, + "name": "Block", + "src": "28125:36:66" + } + ], + "id": 10799, + "name": "IfStatement", + "src": "28017:144:66" + }, + { + "attributes": { + "functionReturnParameters": 10781 + }, + "children": [ + { + "attributes": { + "hexvalue": "66616c7365", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "bool", + "type": "bool", + "value": "false" + }, + "id": 10800, + "name": "Literal", + "src": "28178:5:66" + } + ], + "id": 10801, + "name": "Return", + "src": "28171:12:66" + } + ], + "id": 10802, + "name": "Block", + "src": "28007:183:66" + } + ], + "id": 10803, + "name": "FunctionDefinition", + "src": "27933:257:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "function", + "modifiers": [ + null + ], + "name": "getAmountOfWethForPurchase", + "scope": 11101, + "stateMutability": "pure", + "virtual": false, + "visibility": "internal" + }, + "children": [ + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "detail", + "scope": 10908, + "stateVariable": false, + "storageLocation": "memory", + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "PurchaseDetails", + "referencedDeclaration": 8724, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails" + }, + "id": 10804, + "name": "UserDefinedTypeName", + "src": "28232:15:66" + } + ], + "id": 10805, + "name": "VariableDeclaration", + "src": "28232:29:66" + } + ], + "id": 10806, + "name": "ParameterList", + "src": "28231:31:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "", + "scope": 10908, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10807, + "name": "ElementaryTypeName", + "src": "28286:7:66" + } + ], + "id": 10808, + "name": "VariableDeclaration", + "src": "28286:7:66" + } + ], + "id": 10809, + "name": "ParameterList", + "src": "28285:9:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10811 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "result", + "scope": 10907, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10810, + "name": "ElementaryTypeName", + "src": "28305:7:66" + } + ], + "id": 10811, + "name": "VariableDeclaration", + "src": "28305:14:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10812, + "name": "Literal", + "src": "28322:1:66" + } + ], + "id": 10813, + "name": "VariableDeclarationStatement", + "src": "28305:18:66" + }, + { + "attributes": { + "assignments": [ + 10815 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "currency", + "scope": 10907, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Currencies", + "referencedDeclaration": 8715, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "id": 10814, + "name": "UserDefinedTypeName", + "src": "28334:10:66" + } + ], + "id": 10815, + "name": "VariableDeclaration", + "src": "28334:19:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10511, + "type": "function (uint256) pure returns (enum RaribleExchangeWrapperUpgradeableV2.Currencies)", + "value": "getCurrency" + }, + "id": 10816, + "name": "Identifier", + "src": "28356:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8721, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10805, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "detail" + }, + "id": 10817, + "name": "Identifier", + "src": "28368:6:66" + } + ], + "id": 10818, + "name": "MemberAccess", + "src": "28368:11:66" + } + ], + "id": 10819, + "name": "FunctionCall", + "src": "28356:24:66" + } + ], + "id": 10820, + "name": "VariableDeclarationStatement", + "src": "28334:46:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Currencies_$8715", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10815, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies", + "value": "currency" + }, + "id": 10821, + "name": "Identifier", + "src": "28475:8:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "WETH", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Currencies" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8715, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Currencies)", + "value": "Currencies" + }, + "id": 10822, + "name": "Identifier", + "src": "28487:10:66" + } + ], + "id": 10823, + "name": "MemberAccess", + "src": "28487:15:66" + } + ], + "id": 10824, + "name": "BinaryOperation", + "src": "28475:27:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10811, + "type": "uint256", + "value": "result" + }, + "id": 10825, + "name": "Identifier", + "src": "28543:6:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10811, + "type": "uint256", + "value": "result" + }, + "id": 10826, + "name": "Identifier", + "src": "28552:6:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8719, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10805, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "detail" + }, + "id": 10827, + "name": "Identifier", + "src": "28561:6:66" + } + ], + "id": 10828, + "name": "MemberAccess", + "src": "28561:13:66" + } + ], + "id": 10829, + "name": "BinaryOperation", + "src": "28552:22:66" + } + ], + "id": 10830, + "name": "Assignment", + "src": "28543:31:66" + } + ], + "id": 10831, + "name": "ExpressionStatement", + "src": "28543:31:66" + }, + { + "attributes": { + "assignments": [ + 10833, + 10835 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "firstFeeAmount", + "scope": 10903, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10832, + "name": "ElementaryTypeName", + "src": "28613:7:66" + } + ], + "id": 10833, + "name": "VariableDeclaration", + "src": "28613:22:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "secondFeeAmount", + "scope": 10903, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10834, + "name": "ElementaryTypeName", + "src": "28637:7:66" + } + ], + "id": 10835, + "name": "VariableDeclaration", + "src": "28637:23:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(uint256,uint256)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10493, + "type": "function (uint256,uint256) pure returns (uint256,uint256)", + "value": "getFees" + }, + "id": 10836, + "name": "Identifier", + "src": "28664:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8721, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10805, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "detail" + }, + "id": 10837, + "name": "Identifier", + "src": "28672:6:66" + } + ], + "id": 10838, + "name": "MemberAccess", + "src": "28672:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8719, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10805, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "detail" + }, + "id": 10839, + "name": "Identifier", + "src": "28685:6:66" + } + ], + "id": 10840, + "name": "MemberAccess", + "src": "28685:13:66" + } + ], + "id": 10841, + "name": "FunctionCall", + "src": "28664:35:66" + } + ], + "id": 10842, + "name": "VariableDeclarationStatement", + "src": "28612:87:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10811, + "type": "uint256", + "value": "result" + }, + "id": 10843, + "name": "Identifier", + "src": "28713:6:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10811, + "type": "uint256", + "value": "result" + }, + "id": 10844, + "name": "Identifier", + "src": "28722:6:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10833, + "type": "uint256", + "value": "firstFeeAmount" + }, + "id": 10845, + "name": "Identifier", + "src": "28731:14:66" + } + ], + "id": 10846, + "name": "BinaryOperation", + "src": "28722:23:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10835, + "type": "uint256", + "value": "secondFeeAmount" + }, + "id": 10847, + "name": "Identifier", + "src": "28748:15:66" + } + ], + "id": 10848, + "name": "BinaryOperation", + "src": "28722:41:66" + } + ], + "id": 10849, + "name": "Assignment", + "src": "28713:50:66" + } + ], + "id": 10850, + "name": "ExpressionStatement", + "src": "28713:50:66" + }, + { + "attributes": { + "assignments": [ + null, + 10855 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "royalties", + "scope": 10903, + "stateVariable": false, + "storageLocation": "memory", + "type": "uint256[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "uint256[]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10853, + "name": "ElementaryTypeName", + "src": "28809:7:66" + } + ], + "id": 10854, + "name": "ArrayTypeName", + "src": "28809:9:66" + } + ], + "id": 10855, + "name": "VariableDeclaration", + "src": "28809:26:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple(bytes memory,uint256[] memory)", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10590, + "type": "function (bytes memory,uint256,enum RaribleExchangeWrapperUpgradeableV2.Markets) pure returns (bytes memory,uint256[] memory)", + "value": "getDataAndAdditionalData" + }, + "id": 10856, + "name": "Identifier", + "src": "28839:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "data", + "referencedDeclaration": 8723, + "type": "bytes memory" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10805, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "detail" + }, + "id": 10857, + "name": "Identifier", + "src": "28864:6:66" + } + ], + "id": 10858, + "name": "MemberAccess", + "src": "28864:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "fees", + "referencedDeclaration": 8721, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10805, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "detail" + }, + "id": 10859, + "name": "Identifier", + "src": "28877:6:66" + } + ], + "id": 10860, + "name": "MemberAccess", + "src": "28877:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "marketId", + "referencedDeclaration": 8717, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10805, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "detail" + }, + "id": 10861, + "name": "Identifier", + "src": "28890:6:66" + } + ], + "id": 10862, + "name": "MemberAccess", + "src": "28890:15:66" + } + ], + "id": 10863, + "name": "FunctionCall", + "src": "28839:67:66" + } + ], + "id": 10864, + "name": "VariableDeclarationStatement", + "src": "28806:100:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10866 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "j", + "scope": 10902, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10865, + "name": "ElementaryTypeName", + "src": "28925:7:66" + } + ], + "id": 10866, + "name": "VariableDeclaration", + "src": "28925:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10867, + "name": "Literal", + "src": "28937:1:66" + } + ], + "id": 10868, + "name": "VariableDeclarationStatement", + "src": "28925:13:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10866, + "type": "uint256", + "value": "j" + }, + "id": 10869, + "name": "Identifier", + "src": "28940:1:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10855, + "type": "uint256[] memory", + "value": "royalties" + }, + "id": 10870, + "name": "Identifier", + "src": "28944:9:66" + } + ], + "id": 10871, + "name": "MemberAccess", + "src": "28944:16:66" + } + ], + "id": 10872, + "name": "BinaryOperation", + "src": "28940:20:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10866, + "type": "uint256", + "value": "j" + }, + "id": 10873, + "name": "Identifier", + "src": "28964:1:66" + } + ], + "id": 10874, + "name": "UnaryOperation", + "src": "28962:3:66" + } + ], + "id": 10875, + "name": "ExpressionStatement", + "src": "28962:3:66" + }, + { + "children": [ + { + "attributes": { + "assignments": [ + 10877 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "royaltyBasePoint", + "scope": 10901, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10876, + "name": "ElementaryTypeName", + "src": "28985:7:66" + } + ], + "id": 10877, + "name": "VariableDeclaration", + "src": "28985:24:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(uint256)" + }, + "children": [ + { + "attributes": { + "name": "uint256" + }, + "id": 10878, + "name": "ElementaryTypeName", + "src": "29012:7:66" + } + ], + "id": 10879, + "name": "ElementaryTypeNameExpression", + "src": "29012:7:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": ">>", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10855, + "type": "uint256[] memory", + "value": "royalties" + }, + "id": 10880, + "name": "Identifier", + "src": "29020:9:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10866, + "type": "uint256", + "value": "j" + }, + "id": 10881, + "name": "Identifier", + "src": "29030:1:66" + } + ], + "id": 10882, + "name": "IndexAccess", + "src": "29020:12:66" + }, + { + "attributes": { + "hexvalue": "313630", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 160", + "value": "160" + }, + "id": 10883, + "name": "Literal", + "src": "29036:3:66" + } + ], + "id": 10884, + "name": "BinaryOperation", + "src": "29020:19:66" + } + ], + "id": 10885, + "name": "FunctionCall", + "src": "29012:28:66" + } + ], + "id": 10886, + "name": "VariableDeclarationStatement", + "src": "28985:55:66" + }, + { + "attributes": { + "assignments": [ + 10888 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "royaltyValue", + "scope": 10901, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10887, + "name": "ElementaryTypeName", + "src": "29058:7:66" + } + ], + "id": 10888, + "name": "VariableDeclaration", + "src": "29058:20:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "uint256", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "bp", + "referencedDeclaration": 5593, + "type": "function (uint256,uint256) pure returns (uint256)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "member_name": "amount", + "referencedDeclaration": 8719, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10805, + "type": "struct RaribleExchangeWrapperUpgradeableV2.PurchaseDetails memory", + "value": "detail" + }, + "id": 10889, + "name": "Identifier", + "src": "29081:6:66" + } + ], + "id": 10890, + "name": "MemberAccess", + "src": "29081:13:66" + } + ], + "id": 10891, + "name": "MemberAccess", + "src": "29081:16:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10877, + "type": "uint256", + "value": "royaltyBasePoint" + }, + "id": 10892, + "name": "Identifier", + "src": "29098:16:66" + } + ], + "id": 10893, + "name": "FunctionCall", + "src": "29081:34:66" + } + ], + "id": 10894, + "name": "VariableDeclarationStatement", + "src": "29058:57:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10811, + "type": "uint256", + "value": "result" + }, + "id": 10895, + "name": "Identifier", + "src": "29133:6:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "+", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10811, + "type": "uint256", + "value": "result" + }, + "id": 10896, + "name": "Identifier", + "src": "29142:6:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10888, + "type": "uint256", + "value": "royaltyValue" + }, + "id": 10897, + "name": "Identifier", + "src": "29151:12:66" + } + ], + "id": 10898, + "name": "BinaryOperation", + "src": "29142:21:66" + } + ], + "id": 10899, + "name": "Assignment", + "src": "29133:30:66" + } + ], + "id": 10900, + "name": "ExpressionStatement", + "src": "29133:30:66" + } + ], + "id": 10901, + "name": "Block", + "src": "28967:211:66" + } + ], + "id": 10902, + "name": "ForStatement", + "src": "28920:258:66" + } + ], + "id": 10903, + "name": "Block", + "src": "28504:684:66" + } + ], + "id": 10904, + "name": "IfStatement", + "src": "28471:717:66" + }, + { + "attributes": { + "functionReturnParameters": 10809 + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10811, + "type": "uint256", + "value": "result" + }, + "id": 10905, + "name": "Identifier", + "src": "29205:6:66" + } + ], + "id": 10906, + "name": "Return", + "src": "29198:13:66" + } + ], + "id": 10907, + "name": "Block", + "src": "28295:923:66" + } + ], + "id": 10908, + "name": "FunctionDefinition", + "src": "28196:1022:66" + }, + { + "attributes": { + "functionSelector": "86dcbd27", + "implemented": true, + "isConstructor": false, + "kind": "function", + "name": "approveWETH", + "scope": 11101, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "attributes": { + "text": "@notice approves weth for a list of the addresses\n@param transferProxies - array of addresses to approve WETH for" + }, + "id": 10909, + "name": "StructuredDocumentation", + "src": "29224:140:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "transferProxies", + "scope": 10941, + "stateVariable": false, + "storageLocation": "calldata", + "type": "address[]", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "type": "address[]" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 10910, + "name": "ElementaryTypeName", + "src": "29390:7:66" + } + ], + "id": 10911, + "name": "ArrayTypeName", + "src": "29390:9:66" + } + ], + "id": 10912, + "name": "VariableDeclaration", + "src": "29390:34:66" + } + ], + "id": 10913, + "name": "ParameterList", + "src": "29389:36:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10916, + "name": "ParameterList", + "src": "29445:0:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 75, + "type": "modifier ()", + "value": "onlyOwner" + }, + "id": 10914, + "name": "Identifier", + "src": "29435:9:66" + } + ], + "id": 10915, + "name": "ModifierInvocation", + "src": "29435:9:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "assignments": [ + 10918 + ] + }, + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "i", + "scope": 10939, + "stateVariable": false, + "storageLocation": "default", + "type": "uint256", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 10917, + "name": "ElementaryTypeName", + "src": "29460:7:66" + } + ], + "id": 10918, + "name": "VariableDeclaration", + "src": "29460:9:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10919, + "name": "Literal", + "src": "29472:1:66" + } + ], + "id": 10920, + "name": "VariableDeclarationStatement", + "src": "29460:13:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "<", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10918, + "type": "uint256", + "value": "i" + }, + "id": 10921, + "name": "Identifier", + "src": "29475:1:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "length", + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10912, + "type": "address[] calldata", + "value": "transferProxies" + }, + "id": 10922, + "name": "Identifier", + "src": "29479:15:66" + } + ], + "id": 10923, + "name": "MemberAccess", + "src": "29479:22:66" + } + ], + "id": 10924, + "name": "BinaryOperation", + "src": "29475:26:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "++", + "prefix": true, + "type": "uint256" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10918, + "type": "uint256", + "value": "i" + }, + "id": 10925, + "name": "Identifier", + "src": "29505:1:66" + } + ], + "id": 10926, + "name": "UnaryOperation", + "src": "29503:3:66" + } + ], + "id": 10927, + "name": "ExpressionStatement", + "src": "29503:3:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "bool", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "member_name": "approve", + "referencedDeclaration": 1142, + "type": "function (address,uint256) external returns (bool)" + }, + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "contract IERC20Upgradeable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 1173, + "type": "type(contract IERC20Upgradeable)", + "value": "IERC20Upgradeable" + }, + "id": 10928, + "name": "Identifier", + "src": "29522:17:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8679, + "type": "address", + "value": "weth" + }, + "id": 10929, + "name": "Identifier", + "src": "29540:4:66" + } + ], + "id": 10930, + "name": "FunctionCall", + "src": "29522:23:66" + } + ], + "id": 10931, + "name": "MemberAccess", + "src": "29522:31:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10912, + "type": "address[] calldata", + "value": "transferProxies" + }, + "id": 10932, + "name": "Identifier", + "src": "29554:15:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10918, + "type": "uint256", + "value": "i" + }, + "id": 10933, + "name": "Identifier", + "src": "29570:1:66" + } + ], + "id": 10934, + "name": "IndexAccess", + "src": "29554:18:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8686, + "type": "uint256", + "value": "UINT256_MAX" + }, + "id": 10935, + "name": "Identifier", + "src": "29574:11:66" + } + ], + "id": 10936, + "name": "FunctionCall", + "src": "29522:64:66" + } + ], + "id": 10937, + "name": "ExpressionStatement", + "src": "29522:64:66" + } + ], + "id": 10938, + "name": "Block", + "src": "29508:89:66" + } + ], + "id": 10939, + "name": "ForStatement", + "src": "29455:142:66" + } + ], + "id": 10940, + "name": "Block", + "src": "29445:158:66" + } + ], + "id": 10941, + "name": "FunctionDefinition", + "src": "29369:234:66" + }, + { + "attributes": { + "functionSelector": "5cdb4367", + "implemented": true, + "isConstructor": false, + "kind": "function", + "name": "updateMarketplaceAddress", + "scope": 11101, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "attributes": { + "text": " @notice updates the address of the marketplace\n @param _market - type of the marketplace\n @param _newAddress - new address of the marketplace" + }, + "id": 10942, + "name": "StructuredDocumentation", + "src": "29609:172:66" + }, + { + "children": [ + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_market", + "scope": 11092, + "stateVariable": false, + "storageLocation": "default", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "Markets", + "referencedDeclaration": 8709, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "id": 10943, + "name": "UserDefinedTypeName", + "src": "29820:7:66" + } + ], + "id": 10944, + "name": "VariableDeclaration", + "src": "29820:15:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "_newAddress", + "scope": 11092, + "stateVariable": false, + "storageLocation": "default", + "type": "address", + "visibility": "internal" + }, + "children": [ + { + "attributes": { + "name": "address", + "stateMutability": "nonpayable", + "type": "address" + }, + "id": 10945, + "name": "ElementaryTypeName", + "src": "29837:7:66" + } + ], + "id": 10946, + "name": "VariableDeclaration", + "src": "29837:19:66" + } + ], + "id": 10947, + "name": "ParameterList", + "src": "29819:38:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 10950, + "name": "ParameterList", + "src": "29877:0:66" + }, + { + "attributes": {}, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 75, + "type": "modifier ()", + "value": "onlyOwner" + }, + "id": 10948, + "name": "Identifier", + "src": "29867:9:66" + } + ], + "id": 10949, + "name": "ModifierInvocation", + "src": "29867:9:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_5904c3e21a28364a0c2d14d132ae0ba7e1f2dcf1f9ade73ba991a7031640606b", + "typeString": "literal_string \"New address cannot be zero\"" + } + ], + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "type": "function (bool,string memory) pure", + "value": "require" + }, + "id": 10951, + "name": "Identifier", + "src": "29887:7:66" + }, + { + "attributes": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "!=", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 10952, + "name": "Identifier", + "src": "29895:11:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "address payable", + "type_conversion": true + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "type": "type(address)" + }, + "children": [ + { + "attributes": { + "name": "address" + }, + "id": 10953, + "name": "ElementaryTypeName", + "src": "29910:7:66" + } + ], + "id": 10954, + "name": "ElementaryTypeNameExpression", + "src": "29910:7:66" + }, + { + "attributes": { + "hexvalue": "30", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 0", + "value": "0" + }, + "id": 10955, + "name": "Literal", + "src": "29918:1:66" + } + ], + "id": 10956, + "name": "FunctionCall", + "src": "29910:10:66" + } + ], + "id": 10957, + "name": "BinaryOperation", + "src": "29895:25:66" + }, + { + "attributes": { + "hexvalue": "4e657720616464726573732063616e6e6f74206265207a65726f", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"New address cannot be zero\"", + "value": "New address cannot be zero" + }, + "id": 10958, + "name": "Literal", + "src": "29922:28:66" + } + ], + "id": 10959, + "name": "FunctionCall", + "src": "29887:64:66" + } + ], + "id": 10960, + "name": "ExpressionStatement", + "src": "29887:64:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10944, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "_market" + }, + "id": 10961, + "name": "Identifier", + "src": "29966:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "WyvernExchange", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10962, + "name": "Identifier", + "src": "29977:7:66" + } + ], + "id": 10963, + "name": "MemberAccess", + "src": "29977:22:66" + } + ], + "id": 10964, + "name": "BinaryOperation", + "src": "29966:33:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8655, + "type": "address", + "value": "wyvernExchange" + }, + "id": 10965, + "name": "Identifier", + "src": "30015:14:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 10966, + "name": "Identifier", + "src": "30032:11:66" + } + ], + "id": 10967, + "name": "Assignment", + "src": "30015:28:66" + } + ], + "id": 10968, + "name": "ExpressionStatement", + "src": "30015:28:66" + } + ], + "id": 10969, + "name": "Block", + "src": "30001:53:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10944, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "_market" + }, + "id": 10970, + "name": "Identifier", + "src": "30064:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "ExchangeV2", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10971, + "name": "Identifier", + "src": "30075:7:66" + } + ], + "id": 10972, + "name": "MemberAccess", + "src": "30075:18:66" + } + ], + "id": 10973, + "name": "BinaryOperation", + "src": "30064:29:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8657, + "type": "address", + "value": "exchangeV2" + }, + "id": 10974, + "name": "Identifier", + "src": "30109:10:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 10975, + "name": "Identifier", + "src": "30122:11:66" + } + ], + "id": 10976, + "name": "Assignment", + "src": "30109:24:66" + } + ], + "id": 10977, + "name": "ExpressionStatement", + "src": "30109:24:66" + } + ], + "id": 10978, + "name": "Block", + "src": "30095:49:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10944, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "_market" + }, + "id": 10979, + "name": "Identifier", + "src": "30154:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_1", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10980, + "name": "Identifier", + "src": "30165:7:66" + } + ], + "id": 10981, + "name": "MemberAccess", + "src": "30165:19:66" + } + ], + "id": 10982, + "name": "BinaryOperation", + "src": "30154:30:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8659, + "type": "address", + "value": "seaPort_1_1" + }, + "id": 10983, + "name": "Identifier", + "src": "30200:11:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 10984, + "name": "Identifier", + "src": "30214:11:66" + } + ], + "id": 10985, + "name": "Assignment", + "src": "30200:25:66" + } + ], + "id": 10986, + "name": "ExpressionStatement", + "src": "30200:25:66" + } + ], + "id": 10987, + "name": "Block", + "src": "30186:50:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10944, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "_market" + }, + "id": 10988, + "name": "Identifier", + "src": "30246:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "X2Y2", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10989, + "name": "Identifier", + "src": "30257:7:66" + } + ], + "id": 10990, + "name": "MemberAccess", + "src": "30257:12:66" + } + ], + "id": 10991, + "name": "BinaryOperation", + "src": "30246:23:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8661, + "type": "address", + "value": "x2y2" + }, + "id": 10992, + "name": "Identifier", + "src": "30285:4:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 10993, + "name": "Identifier", + "src": "30292:11:66" + } + ], + "id": 10994, + "name": "Assignment", + "src": "30285:18:66" + } + ], + "id": 10995, + "name": "ExpressionStatement", + "src": "30285:18:66" + } + ], + "id": 10996, + "name": "Block", + "src": "30271:43:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10944, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "_market" + }, + "id": 10997, + "name": "Identifier", + "src": "30324:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "LooksRareOrders", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 10998, + "name": "Identifier", + "src": "30335:7:66" + } + ], + "id": 10999, + "name": "MemberAccess", + "src": "30335:23:66" + } + ], + "id": 11000, + "name": "BinaryOperation", + "src": "30324:34:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8663, + "type": "address", + "value": "looksRare" + }, + "id": 11001, + "name": "Identifier", + "src": "30374:9:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 11002, + "name": "Identifier", + "src": "30386:11:66" + } + ], + "id": 11003, + "name": "Assignment", + "src": "30374:23:66" + } + ], + "id": 11004, + "name": "ExpressionStatement", + "src": "30374:23:66" + } + ], + "id": 11005, + "name": "Block", + "src": "30360:48:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10944, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "_market" + }, + "id": 11006, + "name": "Identifier", + "src": "30418:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SudoSwap", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 11007, + "name": "Identifier", + "src": "30429:7:66" + } + ], + "id": 11008, + "name": "MemberAccess", + "src": "30429:16:66" + } + ], + "id": 11009, + "name": "BinaryOperation", + "src": "30418:27:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8665, + "type": "address", + "value": "sudoswap" + }, + "id": 11010, + "name": "Identifier", + "src": "30461:8:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 11011, + "name": "Identifier", + "src": "30472:11:66" + } + ], + "id": 11012, + "name": "Assignment", + "src": "30461:22:66" + } + ], + "id": 11013, + "name": "ExpressionStatement", + "src": "30461:22:66" + } + ], + "id": 11014, + "name": "Block", + "src": "30447:47:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10944, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "_market" + }, + "id": 11015, + "name": "Identifier", + "src": "30504:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_4", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 11016, + "name": "Identifier", + "src": "30515:7:66" + } + ], + "id": 11017, + "name": "MemberAccess", + "src": "30515:19:66" + } + ], + "id": 11018, + "name": "BinaryOperation", + "src": "30504:30:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8667, + "type": "address", + "value": "seaPort_1_4" + }, + "id": 11019, + "name": "Identifier", + "src": "30550:11:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 11020, + "name": "Identifier", + "src": "30564:11:66" + } + ], + "id": 11021, + "name": "Assignment", + "src": "30550:25:66" + } + ], + "id": 11022, + "name": "ExpressionStatement", + "src": "30550:25:66" + } + ], + "id": 11023, + "name": "Block", + "src": "30536:50:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10944, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "_market" + }, + "id": 11024, + "name": "Identifier", + "src": "30596:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "LooksRareV2", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 11025, + "name": "Identifier", + "src": "30607:7:66" + } + ], + "id": 11026, + "name": "MemberAccess", + "src": "30607:19:66" + } + ], + "id": 11027, + "name": "BinaryOperation", + "src": "30596:30:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8669, + "type": "address", + "value": "looksRareV2" + }, + "id": 11028, + "name": "Identifier", + "src": "30642:11:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 11029, + "name": "Identifier", + "src": "30656:11:66" + } + ], + "id": 11030, + "name": "Assignment", + "src": "30642:25:66" + } + ], + "id": 11031, + "name": "ExpressionStatement", + "src": "30642:25:66" + } + ], + "id": 11032, + "name": "Block", + "src": "30628:50:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10944, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "_market" + }, + "id": 11033, + "name": "Identifier", + "src": "30688:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "Blur", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 11034, + "name": "Identifier", + "src": "30699:7:66" + } + ], + "id": 11035, + "name": "MemberAccess", + "src": "30699:12:66" + } + ], + "id": 11036, + "name": "BinaryOperation", + "src": "30688:23:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8671, + "type": "address", + "value": "blur" + }, + "id": 11037, + "name": "Identifier", + "src": "30727:4:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 11038, + "name": "Identifier", + "src": "30734:11:66" + } + ], + "id": 11039, + "name": "Assignment", + "src": "30727:18:66" + } + ], + "id": 11040, + "name": "ExpressionStatement", + "src": "30727:18:66" + } + ], + "id": 11041, + "name": "Block", + "src": "30713:43:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10944, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "_market" + }, + "id": 11042, + "name": "Identifier", + "src": "30766:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_5", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 11043, + "name": "Identifier", + "src": "30777:7:66" + } + ], + "id": 11044, + "name": "MemberAccess", + "src": "30777:19:66" + } + ], + "id": 11045, + "name": "BinaryOperation", + "src": "30766:30:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8673, + "type": "address", + "value": "seaPort_1_5" + }, + "id": 11046, + "name": "Identifier", + "src": "30812:11:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 11047, + "name": "Identifier", + "src": "30826:11:66" + } + ], + "id": 11048, + "name": "Assignment", + "src": "30812:25:66" + } + ], + "id": 11049, + "name": "ExpressionStatement", + "src": "30812:25:66" + } + ], + "id": 11050, + "name": "Block", + "src": "30798:50:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10944, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "_market" + }, + "id": 11051, + "name": "Identifier", + "src": "30858:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "SeaPort_1_6", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 11052, + "name": "Identifier", + "src": "30869:7:66" + } + ], + "id": 11053, + "name": "MemberAccess", + "src": "30869:19:66" + } + ], + "id": 11054, + "name": "BinaryOperation", + "src": "30858:30:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8675, + "type": "address", + "value": "seaPort_1_6" + }, + "id": 11055, + "name": "Identifier", + "src": "30904:11:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 11056, + "name": "Identifier", + "src": "30918:11:66" + } + ], + "id": 11057, + "name": "Assignment", + "src": "30904:25:66" + } + ], + "id": 11058, + "name": "ExpressionStatement", + "src": "30904:25:66" + } + ], + "id": 11059, + "name": "Block", + "src": "30890:50:66" + }, + { + "children": [ + { + "attributes": { + "commonType": { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "==", + "type": "bool" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10944, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "_market" + }, + "id": 11060, + "name": "Identifier", + "src": "30950:7:66" + }, + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "member_name": "NewMarket", + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8709, + "type": "type(enum RaribleExchangeWrapperUpgradeableV2.Markets)", + "value": "Markets" + }, + "id": 11061, + "name": "Identifier", + "src": "30961:7:66" + } + ], + "id": 11062, + "name": "MemberAccess", + "src": "30961:17:66" + } + ], + "id": 11063, + "name": "BinaryOperation", + "src": "30950:28:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "operator": "=", + "type": "address" + }, + "children": [ + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8677, + "type": "address", + "value": "newMarket" + }, + "id": 11064, + "name": "Identifier", + "src": "30994:9:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 11065, + "name": "Identifier", + "src": "31006:11:66" + } + ], + "id": 11066, + "name": "Assignment", + "src": "30994:23:66" + } + ], + "id": 11067, + "name": "ExpressionStatement", + "src": "30994:23:66" + } + ], + "id": 11068, + "name": "Block", + "src": "30980:48:66" + }, + { + "children": [ + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_febc375c51703703674424cdadfabf329e51db90f4495b4c56145c8182019182", + "typeString": "literal_string \"Invalid marketplace type\"" + } + ], + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "type": "function (string memory) pure", + "value": "revert" + }, + "id": 11069, + "name": "Identifier", + "src": "31048:6:66" + }, + { + "attributes": { + "hexvalue": "496e76616c6964206d61726b6574706c6163652074797065", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "string", + "type": "literal_string \"Invalid marketplace type\"", + "value": "Invalid marketplace type" + }, + "id": 11070, + "name": "Literal", + "src": "31055:26:66" + } + ], + "id": 11071, + "name": "FunctionCall", + "src": "31048:34:66" + } + ], + "id": 11072, + "name": "ExpressionStatement", + "src": "31048:34:66" + } + ], + "id": 11073, + "name": "Block", + "src": "31034:59:66" + } + ], + "id": 11074, + "name": "IfStatement", + "src": "30946:147:66" + } + ], + "id": 11075, + "name": "IfStatement", + "src": "30854:239:66" + } + ], + "id": 11076, + "name": "IfStatement", + "src": "30762:331:66" + } + ], + "id": 11077, + "name": "IfStatement", + "src": "30684:409:66" + } + ], + "id": 11078, + "name": "IfStatement", + "src": "30592:501:66" + } + ], + "id": 11079, + "name": "IfStatement", + "src": "30500:593:66" + } + ], + "id": 11080, + "name": "IfStatement", + "src": "30414:679:66" + } + ], + "id": 11081, + "name": "IfStatement", + "src": "30320:773:66" + } + ], + "id": 11082, + "name": "IfStatement", + "src": "30242:851:66" + } + ], + "id": 11083, + "name": "IfStatement", + "src": "30150:943:66" + } + ], + "id": 11084, + "name": "IfStatement", + "src": "30060:1033:66" + } + ], + "id": 11085, + "name": "IfStatement", + "src": "29962:1131:66" + }, + { + "children": [ + { + "attributes": { + "isConstant": false, + "isLValue": false, + "isPure": false, + "isStructConstructorCall": false, + "lValueRequested": false, + "names": [ + null + ], + "tryCall": false, + "type": "tuple()", + "type_conversion": false + }, + "children": [ + { + "attributes": { + "argumentTypes": [ + { + "typeIdentifier": "t_enum$_Markets_$8709", + "typeString": "enum RaribleExchangeWrapperUpgradeableV2.Markets" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 8696, + "type": "function (enum RaribleExchangeWrapperUpgradeableV2.Markets,address)", + "value": "MarketplaceAddressUpdated" + }, + "id": 11086, + "name": "Identifier", + "src": "31108:25:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10944, + "type": "enum RaribleExchangeWrapperUpgradeableV2.Markets", + "value": "_market" + }, + "id": 11087, + "name": "Identifier", + "src": "31134:7:66" + }, + { + "attributes": { + "overloadedDeclarations": [ + null + ], + "referencedDeclaration": 10946, + "type": "address", + "value": "_newAddress" + }, + "id": 11088, + "name": "Identifier", + "src": "31143:11:66" + } + ], + "id": 11089, + "name": "FunctionCall", + "src": "31108:47:66" + } + ], + "id": 11090, + "name": "EmitStatement", + "src": "31103:52:66" + } + ], + "id": 11091, + "name": "Block", + "src": "29877:1285:66" + } + ], + "id": 11092, + "name": "FunctionDefinition", + "src": "29786:1376:66" + }, + { + "attributes": { + "implemented": true, + "isConstructor": false, + "kind": "receive", + "modifiers": [ + null + ], + "name": "", + "scope": 11101, + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + "children": [ + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 11093, + "name": "ParameterList", + "src": "31175:2:66" + }, + { + "attributes": { + "parameters": [ + null + ] + }, + "children": [], + "id": 11094, + "name": "ParameterList", + "src": "31195:0:66" + }, + { + "attributes": { + "statements": [ + null + ] + }, + "children": [], + "id": 11095, + "name": "Block", + "src": "31195:2:66" + } + ], + "id": 11096, + "name": "FunctionDefinition", + "src": "31168:29:66" + }, + { + "attributes": { + "constant": false, + "mutability": "mutable", + "name": "__gap", + "scope": 11101, + "stateVariable": true, + "storageLocation": "default", + "type": "uint256[50]", + "visibility": "private" + }, + "children": [ + { + "attributes": { + "type": "uint256[50]" + }, + "children": [ + { + "attributes": { + "name": "uint256", + "type": "uint256" + }, + "id": 11097, + "name": "ElementaryTypeName", + "src": "31203:7:66" + }, + { + "attributes": { + "hexvalue": "3530", + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "token": "number", + "type": "int_const 50", + "value": "50" + }, + "id": 11098, + "name": "Literal", + "src": "31211:2:66" + } + ], + "id": 11099, + "name": "ArrayTypeName", + "src": "31203:11:66" + } + ], + "id": 11100, + "name": "VariableDeclaration", + "src": "31203:25:66" + } + ], + "id": 11101, + "name": "ContractDefinition", + "src": "1631:29600:66" + } + ], + "id": 11102, + "name": "SourceUnit", + "src": "33:31199:66" + }, + "compiler": { + "name": "solc", + "version": "0.7.6+commit.7338295f.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "3.4.16", + "updatedAt": "2024-07-31T21:31:57.160Z", + "devdoc": { + "kind": "dev", + "methods": { + "__ExchangeWrapper_init_proxy(address[12],address,address[],address)": { + "params": { + "_initialOwner": "- address of the owner", + "_marketplaces": "- array of addresses of the marketplaces", + "_transferProxies": "- array of addresses of the transfer proxies", + "_weth": "- address of the WETH erc-20 token" + } + }, + "__initializeNewMarket(address)": { + "params": { + "_newMarket": "- address of the new marketplace" + } + }, + "approveWETH(address[])": { + "params": { + "transferProxies": "- array of addresses to approve WETH for" + } + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "params": { + "allowFail": "- true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch", + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- array of deatails about the purchases (more info in PurchaseDetails struct)" + } + }, + "onERC721Received(address,address,uint256,bytes)": { + "details": "See {IERC721Receiver-onERC721Received}. Always returns `IERC721Receiver.onERC721Received.selector`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "paused()": { + "details": "Returns true if the contract is paused, and false otherwise." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "params": { + "feeRecipientFirst": "- address of the first fee recipient", + "feeRecipientSecond": "- address of the second fee recipient", + "purchaseDetails": "- deatails about the purchase (more info in PurchaseDetails struct)" + } + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}. Time complexity O(1), guaranteed to always use less than 30 000 gas." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "updateMarketplaceAddress(uint8,address)": { + "params": { + "_market": "- type of the marketplace", + "_newAddress": "- new address of the marketplace" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "__ExchangeWrapper_init_proxy(address[12],address,address[],address)": { + "notice": "initializes the proxy contract" + }, + "__initializeNewMarket(address)": { + "notice": "sets the address of the new marketplace" + }, + "approveWETH(address[])": { + "notice": "approves weth for a list of the addresses" + }, + "bulkPurchase((uint8,uint256,uint256,bytes)[],address,address,bool)": { + "notice": "executes an array of purchases" + }, + "singlePurchase((uint8,uint256,uint256,bytes),address,address)": { + "notice": "executes a single purchase" + }, + "updateMarketplaceAddress(uint8,address)": { + "notice": "updates the address of the marketplace" + } + }, + "version": 1 + } +} \ No newline at end of file diff --git a/projects/exchange-wrapper/contracts/RaribleExchangeWrapperUpgradeable.sol b/projects/exchange-wrapper/contracts/RaribleExchangeWrapperUpgradeable.sol new file mode 100644 index 000000000..85430c137 --- /dev/null +++ b/projects/exchange-wrapper/contracts/RaribleExchangeWrapperUpgradeable.sol @@ -0,0 +1,760 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.7.6; +pragma abicoder v2; + +import "@rarible/transfer-manager/contracts/lib/LibTransfer.sol"; +import "@rarible/lib-bp/contracts/BpLibrary.sol"; +import "@rarible/lib-part/contracts/LibPart.sol"; + +// import "@openzeppelin/contracts/math/SafeMath.sol"; +import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; + +// import "@openzeppelin/contracts/token/ERC721/ERC721Holder.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol"; +// import "@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol"; +// import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; + +import "./interfaces/IWyvernExchange.sol"; +import "./interfaces/IExchangeV2.sol"; +import "./interfaces/ISeaPort.sol"; +import "./interfaces/Ix2y2.sol"; +import "./interfaces/ILooksRare.sol"; +import "./interfaces/IBlur.sol"; + +// import "./libraries/IsPausable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; + +import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol"; + +// contract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable { +contract RaribleExchangeWrapperUpgradeable is Initializable, OwnableUpgradeable, ERC721HolderUpgradeable, ERC1155HolderUpgradeable, PausableUpgradeable { + using LibTransfer for address; + using BpLibrary for uint256; + using SafeMathUpgradeable for uint256; + + //marketplaces + address public wyvernExchange; + address public exchangeV2; + address public seaPort_1_1; + address public x2y2; + address public looksRare; + address public sudoswap; + address public seaPort_1_4; + address public looksRareV2; + address public blur; + address public seaPort_1_5; + address public seaPort_1_6; + + //currencties + address public weth; + + //constants + uint256 private constant UINT256_MAX = type(uint256).max; + + event Execution(bool result); + event MarketplaceAddressUpdated(Markets indexed _market, address indexed _newAddress); + + enum Markets { + ExchangeV2, //0 + WyvernExchange, //1 + SeaPort_1_1, //2 + X2Y2, //3 + LooksRareOrders, //4 + SudoSwap, //5 + SeaPort_1_4, //6 + LooksRareV2, //7 + Blur, //8 + SeaPort_1_5, //9 + SeaPort_1_6 //10 + } + + enum AdditionalDataTypes { + NoAdditionalData, + RoyaltiesAdditionalData + } + + enum Currencies { + ETH, + WETH + } + + /** + @notice struct for the purchase data + @param marketId - market key from Markets enum (what market to use) + @param amount - eth price (amount of eth that needs to be send to the marketplace) + @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256 + bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20) + bytes (27,28) used for dataType + bytes (29,30) used for the first value (goes to feeRecipientFirst) + bytes (31,32) are used for the second value (goes to feeRecipientSecond) + @param data - data for market call + */ + struct PurchaseDetails { + Markets marketId; + uint256 amount; + uint256 fees; + bytes data; + } + + /** + @notice struct for the data with additional Ddta + @param data - data for market call + @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient) + */ + struct AdditionalData { + bytes data; + uint256[] additionalRoyalties; + } + + /** + @notice initializes the proxy contract + @param _marketplaces - array of addresses of the marketplaces + @param _weth - address of the WETH erc-20 token + @param _transferProxies - array of addresses of the transfer proxies + @param _initialOwner - address of the owner + */ + function __ExchangeWrapper_init_proxy( + address[11] memory _marketplaces, + address _weth, + address[] memory _transferProxies, + address _initialOwner + ) public initializer { + __Ownable_init(); + __ERC721Holder_init(); + __ERC1155Holder_init(); + __Pausable_init(); + + wyvernExchange = _marketplaces[0]; + exchangeV2 = _marketplaces[1]; + seaPort_1_1 = _marketplaces[2]; + x2y2 = _marketplaces[3]; + looksRare = _marketplaces[4]; + sudoswap = _marketplaces[5]; + seaPort_1_4 = _marketplaces[6]; + looksRareV2 = _marketplaces[7]; + blur = _marketplaces[8]; + seaPort_1_5 = _marketplaces[9]; + seaPort_1_6 = _marketplaces[10]; + + weth = _weth; + + for (uint256 i = 0; i < _transferProxies.length; ++i) { + if (weth != address(0)) { + IERC20Upgradeable(weth).approve(_transferProxies[i], UINT256_MAX); + } + } + + transferOwnership(_initialOwner); + } + + /** + @notice executes a single purchase + @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct) + @param feeRecipientFirst - address of the first fee recipient + @param feeRecipientSecond - address of the second fee recipient + */ + function singlePurchase( + PurchaseDetails memory purchaseDetails, + address feeRecipientFirst, + address feeRecipientSecond + ) external payable whenNotPaused { + //amount of WETH needed for purchases: + uint256 wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails); + + //transfer WETH to this contract (if needed) + if (wethAmountNeeded > 0) { + IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded); + } + + Currencies currency = getCurrency(purchaseDetails.fees); + bool success; + uint256 firstFeeAmount; + uint256 secondFeeAmount; + + if (currency == Currencies.ETH) { + (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false); + transferFeeETH(firstFeeAmount, feeRecipientFirst); + transferFeeETH(secondFeeAmount, feeRecipientSecond); + } else if (currency == Currencies.WETH) { + (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false); + transferFeeWETH(firstFeeAmount, feeRecipientFirst); + transferFeeWETH(secondFeeAmount, feeRecipientSecond); + } else { + revert("Unknown purchase currency"); + } + + emit Execution(success); + + //transfer ETH change + transferChange(); + //transfer WETH change + if (wethAmountNeeded > 0) { + transferChangeWETH(); + } + } + + /** + @notice executes an array of purchases + @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct) + @param feeRecipientFirst - address of the first fee recipient + @param feeRecipientSecond - address of the second fee recipient + @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch + */ + + function bulkPurchase( + PurchaseDetails[] memory purchaseDetails, + address feeRecipientFirst, + address feeRecipientSecond, + bool allowFail + ) external payable whenNotPaused { + uint256 sumFirstFeesETH = 0; + uint256 sumSecondFeesETH = 0; + uint256 sumFirstFeesWETH = 0; + uint256 sumSecondFeesWETH = 0; + bool result = false; + + //amount of WETH needed for purchases: + uint256 wethAmountNeeded = 0; + for (uint256 i = 0; i < purchaseDetails.length; ++i) { + wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]); + } + + //transfer WETH to this contract (if needed) + if (wethAmountNeeded > 0) { + IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded); + } + + for (uint256 i = 0; i < purchaseDetails.length; ++i) { + Currencies currency = getCurrency(purchaseDetails[i].fees); + bool success; + uint256 firstFeeAmount; + uint256 secondFeeAmount; + + if (currency == Currencies.ETH) { + (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail); + + sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount); + sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount); + } else if (currency == Currencies.WETH) { + (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail); + + sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount); + sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount); + } else { + revert("Unknown purchase currency"); + } + + result = result || success; + emit Execution(success); + } + + require(result, "no successful executions"); + + //pay fees in ETH + transferFeeETH(sumFirstFeesETH, feeRecipientFirst); + transferFeeETH(sumSecondFeesETH, feeRecipientSecond); + + //pay fees in WETH + transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst); + transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond); + + //transfer ETH change + transferChange(); + //transfer WETH change + if (wethAmountNeeded > 0) { + transferChangeWETH(); + } + } + + /** + @notice executes one purchase in ETH + @param purchaseDetails - details about the purchase + @param allowFail - true if errors are handled, false if revert on errors + @return result false if execution failed, true if succeded + @return firstFeeAmount amount of the first fee of the purchase, 0 if failed + @return secondFeeAmount amount of the second fee of the purchase, 0 if failed + */ + function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) + internal + returns ( + bool, + uint256, + uint256 + ) + { + (bytes memory marketData, uint256[] memory additionalRoyalties) = getDataAndAdditionalData(purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId); + uint256 paymentAmount = purchaseDetails.amount; + if (purchaseDetails.marketId == Markets.SeaPort_1_1) { + (bool success, ) = address(seaPort_1_1).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_1 failed"); + } + } else if (purchaseDetails.marketId == Markets.WyvernExchange) { + (bool success, ) = address(wyvernExchange).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase wyvernExchange failed"); + } + } else if (purchaseDetails.marketId == Markets.ExchangeV2) { + (bool success, ) = address(exchangeV2).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase rarible failed"); + } + } else if (purchaseDetails.marketId == Markets.X2Y2) { + Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput)); + + if (allowFail) { + try Ix2y2(x2y2).run{value: paymentAmount}(input) {} catch { + return (false, 0, 0); + } + } else { + Ix2y2(x2y2).run{value: paymentAmount}(input); + } + + //for every element in input.details[] getting + // order = input.details[i].orderIdx + // and from that order getting item = input.details[i].itemId + for (uint256 i = 0; i < input.details.length; ++i) { + uint256 orderId = input.details[i].orderIdx; + uint256 itemId = input.details[i].itemIdx; + bytes memory data = input.orders[orderId].items[itemId].data; + { + if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) { + _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask); + } + } + + // 1 = erc-721 + if (input.orders[orderId].delegateType == 1) { + Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[])); + + for (uint256 j = 0; j < pairs.length; j++) { + Ix2y2.Pair721 memory p = pairs[j]; + IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId); + } + } else if (input.orders[orderId].delegateType == 2) { + // 2 = erc-1155 + Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[])); + + for (uint256 j = 0; j < pairs.length; j++) { + Ix2y2.Pair1155 memory p = pairs[j]; + IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, ""); + } + } else { + revert("unknown delegateType x2y2"); + } + } + } else if (purchaseDetails.marketId == Markets.LooksRareOrders) { + (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4)); + if (allowFail) { + try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value: paymentAmount}(takerOrder, makerOrder) {} catch { + return (false, 0, 0); + } + } else { + ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value: paymentAmount}(takerOrder, makerOrder); + } + if (typeNft == LibAsset.ERC721_ASSET_CLASS) { + IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId); + } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) { + IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, ""); + } else { + revert("Unknown token type"); + } + } else if (purchaseDetails.marketId == Markets.SudoSwap) { + (bool success, ) = address(sudoswap).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase sudoswap failed"); + } + } else if (purchaseDetails.marketId == Markets.SeaPort_1_4) { + (bool success, ) = address(seaPort_1_4).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_4 failed"); + } + } else if (purchaseDetails.marketId == Markets.LooksRareV2) { + (bool success, ) = address(looksRareV2).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase LooksRareV2 failed"); + } + } else if (purchaseDetails.marketId == Markets.Blur) { + (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4)); + if (allowFail) { + try IBlur(blur).execute{value: paymentAmount}(sell, buy) {} catch { + return (false, 0, 0); + } + } else { + IBlur(blur).execute{value: paymentAmount}(sell, buy); + } + if (typeNft == LibAsset.ERC721_ASSET_CLASS) { + IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId); + } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) { + IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, ""); + } else { + revert("Unknown token type"); + } + } else if (purchaseDetails.marketId == Markets.SeaPort_1_5) { + (bool success, ) = address(seaPort_1_5).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_5 failed"); + } + } else if (purchaseDetails.marketId == Markets.SeaPort_1_6) { + (bool success, ) = address(seaPort_1_6).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_6 failed"); + } + } else { + revert("Unknown marketId ETH"); + } + + //transferring royalties + transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount); + + (uint256 firstFeeAmount, uint256 secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount); + return (true, firstFeeAmount, secondFeeAmount); + } + + /** + @notice executes one purchase in WETH + @param purchaseDetails - details about the purchase + @param allowFail - true if errors are handled, false if revert on errors + @return result false if execution failed, true if succeded + @return firstFeeAmount amount of the first fee of the purchase, 0 if failed + @return secondFeeAmount amount of the second fee of the purchase, 0 if failed + */ + function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) + internal + returns ( + bool, + uint256, + uint256 + ) + { + (bytes memory marketData, uint256[] memory additionalRoyalties) = getDataAndAdditionalData(purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId); + + //buying + if (purchaseDetails.marketId == Markets.SeaPort_1_1) { + (bool success, ) = address(seaPort_1_1).call(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_1 failed WETH"); + } + } else if (purchaseDetails.marketId == Markets.ExchangeV2) { + (bool success, ) = address(exchangeV2).call(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase rarible failed WETH"); + } + } else if (purchaseDetails.marketId == Markets.SeaPort_1_4) { + (bool success, ) = address(seaPort_1_4).call(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_4 failed WETH"); + } + } else if (purchaseDetails.marketId == Markets.SeaPort_1_5) { + (bool success, ) = address(seaPort_1_5).call(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_5 failed WETH"); + } + } else if (purchaseDetails.marketId == Markets.SeaPort_1_6) { + (bool success, ) = address(seaPort_1_6).call(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_6 failed WETH"); + } + } else { + revert("Unknown marketId WETH"); + } + + //transfer royalties + transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount); + + //get fees + (uint256 firstFeeAmount, uint256 secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount); + return (true, firstFeeAmount, secondFeeAmount); + } + + /** + @notice transfers ETH fee to feeRecipient + @param feeAmount - amount to be transfered + @param feeRecipient - address of the recipient + */ + function transferFeeETH(uint256 feeAmount, address feeRecipient) internal { + if (feeAmount > 0 && feeRecipient != address(0)) { + LibTransfer.transferEth(feeRecipient, feeAmount); + } + } + + /** + @notice transfers WETH fee to feeRecipient + @param feeAmount - amount to be transfered + @param feeRecipient - address of the recipient + */ + function transferFeeWETH(uint256 feeAmount, address feeRecipient) internal { + if (feeAmount > 0 && feeRecipient != address(0)) { + IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount); + } + } + + /** + @notice transfers change back to sender + */ + function transferChange() internal { + uint256 ethAmount = address(this).balance; + if (ethAmount > 0) { + address(msg.sender).transferEth(ethAmount); + } + } + + /** + @notice transfers weth change back to sender + */ + function transferChangeWETH() internal { + uint256 wethAmount = IERC20Upgradeable(weth).balanceOf(address(this)); + if (wethAmount > 0) { + IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount); + } + } + + /** + @notice parses fees in base points from one uint and calculates real amount of fees + @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee + @param amount price of the order + @return firstFeeAmount real amount for the first fee + @return secondFeeAmount real amount for the second fee + */ + function getFees(uint256 fees, uint256 amount) internal pure returns (uint256, uint256) { + uint256 firstFee = uint256(uint16(fees >> 16)); + uint256 secondFee = uint256(uint16(fees)); + return (amount.bp(firstFee), amount.bp(secondFee)); + } + + /** + @notice parses "fees" field to find the currency for the purchase + @param fees field with encoded data + @return 0 if ETH, 1 if WETH ERC-20 + */ + function getCurrency(uint256 fees) internal pure returns (Currencies) { + return Currencies(uint16(fees >> 48)); + } + + /** + @notice parses _data to data for market call and additionalData + @param feesAndDataType 27 and 28 bytes for dataType + @return marketData data for market call + @return additionalRoyalties array uint256, (base point + address) + */ + function getDataAndAdditionalData( + bytes memory _data, + uint256 feesAndDataType, + Markets marketId + ) internal pure returns (bytes memory, uint256[] memory) { + AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32)); + uint256[] memory additionalRoyalties; + + //return no royalties if wrong data type + if (dataType == AdditionalDataTypes.NoAdditionalData) { + return (_data, additionalRoyalties); + } + + if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) { + AdditionalData memory additionalData = abi.decode(_data, (AdditionalData)); + + //return no royalties if market doesn't support royalties + if (supportsRoyalties(marketId)) { + return (additionalData.data, additionalData.additionalRoyalties); + } else { + return (additionalData.data, additionalRoyalties); + } + } + + revert("unknown additionalDataType"); + } + + /** + @notice transfer additional royalties in ETH + @param _additionalRoyalties array uint256 (base point + royalty recipient address) + */ + function transferAdditionalRoyaltiesETH(uint256[] memory _additionalRoyalties, uint256 amount) internal { + for (uint256 i = 0; i < _additionalRoyalties.length; ++i) { + if (_additionalRoyalties[i] > 0) { + address payable account = payable(address(_additionalRoyalties[i])); + uint256 basePoint = uint256(_additionalRoyalties[i] >> 160); + uint256 value = amount.bp(basePoint); + transferFeeETH(value, account); + } + } + } + + /** + @notice transfer additional royalties in WETH + @param _additionalRoyalties array uint256 (base point + royalty recipient address) + */ + function transferAdditionalRoyaltiesWETH(uint256[] memory _additionalRoyalties, uint256 amount) internal { + for (uint256 i = 0; i < _additionalRoyalties.length; ++i) { + if (_additionalRoyalties[i] > 0) { + address payable account = payable(address(_additionalRoyalties[i])); + uint256 basePoint = uint256(_additionalRoyalties[i] >> 160); + uint256 value = amount.bp(basePoint); + transferFeeWETH(value, account); + } + } + } + + // modifies `src` + function _arrayReplace( + bytes memory src, + bytes memory replacement, + bytes memory mask + ) internal view virtual { + require(src.length == replacement.length); + require(src.length == mask.length); + + for (uint256 i = 0; i < src.length; ++i) { + if (mask[i] != 0) { + src[i] = replacement[i]; + } + } + } + + /** + @notice returns true if this contract supports additional royalties for the marketplace; + now royalties are supported for: + 1. SudoSwap + 2. LooksRare old + 3. LooksRare V2 + */ + function supportsRoyalties(Markets marketId) internal pure returns (bool) { + if (marketId == Markets.SudoSwap || marketId == Markets.LooksRareOrders || marketId == Markets.LooksRareV2) { + return true; + } + + return false; + } + + function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint256) { + uint256 result = 0; + + Currencies currency = getCurrency(detail.fees); + + //for every purchase with WETH we sum amount, fees and royalties needed + if (currency == Currencies.WETH) { + //add amount + result = result + detail.amount; + + //add fees + (uint256 firstFeeAmount, uint256 secondFeeAmount) = getFees(detail.fees, detail.amount); + result = result + firstFeeAmount + secondFeeAmount; + + //add royalties + (, uint256[] memory royalties) = getDataAndAdditionalData(detail.data, detail.fees, detail.marketId); + for (uint256 j = 0; j < royalties.length; ++j) { + uint256 royaltyBasePoint = uint256(royalties[j] >> 160); + uint256 royaltyValue = detail.amount.bp(royaltyBasePoint); + result = result + royaltyValue; + } + } + + return result; + } + + /** + @notice approves weth for a list of the addresses + @param transferProxies - array of addresses to approve WETH for + */ + function approveWETH(address[] calldata transferProxies) external onlyOwner { + for (uint256 i = 0; i < transferProxies.length; ++i) { + IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX); + } + } + + /** + * @notice updates the address of the marketplace + * @param _market - type of the marketplace + * @param _newAddress - new address of the marketplace + */ + function updateMarketplaceAddress(Markets _market, address _newAddress) external onlyOwner { + require(_newAddress != address(0), "New address cannot be zero"); + + if (_market == Markets.WyvernExchange) { + wyvernExchange = _newAddress; + } else if (_market == Markets.ExchangeV2) { + exchangeV2 = _newAddress; + } else if (_market == Markets.SeaPort_1_1) { + seaPort_1_1 = _newAddress; + } else if (_market == Markets.X2Y2) { + x2y2 = _newAddress; + } else if (_market == Markets.LooksRareOrders) { + looksRare = _newAddress; + } else if (_market == Markets.SudoSwap) { + sudoswap = _newAddress; + } else if (_market == Markets.SeaPort_1_4) { + seaPort_1_4 = _newAddress; + } else if (_market == Markets.LooksRareV2) { + looksRareV2 = _newAddress; + } else if (_market == Markets.Blur) { + blur = _newAddress; + } else if (_market == Markets.SeaPort_1_5) { + seaPort_1_5 = _newAddress; + } else if (_market == Markets.SeaPort_1_6) { + seaPort_1_6 = _newAddress; + } else { + revert("Invalid marketplace type"); + } + + emit MarketplaceAddressUpdated(_market, _newAddress); + } + + receive() external payable {} + + uint256[50] private __gap; +} diff --git a/projects/exchange-wrapper/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol b/projects/exchange-wrapper/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol new file mode 100644 index 000000000..91edbcf6c --- /dev/null +++ b/projects/exchange-wrapper/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol @@ -0,0 +1,779 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.7.6; +pragma abicoder v2; + +import "@rarible/transfer-manager/contracts/lib/LibTransfer.sol"; +import "@rarible/lib-bp/contracts/BpLibrary.sol"; +import "@rarible/lib-part/contracts/LibPart.sol"; + +// import "@openzeppelin/contracts/math/SafeMath.sol"; +import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; + +// import "@openzeppelin/contracts/token/ERC721/ERC721Holder.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721HolderUpgradeable.sol"; +// import "@openzeppelin/contracts/token/ERC1155/ERC1155Holder.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC1155/ERC1155HolderUpgradeable.sol"; +// import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; + +import "@rarible/exchange-wrapper/contracts/interfaces/IWyvernExchange.sol"; +import "@rarible/exchange-wrapper/contracts/interfaces/IExchangeV2.sol"; +import "@rarible/exchange-wrapper/contracts/interfaces/ISeaPort.sol"; +import "@rarible/exchange-wrapper/contracts/interfaces/Ix2y2.sol"; +import "@rarible/exchange-wrapper/contracts/interfaces/ILooksRare.sol"; +import "@rarible/exchange-wrapper/contracts/interfaces/IBlur.sol"; + +// import "./libraries/IsPausable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; + +import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol"; + +// contract RaribleExchangeWrapper is Ownable, ERC721Holder, ERC1155Holder, IsPausable { +contract RaribleExchangeWrapperUpgradeableV2 is Initializable, OwnableUpgradeable, ERC721HolderUpgradeable, ERC1155HolderUpgradeable, PausableUpgradeable { + using LibTransfer for address; + using BpLibrary for uint256; + using SafeMathUpgradeable for uint256; + + //marketplaces + address public wyvernExchange; + address public exchangeV2; + address public seaPort_1_1; + address public x2y2; + address public looksRare; + address public sudoswap; + address public seaPort_1_4; + address public looksRareV2; + address public blur; + address public seaPort_1_5; + address public seaPort_1_6; + + // new marketplace + address public newMarket; + + //currencties + address public weth; + + //constants + uint256 private constant UINT256_MAX = type(uint256).max; + + event Execution(bool result); + event MarketplaceAddressUpdated(Markets indexed _market, address indexed _newAddress); + + enum Markets { + ExchangeV2, //0 + WyvernExchange, //1 + SeaPort_1_1, //2 + X2Y2, //3 + LooksRareOrders, //4 + SudoSwap, //5 + SeaPort_1_4, //6 + LooksRareV2, //7 + Blur, //8 + SeaPort_1_5, //9 + SeaPort_1_6, //10 + NewMarket + } + + enum AdditionalDataTypes { + NoAdditionalData, + RoyaltiesAdditionalData + } + + enum Currencies { + ETH, + WETH + } + + /** + @notice struct for the purchase data + @param marketId - market key from Markets enum (what market to use) + @param amount - eth price (amount of eth that needs to be send to the marketplace) + @param fees - 2 fees (in base points) that are going to be taken on top of order amount encoded in 1 uint256 + bytes (25,26) used for currency (0 - ETH, 1 - WETH erc-20) + bytes (27,28) used for dataType + bytes (29,30) used for the first value (goes to feeRecipientFirst) + bytes (31,32) are used for the second value (goes to feeRecipientSecond) + @param data - data for market call + */ + struct PurchaseDetails { + Markets marketId; + uint256 amount; + uint256 fees; + bytes data; + } + + /** + @notice struct for the data with additional Ddta + @param data - data for market call + @param additionalRoyalties - array additional Royalties (in base points plus address Royalty recipient) + */ + struct AdditionalData { + bytes data; + uint256[] additionalRoyalties; + } + + /** + @notice initializes the proxy contract + @param _marketplaces - array of addresses of the marketplaces + @param _weth - address of the WETH erc-20 token + @param _transferProxies - array of addresses of the transfer proxies + @param _initialOwner - address of the owner + */ + function __ExchangeWrapper_init_proxy( + address[12] memory _marketplaces, + address _weth, + address[] memory _transferProxies, + address _initialOwner + ) public initializer { + __Ownable_init(); + __ERC721Holder_init(); + __ERC1155Holder_init(); + __Pausable_init(); + + wyvernExchange = _marketplaces[0]; + exchangeV2 = _marketplaces[1]; + seaPort_1_1 = _marketplaces[2]; + x2y2 = _marketplaces[3]; + looksRare = _marketplaces[4]; + sudoswap = _marketplaces[5]; + seaPort_1_4 = _marketplaces[6]; + looksRareV2 = _marketplaces[7]; + blur = _marketplaces[8]; + seaPort_1_5 = _marketplaces[9]; + seaPort_1_6 = _marketplaces[10]; + newMarket = _marketplaces[11]; + + weth = _weth; + + for (uint256 i = 0; i < _transferProxies.length; ++i) { + if (weth != address(0)) { + IERC20Upgradeable(weth).approve(_transferProxies[i], UINT256_MAX); + } + } + + transferOwnership(_initialOwner); + } + + /** + @notice sets the address of the new marketplace + @param _newMarket - address of the new marketplace + */ + function __initializeNewMarket(address _newMarket) external onlyOwner { + require(newMarket == address(0), "NewMarket address is already set"); + newMarket = _newMarket; + } + + /** + @notice executes a single purchase + @param purchaseDetails - deatails about the purchase (more info in PurchaseDetails struct) + @param feeRecipientFirst - address of the first fee recipient + @param feeRecipientSecond - address of the second fee recipient + */ + function singlePurchase( + PurchaseDetails memory purchaseDetails, + address feeRecipientFirst, + address feeRecipientSecond + ) external payable whenNotPaused { + //amount of WETH needed for purchases: + uint256 wethAmountNeeded = getAmountOfWethForPurchase(purchaseDetails); + + //transfer WETH to this contract (if needed) + if (wethAmountNeeded > 0) { + IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded); + } + + Currencies currency = getCurrency(purchaseDetails.fees); + bool success; + uint256 firstFeeAmount; + uint256 secondFeeAmount; + + if (currency == Currencies.ETH) { + (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails, false); + transferFeeETH(firstFeeAmount, feeRecipientFirst); + transferFeeETH(secondFeeAmount, feeRecipientSecond); + } else if (currency == Currencies.WETH) { + (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails, false); + transferFeeWETH(firstFeeAmount, feeRecipientFirst); + transferFeeWETH(secondFeeAmount, feeRecipientSecond); + } else { + revert("Unknown purchase currency"); + } + + emit Execution(success); + + //transfer ETH change + transferChange(); + //transfer WETH change + if (wethAmountNeeded > 0) { + transferChangeWETH(); + } + } + + /** + @notice executes an array of purchases + @param purchaseDetails - array of deatails about the purchases (more info in PurchaseDetails struct) + @param feeRecipientFirst - address of the first fee recipient + @param feeRecipientSecond - address of the second fee recipient + @param allowFail - true if fails while executing orders are allowed, false if fail of a single order means fail of the whole batch + */ + + function bulkPurchase( + PurchaseDetails[] memory purchaseDetails, + address feeRecipientFirst, + address feeRecipientSecond, + bool allowFail + ) external payable whenNotPaused { + uint256 sumFirstFeesETH = 0; + uint256 sumSecondFeesETH = 0; + uint256 sumFirstFeesWETH = 0; + uint256 sumSecondFeesWETH = 0; + bool result = false; + + //amount of WETH needed for purchases: + uint256 wethAmountNeeded = 0; + for (uint256 i = 0; i < purchaseDetails.length; ++i) { + wethAmountNeeded = wethAmountNeeded + getAmountOfWethForPurchase(purchaseDetails[i]); + } + + //transfer WETH to this contract (if needed) + if (wethAmountNeeded > 0) { + IERC20Upgradeable(weth).transferFrom(_msgSender(), address(this), wethAmountNeeded); + } + + for (uint256 i = 0; i < purchaseDetails.length; ++i) { + Currencies currency = getCurrency(purchaseDetails[i].fees); + bool success; + uint256 firstFeeAmount; + uint256 secondFeeAmount; + + if (currency == Currencies.ETH) { + (success, firstFeeAmount, secondFeeAmount) = purchase(purchaseDetails[i], allowFail); + + sumFirstFeesETH = sumFirstFeesETH.add(firstFeeAmount); + sumSecondFeesETH = sumSecondFeesETH.add(secondFeeAmount); + } else if (currency == Currencies.WETH) { + (success, firstFeeAmount, secondFeeAmount) = purchaseWETH(purchaseDetails[i], allowFail); + + sumFirstFeesWETH = sumFirstFeesWETH.add(firstFeeAmount); + sumSecondFeesWETH = sumSecondFeesWETH.add(secondFeeAmount); + } else { + revert("Unknown purchase currency"); + } + + result = result || success; + emit Execution(success); + } + + require(result, "no successful executions"); + + //pay fees in ETH + transferFeeETH(sumFirstFeesETH, feeRecipientFirst); + transferFeeETH(sumSecondFeesETH, feeRecipientSecond); + + //pay fees in WETH + transferFeeWETH(sumFirstFeesWETH, feeRecipientFirst); + transferFeeWETH(sumSecondFeesWETH, feeRecipientSecond); + + //transfer ETH change + transferChange(); + //transfer WETH change + if (wethAmountNeeded > 0) { + transferChangeWETH(); + } + } + + /** + @notice executes one purchase in ETH + @param purchaseDetails - details about the purchase + @param allowFail - true if errors are handled, false if revert on errors + @return result false if execution failed, true if succeded + @return firstFeeAmount amount of the first fee of the purchase, 0 if failed + @return secondFeeAmount amount of the second fee of the purchase, 0 if failed + */ + function purchase(PurchaseDetails memory purchaseDetails, bool allowFail) + internal + returns ( + bool, + uint256, + uint256 + ) + { + (bytes memory marketData, uint256[] memory additionalRoyalties) = getDataAndAdditionalData(purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId); + uint256 paymentAmount = purchaseDetails.amount; + if (purchaseDetails.marketId == Markets.SeaPort_1_1) { + (bool success, ) = address(seaPort_1_1).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_1 failed"); + } + } else if (purchaseDetails.marketId == Markets.WyvernExchange) { + (bool success, ) = address(wyvernExchange).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase wyvernExchange failed"); + } + } else if (purchaseDetails.marketId == Markets.ExchangeV2) { + (bool success, ) = address(exchangeV2).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase rarible failed"); + } + } else if (purchaseDetails.marketId == Markets.X2Y2) { + Ix2y2.RunInput memory input = abi.decode(marketData, (Ix2y2.RunInput)); + + if (allowFail) { + try Ix2y2(x2y2).run{value: paymentAmount}(input) {} catch { + return (false, 0, 0); + } + } else { + Ix2y2(x2y2).run{value: paymentAmount}(input); + } + + //for every element in input.details[] getting + // order = input.details[i].orderIdx + // and from that order getting item = input.details[i].itemId + for (uint256 i = 0; i < input.details.length; ++i) { + uint256 orderId = input.details[i].orderIdx; + uint256 itemId = input.details[i].itemIdx; + bytes memory data = input.orders[orderId].items[itemId].data; + { + if (input.orders[orderId].dataMask.length > 0 && input.details[i].dataReplacement.length > 0) { + _arrayReplace(data, input.details[i].dataReplacement, input.orders[orderId].dataMask); + } + } + + // 1 = erc-721 + if (input.orders[orderId].delegateType == 1) { + Ix2y2.Pair721[] memory pairs = abi.decode(data, (Ix2y2.Pair721[])); + + for (uint256 j = 0; j < pairs.length; j++) { + Ix2y2.Pair721 memory p = pairs[j]; + IERC721Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId); + } + } else if (input.orders[orderId].delegateType == 2) { + // 2 = erc-1155 + Ix2y2.Pair1155[] memory pairs = abi.decode(data, (Ix2y2.Pair1155[])); + + for (uint256 j = 0; j < pairs.length; j++) { + Ix2y2.Pair1155 memory p = pairs[j]; + IERC1155Upgradeable(address(p.token)).safeTransferFrom(address(this), _msgSender(), p.tokenId, p.amount, ""); + } + } else { + revert("unknown delegateType x2y2"); + } + } + } else if (purchaseDetails.marketId == Markets.LooksRareOrders) { + (LibLooksRare.TakerOrder memory takerOrder, LibLooksRare.MakerOrder memory makerOrder, bytes4 typeNft) = abi.decode(marketData, (LibLooksRare.TakerOrder, LibLooksRare.MakerOrder, bytes4)); + if (allowFail) { + try ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value: paymentAmount}(takerOrder, makerOrder) {} catch { + return (false, 0, 0); + } + } else { + ILooksRare(looksRare).matchAskWithTakerBidUsingETHAndWETH{value: paymentAmount}(takerOrder, makerOrder); + } + if (typeNft == LibAsset.ERC721_ASSET_CLASS) { + IERC721Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId); + } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) { + IERC1155Upgradeable(makerOrder.collection).safeTransferFrom(address(this), _msgSender(), makerOrder.tokenId, makerOrder.amount, ""); + } else { + revert("Unknown token type"); + } + } else if (purchaseDetails.marketId == Markets.SudoSwap) { + (bool success, ) = address(sudoswap).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase sudoswap failed"); + } + } else if (purchaseDetails.marketId == Markets.SeaPort_1_4) { + (bool success, ) = address(seaPort_1_4).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_4 failed"); + } + } else if (purchaseDetails.marketId == Markets.LooksRareV2) { + (bool success, ) = address(looksRareV2).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase LooksRareV2 failed"); + } + } else if (purchaseDetails.marketId == Markets.Blur) { + (IBlur.Input memory sell, IBlur.Input memory buy, bytes4 typeNft) = abi.decode(marketData, (IBlur.Input, IBlur.Input, bytes4)); + if (allowFail) { + try IBlur(blur).execute{value: paymentAmount}(sell, buy) {} catch { + return (false, 0, 0); + } + } else { + IBlur(blur).execute{value: paymentAmount}(sell, buy); + } + if (typeNft == LibAsset.ERC721_ASSET_CLASS) { + IERC721Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId); + } else if (typeNft == LibAsset.ERC1155_ASSET_CLASS) { + IERC1155Upgradeable(sell.order.collection).safeTransferFrom(address(this), _msgSender(), sell.order.tokenId, sell.order.amount, ""); + } else { + revert("Unknown token type"); + } + } else if (purchaseDetails.marketId == Markets.SeaPort_1_5) { + (bool success, ) = address(seaPort_1_5).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_5 failed"); + } + } else if (purchaseDetails.marketId == Markets.SeaPort_1_6) { + (bool success, ) = address(seaPort_1_6).call{value: paymentAmount}(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_6 failed"); + } + } else if (purchaseDetails.marketId == Markets.NewMarket) { + /* Implement new market handling */ + require(newMarket != address(0), "NewMarket address is not set"); + } else { + revert("Unknown marketId ETH"); + } + + //transferring royalties + transferAdditionalRoyaltiesETH(additionalRoyalties, purchaseDetails.amount); + + (uint256 firstFeeAmount, uint256 secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount); + return (true, firstFeeAmount, secondFeeAmount); + } + + /** + @notice executes one purchase in WETH + @param purchaseDetails - details about the purchase + @param allowFail - true if errors are handled, false if revert on errors + @return result false if execution failed, true if succeded + @return firstFeeAmount amount of the first fee of the purchase, 0 if failed + @return secondFeeAmount amount of the second fee of the purchase, 0 if failed + */ + function purchaseWETH(PurchaseDetails memory purchaseDetails, bool allowFail) + internal + returns ( + bool, + uint256, + uint256 + ) + { + (bytes memory marketData, uint256[] memory additionalRoyalties) = getDataAndAdditionalData(purchaseDetails.data, purchaseDetails.fees, purchaseDetails.marketId); + + //buying + if (purchaseDetails.marketId == Markets.SeaPort_1_1) { + (bool success, ) = address(seaPort_1_1).call(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_1 failed WETH"); + } + } else if (purchaseDetails.marketId == Markets.ExchangeV2) { + (bool success, ) = address(exchangeV2).call(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase rarible failed WETH"); + } + } else if (purchaseDetails.marketId == Markets.SeaPort_1_4) { + (bool success, ) = address(seaPort_1_4).call(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_4 failed WETH"); + } + } else if (purchaseDetails.marketId == Markets.SeaPort_1_5) { + (bool success, ) = address(seaPort_1_5).call(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_5 failed WETH"); + } + } else if (purchaseDetails.marketId == Markets.SeaPort_1_6) { + (bool success, ) = address(seaPort_1_6).call(marketData); + if (allowFail) { + if (!success) { + return (false, 0, 0); + } + } else { + require(success, "Purchase SeaPort_1_6 failed WETH"); + } + } else { + revert("Unknown marketId WETH"); + } + + //transfer royalties + transferAdditionalRoyaltiesWETH(additionalRoyalties, purchaseDetails.amount); + + //get fees + (uint256 firstFeeAmount, uint256 secondFeeAmount) = getFees(purchaseDetails.fees, purchaseDetails.amount); + return (true, firstFeeAmount, secondFeeAmount); + } + + /** + @notice transfers ETH fee to feeRecipient + @param feeAmount - amount to be transfered + @param feeRecipient - address of the recipient + */ + function transferFeeETH(uint256 feeAmount, address feeRecipient) internal { + if (feeAmount > 0 && feeRecipient != address(0)) { + LibTransfer.transferEth(feeRecipient, feeAmount); + } + } + + /** + @notice transfers WETH fee to feeRecipient + @param feeAmount - amount to be transfered + @param feeRecipient - address of the recipient + */ + function transferFeeWETH(uint256 feeAmount, address feeRecipient) internal { + if (feeAmount > 0 && feeRecipient != address(0)) { + IERC20Upgradeable(weth).transfer(feeRecipient, feeAmount); + } + } + + /** + @notice transfers change back to sender + */ + function transferChange() internal { + uint256 ethAmount = address(this).balance; + if (ethAmount > 0) { + address(msg.sender).transferEth(ethAmount); + } + } + + /** + @notice transfers weth change back to sender + */ + function transferChangeWETH() internal { + uint256 wethAmount = IERC20Upgradeable(weth).balanceOf(address(this)); + if (wethAmount > 0) { + IERC20Upgradeable(weth).transfer(_msgSender(), wethAmount); + } + } + + /** + @notice parses fees in base points from one uint and calculates real amount of fees + @param fees two fees encoded in one uint, 29 and 30 bytes are used for the first fee, 31 and 32 bytes for second fee + @param amount price of the order + @return firstFeeAmount real amount for the first fee + @return secondFeeAmount real amount for the second fee + */ + function getFees(uint256 fees, uint256 amount) internal pure returns (uint256, uint256) { + uint256 firstFee = uint256(uint16(fees >> 16)); + uint256 secondFee = uint256(uint16(fees)); + return (amount.bp(firstFee), amount.bp(secondFee)); + } + + /** + @notice parses "fees" field to find the currency for the purchase + @param fees field with encoded data + @return 0 if ETH, 1 if WETH ERC-20 + */ + function getCurrency(uint256 fees) internal pure returns (Currencies) { + return Currencies(uint16(fees >> 48)); + } + + /** + @notice parses _data to data for market call and additionalData + @param feesAndDataType 27 and 28 bytes for dataType + @return marketData data for market call + @return additionalRoyalties array uint256, (base point + address) + */ + function getDataAndAdditionalData( + bytes memory _data, + uint256 feesAndDataType, + Markets marketId + ) internal pure returns (bytes memory, uint256[] memory) { + AdditionalDataTypes dataType = AdditionalDataTypes(uint16(feesAndDataType >> 32)); + uint256[] memory additionalRoyalties; + + //return no royalties if wrong data type + if (dataType == AdditionalDataTypes.NoAdditionalData) { + return (_data, additionalRoyalties); + } + + if (dataType == AdditionalDataTypes.RoyaltiesAdditionalData) { + AdditionalData memory additionalData = abi.decode(_data, (AdditionalData)); + + //return no royalties if market doesn't support royalties + if (supportsRoyalties(marketId)) { + return (additionalData.data, additionalData.additionalRoyalties); + } else { + return (additionalData.data, additionalRoyalties); + } + } + + revert("unknown additionalDataType"); + } + + /** + @notice transfer additional royalties in ETH + @param _additionalRoyalties array uint256 (base point + royalty recipient address) + */ + function transferAdditionalRoyaltiesETH(uint256[] memory _additionalRoyalties, uint256 amount) internal { + for (uint256 i = 0; i < _additionalRoyalties.length; ++i) { + if (_additionalRoyalties[i] > 0) { + address payable account = payable(address(_additionalRoyalties[i])); + uint256 basePoint = uint256(_additionalRoyalties[i] >> 160); + uint256 value = amount.bp(basePoint); + transferFeeETH(value, account); + } + } + } + + /** + @notice transfer additional royalties in WETH + @param _additionalRoyalties array uint256 (base point + royalty recipient address) + */ + function transferAdditionalRoyaltiesWETH(uint256[] memory _additionalRoyalties, uint256 amount) internal { + for (uint256 i = 0; i < _additionalRoyalties.length; ++i) { + if (_additionalRoyalties[i] > 0) { + address payable account = payable(address(_additionalRoyalties[i])); + uint256 basePoint = uint256(_additionalRoyalties[i] >> 160); + uint256 value = amount.bp(basePoint); + transferFeeWETH(value, account); + } + } + } + + // modifies `src` + function _arrayReplace( + bytes memory src, + bytes memory replacement, + bytes memory mask + ) internal view virtual { + require(src.length == replacement.length); + require(src.length == mask.length); + + for (uint256 i = 0; i < src.length; ++i) { + if (mask[i] != 0) { + src[i] = replacement[i]; + } + } + } + + /** + @notice returns true if this contract supports additional royalties for the marketplace; + now royalties are supported for: + 1. SudoSwap + 2. LooksRare old + 3. LooksRare V2 + */ + function supportsRoyalties(Markets marketId) internal pure returns (bool) { + if (marketId == Markets.SudoSwap || marketId == Markets.LooksRareOrders || marketId == Markets.LooksRareV2) { + return true; + } + + return false; + } + + function getAmountOfWethForPurchase(PurchaseDetails memory detail) internal pure returns (uint256) { + uint256 result = 0; + + Currencies currency = getCurrency(detail.fees); + + //for every purchase with WETH we sum amount, fees and royalties needed + if (currency == Currencies.WETH) { + //add amount + result = result + detail.amount; + + //add fees + (uint256 firstFeeAmount, uint256 secondFeeAmount) = getFees(detail.fees, detail.amount); + result = result + firstFeeAmount + secondFeeAmount; + + //add royalties + (, uint256[] memory royalties) = getDataAndAdditionalData(detail.data, detail.fees, detail.marketId); + for (uint256 j = 0; j < royalties.length; ++j) { + uint256 royaltyBasePoint = uint256(royalties[j] >> 160); + uint256 royaltyValue = detail.amount.bp(royaltyBasePoint); + result = result + royaltyValue; + } + } + + return result; + } + + /** + @notice approves weth for a list of the addresses + @param transferProxies - array of addresses to approve WETH for + */ + function approveWETH(address[] calldata transferProxies) external onlyOwner { + for (uint256 i = 0; i < transferProxies.length; ++i) { + IERC20Upgradeable(weth).approve(transferProxies[i], UINT256_MAX); + } + } + + /** + * @notice updates the address of the marketplace + * @param _market - type of the marketplace + * @param _newAddress - new address of the marketplace + */ + function updateMarketplaceAddress(Markets _market, address _newAddress) external onlyOwner { + require(_newAddress != address(0), "New address cannot be zero"); + + if (_market == Markets.WyvernExchange) { + wyvernExchange = _newAddress; + } else if (_market == Markets.ExchangeV2) { + exchangeV2 = _newAddress; + } else if (_market == Markets.SeaPort_1_1) { + seaPort_1_1 = _newAddress; + } else if (_market == Markets.X2Y2) { + x2y2 = _newAddress; + } else if (_market == Markets.LooksRareOrders) { + looksRare = _newAddress; + } else if (_market == Markets.SudoSwap) { + sudoswap = _newAddress; + } else if (_market == Markets.SeaPort_1_4) { + seaPort_1_4 = _newAddress; + } else if (_market == Markets.LooksRareV2) { + looksRareV2 = _newAddress; + } else if (_market == Markets.Blur) { + blur = _newAddress; + } else if (_market == Markets.SeaPort_1_5) { + seaPort_1_5 = _newAddress; + } else if (_market == Markets.SeaPort_1_6) { + seaPort_1_6 = _newAddress; + } else if (_market == Markets.NewMarket) { + newMarket = _newAddress; + } else { + revert("Invalid marketplace type"); + } + + emit MarketplaceAddressUpdated(_market, _newAddress); + } + + receive() external payable {} + + uint256[50] private __gap; +} diff --git a/projects/hardhat-deploy/deploy/905_deploy_exchangeWrapper.ts b/projects/hardhat-deploy/deploy/905_deploy_exchangeWrapper.ts index f7c23d816..163b5f820 100644 --- a/projects/hardhat-deploy/deploy/905_deploy_exchangeWrapper.ts +++ b/projects/hardhat-deploy/deploy/905_deploy_exchangeWrapper.ts @@ -1,218 +1,12 @@ -import { HardhatRuntimeEnvironment } from 'hardhat/types'; -import { DeployFunction } from 'hardhat-deploy/types'; +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import { DeployFunction } from "hardhat-deploy/types"; +import { getConfig } from "../utils/utils"; +import { getOwner } from "./utils"; +import { + getWrapperSettings, + zeroAddress, +} from "../utils/exchangeWrapperSettings"; -import { getConfig } from '../utils/utils' -import { getOwner } from './utils'; - -const zeroAddress = "0x0000000000000000000000000000000000000000" -const mainnet = { - marketplaces: [ - "0x7f268357A8c2552623316e2562D90e642bB538E5", // wyvernExchange - "", //rarible exchangeV2 palceholder - "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 - "0x74312363e45DCaBA76c59ec49a7Aa8A65a67EeD3", // x2y2 - "0x59728544B08AB483533076417FbBB2fD0B17CE3a", // looksRare - "0x2b2e8cda09bba9660dca5cb6233787738ad68329", // sudoSwap - "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 - "0x0000000000e655fae4d56241588680f86e3b2377", // looksRareV2 - "0x000000000000Ad05Ccc4F10045630fb830B95127", // blur - "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 - "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 - ], - - weth: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - transferProxies: [], -} -const polygon_mainnet = { - marketplaces: [ - zeroAddress, // wyvernExchange - "", //rarible exchangeV2 palceholder - "0x00000000006c3852cbef3e08e8df289169ede581", // seaPort_1_1 - zeroAddress, // x2y2 - zeroAddress, // looksRare - zeroAddress, // sudoSwap - "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 - zeroAddress, // looksRareV2 - zeroAddress, // blur - "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 - "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 - ], - - weth: "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", - transferProxies: [], -} -const goerli = { - marketplaces: [ - zeroAddress, // wyvernExchange - "", //rarible exchangeV2 palceholder - "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 - zeroAddress, // x2y2 - "0xD112466471b5438C1ca2D218694200e49d81D047", // looksRare - "0x25b4EfC43c9dCAe134233CD577fFca7CfAd6748F", // sudoSwap - "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 - "0x35C2215F2FFe8917B06454eEEaba189877F200cf", // looksRareV2 - zeroAddress, // blur - "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 - "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 - ], - - weth: "0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6", - transferProxies: [], -} -const def = { - marketplaces: [ - zeroAddress, // wyvernExchange - "", //rarible exchangeV2 palceholder - "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 - zeroAddress, // x2y2 - zeroAddress, // looksRare - zeroAddress, // sudoSwap - "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 - zeroAddress, // looksRareV2 - zeroAddress, // blur - "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 - "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 - ], - - weth: zeroAddress, - transferProxies: [], -} - -const dev = { - marketplaces: [ - zeroAddress, // wyvernExchange - "", //rarible exchangeV2 palceholder - "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 - zeroAddress, // x2y2 - zeroAddress, // looksRare - "0xc64E5D291CaEdF42b77fa9E50d5Fd46113227857", // sudoSwap - "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 - zeroAddress, // looksRareV2 - zeroAddress, // blur - "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 - "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 - ], - - weth: zeroAddress, - transferProxies: [], -} - -const staging = { - marketplaces: [ - zeroAddress, // wyvernExchange - "", //rarible exchangeV2 palceholder - "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 - zeroAddress, // x2y2 - zeroAddress, // looksRare - "0xE27A07e9B293dC677e34aB5fF726073ECbeCA842", // sudoSwap - "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 - zeroAddress, // looksRareV2 - zeroAddress, // blur - "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 - "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 - ], - - weth: zeroAddress, - transferProxies: [], -} - -const polygon_staging = { - marketplaces: [ - zeroAddress, // wyvernExchange - "", //rarible exchangeV2 palceholder - "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 - zeroAddress, // x2y2 - zeroAddress, // looksRare - "0x55eB2809896aB7414706AaCDde63e3BBb26e0BC6", // sudoSwap - "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 - zeroAddress, // looksRareV2 - zeroAddress, // blur - "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 - "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 - ], - - weth: zeroAddress, - transferProxies: [], -} - -const polygon_mumbai = { - marketplaces: [ - zeroAddress, // wyvernExchange - "", //rarible exchangeV2 palceholder - "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 - zeroAddress, // x2y2 - zeroAddress, // looksRare - zeroAddress, // sudoSwap - "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 - zeroAddress, // looksRareV2 - zeroAddress, // blur - "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 - "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 - ], - - weth: "0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa", - transferProxies: [], -} - -const sepolia = { - marketplaces: [ - zeroAddress, // wyvernExchange - "", //rarible exchangeV2 palceholder - "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 - zeroAddress, // x2y2 - "0xD112466471b5438C1ca2D218694200e49d81D047", // looksRare - "0x25b4EfC43c9dCAe134233CD577fFca7CfAd6748F", // sudoSwap - "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 - "0x35C2215F2FFe8917B06454eEEaba189877F200cf", // looksRareV2 - zeroAddress, // blur - "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 - "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 - ], - - weth: "0x7b79995e5f793a07bc00c21412e50ecae098e7f9", - transferProxies: [], -} - -const sei_testnet = { - marketplaces: [ - zeroAddress, // wyvernExchange - "", //rarible exchangeV2 palceholder - zeroAddress, // seaPort_1_1 - zeroAddress, // x2y2 - zeroAddress, // looksRare - zeroAddress, // sudoSwap - zeroAddress, // seaport_1_4 - zeroAddress, // looksRareV2 - zeroAddress, // blur - zeroAddress, // seaport_1_5 - zeroAddress, // seaport_1_6 - ], - - weth: "0x63600a899ad94ae1bc638504fa56d8a6144df2fe", - transferProxies: [], -} - -let settings: any = { - "default": def, - "mainnet": mainnet, - "mainnet-fork": mainnet, - "goerli": goerli, - "sepolia": sepolia, - "dev": dev, - "staging": staging, - "polygon_staging": polygon_staging, - "polygon_mumbai": polygon_mumbai, - "polygon_mainnet": polygon_mainnet, - "sei_testnet": sei_testnet -} - -function getWrapperSettings(network: string) { - if (settings[network] !== undefined) { - return settings[network]; - } else { - return settings["default"]; - } -} const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { const { deploy_meta, deploy_non_meta } = getConfig(hre.network.name); diff --git a/projects/hardhat-deploy/deploy/906_deploy_exchageWrapperUpgradeable.ts b/projects/hardhat-deploy/deploy/906_deploy_exchageWrapperUpgradeable.ts new file mode 100644 index 000000000..5b6c18fcd --- /dev/null +++ b/projects/hardhat-deploy/deploy/906_deploy_exchageWrapperUpgradeable.ts @@ -0,0 +1,67 @@ +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import { DeployFunction } from "hardhat-deploy/types"; +import { getConfig } from "../utils/utils"; +import { getOwner } from "./utils"; +import { + getWrapperSettings, + zeroAddress, +} from "../utils/exchangeWrapperSettings"; + +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + const { deploy_meta, deploy_non_meta } = getConfig(hre.network.name); + const { deploy } = hre.deployments; + const { deployer } = await hre.getNamedAccounts(); + const owner = await getOwner(hre); + + let exchangeV2; + if (!!deploy_meta) { + exchangeV2 = (await hre.deployments.get("ExchangeMetaV2")).address; + } + + if (!!deploy_non_meta) { + exchangeV2 = (await hre.deployments.get("ExchangeV2")).address; + } + + let settings = getWrapperSettings(hre.network.name); + settings.marketplaces[1] = exchangeV2; + + if (settings.weth === zeroAddress) { + console.log(`using zero address WETH for exchangeWrapper`); + } + + const erc20TransferProxy = await hre.deployments.get("ERC20TransferProxy"); + settings.transferProxies.push(erc20TransferProxy.address); + + const deployment = await deploy("RaribleExchangeWrapperUpgradeable", { + from: deployer, + log: true, + autoMine: true, + proxy: { + execute: { + init: { + methodName: "__ExchangeWrapper_init_proxy", + args: [ + settings.marketplaces, + settings.weth, + settings.transferProxies, + owner, + ], + }, + }, + proxyContract: "OpenZeppelinTransparentProxy", + owner: owner, + }, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true : false, + }); +}; + +export default func; +func.tags = [ + "all", + "all-zk", + "wrapper", + "all-no-tokens", + "all-zk-no-tokens", + "906", +]; diff --git a/projects/hardhat-deploy/deploy/907_update_exchangeWrapperUpgradeable_by_upgradeExecutor.ts b/projects/hardhat-deploy/deploy/907_update_exchangeWrapperUpgradeable_by_upgradeExecutor.ts new file mode 100644 index 000000000..0872db918 --- /dev/null +++ b/projects/hardhat-deploy/deploy/907_update_exchangeWrapperUpgradeable_by_upgradeExecutor.ts @@ -0,0 +1,100 @@ +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import { DeployFunction } from "hardhat-deploy/types"; +import { getWrapperSettings } from "../utils/exchangeWrapperSettings"; +import { getConfig } from "../utils/utils"; + +const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) { + const { deploy_meta, deploy_non_meta } = getConfig(hre.network.name); + const { deploy } = hre.deployments; + const { deployer } = await hre.getNamedAccounts(); + + let exchangeV2; + if (!!deploy_meta) { + exchangeV2 = (await hre.deployments.get("ExchangeMetaV2")).address; + } + + if (!!deploy_non_meta) { + exchangeV2 = (await hre.deployments.get("ExchangeV2")).address; + } + + let settings = getWrapperSettings(hre.network.name); + settings.marketplaces[1] = exchangeV2; + + const erc20TransferProxy = await hre.deployments.get("ERC20TransferProxy"); + settings.transferProxies.push(erc20TransferProxy.address); + + /* Deploy new implementation of RaribleExchangeWrapperUpgradeable */ + console.log( + "Deploying new RaribleExchangeWrapperUpgradeable implementation..." + ); + const RaribleExchangeWrapperFactory = await hre.ethers.getContractFactory( + "RaribleExchangeWrapperUpgradeable" + ); + const newRaribleExchangeWrapper = + await RaribleExchangeWrapperFactory.deploy(); + await newRaribleExchangeWrapper.deployed(); + const newImplementationAddress = newRaribleExchangeWrapper.address; + console.log( + "Deployed new RaribleExchangeWrapperUpgradeable implementation to:", + newImplementationAddress + ); + + /* Save the new implementation's artifacts */ + const { save, getExtendedArtifact } = hre.deployments; + await save(`RaribleExchangeWrapperUpgradeable_Implementation`, { + address: newImplementationAddress, + ...(await getExtendedArtifact("RaribleExchangeWrapperUpgradeable")), + }); + console.log( + "Saved artifacts for new RaribleExchangeWrapperUpgradeable implementation" + ); + + /* Deploy ProxyUpgradeAction contract */ + const proxyUpgradeActionReceipt = await deploy("ProxyUpgradeAction", { + from: deployer, + log: true, + autoMine: true, + deterministicDeployment: process.env.DETERMENISTIC_DEPLOYMENT_SALT, + skipIfAlreadyDeployed: process.env.SKIP_IF_ALREADY_DEPLOYED ? true : false, + }); + const ProxyUpgradeAction = await hre.ethers.getContractFactory( + "ProxyUpgradeAction" + ); + const proxyUpgradeAction = ProxyUpgradeAction.attach( + proxyUpgradeActionReceipt.address + ); + console.log(`Using ProxyUpgradeAction at ${proxyUpgradeAction.address}`); + + /* Get existing UpgradeExecutor */ + const UpgradeExecutor = await hre.ethers.getContractFactory( + "UpgradeExecutor" + ); + const upgradeExecutorAddress = (await hre.deployments.get("UpgradeExecutor")) + .address; + const upgradeExecutor = await UpgradeExecutor.attach(upgradeExecutorAddress); + console.log(`using UpgradeExecutor at ${upgradeExecutor.address}`); + + /* Prepare calldata */ + const adminAddress = (await hre.deployments.get("DefaultProxyAdmin")).address; + console.log(`Using ProxyAdmin address: ${adminAddress}`); + + /* @dev @TBD ensure that this is picking the correct TransparentProxyAddress + and not the implementation address from the hardhat deployed contracts */ + const exchangeWrapperProxyAddress = ( + await hre.deployments.get("RaribleExchangeWrapperUpgradeable") + ).address; + console.log( + `Using RaribleExchangeWrapperUpgradeable proxy: ${exchangeWrapperProxyAddress}` + ); + + const tx = await proxyUpgradeAction.populateTransaction.perform( + adminAddress, + exchangeWrapperProxyAddress, + newImplementationAddress + ); + console.log(`Address: ${proxyUpgradeAction.address}`); + console.log(`Calldata: ${tx.data}`); +}; + +export default func; +func.tags = ["update-wrapper-by-upgradeExecutor", "907"]; diff --git a/projects/hardhat-deploy/src/RaribleExchangeWrapperUpgradeableImport.sol b/projects/hardhat-deploy/src/RaribleExchangeWrapperUpgradeableImport.sol new file mode 100644 index 000000000..1c504af0d --- /dev/null +++ b/projects/hardhat-deploy/src/RaribleExchangeWrapperUpgradeableImport.sol @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.7.6; + +import "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapperUpgradeable.sol"; diff --git a/projects/hardhat-deploy/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol b/projects/hardhat-deploy/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol new file mode 100644 index 000000000..39bca89ce --- /dev/null +++ b/projects/hardhat-deploy/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.7.6; + +import "@rarible/exchange-wrapper/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol"; diff --git a/projects/hardhat-deploy/test/wrapper/ExchangeWrapperUpgradeable.test.js b/projects/hardhat-deploy/test/wrapper/ExchangeWrapperUpgradeable.test.js new file mode 100644 index 000000000..4f4930b8f --- /dev/null +++ b/projects/hardhat-deploy/test/wrapper/ExchangeWrapperUpgradeable.test.js @@ -0,0 +1,489 @@ +const { deployments, ethers } = require("hardhat"); +const { expect } = require("chai"); +const { + ETH, + ERC721, + ERC1155, + ORDER_DATA_V1, + ORDER_DATA_V2, + enc, +} = require("../../../../scripts/assets"); +const { Order, Asset, sign } = require("../../../../scripts/order.js"); +const { + verifyBalanceChangeReturnTxEthers, +} = require("../../../../scripts/balance"); + +const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000"; + +/* @dev this test-suite is a fork of the ExchangeWrapper set-suite but for the Upgradeable version of the contract */ + +describe("ExchangeBulkV2Upgradeable, sellerFee + buyerFee = 6%", function () { + let accounts; + let bulkExchange; + let exchangeV2; + let wrapperHelper; + let transferProxy; + let helper; + const erc721TokenId1 = 55; + const erc721TokenId2 = 56; + const erc721TokenId3 = 57; + const erc1155TokenId1 = 55; + const erc1155TokenId2 = 56; + const erc1155TokenId3 = 57; + let erc721; + let erc1155; + let feeRecipienterUP; + + let deployed; + + before(async () => { + accounts = await ethers.getSigners(); + feeRecipienterUP = accounts[6].address; + + deployed = await deployments.fixture(["all"]); + + const helperFactory = await ethers.getContractFactory("RaribleTestHelper"); + helper = await helperFactory.deploy(); + + const wrapperHelperFactory = await ethers.getContractFactory( + "WrapperHelper" + ); + wrapperHelper = await wrapperHelperFactory.deploy(); + + transferProxy = await ethers.getContractAt( + "TransferProxy", + deployed.TransferProxy.address + ); + + bulkExchange = await ethers.getContractAt( + "RaribleExchangeWrapperUpgradeable", + deployed.RaribleExchangeWrapperUpgradeable.address + ); + }); + + beforeEach(async () => { + const erc721Factory = await ethers.getContractFactory("TestERC721"); + erc721 = await erc721Factory.deploy("Rarible", "RARI"); + const erc1155Factory = await ethers.getContractFactory("TestERC1155"); + erc1155 = await erc1155Factory.deploy(); + }); + + describe("bulkPurchase Rarible orders", () => { + it("Test bulkPurchase ExchangeV2 (num orders = 3, type ==V2, V1) orders are ready, ERC721<->ETH", async () => { + const buyer = accounts[2].address; + const seller1 = accounts[1].address; + const seller2 = accounts[3].address; + const seller3 = accounts[4].address; + + const erc721AsSeller1 = erc721.connect(accounts[1]); + const erc721AsSeller2 = erc721.connect(accounts[3]); + const erc721AsSeller3 = erc721.connect(accounts[4]); + + await erc721.mint(seller1, erc721TokenId1); + await erc721AsSeller1.setApprovalForAll(transferProxy.address, true); + + await erc721.mint(seller2, erc721TokenId2); + await erc721AsSeller2.setApprovalForAll(transferProxy.address, true); + + await erc721.mint(seller3, erc721TokenId3); + await erc721AsSeller3.setApprovalForAll(transferProxy.address, true); + + exchangeV2 = await ethers.getContractAt( + "ExchangeV2", + deployed.ExchangeV2.address + ); + + // Set buyer in payouts + const encDataLeft = await encDataV2([[], [], false]); + const encDataLeftV1 = await encDataV1([[], []]); + const encDataRight = await encDataV2([[[buyer, 10000]], [], false]); + const encDataRightV1 = await encDataV1([[[buyer, 10000]], []]); + + const left1 = Order( + seller1, + Asset(ERC721, enc(erc721.address, erc721TokenId1), 1), + ZERO_ADDRESS, + Asset(ETH, "0x", 100), + 1, + 0, + 0, + ORDER_DATA_V2, + encDataLeft + ); + const left2 = Order( + seller2, + Asset(ERC721, enc(erc721.address, erc721TokenId2), 1), + ZERO_ADDRESS, + Asset(ETH, "0x", 100), + 1, + 0, + 0, + ORDER_DATA_V2, + encDataLeft + ); + const left3 = Order( + seller3, + Asset(ERC721, enc(erc721.address, erc721TokenId3), 1), + ZERO_ADDRESS, + Asset(ETH, "0x", 100), + 1, + 0, + 0, + ORDER_DATA_V1, + encDataLeftV1 + ); + + let signatureLeft1 = await getSignature( + left1, + seller1, + exchangeV2.address + ); + let signatureLeft2 = await getSignature( + left2, + seller2, + exchangeV2.address + ); + let signatureLeft3 = await getSignature( + left3, + seller3, + exchangeV2.address + ); + + const directPurchaseParams1 = { + sellOrderMaker: seller1, + sellOrderNftAmount: 1, + nftAssetClass: ERC721, + nftData: enc(erc721.address, erc721TokenId1), + sellOrderPaymentAmount: 100, + paymentToken: ZERO_ADDRESS, + sellOrderSalt: 1, + sellOrderStart: 0, + sellOrderEnd: 0, + sellOrderDataType: ORDER_DATA_V2, + sellOrderData: encDataLeft, + sellOrderSignature: signatureLeft1, + buyOrderPaymentAmount: 100, + buyOrderNftAmount: 1, + buyOrderData: encDataRight, + }; + + let dataForExchCall1 = await wrapperHelper.getDataDirectPurchase( + directPurchaseParams1 + ); + const tradeData1 = PurchaseData( + 0, + 100, + await encodeFees(1500), + dataForExchCall1 + ); //0 is Exch orders, 100 is amount + 0 protocolFee + + const directPurchaseParams2 = { + sellOrderMaker: seller2, + sellOrderNftAmount: 1, + nftAssetClass: ERC721, + nftData: enc(erc721.address, erc721TokenId2), + sellOrderPaymentAmount: 100, + paymentToken: ZERO_ADDRESS, + sellOrderSalt: 1, + sellOrderStart: 0, + sellOrderEnd: 0, + sellOrderDataType: ORDER_DATA_V2, + sellOrderData: encDataLeft, + sellOrderSignature: signatureLeft2, + buyOrderPaymentAmount: 100, + buyOrderNftAmount: 1, + buyOrderData: encDataRight, + }; + + let dataForExchCall2 = await wrapperHelper.getDataDirectPurchase( + directPurchaseParams2 + ); + const tradeData2 = PurchaseData( + 0, + 100, + await encodeFees(1500), + dataForExchCall2 + ); //0 is Exch orders, 100 is amount + 0 protocolFee + + const directPurchaseParams3 = { + sellOrderMaker: seller3, + sellOrderNftAmount: 1, + nftAssetClass: ERC721, + nftData: enc(erc721.address, erc721TokenId3), + sellOrderPaymentAmount: 100, + paymentToken: ZERO_ADDRESS, + sellOrderSalt: 1, + sellOrderStart: 0, + sellOrderEnd: 0, + sellOrderDataType: ORDER_DATA_V1, + sellOrderData: encDataLeftV1, + sellOrderSignature: signatureLeft3, + buyOrderPaymentAmount: 100, + buyOrderNftAmount: 1, + buyOrderData: encDataRightV1, + }; + + let dataForExchCall3 = await wrapperHelper.getDataDirectPurchase( + directPurchaseParams3 + ); + const tradeData3 = PurchaseData( + 0, + 100, + await encodeFees(1500), + dataForExchCall3 + ); //0 is Exch orders, 100 is amount + 0 protocolFee + + const bulkExchangeAsBuyer = bulkExchange.connect(accounts[2]); + + await verifyBalanceChangeReturnTxEthers(ethers, buyer, 345, async () => + verifyBalanceChangeReturnTxEthers(ethers, seller1, -100, async () => + verifyBalanceChangeReturnTxEthers(ethers, seller2, -100, async () => + verifyBalanceChangeReturnTxEthers(ethers, seller3, -100, async () => + verifyBalanceChangeReturnTxEthers( + ethers, + feeRecipienterUP, + -45, + () => + bulkExchangeAsBuyer.bulkPurchase( + [tradeData1, tradeData2, tradeData3], + feeRecipienterUP, + ZERO_ADDRESS, + false, + { value: 400 } + ) + ) + ) + ) + ) + ); + + expect(await erc721.balanceOf(seller1)).to.equal(0); + expect(await erc721.balanceOf(seller2)).to.equal(0); + expect(await erc721.balanceOf(seller3)).to.equal(0); + expect(await erc721.balanceOf(accounts[2].address)).to.equal(3); + }); + + it("Test bulkPurchase ExchangeV2 (num orders = 3, type ==V2, V1) orders are ready, ERC1155<->ETH", async () => { + const buyer = accounts[2].address; + const seller1 = accounts[1].address; + const seller2 = accounts[3].address; + const seller3 = accounts[4].address; + + const erc1155AsSeller1 = erc1155.connect(accounts[1]); + const erc1155AsSeller2 = erc1155.connect(accounts[3]); + const erc1155AsSeller3 = erc1155.connect(accounts[4]); + + await erc1155.mint(seller1, erc1155TokenId1, 10); + await erc1155AsSeller1.setApprovalForAll(transferProxy.address, true); + + await erc1155.mint(seller2, erc1155TokenId2, 10); + await erc1155AsSeller2.setApprovalForAll(transferProxy.address, true); + + await erc1155.mint(seller3, erc1155TokenId3, 10); + await erc1155AsSeller3.setApprovalForAll(transferProxy.address, true); + + exchangeV2 = await ethers.getContractAt( + "ExchangeV2", + deployed.ExchangeV2.address + ); + + // Set buyer in payouts + const encDataLeft = await encDataV2([[], [], false]); + const encDataLeftV1 = await encDataV1([[], []]); + const encDataRight = await encDataV2([[[buyer, 10000]], [], false]); + const encDataRightV1 = await encDataV1([[[buyer, 10000]], []]); + + const left1 = Order( + seller1, + Asset(ERC1155, enc(erc1155.address, erc1155TokenId1), 10), + ZERO_ADDRESS, + Asset(ETH, "0x", 100), + 1, + 0, + 0, + ORDER_DATA_V2, + encDataLeft + ); + const left2 = Order( + seller2, + Asset(ERC1155, enc(erc1155.address, erc1155TokenId2), 10), + ZERO_ADDRESS, + Asset(ETH, "0x", 100), + 1, + 0, + 0, + ORDER_DATA_V2, + encDataLeft + ); + const left3 = Order( + seller3, + Asset(ERC1155, enc(erc1155.address, erc1155TokenId3), 10), + ZERO_ADDRESS, + Asset(ETH, "0x", 100), + 1, + 0, + 0, + ORDER_DATA_V1, + encDataLeftV1 + ); + + let signatureLeft1 = await getSignature( + left1, + seller1, + exchangeV2.address + ); + let signatureLeft2 = await getSignature( + left2, + seller2, + exchangeV2.address + ); + let signatureLeft3 = await getSignature( + left3, + seller3, + exchangeV2.address + ); + + const directPurchaseParams1 = { + sellOrderMaker: seller1, + sellOrderNftAmount: 10, + nftAssetClass: ERC1155, + nftData: enc(erc1155.address, erc1155TokenId1), + sellOrderPaymentAmount: 100, + paymentToken: ZERO_ADDRESS, + sellOrderSalt: 1, + sellOrderStart: 0, + sellOrderEnd: 0, + sellOrderDataType: ORDER_DATA_V2, + sellOrderData: encDataLeft, + sellOrderSignature: signatureLeft1, + buyOrderPaymentAmount: 100, + buyOrderNftAmount: 6, + buyOrderData: encDataRight, + }; + + let dataForExchCall1 = await wrapperHelper.getDataDirectPurchase( + directPurchaseParams1 + ); + const tradeData1 = PurchaseData( + 0, + 60, + await encodeFees(1500), + dataForExchCall1 + ); //0 is Exch orders, 100 is amount + 0 protocolFee + + const directPurchaseParams2 = { + sellOrderMaker: seller2, + sellOrderNftAmount: 10, + nftAssetClass: ERC1155, + nftData: enc(erc1155.address, erc1155TokenId2), + sellOrderPaymentAmount: 100, + paymentToken: ZERO_ADDRESS, + sellOrderSalt: 1, + sellOrderStart: 0, + sellOrderEnd: 0, + sellOrderDataType: ORDER_DATA_V2, + sellOrderData: encDataLeft, + sellOrderSignature: signatureLeft2, + buyOrderPaymentAmount: 100, + buyOrderNftAmount: 8, + buyOrderData: encDataRight, + }; + + let dataForExchCall2 = await wrapperHelper.getDataDirectPurchase( + directPurchaseParams2 + ); + const tradeData2 = PurchaseData( + 0, + 80, + await encodeFees(1500), + dataForExchCall2 + ); //0 is Exch orders, 100 is amount + 0 protocolFee + + const directPurchaseParams3 = { + sellOrderMaker: seller3, + sellOrderNftAmount: 10, + nftAssetClass: ERC1155, + nftData: enc(erc1155.address, erc1155TokenId3), + sellOrderPaymentAmount: 100, + paymentToken: ZERO_ADDRESS, + sellOrderSalt: 1, + sellOrderStart: 0, + sellOrderEnd: 0, + sellOrderDataType: ORDER_DATA_V1, + sellOrderData: encDataLeftV1, + sellOrderSignature: signatureLeft3, + buyOrderPaymentAmount: 100, + buyOrderNftAmount: 10, + buyOrderData: encDataRightV1, + }; + + let dataForExchCall3 = await wrapperHelper.getDataDirectPurchase( + directPurchaseParams3 + ); + const tradeData3 = PurchaseData( + 0, + 100, + await encodeFees(1500), + dataForExchCall3 + ); //0 is Exch orders, 100 is amount + 0 protocolFee + + const bulkExchangeAsBuyer = bulkExchange.connect(accounts[2]); + + await verifyBalanceChangeReturnTxEthers(ethers, buyer, 276, async () => + verifyBalanceChangeReturnTxEthers(ethers, seller1, -60, async () => + verifyBalanceChangeReturnTxEthers(ethers, seller2, -80, async () => + verifyBalanceChangeReturnTxEthers(ethers, seller3, -100, async () => + verifyBalanceChangeReturnTxEthers( + ethers, + feeRecipienterUP, + -36, + () => + bulkExchangeAsBuyer.bulkPurchase( + [tradeData1, tradeData2, tradeData3], + feeRecipienterUP, + ZERO_ADDRESS, + false, + { value: 400 } + ) + ) + ) + ) + ) + ); + + expect(await erc1155.balanceOf(seller1, erc1155TokenId1)).to.equal(4); + expect(await erc1155.balanceOf(seller2, erc1155TokenId2)).to.equal(2); + expect(await erc1155.balanceOf(seller3, erc1155TokenId3)).to.equal(0); + expect( + await erc1155.balanceOf(accounts[2].address, erc1155TokenId1) + ).to.equal(6); + expect( + await erc1155.balanceOf(accounts[2].address, erc1155TokenId2) + ).to.equal(8); + expect( + await erc1155.balanceOf(accounts[2].address, erc1155TokenId3) + ).to.equal(10); + }); + }); + + function encDataV2(tuple) { + return helper.encodeV2(tuple); + } + + function encDataV1(tuple) { + return helper.encode(tuple); + } + + function PurchaseData(marketId, amount, fees, data) { + return { marketId, amount, fees, data }; + } + + async function getSignature(order, signer, exchangeContract) { + return sign(order, signer, exchangeContract); + } + + async function encodeFees(first = 0, second = 0) { + const result = await wrapperHelper.encodeFees(first, second); + return result.toString(); + } +}); diff --git a/projects/hardhat-deploy/utils/exchangeWrapperSettings.ts b/projects/hardhat-deploy/utils/exchangeWrapperSettings.ts new file mode 100644 index 000000000..7b178d73e --- /dev/null +++ b/projects/hardhat-deploy/utils/exchangeWrapperSettings.ts @@ -0,0 +1,217 @@ + +/* @dev ExchangeWrapperSettings to be used on deployment scripts and tests */ + +export const zeroAddress = "0x0000000000000000000000000000000000000000"; +export const nonZeroAddress = "0x0000000000000000000000000000000000000001"; + +const mainnet = { + marketplaces: [ + "0x7f268357A8c2552623316e2562D90e642bB538E5", // wyvernExchange + "", //rarible exchangeV2 palceholder + "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 + "0x74312363e45DCaBA76c59ec49a7Aa8A65a67EeD3", // x2y2 + "0x59728544B08AB483533076417FbBB2fD0B17CE3a", // looksRare + "0x2b2e8cda09bba9660dca5cb6233787738ad68329", // sudoSwap + "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 + "0x0000000000e655fae4d56241588680f86e3b2377", // looksRareV2 + "0x000000000000Ad05Ccc4F10045630fb830B95127", // blur + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 + "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 + ], + + weth: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", + transferProxies: [], +}; + +const polygon_mainnet = { + marketplaces: [ + zeroAddress, // wyvernExchange + "", //rarible exchangeV2 palceholder + "0x00000000006c3852cbef3e08e8df289169ede581", // seaPort_1_1 + zeroAddress, // x2y2 + zeroAddress, // looksRare + zeroAddress, // sudoSwap + "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 + zeroAddress, // looksRareV2 + zeroAddress, // blur + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 + "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 + ], + + weth: "0x7ceb23fd6bc0add59e62ac25578270cff1b9f619", + transferProxies: [], +}; + +const goerli = { + marketplaces: [ + zeroAddress, // wyvernExchange + "", //rarible exchangeV2 palceholder + "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 + zeroAddress, // x2y2 + "0xD112466471b5438C1ca2D218694200e49d81D047", // looksRare + "0x25b4EfC43c9dCAe134233CD577fFca7CfAd6748F", // sudoSwap + "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 + "0x35C2215F2FFe8917B06454eEEaba189877F200cf", // looksRareV2 + zeroAddress, // blur + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 + "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 + ], + + weth: "0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6", + transferProxies: [], +}; + +const def = { + marketplaces: [ + zeroAddress, // wyvernExchange + "", //rarible exchangeV2 palceholder + "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 + zeroAddress, // x2y2 + zeroAddress, // looksRare + zeroAddress, // sudoSwap + "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 + zeroAddress, // looksRareV2 + zeroAddress, // blur + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 + "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 + ], + + weth: zeroAddress, + transferProxies: [], +}; + +const dev = { + marketplaces: [ + zeroAddress, // wyvernExchange + "", //rarible exchangeV2 palceholder + "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 + zeroAddress, // x2y2 + zeroAddress, // looksRare + "0xc64E5D291CaEdF42b77fa9E50d5Fd46113227857", // sudoSwap + "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 + zeroAddress, // looksRareV2 + zeroAddress, // blur + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 + "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 + ], + + weth: zeroAddress, + transferProxies: [], +}; + +const staging = { + marketplaces: [ + zeroAddress, // wyvernExchange + "", //rarible exchangeV2 palceholder + "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 + zeroAddress, // x2y2 + zeroAddress, // looksRare + "0xE27A07e9B293dC677e34aB5fF726073ECbeCA842", // sudoSwap + "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 + zeroAddress, // looksRareV2 + zeroAddress, // blur + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 + "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 + ], + + weth: zeroAddress, + transferProxies: [], +}; + +const polygon_staging = { + marketplaces: [ + zeroAddress, // wyvernExchange + "", //rarible exchangeV2 palceholder + "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 + zeroAddress, // x2y2 + zeroAddress, // looksRare + "0x55eB2809896aB7414706AaCDde63e3BBb26e0BC6", // sudoSwap + "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 + zeroAddress, // looksRareV2 + zeroAddress, // blur + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 + "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 + ], + + weth: zeroAddress, + transferProxies: [], +}; + +const polygon_mumbai = { + marketplaces: [ + zeroAddress, // wyvernExchange + "", //rarible exchangeV2 palceholder + "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 + zeroAddress, // x2y2 + zeroAddress, // looksRare + zeroAddress, // sudoSwap + "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 + zeroAddress, // looksRareV2 + zeroAddress, // blur + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 + "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 + ], + + weth: "0xa6fa4fb5f76172d178d61b04b0ecd319c5d1c0aa", + transferProxies: [], +}; + +const sepolia = { + marketplaces: [ + zeroAddress, // wyvernExchange + "", //rarible exchangeV2 palceholder + "0x00000000006c3852cbEf3e08E8dF289169EdE581", // seaPort_1_1 + zeroAddress, // x2y2 + "0xD112466471b5438C1ca2D218694200e49d81D047", // looksRare + "0x25b4EfC43c9dCAe134233CD577fFca7CfAd6748F", // sudoSwap + "0x00000000000001ad428e4906aE43D8F9852d0dD6", // seaport_1_4 + "0x35C2215F2FFe8917B06454eEEaba189877F200cf", // looksRareV2 + zeroAddress, // blur + "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC", // seaport_1_5 + "0x0000000000000068F116a894984e2DB1123eB395", // seaport_1_6 + ], + + weth: "0x7b79995e5f793a07bc00c21412e50ecae098e7f9", + transferProxies: [], +}; + +const sei_testnet = { + marketplaces: [ + zeroAddress, // wyvernExchange + "", //rarible exchangeV2 palceholder + zeroAddress, // seaPort_1_1 + zeroAddress, // x2y2 + zeroAddress, // looksRare + zeroAddress, // sudoSwap + zeroAddress, // seaport_1_4 + zeroAddress, // looksRareV2 + zeroAddress, // blur + zeroAddress, // seaport_1_5 + zeroAddress, // seaport_1_6 + ], + + weth: "0x63600a899ad94ae1bc638504fa56d8a6144df2fe", + transferProxies: [], +}; + +let settings: any = { + default: def, + mainnet: mainnet, + "mainnet-fork": mainnet, + goerli: goerli, + sepolia: sepolia, + dev: dev, + staging: staging, + polygon_staging: polygon_staging, + polygon_mumbai: polygon_mumbai, + polygon_mainnet: polygon_mainnet, + sei_testnet: sei_testnet, +}; + +export function getWrapperSettings(network: string) { + if (settings[network] !== undefined) { + return settings[network]; + } else { + return settings["default"]; + } +} diff --git a/projects/upgrade-executor/src/actions/UpdateAddressAction.sol b/projects/upgrade-executor/src/actions/UpdateAddressAction.sol new file mode 100644 index 000000000..c6efe3792 --- /dev/null +++ b/projects/upgrade-executor/src/actions/UpdateAddressAction.sol @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity 0.7.6; + +import "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapperUpgradeable.sol"; + +contract UpdateAddressAction { + function perform( + address target, + RaribleExchangeWrapperUpgradeable.Markets market, + address newAddress + ) public { + RaribleExchangeWrapperUpgradeable(payable(target)).updateMarketplaceAddress(market, newAddress); + } +} diff --git a/projects/upgrade-executor/test/contracts/RaribleExchangeWrapperUpgradeable.sol b/projects/upgrade-executor/test/contracts/RaribleExchangeWrapperUpgradeable.sol new file mode 100644 index 000000000..1c504af0d --- /dev/null +++ b/projects/upgrade-executor/test/contracts/RaribleExchangeWrapperUpgradeable.sol @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.7.6; + +import "@rarible/exchange-wrapper/contracts/RaribleExchangeWrapperUpgradeable.sol"; diff --git a/projects/upgrade-executor/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol b/projects/upgrade-executor/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol new file mode 100644 index 000000000..39bca89ce --- /dev/null +++ b/projects/upgrade-executor/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol @@ -0,0 +1,5 @@ +// SPDX-License-Identifier: MIT + +pragma solidity 0.7.6; + +import "@rarible/exchange-wrapper/test/contracts/RaribleExchangeWrapperUpgradeableV2.sol"; diff --git a/projects/upgrade-executor/test/contracts/TestHelper.sol b/projects/upgrade-executor/test/contracts/TestHelper.sol index 53d0e893a..fb5642beb 100644 --- a/projects/upgrade-executor/test/contracts/TestHelper.sol +++ b/projects/upgrade-executor/test/contracts/TestHelper.sol @@ -1,5 +1,3 @@ - - // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; @@ -11,29 +9,35 @@ import "../../src/actions/TimelockAdminshipTransferAndRenounceAction.sol"; import "../../src/UpgradeExecutor.sol"; contract TestHelper { - - function encodeProxyUpgradeCall(address admin, address payable target, address newLogic) external pure returns(bytes memory) { + function encodeProxyUpgradeCall( + address admin, + address payable target, + address newLogic + ) external pure returns (bytes memory) { return abi.encodeWithSelector(ProxyUpgradeAction.perform.selector, admin, target, newLogic); } - function encodeProtocolFeeCall(address _receiver, uint48 _buyerAmount, uint48 _sellerAmount) external pure returns(bytes memory) { + function encodeProtocolFeeCall( + address _receiver, + uint48 _buyerAmount, + uint48 _sellerAmount + ) external pure returns (bytes memory) { return abi.encodeWithSelector(SetProtocolFeeAction.perform.selector, _receiver, _buyerAmount, _sellerAmount); } - function encodeOwnershipTransferCall(address target, address newOwner) external pure returns(bytes memory) { + function encodeOwnershipTransferCall(address target, address newOwner) external pure returns (bytes memory) { return abi.encodeWithSelector(OwnershipTransferAction.perform.selector, target, newOwner); } - function encodeAdminshipTimelockCall(address target, address newOwner) external pure returns(bytes memory) { + function encodeAdminshipTimelockCall(address target, address newOwner) external pure returns (bytes memory) { return abi.encodeWithSelector(TimelockAdminshipTransferAndRenounceAction.perform.selector, target, newOwner); } - function encodeUpgradeActionCall(address upgrade, bytes memory data) external pure returns(bytes memory) { + function encodeUpgradeActionCall(address upgrade, bytes memory data) external pure returns (bytes memory) { return abi.encodeWithSelector(UpgradeExecutor.execute.selector, upgrade, data); } - function hashDescription(string calldata description) external pure returns(bytes32) { + function hashDescription(string calldata description) external pure returns (bytes32) { return keccak256(bytes(description)); } - -} \ No newline at end of file +} diff --git a/projects/upgrade-executor/test/contracts/TestHelperV7.sol b/projects/upgrade-executor/test/contracts/TestHelperV7.sol new file mode 100644 index 000000000..7c3a610a1 --- /dev/null +++ b/projects/upgrade-executor/test/contracts/TestHelperV7.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.7.6; + +import "../../src/actions/UpdateAddressAction.sol"; + +/** + * @notice this contract was added to perform encoding on v0.7 contracts + **/ +contract TestHelperV7 { + function encodeAddressUpdateCall( + address target, + RaribleExchangeWrapperUpgradeable.Markets market, + address newAddress + ) external pure returns (bytes memory) { + return abi.encodeWithSelector(UpdateAddressAction.perform.selector, target, market, newAddress); + } +} diff --git a/projects/upgrade-executor/test/upgrade-exchange-wrapper.test.ts b/projects/upgrade-executor/test/upgrade-exchange-wrapper.test.ts new file mode 100644 index 000000000..de4e56ba4 --- /dev/null +++ b/projects/upgrade-executor/test/upgrade-exchange-wrapper.test.ts @@ -0,0 +1,176 @@ +import { ethers, network } from "hardhat"; +import { expect } from "chai"; +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { + getWrapperSettings, + nonZeroAddress, + zeroAddress, + twoAddress, +} from "../../hardhat-deploy/utils/exchangeWrapperSettings"; + +describe("Upgrade Executor, ExchangeWrapperUpgradeable", function () { + let signers: SignerWithAddress[]; + let deployer: SignerWithAddress; + + let raribleExchangeWrapperUpgradeable: any; + let upgradeExecutor: any; + let proxyAdmin: any; + let transparentUpgradeableProxy: any; + let proxyInstance: any; + let wrapperSettings: any; + + beforeEach(async () => { + signers = await ethers.getSigners(); + deployer = signers[0]; + + /* 1. Get dependencies/settings for the ExchangeWrapperUpgradeable implementation deployment */ + const exchangeV2Address = zeroAddress; + wrapperSettings = getWrapperSettings(network.name); + wrapperSettings.marketplaces[1] = exchangeV2Address; + + /* 2. Deploy an initial ExchangeWrapperUpgradeable Implementation */ + const RaribleExchangeWrapperUpgradeable = await ethers.getContractFactory( + "RaribleExchangeWrapperUpgradeable" + ); + raribleExchangeWrapperUpgradeable = + await RaribleExchangeWrapperUpgradeable.deploy(); + + /* 3. Deploy the UpgradeExecutor contract */ + const UpgradeExecutor = await ethers.getContractFactory("UpgradeExecutor"); + upgradeExecutor = await UpgradeExecutor.deploy([deployer.address]); + + /* 4. Deploy the ProxyAdmin contract */ + const ProxyAdmin = await ethers.getContractFactory("ProxyAdmin"); + proxyAdmin = await ProxyAdmin.deploy(); + + /* 5. Transfer the ownership of the ProxyAdmin to the UpgradeExecutor */ + await proxyAdmin.transferOwnership(upgradeExecutor.address); + + /* 6 Encode initialization data */ + const initializeData = + raribleExchangeWrapperUpgradeable.interface.encodeFunctionData( + "__ExchangeWrapper_init_proxy", + [ + wrapperSettings.marketplaces, + wrapperSettings.weth, + wrapperSettings.transferProxies, + upgradeExecutor.address, + ] + ); + + /* 7. Deploy the TransparentUpgradeableProxy contract */ + const TransparentUpgradeableProxy = await ethers.getContractFactory( + "TransparentUpgradeableProxy" + ); + transparentUpgradeableProxy = await TransparentUpgradeableProxy.deploy( + raribleExchangeWrapperUpgradeable.address, + proxyAdmin.address, + initializeData + ); + proxyInstance = await ethers.getContractAt( + "RaribleExchangeWrapperUpgradeable", + transparentUpgradeableProxy.address + ); + }); + + it("Should be able to upgrade the ExchangeWrapper and use new functionality", async function () { + /* 1. Deploy the ProxyUpgradeAction contract */ + const ProxyUpgradeAction = await ethers.getContractFactory( + "ProxyUpgradeAction" + ); + const proxyUpgradeAction = await ProxyUpgradeAction.deploy(); + + /* 2. Check that the first implementation is correctly set */ + const implFirst = await proxyAdmin.getProxyImplementation( + transparentUpgradeableProxy.address + ); + expect(implFirst).to.equal(raribleExchangeWrapperUpgradeable.address); + + /* 3. Check that immutable variables are correctly set */ + const weth = await proxyInstance.weth(); + expect(weth).to.equal(wrapperSettings.weth); + const exchangeV2 = await proxyInstance.exchangeV2(); + expect(exchangeV2).to.equal(wrapperSettings.marketplaces[1]); + + /* 4. Deploy a new Implementation of the ExchangeWrapper */ + const RaribleExchangeWrapperUpgradeableV2 = await ethers.getContractFactory( + "RaribleExchangeWrapperUpgradeableV2" + ); + const raribleUpgradableExchangeWrapperV2 = + await RaribleExchangeWrapperUpgradeableV2.deploy(); + + /* 5. Deploy the TestHelper contract */ + const TestHelper = await ethers.getContractFactory("TestHelper"); + const testHelper = await TestHelper.deploy(); + + /* 6. Prepare the data to upgrade the Proxy */ + const newImpl = raribleUpgradableExchangeWrapperV2.address; + const actionUpgradeProxydata = await testHelper.encodeProxyUpgradeCall( + proxyAdmin.address, + transparentUpgradeableProxy.address, + newImpl + ); + + /* 7. Execute the upgrade */ + await upgradeExecutor.execute( + proxyUpgradeAction.address, + actionUpgradeProxydata + ); + + /* 8. Check that the second implementation is correctly set */ + const implSecond = await proxyAdmin.getProxyImplementation( + transparentUpgradeableProxy.address + ); + expect(implSecond).to.equal(newImpl); + }); + + it("Should be able to update marketplaces addresses", async function () { + /* 1. Deploy the UpdateAddressAction contract */ + const UpdateAddressAction = await ethers.getContractFactory( + "UpdateAddressAction" + ); + const updateAddressAction = await UpdateAddressAction.deploy(); + + /* 2. Deploy the TestHelperV7 contract */ + const TestHelperV7 = await ethers.getContractFactory("TestHelperV7"); + const testHelperV7 = await TestHelperV7.deploy(); + + /* 3. Prepare the data to upgrade the Proxy */ + const actionUpdateAdressData = await testHelperV7.encodeAddressUpdateCall( + transparentUpgradeableProxy.address, + 0, + nonZeroAddress + ); + + /* 4. Execute the update */ + await upgradeExecutor.execute( + updateAddressAction.address, + actionUpdateAdressData + ); + + /* 5. Check that the new marketplace is correctly set */ + const proxyInstance = await ethers.getContractAt( + "RaribleExchangeWrapperUpgradeable", + transparentUpgradeableProxy.address + ); + const exchangeAddress = await proxyInstance.exchangeV2(); + expect(exchangeAddress).to.equal(nonZeroAddress); + + /* 6. Update the marketplace again */ + const actionUpdateAdressData2 = await testHelperV7.encodeAddressUpdateCall( + transparentUpgradeableProxy.address, + 0, + twoAddress + ); + + /* 7. Execute the update */ + await upgradeExecutor.execute( + updateAddressAction.address, + actionUpdateAdressData2 + ); + + /* 8. Check that the new marketplace is correctly set */ + const newMarketplace2 = await proxyInstance.exchangeV2(); + expect(newMarketplace2).to.equal(twoAddress); + }); +}); diff --git a/scripts/balance.js b/scripts/balance.js index 852a85554..e5db5171d 100644 --- a/scripts/balance.js +++ b/scripts/balance.js @@ -1,6 +1,6 @@ async function verifyBalanceChangeReturnTx(web3, account, change, todo) { const BN = web3.utils.BN; - + let before = new BN(await web3.eth.getBalance(account)); const tx = await todo(); @@ -8,7 +8,7 @@ async function verifyBalanceChangeReturnTx(web3, account, change, todo) { let actual = before.sub(after); const gasUsed = new BN(tx.receipt.gasUsed); - const effectiveGasPrice = new BN(tx.receipt.effectiveGasPrice) + const effectiveGasPrice = new BN(tx.receipt.effectiveGasPrice); const txSender = web3.utils.toChecksumAddress(tx.receipt.from); const moneyUsedForGas = gasUsed.mul(effectiveGasPrice); @@ -22,4 +22,42 @@ async function verifyBalanceChangeReturnTx(web3, account, change, todo) { return tx; } -module.exports = { verifyBalanceChangeReturnTx } +async function verifyBalanceChangeReturnTxEthers( + ethers, + account, + change, + todo +) { + const BN = ethers.BigNumber; + + let before = BN.from(await ethers.provider.getBalance(account)); + const tx = await todo(); + + let after = BN.from(await ethers.provider.getBalance(account)); + let actual = before.sub(after); + + if (!tx || !tx.wait) { + throw new Error("Transaction receipt is undefined or invalid"); + } + + const receipt = await tx.wait(); + + const gasUsed = receipt.gasUsed; + const effectiveGasPrice = tx.gasPrice || receipt.effectiveGasPrice; + + const txSender = ethers.utils.getAddress(receipt.from); + const moneyUsedForGas = gasUsed.mul(effectiveGasPrice); + + if (txSender === ethers.utils.getAddress(account)) { + actual = actual.sub(moneyUsedForGas); + } + + assert.equal(change.toString(), actual.toString()); + + return tx; +} + +module.exports = { + verifyBalanceChangeReturnTx, + verifyBalanceChangeReturnTxEthers, +}; From 8b0578bffbcf6ecc6ce25acd70b65171261432ec Mon Sep 17 00:00:00 2001 From: Eugene Nacu Date: Tue, 13 Aug 2024 13:28:56 +0100 Subject: [PATCH 24/25] chore: deployed create2 factory on Arbitrum, RARI --- .../deployments/arbitrum/.chainId | 1 + .../arbitrum/ImmutableCreate2Factory.json | 115 ++++++++++++++++++ .../47c9583a7ef7353685a643d84df47830.json | 29 +++++ .../deploy-proxy/deployments/rari/.chainId | 1 + .../rari/ImmutableCreate2Factory.json | 115 ++++++++++++++++++ .../47c9583a7ef7353685a643d84df47830.json | 29 +++++ 6 files changed, 290 insertions(+) create mode 100644 projects/deploy-proxy/deployments/arbitrum/.chainId create mode 100644 projects/deploy-proxy/deployments/arbitrum/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/arbitrum/solcInputs/47c9583a7ef7353685a643d84df47830.json create mode 100644 projects/deploy-proxy/deployments/rari/.chainId create mode 100644 projects/deploy-proxy/deployments/rari/ImmutableCreate2Factory.json create mode 100644 projects/deploy-proxy/deployments/rari/solcInputs/47c9583a7ef7353685a643d84df47830.json diff --git a/projects/deploy-proxy/deployments/arbitrum/.chainId b/projects/deploy-proxy/deployments/arbitrum/.chainId new file mode 100644 index 000000000..7df83ecbe --- /dev/null +++ b/projects/deploy-proxy/deployments/arbitrum/.chainId @@ -0,0 +1 @@ +42161 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/arbitrum/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/arbitrum/ImmutableCreate2Factory.json new file mode 100644 index 000000000..bfe5c5da6 --- /dev/null +++ b/projects/deploy-proxy/deployments/arbitrum/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xfab5b1045b89c2289dd7015db97c7c999a2e74956e346e60336969dba7ed9fb2", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 2, + "gasUsed": "578212", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x6d378d8dc00b3ec61572fb2dcd25f3888c0a79d21867bdf94567dfbaed4005ec", + "transactionHash": "0xfab5b1045b89c2289dd7015db97c7c999a2e74956e346e60336969dba7ed9fb2", + "logs": [], + "blockNumber": 242432514, + "cumulativeGasUsed": "635725", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/arbitrum/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/arbitrum/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/arbitrum/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/rari/.chainId b/projects/deploy-proxy/deployments/rari/.chainId new file mode 100644 index 000000000..1312b1c9c --- /dev/null +++ b/projects/deploy-proxy/deployments/rari/.chainId @@ -0,0 +1 @@ +1380012617 \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/rari/ImmutableCreate2Factory.json b/projects/deploy-proxy/deployments/rari/ImmutableCreate2Factory.json new file mode 100644 index 000000000..e3a6e7b40 --- /dev/null +++ b/projects/deploy-proxy/deployments/rari/ImmutableCreate2Factory.json @@ -0,0 +1,115 @@ +{ + "address": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "abi": [ + { + "constant": true, + "inputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "name": "hasBeenDeployed", + "outputs": [ + { + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initializationCode", + "type": "bytes" + } + ], + "name": "safeCreate2", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCode", + "type": "bytes" + } + ], + "name": "findCreate2Address", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "name": "salt", + "type": "bytes32" + }, + { + "name": "initCodeHash", + "type": "bytes32" + } + ], + "name": "findCreate2AddressViaHash", + "outputs": [ + { + "name": "deploymentAddress", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + } + ], + "transactionHash": "0xc5cf26d0d02108bfe1d3a5a756ebfe068d50776f2c05df3d04aae320379abee2", + "receipt": { + "to": null, + "from": "0x2CC11132c7dBA4d55459c0BE2792aB700B15D512", + "contractAddress": "0x933AcD72513796c31dc9B63579130335Dcd4a961", + "transactionIndex": 1, + "gasUsed": "510008", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xed8dc9c539f5e7d994bda9a663b6a95acf787aecbca1a6b73a9960e09d506258", + "transactionHash": "0xc5cf26d0d02108bfe1d3a5a756ebfe068d50776f2c05df3d04aae320379abee2", + "logs": [], + "blockNumber": 430260, + "cumulativeGasUsed": "510008", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "47c9583a7ef7353685a643d84df47830", + "metadata": "{\"compiler\":{\"version\":\"0.5.10+commit.5a6ea5b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"name\":\"hasBeenDeployed\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initializationCode\",\"type\":\"bytes\"}],\"name\":\"safeCreate2\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"findCreate2Address\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\"},{\"name\":\"initCodeHash\",\"type\":\"bytes32\"}],\"name\":\"findCreate2AddressViaHash\",\"outputs\":[{\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"0age\",\"details\":\"This contract has not yet been fully tested or audited - proceed with caution and please share any exploits or optimizations you discover.\",\"methods\":{\"findCreate2Address(bytes32,bytes)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCode\":\"bytes The contract initialization code to be used. that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"findCreate2AddressViaHash(bytes32,bytes32)\":{\"details\":\"Compute the address of the contract that will be created when submitting a given salt or nonce to the contract along with the keccak256 hash of the contract's initialization code. The CREATE2 address is computed in accordance with EIP-1014, and adheres to the formula therein of `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when performing the computation. The computed address is then checked for any existing contract code - if so, the null address will be returned instead.\",\"params\":{\"initCodeHash\":\"bytes32 The keccak256 hash of the initialization code that will be passed into the CREATE2 address calculation.\",\"salt\":\"bytes32 The nonce passed into the CREATE2 address calculation.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract has already been deployed to that address.\"},\"hasBeenDeployed(address)\":{\"details\":\"Determine if a contract has already been deployed by the factory to a given address.\",\"params\":{\"deploymentAddress\":\"address The contract address to check.\"},\"return\":\"True if the contract has been deployed, false otherwise.\"},\"safeCreate2(bytes32,bytes)\":{\"details\":\"Create a contract using CREATE2 by submitting a given salt or nonce along with the initialization code for the contract. Note that the first 20 bytes of the salt must match those of the calling address, which prevents contract creation events from being submitted by unintended parties.\",\"params\":{\"initializationCode\":\"bytes The initialization code that will be passed into the CREATE2 call.\",\"salt\":\"bytes32 The nonce that will be passed into the CREATE2 call.\"},\"return\":\"Address of the contract that will be created, or the null address if a contract already exists at that address.\"}},\"title\":\"Immutable Create2 Contract Factory\"},\"userdoc\":{\"methods\":{},\"notice\":\"This contract provides a safeCreate2 function that takes a salt value and a block of initialization code as arguments and passes them into inline assembly. The contract prevents redeploys by maintaining a mapping of all contracts that have already been deployed, and prevents frontrunning or other collisions by requiring that the first 20 bytes of the salt are equal to the address of the caller (this can be bypassed by setting the first 20 bytes to the null address). There is also a view function that computes the address of the contract that will be created when submitting a given salt or nonce along with a given block of initialization code.\"}},\"settings\":{\"compilationTarget\":{\"contracts/ImmutableCreate2Factory.sol\":\"ImmutableCreate2Factory\"},\"evmVersion\":\"petersburg\",\"libraries\":{},\"optimizer\":{\"enabled\":true,\"runs\":99999},\"remappings\":[]},\"sources\":{\"contracts/ImmutableCreate2Factory.sol\":{\"keccak256\":\"0x16934461bfbee677434a106b6daf7c68a56a20ee867056385f05552881df19bd\",\"urls\":[\"bzzr://cef32e14f784d60a39e4846326ef661dad778b5a3efdd72f1defa29bc4165549\",\"dweb:/ipfs/QmaL8oTeYS2DU8YvabKt34zHgArGpErZ2rWJaYTwUSGQtp\"]}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50610833806100206000396000f3fe60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032", + "deployedBytecode": "0x60806040526004361061003f5760003560e01c806308508b8f1461004457806364e030871461009857806385cf97ab14610138578063a49a7c90146101bc575b600080fd5b34801561005057600080fd5b506100846004803603602081101561006757600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166101ec565b604080519115158252519081900360200190f35b61010f600480360360408110156100ae57600080fd5b813591908101906040810160208201356401000000008111156100d057600080fd5b8201836020820111156100e257600080fd5b8035906020019184600183028401116401000000008311171561010457600080fd5b509092509050610217565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561014457600080fd5b5061010f6004803603604081101561015b57600080fd5b8135919081019060408101602082013564010000000081111561017d57600080fd5b82018360208201111561018f57600080fd5b803590602001918460018302840111640100000000831117156101b157600080fd5b509092509050610592565b3480156101c857600080fd5b5061010f600480360360408110156101df57600080fd5b508035906020013561069e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205460ff1690565b600083606081901c33148061024c57507fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116155b6102a1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260458152602001806107746045913960600191505060405180910390fd5b606084848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250604051855195965090943094508b93508692506020918201918291908401908083835b6020831061033557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016102f8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905260408051929094018281037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00183528085528251928201929092207fff000000000000000000000000000000000000000000000000000000000000008383015260609890981b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016602183015260358201969096526055808201979097528251808203909701875260750182525084519484019490942073ffffffffffffffffffffffffffffffffffffffff81166000908152938490529390922054929350505060ff16156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f815260200180610735603f913960400191505060405180910390fd5b81602001825188818334f5955050508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461053a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260468152602001806107b96046913960600191505060405180910390fd5b50505073ffffffffffffffffffffffffffffffffffffffff8116600090815260208190526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790559392505050565b6000308484846040516020018083838082843760408051919093018181037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001825280845281516020928301207fff000000000000000000000000000000000000000000000000000000000000008383015260609990991b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021820152603581019790975260558088019890985282518088039098018852607590960182525085519585019590952073ffffffffffffffffffffffffffffffffffffffff81166000908152948590529490932054939450505060ff909116159050610697575060005b9392505050565b604080517fff000000000000000000000000000000000000000000000000000000000000006020808301919091523060601b6021830152603582018590526055808301859052835180840390910181526075909201835281519181019190912073ffffffffffffffffffffffffffffffffffffffff81166000908152918290529190205460ff161561072e575060005b9291505056fe496e76616c696420636f6e7472616374206372656174696f6e202d20636f6e74726163742068617320616c7265616479206265656e206465706c6f7965642e496e76616c69642073616c74202d206669727374203230206279746573206f66207468652073616c74206d757374206d617463682063616c6c696e6720616464726573732e4661696c656420746f206465706c6f7920636f6e7472616374207573696e672070726f76696465642073616c7420616e6420696e697469616c697a6174696f6e20636f64652ea265627a7a7230582084d4271d6e5d4a557a4d9611fcab7d2fef1ccce2e0923d16508e26f9aa9858fe64736f6c634300050a0032" +} \ No newline at end of file diff --git a/projects/deploy-proxy/deployments/rari/solcInputs/47c9583a7ef7353685a643d84df47830.json b/projects/deploy-proxy/deployments/rari/solcInputs/47c9583a7ef7353685a643d84df47830.json new file mode 100644 index 000000000..064e05a3d --- /dev/null +++ b/projects/deploy-proxy/deployments/rari/solcInputs/47c9583a7ef7353685a643d84df47830.json @@ -0,0 +1,29 @@ +{ + "language": "Solidity", + "sources": { + "contracts/ImmutableCreate2Factory.sol": { + "content": "// SPDX-License-Identifier: MIT\n\npragma solidity 0.5.10; // optimization enabled, 99999 runs, evm: petersburg\n\n\n/**\n * @title Immutable Create2 Contract Factory\n * @author 0age\n * @notice This contract provides a safeCreate2 function that takes a salt value\n * and a block of initialization code as arguments and passes them into inline\n * assembly. The contract prevents redeploys by maintaining a mapping of all\n * contracts that have already been deployed, and prevents frontrunning or other\n * collisions by requiring that the first 20 bytes of the salt are equal to the\n * address of the caller (this can be bypassed by setting the first 20 bytes to\n * the null address). There is also a view function that computes the address of\n * the contract that will be created when submitting a given salt or nonce along\n * with a given block of initialization code.\n * @dev This contract has not yet been fully tested or audited - proceed with\n * caution and please share any exploits or optimizations you discover.\n */\ncontract ImmutableCreate2Factory {\n // mapping to track which addresses have already been deployed.\n mapping(address => bool) private _deployed;\n\n /**\n * @dev Create a contract using CREATE2 by submitting a given salt or nonce\n * along with the initialization code for the contract. Note that the first 20\n * bytes of the salt must match those of the calling address, which prevents\n * contract creation events from being submitted by unintended parties.\n * @param salt bytes32 The nonce that will be passed into the CREATE2 call.\n * @param initializationCode bytes The initialization code that will be passed\n * into the CREATE2 call.\n * @return Address of the contract that will be created, or the null address\n * if a contract already exists at that address.\n */\n function safeCreate2(\n bytes32 salt,\n bytes calldata initializationCode\n ) external payable containsCaller(salt) returns (address deploymentAddress) {\n // move the initialization code from calldata to memory.\n bytes memory initCode = initializationCode;\n\n // determine the target address for contract deployment.\n address targetDeploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // ensure that a contract hasn't been previously deployed to target address.\n require(\n !_deployed[targetDeploymentAddress],\n \"Invalid contract creation - contract has already been deployed.\"\n );\n\n // using inline assembly: load data and length of data, then call CREATE2.\n assembly { // solhint-disable-line\n let encoded_data := add(0x20, initCode) // load initialization code.\n let encoded_size := mload(initCode) // load the init code's length.\n deploymentAddress := create2( // call CREATE2 with 4 arguments.\n callvalue, // forward any attached value.\n encoded_data, // pass in initialization code.\n encoded_size, // pass in init code's length.\n salt // pass in the salt value.\n )\n }\n\n // check address against target to ensure that deployment was successful.\n require(\n deploymentAddress == targetDeploymentAddress,\n \"Failed to deploy contract using provided salt and initialization code.\"\n );\n\n // record the deployment of the contract to prevent redeploys.\n _deployed[deploymentAddress] = true;\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the contract's\n * initialization code. The CREATE2 address is computed in accordance with\n * EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCode bytes The contract initialization code to be used.\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2Address(\n bytes32 salt,\n bytes calldata initCode\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n keccak256( // pass in the hash of initialization code.\n abi.encodePacked(\n initCode\n )\n )\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Compute the address of the contract that will be created when\n * submitting a given salt or nonce to the contract along with the keccak256\n * hash of the contract's initialization code. The CREATE2 address is computed\n * in accordance with EIP-1014, and adheres to the formula therein of\n * `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]` when\n * performing the computation. The computed address is then checked for any\n * existing contract code - if so, the null address will be returned instead.\n * @param salt bytes32 The nonce passed into the CREATE2 address calculation.\n * @param initCodeHash bytes32 The keccak256 hash of the initialization code\n * that will be passed into the CREATE2 address calculation.\n * @return Address of the contract that will be created, or the null address\n * if a contract has already been deployed to that address.\n */\n function findCreate2AddressViaHash(\n bytes32 salt,\n bytes32 initCodeHash\n ) external view returns (address deploymentAddress) {\n // determine the address where the contract will be deployed.\n deploymentAddress = address(\n uint160( // downcast to match the address type.\n uint256( // convert to uint to truncate upper digits.\n keccak256( // compute the CREATE2 hash using 4 inputs.\n abi.encodePacked( // pack all inputs to the hash together.\n hex\"ff\", // start with 0xff to distinguish from RLP.\n address(this), // this contract will be the caller.\n salt, // pass in the supplied salt value.\n initCodeHash // pass in the hash of initialization code.\n )\n )\n )\n )\n );\n\n // return null address to signify failure if contract has been deployed.\n if (_deployed[deploymentAddress]) {\n return address(0);\n }\n }\n\n /**\n * @dev Determine if a contract has already been deployed by the factory to a\n * given address.\n * @param deploymentAddress address The contract address to check.\n * @return True if the contract has been deployed, false otherwise.\n */\n function hasBeenDeployed(\n address deploymentAddress\n ) external view returns (bool) {\n // determine if a contract has been deployed to the provided address.\n return _deployed[deploymentAddress];\n }\n\n /**\n * @dev Modifier to ensure that the first 20 bytes of a submitted salt match\n * those of the calling account. This provides protection against the salt\n * being stolen by frontrunners or other attackers. The protection can also be\n * bypassed if desired by setting each of the first 20 bytes to zero.\n * @param salt bytes32 The salt value to check against the calling address.\n */\n modifier containsCaller(bytes32 salt) {\n // prevent contract submissions from being stolen from tx.pool by requiring\n // that the first 20 bytes of the submitted salt match msg.sender.\n require(\n (address(bytes20(salt)) == msg.sender) ||\n (bytes20(salt) == bytes20(0)),\n \"Invalid salt - first 20 bytes of the salt must match calling address.\"\n );\n _;\n }\n}" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 99999 + }, + "evmVersion": "petersburg", + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata" + ], + "": [ + "ast" + ] + } + } + } +} \ No newline at end of file From 36449453c1695c7cb49a96d3fb5d787b82a284cb Mon Sep 17 00:00:00 2001 From: Vadim Fadeev Date: Mon, 26 Aug 2024 13:44:32 +0100 Subject: [PATCH 25/25] feat: add reader amoy deploy --- .../deployments/polygon_amoy_testnet/.chainId | 1 + .../DefaultProxyAdmin.json | 274 ++++++++ .../DropERC721Reader.json | 595 ++++++++++++++++++ .../DropERC721Reader_Implementation.json | 453 +++++++++++++ .../DropERC721Reader_Proxy.json | 290 +++++++++ .../38c6bf91dbc1d60a5bc376d132d458fc.json | 143 +++++ .../e91e428fad7f11da8f23baddfcf53d1d.json | 56 ++ 7 files changed, 1812 insertions(+) create mode 100644 projects/thridweb-query/deployments/polygon_amoy_testnet/.chainId create mode 100644 projects/thridweb-query/deployments/polygon_amoy_testnet/DefaultProxyAdmin.json create mode 100644 projects/thridweb-query/deployments/polygon_amoy_testnet/DropERC721Reader.json create mode 100644 projects/thridweb-query/deployments/polygon_amoy_testnet/DropERC721Reader_Implementation.json create mode 100644 projects/thridweb-query/deployments/polygon_amoy_testnet/DropERC721Reader_Proxy.json create mode 100644 projects/thridweb-query/deployments/polygon_amoy_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json create mode 100644 projects/thridweb-query/deployments/polygon_amoy_testnet/solcInputs/e91e428fad7f11da8f23baddfcf53d1d.json diff --git a/projects/thridweb-query/deployments/polygon_amoy_testnet/.chainId b/projects/thridweb-query/deployments/polygon_amoy_testnet/.chainId new file mode 100644 index 000000000..b8ca3095d --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_amoy_testnet/.chainId @@ -0,0 +1 @@ +80002 \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon_amoy_testnet/DefaultProxyAdmin.json b/projects/thridweb-query/deployments/polygon_amoy_testnet/DefaultProxyAdmin.json new file mode 100644 index 000000000..24a44b841 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_amoy_testnet/DefaultProxyAdmin.json @@ -0,0 +1,274 @@ +{ + "address": "0x3d3c8f3aCcf388c3618BbE80598692B6d15bd4D5", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0x5e9404079f53aef23db0ffed1694fd8aef899b6f0108401451cd9038310ac336", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x3d3c8f3aCcf388c3618BbE80598692B6d15bd4D5", + "transactionIndex": 0, + "gasUsed": "644163", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000004000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000002880001000000000000000100000000000000000000020000000000000000000800000000000000000080000000000000500000000000004000000000000000000000000000000000000000000000000000200000000000000000000000000400000000000000000000010000000000004000000000000000000001000000080000000000000000000000100000000020000000000000000000000000000000000000000000000000000000000000100000", + "blockHash": "0x11531ea078dcc0bccc30488926ce8099d4700bfaf54b39201a0a7b1784993131", + "transactionHash": "0x5e9404079f53aef23db0ffed1694fd8aef899b6f0108401451cd9038310ac336", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 11191499, + "transactionHash": "0x5e9404079f53aef23db0ffed1694fd8aef899b6f0108401451cd9038310ac336", + "address": "0x3d3c8f3aCcf388c3618BbE80598692B6d15bd4D5", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x11531ea078dcc0bccc30488926ce8099d4700bfaf54b39201a0a7b1784993131" + }, + { + "transactionIndex": 0, + "blockNumber": 11191499, + "transactionHash": "0x5e9404079f53aef23db0ffed1694fd8aef899b6f0108401451cd9038310ac336", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x00000000000000000000000004ba3ef4c023c1006019a0f9baf6e70455e41fcf" + ], + "data": "0x0000000000000000000000000000000000000000000000000046f1bf771a7daa0000000000000000000000000000000000000000000000000197b3b7b614e936000000000000000000000000000000000000000000000119e2745525bfd3ec400000000000000000000000000000000000000000000000000150c1f83efa6b8c000000000000000000000000000000000000000000000119e2bb46e536ee69ea", + "logIndex": 1, + "blockHash": "0x11531ea078dcc0bccc30488926ce8099d4700bfaf54b39201a0a7b1784993131" + } + ], + "blockNumber": 11191499, + "cumulativeGasUsed": "644163", + "status": 1, + "byzantium": true + }, + "args": [ + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 1599, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon_amoy_testnet/DropERC721Reader.json b/projects/thridweb-query/deployments/polygon_amoy_testnet/DropERC721Reader.json new file mode 100644 index 000000000..b435fc1a7 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_amoy_testnet/DropERC721Reader.json @@ -0,0 +1,595 @@ +{ + "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "enum DropERC721Reader.FeeType", + "name": "feeType", + "type": "uint8" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "enum DropERC721Reader.FeeType", + "name": "feeType", + "type": "uint8" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "transactionIndex": 0, + "gasUsed": "797894", + "logsBloom": "0x000000000000000000000000800000004000000020000000008000000000000000000000000000000000000000000000000080000000000000000000400000000000000000000000000000000000028800010000000000000001000000000000000000000200009000000000000008000000008000000000800000000000005100000000000000000000000000000000000000000000800000000000008000002000000000000000000000000004000000000000000000000000000000000040000000200000000000010000000c0000000100000400000000500000002020000000000000000000000000000000000000000000000000000000000000100000", + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f", + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 11191504, + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000012b372153249f006f756d0668fcdbd8fbd8b0a15" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f" + }, + { + "transactionIndex": 0, + "blockNumber": 11191504, + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f" + }, + { + "transactionIndex": 0, + "blockNumber": 11191504, + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f" + }, + { + "transactionIndex": 0, + "blockNumber": 11191504, + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f" + }, + { + "transactionIndex": 0, + "blockNumber": 11191504, + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d3c8f3accf388c3618bbe80598692b6d15bd4d5", + "logIndex": 4, + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f" + }, + { + "transactionIndex": 0, + "blockNumber": 11191504, + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x0000000000000000000000004631753190f2f5a15a7ba172bbac102b7d95fa22" + ], + "data": "0x0000000000000000000000000000000000000000000000000057e0176241b6d400000000000000000000000000000000000000000000000000c89dfe1d5b78d100000000000000000000000000000000000000000000018f2db7e51c7b20e4910000000000000000000000000000000000000000000000000070bde6bb19c1fd00000000000000000000000000000000000000000000018f2e0fc533dd629b65", + "logIndex": 5, + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f" + } + ], + "blockNumber": 11191504, + "cumulativeGasUsed": "797894", + "status": 1, + "byzantium": true + }, + "args": [ + "0x12B372153249F006F756d0668fCDBD8fbD8b0a15", + "0x3d3c8f3aCcf388c3618BbE80598692B6d15bd4D5", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x0000000000000000000000000000000000000000", + "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4" + ] + }, + "implementation": "0x12B372153249F006F756d0668fCDBD8fbD8b0a15", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon_amoy_testnet/DropERC721Reader_Implementation.json b/projects/thridweb-query/deployments/polygon_amoy_testnet/DropERC721Reader_Implementation.json new file mode 100644 index 000000000..3fe893a67 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_amoy_testnet/DropERC721Reader_Implementation.json @@ -0,0 +1,453 @@ +{ + "address": "0x12B372153249F006F756d0668fCDBD8fbD8b0a15", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_dropERC721", + "type": "address" + }, + { + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "getAllData", + "outputs": [ + { + "internalType": "uint256", + "name": "activeClaimConditionIndex", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startTimestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxClaimableSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyClaimed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quantityLimitPerWallet", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "pricePerToken", + "type": "uint256" + }, + { + "internalType": "address", + "name": "currency", + "type": "address" + }, + { + "internalType": "string", + "name": "metadata", + "type": "string" + } + ], + "internalType": "struct IDropERC721.ClaimCondition[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "totalMinted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "claimedByUser", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxTotalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToMint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nextTokenIdToClaim", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "internalType": "string", + "name": "contractURI", + "type": "string" + }, + { + "internalType": "uint256", + "name": "baseURICount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "userBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "blockTimeStamp", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "enum DropERC721Reader.FeeType", + "name": "feeType", + "type": "uint8" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "defaultRoyaltyInfo", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "enum DropERC721Reader.FeeType", + "name": "feeType", + "type": "uint8" + } + ], + "internalType": "struct DropERC721Reader.FeeData", + "name": "platformFeeInfo", + "type": "tuple" + } + ], + "internalType": "struct DropERC721Reader.GlobalData", + "name": "globalData", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_native1", + "type": "address" + }, + { + "internalType": "address", + "name": "_native2", + "type": "address" + }, + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "native1", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "native2", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "transactionHash": "0x35c6e2fd6e672064c71bfc894e13691db3c58e667cd02516ccfbe638bef9ce0c", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x12B372153249F006F756d0668fCDBD8fbD8b0a15", + "transactionIndex": 0, + "gasUsed": "1236134", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000880000000000000000000100000000000000000000000000000000000000000000000000000000000080000000000000100000000000004000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000080000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "blockHash": "0x7efc1f7c0772912a0bdab4684675735420730a371d9648ea2bf4aa17cfd9ff61", + "transactionHash": "0x35c6e2fd6e672064c71bfc894e13691db3c58e667cd02516ccfbe638bef9ce0c", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 11191502, + "transactionHash": "0x35c6e2fd6e672064c71bfc894e13691db3c58e667cd02516ccfbe638bef9ce0c", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x00000000000000000000000004ba3ef4c023c1006019a0f9baf6e70455e41fcf" + ], + "data": "0x000000000000000000000000000000000000000000000000008823fa1ff095140000000000000000000000000000000000000000000000000150c1f83e66fb9f000000000000000000000000000000000000000000000119e3e6904d6d924a7e00000000000000000000000000000000000000000000000000c89dfe1e76668b000000000000000000000000000000000000000000000119e46eb4478d82df92", + "logIndex": 0, + "blockHash": "0x7efc1f7c0772912a0bdab4684675735420730a371d9648ea2bf4aa17cfd9ff61" + } + ], + "blockNumber": 11191502, + "cumulativeGasUsed": "1236134", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "solcInputHash": "e91e428fad7f11da8f23baddfcf53d1d", + "metadata": "{\"compiler\":{\"version\":\"0.8.12+commit.f00d7308\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_dropERC721\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_claimer\",\"type\":\"address\"}],\"name\":\"getAllData\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activeClaimConditionIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"startTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxClaimableSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"supplyClaimed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"quantityLimitPerWallet\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"pricePerToken\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"currency\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"internalType\":\"struct IDropERC721.ClaimCondition[]\",\"name\":\"conditions\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"totalMinted\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"claimedByUser\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToMint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nextTokenIdToClaim\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"contractURI\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"baseURICount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"userBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockTimeStamp\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"enum DropERC721Reader.FeeType\",\"name\":\"feeType\",\"type\":\"uint8\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"defaultRoyaltyInfo\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"enum DropERC721Reader.FeeType\",\"name\":\"feeType\",\"type\":\"uint8\"}],\"internalType\":\"struct DropERC721Reader.FeeData\",\"name\":\"platformFeeInfo\",\"type\":\"tuple\"}],\"internalType\":\"struct DropERC721Reader.GlobalData\",\"name\":\"globalData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_native1\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_native2\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native1\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"native2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/drop-reader/DropERC721Reader.sol\":\"DropERC721Reader\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\\n * initialization step. This is essential to configure modules that are added through upgrades and that require\\n * initialization.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title ERC20 interface\\n * @dev see https://github.com/ethereum/EIPs/issues/20\\n */\\ninterface IERC20 {\\n function totalSupply() external view returns (uint256);\\n\\n function balanceOf(address who) external view returns (uint256);\\n\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n function transfer(address to, uint256 value) external returns (bool);\\n\\n function approve(address spender, uint256 value) external returns (bool);\\n\\n function transferFrom(\\n address from,\\n address to,\\n uint256 value\\n ) external returns (bool);\\n\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x5bdd9dd97ba7d9d7c9a2953db287e4d9d7fa93a27a96bc2e72a8da4919b6f7ff\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/DropERC721Reader.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\npragma solidity ^0.8.11;\\n\\n/// @author rarible\\n\\n// /$$$$$$$ /$$ /$$ /$$\\n// | $$__ $$ |__/| $$ | $$\\n// | $$ \\\\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\\n// | $$__ $$ /$$$$$$$| $$ \\\\__/| $$| $$ \\\\ $$| $$| $$$$$$$$\\n// | $$ \\\\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\\n// |__/ |__/ \\\\_______/|__/ |__/|_______/ |__/ \\\\_______/\\n\\n\\n// ========== Features ==========\\n\\nimport \\\"hardhat/console.sol\\\";\\nimport \\\"@thirdweb-dev/contracts/eip/interface/IERC20.sol\\\";\\n\\nimport \\\"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\\\";\\nimport \\\"./IDropERC721.sol\\\";\\n\\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\\n\\n enum FeeType {\\n Bps,\\n Flat\\n }\\n\\n struct FeeData {\\n address recipient;\\n uint256 value;\\n FeeType feeType;\\n }\\n\\n struct GlobalData {\\n uint256 totalMinted;\\n uint256 claimedByUser;\\n uint256 totalSupply;\\n uint256 maxTotalSupply;\\n uint256 nextTokenIdToMint;\\n uint256 nextTokenIdToClaim;\\n string name;\\n string symbol;\\n string contractURI;\\n uint256 baseURICount;\\n uint256 userBalance;\\n uint256 blockTimeStamp;\\n FeeData defaultRoyaltyInfo;\\n FeeData platformFeeInfo;\\n }\\n\\n address public native1;\\n address public native2;\\n\\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\\n __Ownable_init();\\n native1 = _native1;\\n native2 = _native2;\\n // Transfer ownership to the initial owner provided\\n _transferOwnership(initialOwner);\\n }\\n\\n function getAllData(\\n address _dropERC721,\\n address _claimer\\n ) public view returns (\\n uint256 activeClaimConditionIndex,\\n IDropERC721.ClaimCondition[] memory conditions,\\n GlobalData memory globalData\\n ) {\\n IDropERC721 drop = IDropERC721(_dropERC721);\\n\\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\\n uint256 _claimedByUser = 0;\\n if(stopConditionIndex != 0) {\\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\\n activeClaimConditionIndex = _activeClaimConditionIndex;\\n } catch {\\n activeClaimConditionIndex = 0;\\n }\\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\\n \\n for (uint i = 0; i < stopConditionIndex; i++) {\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\\n conditions[i] = condition;\\n }\\n }\\n\\n DropERC721Reader.GlobalData memory _globalData;\\n if(stopConditionIndex > 0) {\\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\\n if(condition.currency == native1 || condition.currency == native2) {\\n _globalData.userBalance = _claimer.balance;\\n } else {\\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\\n }\\n\\n }\\n\\n _globalData.totalMinted = drop.totalMinted();\\n _globalData.claimedByUser = _claimedByUser;\\n _globalData.totalSupply = drop.totalSupply();\\n try drop.maxTotalSupply() returns (uint maxTotalSupply) {\\n _globalData.maxTotalSupply = maxTotalSupply;\\n } catch {\\n _globalData.maxTotalSupply = 0;\\n } \\n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\\n _globalData.name = drop.name();\\n _globalData.symbol = drop.symbol();\\n _globalData.contractURI = drop.contractURI();\\n try drop.getBaseURICount() returns (uint baseURICount) {\\n _globalData.baseURICount = baseURICount;\\n } catch {\\n _globalData.baseURICount = 0;\\n }\\n \\n _globalData.blockTimeStamp = block.timestamp;\\n\\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\\n _globalData.defaultRoyaltyInfo.value = rBps;\\n _globalData.defaultRoyaltyInfo.feeType = FeeType.Bps;\\n\\n IDropERC721.PlatformFeeType feeType = IDropERC721.PlatformFeeType.Bps;\\n try drop.getPlatformFeeType() returns (IDropERC721.PlatformFeeType resultFeeType) {\\n feeType = resultFeeType;\\n } catch {\\n feeType = IDropERC721.PlatformFeeType.Bps;\\n }\\n \\n if (feeType == IDropERC721.PlatformFeeType.Flat) {\\n (address pAddress, uint256 pValue) = drop.getFlatPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.value = pValue;\\n _globalData.platformFeeInfo.feeType = FeeType.Flat;\\n } else {\\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\\n _globalData.platformFeeInfo.recipient = pAddress;\\n _globalData.platformFeeInfo.value = pBps;\\n _globalData.platformFeeInfo.feeType = FeeType.Bps;\\n }\\n\\n return (activeClaimConditionIndex, conditions, _globalData);\\n }\\n}\",\"keccak256\":\"0xe93497de83b411e5b2e3ee00eb8afb82f56477ae70870fa1a70f7f642223fb16\",\"license\":\"Apache-2.0\"},\"contracts/drop-reader/IDropERC721.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDropERC721 {\\n /**\\n * @param proof Proof of concerned wallet's inclusion in an allowlist.\\n * @param quantityLimitPerWallet The total quantity of tokens the allowlisted wallet is eligible to claim over time.\\n * @param pricePerToken The price per token the allowlisted wallet must pay to claim tokens.\\n * @param currency The currency in which the allowlisted wallet must pay the price for claiming tokens.\\n */\\n struct AllowlistProof {\\n bytes32[] proof;\\n uint256 quantityLimitPerWallet;\\n uint256 pricePerToken;\\n address currency;\\n }\\n\\n // This struct describes a single claim condition\\n struct ClaimCondition {\\n uint256 startTimestamp;\\n uint256 maxClaimableSupply;\\n uint256 supplyClaimed;\\n uint256 quantityLimitPerWallet;\\n bytes32 merkleRoot;\\n uint256 pricePerToken;\\n address currency;\\n string metadata;\\n }\\n\\n // Events\\n event ClaimConditionsUpdated(\\n ClaimCondition[] claimConditions,\\n bool resetEligibility\\n );\\n\\n event TokensClaimed(\\n uint256 indexed claimConditionIndex,\\n address indexed claimer,\\n address indexed receiver,\\n uint256 startTokenId,\\n uint256 quantityClaimed\\n );\\n\\n // Enums\\n enum PlatformFeeType {\\n Bps,\\n Flat\\n }\\n\\n // View functions for global data\\n function totalMinted() external view returns (uint256);\\n function totalSupply() external view returns (uint256);\\n function maxTotalSupply() external view returns (uint256);\\n function nextTokenIdToMint() external view returns (uint256);\\n function nextTokenIdToClaim() external view returns (uint256);\\n function name() external view returns (string memory);\\n function symbol() external view returns (string memory);\\n function contractURI() external view returns (string memory);\\n function getBaseURICount() external view returns (uint256);\\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\\n function getPlatformFeeType() external view returns (PlatformFeeType);\\n function getPlatformFeeInfo() external view returns (address, uint16);\\n function getFlatPlatformFeeInfo() external view returns (address, uint256);\\n\\n // Specific claim condition methods\\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\\n function getActiveClaimConditionId() external view returns (uint256);\\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\\n function verifyClaim(\\n uint256 _conditionId,\\n address _claimer,\\n uint256 _quantity,\\n address _currency,\\n uint256 _pricePerToken,\\n AllowlistProof calldata _allowlistProof\\n ) external view returns (bool isOverride);\\n}\\n\",\"keccak256\":\"0x600949e7a3959bc074f0dd43a557b896c764c0cd8c693d0cc4b752aa21e1c609\",\"license\":\"MIT\"},\"hardhat/console.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity >=0.4.22 <0.9.0;\\n\\nlibrary console {\\n address constant CONSOLE_ADDRESS =\\n 0x000000000000000000636F6e736F6c652e6c6f67;\\n\\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\\n address consoleAddress = CONSOLE_ADDRESS;\\n /// @solidity memory-safe-assembly\\n assembly {\\n pop(\\n staticcall(\\n gas(),\\n consoleAddress,\\n add(payload, 32),\\n mload(payload),\\n 0,\\n 0\\n )\\n )\\n }\\n }\\n\\n function _castToPure(\\n function(bytes memory) internal view fnIn\\n ) internal pure returns (function(bytes memory) pure fnOut) {\\n assembly {\\n fnOut := fnIn\\n }\\n }\\n\\n function _sendLogPayload(bytes memory payload) internal pure {\\n _castToPure(_sendLogPayloadImplementation)(payload);\\n }\\n\\n function log() internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log()\\\"));\\n }\\n function logInt(int256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(int256)\\\", p0));\\n }\\n\\n function logUint(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function logString(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function logBool(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function logAddress(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function logBytes(bytes memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes)\\\", p0));\\n }\\n\\n function logBytes1(bytes1 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes1)\\\", p0));\\n }\\n\\n function logBytes2(bytes2 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes2)\\\", p0));\\n }\\n\\n function logBytes3(bytes3 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes3)\\\", p0));\\n }\\n\\n function logBytes4(bytes4 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes4)\\\", p0));\\n }\\n\\n function logBytes5(bytes5 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes5)\\\", p0));\\n }\\n\\n function logBytes6(bytes6 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes6)\\\", p0));\\n }\\n\\n function logBytes7(bytes7 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes7)\\\", p0));\\n }\\n\\n function logBytes8(bytes8 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes8)\\\", p0));\\n }\\n\\n function logBytes9(bytes9 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes9)\\\", p0));\\n }\\n\\n function logBytes10(bytes10 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes10)\\\", p0));\\n }\\n\\n function logBytes11(bytes11 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes11)\\\", p0));\\n }\\n\\n function logBytes12(bytes12 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes12)\\\", p0));\\n }\\n\\n function logBytes13(bytes13 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes13)\\\", p0));\\n }\\n\\n function logBytes14(bytes14 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes14)\\\", p0));\\n }\\n\\n function logBytes15(bytes15 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes15)\\\", p0));\\n }\\n\\n function logBytes16(bytes16 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes16)\\\", p0));\\n }\\n\\n function logBytes17(bytes17 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes17)\\\", p0));\\n }\\n\\n function logBytes18(bytes18 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes18)\\\", p0));\\n }\\n\\n function logBytes19(bytes19 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes19)\\\", p0));\\n }\\n\\n function logBytes20(bytes20 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes20)\\\", p0));\\n }\\n\\n function logBytes21(bytes21 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes21)\\\", p0));\\n }\\n\\n function logBytes22(bytes22 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes22)\\\", p0));\\n }\\n\\n function logBytes23(bytes23 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes23)\\\", p0));\\n }\\n\\n function logBytes24(bytes24 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes24)\\\", p0));\\n }\\n\\n function logBytes25(bytes25 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes25)\\\", p0));\\n }\\n\\n function logBytes26(bytes26 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes26)\\\", p0));\\n }\\n\\n function logBytes27(bytes27 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes27)\\\", p0));\\n }\\n\\n function logBytes28(bytes28 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes28)\\\", p0));\\n }\\n\\n function logBytes29(bytes29 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes29)\\\", p0));\\n }\\n\\n function logBytes30(bytes30 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes30)\\\", p0));\\n }\\n\\n function logBytes31(bytes31 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes31)\\\", p0));\\n }\\n\\n function logBytes32(bytes32 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bytes32)\\\", p0));\\n }\\n\\n function log(uint256 p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256)\\\", p0));\\n }\\n\\n function log(string memory p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string)\\\", p0));\\n }\\n\\n function log(bool p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool)\\\", p0));\\n }\\n\\n function log(address p0) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address)\\\", p0));\\n }\\n\\n function log(uint256 p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool)\\\", p0, p1));\\n }\\n\\n function log(string memory p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address)\\\", p0, p1));\\n }\\n\\n function log(bool p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256)\\\", p0, p1));\\n }\\n\\n function log(bool p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string)\\\", p0, p1));\\n }\\n\\n function log(bool p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool)\\\", p0, p1));\\n }\\n\\n function log(bool p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address)\\\", p0, p1));\\n }\\n\\n function log(address p0, uint256 p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256)\\\", p0, p1));\\n }\\n\\n function log(address p0, string memory p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string)\\\", p0, p1));\\n }\\n\\n function log(address p0, bool p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool)\\\", p0, p1));\\n }\\n\\n function log(address p0, address p1) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address)\\\", p0, p1));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(string memory p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(bool p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, uint256 p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, string memory p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, bool p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, uint256 p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, string memory p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, bool p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool)\\\", p0, p1, p2));\\n }\\n\\n function log(address p0, address p1, address p2) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address)\\\", p0, p1, p2));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(uint256,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(string memory p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(string,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(bool p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(bool,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,uint256,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, string memory p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,string,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, bool p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,bool,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,uint256,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, string memory p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,string,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, bool p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,bool,address)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,uint256)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, string memory p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,string)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, bool p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,bool)\\\", p0, p1, p2, p3));\\n }\\n\\n function log(address p0, address p1, address p2, address p3) internal pure {\\n _sendLogPayload(abi.encodeWithSignature(\\\"log(address,address,address,address)\\\", p0, p1, p2, p3));\\n }\\n\\n}\\n\",\"keccak256\":\"0x7434453e6d3b7d0e5d0eb7846ffdbc27f0ccf3b163591263739b628074dc103a\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50611566806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610f02565b61013c565b6040516100b3939291906110ce565b60665461009f906001600160a01b031681565b61008a6101103660046111a5565b610b70565b61008a6101233660046111f0565b610cc2565b610130610d3b565b61013a6000610d95565b565b60006060610148610e41565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b19190611214565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f1916820190925261021691810190611238565b60015b6102265760009650610229565b96505b8167ffffffffffffffff81111561024257610242611251565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103459190810190611329565b90508088838151811061035a5761035a6113e4565b6020026020010181905250508080610371906113fa565b9150506102cd565b505b610383610e41565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa9190611238565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d9190810190611329565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e9190611238565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105999190611238565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106089190611238565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561066b575060408051601f3d908101601f1916820190925261066891810190611238565b60015b61067b5760006060820152610681565b60608201525b846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e39190611238565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e9190611238565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610795573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107bd9190810190611423565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082b9190810190611423565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa158015610871573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108999190810190611423565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108fc575060408051601f3d908101601f191682019092526108f991810190611238565b60015b61090d576000610120820152610914565b6101208201525b4281610160018181525050600080866001600160a01b031663b24f2d396040518163ffffffff1660e01b81526004016040805180830381865afa15801561095f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109839190611460565b610180850180516001600160a01b0384169052805161ffff831660209091015251919350915060009060400181815250506000876001600160a01b031663f28083c36040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a10575060408051601f3d908101601f19168201909252610a0d91810190611496565b60015b610a1c57506000610a1f565b90505b6001816001811115610a3357610a33610f93565b1415610aca57600080896001600160a01b031663e57553da6040518163ffffffff1660e01b81526004016040805180830381865afa158015610a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9d91906114b7565b6101a0880180516001600160a01b039390931690925281516020015251600160409091015250610b5f9050565b600080896001600160a01b031663d45573f66040518163ffffffff1660e01b81526004016040805180830381865afa158015610b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e9190611460565b6101a0880180516001600160a01b0393909316909252815161ffff9190911660209091015251600060409091015250505b509196505050505050509250925092565b600054610100900460ff1615808015610b905750600054600160ff909116105b80610baa5750303b158015610baa575060005460ff166001145b610c125760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610c35576000805461ff0019166101001790555b610c3d610de7565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610c7682610d95565b8015610cbc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610cca610d3b565b6001600160a01b038116610d2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c09565b610d3881610d95565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c09565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610e0e5760405162461bcd60e51b8152600401610c09906114e5565b61013a600054610100900460ff16610e385760405162461bcd60e51b8152600401610c09906114e5565b61013a33610d95565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610ec260408051606081018252600080825260208201819052909182015290565b8152602001610ee860408051606081018252600080825260208201819052909182015290565b905290565b6001600160a01b0381168114610d3857600080fd5b60008060408385031215610f1557600080fd5b8235610f2081610eed565b91506020830135610f3081610eed565b809150509250929050565b60005b83811015610f56578181015183820152602001610f3e565b83811115610cbc5750506000910152565b60008151808452610f7f816020860160208601610f3b565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b80516001600160a01b0316825260208082015190830152604081015160028110610fe357634e487b7160e01b600052602160045260246000fd5b806040840152505050565b6000610240825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c086015261104082860182610f67565b91505060e083015184820360e086015261105a8282610f67565b91505061010080840151858303828701526110758382610f67565b92505050610120808401518186015250610140808401518186015250610160808401518186015250610180808401516110b082870182610fa9565b50506101a08301516110c66101e0860182610fa9565b509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561118257898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061116e81860183610f67565b9688019694505050908501906001016110fc565b50508781036040890152611196818a610fee565b9b9a5050505050505050505050565b6000806000606084860312156111ba57600080fd5b83356111c581610eed565b925060208401356111d581610eed565b915060408401356111e581610eed565b809150509250925092565b60006020828403121561120257600080fd5b813561120d81610eed565b9392505050565b6000806040838503121561122757600080fd5b505080516020909101519092909150565b60006020828403121561124a57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561128b5761128b611251565b60405290565b805161129c81610eed565b919050565b600082601f8301126112b257600080fd5b815167ffffffffffffffff808211156112cd576112cd611251565b604051601f8301601f19908116603f011681019082821181831017156112f5576112f5611251565b8160405283815286602085880101111561130e57600080fd5b61131f846020830160208901610f3b565b9695505050505050565b60006020828403121561133b57600080fd5b815167ffffffffffffffff8082111561135357600080fd5b90830190610100828603121561136857600080fd5b611370611267565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201526113b260c08401611291565b60c082015260e0830151828111156113c957600080fd5b6113d5878286016112a1565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561141c57634e487b7160e01b600052601160045260246000fd5b5060010190565b60006020828403121561143557600080fd5b815167ffffffffffffffff81111561144c57600080fd5b611458848285016112a1565b949350505050565b6000806040838503121561147357600080fd5b825161147e81610eed565b602084015190925061ffff81168114610f3057600080fd5b6000602082840312156114a857600080fd5b81516002811061120d57600080fd5b600080604083850312156114ca57600080fd5b82516114d581610eed565b6020939093015192949293505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220baf1a28dbc8835916a123c5acd33cdba3b66e67ce684e05283155d8de27348da64736f6c634300080c0033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063ab8a4bef1161005b578063ab8a4bef146100cd578063bfa81914146100ef578063c0c53b8b14610102578063f2fde38b1461011557600080fd5b8063715018a6146100825780638bdbe5291461008c5780638da5cb5b146100bc575b600080fd5b61008a610128565b005b60655461009f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6033546001600160a01b031661009f565b6100e06100db366004610f02565b61013c565b6040516100b3939291906110ce565b60665461009f906001600160a01b031681565b61008a6101103660046111a5565b610b70565b61008a6101233660046111f0565b610cc2565b610130610d3b565b61013a6000610d95565b565b60006060610148610e41565b6000859050600080826001600160a01b031663d637ed596040518163ffffffff1660e01b81526004016040805180830381865afa15801561018d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101b19190611214565b9150915060008160001461037b57836001600160a01b031663c68907de6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610219575060408051601f3d908101601f1916820190925261021691810190611238565b60015b6102265760009650610229565b96505b8167ffffffffffffffff81111561024257610242611251565b6040519080825280602002602001820160405280156102c757816020015b6102b460405180610100016040528060008152602001600081526020016000815260200160008152602001600080191681526020016000815260200160006001600160a01b03168152602001606081525090565b8152602001906001900390816102605790505b50955060005b8281101561037957604051631be24d3d60e21b8152600481018290526000906001600160a01b03871690636f8934f490602401600060405180830381865afa15801561031d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103459190810190611329565b90508088838151811061035a5761035a6113e4565b6020026020010181905250508080610371906113fa565b9150506102cd565b505b610383610e41565b82156105375760405163ad1eefc560e01b8152600481018990526001600160a01b038a8116602483015286169063ad1eefc590604401602060405180830381865afa1580156103d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fa9190611238565b604051631be24d3d60e21b8152600481018a90529092506000906001600160a01b03871690636f8934f490602401600060405180830381865afa158015610445573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261046d9190810190611329565b60655460c08201519192506001600160a01b03918216911614806104a3575060665460c08201516001600160a01b039081169116145b156104be576001600160a01b038a1631610140830152610535565b60c08101516040516370a0823160e01b81526001600160a01b038c81166004830152909116906370a0823190602401602060405180830381865afa15801561050a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052e9190611238565b6101408301525b505b846001600160a01b031663a2309ff86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610575573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105999190611238565b81526020808201839052604080516318160ddd60e01b815290516001600160a01b038816926318160ddd92600480820193918290030181865afa1580156105e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106089190611238565b816040018181525050846001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561066b575060408051601f3d908101601f1916820190925261066891810190611238565b60015b61067b5760006060820152610681565b60608201525b846001600160a01b0316633b1475a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e39190611238565b816080018181525050846001600160a01b031663acd083f86040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074e9190611238565b8160a0018181525050846001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610795573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107bd9190810190611423565b8160c00181905250846001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610803573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261082b9190810190611423565b8160e00181905250846001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa158015610871573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108999190810190611423565b816101000181905250846001600160a01b03166363b45e2d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156108fc575060408051601f3d908101601f191682019092526108f991810190611238565b60015b61090d576000610120820152610914565b6101208201525b4281610160018181525050600080866001600160a01b031663b24f2d396040518163ffffffff1660e01b81526004016040805180830381865afa15801561095f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109839190611460565b610180850180516001600160a01b0384169052805161ffff831660209091015251919350915060009060400181815250506000876001600160a01b031663f28083c36040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610a10575060408051601f3d908101601f19168201909252610a0d91810190611496565b60015b610a1c57506000610a1f565b90505b6001816001811115610a3357610a33610f93565b1415610aca57600080896001600160a01b031663e57553da6040518163ffffffff1660e01b81526004016040805180830381865afa158015610a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9d91906114b7565b6101a0880180516001600160a01b039390931690925281516020015251600160409091015250610b5f9050565b600080896001600160a01b031663d45573f66040518163ffffffff1660e01b81526004016040805180830381865afa158015610b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e9190611460565b6101a0880180516001600160a01b0393909316909252815161ffff9190911660209091015251600060409091015250505b509196505050505050509250925092565b600054610100900460ff1615808015610b905750600054600160ff909116105b80610baa5750303b158015610baa575060005460ff166001145b610c125760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610c35576000805461ff0019166101001790555b610c3d610de7565b606580546001600160a01b038087166001600160a01b0319928316179092556066805492861692909116919091179055610c7682610d95565b8015610cbc576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610cca610d3b565b6001600160a01b038116610d2f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c09565b610d3881610d95565b50565b6033546001600160a01b0316331461013a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c09565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610e0e5760405162461bcd60e51b8152600401610c09906114e5565b61013a600054610100900460ff16610e385760405162461bcd60e51b8152600401610c09906114e5565b61013a33610d95565b604051806101c00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001600081526020016000815260200160008152602001610ec260408051606081018252600080825260208201819052909182015290565b8152602001610ee860408051606081018252600080825260208201819052909182015290565b905290565b6001600160a01b0381168114610d3857600080fd5b60008060408385031215610f1557600080fd5b8235610f2081610eed565b91506020830135610f3081610eed565b809150509250929050565b60005b83811015610f56578181015183820152602001610f3e565b83811115610cbc5750506000910152565b60008151808452610f7f816020860160208601610f3b565b601f01601f19169290920160200192915050565b634e487b7160e01b600052602160045260246000fd5b80516001600160a01b0316825260208082015190830152604081015160028110610fe357634e487b7160e01b600052602160045260246000fd5b806040840152505050565b6000610240825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c08301518160c086015261104082860182610f67565b91505060e083015184820360e086015261105a8282610f67565b91505061010080840151858303828701526110758382610f67565b92505050610120808401518186015250610140808401518186015250610160808401518186015250610180808401516110b082870182610fa9565b50506101a08301516110c66101e0860182610fa9565b509392505050565b6000606080830186845260208281860152818751808452608093508387019150838160051b880101838a0160005b8381101561118257898303607f190185528151805184528681015187850152604080820151908501528881015189850152878101518885015260a0808201519085015260c0808201516001600160a01b03169085015260e0908101516101009185018290529061116e81860183610f67565b9688019694505050908501906001016110fc565b50508781036040890152611196818a610fee565b9b9a5050505050505050505050565b6000806000606084860312156111ba57600080fd5b83356111c581610eed565b925060208401356111d581610eed565b915060408401356111e581610eed565b809150509250925092565b60006020828403121561120257600080fd5b813561120d81610eed565b9392505050565b6000806040838503121561122757600080fd5b505080516020909101519092909150565b60006020828403121561124a57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b604051610100810167ffffffffffffffff8111828210171561128b5761128b611251565b60405290565b805161129c81610eed565b919050565b600082601f8301126112b257600080fd5b815167ffffffffffffffff808211156112cd576112cd611251565b604051601f8301601f19908116603f011681019082821181831017156112f5576112f5611251565b8160405283815286602085880101111561130e57600080fd5b61131f846020830160208901610f3b565b9695505050505050565b60006020828403121561133b57600080fd5b815167ffffffffffffffff8082111561135357600080fd5b90830190610100828603121561136857600080fd5b611370611267565b825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201526113b260c08401611291565b60c082015260e0830151828111156113c957600080fd5b6113d5878286016112a1565b60e08301525095945050505050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561141c57634e487b7160e01b600052601160045260246000fd5b5060010190565b60006020828403121561143557600080fd5b815167ffffffffffffffff81111561144c57600080fd5b611458848285016112a1565b949350505050565b6000806040838503121561147357600080fd5b825161147e81610eed565b602084015190925061ffff81168114610f3057600080fd5b6000602082840312156114a857600080fd5b81516002811061120d57600080fd5b600080604083850312156114ca57600080fd5b82516114d581610eed565b6020939093015192949293505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea2646970667358221220baf1a28dbc8835916a123c5acd33cdba3b66e67ce684e05283155d8de27348da64736f6c634300080c0033", + "devdoc": { + "kind": "dev", + "methods": { + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 138, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initialized", + "offset": 0, + "slot": "0", + "type": "t_uint8" + }, + { + "astId": 141, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_initializing", + "offset": 1, + "slot": "0", + "type": "t_bool" + }, + { + "astId": 566, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "1", + "type": "t_array(t_uint256)50_storage" + }, + { + "astId": 10, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "_owner", + "offset": 0, + "slot": "51", + "type": "t_address" + }, + { + "astId": 130, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "__gap", + "offset": 0, + "slot": "52", + "type": "t_array(t_uint256)49_storage" + }, + { + "astId": 691, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native1", + "offset": 0, + "slot": "101", + "type": "t_address" + }, + { + "astId": 693, + "contract": "contracts/drop-reader/DropERC721Reader.sol:DropERC721Reader", + "label": "native2", + "offset": 0, + "slot": "102", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + }, + "t_array(t_uint256)49_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[49]", + "numberOfBytes": "1568" + }, + "t_array(t_uint256)50_storage": { + "base": "t_uint256", + "encoding": "inplace", + "label": "uint256[50]", + "numberOfBytes": "1600" + }, + "t_bool": { + "encoding": "inplace", + "label": "bool", + "numberOfBytes": "1" + }, + "t_uint256": { + "encoding": "inplace", + "label": "uint256", + "numberOfBytes": "32" + }, + "t_uint8": { + "encoding": "inplace", + "label": "uint8", + "numberOfBytes": "1" + } + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon_amoy_testnet/DropERC721Reader_Proxy.json b/projects/thridweb-query/deployments/polygon_amoy_testnet/DropERC721Reader_Proxy.json new file mode 100644 index 000000000..b47d307bc --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_amoy_testnet/DropERC721Reader_Proxy.json @@ -0,0 +1,290 @@ +{ + "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "receipt": { + "to": null, + "from": "0xfb571F9da71D1aC33E069571bf5c67faDCFf18e4", + "contractAddress": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "transactionIndex": 0, + "gasUsed": "797894", + "logsBloom": "0x000000000000000000000000800000004000000020000000008000000000000000000000000000000000000000000000000080000000000000000000400000000000000000000000000000000000028800010000000000000001000000000000000000000200009000000000000008000000008000000000800000000000005100000000000000000000000000000000000000000000800000000000008000002000000000000000000000000004000000000000000000000000000000000040000000200000000000010000000c0000000100000400000000500000002020000000000000000000000000000000000000000000000000000000000000100000", + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f", + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "logs": [ + { + "transactionIndex": 0, + "blockNumber": 11191504, + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000012b372153249f006f756d0668fcdbd8fbd8b0a15" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f" + }, + { + "transactionIndex": 0, + "blockNumber": 11191504, + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f" + }, + { + "transactionIndex": 0, + "blockNumber": 11191504, + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f" + }, + { + "transactionIndex": 0, + "blockNumber": 11191504, + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f" + }, + { + "transactionIndex": 0, + "blockNumber": 11191504, + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "address": "0x4e045aBF1e239BfA224c8DCb8F889C3d447D3804", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000003d3c8f3accf388c3618bbe80598692b6d15bd4d5", + "logIndex": 4, + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f" + }, + { + "transactionIndex": 0, + "blockNumber": 11191504, + "transactionHash": "0xc99c18750e45ae01eb0062c854beed2a50f0411f94cf9b354dd62a4f1a182ddf", + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4", + "0x0000000000000000000000004631753190f2f5a15a7ba172bbac102b7d95fa22" + ], + "data": "0x0000000000000000000000000000000000000000000000000057e0176241b6d400000000000000000000000000000000000000000000000000c89dfe1d5b78d100000000000000000000000000000000000000000000018f2db7e51c7b20e4910000000000000000000000000000000000000000000000000070bde6bb19c1fd00000000000000000000000000000000000000000000018f2e0fc533dd629b65", + "logIndex": 5, + "blockHash": "0xbda32b12f5de1528301e957f4a5f3e888143078b2647c638acf2df2ad9ec3f7f" + } + ], + "blockNumber": 11191504, + "cumulativeGasUsed": "797894", + "status": 1, + "byzantium": true + }, + "args": [ + "0x12B372153249F006F756d0668fCDBD8fbD8b0a15", + "0x3d3c8f3aCcf388c3618BbE80598692B6d15bd4D5", + "0xc0c53b8b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000fb571f9da71d1ac33e069571bf5c67fadcff18e4" + ], + "numDeployments": 1, + "solcInputHash": "38c6bf91dbc1d60a5bc376d132d458fc", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\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 * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\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 function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon_amoy_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json b/projects/thridweb-query/deployments/polygon_amoy_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json new file mode 100644 index 000000000..d314de77e --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_amoy_testnet/solcInputs/38c6bf91dbc1d60a5bc376d132d458fc.json @@ -0,0 +1,143 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/diamond/Diamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n*\n* Implementation of a diamond.\n/******************************************************************************/\n\nimport {LibDiamond} from \"./libraries/LibDiamond.sol\";\nimport {IDiamondCut} from \"./interfaces/IDiamondCut.sol\";\n\ncontract Diamond {\n struct Initialization {\n address initContract;\n bytes initData;\n }\n\n /// @notice This construct a diamond contract\n /// @param _contractOwner the owner of the contract. With default DiamondCutFacet, this is the sole address allowed to make further cuts.\n /// @param _diamondCut the list of facet to add\n /// @param _initializations the list of initialization pair to execute. This allow to setup a contract with multiple level of independent initialization.\n constructor(\n address _contractOwner,\n IDiamondCut.FacetCut[] memory _diamondCut,\n Initialization[] memory _initializations\n ) payable {\n if (_contractOwner != address(0)) {\n LibDiamond.setContractOwner(_contractOwner);\n }\n\n LibDiamond.diamondCut(_diamondCut, address(0), \"\");\n\n for (uint256 i = 0; i < _initializations.length; i++) {\n LibDiamond.initializeDiamondCut(_initializations[i].initContract, _initializations[i].initData);\n }\n }\n\n // Find facet for function that is called and execute the\n // function if a facet is found and return any value.\n fallback() external payable {\n LibDiamond.DiamondStorage storage ds;\n bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;\n // get diamond storage\n assembly {\n ds.slot := position\n }\n // get facet from function selector\n address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;\n require(facet != address(0), \"Diamond: Function does not exist\");\n // Execute external function from facet using delegatecall and return any value.\n assembly {\n // copy function selector and any arguments\n calldatacopy(0, 0, calldatasize())\n // execute function call using the facet\n let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)\n // get any return value\n returndatacopy(0, 0, returndatasize())\n // return any return value or error back to the caller\n switch result\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n receive() external payable {}\n}\n" + }, + "solc_0.8/diamond/facets/DiamondCutFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\n\ncontract DiamondCutFacet is IDiamondCut {\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.diamondCut(_diamondCut, _init, _calldata);\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IDiamondLoupe } from \"../interfaces/IDiamondLoupe.sol\";\nimport { IERC165 } from \"../interfaces/IERC165.sol\";\n\ncontract DiamondLoupeFacet is IDiamondLoupe, IERC165 {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external override view returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external override view returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external override view returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external override view returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n\n // This implements ERC-165.\n function supportsInterface(bytes4 _interfaceId) external override view returns (bool) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n return ds.supportedInterfaces[_interfaceId];\n }\n}\n" + }, + "solc_0.8/diamond/facets/DiamondLoupeFacetWithoutSupportsInterface.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IDiamondLoupe} from \"../interfaces/IDiamondLoupe.sol\";\n\ncontract DiamondLoupeFacetWithoutSupportsInterface is IDiamondLoupe {\n // Diamond Loupe Functions\n ////////////////////////////////////////////////////////////////////\n /// These functions are expected to be called frequently by tools.\n //\n // struct Facet {\n // address facetAddress;\n // bytes4[] functionSelectors;\n // }\n\n /// @notice Gets all facets and their selectors.\n /// @return facets_ Facet\n function facets() external view override returns (Facet[] memory facets_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n uint256 numFacets = ds.facetAddresses.length;\n facets_ = new Facet[](numFacets);\n for (uint256 i; i < numFacets; i++) {\n address facetAddress_ = ds.facetAddresses[i];\n facets_[i].facetAddress = facetAddress_;\n facets_[i].functionSelectors = ds.facetFunctionSelectors[facetAddress_].functionSelectors;\n }\n }\n\n /// @notice Gets all the function selectors provided by a facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view override returns (bytes4[] memory facetFunctionSelectors_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetFunctionSelectors_ = ds.facetFunctionSelectors[_facet].functionSelectors;\n }\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view override returns (address[] memory facetAddresses_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddresses_ = ds.facetAddresses;\n }\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view override returns (address facetAddress_) {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n facetAddress_ = ds.selectorToFacetAndPosition[_functionSelector].facetAddress;\n }\n}\n" + }, + "solc_0.8/diamond/facets/OwnershipFacet.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { LibDiamond } from \"../libraries/LibDiamond.sol\";\nimport { IERC173 } from \"../interfaces/IERC173.sol\";\n\ncontract OwnershipFacet is IERC173 {\n function transferOwnership(address _newOwner) external override {\n LibDiamond.enforceIsContractOwner();\n LibDiamond.setContractOwner(_newOwner);\n }\n\n function owner() external override view returns (address owner_) {\n owner_ = LibDiamond.contractOwner();\n }\n}\n" + }, + "solc_0.8/diamond/initializers/DiamondERC165Init.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {LibDiamond} from \"../libraries/LibDiamond.sol\";\nimport {IERC165} from \"../interfaces/IERC165.sol\";\n\ncontract DiamondERC165Init {\n /// @notice set or unset ERC165 using DiamondStorage.supportedInterfaces\n /// @param interfaceIds list of interface id to set as supported\n /// @param interfaceIdsToRemove list of interface id to unset as supported.\n /// Technically, you can remove support of ERC165 by having the IERC165 id itself being part of that array.\n function setERC165(bytes4[] calldata interfaceIds, bytes4[] calldata interfaceIdsToRemove) external {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n\n ds.supportedInterfaces[type(IERC165).interfaceId] = true;\n\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n ds.supportedInterfaces[interfaceIds[i]] = true;\n }\n\n for (uint256 i = 0; i < interfaceIdsToRemove.length; i++) {\n ds.supportedInterfaces[interfaceIdsToRemove[i]] = false;\n }\n }\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondCut.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\ninterface IDiamondCut {\n enum FacetCutAction {Add, Replace, Remove}\n // Add=0, Replace=1, Remove=2\n\n struct FacetCut {\n address facetAddress;\n FacetCutAction action;\n bytes4[] functionSelectors;\n }\n\n /// @notice Add/replace/remove any number of functions and optionally execute\n /// a function with delegatecall\n /// @param _diamondCut Contains the facet addresses and function selectors\n /// @param _init The address of the contract or facet to execute _calldata\n /// @param _calldata A function call, including function selector and arguments\n /// _calldata is executed with delegatecall on _init\n function diamondCut(\n FacetCut[] calldata _diamondCut,\n address _init,\n bytes calldata _calldata\n ) external;\n\n event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);\n}\n" + }, + "solc_0.8/diamond/interfaces/IDiamondLoupe.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\n\n// A loupe is a small magnifying glass used to look at diamonds.\n// These functions look at diamonds\ninterface IDiamondLoupe {\n /// These functions are expected to be called frequently\n /// by tools.\n\n struct Facet {\n address facetAddress;\n bytes4[] functionSelectors;\n }\n\n /// @notice Gets all facet addresses and their four byte function selectors.\n /// @return facets_ Facet\n function facets() external view returns (Facet[] memory facets_);\n\n /// @notice Gets all the function selectors supported by a specific facet.\n /// @param _facet The facet address.\n /// @return facetFunctionSelectors_\n function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);\n\n /// @notice Get all the facet addresses used by a diamond.\n /// @return facetAddresses_\n function facetAddresses() external view returns (address[] memory facetAddresses_);\n\n /// @notice Gets the facet that supports the given selector.\n /// @dev If facet is not found return address(0).\n /// @param _functionSelector The function selector.\n /// @return facetAddress_ The facet address.\n function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IERC165 {\n /// @notice Query if a contract implements an interface\n /// @param interfaceId The interface identifier, as specified in ERC-165\n /// @dev Interface identification is specified in ERC-165. This function\n /// uses less than 30,000 gas.\n /// @return `true` if the contract implements `interfaceID` and\n /// `interfaceID` is not 0xffffffff, `false` otherwise\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/diamond/interfaces/IERC173.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/// @title ERC-173 Contract Ownership Standard\n/// Note: the ERC-165 identifier for this interface is 0x7f5828d0\n/* is ERC165 */\ninterface IERC173 {\n /// @dev This emits when ownership of a contract changes.\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /// @notice Get the address of the owner\n /// @return owner_ The address of the owner.\n function owner() external view returns (address owner_);\n\n /// @notice Set the address of the new owner of the contract\n /// @dev Set _newOwner to address(0) to renounce any ownership.\n /// @param _newOwner The address of the new owner of the contract\n function transferOwnership(address _newOwner) external;\n}\n" + }, + "solc_0.8/diamond/libraries/LibDiamond.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/******************************************************************************\\\n* Author: Nick Mudge (https://twitter.com/mudgen)\n* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535\n/******************************************************************************/\nimport { IDiamondCut } from \"../interfaces/IDiamondCut.sol\";\n\nlibrary LibDiamond {\n bytes32 constant DIAMOND_STORAGE_POSITION = keccak256(\"diamond.standard.diamond.storage\");\n\n struct FacetAddressAndPosition {\n address facetAddress;\n uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array\n }\n\n struct FacetFunctionSelectors {\n bytes4[] functionSelectors;\n uint256 facetAddressPosition; // position of facetAddress in facetAddresses array\n }\n\n struct DiamondStorage {\n // maps function selector to the facet address and\n // the position of the selector in the facetFunctionSelectors.selectors array\n mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;\n // maps facet addresses to function selectors\n mapping(address => FacetFunctionSelectors) facetFunctionSelectors;\n // facet addresses\n address[] facetAddresses;\n // Used to query if a contract implements an interface.\n // Used to implement ERC-165.\n mapping(bytes4 => bool) supportedInterfaces;\n // owner of the contract\n address contractOwner;\n }\n\n function diamondStorage() internal pure returns (DiamondStorage storage ds) {\n bytes32 position = DIAMOND_STORAGE_POSITION;\n assembly {\n ds.slot := position\n }\n }\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n function setContractOwner(address _newOwner) internal {\n DiamondStorage storage ds = diamondStorage();\n address previousOwner = ds.contractOwner;\n ds.contractOwner = _newOwner;\n emit OwnershipTransferred(previousOwner, _newOwner);\n }\n\n function contractOwner() internal view returns (address contractOwner_) {\n contractOwner_ = diamondStorage().contractOwner;\n }\n\n function enforceIsContractOwner() internal view {\n require(msg.sender == diamondStorage().contractOwner, \"LibDiamond: Must be contract owner\");\n }\n\n event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);\n\n // Internal function version of diamondCut\n function diamondCut(\n IDiamondCut.FacetCut[] memory _diamondCut,\n address _init,\n bytes memory _calldata\n ) internal {\n for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {\n IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;\n if (action == IDiamondCut.FacetCutAction.Add) {\n addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Replace) {\n replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else if (action == IDiamondCut.FacetCutAction.Remove) {\n removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);\n } else {\n revert(\"LibDiamondCut: Incorrect FacetCutAction\");\n }\n }\n emit DiamondCut(_diamondCut, _init, _calldata);\n initializeDiamondCut(_init, _calldata);\n }\n\n function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage(); \n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress); \n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress == address(0), \"LibDiamondCut: Can't add function that already exists\");\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n require(_facetAddress != address(0), \"LibDiamondCut: Add facet can't be address(0)\");\n uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);\n // add new facet address if it does not exist\n if (selectorPosition == 0) {\n addFacet(ds, _facetAddress);\n }\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n require(oldFacetAddress != _facetAddress, \"LibDiamondCut: Can't replace function with same function\");\n removeFunction(ds, oldFacetAddress, selector);\n addFunction(ds, selector, selectorPosition, _facetAddress);\n selectorPosition++;\n }\n }\n\n function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {\n require(_functionSelectors.length > 0, \"LibDiamondCut: No selectors in facet to cut\");\n DiamondStorage storage ds = diamondStorage();\n // if function does not exist then do nothing and return\n require(_facetAddress == address(0), \"LibDiamondCut: Remove facet address must be address(0)\");\n for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {\n bytes4 selector = _functionSelectors[selectorIndex];\n address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;\n removeFunction(ds, oldFacetAddress, selector);\n }\n }\n\n function addFacet(DiamondStorage storage ds, address _facetAddress) internal {\n enforceHasContractCode(_facetAddress, \"LibDiamondCut: New facet has no code\");\n ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;\n ds.facetAddresses.push(_facetAddress);\n } \n\n\n function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {\n ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);\n ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;\n }\n\n function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { \n require(_facetAddress != address(0), \"LibDiamondCut: Can't remove function that doesn't exist\");\n // an immutable function is a function defined directly in a diamond\n require(_facetAddress != address(this), \"LibDiamondCut: Can't remove immutable function\");\n // replace selector with last selector, then delete last selector\n uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;\n uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;\n // if not the same then replace _selector with lastSelector\n if (selectorPosition != lastSelectorPosition) {\n bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];\n ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;\n ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);\n }\n // delete the last selector\n ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();\n delete ds.selectorToFacetAndPosition[_selector];\n\n // if no more selectors for facet address then delete the facet address\n if (lastSelectorPosition == 0) {\n // replace facet address with last facet address and delete last facet address\n uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;\n uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n if (facetAddressPosition != lastFacetAddressPosition) {\n address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];\n ds.facetAddresses[facetAddressPosition] = lastFacetAddress;\n ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;\n }\n ds.facetAddresses.pop();\n delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;\n }\n }\n\n function initializeDiamondCut(address _init, bytes memory _calldata) internal {\n if (_init == address(0)) {\n require(_calldata.length == 0, \"LibDiamondCut: _init is address(0) but_calldata is not empty\");\n } else {\n require(_calldata.length > 0, \"LibDiamondCut: _calldata is empty but _init is not address(0)\");\n if (_init != address(this)) {\n enforceHasContractCode(_init, \"LibDiamondCut: _init address has no code\");\n }\n (bool success, bytes memory error) = _init.delegatecall(_calldata);\n if (!success) {\n if (error.length > 0) {\n // bubble up the error\n revert(string(error));\n } else {\n revert(\"LibDiamondCut: _init function reverted\");\n }\n }\n }\n }\n\n function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {\n uint256 contractSize;\n assembly {\n contractSize := extcodesize(_contract)\n }\n require(contractSize > 0, _errorMessage);\n }\n}\n" + }, + "solc_0.8/diamond/UsingDiamondOwner.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./libraries/LibDiamond.sol\";\n\ncontract UsingDiamondOwner {\n modifier onlyOwner() {\n LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage();\n require(msg.sender == ds.contractOwner, \"Only owner is allowed to perform this action\");\n _;\n }\n}\n" + }, + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Clones.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/Clones.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for\n * deploying minimal proxy contracts, also known as \"clones\".\n *\n * > To simply and cheaply clone contract functionality in an immutable way, this standard specifies\n * > a minimal bytecode implementation that delegates all calls to a known, fixed address.\n *\n * The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`\n * (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the\n * deterministic method.\n *\n * _Available since v3.4._\n */\nlibrary Clones {\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create opcode, which should never revert.\n */\n function clone(address implementation) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create(0, ptr, 0x37)\n }\n require(instance != address(0), \"ERC1167: create failed\");\n }\n\n /**\n * @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.\n *\n * This function uses the create2 opcode and a `salt` to deterministically deploy\n * the clone. Using the same `implementation` and `salt` multiple time will revert, since\n * the clones cannot be deployed twice at the same address.\n */\n function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf30000000000000000000000000000000000)\n instance := create2(0, ptr, 0x37, salt)\n }\n require(instance != address(0), \"ERC1167: create2 failed\");\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(\n address implementation,\n bytes32 salt,\n address deployer\n ) internal pure returns (address predicted) {\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000000000000000000000)\n mstore(add(ptr, 0x14), shl(0x60, implementation))\n mstore(add(ptr, 0x28), 0x5af43d82803e903d91602b57fd5bf3ff00000000000000000000000000000000)\n mstore(add(ptr, 0x38), shl(0x60, deployer))\n mstore(add(ptr, 0x4c), salt)\n mstore(add(ptr, 0x6c), keccak256(ptr, 0x37))\n predicted := keccak256(add(ptr, 0x37), 0x55)\n }\n }\n\n /**\n * @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.\n */\n function predictDeterministicAddress(address implementation, bytes32 salt)\n internal\n view\n returns (address predicted)\n {\n return predictDeterministicAddress(implementation, salt, address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Checker.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Checker.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Library used to query support of an interface declared via {IERC165}.\n *\n * Note that these functions return the actual result of the query: they do not\n * `revert` if an interface is not supported. It is up to the caller to decide\n * what to do in these cases.\n */\nlibrary ERC165Checker {\n // As per the EIP-165 spec, no interface should ever match 0xffffffff\n bytes4 private constant _INTERFACE_ID_INVALID = 0xffffffff;\n\n /**\n * @dev Returns true if `account` supports the {IERC165} interface,\n */\n function supportsERC165(address account) internal view returns (bool) {\n // Any contract that implements ERC165 must explicitly indicate support of\n // InterfaceId_ERC165 and explicitly indicate non-support of InterfaceId_Invalid\n return\n _supportsERC165Interface(account, type(IERC165).interfaceId) &&\n !_supportsERC165Interface(account, _INTERFACE_ID_INVALID);\n }\n\n /**\n * @dev Returns true if `account` supports the interface defined by\n * `interfaceId`. Support for {IERC165} itself is queried automatically.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsInterface(address account, bytes4 interfaceId) internal view returns (bool) {\n // query support of both ERC165 as per the spec and support of _interfaceId\n return supportsERC165(account) && _supportsERC165Interface(account, interfaceId);\n }\n\n /**\n * @dev Returns a boolean array where each value corresponds to the\n * interfaces passed in and whether they're supported or not. This allows\n * you to batch check interfaces for a contract where your expectation\n * is that some interfaces may not be supported.\n *\n * See {IERC165-supportsInterface}.\n *\n * _Available since v3.4._\n */\n function getSupportedInterfaces(address account, bytes4[] memory interfaceIds)\n internal\n view\n returns (bool[] memory)\n {\n // an array of booleans corresponding to interfaceIds and whether they're supported or not\n bool[] memory interfaceIdsSupported = new bool[](interfaceIds.length);\n\n // query support of ERC165 itself\n if (supportsERC165(account)) {\n // query support of each interface in interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n interfaceIdsSupported[i] = _supportsERC165Interface(account, interfaceIds[i]);\n }\n }\n\n return interfaceIdsSupported;\n }\n\n /**\n * @dev Returns true if `account` supports all the interfaces defined in\n * `interfaceIds`. Support for {IERC165} itself is queried automatically.\n *\n * Batch-querying can lead to gas savings by skipping repeated checks for\n * {IERC165} support.\n *\n * See {IERC165-supportsInterface}.\n */\n function supportsAllInterfaces(address account, bytes4[] memory interfaceIds) internal view returns (bool) {\n // query support of ERC165 itself\n if (!supportsERC165(account)) {\n return false;\n }\n\n // query support of each interface in _interfaceIds\n for (uint256 i = 0; i < interfaceIds.length; i++) {\n if (!_supportsERC165Interface(account, interfaceIds[i])) {\n return false;\n }\n }\n\n // all interfaces supported\n return true;\n }\n\n /**\n * @notice Query if a contract implements an interface, does not check ERC165 support\n * @param account The address of the contract to query for support of an interface\n * @param interfaceId The interface identifier, as specified in ERC-165\n * @return true if the contract at account indicates support of the interface with\n * identifier interfaceId, false otherwise\n * @dev Assumes that account contains a contract that supports ERC165, otherwise\n * the behavior of this method is undefined. This precondition can be checked\n * with {supportsERC165}.\n * Interface identification is specified in ERC-165.\n */\n function _supportsERC165Interface(address account, bytes4 interfaceId) private view returns (bool) {\n bytes memory encodedParams = abi.encodeWithSelector(IERC165.supportsInterface.selector, interfaceId);\n (bool success, bytes memory result) = account.staticcall{gas: 30000}(encodedParams);\n if (result.length < 32) return false;\n return success && abi.decode(result, (bool));\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/ERC165Storage.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./ERC165.sol\";\n\n/**\n * @dev Storage based implementation of the {IERC165} interface.\n *\n * Contracts may inherit from this and call {_registerInterface} to declare\n * their support of an interface.\n */\nabstract contract ERC165Storage is ERC165 {\n /**\n * @dev Mapping of interface ids to whether or not it's supported.\n */\n mapping(bytes4 => bool) private _supportedInterfaces;\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId];\n }\n\n /**\n * @dev Registers the contract as an implementer of the interface defined by\n * `interfaceId`. Support of the actual ERC165 interface is automatic and\n * registering its interface id is not required.\n *\n * See {IERC165-supportsInterface}.\n *\n * Requirements:\n *\n * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`).\n */\n function _registerInterface(bytes4 interfaceId) internal virtual {\n require(interfaceId != 0xffffffff, \"ERC165: invalid interface id\");\n _supportedInterfaces[interfaceId] = true;\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/introspection/IERC165.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/EIP173Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./Proxy.sol\";\n\ninterface ERC165 {\n function supportsInterface(bytes4 id) external view returns (bool);\n}\n\n///@notice Proxy implementing EIP173 for ownership management\ncontract EIP173Proxy is Proxy {\n // ////////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n // /////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////////////\n\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable {\n _setOwner(ownerAddress);\n _setImplementation(implementationAddress, data);\n }\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n function owner() external view returns (address) {\n return _owner();\n }\n\n function supportsInterface(bytes4 id) external view returns (bool) {\n if (id == 0x01ffc9a7 || id == 0x7f5828d0) {\n return true;\n }\n if (id == 0xFFFFFFFF) {\n return false;\n }\n\n ERC165 implementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n implementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // Technically this is not standard compliant as ERC-165 require 30,000 gas which that call cannot ensure\n // because it is itself inside `supportsInterface` that might only get 30,000 gas.\n // In practise this is unlikely to be an issue.\n try implementation.supportsInterface(id) returns (bool support) {\n return support;\n } catch {\n return false;\n }\n }\n\n function transferOwnership(address newOwner) external onlyOwner {\n _setOwner(newOwner);\n }\n\n function upgradeTo(address newImplementation) external onlyOwner {\n _setImplementation(newImplementation, \"\");\n }\n\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable onlyOwner {\n _setImplementation(newImplementation, data);\n }\n\n // /////////////////////// MODIFIERS ////////////////////////////////////////////////////////////////////////\n\n modifier onlyOwner() {\n require(msg.sender == _owner(), \"NOT_AUTHORIZED\");\n _;\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _owner() internal view returns (address adminAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n adminAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n\n function _setOwner(address newOwner) internal {\n address previousOwner = _owner();\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103, newOwner)\n }\n emit OwnershipTransferred(previousOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/proxy/EIP173ProxyWithReceive.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport \"./EIP173Proxy.sol\";\n\n///@notice Proxy implementing EIP173 for ownership management that accept ETH via receive\ncontract EIP173ProxyWithReceive is EIP173Proxy {\n constructor(\n address implementationAddress,\n address ownerAddress,\n bytes memory data\n ) payable EIP173Proxy(implementationAddress, ownerAddress, data) {}\n\n receive() external payable override {}\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/proxy/Proxied.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nabstract contract Proxied {\n /// @notice to be used by initialisation / postUpgrade function so that only the proxy's admin can execute them\n /// It also allows these functions to be called inside a contructor\n /// even if the contract is meant to be used without proxy\n modifier proxied() {\n address proxyAdminAddress = _proxyAdmin();\n // With hardhat-deploy proxies\n // the proxyAdminAddress is zero only for the implementation contract\n // if the implementation contract want to be used as a standalone/immutable contract\n // it simply has to execute the `proxied` function\n // This ensure the proxyAdminAddress is never zero post deployment\n // And allow you to keep the same code for both proxied contract and immutable contract\n if (proxyAdminAddress == address(0)) {\n // ensure can not be called twice when used outside of proxy : no admin\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(\n 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103,\n 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\n )\n }\n } else {\n require(msg.sender == proxyAdminAddress);\n }\n _;\n }\n\n modifier onlyProxyAdmin() {\n require(msg.sender == _proxyAdmin(), \"NOT_AUTHORIZED\");\n _;\n }\n\n function _proxyAdmin() internal view returns (address ownerAddress) {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n ownerAddress := sload(0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103)\n }\n }\n}\n" + }, + "solc_0.8/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n// EIP-1967\nabstract contract Proxy {\n // /////////////////////// EVENTS ///////////////////////////////////////////////////////////////////////////\n\n event ProxyImplementationUpdated(address indexed previousImplementation, address indexed newImplementation);\n\n // ///////////////////// EXTERNAL ///////////////////////////////////////////////////////////////////////////\n\n receive() external payable virtual {\n revert(\"ETHER_REJECTED\"); // explicit reject by default\n }\n\n fallback() external payable {\n _fallback();\n }\n\n // ///////////////////////// INTERNAL //////////////////////////////////////////////////////////////////////\n\n function _fallback() internal {\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n let implementationAddress := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n calldatacopy(0x0, 0x0, calldatasize())\n let success := delegatecall(gas(), implementationAddress, 0x0, calldatasize(), 0, 0)\n let retSz := returndatasize()\n returndatacopy(0, 0, retSz)\n switch success\n case 0 {\n revert(0, retSz)\n }\n default {\n return(0, retSz)\n }\n }\n }\n\n function _setImplementation(address newImplementation, bytes memory data) internal {\n address previousImplementation;\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n previousImplementation := sload(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc)\n }\n\n // solhint-disable-next-line security/no-inline-assembly\n assembly {\n sstore(0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc, newImplementation)\n }\n\n emit ProxyImplementationUpdated(previousImplementation, newImplementation);\n\n if (data.length > 0) {\n (bool success, ) = newImplementation.delegatecall(data);\n if (!success) {\n assembly {\n // This assembly ensure the revert contains the exact string data\n let returnDataSize := returndatasize()\n returndatacopy(0, 0, returnDataSize)\n revert(0, returnDataSize)\n }\n }\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/projects/thridweb-query/deployments/polygon_amoy_testnet/solcInputs/e91e428fad7f11da8f23baddfcf53d1d.json b/projects/thridweb-query/deployments/polygon_amoy_testnet/solcInputs/e91e428fad7f11da8f23baddfcf53d1d.json new file mode 100644 index 000000000..2d328d9b7 --- /dev/null +++ b/projects/thridweb-query/deployments/polygon_amoy_testnet/solcInputs/e91e428fad7f11da8f23baddfcf53d1d.json @@ -0,0 +1,56 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts. Equivalent to `reinitializer(1)`.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * `initializer` is equivalent to `reinitializer(1)`, so a reinitializer may be used after the original\n * initialization step. This is essential to configure modules that are added through upgrades and that require\n * initialization.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/AddressUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\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 * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\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 function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts-upgradeable-4-7-3/utils/ContextUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n" + }, + "@thirdweb-dev/contracts/eip/interface/IERC20.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\n/**\n * @title ERC20 interface\n * @dev see https://github.com/ethereum/EIPs/issues/20\n */\ninterface IERC20 {\n function totalSupply() external view returns (uint256);\n\n function balanceOf(address who) external view returns (uint256);\n\n function allowance(address owner, address spender) external view returns (uint256);\n\n function transfer(address to, uint256 value) external returns (bool);\n\n function approve(address spender, uint256 value) external returns (bool);\n\n function transferFrom(\n address from,\n address to,\n uint256 value\n ) external returns (bool);\n\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "contracts/drop-reader/DropERC721Reader.sol": { + "content": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.11;\n\n/// @author rarible\n\n// /$$$$$$$ /$$ /$$ /$$\n// | $$__ $$ |__/| $$ | $$\n// | $$ \\ $$ /$$$$$$ /$$$$$$ /$$| $$$$$$$ | $$ /$$$$$$\n// | $$$$$$$/ |____ $$ /$$__ $$| $$| $$__ $$| $$ /$$__ $$\n// | $$__ $$ /$$$$$$$| $$ \\__/| $$| $$ \\ $$| $$| $$$$$$$$\n// | $$ \\ $$ /$$__ $$| $$ | $$| $$ | $$| $$| $$_____/\n// | $$ | $$| $$$$$$$| $$ | $$| $$$$$$$/| $$| $$$$$$$\n// |__/ |__/ \\_______/|__/ |__/|_______/ |__/ \\_______/\n\n\n// ========== Features ==========\n\nimport \"hardhat/console.sol\";\nimport \"@thirdweb-dev/contracts/eip/interface/IERC20.sol\";\n\nimport \"@openzeppelin/contracts-upgradeable-4-7-3/access/OwnableUpgradeable.sol\";\nimport \"./IDropERC721.sol\";\n\ncontract DropERC721Reader is Initializable, OwnableUpgradeable {\n\n enum FeeType {\n Bps,\n Flat\n }\n\n struct FeeData {\n address recipient;\n uint256 value;\n FeeType feeType;\n }\n\n struct GlobalData {\n uint256 totalMinted;\n uint256 claimedByUser;\n uint256 totalSupply;\n uint256 maxTotalSupply;\n uint256 nextTokenIdToMint;\n uint256 nextTokenIdToClaim;\n string name;\n string symbol;\n string contractURI;\n uint256 baseURICount;\n uint256 userBalance;\n uint256 blockTimeStamp;\n FeeData defaultRoyaltyInfo;\n FeeData platformFeeInfo;\n }\n\n address public native1;\n address public native2;\n\n function initialize(address _native1, address _native2, address initialOwner) public initializer {\n __Ownable_init();\n native1 = _native1;\n native2 = _native2;\n // Transfer ownership to the initial owner provided\n _transferOwnership(initialOwner);\n }\n\n function getAllData(\n address _dropERC721,\n address _claimer\n ) public view returns (\n uint256 activeClaimConditionIndex,\n IDropERC721.ClaimCondition[] memory conditions,\n GlobalData memory globalData\n ) {\n IDropERC721 drop = IDropERC721(_dropERC721);\n\n (uint256 startConditionIndex, uint256 stopConditionIndex) = drop.claimCondition();\n uint256 _claimedByUser = 0;\n if(stopConditionIndex != 0) {\n try drop.getActiveClaimConditionId() returns (uint256 _activeClaimConditionIndex) {\n activeClaimConditionIndex = _activeClaimConditionIndex;\n } catch {\n activeClaimConditionIndex = 0;\n }\n conditions = new IDropERC721.ClaimCondition[](stopConditionIndex);\n \n for (uint i = 0; i < stopConditionIndex; i++) {\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(i);\n conditions[i] = condition;\n }\n }\n\n DropERC721Reader.GlobalData memory _globalData;\n if(stopConditionIndex > 0) {\n _claimedByUser = drop.getSupplyClaimedByWallet(activeClaimConditionIndex, _claimer);\n IDropERC721.ClaimCondition memory condition = drop.getClaimConditionById(activeClaimConditionIndex);\n if(condition.currency == native1 || condition.currency == native2) {\n _globalData.userBalance = _claimer.balance;\n } else {\n _globalData.userBalance = IERC20(condition.currency).balanceOf(_claimer);\n }\n\n }\n\n _globalData.totalMinted = drop.totalMinted();\n _globalData.claimedByUser = _claimedByUser;\n _globalData.totalSupply = drop.totalSupply();\n try drop.maxTotalSupply() returns (uint maxTotalSupply) {\n _globalData.maxTotalSupply = maxTotalSupply;\n } catch {\n _globalData.maxTotalSupply = 0;\n } \n _globalData.nextTokenIdToMint = drop.nextTokenIdToMint();\n _globalData.nextTokenIdToClaim = drop.nextTokenIdToClaim();\n _globalData.name = drop.name();\n _globalData.symbol = drop.symbol();\n _globalData.contractURI = drop.contractURI();\n try drop.getBaseURICount() returns (uint baseURICount) {\n _globalData.baseURICount = baseURICount;\n } catch {\n _globalData.baseURICount = 0;\n }\n \n _globalData.blockTimeStamp = block.timestamp;\n\n (address rAddress, uint16 rBps) = drop.getDefaultRoyaltyInfo();\n _globalData.defaultRoyaltyInfo.recipient = rAddress;\n _globalData.defaultRoyaltyInfo.value = rBps;\n _globalData.defaultRoyaltyInfo.feeType = FeeType.Bps;\n\n IDropERC721.PlatformFeeType feeType = IDropERC721.PlatformFeeType.Bps;\n try drop.getPlatformFeeType() returns (IDropERC721.PlatformFeeType resultFeeType) {\n feeType = resultFeeType;\n } catch {\n feeType = IDropERC721.PlatformFeeType.Bps;\n }\n \n if (feeType == IDropERC721.PlatformFeeType.Flat) {\n (address pAddress, uint256 pValue) = drop.getFlatPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.value = pValue;\n _globalData.platformFeeInfo.feeType = FeeType.Flat;\n } else {\n (address pAddress, uint16 pBps) = drop.getPlatformFeeInfo();\n _globalData.platformFeeInfo.recipient = pAddress;\n _globalData.platformFeeInfo.value = pBps;\n _globalData.platformFeeInfo.feeType = FeeType.Bps;\n }\n\n return (activeClaimConditionIndex, conditions, _globalData);\n }\n}" + }, + "contracts/drop-reader/IDropERC721.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDropERC721 {\n /**\n * @param proof Proof of concerned wallet's inclusion in an allowlist.\n * @param quantityLimitPerWallet The total quantity of tokens the allowlisted wallet is eligible to claim over time.\n * @param pricePerToken The price per token the allowlisted wallet must pay to claim tokens.\n * @param currency The currency in which the allowlisted wallet must pay the price for claiming tokens.\n */\n struct AllowlistProof {\n bytes32[] proof;\n uint256 quantityLimitPerWallet;\n uint256 pricePerToken;\n address currency;\n }\n\n // This struct describes a single claim condition\n struct ClaimCondition {\n uint256 startTimestamp;\n uint256 maxClaimableSupply;\n uint256 supplyClaimed;\n uint256 quantityLimitPerWallet;\n bytes32 merkleRoot;\n uint256 pricePerToken;\n address currency;\n string metadata;\n }\n\n // Events\n event ClaimConditionsUpdated(\n ClaimCondition[] claimConditions,\n bool resetEligibility\n );\n\n event TokensClaimed(\n uint256 indexed claimConditionIndex,\n address indexed claimer,\n address indexed receiver,\n uint256 startTokenId,\n uint256 quantityClaimed\n );\n\n // Enums\n enum PlatformFeeType {\n Bps,\n Flat\n }\n\n // View functions for global data\n function totalMinted() external view returns (uint256);\n function totalSupply() external view returns (uint256);\n function maxTotalSupply() external view returns (uint256);\n function nextTokenIdToMint() external view returns (uint256);\n function nextTokenIdToClaim() external view returns (uint256);\n function name() external view returns (string memory);\n function symbol() external view returns (string memory);\n function contractURI() external view returns (string memory);\n function getBaseURICount() external view returns (uint256);\n function getDefaultRoyaltyInfo() external view returns (address, uint16);\n function getPlatformFeeType() external view returns (PlatformFeeType);\n function getPlatformFeeInfo() external view returns (address, uint16);\n function getFlatPlatformFeeInfo() external view returns (address, uint256);\n\n // Specific claim condition methods\n function claimCondition() external view returns (uint256 currentStartId, uint256 count);\n function getClaimConditionById(uint256 _conditionId) external view returns (ClaimCondition memory condition);\n function getActiveClaimConditionId() external view returns (uint256);\n function getSupplyClaimedByWallet(uint256 _conditionId, address _claimer) external view returns (uint256);\n function verifyClaim(\n uint256 _conditionId,\n address _claimer,\n uint256 _quantity,\n address _currency,\n uint256 _pricePerToken,\n AllowlistProof calldata _allowlistProof\n ) external view returns (bool isOverride);\n}\n" + }, + "hardhat/console.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity >=0.4.22 <0.9.0;\n\nlibrary console {\n address constant CONSOLE_ADDRESS =\n 0x000000000000000000636F6e736F6c652e6c6f67;\n\n function _sendLogPayloadImplementation(bytes memory payload) internal view {\n address consoleAddress = CONSOLE_ADDRESS;\n /// @solidity memory-safe-assembly\n assembly {\n pop(\n staticcall(\n gas(),\n consoleAddress,\n add(payload, 32),\n mload(payload),\n 0,\n 0\n )\n )\n }\n }\n\n function _castToPure(\n function(bytes memory) internal view fnIn\n ) internal pure returns (function(bytes memory) pure fnOut) {\n assembly {\n fnOut := fnIn\n }\n }\n\n function _sendLogPayload(bytes memory payload) internal pure {\n _castToPure(_sendLogPayloadImplementation)(payload);\n }\n\n function log() internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log()\"));\n }\n function logInt(int256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(int256)\", p0));\n }\n\n function logUint(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function logString(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function logBool(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function logAddress(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function logBytes(bytes memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes)\", p0));\n }\n\n function logBytes1(bytes1 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes1)\", p0));\n }\n\n function logBytes2(bytes2 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes2)\", p0));\n }\n\n function logBytes3(bytes3 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes3)\", p0));\n }\n\n function logBytes4(bytes4 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes4)\", p0));\n }\n\n function logBytes5(bytes5 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes5)\", p0));\n }\n\n function logBytes6(bytes6 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes6)\", p0));\n }\n\n function logBytes7(bytes7 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes7)\", p0));\n }\n\n function logBytes8(bytes8 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes8)\", p0));\n }\n\n function logBytes9(bytes9 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes9)\", p0));\n }\n\n function logBytes10(bytes10 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes10)\", p0));\n }\n\n function logBytes11(bytes11 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes11)\", p0));\n }\n\n function logBytes12(bytes12 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes12)\", p0));\n }\n\n function logBytes13(bytes13 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes13)\", p0));\n }\n\n function logBytes14(bytes14 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes14)\", p0));\n }\n\n function logBytes15(bytes15 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes15)\", p0));\n }\n\n function logBytes16(bytes16 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes16)\", p0));\n }\n\n function logBytes17(bytes17 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes17)\", p0));\n }\n\n function logBytes18(bytes18 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes18)\", p0));\n }\n\n function logBytes19(bytes19 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes19)\", p0));\n }\n\n function logBytes20(bytes20 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes20)\", p0));\n }\n\n function logBytes21(bytes21 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes21)\", p0));\n }\n\n function logBytes22(bytes22 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes22)\", p0));\n }\n\n function logBytes23(bytes23 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes23)\", p0));\n }\n\n function logBytes24(bytes24 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes24)\", p0));\n }\n\n function logBytes25(bytes25 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes25)\", p0));\n }\n\n function logBytes26(bytes26 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes26)\", p0));\n }\n\n function logBytes27(bytes27 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes27)\", p0));\n }\n\n function logBytes28(bytes28 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes28)\", p0));\n }\n\n function logBytes29(bytes29 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes29)\", p0));\n }\n\n function logBytes30(bytes30 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes30)\", p0));\n }\n\n function logBytes31(bytes31 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes31)\", p0));\n }\n\n function logBytes32(bytes32 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bytes32)\", p0));\n }\n\n function log(uint256 p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256)\", p0));\n }\n\n function log(string memory p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string)\", p0));\n }\n\n function log(bool p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool)\", p0));\n }\n\n function log(address p0) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address)\", p0));\n }\n\n function log(uint256 p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256)\", p0, p1));\n }\n\n function log(uint256 p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string)\", p0, p1));\n }\n\n function log(uint256 p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool)\", p0, p1));\n }\n\n function log(uint256 p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address)\", p0, p1));\n }\n\n function log(string memory p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256)\", p0, p1));\n }\n\n function log(string memory p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string)\", p0, p1));\n }\n\n function log(string memory p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool)\", p0, p1));\n }\n\n function log(string memory p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address)\", p0, p1));\n }\n\n function log(bool p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256)\", p0, p1));\n }\n\n function log(bool p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string)\", p0, p1));\n }\n\n function log(bool p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool)\", p0, p1));\n }\n\n function log(bool p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address)\", p0, p1));\n }\n\n function log(address p0, uint256 p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256)\", p0, p1));\n }\n\n function log(address p0, string memory p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string)\", p0, p1));\n }\n\n function log(address p0, bool p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool)\", p0, p1));\n }\n\n function log(address p0, address p1) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address)\", p0, p1));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool)\", p0, p1, p2));\n }\n\n function log(uint256 p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool)\", p0, p1, p2));\n }\n\n function log(string memory p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool)\", p0, p1, p2));\n }\n\n function log(bool p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool)\", p0, p1, p2));\n }\n\n function log(address p0, uint256 p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool)\", p0, p1, p2));\n }\n\n function log(address p0, string memory p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool)\", p0, p1, p2));\n }\n\n function log(address p0, bool p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, uint256 p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, string memory p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, bool p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool)\", p0, p1, p2));\n }\n\n function log(address p0, address p1, address p2) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address)\", p0, p1, p2));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(uint256 p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(uint256,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(string memory p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(string,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(bool p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(bool,address,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, uint256 p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,uint256,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, string memory p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,string,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, bool p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,bool,address,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, uint256 p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,uint256,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, string memory p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,string,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, bool p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,bool,address)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, uint256 p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,uint256)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, string memory p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,string)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, bool p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,bool)\", p0, p1, p2, p3));\n }\n\n function log(address p0, address p1, address p2, address p3) internal pure {\n _sendLogPayload(abi.encodeWithSignature(\"log(address,address,address,address)\", p0, p1, p2, p3));\n }\n\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file